pvlib 0.11.2__py3-none-any.whl → 0.12.1a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pvlib/__init__.py +1 -0
- pvlib/atmosphere.py +40 -40
- pvlib/bifacial/infinite_sheds.py +4 -3
- pvlib/bifacial/utils.py +2 -1
- pvlib/iotools/__init__.py +6 -0
- pvlib/iotools/psm3.py +1 -1
- pvlib/iotools/psm4.py +819 -0
- pvlib/iotools/pvgis.py +10 -2
- pvlib/iotools/tmy.py +3 -69
- pvlib/irradiance.py +38 -15
- pvlib/ivtools/sdm/__init__.py +20 -0
- pvlib/ivtools/sdm/_fit_desoto_pvsyst_sandia.py +585 -0
- pvlib/ivtools/sdm/cec.py +93 -0
- pvlib/ivtools/sdm/desoto.py +401 -0
- pvlib/ivtools/sdm/pvsyst.py +630 -0
- pvlib/location.py +73 -33
- pvlib/modelchain.py +19 -36
- pvlib/pvsystem.py +114 -65
- pvlib/snow.py +64 -28
- pvlib/spectrum/__init__.py +0 -1
- pvlib/spectrum/irradiance.py +2 -64
- pvlib/spectrum/mismatch.py +3 -3
- pvlib/tools.py +6 -5
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/METADATA +6 -5
- pvlib-0.12.1a1.dist-info/RECORD +80 -0
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/WHEEL +1 -1
- pvlib/data/BIRD_08_16_2012.csv +0 -8761
- pvlib/data/BIRD_08_16_2012_patm.csv +0 -8761
- pvlib/data/Burlington, United States SolarAnywhere Time Series 2021 Lat_44_465 Lon_-73_205 TMY3 format.csv +0 -8762
- pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv +0 -578
- pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv +0 -74
- pvlib/data/CPS SCH275KTL-DO-US-800-250kW_275kVA_1.OND +0 -146
- pvlib/data/CRNS0101-05-2019-AZ_Tucson_11_W.txt +0 -4
- pvlib/data/CRN_with_problems.txt +0 -3
- pvlib/data/ET-M772BH550GL.PAN +0 -75
- pvlib/data/NLD_Amsterdam062400_IWEC.epw +0 -8768
- pvlib/data/PVsyst_demo.csv +0 -10757
- pvlib/data/PVsyst_demo_model.csv +0 -3588
- pvlib/data/SRML-day-EUPO1801.txt +0 -1441
- pvlib/data/abq19056.dat +0 -6
- pvlib/data/bishop88_numerical_precision.csv +0 -101
- pvlib/data/bsrn-lr0100-pay0616.dat +0 -86901
- pvlib/data/bsrn-pay0616.dat.gz +0 -0
- pvlib/data/cams_mcclear_1min_verbose.csv +0 -60
- pvlib/data/cams_mcclear_monthly.csv +0 -42
- pvlib/data/cams_radiation_1min_verbose.csv +0 -72
- pvlib/data/cams_radiation_monthly.csv +0 -47
- pvlib/data/detect_clearsky_data.csv +0 -35
- pvlib/data/detect_clearsky_threshold_data.csv +0 -126
- pvlib/data/greensboro_kimber_soil_manwash.dat +0 -8761
- pvlib/data/greensboro_kimber_soil_nowash.dat +0 -8761
- pvlib/data/inverter_fit_snl_meas.csv +0 -127
- pvlib/data/inverter_fit_snl_sim.csv +0 -19
- pvlib/data/ivtools_numdiff.csv +0 -52
- pvlib/data/midc_20181014.txt +0 -1441
- pvlib/data/midc_raw_20181018.txt +0 -1441
- pvlib/data/midc_raw_short_header_20191115.txt +0 -1441
- pvlib/data/msn19056.dat +0 -6
- pvlib/data/precise_iv_curves1.json +0 -10251
- pvlib/data/precise_iv_curves2.json +0 -10251
- pvlib/data/precise_iv_curves_parameter_sets1.csv +0 -33
- pvlib/data/precise_iv_curves_parameter_sets2.csv +0 -33
- pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA2_10kWp_CIS_5_2a_2013_2014.json +0 -1
- pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA_30deg_0deg_2016_2016.csv +0 -35
- pvlib/data/pvgis_tmy_meta.json +0 -32
- pvlib/data/pvgis_tmy_test.csv +0 -8761
- pvlib/data/pvwatts_8760_rackmount.csv +0 -8779
- pvlib/data/pvwatts_8760_roofmount.csv +0 -8779
- pvlib/data/singleaxis_tracker_wslope.csv +0 -8761
- pvlib/data/spectrl2_example_spectra.csv +0 -123
- pvlib/data/surfrad-slv16001.dat +0 -1442
- pvlib/data/test_psm3_2017.csv +0 -17521
- pvlib/data/test_psm3_2019_5min.csv +0 -289
- pvlib/data/test_psm3_tmy-2017.csv +0 -8761
- pvlib/data/test_read_psm3.csv +0 -17523
- pvlib/data/test_read_pvgis_horizon.csv +0 -49
- pvlib/data/tmy_45.000_8.000_2005_2023.csv +0 -8789
- pvlib/data/tmy_45.000_8.000_2005_2023.epw +0 -8768
- pvlib/data/tmy_45.000_8.000_2005_2023.json +0 -1
- pvlib/data/tmy_45.000_8.000_2005_2023.txt +0 -8761
- pvlib/data/tmy_45.000_8.000_userhorizon.json +0 -1
- pvlib/ivtools/sdm.py +0 -1379
- pvlib/spa_c_files/README.md +0 -81
- pvlib/spa_c_files/cspa_py.pxd +0 -43
- pvlib/spa_c_files/spa_py.pyx +0 -30
- pvlib/tests/__init__.py +0 -0
- pvlib/tests/bifacial/__init__.py +0 -0
- pvlib/tests/bifacial/test_infinite_sheds.py +0 -317
- pvlib/tests/bifacial/test_losses_models.py +0 -54
- pvlib/tests/bifacial/test_pvfactors.py +0 -82
- pvlib/tests/bifacial/test_utils.py +0 -192
- pvlib/tests/conftest.py +0 -476
- pvlib/tests/iotools/__init__.py +0 -0
- pvlib/tests/iotools/test_acis.py +0 -213
- pvlib/tests/iotools/test_bsrn.py +0 -131
- pvlib/tests/iotools/test_crn.py +0 -95
- pvlib/tests/iotools/test_epw.py +0 -23
- pvlib/tests/iotools/test_midc.py +0 -89
- pvlib/tests/iotools/test_panond.py +0 -32
- pvlib/tests/iotools/test_psm3.py +0 -198
- pvlib/tests/iotools/test_pvgis.py +0 -644
- pvlib/tests/iotools/test_sodapro.py +0 -298
- pvlib/tests/iotools/test_solaranywhere.py +0 -287
- pvlib/tests/iotools/test_solargis.py +0 -68
- pvlib/tests/iotools/test_solcast.py +0 -324
- pvlib/tests/iotools/test_solrad.py +0 -152
- pvlib/tests/iotools/test_srml.py +0 -124
- pvlib/tests/iotools/test_surfrad.py +0 -75
- pvlib/tests/iotools/test_tmy.py +0 -133
- pvlib/tests/ivtools/__init__.py +0 -0
- pvlib/tests/ivtools/test_sde.py +0 -230
- pvlib/tests/ivtools/test_sdm.py +0 -429
- pvlib/tests/ivtools/test_utils.py +0 -173
- pvlib/tests/spectrum/__init__.py +0 -0
- pvlib/tests/spectrum/conftest.py +0 -40
- pvlib/tests/spectrum/test_irradiance.py +0 -138
- pvlib/tests/spectrum/test_mismatch.py +0 -304
- pvlib/tests/spectrum/test_response.py +0 -124
- pvlib/tests/spectrum/test_spectrl2.py +0 -72
- pvlib/tests/test__deprecation.py +0 -97
- pvlib/tests/test_albedo.py +0 -84
- pvlib/tests/test_atmosphere.py +0 -351
- pvlib/tests/test_clearsky.py +0 -884
- pvlib/tests/test_conftest.py +0 -37
- pvlib/tests/test_iam.py +0 -555
- pvlib/tests/test_inverter.py +0 -213
- pvlib/tests/test_irradiance.py +0 -1487
- pvlib/tests/test_location.py +0 -356
- pvlib/tests/test_modelchain.py +0 -2020
- pvlib/tests/test_numerical_precision.py +0 -124
- pvlib/tests/test_pvarray.py +0 -71
- pvlib/tests/test_pvsystem.py +0 -2511
- pvlib/tests/test_scaling.py +0 -207
- pvlib/tests/test_shading.py +0 -391
- pvlib/tests/test_singlediode.py +0 -608
- pvlib/tests/test_snow.py +0 -212
- pvlib/tests/test_soiling.py +0 -230
- pvlib/tests/test_solarposition.py +0 -966
- pvlib/tests/test_spa.py +0 -454
- pvlib/tests/test_temperature.py +0 -470
- pvlib/tests/test_tools.py +0 -146
- pvlib/tests/test_tracking.py +0 -474
- pvlib/tests/test_transformer.py +0 -60
- pvlib-0.11.2.dist-info/RECORD +0 -191
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info/licenses}/AUTHORS.md +0 -0
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info/licenses}/LICENSE +0 -0
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/top_level.txt +0 -0
pvlib/tests/iotools/test_tmy.py
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
import pandas as pd
|
|
3
|
-
from pvlib.iotools import tmy
|
|
4
|
-
from pvlib._deprecation import pvlibDeprecationWarning
|
|
5
|
-
from ..conftest import DATA_DIR
|
|
6
|
-
import pytest
|
|
7
|
-
import warnings
|
|
8
|
-
|
|
9
|
-
# test the API works
|
|
10
|
-
from pvlib.iotools import read_tmy3
|
|
11
|
-
|
|
12
|
-
TMY2_TESTFILE = DATA_DIR / '12839.tm2'
|
|
13
|
-
# TMY3 format (two files below) represents midnight as 24:00
|
|
14
|
-
TMY3_TESTFILE = DATA_DIR / '703165TY.csv'
|
|
15
|
-
TMY3_FEB_LEAPYEAR = DATA_DIR / '723170TYA.CSV'
|
|
16
|
-
# The SolarAnywhere TMY3 format (file below) represents midnight as 00:00
|
|
17
|
-
TMY3_SOLARANYWHERE = DATA_DIR / 'Burlington, United States SolarAnywhere Time Series 2021 Lat_44_465 Lon_-73_205 TMY3 format.csv' # noqa: E501
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def test_read_tmy3():
|
|
21
|
-
tmy.read_tmy3(TMY3_TESTFILE, map_variables=False)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def test_read_tmy3_recolumn():
|
|
25
|
-
with warnings.catch_warnings():
|
|
26
|
-
warnings.simplefilter("ignore")
|
|
27
|
-
data, meta = tmy.read_tmy3(TMY3_TESTFILE, recolumn=True)
|
|
28
|
-
assert 'GHISource' in data.columns
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def test_read_tmy3_norecolumn():
|
|
32
|
-
data, _ = tmy.read_tmy3(TMY3_TESTFILE, map_variables=False)
|
|
33
|
-
assert 'GHI source' in data.columns
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def test_read_tmy3_raise_valueerror():
|
|
37
|
-
with pytest.raises(ValueError, match='`map_variables` and `recolumn`'):
|
|
38
|
-
_ = tmy.read_tmy3(TMY3_TESTFILE, recolumn=True, map_variables=True)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def test_read_tmy3_map_variables():
|
|
42
|
-
data, meta = tmy.read_tmy3(TMY3_TESTFILE, map_variables=True)
|
|
43
|
-
assert 'ghi' in data.columns
|
|
44
|
-
assert 'dni' in data.columns
|
|
45
|
-
assert 'dhi' in data.columns
|
|
46
|
-
assert 'pressure' in data.columns
|
|
47
|
-
assert 'wind_direction' in data.columns
|
|
48
|
-
assert 'wind_speed' in data.columns
|
|
49
|
-
assert 'temp_air' in data.columns
|
|
50
|
-
assert 'temp_dew' in data.columns
|
|
51
|
-
assert 'relative_humidity' in data.columns
|
|
52
|
-
assert 'albedo' in data.columns
|
|
53
|
-
assert 'ghi_extra' in data.columns
|
|
54
|
-
assert 'dni_extra' in data.columns
|
|
55
|
-
assert 'precipitable_water' in data.columns
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def test_read_tmy3_map_variables_deprecating_warning():
|
|
59
|
-
with pytest.warns(pvlibDeprecationWarning, match='names will be renamed'):
|
|
60
|
-
data, meta = tmy.read_tmy3(TMY3_TESTFILE)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def test_read_tmy3_coerce_year():
|
|
64
|
-
coerce_year = 1987
|
|
65
|
-
data, _ = tmy.read_tmy3(TMY3_TESTFILE, coerce_year=coerce_year,
|
|
66
|
-
map_variables=False)
|
|
67
|
-
assert (data.index[:-1].year == 1987).all()
|
|
68
|
-
assert data.index[-1].year == 1988
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
def test_read_tmy3_no_coerce_year():
|
|
72
|
-
coerce_year = None
|
|
73
|
-
data, _ = tmy.read_tmy3(TMY3_TESTFILE, coerce_year=coerce_year,
|
|
74
|
-
map_variables=False)
|
|
75
|
-
assert 1997 and 1999 in data.index.year
|
|
76
|
-
assert data.index[-2] == pd.Timestamp('1998-12-31 23:00:00-09:00')
|
|
77
|
-
assert data.index[-1] == pd.Timestamp('1999-01-01 00:00:00-09:00')
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def test_read_tmy2():
|
|
81
|
-
tmy.read_tmy2(TMY2_TESTFILE)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def test_gh865_read_tmy3_feb_leapyear_hr24():
|
|
85
|
-
"""correctly parse the 24th hour if the tmy3 file has a leap year in feb"""
|
|
86
|
-
data, meta = read_tmy3(TMY3_FEB_LEAPYEAR, map_variables=False)
|
|
87
|
-
# just to be safe, make sure this _IS_ the Greensboro file
|
|
88
|
-
greensboro = {
|
|
89
|
-
'USAF': 723170,
|
|
90
|
-
'Name': '"GREENSBORO PIEDMONT TRIAD INT"',
|
|
91
|
-
'State': 'NC',
|
|
92
|
-
'TZ': -5.0,
|
|
93
|
-
'latitude': 36.1,
|
|
94
|
-
'longitude': -79.95,
|
|
95
|
-
'altitude': 273.0}
|
|
96
|
-
assert meta == greensboro
|
|
97
|
-
# February for Greensboro is 1996, a leap year, so check to make sure there
|
|
98
|
-
# aren't any rows in the output that contain Feb 29th
|
|
99
|
-
assert data.index[1414] == pd.Timestamp('1996-02-28 23:00:00-0500')
|
|
100
|
-
assert data.index[1415] == pd.Timestamp('1996-03-01 00:00:00-0500')
|
|
101
|
-
# now check if it parses correctly when we try to coerce the year
|
|
102
|
-
data, _ = read_tmy3(TMY3_FEB_LEAPYEAR, coerce_year=1990,
|
|
103
|
-
map_variables=False)
|
|
104
|
-
# if get's here w/o an error, then gh865 is fixed, but let's check anyway
|
|
105
|
-
assert all(data.index[:-1].year == 1990)
|
|
106
|
-
assert data.index[-1].year == 1991
|
|
107
|
-
# let's do a quick sanity check, are the indices monotonically increasing?
|
|
108
|
-
assert all(np.diff(data.index.view(np.int64)) == 3600000000000)
|
|
109
|
-
# according to the TMY3 manual, each record corresponds to the previous
|
|
110
|
-
# hour so check that the 1st hour is 1AM and the last hour is midnite
|
|
111
|
-
assert data.index[0].hour == 1
|
|
112
|
-
assert data.index[-1].hour == 0
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
@pytest.fixture
|
|
116
|
-
def solaranywhere_index():
|
|
117
|
-
return pd.date_range('2021-01-01 01:00:00-05:00', periods=8760, freq='1h')
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
def test_solaranywhere_tmy3(solaranywhere_index):
|
|
121
|
-
# The SolarAnywhere TMY3 format specifies midnight as 00:00 whereas the
|
|
122
|
-
# NREL TMY3 format utilizes 24:00. The SolarAnywhere file is therefore
|
|
123
|
-
# included to test files with 00:00 timestamps are parsed correctly
|
|
124
|
-
data, meta = tmy.read_tmy3(TMY3_SOLARANYWHERE, encoding='iso-8859-1',
|
|
125
|
-
map_variables=False)
|
|
126
|
-
pd.testing.assert_index_equal(data.index, solaranywhere_index)
|
|
127
|
-
assert meta['USAF'] == 0
|
|
128
|
-
assert meta['Name'] == 'Burlington United States'
|
|
129
|
-
assert meta['State'] == 'NA'
|
|
130
|
-
assert meta['TZ'] == -5.0
|
|
131
|
-
assert meta['latitude'] == 44.465
|
|
132
|
-
assert meta['longitude'] == -73.205
|
|
133
|
-
assert meta['altitude'] == 41.0
|
pvlib/tests/ivtools/__init__.py
DELETED
|
File without changes
|
pvlib/tests/ivtools/test_sde.py
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
import pytest
|
|
3
|
-
from pvlib import pvsystem
|
|
4
|
-
from pvlib.ivtools import sde
|
|
5
|
-
from pvlib._deprecation import pvlibDeprecationWarning
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
@pytest.fixture
|
|
9
|
-
def get_test_iv_params():
|
|
10
|
-
return {'IL': 8.0, 'I0': 5e-10, 'Rs': 0.2, 'Rsh': 1000, 'nNsVth': 1.61864}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def test_fit_sandia_simple(get_test_iv_params, get_bad_iv_curves):
|
|
14
|
-
test_params = get_test_iv_params
|
|
15
|
-
test_params = dict(photocurrent=test_params['IL'],
|
|
16
|
-
saturation_current=test_params['I0'],
|
|
17
|
-
resistance_series=test_params['Rs'],
|
|
18
|
-
resistance_shunt=test_params['Rsh'],
|
|
19
|
-
nNsVth=test_params['nNsVth'])
|
|
20
|
-
testcurve = pvsystem.singlediode(**test_params)
|
|
21
|
-
v = np.linspace(0., testcurve['v_oc'], 300)
|
|
22
|
-
i = pvsystem.i_from_v(voltage=v, **test_params)
|
|
23
|
-
expected = tuple(test_params.values())
|
|
24
|
-
|
|
25
|
-
result = sde.fit_sandia_simple(voltage=v, current=i)
|
|
26
|
-
assert np.allclose(result, expected, rtol=5e-5)
|
|
27
|
-
|
|
28
|
-
result = sde.fit_sandia_simple(voltage=v, current=i,
|
|
29
|
-
v_oc=testcurve['v_oc'],
|
|
30
|
-
i_sc=testcurve['i_sc'])
|
|
31
|
-
assert np.allclose(result, expected, rtol=5e-5)
|
|
32
|
-
|
|
33
|
-
result = sde.fit_sandia_simple(voltage=v, current=i,
|
|
34
|
-
v_oc=testcurve['v_oc'],
|
|
35
|
-
i_sc=testcurve['i_sc'],
|
|
36
|
-
v_mp_i_mp=(testcurve['v_mp'],
|
|
37
|
-
testcurve['i_mp']))
|
|
38
|
-
assert np.allclose(result, expected, rtol=5e-5)
|
|
39
|
-
|
|
40
|
-
result = sde.fit_sandia_simple(voltage=v, current=i, vlim=0.1)
|
|
41
|
-
assert np.allclose(result, expected, rtol=5e-5)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def test_fit_sandia_simple_bad_iv(get_bad_iv_curves):
|
|
45
|
-
# bad IV curves for coverage of if/then in sde._sandia_simple_params
|
|
46
|
-
v1, i1, v2, i2 = get_bad_iv_curves
|
|
47
|
-
result = sde.fit_sandia_simple(voltage=v1, current=i1)
|
|
48
|
-
assert np.allclose(result, (-2.4322856072799985, 8.826830831727355,
|
|
49
|
-
111.18558915546389, -63.56227601452038,
|
|
50
|
-
-137.9965046659527))
|
|
51
|
-
result = sde.fit_sandia_simple(voltage=v2, current=i2)
|
|
52
|
-
assert np.allclose(result, (2.62405311949227, 5.075520636620032,
|
|
53
|
-
-65.652554411442, 110.35202827739991,
|
|
54
|
-
174.49362093001415))
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
@pytest.mark.parametrize('i,v,nsvth,expected', [
|
|
58
|
-
(np.array([3., 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 1.7, 0.8, 0.]),
|
|
59
|
-
np.array([0., 0.2, 0.4, 0.6, 0.8, 1., 1.2, 1.4, 1.45, 1.5]),
|
|
60
|
-
10.,
|
|
61
|
-
(2.3392, 11.6865, -.232, -.2596, -.7119)),
|
|
62
|
-
(np.array(
|
|
63
|
-
[5., 4.9, 4.8, 4.7, 4.6, 4.5, 4.4, 4.3, 4.2, 4.1, 4., 3.8, 3.5, 1.7,
|
|
64
|
-
0.]),
|
|
65
|
-
np.array(
|
|
66
|
-
[0., .1, .2, .3, .4, .5, .6, .7, .8, .9, 1., 1.1, 1.18, 1.2, 1.22]),
|
|
67
|
-
15.,
|
|
68
|
-
(-22.0795, 27.1196, -4.2076, -.0056, -.0498))])
|
|
69
|
-
def test__fit_sandia_cocontent(i, v, nsvth, expected):
|
|
70
|
-
# test confirms agreement with Matlab code. The returned parameters
|
|
71
|
-
# are nonsense
|
|
72
|
-
iph, io, rsh, rs, n = sde._fit_sandia_cocontent(v, i, nsvth)
|
|
73
|
-
np.testing.assert_allclose(iph, np.array(expected[0]), atol=.0001)
|
|
74
|
-
np.testing.assert_allclose(io, np.array([expected[1]]), atol=.0001)
|
|
75
|
-
np.testing.assert_allclose(rs, np.array([expected[2]]), atol=.0001)
|
|
76
|
-
np.testing.assert_allclose(rsh, np.array([expected[3]]), atol=.0001)
|
|
77
|
-
np.testing.assert_allclose(n, np.array([expected[4]]), atol=.0001)
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
def test__fit_sandia_cocontent_fail():
|
|
81
|
-
# tests for ValueError
|
|
82
|
-
exc_text = 'voltage and current should have the same length'
|
|
83
|
-
with pytest.raises(ValueError, match=exc_text):
|
|
84
|
-
sde._fit_sandia_cocontent(np.array([0., 1., 2.]), np.array([4., 3.]),
|
|
85
|
-
2.)
|
|
86
|
-
exc_text = 'at least 6 voltage points are required; ~50 are recommended'
|
|
87
|
-
with pytest.raises(ValueError, match=exc_text):
|
|
88
|
-
sde._fit_sandia_cocontent(np.array([0., 1., 2., 3., 4.]),
|
|
89
|
-
np.array([4., 3.9, 3.4, 2., 0.]),
|
|
90
|
-
2.)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
@pytest.fixture
|
|
94
|
-
def get_bad_iv_curves():
|
|
95
|
-
# v1, i1 produces a bad value for I0_voc
|
|
96
|
-
v1 = np.array([0, 0.338798867469060, 0.677597734938121, 1.01639660240718,
|
|
97
|
-
1.35519546987624, 1.69399433734530, 2.03279320481436,
|
|
98
|
-
2.37159207228342, 2.71039093975248, 3.04918980722154,
|
|
99
|
-
3.38798867469060, 3.72678754215966, 4.06558640962873,
|
|
100
|
-
4.40438527709779, 4.74318414456685, 5.08198301203591,
|
|
101
|
-
5.42078187950497, 5.75958074697403, 6.09837961444309,
|
|
102
|
-
6.43717848191215, 6.77597734938121, 7.11477621685027,
|
|
103
|
-
7.45357508431933, 7.79237395178839, 8.13117281925745,
|
|
104
|
-
8.46997168672651, 8.80877055419557, 9.14756942166463,
|
|
105
|
-
9.48636828913369, 9.82516715660275, 10.1639660240718,
|
|
106
|
-
10.5027648915409, 10.8415637590099, 11.1803626264790,
|
|
107
|
-
11.5191614939481, 11.8579603614171, 12.1967592288862,
|
|
108
|
-
12.5355580963552, 12.8743569638243, 13.2131558312934,
|
|
109
|
-
13.5519546987624, 13.8907535662315, 14.2295524337005,
|
|
110
|
-
14.5683513011696, 14.9071501686387, 15.2459490361077,
|
|
111
|
-
15.5847479035768, 15.9235467710458, 16.2623456385149,
|
|
112
|
-
16.6011445059840, 16.9399433734530, 17.2787422409221,
|
|
113
|
-
17.6175411083911, 17.9563399758602, 18.2951388433293,
|
|
114
|
-
18.6339377107983, 18.9727365782674, 19.3115354457364,
|
|
115
|
-
19.6503343132055, 19.9891331806746, 20.3279320481436,
|
|
116
|
-
20.6667309156127, 21.0055297830817, 21.3443286505508,
|
|
117
|
-
21.6831275180199, 22.0219263854889, 22.3607252529580,
|
|
118
|
-
22.6995241204270, 23.0383229878961, 23.3771218553652,
|
|
119
|
-
23.7159207228342, 24.0547195903033, 24.3935184577724,
|
|
120
|
-
24.7323173252414, 25.0711161927105, 25.4099150601795,
|
|
121
|
-
25.7487139276486, 26.0875127951177, 26.4263116625867,
|
|
122
|
-
26.7651105300558, 27.1039093975248, 27.4427082649939,
|
|
123
|
-
27.7815071324630, 28.1203059999320, 28.4591048674011,
|
|
124
|
-
28.7979037348701, 29.1367026023392, 29.4755014698083,
|
|
125
|
-
29.8143003372773, 30.1530992047464, 30.4918980722154,
|
|
126
|
-
30.8306969396845, 31.1694958071536, 31.5082946746226,
|
|
127
|
-
31.8470935420917, 32.1858924095607, 32.5246912770298,
|
|
128
|
-
32.8634901444989, 33.2022890119679, 33.5410878794370])
|
|
129
|
-
i1 = np.array([3.39430882774470, 2.80864492110761, 3.28358165429196,
|
|
130
|
-
3.41191190551673, 3.11975662808148, 3.35436585834612,
|
|
131
|
-
3.23953272899809, 3.60307083325333, 2.80478101508277,
|
|
132
|
-
2.80505102853845, 3.16918996870373, 3.21088388439857,
|
|
133
|
-
3.46332865310431, 3.09224155015883, 3.17541550741062,
|
|
134
|
-
3.32470179290389, 3.33224664316240, 3.07709000050741,
|
|
135
|
-
2.89141245343405, 3.01365768561537, 3.23265176770231,
|
|
136
|
-
3.32253647634228, 2.97900657569736, 3.31959549243966,
|
|
137
|
-
3.03375461550111, 2.97579298978937, 3.25432831375159,
|
|
138
|
-
2.89178382564454, 3.00341909207567, 3.72637492250097,
|
|
139
|
-
3.28379856976360, 2.96516169245835, 3.25658381110230,
|
|
140
|
-
3.41655911533139, 3.02718097944604, 3.11458376760376,
|
|
141
|
-
3.24617304369762, 3.45935502367636, 3.21557333256913,
|
|
142
|
-
3.27611176482650, 2.86954135732485, 3.32416319254657,
|
|
143
|
-
3.15277467598732, 3.08272557013770, 3.15602202666259,
|
|
144
|
-
3.49432799877150, 3.53863997177632, 3.10602611478455,
|
|
145
|
-
3.05373911151821, 3.09876772570781, 2.97417228624287,
|
|
146
|
-
2.84573593699237, 3.16288578405195, 3.06533173612783,
|
|
147
|
-
3.02118336639575, 3.34374977225502, 2.97255164138821,
|
|
148
|
-
3.19286135682863, 3.10999753817133, 3.26925354620079,
|
|
149
|
-
3.11957809501529, 3.20155017481720, 3.31724984405837,
|
|
150
|
-
3.42879043512927, 3.17933067619240, 3.47777362613969,
|
|
151
|
-
3.20708912539777, 3.48205761174907, 3.16804363684327,
|
|
152
|
-
3.14055472378230, 3.13445657434470, 2.91152696252998,
|
|
153
|
-
3.10984113847427, 2.80443349399489, 3.23146278164875,
|
|
154
|
-
2.94521083406108, 3.17388903141715, 3.05930294897030,
|
|
155
|
-
3.18985234673287, 3.27946609274898, 3.33717523113602,
|
|
156
|
-
2.76394303462702, 3.19375132937510, 2.82628616689450,
|
|
157
|
-
2.85238527394143, 2.82975892599489, 2.79196912313914,
|
|
158
|
-
2.72860792049395, 2.75585977414140, 2.44280222448805,
|
|
159
|
-
2.36052347370628, 2.26785071765738, 2.10868255743462,
|
|
160
|
-
2.06165739407987, 1.90047259509385, 1.39925575828709,
|
|
161
|
-
1.24749015957606, 0.867823806536762, 0.432752457749993, 0])
|
|
162
|
-
# v2, i2 produces a bad value for I0_vmp
|
|
163
|
-
v2 = np.array([0, 0.365686097622586, 0.731372195245173, 1.09705829286776,
|
|
164
|
-
1.46274439049035, 1.82843048811293, 2.19411658573552,
|
|
165
|
-
2.55980268335810, 2.92548878098069, 3.29117487860328,
|
|
166
|
-
3.65686097622586, 4.02254707384845, 4.38823317147104,
|
|
167
|
-
4.75391926909362, 5.11960536671621, 5.48529146433880,
|
|
168
|
-
5.85097756196138, 6.21666365958397, 6.58234975720655,
|
|
169
|
-
6.94803585482914, 7.31372195245173, 7.67940805007431,
|
|
170
|
-
8.04509414769690, 8.41078024531949, 8.77646634294207,
|
|
171
|
-
9.14215244056466, 9.50783853818725, 9.87352463580983,
|
|
172
|
-
10.2392107334324, 10.6048968310550, 10.9705829286776,
|
|
173
|
-
11.3362690263002, 11.7019551239228, 12.0676412215454,
|
|
174
|
-
12.4333273191679, 12.7990134167905, 13.1646995144131,
|
|
175
|
-
13.5303856120357, 13.8960717096583, 14.2617578072809,
|
|
176
|
-
14.6274439049035, 14.9931300025260, 15.3588161001486,
|
|
177
|
-
15.7245021977712, 16.0901882953938, 16.4558743930164,
|
|
178
|
-
16.8215604906390, 17.1872465882616, 17.5529326858841,
|
|
179
|
-
17.9186187835067, 18.2843048811293, 18.6499909787519,
|
|
180
|
-
19.0156770763745, 19.3813631739971, 19.7470492716197,
|
|
181
|
-
20.1127353692422, 20.4784214668648, 20.8441075644874,
|
|
182
|
-
21.2097936621100, 21.5754797597326, 21.9411658573552,
|
|
183
|
-
22.3068519549778, 22.6725380526004, 23.0382241502229,
|
|
184
|
-
23.4039102478455, 23.7695963454681, 24.1352824430907,
|
|
185
|
-
24.5009685407133, 24.8666546383359, 25.2323407359585,
|
|
186
|
-
25.5980268335810, 25.9637129312036, 26.3293990288262,
|
|
187
|
-
26.6950851264488, 27.0607712240714, 27.4264573216940,
|
|
188
|
-
27.7921434193166, 28.1578295169392, 28.5235156145617,
|
|
189
|
-
28.8892017121843, 29.2548878098069, 29.6205739074295,
|
|
190
|
-
29.9862600050521, 30.3519461026747, 30.7176322002973,
|
|
191
|
-
31.0833182979198, 31.4490043955424, 31.8146904931650,
|
|
192
|
-
32.1803765907876, 32.5460626884102, 32.9117487860328,
|
|
193
|
-
33.2774348836554, 33.6431209812779, 34.0088070789005,
|
|
194
|
-
34.3744931765231, 34.7401792741457, 35.1058653717683,
|
|
195
|
-
35.4715514693909, 35.8372375670135, 36.2029236646360])
|
|
196
|
-
i2 = np.array([6.49218806928330, 6.49139336899548, 6.17810697175204,
|
|
197
|
-
6.75197816263663, 6.59529074137515, 6.18164578868300,
|
|
198
|
-
6.38709397931910, 6.30685422248427, 6.44640615548925,
|
|
199
|
-
6.88727230397772, 6.42074852785591, 6.46348580823746,
|
|
200
|
-
6.38642309763941, 5.66356277572311, 6.61010381702082,
|
|
201
|
-
6.33288284311125, 6.22475343933610, 6.30651399433833,
|
|
202
|
-
6.44435022944051, 6.43741711131908, 6.03536180208946,
|
|
203
|
-
6.23814639328170, 5.97229140403242, 6.20790000748341,
|
|
204
|
-
6.22933550182341, 6.22992127804882, 6.13400871899299,
|
|
205
|
-
6.83491312449950, 6.07952797245846, 6.35837746415450,
|
|
206
|
-
6.41972128662324, 6.85256717258275, 6.25807797296759,
|
|
207
|
-
6.25124948151766, 6.22229212812413, 6.72249444167406,
|
|
208
|
-
6.41085549981649, 6.75792874870056, 6.22096181559171,
|
|
209
|
-
6.47839564388996, 6.56010208597432, 6.63300966556949,
|
|
210
|
-
6.34617546039339, 6.79812221146153, 6.14486056194136,
|
|
211
|
-
6.14979256889311, 6.16883037644880, 6.57309183229605,
|
|
212
|
-
6.40064681038509, 6.18861448239873, 6.91340138179698,
|
|
213
|
-
5.94164388433788, 6.23638991745862, 6.31898940411710,
|
|
214
|
-
6.45247884556830, 6.58081455524297, 6.64915284801713,
|
|
215
|
-
6.07122119270245, 6.41398258148256, 6.62144271089614,
|
|
216
|
-
6.36377197712687, 6.51487678829345, 6.53418950147730,
|
|
217
|
-
6.18886469125371, 6.26341063475750, 6.83488211680259,
|
|
218
|
-
6.62699397226695, 6.41286837534735, 6.44060085001851,
|
|
219
|
-
6.48114130629288, 6.18607038456406, 6.16923370572396,
|
|
220
|
-
6.64223126283631, 6.07231852289266, 5.79043710204375,
|
|
221
|
-
6.48463886529882, 6.36263392044401, 6.11212476454494,
|
|
222
|
-
6.14573900812925, 6.12568047243240, 6.43836230231577,
|
|
223
|
-
6.02505694060219, 6.13819468942244, 6.22100593815064,
|
|
224
|
-
6.02394682666345, 5.89016573063789, 5.74448527739202,
|
|
225
|
-
5.50415294280017, 5.31883018164157, 4.87476769510305,
|
|
226
|
-
4.74386713755523, 4.60638346931628, 4.06177345572680,
|
|
227
|
-
3.73334482123538, 3.13848311672243, 2.71638862600768,
|
|
228
|
-
2.02963773590165, 1.49291145092070, 0.818343889647352, 0])
|
|
229
|
-
|
|
230
|
-
return v1, i1, v2, i2
|