From 9390846736564b956402ab34be40fa30583a6fbb Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 08:22:02 -0600 Subject: [PATCH 01/13] see how this docstring works --- pvlib/modelchain.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index c661a0ec39..b6d60ab008 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -260,6 +260,11 @@ class ModelChainResult: # system-level information solar_position: Optional[pd.DataFrame] = field(default=None) + """Solar position in a DataFrame containing columns ``'apparent_zenith'``, + ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'``. + Other columns may be present depending on the method chosen. See + :py:meth:`~pvlib.solarposition.get_solarposition` for details.""" + airmass: Optional[pd.DataFrame] = field(default=None) ac: Optional[pd.Series] = field(default=None) tracking: Optional[pd.DataFrame] = field(default=None) From b2d29c27e59bcbb5e7d4972a73b5acadcc94617e Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 08:40:00 -0600 Subject: [PATCH 02/13] one long sentence --- pvlib/modelchain.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index b6d60ab008..feb4ff5071 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -261,8 +261,8 @@ class ModelChainResult: # system-level information solar_position: Optional[pd.DataFrame] = field(default=None) """Solar position in a DataFrame containing columns ``'apparent_zenith'``, - ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'``. - Other columns may be present depending on the method chosen. See + ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'`` and + possibly other columns depending on the solar position method; see :py:meth:`~pvlib.solarposition.get_solarposition` for details.""" airmass: Optional[pd.DataFrame] = field(default=None) From a04015ce214da3bfb79619199a5f6fbdad9bbd9f Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 09:43:36 -0600 Subject: [PATCH 03/13] progress --- pvlib/modelchain.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index feb4ff5071..8d1b84c6f5 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -261,13 +261,24 @@ class ModelChainResult: # system-level information solar_position: Optional[pd.DataFrame] = field(default=None) """Solar position in a DataFrame containing columns ``'apparent_zenith'``, - ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'`` and - possibly other columns depending on the solar position method; see - :py:meth:`~pvlib.solarposition.get_solarposition` for details.""" + ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'`` + (all in degrees), with possibly other columns depending on the solar + position method; see :py:meth:`~pvlib.solarposition.get_solarposition` + for details.""" airmass: Optional[pd.DataFrame] = field(default=None) + """Air mass in a DataFrame containing columns ``'airmass_relative'``, + ``'airmass_absolute'`` (unitless); see + :py:meth:`~pvlib.location.get_airmass` for details.""" + ac: Optional[pd.Series] = field(default=None) + """AC power from the PV system, in a Series [W]""" + tracking: Optional[pd.DataFrame] = field(default=None) + """Orientation of modules on a single axis tracker, in a DataFrame with + columns``'surface_tilt'``, ``'surface_azimuth'``, ``'aoi'``; see + :py:func:`~pvlib.tracking.singleaxis` for detals. + """ # per DC array information total_irrad: Optional[PerArray[pd.DataFrame]] = field(default=None) From d030f807c1d444111ad3b3e32d868368abb79e53 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 10:21:22 -0600 Subject: [PATCH 04/13] complete draft --- pvlib/modelchain.py | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index cb4110807e..9d0baa6d0e 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -282,21 +282,77 @@ class ModelChainResult: # per DC array information total_irrad: Optional[PerArray[pd.DataFrame]] = field(default=None) + """ DataFrame (or tuple of DataFrame, one for each array) containing + columns ``'poa_global'``, ``'poa_direct'`` ``'poa_diffuse'``, + ``poa_sky_diffuse'``, ``'poa_ground_diffuse'`` (W/m2); see + :py:func:`~pvlib.irradiance.get_total_irradiance` for details. + """ + aoi: Optional[PerArray[pd.Series]] = field(default=None) + """ + Series (or tuple of Series, one for each array) containing angle of + incidence (degrees); see :py:func:`~pvlib.irradiance.aoi` for details. + """ + aoi_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ field(default=None) + """Series (or tuple of Series, one for each array) containing angle of + incidence modifier calculated by ModelChain.aoi_model which reduces direct + irradiance for reflections (unitless); + see :py:meth:`~pvlib.pvsystem.PVSystem.get_iam` for details. + """ + spectral_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ field(default=None) + """Series (or tuple of Series, one for each array) containing spectral + modifier calculated by ModelChain.spectral_model which adjusts broadband + plane-of-array irradiance for spectral content (unitless). + """ + cell_temperature: Optional[PerArray[pd.Series]] = field(default=None) + """Series (or tuple of Series, one for each array) containing cell + temperature (C). + """ + effective_irradiance: Optional[PerArray[pd.Series]] = field(default=None) + """Series (or tuple of Series, one for each array) containing effective + irradiance (W/m2) which is total plane-of-array irradiance adjusted for + reflections and spectral content. + """ + dc: Optional[PerArray[Union[pd.Series, pd.DataFrame]]] = \ field(default=None) + """Series or DataFrame (or tuple of Series or DataFrame, one for + each array) containing DC power (W) for each array, calculated by + ModelChain.dc_model. + """ + diode_params: Optional[PerArray[pd.DataFrame]] = field(default=None) + """DataFrame (or tuple of DataFrame, one for each array) containing diode + equation parameters (columns ``'I_L'``, ``'I_o'``, ``'R_s'``, ``'R_sh'``, + ``'nNsVth'``, present when ModelChain.dc_model is a single diode model; + see :py:func:`~pvlib.pvsystem.singlediode` for details. + """ + dc_ohmic_losses: Optional[PerArray[pd.Series]] = field(default=None) + """Series (or tuple of Series, one for each array) containing DC ohmic + loss (W) calculated by ModelChain.dc_ohmic_model. + """ + losses: Optional[Union[pd.Series, float]] = field(default=None) + """Series (or tuple of Series, one for each array) containing DC loss + as a fraction of DC power, as calculated by ModelChain.losses_model. + """ weather: Optional[PerArray[pd.DataFrame]] = None + """DataFrame (or tuple of DataFrame, one for each array) containing a + copy of the input weather data. + """ + times: Optional[pd.DatetimeIndex] = None + """DatetimeIndex (or tuple of DatetimeIndex, one for each array) containing + a copy of the index of the input weather data. + """ def _result_type(self, value): """Coerce `value` to the correct type according to From bebe6c26c88949fd3e70997ae020997048bc8838 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 10:32:21 -0600 Subject: [PATCH 05/13] adjustments --- pvlib/modelchain.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 9d0baa6d0e..b105f5610d 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -261,7 +261,7 @@ class ModelChainResult: # system-level information solar_position: Optional[pd.DataFrame] = field(default=None) """Solar position in a DataFrame containing columns ``'apparent_zenith'``, - ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'`` + ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'`` (all in degrees), with possibly other columns depending on the solar position method; see :py:meth:`~pvlib.solarposition.get_solarposition` for details.""" @@ -276,7 +276,7 @@ class ModelChainResult: tracking: Optional[pd.DataFrame] = field(default=None) """Orientation of modules on a single axis tracker, in a DataFrame with - columns``'surface_tilt'``, ``'surface_azimuth'``, ``'aoi'``; see + columns ``'surface_tilt'``, ``'surface_azimuth'``, ``'aoi'``; see :py:func:`~pvlib.tracking.singleaxis` for detals. """ @@ -297,16 +297,16 @@ class ModelChainResult: aoi_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ field(default=None) """Series (or tuple of Series, one for each array) containing angle of - incidence modifier calculated by ModelChain.aoi_model which reduces direct - irradiance for reflections (unitless); + incidence modifier (unitless) calculated by ``ModelChain.aoi_model``, + which reduces direct irradiance for reflections; see :py:meth:`~pvlib.pvsystem.PVSystem.get_iam` for details. """ spectral_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ field(default=None) """Series (or tuple of Series, one for each array) containing spectral - modifier calculated by ModelChain.spectral_model which adjusts broadband - plane-of-array irradiance for spectral content (unitless). + modifier (unitless) calculated by ``ModelChain.spectral_model``, which + adjusts broadband plane-of-array irradiance for spectral content. """ cell_temperature: Optional[PerArray[pd.Series]] = field(default=None) @@ -324,7 +324,7 @@ class ModelChainResult: field(default=None) """Series or DataFrame (or tuple of Series or DataFrame, one for each array) containing DC power (W) for each array, calculated by - ModelChain.dc_model. + ``ModelChain.dc_model``. """ diode_params: Optional[PerArray[pd.DataFrame]] = field(default=None) @@ -336,21 +336,21 @@ class ModelChainResult: dc_ohmic_losses: Optional[PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing DC ohmic - loss (W) calculated by ModelChain.dc_ohmic_model. + loss (W) calculated by ``ModelChain.dc_ohmic_model``. """ losses: Optional[Union[pd.Series, float]] = field(default=None) """Series (or tuple of Series, one for each array) containing DC loss - as a fraction of DC power, as calculated by ModelChain.losses_model. + as a fraction of DC power, as calculated by ``ModelChain.losses_model``. """ weather: Optional[PerArray[pd.DataFrame]] = None - """DataFrame (or tuple of DataFrame, one for each array) containing a + """DataFrame (or tuple of DataFrame, one for each array) contains a copy of the input weather data. """ times: Optional[pd.DatetimeIndex] = None - """DatetimeIndex (or tuple of DatetimeIndex, one for each array) containing + """DatetimeIndex (or tuple of DatetimeIndex, one for each array) contains a copy of the index of the input weather data. """ From 76633b163086faa58ed3866de541574b12813449 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 17:11:53 -0600 Subject: [PATCH 06/13] correct use of tuple --- pvlib/modelchain.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index b105f5610d..5994f0b7ab 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -340,18 +340,18 @@ class ModelChainResult: """ losses: Optional[Union[pd.Series, float]] = field(default=None) - """Series (or tuple of Series, one for each array) containing DC loss - as a fraction of DC power, as calculated by ``ModelChain.losses_model``. + """Series containing DC loss as a fraction of total DC power, as + calculated by ``ModelChain.losses_model``. """ + # copies of input data, for user convenience weather: Optional[PerArray[pd.DataFrame]] = None """DataFrame (or tuple of DataFrame, one for each array) contains a copy of the input weather data. """ times: Optional[pd.DatetimeIndex] = None - """DatetimeIndex (or tuple of DatetimeIndex, one for each array) contains - a copy of the index of the input weather data. + """DatetimeIndex containing a copy of the index of the input weather data. """ def _result_type(self, value): From 745dc668b825b85ffbaa010dbc268c64ae559c43 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sun, 16 May 2021 17:16:07 -0600 Subject: [PATCH 07/13] correct func and method references --- pvlib/modelchain.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 5994f0b7ab..65369ddcdd 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -263,13 +263,13 @@ class ModelChainResult: """Solar position in a DataFrame containing columns ``'apparent_zenith'``, ``'zenith'``, ``'apparent_elevation'``, ``'elevation'``, ``'azimuth'`` (all in degrees), with possibly other columns depending on the solar - position method; see :py:meth:`~pvlib.solarposition.get_solarposition` + position method; see :py:func:`~pvlib.solarposition.get_solarposition` for details.""" airmass: Optional[pd.DataFrame] = field(default=None) """Air mass in a DataFrame containing columns ``'airmass_relative'``, ``'airmass_absolute'`` (unitless); see - :py:meth:`~pvlib.location.get_airmass` for details.""" + :py:meth:`~pvlib.location.Location.get_airmass` for details.""" ac: Optional[pd.Series] = field(default=None) """AC power from the PV system, in a Series [W]""" @@ -277,7 +277,7 @@ class ModelChainResult: tracking: Optional[pd.DataFrame] = field(default=None) """Orientation of modules on a single axis tracker, in a DataFrame with columns ``'surface_tilt'``, ``'surface_azimuth'``, ``'aoi'``; see - :py:func:`~pvlib.tracking.singleaxis` for detals. + :py:func:`~pvlib.tracking.singleaxis` for details. """ # per DC array information From 63a33c268e55ce98acea128a04c66c890af1f7c5 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 17 May 2021 08:00:35 -0600 Subject: [PATCH 08/13] move _PerArray to module scope --- pvlib/modelchain.py | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 65369ddcdd..813fd409b6 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -245,11 +245,16 @@ def get_orientation(strategy, **kwargs): return surface_tilt, surface_azimuth +# Type for fields that vary between arrays +_T = TypeVar('T') + + +_PerArray = Union[_T, Tuple[_T, ...]] + + @dataclass class ModelChainResult: - _T = TypeVar('T') - PerArray = Union[_T, Tuple[_T, ...]] - """Type for fields that vary between arrays""" + # these attributes are used in __setattr__ to determine the correct type. _singleton_tuples: bool = field(default=False) @@ -280,21 +285,26 @@ class ModelChainResult: :py:func:`~pvlib.tracking.singleaxis` for details. """ + losses: Optional[Union[pd.Series, float]] = field(default=None) + """Series containing DC loss as a fraction of total DC power, as + calculated by ``ModelChain.losses_model``. + """ + # per DC array information - total_irrad: Optional[PerArray[pd.DataFrame]] = field(default=None) + total_irrad: Optional[_PerArray[pd.DataFrame]] = field(default=None) """ DataFrame (or tuple of DataFrame, one for each array) containing columns ``'poa_global'``, ``'poa_direct'`` ``'poa_diffuse'``, ``poa_sky_diffuse'``, ``'poa_ground_diffuse'`` (W/m2); see :py:func:`~pvlib.irradiance.get_total_irradiance` for details. """ - aoi: Optional[PerArray[pd.Series]] = field(default=None) + aoi: Optional[_PerArray[pd.Series]] = field(default=None) """ Series (or tuple of Series, one for each array) containing angle of incidence (degrees); see :py:func:`~pvlib.irradiance.aoi` for details. """ - aoi_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ + aoi_modifier: Optional[_PerArray[Union[pd.Series, float]]] = \ field(default=None) """Series (or tuple of Series, one for each array) containing angle of incidence modifier (unitless) calculated by ``ModelChain.aoi_model``, @@ -302,50 +312,45 @@ class ModelChainResult: see :py:meth:`~pvlib.pvsystem.PVSystem.get_iam` for details. """ - spectral_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ + spectral_modifier: Optional[_PerArray[Union[pd.Series, float]]] = \ field(default=None) """Series (or tuple of Series, one for each array) containing spectral modifier (unitless) calculated by ``ModelChain.spectral_model``, which adjusts broadband plane-of-array irradiance for spectral content. """ - cell_temperature: Optional[PerArray[pd.Series]] = field(default=None) + cell_temperature: Optional[_PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing cell temperature (C). """ - effective_irradiance: Optional[PerArray[pd.Series]] = field(default=None) + effective_irradiance: Optional[_PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing effective irradiance (W/m2) which is total plane-of-array irradiance adjusted for reflections and spectral content. """ - dc: Optional[PerArray[Union[pd.Series, pd.DataFrame]]] = \ + dc: Optional[_PerArray[Union[pd.Series, pd.DataFrame]]] = \ field(default=None) """Series or DataFrame (or tuple of Series or DataFrame, one for each array) containing DC power (W) for each array, calculated by ``ModelChain.dc_model``. """ - diode_params: Optional[PerArray[pd.DataFrame]] = field(default=None) + diode_params: Optional[_PerArray[pd.DataFrame]] = field(default=None) """DataFrame (or tuple of DataFrame, one for each array) containing diode equation parameters (columns ``'I_L'``, ``'I_o'``, ``'R_s'``, ``'R_sh'``, ``'nNsVth'``, present when ModelChain.dc_model is a single diode model; see :py:func:`~pvlib.pvsystem.singlediode` for details. """ - dc_ohmic_losses: Optional[PerArray[pd.Series]] = field(default=None) + dc_ohmic_losses: Optional[_PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing DC ohmic loss (W) calculated by ``ModelChain.dc_ohmic_model``. """ - losses: Optional[Union[pd.Series, float]] = field(default=None) - """Series containing DC loss as a fraction of total DC power, as - calculated by ``ModelChain.losses_model``. - """ - # copies of input data, for user convenience - weather: Optional[PerArray[pd.DataFrame]] = None + weather: Optional[_PerArray[pd.DataFrame]] = None """DataFrame (or tuple of DataFrame, one for each array) contains a copy of the input weather data. """ From 3cb2c9c5f3168129a2db5a78041cf49e8aa4e4db Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 17 May 2021 08:07:28 -0600 Subject: [PATCH 09/13] add dataclass docstring --- pvlib/modelchain.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 813fd409b6..19d12ca299 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -254,7 +254,28 @@ def get_orientation(strategy, **kwargs): @dataclass class ModelChainResult: + """ Contains results of models in the ModelChain along with a copy of + input data. + Attributes + ---------- + weather: DataFrame or tuple of DataFrame + times: Series + solar_position: DataFrame + airmass: DataFrame + tracking: DataFrame or tuple of DataFrame + aoi: Series or tuple of Series + aoi_modifier: Series of tuple of Series + total_irrad: DataFrame or tuple of DataFrame + spectral_modifier: Series of tuple of Series + effective_irradiance: Series of tuple of Series + cell_temperature: Series of tuple of Series + dc: Series of tuple of Series + diode_params: DataFrame or tuple of DataFrame + dc_ohmic_losses: Series of tuple of Series + losses: Series + ac: Series + """ # these attributes are used in __setattr__ to determine the correct type. _singleton_tuples: bool = field(default=False) From 9c3a69a02b4e02ea16ddca642451f299a49cce81 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 17 May 2021 08:37:52 -0600 Subject: [PATCH 10/13] try _typehints --- docs/sphinx/source/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py index f01446e813..e04b17dcd1 100644 --- a/docs/sphinx/source/conf.py +++ b/docs/sphinx/source/conf.py @@ -41,6 +41,7 @@ # ones. extensions = [ 'sphinx.ext.autodoc', + 'sphinx_autodoc_typehints', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.intersphinx', From ca6a10f3410e48c6a44e405fddb0a77d35fa8650 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 17 May 2021 08:43:59 -0600 Subject: [PATCH 11/13] remove _typehints --- docs/sphinx/source/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/sphinx/source/conf.py b/docs/sphinx/source/conf.py index e04b17dcd1..f01446e813 100644 --- a/docs/sphinx/source/conf.py +++ b/docs/sphinx/source/conf.py @@ -41,7 +41,6 @@ # ones. extensions = [ 'sphinx.ext.autodoc', - 'sphinx_autodoc_typehints', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode', 'sphinx.ext.intersphinx', From 6b006ea96e16a2c401bcee9425c261e7d80070eb Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 17 May 2021 08:45:33 -0600 Subject: [PATCH 12/13] remove class docstring, add a few See Also to pvsystem --- pvlib/modelchain.py | 23 ----------------------- pvlib/pvsystem.py | 8 ++++++++ 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 19d12ca299..0ac692cb9f 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -254,29 +254,6 @@ def get_orientation(strategy, **kwargs): @dataclass class ModelChainResult: - """ Contains results of models in the ModelChain along with a copy of - input data. - - Attributes - ---------- - weather: DataFrame or tuple of DataFrame - times: Series - solar_position: DataFrame - airmass: DataFrame - tracking: DataFrame or tuple of DataFrame - aoi: Series or tuple of Series - aoi_modifier: Series of tuple of Series - total_irrad: DataFrame or tuple of DataFrame - spectral_modifier: Series of tuple of Series - effective_irradiance: Series of tuple of Series - cell_temperature: Series of tuple of Series - dc: Series of tuple of Series - diode_params: DataFrame or tuple of DataFrame - dc_ohmic_losses: Series of tuple of Series - losses: Series - ac: Series - """ - # these attributes are used in __setattr__ to determine the correct type. _singleton_tuples: bool = field(default=False) _per_array_fields = {'total_irrad', 'aoi', 'aoi_modifier', diff --git a/pvlib/pvsystem.py b/pvlib/pvsystem.py index 487f7b953d..41075ee7e9 100644 --- a/pvlib/pvsystem.py +++ b/pvlib/pvsystem.py @@ -3062,6 +3062,10 @@ def dc_ohms_from_percent(vmp_ref, imp_ref, dc_ohmic_percent, Rw: numeric Equivalent resistance [ohm] + See Also + -------- + :py:func:`~pvlib.pvsystem.dc_ohmic_losses` + References ---------- .. [1] PVsyst 7 Help. "Array ohmic wiring loss". @@ -3093,6 +3097,10 @@ def dc_ohmic_losses(resistance, current): loss: numeric Power Loss [W] + See Also + -------- + :py:func:`~pvlib.pvsystem.dc_ohms_from_percent` + References ---------- .. [1] PVsyst 7 Help. "Array ohmic wiring loss". From 004fda49d01cb8443d73f4b3e1d09e068ea191b7 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Mon, 17 May 2021 09:41:15 -0600 Subject: [PATCH 13/13] make public --- pvlib/modelchain.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 0ac692cb9f..8cc49153fa 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -246,10 +246,10 @@ def get_orientation(strategy, **kwargs): # Type for fields that vary between arrays -_T = TypeVar('T') +T = TypeVar('T') -_PerArray = Union[_T, Tuple[_T, ...]] +PerArray = Union[T, Tuple[T, ...]] @dataclass @@ -289,20 +289,20 @@ class ModelChainResult: """ # per DC array information - total_irrad: Optional[_PerArray[pd.DataFrame]] = field(default=None) + total_irrad: Optional[PerArray[pd.DataFrame]] = field(default=None) """ DataFrame (or tuple of DataFrame, one for each array) containing columns ``'poa_global'``, ``'poa_direct'`` ``'poa_diffuse'``, ``poa_sky_diffuse'``, ``'poa_ground_diffuse'`` (W/m2); see :py:func:`~pvlib.irradiance.get_total_irradiance` for details. """ - aoi: Optional[_PerArray[pd.Series]] = field(default=None) + aoi: Optional[PerArray[pd.Series]] = field(default=None) """ Series (or tuple of Series, one for each array) containing angle of incidence (degrees); see :py:func:`~pvlib.irradiance.aoi` for details. """ - aoi_modifier: Optional[_PerArray[Union[pd.Series, float]]] = \ + aoi_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ field(default=None) """Series (or tuple of Series, one for each array) containing angle of incidence modifier (unitless) calculated by ``ModelChain.aoi_model``, @@ -310,45 +310,45 @@ class ModelChainResult: see :py:meth:`~pvlib.pvsystem.PVSystem.get_iam` for details. """ - spectral_modifier: Optional[_PerArray[Union[pd.Series, float]]] = \ + spectral_modifier: Optional[PerArray[Union[pd.Series, float]]] = \ field(default=None) """Series (or tuple of Series, one for each array) containing spectral modifier (unitless) calculated by ``ModelChain.spectral_model``, which adjusts broadband plane-of-array irradiance for spectral content. """ - cell_temperature: Optional[_PerArray[pd.Series]] = field(default=None) + cell_temperature: Optional[PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing cell temperature (C). """ - effective_irradiance: Optional[_PerArray[pd.Series]] = field(default=None) + effective_irradiance: Optional[PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing effective irradiance (W/m2) which is total plane-of-array irradiance adjusted for reflections and spectral content. """ - dc: Optional[_PerArray[Union[pd.Series, pd.DataFrame]]] = \ + dc: Optional[PerArray[Union[pd.Series, pd.DataFrame]]] = \ field(default=None) """Series or DataFrame (or tuple of Series or DataFrame, one for each array) containing DC power (W) for each array, calculated by ``ModelChain.dc_model``. """ - diode_params: Optional[_PerArray[pd.DataFrame]] = field(default=None) + diode_params: Optional[PerArray[pd.DataFrame]] = field(default=None) """DataFrame (or tuple of DataFrame, one for each array) containing diode equation parameters (columns ``'I_L'``, ``'I_o'``, ``'R_s'``, ``'R_sh'``, ``'nNsVth'``, present when ModelChain.dc_model is a single diode model; see :py:func:`~pvlib.pvsystem.singlediode` for details. """ - dc_ohmic_losses: Optional[_PerArray[pd.Series]] = field(default=None) + dc_ohmic_losses: Optional[PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing DC ohmic loss (W) calculated by ``ModelChain.dc_ohmic_model``. """ # copies of input data, for user convenience - weather: Optional[_PerArray[pd.DataFrame]] = None + weather: Optional[PerArray[pd.DataFrame]] = None """DataFrame (or tuple of DataFrame, one for each array) contains a copy of the input weather data. """