From 0e6fea6219618c0da944e6ed686c10f5b1e244a2 Mon Sep 17 00:00:00 2001 From: Kevin Anderson <57452607+kanderso-nrel@users.noreply.github.com> Date: Sat, 7 Aug 2021 09:55:06 -0600 Subject: [PATCH 1/8] Mount gallery examples (#1266) * create discontinuous tracking example * create dual-axis example * create mixed-orientation example * create seasonal tilt example * stickler * whatsnew * bsrn -> clear-sky sim * stickler, d'oh --- docs/examples/plot_discontinuous_tracking.py | 89 ++++++++++++++++++ docs/examples/plot_dual_axis_tracking.py | 44 +++++++++ docs/examples/plot_mixed_orientation.py | 49 ++++++++++ docs/examples/plot_seasonal_tilt.py | 98 ++++++++++++++++++++ docs/sphinx/source/whatsnew/v0.9.0.rst | 1 + 5 files changed, 281 insertions(+) create mode 100644 docs/examples/plot_discontinuous_tracking.py create mode 100644 docs/examples/plot_dual_axis_tracking.py create mode 100644 docs/examples/plot_mixed_orientation.py create mode 100644 docs/examples/plot_seasonal_tilt.py diff --git a/docs/examples/plot_discontinuous_tracking.py b/docs/examples/plot_discontinuous_tracking.py new file mode 100644 index 0000000000..f385675d57 --- /dev/null +++ b/docs/examples/plot_discontinuous_tracking.py @@ -0,0 +1,89 @@ +""" +Discontinuous Tracking +====================== + +Example of a custom Mount class. +""" + +# %% +# Many real-world tracking arrays adjust their position in discrete steps +# rather than through continuous movement. This example shows how to model +# this discontinuous tracking by implementing a custom Mount class. + +from pvlib import tracking, pvsystem, location, modelchain +from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS +import matplotlib.pyplot as plt +import pandas as pd + + +# %% +# We'll define our custom Mount by extending +# :py:class:`~pvlib.pvsystem.SingleAxisTrackerMount` for convenience. +# Another approach would be to extend ``AbstractMount`` directly; see +# the source code of :py:class:`~pvlib.pvsystem.SingleAxisTrackerMount` +# and :py:class:`~pvlib.pvsystem.FixedMount` for how that is done. + + +class DiscontinuousTrackerMount(pvsystem.SingleAxisTrackerMount): + # inherit from SingleAxisTrackerMount so that we get the + # constructor and tracking attributes (axis_tilt etc) automatically + + def get_orientation(self, solar_zenith, solar_azimuth): + # Different trackers update at different rates; in this example we'll + # assume a relatively slow update interval of 15 minutes to make the + # effect more visually apparent. + zenith_subset = solar_zenith.resample('15min').first() + azimuth_subset = solar_azimuth.resample('15min').first() + + tracking_data_15min = tracking.singleaxis( + zenith_subset, azimuth_subset, + self.axis_tilt, self.axis_azimuth, + self.max_angle, self.backtrack, + self.gcr, self.cross_axis_tilt + ) + # propagate the 15-minute positions to 1-minute stair-stepped values: + tracking_data_1min = tracking_data_15min.reindex(solar_zenith.index, + method='ffill') + return tracking_data_1min + + +# %% +# Let's take a look at the tracker rotation curve it produces: + +times = pd.date_range('2019-06-01', '2019-06-02', freq='1min', tz='US/Eastern') +loc = location.Location(40, -80) +solpos = loc.get_solarposition(times) +mount = DiscontinuousTrackerMount(axis_azimuth=180, gcr=0.4) +tracker_data = mount.get_orientation(solpos.apparent_zenith, solpos.azimuth) +tracker_data['tracker_theta'].plot() +plt.ylabel('Tracker Rotation [degree]') +plt.show() + +# %% +# With our custom tracking logic defined, we can create the corresponding +# Array and PVSystem, and then run a ModelChain as usual: + +module_parameters = {'pdc0': 1, 'gamma_pdc': -0.004, 'b': 0.05} +temp_params = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_polymer'] +array = pvsystem.Array(mount=mount, module_parameters=module_parameters, + temperature_model_parameters=temp_params) +system = pvsystem.PVSystem(arrays=[array], inverter_parameters={'pdc0': 1}) +mc = modelchain.ModelChain(system, loc, spectral_model='no_loss') + +# simple simulated weather, just to show the effect of discrete tracking +weather = loc.get_clearsky(times) +weather['temp_air'] = 25 +weather['wind_speed'] = 1 +mc.run_model(weather) + +fig, axes = plt.subplots(2, 1, sharex=True) +mc.results.effective_irradiance.plot(ax=axes[0]) +axes[0].set_ylabel('Effective Irradiance [W/m^2]') +mc.results.ac.plot(ax=axes[1]) +axes[1].set_ylabel('AC Power') +fig.show() + +# %% +# The effect of discontinuous tracking creates a "jagged" effect in the +# simulated plane-of-array irradiance, which then propagates through to +# the AC power output. diff --git a/docs/examples/plot_dual_axis_tracking.py b/docs/examples/plot_dual_axis_tracking.py new file mode 100644 index 0000000000..8f51512726 --- /dev/null +++ b/docs/examples/plot_dual_axis_tracking.py @@ -0,0 +1,44 @@ +""" +Dual-Axis Tracking +================== + +Example of a custom Mount class. +""" + +# %% +# Dual-axis trackers can track the sun in two dimensions across the sky dome +# instead of just one like single-axis trackers. This example shows how to +# model a simple dual-axis tracking system using ModelChain with a custom +# Mount class. + +from pvlib import pvsystem, location, modelchain +import pandas as pd +import matplotlib.pyplot as plt + +# %% +# New Mount classes should extend ``pvlib.pvsystem.AbstractMount`` +# and must implement a ``get_orientation(solar_zenith, solar_azimuth)`` method: + + +class DualAxisTrackerMount(pvsystem.AbstractMount): + def get_orientation(self, solar_zenith, solar_azimuth): + # no rotation limits, no backtracking + return {'surface_tilt': solar_zenith, 'surface_azimuth': solar_azimuth} + + +loc = location.Location(40, -80) +array = pvsystem.Array( + mount=DualAxisTrackerMount(), + module_parameters=dict(pdc0=1, gamma_pdc=-0.004, b=0.05), + temperature_model_parameters=dict(a=-3.56, b=-0.075, deltaT=3)) +system = pvsystem.PVSystem(arrays=[array], inverter_parameters=dict(pdc0=3)) +mc = modelchain.ModelChain(system, loc, spectral_model='no_loss') + +times = pd.date_range('2019-01-01 06:00', '2019-01-01 18:00', freq='5min', + tz='Etc/GMT+5') +weather = loc.get_clearsky(times) +mc.run_model(weather) + +mc.results.ac.plot() +plt.ylabel('Output Power') +plt.show() diff --git a/docs/examples/plot_mixed_orientation.py b/docs/examples/plot_mixed_orientation.py new file mode 100644 index 0000000000..987b4b4994 --- /dev/null +++ b/docs/examples/plot_mixed_orientation.py @@ -0,0 +1,49 @@ +""" +Mixed Orientation +================= + +Using multiple Arrays in a single PVSystem. +""" + +# %% +# Residential and Commercial systems often have fixed-tilt arrays +# installed at different azimuths. This can be modeled by using +# multiple :py:class:`~pvlib.pvsystem.Array` objects (one for each +# orientation) with a single :py:class:`~pvlib.pvsystem.PVSystem` object. +# +# This particular example has one east-facing array (azimuth=90) and one +# west-facing array (azimuth=270), which aside from orientation are identical. + + +from pvlib import pvsystem, modelchain, location +import pandas as pd +import matplotlib.pyplot as plt + +array_kwargs = dict( + module_parameters=dict(pdc0=1, gamma_pdc=-0.004), + temperature_model_parameters=dict(a=-3.56, b=-0.075, deltaT=3) +) + +arrays = [ + pvsystem.Array(pvsystem.FixedMount(30, 270), name='West-Facing Array', + **array_kwargs), + pvsystem.Array(pvsystem.FixedMount(30, 90), name='East-Facing Array', + **array_kwargs), +] +loc = location.Location(40, -80) +system = pvsystem.PVSystem(arrays=arrays, inverter_parameters=dict(pdc0=3)) +mc = modelchain.ModelChain(system, loc, aoi_model='physical', + spectral_model='no_loss') + +times = pd.date_range('2019-01-01 06:00', '2019-01-01 18:00', freq='5min', + tz='Etc/GMT+5') +weather = loc.get_clearsky(times) +mc.run_model(weather) + +fig, ax = plt.subplots() +for array, pdc in zip(system.arrays, mc.results.dc): + pdc.plot(label=f'{array.name}') +mc.results.ac.plot(label='Inverter') +plt.ylabel('System Output') +plt.legend() +plt.show() diff --git a/docs/examples/plot_seasonal_tilt.py b/docs/examples/plot_seasonal_tilt.py new file mode 100644 index 0000000000..999aaca96a --- /dev/null +++ b/docs/examples/plot_seasonal_tilt.py @@ -0,0 +1,98 @@ +""" +Seasonal Tilt +============= + +Example of a custom Mount class. +""" + +# %% +# Some PV systems are built with the option to adjust the module +# tilt to follow seasonal changes in solar position. For example, +# SAM calls this strategy "Seasonal Tilt". This example shows how +# to use a custom Mount class to use the Seasonal Tilt strategy +# with :py:class:`~pvlib.modelchain.ModelChain`. + +import pvlib +from pvlib import pvsystem, location, modelchain, iotools +from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS +import pandas as pd +import pathlib +import matplotlib.pyplot as plt +from dataclasses import dataclass + + +# %% +# New Mount classes should extend ``pvlib.pvsystem.AbstractMount`` +# and must implement a ``get_orientation(solar_zenith, solar_azimuth)`` method: + + +@dataclass +class SeasonalTiltMount(pvsystem.AbstractMount): + monthly_tilts: list # length 12, one tilt per calendar month + surface_azimuth: float = 180.0 + + def get_orientation(self, solar_zenith, solar_azimuth): + tilts = [self.monthly_tilts[m-1] for m in solar_zenith.index.month] + return pd.DataFrame({ + 'surface_tilt': tilts, + 'surface_azimuth': self.surface_azimuth, + }, index=solar_zenith.index) + + +# %% +# First let's grab some weather data and make sure our mount produces tilts +# like we expect: + +DATA_DIR = pathlib.Path(pvlib.__file__).parent / 'data' +tmy, metadata = iotools.read_tmy3(DATA_DIR / '723170TYA.CSV', coerce_year=1990) +# shift from TMY3 right-labeled index to left-labeled index: +tmy.index = tmy.index - pd.Timedelta(hours=1) +weather = pd.DataFrame({ + 'ghi': tmy['GHI'], 'dhi': tmy['DHI'], 'dni': tmy['DNI'], + 'temp_air': tmy['DryBulb'], 'wind_speed': tmy['Wspd'], +}) +loc = location.Location.from_tmy(metadata) +solpos = loc.get_solarposition(weather.index) +# same default monthly tilts as SAM: +tilts = [40, 40, 40, 20, 20, 20, 20, 20, 20, 40, 40, 40] +mount = SeasonalTiltMount(monthly_tilts=tilts) +orientation = mount.get_orientation(solpos.apparent_zenith, solpos.azimuth) +orientation['surface_tilt'].plot() +plt.ylabel('Surface Tilt [degrees]') +plt.show() + +# %% +# With our custom tilt strategy defined, we can create the corresponding +# Array and PVSystem, and then run a ModelChain as usual: + +module_parameters = {'pdc0': 1, 'gamma_pdc': -0.004, 'b': 0.05} +temp_params = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_polymer'] +array = pvsystem.Array(mount=mount, module_parameters=module_parameters, + temperature_model_parameters=temp_params) +system = pvsystem.PVSystem(arrays=[array], inverter_parameters={'pdc0': 1}) +mc = modelchain.ModelChain(system, loc, spectral_model='no_loss') + +_ = mc.run_model(weather) + +# %% +# Now let's re-run the simulation assuming tilt=30 for the entire year: + +array2 = pvsystem.Array(mount=pvsystem.FixedMount(30, 180), + module_parameters=module_parameters, + temperature_model_parameters=temp_params) +system2 = pvsystem.PVSystem(arrays=[array2], inverter_parameters={'pdc0': 1}) +mc2 = modelchain.ModelChain(system2, loc, spectral_model='no_loss') +_ = mc2.run_model(weather) + +# %% +# And finally, compare simulated monthly generation between the two tilt +# strategies: + +# sphinx_gallery_thumbnail_number = 2 +results = pd.DataFrame({ + 'Seasonal 20/40 Production': mc.results.ac, + 'Fixed 30 Production': mc2.results.ac, +}) +results.resample('m').sum().plot() +plt.ylabel('Monthly Production') +plt.show() diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index d516685154..d79c81551b 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -206,6 +206,7 @@ Documentation * Use ``Mount`` classes in ``introtutorial`` and ``pvsystem`` docs pages (:pull:`1267`) * Clarified how statistics are calculated for :py:func:`pvlib.clearsky.detect_clearsky` (:issue:`1070`, :pull:`1243`) +* Add gallery examples using the new ``Mount`` classes (:pull:`1266`) Requirements ~~~~~~~~~~~~ From 9543d875fafba2891c9c6cf4a8fff11dc91019b6 Mon Sep 17 00:00:00 2001 From: Joe Ranalli Date: Sun, 8 Aug 2021 19:35:43 -0400 Subject: [PATCH 2/8] Extra line in whatsnew, oops (#1258) stickler issues Refactor to separate out VR computation within pvlib.scaling.wvm to a new function pvlib.scaling._compute_vr. bugfix for high frequency time series in scaling.py, regarding issue 1257 add pull request number bugfix for high frequency time series in scaling.py, regarding issue 1257 Co-authored-by: Cliff Hansen --- docs/sphinx/source/whatsnew/v0.9.0.rst | 3 + pvlib/scaling.py | 86 ++++++++++++++++++++------ pvlib/tests/test_scaling.py | 55 ++++++++++++++++ 3 files changed, 124 insertions(+), 20 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index d79c81551b..04f0d70f0c 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -187,6 +187,9 @@ Bug fixes * Corrected an error affecting :py:func:`~pvlib.clearsky.detect_clearsky` when data time step is not one minute. Error was introduced in v0.8.1. (:issue:`1241`, :pull:`1242`) +* Corrected error affecting :py:func:`~pvlib.scaling._compute_wavelet` when + passing a pandas time series with a sampling rate faster than 1 second. + (:issue:`1257`, :pull:`1258`) * Changed deprecated use of ``.astype()`` to ``.view()`` in :py:mod:`~pvlib.solarposition`. (:pull:`1256`, :issue:`1261`, :pull:`1262`) diff --git a/pvlib/scaling.py b/pvlib/scaling.py index a288912e8d..dca2ca4935 100644 --- a/pvlib/scaling.py +++ b/pvlib/scaling.py @@ -62,26 +62,9 @@ def wvm(clearsky_index, positions, cloud_speed, dt=None): # Added by Joe Ranalli (@jranalli), Penn State Hazleton, 2019 - pos = np.array(positions) - dist = pdist(pos, 'euclidean') wavelet, tmscales = _compute_wavelet(clearsky_index, dt) - # Find effective length of position vector, 'dist' is full pairwise - n_pairs = len(dist) - - def fn(x): - return np.abs((x ** 2 - x) / 2 - n_pairs) - n_dist = np.round(scipy.optimize.fmin(fn, np.sqrt(n_pairs), disp=False)) - - # Compute VR - A = cloud_speed / 2 # Resultant fit for A from [2] - vr = np.zeros(tmscales.shape) - for i, tmscale in enumerate(tmscales): - rho = np.exp(-1 / A * dist / tmscale) # Eq 5 from [1] - - # 2*rho is because rho_ij = rho_ji. +n_dist accounts for sum(rho_ii=1) - denominator = 2 * np.sum(rho) + n_dist - vr[i] = n_dist ** 2 / denominator # Eq 6 of [1] + vr = _compute_vr(positions, cloud_speed, tmscales) # Scale each wavelet by VR (Eq 7 in [1]) wavelet_smooth = np.zeros_like(wavelet) @@ -101,6 +84,68 @@ def fn(x): return smoothed, wavelet, tmscales +def _compute_vr(positions, cloud_speed, tmscales): + """ + Compute the variability reduction factors for each wavelet mode for the + Wavelet Variability Model [1-3]. + + Parameters + ---------- + positions : numeric + Array of coordinate distances as (x,y) pairs representing the + easting, northing of the site positions in meters [m]. Distributed + plants could be simulated by gridded points throughout the plant + footprint. + + cloud_speed : numeric + Speed of cloud movement in meters per second [m/s]. + + tmscales: numeric + The timescales associated with the wavelets in seconds [s]. + + Returns + ------- + vr : numeric + an array of variability reduction factors for each tmscale. + + References + ---------- + .. [1] M. Lave, J. Kleissl and J.S. Stein. A Wavelet-Based Variability + Model (WVM) for Solar PV Power Plants. IEEE Transactions on Sustainable + Energy, vol. 4, no. 2, pp. 501-509, 2013. + + .. [2] M. Lave and J. Kleissl. Cloud speed impact on solar variability + scaling - Application to the wavelet variability model. Solar Energy, + vol. 91, pp. 11-21, 2013. + + .. [3] Wavelet Variability Model - Matlab Code: + https://github.com/sandialabs/wvm + """ + + # Added by Joe Ranalli (@jranalli), Penn State Hazleton, 2021 + + pos = np.array(positions) + dist = pdist(pos, 'euclidean') + + # Find effective length of position vector, 'dist' is full pairwise + n_pairs = len(dist) + + def fn(x): + return np.abs((x ** 2 - x) / 2 - n_pairs) + + n_dist = np.round(scipy.optimize.fmin(fn, np.sqrt(n_pairs), disp=False)) + # Compute VR + A = cloud_speed / 2 # Resultant fit for A from [2] + vr = np.zeros(tmscales.shape) + for i, tmscale in enumerate(tmscales): + rho = np.exp(-1 / A * dist / tmscale) # Eq 5 from [1] + + # 2*rho is because rho_ij = rho_ji. +n_dist accounts for sum(rho_ii=1) + denominator = 2 * np.sum(rho) + n_dist + vr[i] = n_dist ** 2 / denominator # Eq 6 of [1] + return vr + + def latlon_to_xy(coordinates): """ Convert latitude and longitude in degrees to a coordinate system measured @@ -205,7 +250,8 @@ def _compute_wavelet(clearsky_index, dt=None): raise ValueError("dt must be specified for numpy type inputs.") else: # flatten() succeeded, thus it's a pandas type, so get its dt try: # Assume it's a time series type index - dt = (clearsky_index.index[1] - clearsky_index.index[0]).seconds + dt = clearsky_index.index[1] - clearsky_index.index[0] + dt = dt.seconds + dt.microseconds/1e6 except AttributeError: # It must just be a numeric index dt = (clearsky_index.index[1] - clearsky_index.index[0]) @@ -221,7 +267,7 @@ def _compute_wavelet(clearsky_index, dt=None): csi_mean = np.zeros([max_tmscale, len(cs_long)]) # Skip averaging for the 0th scale csi_mean[0, :] = cs_long.values.flatten() - tmscales[0] = 1 + tmscales[0] = dt # Loop for all time scales we will consider for i in np.arange(1, max_tmscale): tmscales[i] = 2**i * dt # Wavelet integration time scale diff --git a/pvlib/tests/test_scaling.py b/pvlib/tests/test_scaling.py index ba2c00ae3f..344e2209b5 100644 --- a/pvlib/tests/test_scaling.py +++ b/pvlib/tests/test_scaling.py @@ -37,6 +37,18 @@ def time(clear_sky_index): return np.arange(0, len(clear_sky_index)) +@pytest.fixture +def time_60s(clear_sky_index): + # Sample time vector 60s resolution + return np.arange(0, len(clear_sky_index))*60 + + +@pytest.fixture +def time_500ms(clear_sky_index): + # Sample time vector 0.5s resolution + return np.arange(0, len(clear_sky_index))*0.5 + + @pytest.fixture def positions(): # Sample positions based on the previous lat/lon (calculated manually) @@ -51,6 +63,18 @@ def expect_tmscale(): return [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096] +@pytest.fixture +def expect_tmscale_1min(): + # Expected timescales for dt = 60 + return [60, 120, 240, 480, 960, 1920, 3840] + + +@pytest.fixture +def expect_tmscale_500ms(): + # Expected timescales for dt = 0.5 + return [0.5, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096] + + @pytest.fixture def expect_wavelet(): # Expected wavelet for indices 5000:5004 for clear_sky_index above (Matlab) @@ -68,6 +92,13 @@ def expect_cs_smooth(): return np.array([1., 1., 1.05774, 0.94226, 1.]) +@pytest.fixture +def expect_vr(): + # Expected VR for expecttmscale + return np.array([3., 3., 3., 3., 3., 3., 2.9997844, 2.9708118, 2.6806291, + 2.0726611, 1.5653324, 1.2812714, 1.1389995]) + + def test_latlon_to_xy_zero(): coord = [0, 0] pos_e = [0, 0] @@ -109,6 +140,25 @@ def test_compute_wavelet_series_numindex(clear_sky_index, time, assert_almost_equal(wavelet[:, 5000:5005], expect_wavelet) +def test_compute_wavelet_series_highres(clear_sky_index, time_500ms, + expect_tmscale_500ms, expect_wavelet): + dtindex = pd.to_datetime(time_500ms, unit='s') + csi_series = pd.Series(clear_sky_index, index=dtindex) + wavelet, tmscale = scaling._compute_wavelet(csi_series) + assert_almost_equal(tmscale, expect_tmscale_500ms) + assert_almost_equal(wavelet[:, 5000:5005].shape, (14, 5)) + + +def test_compute_wavelet_series_minuteres(clear_sky_index, time_60s, + expect_tmscale_1min, expect_wavelet): + dtindex = pd.to_datetime(time_60s, unit='s') + csi_series = pd.Series(clear_sky_index, index=dtindex) + wavelet, tmscale = scaling._compute_wavelet(csi_series) + assert_almost_equal(tmscale, expect_tmscale_1min) + assert_almost_equal(wavelet[:, 5000:5005].shape, + expect_wavelet[0:len(tmscale), :].shape) + + def test_compute_wavelet_array(clear_sky_index, expect_tmscale, expect_wavelet): wavelet, tmscale = scaling._compute_wavelet(clear_sky_index, dt) @@ -129,6 +179,11 @@ def test_compute_wavelet_dwttheory(clear_sky_index, time, assert_almost_equal(np.sum(wavelet, 0), csi_series) +def test_compute_vr(positions, expect_tmscale, expect_vr): + vr = scaling._compute_vr(positions, cloud_speed, np.array(expect_tmscale)) + assert_almost_equal(vr, expect_vr) + + def test_wvm_series(clear_sky_index, time, positions, expect_cs_smooth): csi_series = pd.Series(clear_sky_index, index=time) cs_sm, _, _ = scaling.wvm(csi_series, positions, cloud_speed) From 0fd5c43acc8a90972bf5018d3c07b6ad8b93a5fd Mon Sep 17 00:00:00 2001 From: Mark Mikofski Date: Mon, 9 Aug 2021 08:39:32 -0700 Subject: [PATCH 3/8] [bug] use clip instead of abs in singleaxis (#1273) * [bug] use clip instead of abs * [test] add test using repro steps * check if single axis tracker has correct aoi when sun is behind modules by comparison to fixed and limiting rotation * [sty] fix stickler * [test] oops forgot aoi key * [test] oops typo tr['aoi' * [test] set angles behind fixed to nan * [test] use smaller max angle, set nans from tracker * [doc] whatsnew singleaxis aoi fix gh1221 --- docs/sphinx/source/whatsnew/v0.9.0.rst | 2 ++ pvlib/tests/test_tracking.py | 15 +++++++++++++++ pvlib/tracking.py | 4 +++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index 04f0d70f0c..14b91768ec 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -192,6 +192,8 @@ Bug fixes (:issue:`1257`, :pull:`1258`) * Changed deprecated use of ``.astype()`` to ``.view()`` in :py:mod:`~pvlib.solarposition`. (:pull:`1256`, :issue:`1261`, :pull:`1262`) +* Fix :py:func:`~pvlib.tracking.singleaxis` AOI wrong when sun behind module. + (:pull:`1273`, :issue:`1221`) Testing ~~~~~~~ diff --git a/pvlib/tests/test_tracking.py b/pvlib/tests/test_tracking.py index 9a589e403a..7e51adc956 100644 --- a/pvlib/tests/test_tracking.py +++ b/pvlib/tests/test_tracking.py @@ -502,3 +502,18 @@ def test_slope_aware_backtracking(): np.testing.assert_allclose( truetracking['tracker_theta'], expected_data['TrueTracking'], rtol=1e-3, atol=1e-3) + + +def test_singleaxis_aoi_gh1221(): + # vertical tracker + loc = pvlib.location.Location(40.1134, -88.3695) + dr = pd.date_range( + start='02-Jun-1998 00:00:00', end='02-Jun-1998 23:55:00', freq='5T', + tz='Etc/GMT+6') + sp = loc.get_solarposition(dr) + tr = pvlib.tracking.singleaxis( + sp['apparent_zenith'], sp['azimuth'], axis_tilt=90, axis_azimuth=180, + max_angle=0.001, backtrack=False) + fixed = pvlib.irradiance.aoi(90, 180, sp['apparent_zenith'], sp['azimuth']) + fixed[np.isnan(tr['aoi'])] = np.nan + assert np.allclose(tr['aoi'], fixed, equal_nan=True) diff --git a/pvlib/tracking.py b/pvlib/tracking.py index 032b35d44a..732108dec2 100644 --- a/pvlib/tracking.py +++ b/pvlib/tracking.py @@ -458,7 +458,9 @@ def singleaxis(apparent_zenith, apparent_azimuth, sun_vec = np.array([xp, yp, zp]) # calculate angle-of-incidence on panel - aoi = np.degrees(np.arccos(np.abs(np.sum(sun_vec*panel_norm, axis=0)))) + # TODO: use irradiance.aoi + projection = np.clip(np.sum(sun_vec*panel_norm, axis=0), -1, 1) + aoi = np.degrees(np.arccos(projection)) # Calculate panel tilt and azimuth in a coordinate system where the panel # tilt is the angle from horizontal, and the panel azimuth is the compass From f318c1c1527f69d9bf9aed6167ca1f6ce9e9d764 Mon Sep 17 00:00:00 2001 From: "Adam R. Jensen" <39184289+AdamRJensen@users.noreply.github.com> Date: Mon, 9 Aug 2021 21:15:47 +0200 Subject: [PATCH 4/8] Fix inconsistencies (#1268) * Add cams.get_cams_radiation function * Revert "Add cams.get_cams_radiation function" This reverts commit d7deb80cdc5d1b63de5b2865a0c5cf24d4655fc1. * Fix inconsistencies Enforce the usage of the following terminology in the iotools inputs: start/end, latitude/longitude, and metadata. Also, latitude/longitude should come before start/end * Have station arg precede start/end in get_bsrn * Update get_bsrn doc string * Change output order in psm3 * Add variable map to pvgis_tmy with depreciating warning * Add variable_map to pvgis_tmy * Coverage for variable_map for read_pvigs_tmy * Add "versionchanged" to psm3 docs * Update psm3 docs * Update versionchanged * Update versionchange message * Correct ouput for get_pvgis_tmy with epw format * Update pvgis_tmy map test * Update v0.9.0.rst * Implement comments from review by kanderso-nrel * Remove 'empty' columns when an empty dataframe is returned by bsrn * Remove admonition about pvgis renaming in introtutorial.rst * Fix typo in pvigs_tmy documentation * Fix references in whatsnew * Refactor pvigs_tmy * Fix stickler * Fix issue references in whatsnew * Coverage for get_pvgis_tmy map_variables * Fix errors in whatsnew * Add double backticks in whatsnew Co-authored-by: Will Holmgren * Add double backticks in whatsnew Co-authored-by: Will Holmgren * Add double backticks in whatsnew Co-authored-by: Will Holmgren * Add double backticks in whatsnew * Change fail version to 0.10 in test_modelchain * Coverage for deprecation warnings * Fix doublebackticks in whatsnew * Fix stickler * Replace tab with spaces in introtutorial Co-authored-by: AdamRJensen Co-authored-by: Will Holmgren --- docs/sphinx/source/introtutorial.rst | 15 +---- docs/sphinx/source/whatsnew/v0.9.0.rst | 12 ++++ pvlib/iotools/bsrn.py | 7 +- pvlib/iotools/ecmwf_macc.py | 28 ++++---- pvlib/iotools/psm3.py | 68 +++++++++++-------- pvlib/iotools/pvgis.py | 92 ++++++++++++++++++-------- pvlib/iotools/sodapro.py | 14 ++-- pvlib/tests/iotools/test_psm3.py | 38 +++++------ pvlib/tests/iotools/test_pvgis.py | 85 +++++++++++++++++------- pvlib/tests/test_modelchain.py | 2 +- 10 files changed, 226 insertions(+), 135 deletions(-) diff --git a/docs/sphinx/source/introtutorial.rst b/docs/sphinx/source/introtutorial.rst index dea13e5834..2f1bb8a0bc 100644 --- a/docs/sphinx/source/introtutorial.rst +++ b/docs/sphinx/source/introtutorial.rst @@ -52,24 +52,13 @@ the :ref:`iotools` module. In this example we will be using PVGIS, one of the data sources available, to retrieve a Typical Meteorological Year (TMY) which includes irradiation, temperature and wind speed. -.. note:: PVGIS uses different naming conventions, so it is required to rename - the weather data variables before using them. Data is already UTC-localized, - so conversion to local timezone is optional. - .. ipython:: python - variables_translation = { - "Gb(n)": "dni", - "G(h)": "ghi", - "Gd(h)": "dhi", - "T2m": "temp_air", - "WS10m": "wind_speed", - } tmys = [] for location in coordinates: latitude, longitude, name, altitude, timezone = location - weather = pvlib.iotools.get_pvgis_tmy(latitude, longitude)[0] - weather = weather.rename(columns=variables_translation) + weather = pvlib.iotools.get_pvgis_tmy(latitude, longitude, + map_variables=True)[0] weather.index.name = "utc_time" tmys.append(weather) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index 14b91768ec..3276dfb640 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -49,6 +49,16 @@ Breaking changes :py:meth:`~pvlib.pvsystem.PVSystem.calcparams_desoto` and :py:meth:`~pvlib.pvsystem.PVSystem.calcparams_cec` (:issue:`1118`, :pull:`1222`) +* Switched the order of the outputs from the PSM3 iotools, notably + :py:func:`~pvlib.iotools.get_psm3` and :py:func:`~pvlib.iotools.read_psm3` + (:issue:`1245`, :pull:`1268`) + +* Changed the naming of the inputs ``startdate``/``enddate`` to ``start``/``end`` in + :py:func:`~pvlib.iotools.get_ecmwf_macc` + (:issue:`1245`, :pull:`1268`) + +* Change the naming of the inputs ``lat``/``lon`` to ``latitude``/``longitude`` in + :py:func:`~pvlib.iotools.get_pvgis_tmy` (:issue:`1245`, :pull:`1268`) Deprecations ~~~~~~~~~~~~ @@ -111,6 +121,8 @@ Enhancements :func:`~pvlib.iotools.get_pvgis_hourly` for reading and retrieving hourly solar radiation data and PV power output from PVGIS. (:pull:`1186`, :issue:`849`) +* Added ``map_variables`` option to :func:`~pvlib.iotools.get_pvgis_tmy` and + :func:`~pvlib.iotools.read_pvgis_tmy` (:issue:`1250`, :pull:`1268`) * Add :func:`~pvlib.iotools.get_bsrn` and :func:`~pvlib.iotools.read_bsrn` for retrieving and reading BSRN solar radiation data files. (:pull:`1254`, :pull:`1145`, :issue:`1015`) diff --git a/pvlib/iotools/bsrn.py b/pvlib/iotools/bsrn.py index c9c3abb93d..4c02c10f90 100644 --- a/pvlib/iotools/bsrn.py +++ b/pvlib/iotools/bsrn.py @@ -57,10 +57,11 @@ def _empty_dataframe_from_logical_records(logical_records): columns = [] for lr in logical_records: columns += BSRN_COLUMNS[lr][2:] + columns = [c for c in columns if c != 'empty'] return pd.DataFrame(columns=columns) -def get_bsrn(start, end, station, username, password, +def get_bsrn(station, start, end, username, password, logical_records=('0100',), local_path=None): """ Retrieve ground measured irradiance data from the BSRN FTP server. @@ -73,12 +74,12 @@ def get_bsrn(start, end, station, username, password, Parameters ---------- + station: str + 3-letter BSRN station abbreviation start: datetime-like First day of the requested period end: datetime-like Last day of the requested period - station: str - 3-letter BSRN station abbreviation username: str username for accessing the BSRN FTP server password: str diff --git a/pvlib/iotools/ecmwf_macc.py b/pvlib/iotools/ecmwf_macc.py index fc08eea35f..fb42454ee3 100644 --- a/pvlib/iotools/ecmwf_macc.py +++ b/pvlib/iotools/ecmwf_macc.py @@ -34,12 +34,12 @@ def ECMWFDataServer(*a, **kw): } -def _ecmwf(server, startdate, stopdate, params, targetname): +def _ecmwf(server, startdate, enddate, params, targetname): # see http://apps.ecmwf.int/datasets/data/macc-reanalysis/levtype=sfc/ server.retrieve({ "class": "mc", "dataset": "macc", - "date": "%s/to/%s" % (startdate, stopdate), + "date": "%s/to/%s" % (startdate, enddate), "expver": "rean", "grid": "0.75/0.75", "levtype": "sfc", @@ -53,7 +53,7 @@ def _ecmwf(server, startdate, stopdate, params, targetname): }) -def get_ecmwf_macc(filename, params, startdate, stopdate, lookup_params=True, +def get_ecmwf_macc(filename, params, start, end, lookup_params=True, server=None, target=_ecmwf): """ Download data from ECMWF MACC Reanalysis API. @@ -64,9 +64,9 @@ def get_ecmwf_macc(filename, params, startdate, stopdate, lookup_params=True, full path of file where to save data, ``.nc`` appended if not given params : str or sequence of str keynames of parameter[s] to download - startdate : datetime.datetime or datetime.date + start : datetime.datetime or datetime.date UTC date - stopdate : datetime.datetime or datetime.date + end : datetime.datetime or datetime.date UTC date lookup_params : bool, default True optional flag, if ``False``, then codes are already formatted @@ -137,7 +137,7 @@ def get_ecmwf_macc(filename, params, startdate, stopdate, lookup_params=True, :func:`pvlib.iotools.get_ecmwf_macc`. :: - target(server, startdate, stopdate, params, filename) -> None + target(server, startdate, enddate, params, filename) -> None Examples -------- @@ -161,12 +161,12 @@ def get_ecmwf_macc(filename, params, startdate, stopdate, lookup_params=True, params = '/'.join(PARAMS.get(p) for p in params) except TypeError: params = PARAMS.get(params) - startdate = startdate.strftime('%Y-%m-%d') - stopdate = stopdate.strftime('%Y-%m-%d') + startdate = start.strftime('%Y-%m-%d') + enddate = end.strftime('%Y-%m-%d') if not server: server = ECMWFDataServer() t = threading.Thread(target=target, daemon=True, - args=(server, startdate, stopdate, params, filename)) + args=(server, startdate, enddate, params, filename)) t.start() return t @@ -191,8 +191,8 @@ def __init__(self, filename): # time resolution in hours self.time_size = self.data.dimensions['time'].size self.start_time = self.data['time'][0] - self.stop_time = self.data['time'][-1] - self.time_range = self.stop_time - self.start_time + self.end_time = self.data['time'][-1] + self.time_range = self.end_time - self.start_time self.delta_time = self.time_range / (self.time_size - 1) def get_nearest_indices(self, latitude, longitude): @@ -281,7 +281,7 @@ def read_ecmwf_macc(filename, latitude, longitude, utc_time_range=None): longitude : float longitude in degrees utc_time_range : sequence of datetime.datetime - pair of start and stop naive or UTC date-times + pair of start and end naive or UTC date-times Returns ------- @@ -295,9 +295,9 @@ def read_ecmwf_macc(filename, latitude, longitude, utc_time_range=None): if utc_time_range: start_idx = netCDF4.date2index( utc_time_range[0], nctime, select='before') - stop_idx = netCDF4.date2index( + end_idx = netCDF4.date2index( utc_time_range[-1], nctime, select='after') - time_slice = slice(start_idx, stop_idx + 1) + time_slice = slice(start_idx, end_idx + 1) else: time_slice = slice(0, ecmwf_macc.time_size) times = netCDF4.num2date(nctime[time_slice], nctime.units) diff --git a/pvlib/iotools/psm3.py b/pvlib/iotools/psm3.py index 758884160a..44fba674b1 100644 --- a/pvlib/iotools/psm3.py +++ b/pvlib/iotools/psm3.py @@ -28,6 +28,11 @@ def get_psm3(latitude, longitude, api_key, email, names='tmy', interval=60, Retrieve NSRDB PSM3 timeseries weather data from the PSM3 API. The NSRDB is described in [1]_ and the PSM3 API is described in [2]_, [3]_, and [4]_. + .. versionchanged:: 0.9.0 + The function now returns a tuple where the first element is a dataframe + and the second element is a dictionary containing metadata. Previous + versions of this function had the return values switched. + Parameters ---------- latitude : float or int @@ -61,11 +66,11 @@ def get_psm3(latitude, longitude, api_key, email, names='tmy', interval=60, Returns ------- - headers : dict - metadata from NREL PSM3 about the record, see - :func:`pvlib.iotools.parse_psm3` for fields data : pandas.DataFrame timeseries data from NREL PSM3 + metadata : dict + metadata from NREL PSM3 about the record, see + :func:`pvlib.iotools.parse_psm3` for fields Raises ------ @@ -170,6 +175,11 @@ def parse_psm3(fbuf): Parse an NSRDB PSM3 weather file (formatted as SAM CSV). The NSRDB is described in [1]_ and the SAM CSV format is described in [2]_. + .. versionchanged:: 0.9.0 + The function now returns a tuple where the first element is a dataframe + and the second element is a dictionary containing metadata. Previous + versions of this function had the return values switched. + Parameters ---------- fbuf: file-like object @@ -177,15 +187,18 @@ def parse_psm3(fbuf): Returns ------- - headers : dict - metadata from NREL PSM3 about the record, see notes for fields data : pandas.DataFrame timeseries data from NREL PSM3 + metadata : dict + metadata from NREL PSM3 about the record, see notes for fields Notes ----- - The return is a tuple with two items. The first item is a header with - metadata from NREL PSM3 about the record containing the following fields: + The return is a tuple with two items. The first item is a dataframe with + the PSM3 timeseries data. + + The second item is a dictionary with metadata from NREL PSM3 about the + record containing the following fields: * Source * Location ID @@ -234,13 +247,11 @@ def parse_psm3(fbuf): * Surface Albedo Units * Version - The second item is a dataframe with the PSM3 timeseries data. - Examples -------- >>> # Read a local PSM3 file: >>> with open(filename, 'r') as f: # doctest: +SKIP - ... metadata, df = iotools.parse_psm3(f) # doctest: +SKIP + ... df, metadata = iotools.parse_psm3(f) # doctest: +SKIP See Also -------- @@ -254,17 +265,17 @@ def parse_psm3(fbuf): `_ """ # The first 2 lines of the response are headers with metadata - header_fields = fbuf.readline().split(',') - header_fields[-1] = header_fields[-1].strip() # strip trailing newline - header_values = fbuf.readline().split(',') - header_values[-1] = header_values[-1].strip() # strip trailing newline - header = dict(zip(header_fields, header_values)) - # the response is all strings, so set some header types to numbers - header['Local Time Zone'] = int(header['Local Time Zone']) - header['Time Zone'] = int(header['Time Zone']) - header['Latitude'] = float(header['Latitude']) - header['Longitude'] = float(header['Longitude']) - header['Elevation'] = int(header['Elevation']) + metadata_fields = fbuf.readline().split(',') + metadata_fields[-1] = metadata_fields[-1].strip() # strip trailing newline + metadata_values = fbuf.readline().split(',') + metadata_values[-1] = metadata_values[-1].strip() # strip trailing newline + metadata = dict(zip(metadata_fields, metadata_values)) + # the response is all strings, so set some metadata types to numbers + metadata['Local Time Zone'] = int(metadata['Local Time Zone']) + metadata['Time Zone'] = int(metadata['Time Zone']) + metadata['Latitude'] = float(metadata['Latitude']) + metadata['Longitude'] = float(metadata['Longitude']) + metadata['Elevation'] = int(metadata['Elevation']) # get the column names so we can set the dtypes columns = fbuf.readline().split(',') columns[-1] = columns[-1].strip() # strip trailing newline @@ -282,10 +293,10 @@ def parse_psm3(fbuf): dtidx = pd.to_datetime( data[['Year', 'Month', 'Day', 'Hour', 'Minute']]) # in USA all timezones are integers - tz = 'Etc/GMT%+d' % -header['Time Zone'] + tz = 'Etc/GMT%+d' % -metadata['Time Zone'] data.index = pd.DatetimeIndex(dtidx).tz_localize(tz) - return header, data + return data, metadata def read_psm3(filename): @@ -293,6 +304,11 @@ def read_psm3(filename): Read an NSRDB PSM3 weather file (formatted as SAM CSV). The NSRDB is described in [1]_ and the SAM CSV format is described in [2]_. + .. versionchanged:: 0.9.0 + The function now returns a tuple where the first element is a dataframe + and the second element is a dictionary containing metadata. Previous + versions of this function had the return values switched. + Parameters ---------- filename: str @@ -300,11 +316,11 @@ def read_psm3(filename): Returns ------- - headers : dict - metadata from NREL PSM3 about the record, see - :func:`pvlib.iotools.parse_psm3` for fields data : pandas.DataFrame timeseries data from NREL PSM3 + metadata : dict + metadata from NREL PSM3 about the record, see + :func:`pvlib.iotools.parse_psm3` for fields See Also -------- diff --git a/pvlib/iotools/pvgis.py b/pvlib/iotools/pvgis.py index d43d4db87e..3bb2f977c6 100644 --- a/pvlib/iotools/pvgis.py +++ b/pvlib/iotools/pvgis.py @@ -20,6 +20,8 @@ import requests import pandas as pd from pvlib.iotools import read_epw, parse_epw +import warnings +from pvlib._deprecation import pvlibDeprecationWarning URL = 'https://re.jrc.ec.europa.eu/api/' @@ -363,19 +365,19 @@ def read_pvgis_hourly(filename, pvgis_format=None, map_variables=True): raise ValueError(err_msg) -def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, +def get_pvgis_tmy(latitude, longitude, outputformat='json', usehorizon=True, userhorizon=None, startyear=None, endyear=None, url=URL, - timeout=30): + map_variables=None, timeout=30): """ Get TMY data from PVGIS. For more information see the PVGIS [1]_ TMY tool documentation [2]_. Parameters ---------- - lat : float + latitude : float Latitude in degrees north - lon : float - Longitude in dgrees east + longitude : float + Longitude in degrees east outputformat : str, default 'json' Must be in ``['csv', 'basic', 'epw', 'json']``. See PVGIS TMY tool documentation [2]_ for more info. @@ -392,6 +394,9 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, last year to calculate TMY, must be at least 10 years from first year url : str, default :const:`pvlib.iotools.pvgis.URL` base url of PVGIS API, append ``tmy`` to get TMY endpoint + map_variables: bool + When true, renames columns of the Dataframe to pvlib variable names + where applicable. See variable PVGIS_VARIABLE_MAP. timeout : int, default 30 time in seconds to wait for server response before timeout @@ -403,8 +408,8 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, TMY year for each month, ``None`` for basic and EPW inputs : dict the inputs, ``None`` for basic and EPW - meta : list or dict - meta data, ``None`` for basic + metadata : list or dict + file metadata, ``None`` for basic Raises ------ @@ -426,7 +431,7 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, `_ """ # use requests to format the query string by passing params dictionary - params = {'lat': lat, 'lon': lon, 'outputformat': outputformat} + params = {'lat': latitude, 'lon': longitude, 'outputformat': outputformat} # pvgis only likes 0 for False, and 1 for True, not strings, also the # default for usehorizon is already 1 (ie: True), so only set if False if not usehorizon: @@ -452,22 +457,34 @@ def get_pvgis_tmy(lat, lon, outputformat='json', usehorizon=True, data = None, None, None, None if outputformat == 'json': src = res.json() - return _parse_pvgis_tmy_json(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_json(src) elif outputformat == 'csv': with io.BytesIO(res.content) as src: - data = _parse_pvgis_tmy_csv(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_csv(src) elif outputformat == 'basic': with io.BytesIO(res.content) as src: - data = _parse_pvgis_tmy_basic(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_basic(src) elif outputformat == 'epw': with io.StringIO(res.content.decode('utf-8')) as src: data, meta = parse_epw(src) - data = (data, None, None, meta) + months_selected, inputs = None, None else: # this line is never reached because if outputformat is not valid then # the response is HTTP/1.1 400 BAD REQUEST which is handled earlier pass - return data + + if map_variables is None: + warnings.warn( + 'PVGIS variable names will be renamed to pvlib conventions by ' + 'default starting in pvlib 0.10.0. Specify map_variables=True ' + 'to enable that behavior now, or specify map_variables=False ' + 'to hide this warning.', pvlibDeprecationWarning + ) + map_variables = False + if map_variables: + data = data.rename(columns=PVGIS_VARIABLE_MAP) + + return data, months_selected, inputs, meta def _parse_pvgis_tmy_json(src): @@ -521,7 +538,7 @@ def _parse_pvgis_tmy_basic(src): return data, None, None, None -def read_pvgis_tmy(filename, pvgis_format=None): +def read_pvgis_tmy(filename, pvgis_format=None, map_variables=None): """ Read a file downloaded from PVGIS. @@ -537,6 +554,10 @@ def read_pvgis_tmy(filename, pvgis_format=None): ``outputformat='basic'``, please set `pvgis_format` to ``'basic'``. If `filename` is a buffer, then `pvgis_format` is required and must be in ``['csv', 'epw', 'json', 'basic']``. + map_variables: bool + When true, renames columns of the Dataframe to pvlib variable names + where applicable. See variable PVGIS_VARIABLE_MAP. + Returns ------- @@ -546,8 +567,8 @@ def read_pvgis_tmy(filename, pvgis_format=None): TMY year for each month, ``None`` for basic and EPW inputs : dict the inputs, ``None`` for basic and EPW - meta : list or dict - meta data, ``None`` for basic + metadata : list or dict + file metadata, ``None`` for basic Raises ------ @@ -570,7 +591,6 @@ def read_pvgis_tmy(filename, pvgis_format=None): outputformat = Path(filename).suffix[1:].lower() else: outputformat = pvgis_format - # parse the pvgis file based on the output format, either 'epw', 'json', # 'csv', or 'basic' @@ -580,7 +600,7 @@ def read_pvgis_tmy(filename, pvgis_format=None): data, meta = parse_epw(filename) except AttributeError: # str/path has no .read() attribute data, meta = read_epw(filename) - return data, None, None, meta + months_selected, inputs = None, None # NOTE: json, csv, and basic output formats have parsers defined as private # functions in this module @@ -588,30 +608,44 @@ def read_pvgis_tmy(filename, pvgis_format=None): # JSON: use Python built-in json module to convert file contents to a # Python dictionary, and pass the dictionary to the _parse_pvgis_tmy_json() # function from this module - if outputformat == 'json': + elif outputformat == 'json': try: src = json.load(filename) except AttributeError: # str/path has no .read() attribute with open(str(filename), 'r') as fbuf: src = json.load(fbuf) - return _parse_pvgis_tmy_json(src) + data, months_selected, inputs, meta = _parse_pvgis_tmy_json(src) # CSV or basic: use the correct parser from this module # eg: _parse_pvgis_tmy_csv() or _parse_pvgist_tmy_basic() - if outputformat in ['csv', 'basic']: + elif outputformat in ['csv', 'basic']: # get the correct parser function for this output format from globals() pvgis_parser = globals()['_parse_pvgis_tmy_{:s}'.format(outputformat)] # NOTE: pvgis_parse() is a pvgis parser function from this module, # either _parse_pvgis_tmy_csv() or _parse_pvgist_tmy_basic() try: - pvgis_data = pvgis_parser(filename) + data, months_selected, inputs, meta = pvgis_parser(filename) except AttributeError: # str/path has no .read() attribute with open(str(filename), 'rb') as fbuf: - pvgis_data = pvgis_parser(fbuf) - return pvgis_data + data, months_selected, inputs, meta = pvgis_parser(fbuf) + + else: + # raise exception if pvgis format isn't in ['csv','basic','epw','json'] + err_msg = ( + "pvgis format '{:s}' was unknown, must be either 'epw', 'json', " + "'csv', or 'basic'").format(outputformat) + raise ValueError(err_msg) + + if map_variables is None: + warnings.warn( + 'PVGIS variable names will be renamed to pvlib conventions by ' + 'default starting in pvlib 0.10.0. Specify map_variables=True ' + 'to enable that behavior now, or specify map_variables=False ' + 'to hide this warning.', pvlibDeprecationWarning + ) + map_variables = False + if map_variables: + data = data.rename(columns=PVGIS_VARIABLE_MAP) + + return data, months_selected, inputs, meta - # raise exception if pvgis format isn't in ['csv', 'basic', 'epw', 'json'] - err_msg = ( - "pvgis format '{:s}' was unknown, must be either 'epw', 'json', 'csv'" - ", or 'basic'").format(outputformat) - raise ValueError(err_msg) diff --git a/pvlib/iotools/sodapro.py b/pvlib/iotools/sodapro.py index a27e6f1423..68fa82a396 100644 --- a/pvlib/iotools/sodapro.py +++ b/pvlib/iotools/sodapro.py @@ -41,7 +41,7 @@ '0 year 1 month 0 day 0 h 0 min 0 s': '1M'} -def get_cams(start, end, latitude, longitude, email, identifier='mcclear', +def get_cams(latitude, longitude, start, end, email, identifier='mcclear', altitude=None, time_step='1h', time_ref='UT', verbose=False, integrated=False, label=None, map_variables=True, server='www.soda-is.com', timeout=30): @@ -62,19 +62,19 @@ def get_cams(start, end, latitude, longitude, email, identifier='mcclear', Parameters ---------- - start: datetime like - First day of the requested period - end: datetime like - Last day of the requested period latitude: float in decimal degrees, between -90 and 90, north is positive (ISO 19115) longitude : float in decimal degrees, between -180 and 180, east is positive (ISO 19115) + start: datetime like + First day of the requested period + end: datetime like + Last day of the requested period email: str Email address linked to a SoDa account identifier: {'mcclear', 'cams_radiation'} Specify whether to retrieve CAMS Radiation or McClear parameters - altitude: float, default: None + altitude: float, optional Altitude in meters. If None, then the altitude is determined from the NASA SRTM database time_step: str, {'1min', '15min', '1h', '1d', '1M'}, default: '1h' @@ -96,7 +96,7 @@ def get_cams(start, end, latitude, longitude, email, identifier='mcclear', where applicable. See variable CAMS_VARIABLE_MAP. server: str, default: 'www.soda-is.com' Main server (www.soda-is.com) or backup mirror server (pro.soda-is.com) - timeout : int, default 30 + timeout : int, default: 30 Time in seconds to wait for server response before timeout Returns diff --git a/pvlib/tests/iotools/test_psm3.py b/pvlib/tests/iotools/test_psm3.py index ca3a5e3034..0b02c3c291 100644 --- a/pvlib/tests/iotools/test_psm3.py +++ b/pvlib/tests/iotools/test_psm3.py @@ -17,7 +17,7 @@ YEAR_TEST_DATA_5MIN = DATA_DIR / 'test_psm3_2019_5min.csv' MANUAL_TEST_DATA = DATA_DIR / 'test_read_psm3.csv' LATITUDE, LONGITUDE = 40.5137, -108.5449 -HEADER_FIELDS = [ +METADATA_FIELDS = [ 'Source', 'Location ID', 'City', 'State', 'Country', 'Latitude', 'Longitude', 'Time Zone', 'Elevation', 'Local Time Zone', 'Dew Point Units', 'DHI Units', 'DNI Units', 'GHI Units', @@ -46,7 +46,7 @@ def nrel_api_key(): return demo_key -def assert_psm3_equal(header, data, expected): +def assert_psm3_equal(data, metadata, expected): """check consistency of PSM3 data""" # check datevec columns assert np.allclose(data.Year, expected.Year) @@ -65,48 +65,48 @@ def assert_psm3_equal(header, data, expected): assert np.allclose(data['Wind Speed'], expected['Wind Speed']) assert np.allclose(data['Wind Direction'], expected['Wind Direction']) # check header - for hf in HEADER_FIELDS: - assert hf in header + for mf in METADATA_FIELDS: + assert mf in metadata # check timezone - assert (data.index.tzinfo.zone == 'Etc/GMT%+d' % -header['Time Zone']) + assert (data.index.tzinfo.zone == 'Etc/GMT%+d' % -metadata['Time Zone']) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_tmy(nrel_api_key): """test get_psm3 with a TMY""" - header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='tmy-2017') + data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='tmy-2017') expected = pd.read_csv(TMY_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_singleyear(nrel_api_key): """test get_psm3 with a single year""" - header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='2017', interval=30) + data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='2017', interval=30) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_5min(nrel_api_key): """test get_psm3 for 5-minute data""" - header, data = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, - PVLIB_EMAIL, names='2019', interval=5) + data, metadata = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + PVLIB_EMAIL, names='2019', interval=5) assert len(data) == 525600/5 first_day = data.loc['2019-01-01'] expected = pd.read_csv(YEAR_TEST_DATA_5MIN) - assert_psm3_equal(header, first_day, expected) + assert_psm3_equal(first_day, metadata, expected) @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_psm3_check_leap_day(nrel_api_key): - _, data_2012 = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, + data_2012, _ = psm3.get_psm3(LATITUDE, LONGITUDE, nrel_api_key, PVLIB_EMAIL, names="2012", interval=60, leap_day=True) assert len(data_2012) == (8760 + 24) @@ -149,13 +149,13 @@ def io_input(request): def test_parse_psm3(io_input): """test parse_psm3""" - header, data = psm3.parse_psm3(io_input) + data, metadata = psm3.parse_psm3(io_input) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) def test_read_psm3(): """test read_psm3""" - header, data = psm3.read_psm3(MANUAL_TEST_DATA) + data, metadata = psm3.read_psm3(MANUAL_TEST_DATA) expected = pd.read_csv(YEAR_TEST_DATA) - assert_psm3_equal(header, data, expected) + assert_psm3_equal(data, metadata, expected) diff --git a/pvlib/tests/iotools/test_pvgis.py b/pvlib/tests/iotools/test_pvgis.py index fc0638ed74..5a097d25e5 100644 --- a/pvlib/tests/iotools/test_pvgis.py +++ b/pvlib/tests/iotools/test_pvgis.py @@ -9,7 +9,9 @@ import requests from pvlib.iotools import get_pvgis_tmy, read_pvgis_tmy from pvlib.iotools import get_pvgis_hourly, read_pvgis_hourly -from ..conftest import DATA_DIR, RERUNS, RERUNS_DELAY, assert_frame_equal +from ..conftest import (DATA_DIR, RERUNS, RERUNS_DELAY, assert_frame_equal, + fail_on_pvlib_version) +from pvlib._deprecation import pvlibDeprecationWarning # PVGIS Hourly tests @@ -356,11 +358,28 @@ def csv_meta(meta_expected): in meta_expected['outputs']['tmy_hourly']['variables'].items()] +@pytest.fixture +def pvgis_tmy_mapped_columns(): + return ['temp_air', 'relative_humidity', 'ghi', 'dni', 'dhi', 'IR(h)', + 'wind_speed', 'wind_direction', 'pressure'] + + +@fail_on_pvlib_version('0.10') +@pytest.mark.remote_data +@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) +def test_pvgis_tmy_variable_map_deprecating_warning_0_10(): + with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'): + _ = get_pvgis_tmy(45, 8) + with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'): + fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.epw' + _ = read_pvgis_tmy(fn) + + @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy(expected, month_year_expected, inputs_expected, meta_expected): - pvgis_data = get_pvgis_tmy(45, 8) + pvgis_data = get_pvgis_tmy(45, 8, map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) @@ -393,26 +412,28 @@ def _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_kwargs(userhorizon_expected): - _, _, inputs, _ = get_pvgis_tmy(45, 8, usehorizon=False) + _, _, inputs, _ = get_pvgis_tmy(45, 8, usehorizon=False, + map_variables=False) assert inputs['meteo_data']['use_horizon'] is False data, _, _, _ = get_pvgis_tmy( - 45, 8, userhorizon=[0, 10, 20, 30, 40, 15, 25, 5]) + 45, 8, userhorizon=[0, 10, 20, 30, 40, 15, 25, 5], map_variables=False) assert np.allclose( data['G(h)'], userhorizon_expected['G(h)'].values) assert np.allclose( data['Gb(n)'], userhorizon_expected['Gb(n)'].values) assert np.allclose( data['Gd(h)'], userhorizon_expected['Gd(h)'].values) - _, _, inputs, _ = get_pvgis_tmy(45, 8, startyear=2005) + _, _, inputs, _ = get_pvgis_tmy(45, 8, startyear=2005, map_variables=False) assert inputs['meteo_data']['year_min'] == 2005 - _, _, inputs, _ = get_pvgis_tmy(45, 8, endyear=2016) + _, _, inputs, _ = get_pvgis_tmy(45, 8, endyear=2016, map_variables=False) assert inputs['meteo_data']['year_max'] == 2016 @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_basic(expected, meta_expected): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='basic') + pvgis_data = get_pvgis_tmy(45, 8, outputformat='basic', + map_variables=False) _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) @@ -427,7 +448,7 @@ def _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data): @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='csv') + pvgis_data = get_pvgis_tmy(45, 8, outputformat='csv', map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) @@ -458,7 +479,7 @@ def _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, @pytest.mark.remote_data @pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) def test_get_pvgis_tmy_epw(expected, epw_meta): - pvgis_data = get_pvgis_tmy(45, 8, outputformat='epw') + pvgis_data = get_pvgis_tmy(45, 8, outputformat='epw', map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) @@ -481,19 +502,33 @@ def test_get_pvgis_tmy_error(): get_pvgis_tmy(45, 8, url='https://re.jrc.ec.europa.eu/') +@pytest.mark.remote_data +@pytest.mark.flaky(reruns=RERUNS, reruns_delay=RERUNS_DELAY) +def test_get_pvgis_map_variables(pvgis_tmy_mapped_columns): + actual, _, _, _ = get_pvgis_tmy(45, 8, map_variables=True) + assert all([c in pvgis_tmy_mapped_columns for c in actual.columns]) + + +def test_read_pvgis_tmy_map_variables(pvgis_tmy_mapped_columns): + fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.json' + actual, _, _, _ = read_pvgis_tmy(fn, map_variables=True) + assert all([c in pvgis_tmy_mapped_columns for c in actual.columns]) + + def test_read_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.json' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn) + pvgis_data = read_pvgis_tmy(fn, map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='json') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='json', map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) with fn.open('r') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='json') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='json', + map_variables=False) _compare_pvgis_tmy_json(expected, month_year_expected, inputs_expected, meta_expected, pvgis_data) @@ -501,13 +536,14 @@ def test_read_pvgis_tmy_json(expected, month_year_expected, inputs_expected, def test_read_pvgis_tmy_epw(expected, epw_meta): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.epw' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn) + pvgis_data = read_pvgis_tmy(fn, map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='epw') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='epw', map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) with fn.open('r') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='epw') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='epw', + map_variables=False) _compare_pvgis_tmy_epw(expected, epw_meta, pvgis_data) @@ -515,15 +551,16 @@ def test_read_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.csv' # infer outputformat from file extensions - pvgis_data = read_pvgis_tmy(fn) + pvgis_data = read_pvgis_tmy(fn, map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='csv') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='csv', map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) with fn.open('rb') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='csv') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='csv', + map_variables=False) _compare_pvgis_tmy_csv(expected, month_year_expected, inputs_expected, meta_expected, csv_meta, pvgis_data) @@ -532,20 +569,22 @@ def test_read_pvgis_tmy_basic(expected, meta_expected): fn = DATA_DIR / 'tmy_45.000_8.000_2005_2016.txt' # XXX: can't infer outputformat from file extensions for basic with pytest.raises(ValueError, match="pvgis format 'txt' was unknown"): - read_pvgis_tmy(fn) + read_pvgis_tmy(fn, map_variables=False) # explicit pvgis outputformat - pvgis_data = read_pvgis_tmy(fn, pvgis_format='basic') + pvgis_data = read_pvgis_tmy(fn, pvgis_format='basic', map_variables=False) _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) with fn.open('rb') as fbuf: - pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='basic') + pvgis_data = read_pvgis_tmy(fbuf, pvgis_format='basic', + map_variables=False) _compare_pvgis_tmy_basic(expected, meta_expected, pvgis_data) # file buffer raises TypeError if passed to pathlib.Path() with pytest.raises(TypeError): - read_pvgis_tmy(fbuf) + read_pvgis_tmy(fbuf, map_variables=False) def test_read_pvgis_tmy_exception(): bad_outputformat = 'bad' err_msg = f"pvgis format '{bad_outputformat:s}' was unknown" with pytest.raises(ValueError, match=err_msg): - read_pvgis_tmy('filename', pvgis_format=bad_outputformat) + read_pvgis_tmy('filename', pvgis_format=bad_outputformat, + map_variables=False) diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index e52bda72bd..86b7411d0f 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -1778,7 +1778,7 @@ def test_ModelChain_no_extra_kwargs(sapm_dc_snl_ac_system, location): ModelChain(sapm_dc_snl_ac_system, location, arbitrary_kwarg='value') -@fail_on_pvlib_version('1.0') +@fail_on_pvlib_version('0.10') def test_ModelChain_attributes_deprecated_10(sapm_dc_snl_ac_system, location): match = 'Use ModelChain.results' mc = ModelChain(sapm_dc_snl_ac_system, location) From 238146ddccdc4a0838a2cc7435abf512e8f6bc00 Mon Sep 17 00:00:00 2001 From: Will Holmgren Date: Tue, 17 Aug 2021 10:06:33 -0700 Subject: [PATCH 5/8] fix ForecastModel.get_data handling of timezones (#1285) * fix ForecastModel.get_data handling of timezones * update pr number --- docs/sphinx/source/whatsnew/v0.9.0.rst | 12 +++++++----- pvlib/forecast.py | 13 +++++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index 3276dfb640..ed804160ac 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -127,7 +127,7 @@ Enhancements for retrieving and reading BSRN solar radiation data files. (:pull:`1254`, :pull:`1145`, :issue:`1015`) * Add :func:`~pvlib.iotools.get_cams`, - :func:`~pvlib.iotools.parse_cams`, and + :func:`~pvlib.iotools.parse_cams`, and :func:`~pvlib.iotools.read_cams` for retrieving, parsing, and reading CAMS Radiation and McClear time-series files. (:pull:`1175`) @@ -179,9 +179,9 @@ Enhancements Bug fixes ~~~~~~~~~ * Corrected an error in :py:func:`~pvlib.irradiance.perez` where the horizon - irradiance component was prevented from taking negative values. Negative - values are intentional according to the original publication. Changes in - output are expected to be small and primarily occur at low irradiance + irradiance component was prevented from taking negative values. Negative + values are intentional according to the original publication. Changes in + output are expected to be small and primarily occur at low irradiance conditions. (:issue:`1238`, :pull:`1239`) * Pass weather data to solar position calculations in @@ -205,7 +205,9 @@ Bug fixes * Changed deprecated use of ``.astype()`` to ``.view()`` in :py:mod:`~pvlib.solarposition`. (:pull:`1256`, :issue:`1261`, :pull:`1262`) * Fix :py:func:`~pvlib.tracking.singleaxis` AOI wrong when sun behind module. - (:pull:`1273`, :issue:`1221`) + (:pull:`1273`, :issue:`1221`) +* Fix :py:meth:`~pvlib.forecast.ForecastModel.get_data` failure to correct for + non-UTC timezones. (:issue:`1237`, :pull:`1285`) Testing ~~~~~~~ diff --git a/pvlib/forecast.py b/pvlib/forecast.py index 55539f5760..74f533a62b 100644 --- a/pvlib/forecast.py +++ b/pvlib/forecast.py @@ -183,7 +183,12 @@ def set_query_time_range(self, start, end): self.end = pd.Timestamp(end) if self.start.tz is None or self.end.tz is None: raise TypeError('start and end must be tz-localized') - self.query.time_range(self.start, self.end) + # don't assume that siphon or the server can handle anything other + # than UTC + self.query.time_range( + self.start.tz_convert('UTC'), + self.end.tz_convert('UTC') + ) def set_query_latlon(self): ''' @@ -412,10 +417,14 @@ def set_time(self, time): ------- pandas.DatetimeIndex ''' + # np.masked_array with elements like real_datetime(2021, 8, 17, 16, 0) + # and dtype=object times = num2date(time[:].squeeze(), time.units, only_use_cftime_datetimes=False, only_use_python_datetimes=True) - self.time = pd.DatetimeIndex(pd.Series(times), tz=self.location.tz) + # convert to pandas, localize to UTC, convert to desired timezone + self.time = pd.DatetimeIndex( + times, tz='UTC').tz_convert(self.location.tz) def cloud_cover_to_ghi_linear(self, cloud_cover, ghi_clear, offset=35, **kwargs): From cdb0b12b56b82c8da11bffe8d06e05ba38faa8f7 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Thu, 19 Aug 2021 10:02:35 -0600 Subject: [PATCH 6/8] add "powered by pvlib" logos (#1277) * add powered logos * change README, whatsnew * add powered by logos, license to docs * blank line * link formatting * move logos to citing. move citing up, license down * one line for less vert space * typo Co-authored-by: Will Holmgren --- README.md | 32 +++++++++++------- .../_images/pvlib_powered_logo_horiz.png | Bin 0 -> 127851 bytes .../_images/pvlib_powered_logo_vert.png | Bin 0 -> 111495 bytes docs/sphinx/source/index.rst | 18 ++++++++-- docs/sphinx/source/whatsnew/v0.9.0.rst | 1 + 5 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 docs/sphinx/source/_images/pvlib_powered_logo_horiz.png create mode 100644 docs/sphinx/source/_images/pvlib_powered_logo_vert.png diff --git a/README.md b/README.md index 941906c247..2911388d29 100644 --- a/README.md +++ b/README.md @@ -111,11 +111,24 @@ Please see the [Contributing page](http://pvlib-python.readthedocs.io/en/stable/ The long-term success of pvlib-python requires substantial community support. -License -======= +Citing +====== + +If you use pvlib-python in a published work, please cite: + + William F. Holmgren, Clifford W. Hansen, and Mark A. Mikofski. + "pvlib python: a python package for modeling solar energy systems." + Journal of Open Source Software, 3(29), 884, (2018). + https://doi.org/10.21105/joss.00884 -BSD 3-clause +Please also cite the DOI corresponding to the specific version of +pvlib-python that you used. pvlib-python DOIs are listed at +[Zenodo.org](https://zenodo.org/search?page=1&size=20&q=conceptrecid:593284&all_versions&sort=-version) +If you use pvlib-python in a commercial or publicly-available application, please +consider displaying one of the "powered by pvlib" logos: + + Getting support =============== @@ -133,19 +146,12 @@ change something about pvlib, then please make an issue on our [GitHub issues page](https://github.com/pvlib/pvlib-python/issues). -Citing -====== -If you use pvlib-python in a published work, please cite: +License +======= - William F. Holmgren, Clifford W. Hansen, and Mark A. Mikofski. - "pvlib python: a python package for modeling solar energy systems." - Journal of Open Source Software, 3(29), 884, (2018). - https://doi.org/10.21105/joss.00884 +BSD 3-clause. -Please also cite the DOI corresponding to the specific version of -pvlib-python that you used. pvlib-python DOIs are listed at -[Zenodo.org](https://zenodo.org/search?page=1&size=20&q=conceptrecid:593284&all_versions&sort=-version) NumFOCUS ======== diff --git a/docs/sphinx/source/_images/pvlib_powered_logo_horiz.png b/docs/sphinx/source/_images/pvlib_powered_logo_horiz.png new file mode 100644 index 0000000000000000000000000000000000000000..71dd1d35425bd97eb09855b8cb53ebfc26da6bda GIT binary patch literal 127851 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
  • Z*lc%Ny{dWi3Qm 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□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 NPDWWe|Gu%`{{d>bs!ad@ literal 0 HcmV?d00001 diff --git a/docs/sphinx/source/_images/pvlib_powered_logo_vert.png b/docs/sphinx/source/_images/pvlib_powered_logo_vert.png new file mode 100644 index 0000000000000000000000000000000000000000..f23697144a493057c428be97901028254f967b26 GIT binary patch literal 111495 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%0DBSe9QwC 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 literal 0 HcmV?d00001 diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst index 1717ec233f..c2fe9ff106 100644 --- a/docs/sphinx/source/index.rst +++ b/docs/sphinx/source/index.rst @@ -9,8 +9,7 @@ functions and classes for simulating the performance of photovoltaic energy systems. pvlib python was originally ported from the PVLIB MATLAB toolbox developed at Sandia National Laboratories and it implements many of the models and methods developed at the Labs. More information on -Sandia Labs PV performance modeling programs can be found at -https://pvpmc.sandia.gov/. We collaborate with the PVLIB MATLAB project, +Sandia Labs PV performance modeling programs can be found at the `PVPMC `_. We collaborate with the PVLIB MATLAB project, but operate independently of it. The source code for pvlib python is hosted on `github @@ -50,6 +49,16 @@ Please also cite the DOI corresponding to the specific version of pvlib python that you used. pvlib python DOIs are listed at `Zenodo.org `_ +If you use pvlib-python in a commercial or publicly-available +application, please consider displaying one of the "powered by pvlib" +logos: + +.. image:: _images/pvlib_powered_logo_horiz.png + :width: 300 + +.. image:: _images/pvlib_powered_logo_vert.png + :width: 300 + Additional pvlib python publications include: * J. S. Stein, “The photovoltaic performance modeling @@ -73,6 +82,10 @@ Additional pvlib python publications include: "An Open Source Solar Power Forecasting Tool Using PVLIB-Python," in 43rd Photovoltaic Specialists Conference, 2016. +License +======= + +`BSD 3-clause `_. NumFOCUS ======== @@ -83,7 +96,6 @@ pvlib python is a `NumFOCUS Affiliated Project Date: Fri, 20 Aug 2021 21:10:33 -0600 Subject: [PATCH 7/8] Fix broken internal sphinx references (#1288) * fix various broken internal references * undo accidental change * stickler * "not controversial" but not correct either. pvlib.tmy -> pvlib.iotools --- docs/sphinx/source/timetimezones.rst | 4 ++-- pvlib/ivtools/sde.py | 2 +- pvlib/location.py | 6 +++--- pvlib/pvsystem.py | 13 +++++++------ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/sphinx/source/timetimezones.rst b/docs/sphinx/source/timetimezones.rst index dc5f91f565..235bd4776c 100644 --- a/docs/sphinx/source/timetimezones.rst +++ b/docs/sphinx/source/timetimezones.rst @@ -278,7 +278,7 @@ Let's first examine how pvlib handles time when it imports a TMY3 file. The metadata has a ``'TZ'`` key with a value of ``-9.0``. This is the UTC offset in hours in which the data has been recorded. The -:py:func:`~pvlib.tmy.readtmy3` function read the data in the file, +:py:func:`~pvlib.iotools.read_tmy3` function read the data in the file, created a :py:class:`~pandas.DataFrame` with that data, and then localized the DataFrame's index to have this fixed offset. Here, we print just a few of the rows and columns of the large dataframe. @@ -289,7 +289,7 @@ print just a few of the rows and columns of the large dataframe. tmy3_data.loc[tmy3_data.index[0:3], ['GHI', 'DNI', 'AOD']] -The :py:func:`~pvlib.tmy.readtmy2` function also returns a DataFrame +The :py:func:`~pvlib.iotools.read_tmy2` function also returns a DataFrame with a localized DatetimeIndex. Solar position diff --git a/pvlib/ivtools/sde.py b/pvlib/ivtools/sde.py index 1042a19736..dad1add22f 100644 --- a/pvlib/ivtools/sde.py +++ b/pvlib/ivtools/sde.py @@ -90,7 +90,7 @@ def fit_sandia_simple(voltage, current, v_oc=None, i_sc=None, v_mp_i_mp=None, I = I_{L} - I_{0} (\exp \frac{V + I R_{s}}{nNsVth} - 1) - \frac{V + I R_{s}}{R_{sh}} - See :py:func:`pvsystem.singlediode` for definition of the parameters. + See :py:func:`pvlib.pvsystem.singlediode` for definition of the parameters. The extraction method [2]_ proceeds in six steps. diff --git a/pvlib/location.py b/pvlib/location.py index 93d54fcd9e..97767a5801 100644 --- a/pvlib/location.py +++ b/pvlib/location.py @@ -164,7 +164,7 @@ def from_epw(cls, metadata, data=None, **kwargs): def get_solarposition(self, times, pressure=None, temperature=12, **kwargs): """ - Uses the :py:func:`solarposition.get_solarposition` function + Uses the :py:func:`pvlib.solarposition.get_solarposition` function to calculate the solar zenith, azimuth, etc. at this location. Parameters @@ -173,11 +173,11 @@ def get_solarposition(self, times, pressure=None, temperature=12, Must be localized or UTC will be assumed. pressure : None, float, or array-like, default None If None, pressure will be calculated using - :py:func:`atmosphere.alt2pres` and ``self.altitude``. + :py:func:`pvlib.atmosphere.alt2pres` and ``self.altitude``. temperature : None, float, or array-like, default 12 kwargs - passed to :py:func:`solarposition.get_solarposition` + passed to :py:func:`pvlib.solarposition.get_solarposition` Returns ------- diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index eb288978d4..6bb89f34a3 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -627,7 +627,7 @@ def sapm(self, effective_irradiance, temp_cell): @deprecated('0.9', alternative='PVSystem.get_cell_temperature', removal='0.10.0') def sapm_celltemp(self, poa_global, temp_air, wind_speed): - """Uses :py:func:`temperature.sapm_cell` to calculate cell + """Uses :py:func:`pvlib.temperature.sapm_cell` to calculate cell temperatures. Parameters @@ -720,7 +720,7 @@ def sapm_effective_irradiance(self, poa_direct, poa_diffuse, @deprecated('0.9', alternative='PVSystem.get_cell_temperature', removal='0.10.0') def pvsyst_celltemp(self, poa_global, temp_air, wind_speed=1.0): - """Uses :py:func:`temperature.pvsyst_cell` to calculate cell + """Uses :py:func:`pvlib.temperature.pvsyst_cell` to calculate cell temperature. Parameters @@ -756,7 +756,7 @@ def pvsyst_celltemp(self, poa_global, temp_air, wind_speed=1.0): removal='0.10.0') def faiman_celltemp(self, poa_global, temp_air, wind_speed=1.0): """ - Use :py:func:`temperature.faiman` to calculate cell temperature. + Use :py:func:`pvlib.temperature.faiman` to calculate cell temperature. Parameters ---------- @@ -791,7 +791,7 @@ def faiman_celltemp(self, poa_global, temp_air, wind_speed=1.0): removal='0.10.0') def fuentes_celltemp(self, poa_global, temp_air, wind_speed): """ - Use :py:func:`temperature.fuentes` to calculate cell temperature. + Use :py:func:`pvlib.temperature.fuentes` to calculate cell temperature. Parameters ---------- @@ -834,7 +834,8 @@ def fuentes_celltemp(self, poa_global, temp_air, wind_speed): def noct_sam_celltemp(self, poa_global, temp_air, wind_speed, effective_irradiance=None): """ - Use :py:func:`temperature.noct_sam` to calculate cell temperature. + Use :py:func:`pvlib.temperature.noct_sam` to calculate cell + temperature. Parameters ---------- @@ -871,7 +872,7 @@ def noct_sam_celltemp(self, poa_global, temp_air, wind_speed, @_unwrap_single_value def first_solar_spectral_loss(self, pw, airmass_absolute): """ - Use the :py:func:`first_solar_spectral_correction` function to + Use :py:func:`pvlib.atmosphere.first_solar_spectral_correction` to calculate the spectral loss modifier. The model coefficients are specific to the module's cell type, and are determined by searching for one of the following keys in self.module_parameters (in order): From 65782fdf24c96cc092329942e29904e78b0b3cce Mon Sep 17 00:00:00 2001 From: Kevin Anderson <57452607+kanderso-nrel@users.noreply.github.com> Date: Tue, 24 Aug 2021 09:41:25 -0600 Subject: [PATCH 8/8] Make tables a required dependency (#1287) * make tables a required dep, remove requires_tables test decorator * whatsnew * add tables to 3.6-min yml * use pip for tables on 3.6 and 3.7 for windows DLL load issue * use pip tables on 3.6-min for numpy compat issue * only install tables by default if not (OSX & 3.9) * remove tables from 3.6-min * forgot the OS X part * put back requires_tables decorator * fix silly bug * reset back to 636da68 * inelegantly disable mac os/py 3.9 job * add pytables to 3.6-min * fix posix.yml condition * try different string interpolation * I don't understand azure variables so skip mac/3.9 this way instead * pin to blosc to older version to get tables working on win 3.6 and 3.7 * pin an older numexpr compatible with our min numpy for 3.6-min * promote tables to a normal import in clearsky.py --- azure-pipelines.yml | 2 +- ci/azure/posix_no_39.yml | 39 ++++++++++++++++++++++++++ ci/requirements-py36-min.yml | 2 ++ ci/requirements-py36.yml | 1 + ci/requirements-py37.yml | 1 + docs/sphinx/source/whatsnew/v0.9.0.rst | 3 +- pvlib/clearsky.py | 8 +----- 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 ++-- 12 files changed, 53 insertions(+), 35 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_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' diff --git a/ci/requirements-py36-min.yml b/ci/requirements-py36-min.yml index 84adcb360d..efcb166e68 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 @@ -20,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 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 diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index 19458510b3..fc5c9a1fde 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -230,7 +230,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 ~~~~~~~~~~~~ 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') 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',