From c7c91518e4420fe88123aef9f17fee433d304108 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sun, 28 Dec 2025 21:58:10 +0530 Subject: [PATCH 01/14] Fix ZeroDivisionError in simple_efficiency when load_loss=0 --- pvlib/transformer.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pvlib/transformer.py b/pvlib/transformer.py index 3b66b0beb3..c8120f8be6 100644 --- a/pvlib/transformer.py +++ b/pvlib/transformer.py @@ -105,11 +105,14 @@ def simple_efficiency( pg. 101. ''' # noqa: E501 + if load_loss == 0: + return input_power - no_load_loss * transformer_rating + input_power_normalized = input_power / transformer_rating a = load_loss b = 1 - c = no_load_loss - input_power_normalized + c = no_load_loss - input_power_normalized output_power_normalized = (-b + (b**2 - 4*a*c)**0.5) / (2 * a) From ba4b87b75f9de29af677d75010b66e9c8895383f Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sun, 28 Dec 2025 22:10:28 +0530 Subject: [PATCH 02/14] Remove trailing whitespace in transformer --- pvlib/transformer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pvlib/transformer.py b/pvlib/transformer.py index c8120f8be6..88fa44fd63 100644 --- a/pvlib/transformer.py +++ b/pvlib/transformer.py @@ -112,7 +112,7 @@ def simple_efficiency( a = load_loss b = 1 - c = no_load_loss - input_power_normalized + c = no_load_loss - input_power_normalized output_power_normalized = (-b + (b**2 - 4*a*c)**0.5) / (2 * a) From b20e579ee65b344c877bc8214ccf2451e36a9a1d Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Fri, 2 Jan 2026 22:42:44 +0530 Subject: [PATCH 03/14] use numerically stable quadratic form in simple_efficiency --- pvlib/transformer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pvlib/transformer.py b/pvlib/transformer.py index 88fa44fd63..53e6035f02 100644 --- a/pvlib/transformer.py +++ b/pvlib/transformer.py @@ -114,7 +114,8 @@ def simple_efficiency( b = 1 c = no_load_loss - input_power_normalized - output_power_normalized = (-b + (b**2 - 4*a*c)**0.5) / (2 * a) + disc = (b*b - 4*a*c)**0.5 + output_power_normalized = 2*c / (-b - disc) output_power = output_power_normalized * transformer_rating return output_power From eafc36a558a2023c117ecae80c98fe89eb214826 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Fri, 2 Jan 2026 23:47:35 +0530 Subject: [PATCH 04/14] remove redundant load_loss==0 branch and use stable quadratic form --- pvlib/transformer.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pvlib/transformer.py b/pvlib/transformer.py index 53e6035f02..1d5d827f4b 100644 --- a/pvlib/transformer.py +++ b/pvlib/transformer.py @@ -105,8 +105,6 @@ def simple_efficiency( pg. 101. ''' # noqa: E501 - if load_loss == 0: - return input_power - no_load_loss * transformer_rating input_power_normalized = input_power / transformer_rating From f2f61325740471dbc90750b6bc987850cd0ec343 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Fri, 2 Jan 2026 23:49:35 +0530 Subject: [PATCH 05/14] linter fix --- pvlib/transformer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pvlib/transformer.py b/pvlib/transformer.py index 1d5d827f4b..3fea282e2b 100644 --- a/pvlib/transformer.py +++ b/pvlib/transformer.py @@ -105,7 +105,6 @@ def simple_efficiency( pg. 101. ''' # noqa: E501 - input_power_normalized = input_power / transformer_rating a = load_loss From 113082e700c9d6495fc54716f365bc589b3f67a2 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sat, 3 Jan 2026 00:06:56 +0530 Subject: [PATCH 06/14] add tests --- tests/test_transformer.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/test_transformer.py b/tests/test_transformer.py index 0739a9e95a..c3ce6b8070 100644 --- a/tests/test_transformer.py +++ b/tests/test_transformer.py @@ -58,3 +58,24 @@ def test_simple_efficiency_known_values(): *args), rating, ) + + +def test_simple_efficiency_zero_load_loss(): + + input_power = 1000.0 + no_load_loss = 0.01 + load_loss = 0.0 + transformer_rating = 1000.0 + + result = transformer.simple_efficiency( + input_power=input_power, + no_load_loss=no_load_loss, + load_loss=load_loss, + transformer_rating=transformer_rating, + ) + + # for load_loss = 0, the model reduces to: + # P_out = P_in - L_no_load * P_nom + expected = input_power - no_load_loss * transformer_rating + + assert_allclose(result, expected) From eadfd2ba5793418c20d454e87ef062afb53fd252 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sat, 3 Jan 2026 13:43:53 +0530 Subject: [PATCH 07/14] Add whatsnew entry for simple_efficiency zero load_loss bug --- docs/sphinx/source/whatsnew/v0.13.2.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/sphinx/source/whatsnew/v0.13.2.rst b/docs/sphinx/source/whatsnew/v0.13.2.rst index b6170a6053..063078bb71 100644 --- a/docs/sphinx/source/whatsnew/v0.13.2.rst +++ b/docs/sphinx/source/whatsnew/v0.13.2.rst @@ -16,6 +16,10 @@ Deprecations Bug fixes +* Fixed a division-by-zero error in + :py:func:`pvlib.transformer.simple_efficiency` when ``load_loss = 0``. + (:issue:`2645`, :pull:`2646`) + ~~~~~~~~~ Enhancements From 02fb7ddb0067c07b41844da8c0425da7f26ceb83 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sat, 3 Jan 2026 13:47:25 +0530 Subject: [PATCH 08/14] fix blank line --- tests/test_transformer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_transformer.py b/tests/test_transformer.py index c3ce6b8070..a3b59cff05 100644 --- a/tests/test_transformer.py +++ b/tests/test_transformer.py @@ -61,7 +61,6 @@ def test_simple_efficiency_known_values(): def test_simple_efficiency_zero_load_loss(): - input_power = 1000.0 no_load_loss = 0.01 load_loss = 0.0 From e49037c4dc7a10c88b38e150d170e380041b4c0a Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sat, 3 Jan 2026 14:03:26 +0530 Subject: [PATCH 09/14] refactoring the test, using pytest --- tests/test_transformer.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tests/test_transformer.py b/tests/test_transformer.py index a3b59cff05..5857c05bca 100644 --- a/tests/test_transformer.py +++ b/tests/test_transformer.py @@ -4,6 +4,7 @@ from pvlib import transformer +import pytest def test_simple_efficiency(): @@ -59,12 +60,18 @@ def test_simple_efficiency_known_values(): rating, ) +@pytest.mark.parametrize( + "input_power, no_load_loss, load_loss, transformer_rating, expected", + [ + (1000.0, 0.01, 0.0, 1000.0, 990.0), + ], +) -def test_simple_efficiency_zero_load_loss(): - input_power = 1000.0 - no_load_loss = 0.01 - load_loss = 0.0 - transformer_rating = 1000.0 +def test_simple_efficiency_zero_load_loss( + input_power, no_load_loss, load_loss, transformer_rating, expected +): + # for load_loss = 0, the model reduces to: + # P_out = P_in - L_no_load * P_nom result = transformer.simple_efficiency( input_power=input_power, @@ -73,8 +80,4 @@ def test_simple_efficiency_zero_load_loss(): transformer_rating=transformer_rating, ) - # for load_loss = 0, the model reduces to: - # P_out = P_in - L_no_load * P_nom - expected = input_power - no_load_loss * transformer_rating - assert_allclose(result, expected) From d45d6ea29165380d076481decc555af6b5a366bf Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sat, 3 Jan 2026 14:08:07 +0530 Subject: [PATCH 10/14] flake fix --- tests/test_transformer.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_transformer.py b/tests/test_transformer.py index 5857c05bca..51d4e3c32e 100644 --- a/tests/test_transformer.py +++ b/tests/test_transformer.py @@ -1,10 +1,9 @@ import pandas as pd +import pytest from numpy.testing import assert_allclose - from pvlib import transformer -import pytest def test_simple_efficiency(): @@ -60,19 +59,18 @@ def test_simple_efficiency_known_values(): rating, ) + @pytest.mark.parametrize( "input_power, no_load_loss, load_loss, transformer_rating, expected", [ (1000.0, 0.01, 0.0, 1000.0, 990.0), ], ) - def test_simple_efficiency_zero_load_loss( input_power, no_load_loss, load_loss, transformer_rating, expected ): # for load_loss = 0, the model reduces to: # P_out = P_in - L_no_load * P_nom - result = transformer.simple_efficiency( input_power=input_power, no_load_loss=no_load_loss, From 3d88f74f159c991c7271a730ded3b30a12841046 Mon Sep 17 00:00:00 2001 From: Cliff Hansen Date: Sat, 3 Jan 2026 09:01:02 -0700 Subject: [PATCH 11/14] make v13.3 whatsnew (#2650) --- docs/sphinx/source/whatsnew/v0.13.3.rst | 45 +++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/sphinx/source/whatsnew/v0.13.3.rst diff --git a/docs/sphinx/source/whatsnew/v0.13.3.rst b/docs/sphinx/source/whatsnew/v0.13.3.rst new file mode 100644 index 0000000000..1df727e708 --- /dev/null +++ b/docs/sphinx/source/whatsnew/v0.13.3.rst @@ -0,0 +1,45 @@ +.. _whatsnew_0_13_3: + + +v0.13.3 (Month XX, 20YY) +----------------------- + +Breaking Changes +~~~~~~~~~~~~~~~~ + + +Deprecations +~~~~~~~~~~~~ + + +Bug fixes +~~~~~~~~~ + + +Enhancements +~~~~~~~~~~~~ + + +Documentation +~~~~~~~~~~~~~ + + +Testing +~~~~~~~ + + +Benchmarking +~~~~~~~~~~~~ + + +Requirements +~~~~~~~~~~~~ + + +Maintenance +~~~~~~~~~~~ + + +Contributors +~~~~~~~~~~~~ + From 3fafc5a231d89c693cac882650e6803e59c33916 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sun, 4 Jan 2026 00:18:52 +0530 Subject: [PATCH 12/14] add whatsnew entry for simple_efficiency division-by-zero fix --- docs/sphinx/source/whatsnew/v0.13.3.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/sphinx/source/whatsnew/v0.13.3.rst b/docs/sphinx/source/whatsnew/v0.13.3.rst index 1df727e708..d6b619ca81 100644 --- a/docs/sphinx/source/whatsnew/v0.13.3.rst +++ b/docs/sphinx/source/whatsnew/v0.13.3.rst @@ -14,6 +14,9 @@ Deprecations Bug fixes ~~~~~~~~~ +* Fix a division-by-zero condition in + :py:func:`pvlib.transformer.simple_efficiency` + when ``load_loss = 0``. (:pull:`2646`) Enhancements From e618c21af90954b03b02794fd5f9fb51155e3a54 Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sun, 4 Jan 2026 00:22:21 +0530 Subject: [PATCH 13/14] move simple_efficiency bugfix entry to v0.13.3 whatsnew --- docs/sphinx/source/whatsnew/v0.13.2.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.13.2.rst b/docs/sphinx/source/whatsnew/v0.13.2.rst index 063078bb71..257412375d 100644 --- a/docs/sphinx/source/whatsnew/v0.13.2.rst +++ b/docs/sphinx/source/whatsnew/v0.13.2.rst @@ -16,9 +16,7 @@ Deprecations Bug fixes -* Fixed a division-by-zero error in - :py:func:`pvlib.transformer.simple_efficiency` when ``load_loss = 0``. - (:issue:`2645`, :pull:`2646`) + ~~~~~~~~~ From 17037d18b62105603511ed50e2c00502c821f07f Mon Sep 17 00:00:00 2001 From: Aman Srivastava Date: Sun, 4 Jan 2026 00:24:53 +0530 Subject: [PATCH 14/14] removing 13.2 --- docs/sphinx/source/whatsnew/v0.13.2.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/sphinx/source/whatsnew/v0.13.2.rst b/docs/sphinx/source/whatsnew/v0.13.2.rst index 257412375d..b6170a6053 100644 --- a/docs/sphinx/source/whatsnew/v0.13.2.rst +++ b/docs/sphinx/source/whatsnew/v0.13.2.rst @@ -16,8 +16,6 @@ Deprecations Bug fixes - - ~~~~~~~~~ Enhancements