From f95a1b86ef897f5a37a43550471adf1aebca4b19 Mon Sep 17 00:00:00 2001 From: xiajiahang Date: Mon, 19 Oct 2026 19:51:50 +0800 Subject: [PATCH 1/3] fix(modelchain): name DC ohmic loss Series correctly --- docs/sphinx/source/whatsnew/v0.16.2.rst | 4 ++++ pvlib/modelchain.py | 8 +++++--- tests/test_modelchain.py | 5 +++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.16.2.rst b/docs/sphinx/source/whatsnew/v0.16.2.rst index fff7ba5d46..9d844f7f4f 100644 --- a/docs/sphinx/source/whatsnew/v0.16.2.rst +++ b/docs/sphinx/source/whatsnew/v0.16.2.rst @@ -14,6 +14,9 @@ Deprecations Bug fixes ~~~~~~~~~ +* Correct the Series name in ``ModelChain.results.dc_ohmic_losses`` from + ``i_mp`` to ``p_dc_ohmic_loss`` when using ``dc_ohms_from_percent``. + (:issue:`1959`) * :py:func:`pvlib.tracking.calc_surface_orientation` returns scalar when input is scalar (:issue:`2881`, :pull:`2882`) @@ -62,6 +65,7 @@ Contributors * Chen Yi (:ghuser:`chenyi6758-source`) * Rajiv Daxini (:ghuser:`rdaxini`) * jason-writer (:ghuser:`jason-writer`) +* :ghuser:`xiajiahang` diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 32af129fd7..48b5a97b9f 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -185,7 +185,8 @@ class ModelChainResult: dc_ohmic_losses: Optional[PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing DC ohmic - losses (W) calculated by ``ModelChain.dc_ohmic_model``. + losses (W) calculated by ``ModelChain.dc_ohmic_model``. Each Series is + named ``p_dc_ohmic_loss`` when using ``dc_ohms_from_percent``. """ # copies of input data, for user convenience @@ -1008,7 +1009,8 @@ def dc_ohms_from_percent(self): if isinstance(self.results.dc, tuple): Rw = self.system.dc_ohms_from_percent(unwrap=False) self.results.dc_ohmic_losses = tuple( - pvsystem.dc_ohmic_losses(Rw, df['i_mp']) + pvsystem.dc_ohmic_losses(Rw, df['i_mp']).rename( + 'p_dc_ohmic_loss') for Rw, df in zip(Rw, self.results.dc) ) for df, loss in zip(self.results.dc, self.results.dc_ohmic_losses): @@ -1017,7 +1019,7 @@ def dc_ohms_from_percent(self): Rw = self.system.dc_ohms_from_percent() self.results.dc_ohmic_losses = pvsystem.dc_ohmic_losses( Rw, self.results.dc['i_mp'] - ) + ).rename('p_dc_ohmic_loss') self.results.dc['p_mp'] = (self.results.dc['p_mp'] - self.results.dc_ohmic_losses) return self diff --git a/tests/test_modelchain.py b/tests/test_modelchain.py index e15e155dbb..15d580aa6c 100644 --- a/tests/test_modelchain.py +++ b/tests/test_modelchain.py @@ -1623,6 +1623,7 @@ def test_dc_ohmic_model_ohms_from_percent(cec_dc_snl_ac_system, assert m.call_count == 1 assert isinstance(mc.results.dc_ohmic_losses, pd.Series) + assert mc.results.dc_ohmic_losses.name == 'p_dc_ohmic_loss' system = cec_dc_snl_ac_arrays @@ -1639,6 +1640,8 @@ def test_dc_ohmic_model_ohms_from_percent(cec_dc_snl_ac_system, assert len(mc.results.dc_ohmic_losses) == len(mc.system.arrays) assert isinstance(mc.results.dc_ohmic_losses, tuple) + for loss in mc.results.dc_ohmic_losses: + assert loss.name == 'p_dc_ohmic_loss' @pytest.mark.parametrize("input_type", [tuple, list]) @@ -1660,6 +1663,8 @@ def test_dc_ohmic_model_ohms_from_percent_single_array_list_input( mc.run_model_from_effective_irradiance(input_type((data,))) assert isinstance(mc.results.dc_ohmic_losses, tuple) + for loss in mc.results.dc_ohmic_losses: + assert loss.name == 'p_dc_ohmic_loss' assert len(mc.results.dc_ohmic_losses) == 1 From 693e2ace2920fe9085bf19d088338d2b3ca731dc Mon Sep 17 00:00:00 2001 From: xiajiahang Date: Mon, 19 Oct 2026 21:21:08 +0800 Subject: [PATCH 2/3] docs: link PR in DC ohmic loss release note --- docs/sphinx/source/whatsnew/v0.16.2.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sphinx/source/whatsnew/v0.16.2.rst b/docs/sphinx/source/whatsnew/v0.16.2.rst index 9d844f7f4f..2c243d0921 100644 --- a/docs/sphinx/source/whatsnew/v0.16.2.rst +++ b/docs/sphinx/source/whatsnew/v0.16.2.rst @@ -16,7 +16,7 @@ Bug fixes ~~~~~~~~~ * Correct the Series name in ``ModelChain.results.dc_ohmic_losses`` from ``i_mp`` to ``p_dc_ohmic_loss`` when using ``dc_ohms_from_percent``. - (:issue:`1959`) + (:issue:`1959`, :pull:`2912`) * :py:func:`pvlib.tracking.calc_surface_orientation` returns scalar when input is scalar (:issue:`2881`, :pull:`2882`) From 240e94930e42386b0268709cff9ede910abb932d Mon Sep 17 00:00:00 2001 From: xiajiahang Date: Mon, 19 Oct 2026 22:43:06 +0800 Subject: [PATCH 3/3] docs: omit Series name from ohmic loss docstring --- pvlib/modelchain.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pvlib/modelchain.py b/pvlib/modelchain.py index 48b5a97b9f..d2112ac25a 100644 --- a/pvlib/modelchain.py +++ b/pvlib/modelchain.py @@ -185,8 +185,7 @@ class ModelChainResult: dc_ohmic_losses: Optional[PerArray[pd.Series]] = field(default=None) """Series (or tuple of Series, one for each array) containing DC ohmic - losses (W) calculated by ``ModelChain.dc_ohmic_model``. Each Series is - named ``p_dc_ohmic_loss`` when using ``dc_ohms_from_percent``. + losses (W) calculated by ``ModelChain.dc_ohmic_model``. """ # copies of input data, for user convenience