Skip to content

Fix error message modelchain.infer_temperature_model error to be more informative #1977

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Mar 11, 2024
4 changes: 3 additions & 1 deletion docs/sphinx/source/whatsnew/v0.10.4.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ Bug fixes
``temperature_model_parameters`` are specified on the passed ``system`` instead of on its ``arrays``. (:issue:`1759`).
* :py:func:`pvlib.irradiance.ghi_from_poa_driesse_2023` now correctly makes use
of the ``xtol`` argument. Previously, it was ignored. (:issue:`1970`, :pull:`1971`)
* :py:class:`~pvlib.modelchain.ModelChain.infer_temperature_model` now raises a more useful error when
the temperature model cannot be inferred (:issue:`1946`)

Testing
~~~~~~~
Expand All @@ -33,5 +35,5 @@ Requirements
Contributors
~~~~~~~~~~~~
* Cliff Hansen (:ghuser:`cwhanse`)
* :ghuser:`matsuobasho`
* Roma Koulikov (:ghuser:`matsuobasho`)
* Adam R. Jensen (:ghuser:`AdamRJensen`)
14 changes: 9 additions & 5 deletions pvlib/modelchain.py
Original file line number Diff line number Diff line change
Expand Up @@ -1128,11 +1128,15 @@ def infer_temperature_model(self):
elif {'noct', 'module_efficiency'} <= params:
return self.noct_sam_temp
else:
raise ValueError(f'could not infer temperature model from '
f'system.temperature_model_parameters. Check '
f'that all Arrays in system.arrays have '
f'parameters for the same temperature model. '
f'Common temperature model parameters: {params}.')
raise ValueError('Could not infer temperature model from '
'ModelChain.system. '
'If Arrays are used to construct the PVSystem, '
'check that all Arrays in '
'ModelChain.system.arrays '
'have parameters for the same temperature model. '
'If Arrays are not used, check that the PVSystem '
'attributes `racking_model` and `module_type` '
'are valid.')

def _set_celltemp(self, model):
"""Set self.results.cell_temperature using the given cell
Expand Down
13 changes: 4 additions & 9 deletions pvlib/tests/test_modelchain.py
Original file line number Diff line number Diff line change
Expand Up @@ -1306,17 +1306,15 @@ def test_temperature_model_inconsistent(location, sapm_dc_snl_ac_system):


def test_temperature_model_not_specified():
# GH 1759 -- ensure correct error is raised when temperature model params
# are specified on the PVSystem instead of the Arrays
location = Location(latitude=32.2, longitude=-110.9)
arrays = [pvsystem.Array(pvsystem.FixedMount(),
module_parameters={'pdc0': 1, 'gamma_pdc': 0})]
system = pvsystem.PVSystem(arrays,
temperature_model_parameters={'u0': 1, 'u1': 1},
inverter_parameters={'pdc0': 1})
with pytest.raises(ValueError,
match='could not infer temperature model '
'from system.temperature_model_parameters'):
match='Could not infer temperature model from '
'ModelChain.system.'):
_ = ModelChain(system, location,
aoi_model='no_loss', spectral_model='no_loss')

Expand Down Expand Up @@ -1957,11 +1955,8 @@ def test_inconsistent_array_params(location,
cec_module_params):
module_error = ".* selected for the DC model but one or more Arrays are " \
"missing one or more required parameters"
temperature_error = "could not infer temperature model from " \
r"system\.temperature_model_parameters\. Check " \
r"that all Arrays in system\.arrays have " \
r"parameters for the same temperature model\. " \
r"Common temperature model parameters: .*"
temperature_error = 'Could not infer temperature model from ' \
'ModelChain.system. '
different_module_system = pvsystem.PVSystem(
arrays=[
pvsystem.Array(
Expand Down