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/test_inverter.py
DELETED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
import pandas as pd
|
|
3
|
-
|
|
4
|
-
from .conftest import assert_series_equal
|
|
5
|
-
from numpy.testing import assert_allclose
|
|
6
|
-
|
|
7
|
-
from .conftest import DATA_DIR
|
|
8
|
-
import pytest
|
|
9
|
-
|
|
10
|
-
from pvlib import inverter
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def test_adr(adr_inverter_parameters):
|
|
14
|
-
vdcs = pd.Series([135, 154, 390, 420, 551])
|
|
15
|
-
pdcs = pd.Series([135, 1232, 1170, 420, 551])
|
|
16
|
-
|
|
17
|
-
pacs = inverter.adr(vdcs, pdcs, adr_inverter_parameters)
|
|
18
|
-
assert_series_equal(pacs, pd.Series([np.nan, 1161.5745, 1116.4459,
|
|
19
|
-
382.6679, np.nan]))
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def test_adr_vtol(adr_inverter_parameters):
|
|
23
|
-
vdcs = pd.Series([135, 154, 390, 420, 551])
|
|
24
|
-
pdcs = pd.Series([135, 1232, 1170, 420, 551])
|
|
25
|
-
|
|
26
|
-
pacs = inverter.adr(vdcs, pdcs, adr_inverter_parameters, vtol=0.20)
|
|
27
|
-
assert_series_equal(pacs, pd.Series([104.8223, 1161.5745, 1116.4459,
|
|
28
|
-
382.6679, 513.3385]))
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def test_adr_float(adr_inverter_parameters):
|
|
32
|
-
vdcs = 154.
|
|
33
|
-
pdcs = 1232.
|
|
34
|
-
|
|
35
|
-
pacs = inverter.adr(vdcs, pdcs, adr_inverter_parameters)
|
|
36
|
-
assert_allclose(pacs, 1161.5745)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
def test_adr_invalid_and_night(sam_data):
|
|
40
|
-
# also tests if inverter.adr can read the output from pvsystem.retrieve_sam
|
|
41
|
-
inverters = sam_data['adrinverter']
|
|
42
|
-
testinv = 'Zigor__Sunzet_3_TL_US_240V__CEC_2011_'
|
|
43
|
-
vdcs = np.array([39.873036, 0., np.nan, 420])
|
|
44
|
-
pdcs = np.array([188.09182, 0., 420, np.nan])
|
|
45
|
-
|
|
46
|
-
pacs = inverter.adr(vdcs, pdcs, inverters[testinv])
|
|
47
|
-
assert_allclose(pacs, np.array([np.nan, -0.25, np.nan, np.nan]))
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def test_sandia(cec_inverter_parameters):
|
|
51
|
-
vdcs = pd.Series(np.linspace(0, 50, 3))
|
|
52
|
-
idcs = pd.Series(np.linspace(0, 11, 3))
|
|
53
|
-
pdcs = idcs * vdcs
|
|
54
|
-
|
|
55
|
-
pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters)
|
|
56
|
-
assert_series_equal(pacs, pd.Series([-0.020000, 132.004308, 250.000000]))
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def test_sandia_float(cec_inverter_parameters):
|
|
60
|
-
vdcs = 25.
|
|
61
|
-
idcs = 5.5
|
|
62
|
-
pdcs = idcs * vdcs
|
|
63
|
-
pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters)
|
|
64
|
-
assert_allclose(pacs, 132.004278, 1e-5)
|
|
65
|
-
# test at low power condition
|
|
66
|
-
vdcs = 25.
|
|
67
|
-
idcs = 0
|
|
68
|
-
pdcs = idcs * vdcs
|
|
69
|
-
pacs = inverter.sandia(vdcs, pdcs, cec_inverter_parameters)
|
|
70
|
-
assert_allclose(pacs, -1. * cec_inverter_parameters['Pnt'], 1e-5)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def test_sandia_Pnt_micro():
|
|
74
|
-
"""
|
|
75
|
-
Test for issue #140, where some microinverters were giving a positive AC
|
|
76
|
-
power output when the DC power was 0.
|
|
77
|
-
"""
|
|
78
|
-
inverter_parameters = {
|
|
79
|
-
'Name': 'Enphase Energy: M250-60-2LL-S2x (-ZC) (-NA) 208V [CEC 2013]',
|
|
80
|
-
'Vac': 208.0,
|
|
81
|
-
'Paco': 240.0,
|
|
82
|
-
'Pdco': 250.5311318,
|
|
83
|
-
'Vdco': 32.06160667,
|
|
84
|
-
'Pso': 1.12048857,
|
|
85
|
-
'C0': -5.76E-05,
|
|
86
|
-
'C1': -6.24E-04,
|
|
87
|
-
'C2': 8.09E-02,
|
|
88
|
-
'C3': -0.111781106,
|
|
89
|
-
'Pnt': 0.043,
|
|
90
|
-
'Vdcmax': 48.0,
|
|
91
|
-
'Idcmax': 9.8,
|
|
92
|
-
'Mppt_low': 27.0,
|
|
93
|
-
'Mppt_high': 39.0,
|
|
94
|
-
}
|
|
95
|
-
vdcs = pd.Series(np.linspace(0, 50, 3))
|
|
96
|
-
idcs = pd.Series(np.linspace(0, 11, 3))
|
|
97
|
-
pdcs = idcs * vdcs
|
|
98
|
-
|
|
99
|
-
pacs = inverter.sandia(vdcs, pdcs, inverter_parameters)
|
|
100
|
-
assert_series_equal(pacs, pd.Series([-0.043, 132.545914746, 240.0]))
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
def test_sandia_multi(cec_inverter_parameters):
|
|
104
|
-
vdcs = pd.Series(np.linspace(0, 50, 3))
|
|
105
|
-
idcs = pd.Series(np.linspace(0, 11, 3)) / 2
|
|
106
|
-
pdcs = idcs * vdcs
|
|
107
|
-
pacs = inverter.sandia_multi((vdcs, vdcs), (pdcs, pdcs),
|
|
108
|
-
cec_inverter_parameters)
|
|
109
|
-
assert_series_equal(pacs, pd.Series([-0.020000, 132.004278, 250.000000]))
|
|
110
|
-
# with lists instead of tuples
|
|
111
|
-
pacs = inverter.sandia_multi([vdcs, vdcs], [pdcs, pdcs],
|
|
112
|
-
cec_inverter_parameters)
|
|
113
|
-
assert_series_equal(pacs, pd.Series([-0.020000, 132.004278, 250.000000]))
|
|
114
|
-
# with arrays instead of tuples
|
|
115
|
-
pacs = inverter.sandia_multi(np.array([vdcs, vdcs]),
|
|
116
|
-
np.array([pdcs, pdcs]),
|
|
117
|
-
cec_inverter_parameters)
|
|
118
|
-
assert_allclose(pacs, np.array([-0.020000, 132.004278, 250.000000]))
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
def test_sandia_multi_length_error(cec_inverter_parameters):
|
|
122
|
-
vdcs = pd.Series(np.linspace(0, 50, 3))
|
|
123
|
-
idcs = pd.Series(np.linspace(0, 11, 3))
|
|
124
|
-
pdcs = idcs * vdcs
|
|
125
|
-
with pytest.raises(ValueError, match='p_dc and v_dc have different'):
|
|
126
|
-
inverter.sandia_multi((vdcs,), (pdcs, pdcs), cec_inverter_parameters)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
def test_sandia_multi_array(cec_inverter_parameters):
|
|
130
|
-
vdcs = np.linspace(0, 50, 3)
|
|
131
|
-
idcs = np.linspace(0, 11, 3)
|
|
132
|
-
pdcs = idcs * vdcs
|
|
133
|
-
pacs = inverter.sandia_multi((vdcs,), (pdcs,), cec_inverter_parameters)
|
|
134
|
-
assert_allclose(pacs, np.array([-0.020000, 132.004278, 250.000000]))
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def test_pvwatts_scalars():
|
|
138
|
-
expected = 85.58556604752516
|
|
139
|
-
out = inverter.pvwatts(90, 100, 0.95)
|
|
140
|
-
assert_allclose(out, expected)
|
|
141
|
-
# GH 675
|
|
142
|
-
expected = 0.
|
|
143
|
-
out = inverter.pvwatts(0., 100)
|
|
144
|
-
assert_allclose(out, expected)
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
def test_pvwatts_possible_negative():
|
|
148
|
-
# pvwatts could return a negative value for (pdc / pdc0) < 0.006
|
|
149
|
-
# unless it is clipped. see GH 541 for more
|
|
150
|
-
expected = 0
|
|
151
|
-
out = inverter.pvwatts(0.001, 1)
|
|
152
|
-
assert_allclose(out, expected)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
def test_pvwatts_arrays():
|
|
156
|
-
pdc = np.array([[np.nan], [0], [50], [100]])
|
|
157
|
-
pdc0 = 100
|
|
158
|
-
expected = np.array([[np.nan],
|
|
159
|
-
[0.],
|
|
160
|
-
[47.60843624],
|
|
161
|
-
[95.]])
|
|
162
|
-
out = inverter.pvwatts(pdc, pdc0, 0.95)
|
|
163
|
-
assert_allclose(out, expected, equal_nan=True)
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
def test_pvwatts_series():
|
|
167
|
-
pdc = pd.Series([np.nan, 0, 50, 100])
|
|
168
|
-
pdc0 = 100
|
|
169
|
-
expected = pd.Series(np.array([np.nan, 0., 47.608436, 95.]))
|
|
170
|
-
out = inverter.pvwatts(pdc, pdc0, 0.95)
|
|
171
|
-
assert_series_equal(expected, out)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
def test_pvwatts_multi():
|
|
175
|
-
pdc = np.array([np.nan, 0, 50, 100]) / 2
|
|
176
|
-
pdc0 = 100
|
|
177
|
-
expected = np.array([np.nan, 0., 47.608436, 95.])
|
|
178
|
-
out = inverter.pvwatts_multi((pdc, pdc), pdc0, 0.95)
|
|
179
|
-
assert_allclose(expected, out)
|
|
180
|
-
# with 2D array
|
|
181
|
-
pdc_2d = np.array([pdc, pdc])
|
|
182
|
-
out = inverter.pvwatts_multi(pdc_2d, pdc0, 0.95)
|
|
183
|
-
assert_allclose(expected, out)
|
|
184
|
-
# with Series
|
|
185
|
-
pdc = pd.Series(pdc)
|
|
186
|
-
out = inverter.pvwatts_multi((pdc, pdc), pdc0, 0.95)
|
|
187
|
-
assert_series_equal(pd.Series(expected), out)
|
|
188
|
-
# with list instead of tuple
|
|
189
|
-
out = inverter.pvwatts_multi([pdc, pdc], pdc0, 0.95)
|
|
190
|
-
assert_series_equal(pd.Series(expected), out)
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
INVERTER_TEST_MEAS = DATA_DIR / 'inverter_fit_snl_meas.csv'
|
|
194
|
-
INVERTER_TEST_SIM = DATA_DIR / 'inverter_fit_snl_sim.csv'
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
@pytest.mark.parametrize('infilen, expected', [
|
|
198
|
-
(INVERTER_TEST_MEAS, {'Paco': 333000., 'Pdco': 343251., 'Vdco': 740.,
|
|
199
|
-
'Pso': 1427.746, 'C0': -5.768e-08, 'C1': 3.596e-05,
|
|
200
|
-
'C2': 1.038e-03, 'C3': 2.978e-05, 'Pnt': 1.}),
|
|
201
|
-
(INVERTER_TEST_SIM, {'Paco': 1000., 'Pdco': 1050., 'Vdco': 240.,
|
|
202
|
-
'Pso': 10., 'C0': 1e-6, 'C1': 1e-4, 'C2': 1e-2,
|
|
203
|
-
'C3': 1e-3, 'Pnt': 1.}),
|
|
204
|
-
])
|
|
205
|
-
def test_fit_sandia(infilen, expected):
|
|
206
|
-
curves = pd.read_csv(infilen)
|
|
207
|
-
dc_power = curves['ac_power'] / curves['efficiency']
|
|
208
|
-
result = inverter.fit_sandia(ac_power=curves['ac_power'],
|
|
209
|
-
dc_power=dc_power,
|
|
210
|
-
dc_voltage=curves['dc_voltage'],
|
|
211
|
-
dc_voltage_level=curves['dc_voltage_level'],
|
|
212
|
-
p_ac_0=expected['Paco'], p_nt=expected['Pnt'])
|
|
213
|
-
assert expected == pytest.approx(result, rel=1e-3)
|