Skip to content

Commit 92c0e5b

Browse files
authored
Simplify and future-proof numba import in spa.py (#1944)
* remove numba version checking code * set minimum numba in setup.py requirements * remove same version check code in test_spa.py * linter * fix numba version check in `conftest.py` * add `noqa: F401` to other import checks * set minimum numba in pyproject.toml
1 parent ee9b24a commit 92c0e5b

File tree

5 files changed

+17
-41
lines changed

5 files changed

+17
-41
lines changed

pvlib/spa.py

+3-11
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,15 @@ def nocompile(*args, **kwargs):
2121

2222
if os.getenv('PVLIB_USE_NUMBA', '0') != '0':
2323
try:
24-
from numba import jit, __version__
24+
from numba import jit
2525
except ImportError:
2626
warnings.warn('Could not import numba, falling back to numpy ' +
2727
'calculation')
2828
jcompile = nocompile
2929
USE_NUMBA = False
3030
else:
31-
major, minor = __version__.split('.')[:2]
32-
if int(major + minor) >= 17:
33-
# need at least numba >= 0.17.0
34-
jcompile = jit
35-
USE_NUMBA = True
36-
else:
37-
warnings.warn('Numba version must be >= 0.17.0, falling back to ' +
38-
'numpy')
39-
jcompile = nocompile
40-
USE_NUMBA = False
31+
jcompile = jit
32+
USE_NUMBA = True
4133
else:
4234
jcompile = nocompile
4335
USE_NUMBA = False

pvlib/tests/conftest.py

+8-14
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def assert_frame_equal(left, right, **kwargs):
119119

120120

121121
try:
122-
import ephem
122+
import ephem # noqa: F401
123123
has_ephem = True
124124
except ImportError:
125125
has_ephem = False
@@ -129,7 +129,7 @@ def assert_frame_equal(left, right, **kwargs):
129129

130130
def has_spa_c():
131131
try:
132-
from pvlib.spa_c_files.spa_py import spa_calc
132+
from pvlib.spa_c_files.spa_py import spa_calc # noqa: F401
133133
except ImportError:
134134
return False
135135
else:
@@ -139,20 +139,14 @@ def has_spa_c():
139139
requires_spa_c = pytest.mark.skipif(not has_spa_c(), reason="requires spa_c")
140140

141141

142-
def has_numba():
143-
try:
144-
import numba
145-
except ImportError:
146-
return False
147-
else:
148-
vers = numba.__version__.split('.')
149-
if int(vers[0] + vers[1]) < 17:
150-
return False
151-
else:
152-
return True
142+
try:
143+
import numba # noqa: F401
144+
has_numba = True
145+
except ImportError:
146+
has_numba = False
153147

154148

155-
requires_numba = pytest.mark.skipif(not has_numba(), reason="requires numba")
149+
requires_numba = pytest.mark.skipif(not has_numba, reason="requires numba")
156150

157151

158152
try:

pvlib/tests/test_spa.py

+5-15
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,7 @@
1515
import pandas as pd
1616

1717
import unittest
18-
import pytest
19-
20-
21-
try:
22-
from numba import __version__ as numba_version
23-
numba_version_int = int(numba_version.split('.')[0] +
24-
numba_version.split('.')[1])
25-
except ImportError:
26-
numba_version_int = 0
18+
from .conftest import requires_numba
2719

2820

2921
times = (pd.date_range('2003-10-17 12:30:30', periods=1, freq='D')
@@ -390,17 +382,15 @@ def test_julian_day(self):
390382
assert_almost_equal(JD, self.spa.julian_day(unixtimes)[0], 6)
391383

392384

393-
@pytest.mark.skipif(numba_version_int < 17,
394-
reason='Numba not installed or version not >= 0.17.0')
385+
@requires_numba
395386
class NumbaSpaTest(unittest.TestCase, SpaBase):
396387
"""Import spa, compiling to numba, and run tests"""
397388
@classmethod
398389
def setUpClass(self):
399390
os.environ['PVLIB_USE_NUMBA'] = '1'
400-
if numba_version_int >= 17:
401-
import pvlib.spa as spa
402-
spa = reload(spa)
403-
self.spa = spa
391+
import pvlib.spa as spa
392+
spa = reload(spa)
393+
self.spa = spa
404394

405395
@classmethod
406396
def tearDownClass(self):

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ optional = [
5151
'cython',
5252
'ephem',
5353
'nrel-pysam',
54-
'numba',
54+
'numba >= 0.17.0',
5555
'solarfactors',
5656
'statsmodels',
5757
]

setup.py

100755100644
File mode changed.

0 commit comments

Comments
 (0)