diff --git a/docs/sphinx/source/whatsnew/v0.6.1.rst b/docs/sphinx/source/whatsnew/v0.6.1.rst index e92e5a11b8..5ab9de106b 100644 --- a/docs/sphinx/source/whatsnew/v0.6.1.rst +++ b/docs/sphinx/source/whatsnew/v0.6.1.rst @@ -55,6 +55,7 @@ Bug fixes and < 1900, fix year 2050 which was returning 0. * Fix and improve :func:`~pvlib.solarposition.hour_angle` (:issue:`598`) * Fix error in :func:`pvlib.clearsky.detect_clearsky` (:issue:`506`) +* Fix error in :func:`pvlib.modelchain.ModelChain.infer_spectral_model` (:issue:`619`) Testing @@ -72,3 +73,4 @@ Contributors * Cliff Hansen (:ghuser:`cwhanse`) * Mark Mikofski (:ghuser:`mikofski`) * Anton Driesse (:ghuser:`adriesse`) +* Jonathan Gaffiot (:ghuser:`jgaffiot`) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index b1e5f07b82..b1cd6ecfa7 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -622,7 +622,7 @@ def infer_spectral_model(self): return self.sapm_spectral_loss elif ((('Technology' in params or 'Material' in params) and - (pvsystem._infer_cell_type() is not None)) or + (self.system._infer_cell_type() is not None)) or 'first_solar_spectral_coefficients' in params): return self.first_solar_spectral_loss else: diff --git a/pvlib/test/test_modelchain.py b/pvlib/test/test_modelchain.py index be7b331223..c358482576 100644 --- a/pvlib/test/test_modelchain.py +++ b/pvlib/test/test_modelchain.py @@ -54,6 +54,19 @@ def cec_dc_snl_ac_system(sam_data): return system +@pytest.fixture +def cec_dc_native_snl_ac_system(sam_data): + module = 'Canadian_Solar_CS5P_220M' + module_parameters = sam_data['cecmod'][module].copy() + inverters = sam_data['cecinverter'] + inverter = inverters['ABB__MICRO_0_25_I_OUTD_US_208_208V__CEC_2014_'].copy() + system = PVSystem(surface_tilt=32.2, surface_azimuth=180, + module=module, + module_parameters=module_parameters, + inverter_parameters=inverter) + return system + + @pytest.fixture def pvsyst_dc_snl_ac_system(sam_data, pvsyst_module_params): module = 'PVsyst test module' @@ -251,6 +264,21 @@ def test_infer_dc_model(system, cec_dc_snl_ac_system, pvsyst_dc_snl_ac_system, assert isinstance(mc.dc, (pd.Series, pd.DataFrame)) +@pytest.mark.parametrize('dc_model', [ + 'sapm', + pytest.param('cec', marks=requires_scipy), + pytest.param('cec_native', marks=requires_scipy)]) +def test_infer_spectral_model(location, system, cec_dc_snl_ac_system, + cec_dc_native_snl_ac_system, dc_model): + dc_systems = {'sapm': system, + 'cec': cec_dc_snl_ac_system, + 'cec_native': cec_dc_native_snl_ac_system} + system = dc_systems[dc_model] + mc = ModelChain(system, location, + orientation_strategy='None', aoi_model='physical') + assert isinstance(mc, ModelChain) + + def test_dc_model_user_func(pvwatts_dc_pvwatts_ac_system, location, weather, mocker): m = mocker.spy(sys.modules[__name__], 'poadc')