From f4582a32309366e260cd813a0a4ebd95095a5574 Mon Sep 17 00:00:00 2001 From: "Adam R. Jensen" <39184289+AdamRJensen@users.noreply.github.com> Date: Sat, 16 Sep 2023 14:58:37 +0200 Subject: [PATCH 1/5] Remove deprecated basic_chain --- pvlib/modelchain.py | 165 +------------------------------------------- 1 file changed, 1 insertion(+), 164 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index a4d2a19317..3d62647df7 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -13,14 +13,11 @@ from dataclasses import dataclass, field from typing import Union, Tuple, Optional, TypeVar -from pvlib import (atmosphere, clearsky, inverter, pvsystem, solarposition, - temperature, iam) +from pvlib import pvsystem, iam import pvlib.irradiance # avoid name conflict with full import from pvlib.pvsystem import _DC_MODEL_PARAMS from pvlib.tools import _build_kwargs -from pvlib._deprecation import deprecated - # keys that are used to detect input data and assign data to appropriate # ModelChain attribute # for ModelChain.weather @@ -62,165 +59,6 @@ ) -@deprecated( - since='0.9.1', - name='pvlib.modelchain.basic_chain', - alternative=('pvlib.modelchain.ModelChain.with_pvwatts' - ' or pvlib.modelchain.ModelChain.with_sapm'), - addendum='Note that the with_xyz methods take different model parameters.' -) -def basic_chain(times, latitude, longitude, - surface_tilt, surface_azimuth, - module_parameters, temperature_model_parameters, - inverter_parameters, - irradiance=None, weather=None, - transposition_model='haydavies', - solar_position_method='nrel_numpy', - airmass_model='kastenyoung1989', - altitude=None, pressure=None, - **kwargs): - """ - An experimental function that computes all of the modeling steps - necessary for calculating power or energy for a PV system at a given - location. - - Parameters - ---------- - times : DatetimeIndex - Times at which to evaluate the model. - - latitude : float. - Positive is north of the equator. - Use decimal degrees notation. - - longitude : float. - Positive is east of the prime meridian. - Use decimal degrees notation. - - surface_tilt : numeric - Surface tilt angles in decimal degrees. - The tilt angle is defined as degrees from horizontal - (e.g. surface facing up = 0, surface facing horizon = 90) - - surface_azimuth : numeric - Surface azimuth angles in decimal degrees. - The azimuth convention is defined - as degrees east of north - (North=0, South=180, East=90, West=270). - - module_parameters : None, dict or Series - Module parameters as defined by the SAPM. See pvsystem.sapm for - details. - - temperature_model_parameters : None, dict or Series. - Temperature model parameters as defined by the SAPM. - See temperature.sapm_cell for details. - - inverter_parameters : None, dict or Series - Inverter parameters as defined by the CEC. See - :py:func:`inverter.sandia` for details. - - irradiance : None or DataFrame, default None - If None, calculates clear sky data. - Columns must be 'dni', 'ghi', 'dhi'. - - weather : None or DataFrame, default None - If None, assumes air temperature is 20 C and - wind speed is 0 m/s. - Columns must be 'wind_speed', 'temp_air'. - - transposition_model : str, default 'haydavies' - Passed to system.get_irradiance. - - solar_position_method : str, default 'nrel_numpy' - Passed to solarposition.get_solarposition. - - airmass_model : str, default 'kastenyoung1989' - Passed to atmosphere.relativeairmass. - - altitude : None or float, default None - If None, computed from pressure. Assumed to be 0 m - if pressure is also None. - - pressure : None or float, default None - If None, computed from altitude. Assumed to be 101325 Pa - if altitude is also None. - - **kwargs - Arbitrary keyword arguments. - See code for details. - - Returns - ------- - output : (dc, ac) - Tuple of DC power (with SAPM parameters) (DataFrame) and AC - power (Series). - """ - - if altitude is None and pressure is None: - altitude = 0. - pressure = 101325. - elif altitude is None: - altitude = atmosphere.pres2alt(pressure) - elif pressure is None: - pressure = atmosphere.alt2pres(altitude) - - solar_position = solarposition.get_solarposition( - times, latitude, longitude, altitude=altitude, pressure=pressure, - method=solar_position_method, **kwargs) - - # possible error with using apparent zenith with some models - airmass = atmosphere.get_relative_airmass( - solar_position['apparent_zenith'], model=airmass_model) - airmass = atmosphere.get_absolute_airmass(airmass, pressure) - dni_extra = pvlib.irradiance.get_extra_radiation(solar_position.index) - - aoi = pvlib.irradiance.aoi(surface_tilt, surface_azimuth, - solar_position['apparent_zenith'], - solar_position['azimuth']) - - if irradiance is None: - linke_turbidity = clearsky.lookup_linke_turbidity( - solar_position.index, latitude, longitude) - irradiance = clearsky.ineichen( - solar_position['apparent_zenith'], - airmass, - linke_turbidity, - altitude=altitude, - dni_extra=dni_extra - ) - - total_irrad = pvlib.irradiance.get_total_irradiance( - surface_tilt, - surface_azimuth, - solar_position['apparent_zenith'], - solar_position['azimuth'], - irradiance['dni'], - irradiance['ghi'], - irradiance['dhi'], - model=transposition_model, - dni_extra=dni_extra) - - if weather is None: - weather = {'wind_speed': 0, 'temp_air': 20} - - cell_temperature = temperature.sapm_cell( - total_irrad['poa_global'], weather['temp_air'], weather['wind_speed'], - temperature_model_parameters['a'], temperature_model_parameters['b'], - temperature_model_parameters['deltaT']) - - effective_irradiance = pvsystem.sapm_effective_irradiance( - total_irrad['poa_direct'], total_irrad['poa_diffuse'], airmass, aoi, - module_parameters) - - dc = pvsystem.sapm(effective_irradiance, cell_temperature, - module_parameters) - - ac = inverter.sandia(dc['v_mp'], dc['p_mp'], inverter_parameters) - - return dc, ac - - def get_orientation(strategy, **kwargs): """ Determine a PV system's surface tilt and surface azimuth @@ -238,7 +76,6 @@ def get_orientation(strategy, **kwargs): ------- surface_tilt, surface_azimuth """ - if strategy == 'south_at_latitude_tilt': surface_azimuth = 180 surface_tilt = kwargs['latitude'] From 1b7485b129c00242258103b5a12542f0b91b4fbf Mon Sep 17 00:00:00 2001 From: "Adam R. Jensen" <39184289+AdamRJensen@users.noreply.github.com> Date: Sat, 16 Sep 2023 15:00:18 +0200 Subject: [PATCH 2/5] Remvoe basic_chain from docs and tests --- docs/sphinx/source/reference/modelchain.rst | 1 - pvlib/tests/test_modelchain.py | 57 --------------------- 2 files changed, 58 deletions(-) diff --git a/docs/sphinx/source/reference/modelchain.rst b/docs/sphinx/source/reference/modelchain.rst index b8ce6744fb..bcbb0006b9 100644 --- a/docs/sphinx/source/reference/modelchain.rst +++ b/docs/sphinx/source/reference/modelchain.rst @@ -124,5 +124,4 @@ Functions for power modeling. .. autosummary:: :toctree: generated/ - modelchain.basic_chain modelchain.get_orientation diff --git a/pvlib/tests/test_modelchain.py b/pvlib/tests/test_modelchain.py index d9dfc7bd64..8dace687bb 100644 --- a/pvlib/tests/test_modelchain.py +++ b/pvlib/tests/test_modelchain.py @@ -1773,63 +1773,6 @@ def test_ModelChain_no_extra_kwargs(sapm_dc_snl_ac_system, location): ModelChain(sapm_dc_snl_ac_system, location, arbitrary_kwarg='value') -def test_basic_chain_alt_az(sam_data, cec_inverter_parameters, - sapm_temperature_cs5p_220m): - times = pd.date_range(start='20160101 1200-0700', - end='20160101 1800-0700', freq='6H') - latitude = 32.2 - longitude = -111 - surface_tilt = 0 - surface_azimuth = 0 - modules = sam_data['sandiamod'] - module_parameters = modules['Canadian_Solar_CS5P_220M___2009_'] - temp_model_params = sapm_temperature_cs5p_220m.copy() - with pytest.warns(pvlibDeprecationWarning, match='with_pvwatts'): - dc, ac = modelchain.basic_chain(times, latitude, longitude, - surface_tilt, surface_azimuth, - module_parameters, temp_model_params, - cec_inverter_parameters) - - expected = pd.Series(np.array([111.621405, -2.00000000e-02]), - index=times) - assert_series_equal(ac, expected) - - -def test_basic_chain_altitude_pressure(sam_data, cec_inverter_parameters, - sapm_temperature_cs5p_220m): - times = pd.date_range(start='20160101 1200-0700', - end='20160101 1800-0700', freq='6H') - latitude = 32.2 - longitude = -111 - altitude = 700 - surface_tilt = 0 - surface_azimuth = 0 - modules = sam_data['sandiamod'] - module_parameters = modules['Canadian_Solar_CS5P_220M___2009_'] - temp_model_params = sapm_temperature_cs5p_220m.copy() - with pytest.warns(pvlibDeprecationWarning, match='with_pvwatts'): - dc, ac = modelchain.basic_chain(times, latitude, longitude, - surface_tilt, surface_azimuth, - module_parameters, temp_model_params, - cec_inverter_parameters, - pressure=93194) - - expected = pd.Series(np.array([113.190045, -2.00000000e-02]), - index=times) - assert_series_equal(ac, expected) - - with pytest.warns(pvlibDeprecationWarning, match='with_pvwatts'): - dc, ac = modelchain.basic_chain(times, latitude, longitude, - surface_tilt, surface_azimuth, - module_parameters, temp_model_params, - cec_inverter_parameters, - altitude=altitude) - - expected = pd.Series(np.array([113.189814, -2.00000000e-02]), - index=times) - assert_series_equal(ac, expected) - - def test_complete_irradiance_clean_run(sapm_dc_snl_ac_system, location): """The DataFrame should not change if all columns are passed""" mc = ModelChain(sapm_dc_snl_ac_system, location) From 22ac1ce9279f33c2b5d0d03e67cb0216f1176c14 Mon Sep 17 00:00:00 2001 From: "Adam R. Jensen" <39184289+AdamRJensen@users.noreply.github.com> Date: Sat, 16 Sep 2023 15:01:35 +0200 Subject: [PATCH 3/5] Update v0.10.2.rst --- docs/sphinx/source/whatsnew/v0.10.2.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sphinx/source/whatsnew/v0.10.2.rst b/docs/sphinx/source/whatsnew/v0.10.2.rst index 92fbadc2f8..5673c8cdae 100644 --- a/docs/sphinx/source/whatsnew/v0.10.2.rst +++ b/docs/sphinx/source/whatsnew/v0.10.2.rst @@ -7,7 +7,7 @@ v0.10.2 (Anticipated September, 2023) Deprecations ~~~~~~~~~~~~ - +* The deprecated :py:func:`pvlib.modelchain.basic_chain` has now been removed. (:pull:`1862`) Enhancements ~~~~~~~~~~~~ From d0ce3ecae018ec237486074462b6e9f0f28a8155 Mon Sep 17 00:00:00 2001 From: "Adam R. Jensen" <39184289+AdamRJensen@users.noreply.github.com> Date: Fri, 24 May 2024 10:58:48 +0200 Subject: [PATCH 4/5] Fix whatsnew files --- docs/sphinx/source/whatsnew/v0.10.2.rst | 2 ++ docs/sphinx/source/whatsnew/v0.11.0.rst | 1 + 2 files changed, 3 insertions(+) diff --git a/docs/sphinx/source/whatsnew/v0.10.2.rst b/docs/sphinx/source/whatsnew/v0.10.2.rst index b2b0d1d79a..3b82d98613 100644 --- a/docs/sphinx/source/whatsnew/v0.10.2.rst +++ b/docs/sphinx/source/whatsnew/v0.10.2.rst @@ -2,6 +2,8 @@ v0.10.2 (September 21, 2023) +---------------------------- + Enhancements ~~~~~~~~~~~~ diff --git a/docs/sphinx/source/whatsnew/v0.11.0.rst b/docs/sphinx/source/whatsnew/v0.11.0.rst index 142974ea78..94f5d6528c 100644 --- a/docs/sphinx/source/whatsnew/v0.11.0.rst +++ b/docs/sphinx/source/whatsnew/v0.11.0.rst @@ -11,6 +11,7 @@ Breaking changes Deprecations ~~~~~~~~~~~~ +* The deprecated :py:func:`pvlib.modelchain.basic_chain` has now been removed. (:pull:`1862`) Enhancements From 3252fd936d6df09d9d4bf3adf2e47325ba776b69 Mon Sep 17 00:00:00 2001 From: "Adam R. Jensen" <39184289+AdamRJensen@users.noreply.github.com> Date: Sat, 25 May 2024 10:59:14 +0200 Subject: [PATCH 5/5] Implement reviewer comments --- docs/sphinx/source/whatsnew/v0.11.0.rst | 2 +- docs/sphinx/source/whatsnew/v0.9.0.rst | 2 +- docs/sphinx/source/whatsnew/v0.9.1.rst | 2 +- pvlib/modelchain.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.11.0.rst b/docs/sphinx/source/whatsnew/v0.11.0.rst index 94f5d6528c..40916dce15 100644 --- a/docs/sphinx/source/whatsnew/v0.11.0.rst +++ b/docs/sphinx/source/whatsnew/v0.11.0.rst @@ -7,11 +7,11 @@ v0.11.0 (Anticipated June, 2024) Breaking changes ~~~~~~~~~~~~~~~~ +* The deprecated ``pvlib.modelchain.basic_chain`` has now been removed. (:pull:`1862`) Deprecations ~~~~~~~~~~~~ -* The deprecated :py:func:`pvlib.modelchain.basic_chain` has now been removed. (:pull:`1862`) Enhancements diff --git a/docs/sphinx/source/whatsnew/v0.9.0.rst b/docs/sphinx/source/whatsnew/v0.9.0.rst index 550965cb51..d508f8871a 100644 --- a/docs/sphinx/source/whatsnew/v0.9.0.rst +++ b/docs/sphinx/source/whatsnew/v0.9.0.rst @@ -43,7 +43,7 @@ Breaking changes * The ``orientation_strategy`` parameter has been removed from the various :py:class:`pvlib.modelchain.ModelChain` constructors and ``surface_tilt``, ``surface_azimuth`` are now required parameters for - :py:func:`pvlib.modelchain.basic_chain` (:issue:`1028`, :pull:`1181`) + ``pvlib.modelchain.basic_chain`` (:issue:`1028`, :pull:`1181`) * Removed the ``**kwargs`` parameters from :py:meth:`~pvlib.pvsystem.PVSystem.sapm` and :py:meth:`~pvlib.pvsystem.PVSystem.calcparams_desoto` and diff --git a/docs/sphinx/source/whatsnew/v0.9.1.rst b/docs/sphinx/source/whatsnew/v0.9.1.rst index 225602a40e..0a6a0d70f9 100644 --- a/docs/sphinx/source/whatsnew/v0.9.1.rst +++ b/docs/sphinx/source/whatsnew/v0.9.1.rst @@ -8,7 +8,7 @@ Deprecations * Moved :py:func:`pvlib.bifacial.pvfactors_timeseries` to :py:func:`pvlib.bifacial.pvfactors.pvfactors_timeseries`. :py:mod:`pvlib.bifacial` is now a sub-package. (:pull:`717`) -* :py:func:`pvlib.modelchain.basic_chain` is deprecated. +* ``pvlib.modelchain.basic_chain`` is deprecated. See :py:meth:`pvlib.modelchain.ModelChain.with_pvwatts` and :py:meth:`pvlib.modelchain.ModelChain.with_sapm` for alternative simplified :py:class:`~pvlib.modelchain.ModelChain` interfaces, although note that the diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index c250af0390..1db9d05b71 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -38,7 +38,7 @@ # these dictionaries contain the default configuration for following # established modeling sequences. They can be used in combination with -# basic_chain and ModelChain. They are used by the ModelChain methods +# ModelChain, particularly they are used by the methods # ModelChain.with_pvwatts, ModelChain.with_sapm, etc. # pvwatts documentation states that it uses the following reference for