From f76bfebe5580e6e38c677946aa28c8d6db3f0130 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Wed, 18 Aug 2021 10:49:15 -0600 Subject: [PATCH 01/19] make tables a required dep, remove requires_tables test decorator --- pvlib/tests/conftest.py | 9 --------- pvlib/tests/test_clearsky.py | 9 +-------- pvlib/tests/test_location.py | 3 +-- pvlib/tests/test_modelchain.py | 6 +----- setup.py | 5 +++-- 5 files changed, 6 insertions(+), 26 deletions(-) diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py index a3cba1e7b8..b3e9fcd5a1 100644 --- a/pvlib/tests/conftest.py +++ b/pvlib/tests/conftest.py @@ -105,15 +105,6 @@ def assert_frame_equal(left, right, **kwargs): not has_statsmodels, reason='requires statsmodels') -try: - import tables - has_tables = True -except ImportError: - has_tables = False - -requires_tables = pytest.mark.skipif(not has_tables, reason='requires tables') - - try: import ephem has_ephem = True diff --git a/pvlib/tests/test_clearsky.py b/pvlib/tests/test_clearsky.py index 1e7d89d82d..15fc74e383 100644 --- a/pvlib/tests/test_clearsky.py +++ b/pvlib/tests/test_clearsky.py @@ -16,7 +16,7 @@ from pvlib import atmosphere from pvlib import irradiance -from .conftest import requires_tables, DATA_DIR +from .conftest import DATA_DIR def test_ineichen_series(): @@ -189,7 +189,6 @@ def test_ineichen_altitude(): assert_frame_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -202,7 +201,6 @@ def test_lookup_linke_turbidity(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_leapyear(): times = pd.date_range(start='2016-06-24', end='2016-06-25', freq='12h', tz='America/Phoenix') @@ -215,7 +213,6 @@ def test_lookup_linke_turbidity_leapyear(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_nointerp(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -226,7 +223,6 @@ def test_lookup_linke_turbidity_nointerp(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_months(): times = pd.date_range(start='2014-04-01', end='2014-07-01', freq='1M', tz='America/Phoenix') @@ -237,7 +233,6 @@ def test_lookup_linke_turbidity_months(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_months_leapyear(): times = pd.date_range(start='2016-04-01', end='2016-07-01', freq='1M', tz='America/Phoenix') @@ -248,7 +243,6 @@ def test_lookup_linke_turbidity_months_leapyear(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_nointerp_months(): times = pd.date_range(start='2014-04-10', end='2014-07-10', freq='1M', tz='America/Phoenix') @@ -480,7 +474,6 @@ def test_simplified_solis_nans_series(): assert_frame_equal(expected, out) -@requires_tables def test_linke_turbidity_corners(): """Test Linke turbidity corners out of bounds.""" months = pd.DatetimeIndex('%d/1/2016' % (m + 1) for m in range(12)) diff --git a/pvlib/tests/test_location.py b/pvlib/tests/test_location.py index 20a849a667..a4b69e5cb2 100644 --- a/pvlib/tests/test_location.py +++ b/pvlib/tests/test_location.py @@ -15,7 +15,7 @@ from pvlib.location import Location from pvlib.solarposition import declination_spencer71 from pvlib.solarposition import equation_of_time_spencer71 -from .conftest import requires_ephem, requires_tables +from .conftest import requires_ephem def test_location_required(): @@ -77,7 +77,6 @@ def times(): freq='3H') -@requires_tables def test_get_clearsky(mocker, times): tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson') m = mocker.spy(pvlib.clearsky, 'ineichen') diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index 86b7411d0f..b42acfa54e 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -13,7 +13,7 @@ from .conftest import assert_series_equal, assert_frame_equal import pytest -from .conftest import fail_on_pvlib_version, requires_tables +from .conftest import fail_on_pvlib_version @pytest.fixture(scope='function') @@ -1788,7 +1788,6 @@ def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): mc.aoi = 5 -@requires_tables def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1810,7 +1809,6 @@ def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, assert_series_equal(ac, expected) -@requires_tables def test_basic_chain_altitude_pressure(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1861,7 +1859,6 @@ def test_complete_irradiance_clean_run(sapm_dc_snl_ac_system, location): pd.Series([9, 5], index=times, name='ghi')) -@requires_tables def test_complete_irradiance(sapm_dc_snl_ac_system, location): """Check calculations""" mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1890,7 +1887,6 @@ def test_complete_irradiance(sapm_dc_snl_ac_system, location): @pytest.mark.filterwarnings("ignore:This function is not safe at the moment") @pytest.mark.parametrize("input_type", [tuple, list]) -@requires_tables def test_complete_irradiance_arrays( sapm_dc_snl_ac_system_same_arrays, location, input_type): """ModelChain.complete_irradiance can accept a tuple of weather diff --git a/setup.py b/setup.py index 216dc34a28..6dd1242744 100755 --- a/setup.py +++ b/setup.py @@ -42,7 +42,8 @@ 'pandas >= 0.22.0', 'pytz', 'requests', - 'scipy >= 1.2.0'] + 'scipy >= 1.2.0', + 'tables'] # include dataclasses as a dependency only on python 3.6 if sys.version_info.major == 3 and sys.version_info.minor == 6: @@ -53,7 +54,7 @@ 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', - 'pvfactors', 'siphon', 'statsmodels', 'tables', + 'pvfactors', 'siphon', 'statsmodels', 'cftime >= 1.1.1'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2', From 636da6885d28040a9839195b55b75e4bf5d2f204 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Wed, 18 Aug 2021 10:53:52 -0600 Subject: [PATCH 02/19] whatsnew --- docs/sphinx/source/whatsnew/v0.9.0.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index ed804160ac..f8d52e7e30 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -229,7 +229,8 @@ Documentation Requirements ~~~~~~~~~~~~ -* ``dataclasses`` is required for python 3.6 +* ``dataclasses`` is required for python 3.6 (:pull:`1076`) +* ``tables`` is now required instead of optional (:issue:`1286`, :pull:`1287`) Contributors ~~~~~~~~~~~~ From 9424e8695fc84a91479834a7d349e7cf046d1a16 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Wed, 18 Aug 2021 10:57:48 -0600 Subject: [PATCH 03/19] add tables to 3.6-min yml --- ci/requirements-py36-min.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 84adcb360d..9bbec66ad8 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -5,6 +5,7 @@ dependencies: - coveralls - nose - pip + - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock From 74634284fed5142531fdef7af98900a0631ce333 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Wed, 18 Aug 2021 12:07:48 -0600 Subject: [PATCH 04/19] use pip for tables on 3.6 and 3.7 for windows DLL load issue --- ci/requirements-py36.yml | 3 ++- ci/requirements-py37.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index c49455119f..d7246d9e98 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -12,7 +12,7 @@ dependencies: - numpy >= 1.12.0 - pandas >= 0.22.0 - pip - - pytables # tables when using pip+PyPI + # - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -31,3 +31,4 @@ dependencies: - dataclasses - nrel-pysam>=2.0 - pvfactors==1.4.1 + - tables # conda package has some DLL load issue on Windows \ No newline at end of file diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index 3203b004d1..9646910c88 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -12,7 +12,7 @@ dependencies: - numpy >= 1.12.0 - pandas >= 0.22.0 - pip - - pytables # tables when using pip+PyPI + # - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -30,3 +30,4 @@ dependencies: - pip: - nrel-pysam>=2.0 - pvfactors==1.4.1 + - tables # conda package has some DLL load issue on Windows \ No newline at end of file From a8d81bb482ea119d74f76497a7a7b40ec462e9e4 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Wed, 18 Aug 2021 12:08:15 -0600 Subject: [PATCH 05/19] use pip tables on 3.6-min for numpy compat issue --- ci/requirements-py36-min.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 9bbec66ad8..1d159f125e 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -5,7 +5,7 @@ dependencies: - coveralls - nose - pip - - pytables # tables when using pip+PyPI + # - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -18,6 +18,7 @@ dependencies: - numpy==1.12.0 - pandas==0.22.0 - scipy==1.2.0 + - tables # numpy incompatibility when using conda - pytest-rerunfailures # conda version is >3.6 - pytest-remotedata # conda package is 0.3.0, needs > 0.3.1 - requests-mock From 8ebaefeaea4937a592c51729e52577ae66632fa6 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 12:03:15 -0600 Subject: [PATCH 06/19] only install tables by default if not (OSX & 3.9) --- setup.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 6dd1242744..bfde6baea8 100755 --- a/setup.py +++ b/setup.py @@ -43,18 +43,24 @@ 'pytz', 'requests', 'scipy >= 1.2.0', - 'tables'] + ] # include dataclasses as a dependency only on python 3.6 if sys.version_info.major == 3 and sys.version_info.minor == 6: INSTALL_REQUIRES.append('dataclasses') +# python 3.9 OS X wheels are not available on pypi yet +# https://github.com/pvlib/pvlib-python/pull/1287 +if not (sys.version_info.major == 3 and sys.version_info.major >= 9): + INSTALL_REQUIRES.append('tables') + + TESTS_REQUIRE = ['nose', 'pytest', 'pytest-cov', 'pytest-mock', 'requests-mock', 'pytest-timeout', 'pytest-rerunfailures', 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', - 'pvfactors', 'siphon', 'statsmodels', + 'pvfactors', 'siphon', 'statsmodels', 'tables', 'cftime >= 1.1.1'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2', From ec216a59652855cb4fca2e0cc710009a7dcc2656 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 12:03:30 -0600 Subject: [PATCH 07/19] remove tables from 3.6-min --- ci/requirements-py36-min.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 1d159f125e..5f001b6258 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -18,7 +18,6 @@ dependencies: - numpy==1.12.0 - pandas==0.22.0 - scipy==1.2.0 - - tables # numpy incompatibility when using conda - pytest-rerunfailures # conda version is >3.6 - pytest-remotedata # conda package is 0.3.0, needs > 0.3.1 - requests-mock From 674dab5651341e977bdd1bf4592d3cee0f26a044 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 12:13:58 -0600 Subject: [PATCH 08/19] forgot the OS X part --- setup.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index bfde6baea8..1edb36e905 100755 --- a/setup.py +++ b/setup.py @@ -51,7 +51,9 @@ # python 3.9 OS X wheels are not available on pypi yet # https://github.com/pvlib/pvlib-python/pull/1287 -if not (sys.version_info.major == 3 and sys.version_info.major >= 9): +if not (sys.version_info.major == 3 and + sys.version_info.major >= 9 and + sys.platform == 'darwin'): INSTALL_REQUIRES.append('tables') From b4b539f3a403857238d7b4a3fce7c5603a5388e0 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 12:15:42 -0600 Subject: [PATCH 09/19] put back requires_tables decorator --- pvlib/tests/conftest.py | 9 +++++++++ pvlib/tests/test_clearsky.py | 9 ++++++++- pvlib/tests/test_location.py | 3 ++- pvlib/tests/test_modelchain.py | 6 +++++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py index b3e9fcd5a1..a3cba1e7b8 100644 --- a/pvlib/tests/conftest.py +++ b/pvlib/tests/conftest.py @@ -105,6 +105,15 @@ def assert_frame_equal(left, right, **kwargs): not has_statsmodels, reason='requires statsmodels') +try: + import tables + has_tables = True +except ImportError: + has_tables = False + +requires_tables = pytest.mark.skipif(not has_tables, reason='requires tables') + + try: import ephem has_ephem = True diff --git a/pvlib/tests/test_clearsky.py b/pvlib/tests/test_clearsky.py index 15fc74e383..1e7d89d82d 100644 --- a/pvlib/tests/test_clearsky.py +++ b/pvlib/tests/test_clearsky.py @@ -16,7 +16,7 @@ from pvlib import atmosphere from pvlib import irradiance -from .conftest import DATA_DIR +from .conftest import requires_tables, DATA_DIR def test_ineichen_series(): @@ -189,6 +189,7 @@ def test_ineichen_altitude(): assert_frame_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -201,6 +202,7 @@ def test_lookup_linke_turbidity(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_leapyear(): times = pd.date_range(start='2016-06-24', end='2016-06-25', freq='12h', tz='America/Phoenix') @@ -213,6 +215,7 @@ def test_lookup_linke_turbidity_leapyear(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_nointerp(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -223,6 +226,7 @@ def test_lookup_linke_turbidity_nointerp(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_months(): times = pd.date_range(start='2014-04-01', end='2014-07-01', freq='1M', tz='America/Phoenix') @@ -233,6 +237,7 @@ def test_lookup_linke_turbidity_months(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_months_leapyear(): times = pd.date_range(start='2016-04-01', end='2016-07-01', freq='1M', tz='America/Phoenix') @@ -243,6 +248,7 @@ def test_lookup_linke_turbidity_months_leapyear(): assert_series_equal(expected, out) +@requires_tables def test_lookup_linke_turbidity_nointerp_months(): times = pd.date_range(start='2014-04-10', end='2014-07-10', freq='1M', tz='America/Phoenix') @@ -474,6 +480,7 @@ def test_simplified_solis_nans_series(): assert_frame_equal(expected, out) +@requires_tables def test_linke_turbidity_corners(): """Test Linke turbidity corners out of bounds.""" months = pd.DatetimeIndex('%d/1/2016' % (m + 1) for m in range(12)) diff --git a/pvlib/tests/test_location.py b/pvlib/tests/test_location.py index a4b69e5cb2..20a849a667 100644 --- a/pvlib/tests/test_location.py +++ b/pvlib/tests/test_location.py @@ -15,7 +15,7 @@ from pvlib.location import Location from pvlib.solarposition import declination_spencer71 from pvlib.solarposition import equation_of_time_spencer71 -from .conftest import requires_ephem +from .conftest import requires_ephem, requires_tables def test_location_required(): @@ -77,6 +77,7 @@ def times(): freq='3H') +@requires_tables def test_get_clearsky(mocker, times): tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson') m = mocker.spy(pvlib.clearsky, 'ineichen') diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index b42acfa54e..86b7411d0f 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -13,7 +13,7 @@ from .conftest import assert_series_equal, assert_frame_equal import pytest -from .conftest import fail_on_pvlib_version +from .conftest import fail_on_pvlib_version, requires_tables @pytest.fixture(scope='function') @@ -1788,6 +1788,7 @@ def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): mc.aoi = 5 +@requires_tables def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1809,6 +1810,7 @@ def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, assert_series_equal(ac, expected) +@requires_tables def test_basic_chain_altitude_pressure(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1859,6 +1861,7 @@ def test_complete_irradiance_clean_run(sapm_dc_snl_ac_system, location): pd.Series([9, 5], index=times, name='ghi')) +@requires_tables def test_complete_irradiance(sapm_dc_snl_ac_system, location): """Check calculations""" mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1887,6 +1890,7 @@ def test_complete_irradiance(sapm_dc_snl_ac_system, location): @pytest.mark.filterwarnings("ignore:This function is not safe at the moment") @pytest.mark.parametrize("input_type", [tuple, list]) +@requires_tables def test_complete_irradiance_arrays( sapm_dc_snl_ac_system_same_arrays, location, input_type): """ModelChain.complete_irradiance can accept a tuple of weather From 35e1c93b8711d579a812274bbcf9744aa27595d4 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 12:25:41 -0600 Subject: [PATCH 10/19] fix silly bug --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1edb36e905..73d1c42d8b 100755 --- a/setup.py +++ b/setup.py @@ -52,7 +52,7 @@ # python 3.9 OS X wheels are not available on pypi yet # https://github.com/pvlib/pvlib-python/pull/1287 if not (sys.version_info.major == 3 and - sys.version_info.major >= 9 and + sys.version_info.minor >= 9 and sys.platform == 'darwin'): INSTALL_REQUIRES.append('tables') From b70ae5054cb4f3f272ff96e0abf918c62643c400 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 15:17:56 -0600 Subject: [PATCH 11/19] reset back to 636da68 --- ci/requirements-py36-min.yml | 1 - ci/requirements-py36.yml | 3 +-- ci/requirements-py37.yml | 3 +-- pvlib/tests/conftest.py | 9 --------- pvlib/tests/test_clearsky.py | 9 +-------- pvlib/tests/test_location.py | 3 +-- pvlib/tests/test_modelchain.py | 6 +----- setup.py | 12 ++---------- 8 files changed, 7 insertions(+), 39 deletions(-) diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 5f001b6258..84adcb360d 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -5,7 +5,6 @@ dependencies: - coveralls - nose - pip - # - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index d7246d9e98..c49455119f 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -12,7 +12,7 @@ dependencies: - numpy >= 1.12.0 - pandas >= 0.22.0 - pip - # - pytables # tables when using pip+PyPI + - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -31,4 +31,3 @@ dependencies: - dataclasses - nrel-pysam>=2.0 - pvfactors==1.4.1 - - tables # conda package has some DLL load issue on Windows \ No newline at end of file diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index 9646910c88..3203b004d1 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -12,7 +12,7 @@ dependencies: - numpy >= 1.12.0 - pandas >= 0.22.0 - pip - # - pytables # tables when using pip+PyPI + - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock @@ -30,4 +30,3 @@ dependencies: - pip: - nrel-pysam>=2.0 - pvfactors==1.4.1 - - tables # conda package has some DLL load issue on Windows \ No newline at end of file diff --git a/pvlib/tests/conftest.py b/pvlib/tests/conftest.py index a3cba1e7b8..b3e9fcd5a1 100644 --- a/pvlib/tests/conftest.py +++ b/pvlib/tests/conftest.py @@ -105,15 +105,6 @@ def assert_frame_equal(left, right, **kwargs): not has_statsmodels, reason='requires statsmodels') -try: - import tables - has_tables = True -except ImportError: - has_tables = False - -requires_tables = pytest.mark.skipif(not has_tables, reason='requires tables') - - try: import ephem has_ephem = True diff --git a/pvlib/tests/test_clearsky.py b/pvlib/tests/test_clearsky.py index 1e7d89d82d..15fc74e383 100644 --- a/pvlib/tests/test_clearsky.py +++ b/pvlib/tests/test_clearsky.py @@ -16,7 +16,7 @@ from pvlib import atmosphere from pvlib import irradiance -from .conftest import requires_tables, DATA_DIR +from .conftest import DATA_DIR def test_ineichen_series(): @@ -189,7 +189,6 @@ def test_ineichen_altitude(): assert_frame_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -202,7 +201,6 @@ def test_lookup_linke_turbidity(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_leapyear(): times = pd.date_range(start='2016-06-24', end='2016-06-25', freq='12h', tz='America/Phoenix') @@ -215,7 +213,6 @@ def test_lookup_linke_turbidity_leapyear(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_nointerp(): times = pd.date_range(start='2014-06-24', end='2014-06-25', freq='12h', tz='America/Phoenix') @@ -226,7 +223,6 @@ def test_lookup_linke_turbidity_nointerp(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_months(): times = pd.date_range(start='2014-04-01', end='2014-07-01', freq='1M', tz='America/Phoenix') @@ -237,7 +233,6 @@ def test_lookup_linke_turbidity_months(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_months_leapyear(): times = pd.date_range(start='2016-04-01', end='2016-07-01', freq='1M', tz='America/Phoenix') @@ -248,7 +243,6 @@ def test_lookup_linke_turbidity_months_leapyear(): assert_series_equal(expected, out) -@requires_tables def test_lookup_linke_turbidity_nointerp_months(): times = pd.date_range(start='2014-04-10', end='2014-07-10', freq='1M', tz='America/Phoenix') @@ -480,7 +474,6 @@ def test_simplified_solis_nans_series(): assert_frame_equal(expected, out) -@requires_tables def test_linke_turbidity_corners(): """Test Linke turbidity corners out of bounds.""" months = pd.DatetimeIndex('%d/1/2016' % (m + 1) for m in range(12)) diff --git a/pvlib/tests/test_location.py b/pvlib/tests/test_location.py index 20a849a667..a4b69e5cb2 100644 --- a/pvlib/tests/test_location.py +++ b/pvlib/tests/test_location.py @@ -15,7 +15,7 @@ from pvlib.location import Location from pvlib.solarposition import declination_spencer71 from pvlib.solarposition import equation_of_time_spencer71 -from .conftest import requires_ephem, requires_tables +from .conftest import requires_ephem def test_location_required(): @@ -77,7 +77,6 @@ def times(): freq='3H') -@requires_tables def test_get_clearsky(mocker, times): tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson') m = mocker.spy(pvlib.clearsky, 'ineichen') diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index 86b7411d0f..b42acfa54e 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -13,7 +13,7 @@ from .conftest import assert_series_equal, assert_frame_equal import pytest -from .conftest import fail_on_pvlib_version, requires_tables +from .conftest import fail_on_pvlib_version @pytest.fixture(scope='function') @@ -1788,7 +1788,6 @@ def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): mc.aoi = 5 -@requires_tables def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1810,7 +1809,6 @@ def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, assert_series_equal(ac, expected) -@requires_tables def test_basic_chain_altitude_pressure(sam_data, cec_inverter_parameters, sapm_temperature_cs5p_220m): times = pd.date_range(start='20160101 1200-0700', @@ -1861,7 +1859,6 @@ def test_complete_irradiance_clean_run(sapm_dc_snl_ac_system, location): pd.Series([9, 5], index=times, name='ghi')) -@requires_tables def test_complete_irradiance(sapm_dc_snl_ac_system, location): """Check calculations""" mc = ModelChain(sapm_dc_snl_ac_system, location) @@ -1890,7 +1887,6 @@ def test_complete_irradiance(sapm_dc_snl_ac_system, location): @pytest.mark.filterwarnings("ignore:This function is not safe at the moment") @pytest.mark.parametrize("input_type", [tuple, list]) -@requires_tables def test_complete_irradiance_arrays( sapm_dc_snl_ac_system_same_arrays, location, input_type): """ModelChain.complete_irradiance can accept a tuple of weather diff --git a/setup.py b/setup.py index 73d1c42d8b..6dd1242744 100755 --- a/setup.py +++ b/setup.py @@ -43,26 +43,18 @@ 'pytz', 'requests', 'scipy >= 1.2.0', - ] + 'tables'] # include dataclasses as a dependency only on python 3.6 if sys.version_info.major == 3 and sys.version_info.minor == 6: INSTALL_REQUIRES.append('dataclasses') -# python 3.9 OS X wheels are not available on pypi yet -# https://github.com/pvlib/pvlib-python/pull/1287 -if not (sys.version_info.major == 3 and - sys.version_info.minor >= 9 and - sys.platform == 'darwin'): - INSTALL_REQUIRES.append('tables') - - TESTS_REQUIRE = ['nose', 'pytest', 'pytest-cov', 'pytest-mock', 'requests-mock', 'pytest-timeout', 'pytest-rerunfailures', 'pytest-remotedata'] EXTRAS_REQUIRE = { 'optional': ['cython', 'ephem', 'netcdf4', 'nrel-pysam', 'numba', - 'pvfactors', 'siphon', 'statsmodels', 'tables', + 'pvfactors', 'siphon', 'statsmodels', 'cftime >= 1.1.1'], 'doc': ['ipython', 'matplotlib', 'sphinx == 3.1.2', 'sphinx_rtd_theme==0.5.0', 'sphinx-gallery', 'docutils == 0.15.2', From 3bc2e942a93129799710277a67aa00a9ea076a5f Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 15:42:19 -0600 Subject: [PATCH 12/19] inelegantly disable mac os/py 3.9 job --- ci/azure/posix.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/azure/posix.yml b/ci/azure/posix.yml index 086f03dd69..2711d9b4ec 100644 --- a/ci/azure/posix.yml +++ b/ci/azure/posix.yml @@ -21,21 +21,25 @@ jobs: - task: UsePythonVersion@0 inputs: versionSpec: '$(python.version)' + condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - script: | pip install pytest pytest-cov pytest-mock requests-mock pytest-timeout pytest-azurepipelines pytest-rerunfailures pytest-remotedata pip install -e . pytest pvlib --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html displayName: 'Test with pytest' + condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - task: PublishTestResults@2 condition: succeededOrFailed() inputs: testResultsFiles: '**/test-*.xml' testRunTitle: 'Publish test results for Python $(python.version)' + condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: Cobertura summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' + condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) From 0e7992a4d88cee54c5378e135e3f120a27d897e6 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 15:43:36 -0600 Subject: [PATCH 13/19] add pytables to 3.6-min --- ci/requirements-py36-min.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 84adcb360d..9bbec66ad8 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -5,6 +5,7 @@ dependencies: - coveralls - nose - pip + - pytables # tables when using pip+PyPI - pytest - pytest-cov - pytest-mock From d38b69dc0f68c94dab256e03f84f7289f1230939 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 15:48:09 -0600 Subject: [PATCH 14/19] fix posix.yml condition --- ci/azure/posix.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/azure/posix.yml b/ci/azure/posix.yml index 2711d9b4ec..5865dd1c23 100644 --- a/ci/azure/posix.yml +++ b/ci/azure/posix.yml @@ -31,11 +31,10 @@ jobs: condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - task: PublishTestResults@2 - condition: succeededOrFailed() + condition: and(succeededOrFailed(), not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS)))) inputs: testResultsFiles: '**/test-*.xml' testRunTitle: 'Publish test results for Python $(python.version)' - condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - task: PublishCodeCoverageResults@1 inputs: From df1ac8408e155115320bd5fb4697bb33722005e0 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 15:50:33 -0600 Subject: [PATCH 15/19] try different string interpolation --- ci/azure/posix.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ci/azure/posix.yml b/ci/azure/posix.yml index 5865dd1c23..7bb83a2724 100644 --- a/ci/azure/posix.yml +++ b/ci/azure/posix.yml @@ -21,17 +21,17 @@ jobs: - task: UsePythonVersion@0 inputs: versionSpec: '$(python.version)' - condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) + condition: not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - script: | pip install pytest pytest-cov pytest-mock requests-mock pytest-timeout pytest-azurepipelines pytest-rerunfailures pytest-remotedata pip install -e . pytest pvlib --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html displayName: 'Test with pytest' - condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) + condition: not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - task: PublishTestResults@2 - condition: and(succeededOrFailed(), not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS)))) + condition: and(succeededOrFailed(), not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS)))) inputs: testResultsFiles: '**/test-*.xml' testRunTitle: 'Publish test results for Python $(python.version)' @@ -41,4 +41,4 @@ jobs: codeCoverageTool: Cobertura summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' - condition: not(and(eq(${{ variables['python.version'] }}, '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) + condition: not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) From 77876754c220acfd602364e2db34f3564ddd7c8c Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 15:54:14 -0600 Subject: [PATCH 16/19] I don't understand azure variables so skip mac/3.9 this way instead --- azure-pipelines.yml | 2 +- ci/azure/posix.yml | 5 +---- ci/azure/posix_no_39.yml | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 ci/azure/posix_no_39.yml diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 005f3fa3c6..ec594f152b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,7 +12,7 @@ jobs: vmImage: ubuntu-16.04 -- template: ci/azure/posix.yml +- template: ci/azure/posix_no_39.yml parameters: name: Test_bare_macOS vmImage: macOS-10.14 diff --git a/ci/azure/posix.yml b/ci/azure/posix.yml index 7bb83a2724..086f03dd69 100644 --- a/ci/azure/posix.yml +++ b/ci/azure/posix.yml @@ -21,17 +21,15 @@ jobs: - task: UsePythonVersion@0 inputs: versionSpec: '$(python.version)' - condition: not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - script: | pip install pytest pytest-cov pytest-mock requests-mock pytest-timeout pytest-azurepipelines pytest-rerunfailures pytest-remotedata pip install -e . pytest pvlib --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html displayName: 'Test with pytest' - condition: not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) - task: PublishTestResults@2 - condition: and(succeededOrFailed(), not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS)))) + condition: succeededOrFailed() inputs: testResultsFiles: '**/test-*.xml' testRunTitle: 'Publish test results for Python $(python.version)' @@ -41,4 +39,3 @@ jobs: codeCoverageTool: Cobertura summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' - condition: not(and(eq('$(python.version)', '3.9'), eq(${{ parameters.name }}, 'Test_bare_macOS))) diff --git a/ci/azure/posix_no_39.yml b/ci/azure/posix_no_39.yml new file mode 100644 index 0000000000..16966cebef --- /dev/null +++ b/ci/azure/posix_no_39.yml @@ -0,0 +1,39 @@ +parameters: + name: '' + vmImage: '' + +jobs: +- job: ${{ parameters.name }} + pool: + vmImage: ${{ parameters.vmImage }} + strategy: + matrix: + Python36: + python.version: '3.6' + Python37: + python.version: '3.7' + Python38: + python.version: '3.8' + + steps: + - task: UsePythonVersion@0 + inputs: + versionSpec: '$(python.version)' + + - script: | + pip install pytest pytest-cov pytest-mock requests-mock pytest-timeout pytest-azurepipelines pytest-rerunfailures pytest-remotedata + pip install -e . + pytest pvlib --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html + displayName: 'Test with pytest' + + - task: PublishTestResults@2 + condition: succeededOrFailed() + inputs: + testResultsFiles: '**/test-*.xml' + testRunTitle: 'Publish test results for Python $(python.version)' + + - task: PublishCodeCoverageResults@1 + inputs: + codeCoverageTool: Cobertura + summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml' + reportDirectory: '$(System.DefaultWorkingDirectory)/**/htmlcov' From 0862f01cddb7846eed33a5be92a2caf2fb971800 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 16:47:39 -0600 Subject: [PATCH 17/19] pin to blosc to older version to get tables working on win 3.6 and 3.7 --- ci/requirements-py36.yml | 1 + ci/requirements-py37.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/ci/requirements-py36.yml b/ci/requirements-py36.yml index c49455119f..9cef821b3b 100644 --- a/ci/requirements-py36.yml +++ b/ci/requirements-py36.yml @@ -3,6 +3,7 @@ channels: - defaults - conda-forge dependencies: + - blosc=1.14.3 # newest version breaks tables (pytables) on windows - coveralls - cython - ephem diff --git a/ci/requirements-py37.yml b/ci/requirements-py37.yml index 3203b004d1..598f2dcdf7 100644 --- a/ci/requirements-py37.yml +++ b/ci/requirements-py37.yml @@ -3,6 +3,7 @@ channels: - defaults - conda-forge dependencies: + - blosc=1.14.3 # newest version breaks tables (pytables) on windows - coveralls - cython - ephem From 3366cdf6a2d21a8cc5dcd5b827cb68b5c4188822 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 17:01:25 -0600 Subject: [PATCH 18/19] pin an older numexpr compatible with our min numpy for 3.6-min --- ci/requirements-py36-min.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 9bbec66ad8..efcb166e68 100644 --- a/ci/requirements-py36-min.yml +++ b/ci/requirements-py36-min.yml @@ -21,3 +21,4 @@ dependencies: - pytest-rerunfailures # conda version is >3.6 - pytest-remotedata # conda package is 0.3.0, needs > 0.3.1 - requests-mock + - numexpr==2.6.2 # needed for tables, but newest version is not compatible with numpy 1.12 \ No newline at end of file From 1c0d8dc0e7e2b326e84529f6bb2ccca3e83ceb23 Mon Sep 17 00:00:00 2001 From: Kevin Anderson Date: Fri, 20 Aug 2021 17:18:34 -0600 Subject: [PATCH 19/19] promote tables to a normal import in clearsky.py --- pvlib/clearsky.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pvlib/clearsky.py b/pvlib/clearsky.py index 9d635d0bf8..0368912c81 100644 --- a/pvlib/clearsky.py +++ b/pvlib/clearsky.py @@ -11,6 +11,7 @@ import pandas as pd from scipy.optimize import minimize_scalar from scipy.linalg import hankel +import tables from pvlib import atmosphere, tools @@ -186,13 +187,6 @@ def lookup_linke_turbidity(time, latitude, longitude, filepath=None, # 1st row: 89.9583 S, 2nd row: 89.875 S # 1st column: 179.9583 W, 2nd column: 179.875 W - try: - import tables - except ImportError: - raise ImportError('The Linke turbidity lookup table requires tables. ' - 'You can still use clearsky.ineichen if you ' - 'supply your own turbidities.') - if filepath is None: pvlib_path = os.path.dirname(os.path.abspath(__file__)) filepath = os.path.join(pvlib_path, 'data', 'LinkeTurbidities.h5')