Skip to content

Fix Windows/Conda CI error in test_singlediode.py #2007

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 5 commits into from
Apr 15, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions pvlib/tests/test_singlediode.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
bishop88, bishop88_i_from_v, bishop88_v_from_i)
from pvlib._deprecation import pvlibDeprecationWarning
import pytest
from numpy.testing import assert_array_equal
from .conftest import DATA_DIR

POA = 888
Expand Down Expand Up @@ -167,17 +168,24 @@ def test_singlediode_precision(method, precise_iv_curves):
assert np.allclose(pc['i_xx'], outs['i_xx'], atol=1e-6, rtol=0)


def test_singlediode_lambert_negative_voc():

# Those values result in a negative v_oc out of `_lambertw_v_from_i`
x = np.array([0., 1.480501e-11, 0.178, 8000., 1.797559])
outs = pvsystem.singlediode(*x, method='lambertw')
assert outs['v_oc'] == 0
def test_singlediode_lambert_negative_voc(mocker):
"""Tests approximation to zero of v_oc when it is negative and small.
See singlediode.py:_lambertw > comment 'Set small elements <0 in v_oc to 0'
"""
# Next values should result in a negative v_oc out of `_lambertw_v_from_i`
# however, we can't ensure that the output belongs to (-1e-12, 0), so we
# mock it. It depends on the platform and Python distro. See issue #2000.
patcher = mocker.patch("pvlib.singlediode._lambertw_v_from_i")
x = np.array([0.0, 1.480501e-11, 0.178, 8000.0, 1.797559])
patcher.return_value = -9.999e-13
outs = pvsystem.singlediode(*x, method="lambertw")
assert outs["v_oc"] == 0

# Testing for an array
x = np.array([x, x]).T
outs = pvsystem.singlediode(*x, method='lambertw')
assert np.array_equal(outs['v_oc'], [0, 0])
patcher.return_value = np.array([-9.999e-13, -1.001e-13])
x = np.array([x, x]).T
outs = pvsystem.singlediode(*x, method="lambertw")
assert_array_equal(outs["v_oc"], [0, 0])


@pytest.mark.parametrize('method', ['lambertw'])
Expand Down