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.
Files changed (147) hide show
  1. pvlib/__init__.py +1 -0
  2. pvlib/atmosphere.py +40 -40
  3. pvlib/bifacial/infinite_sheds.py +4 -3
  4. pvlib/bifacial/utils.py +2 -1
  5. pvlib/iotools/__init__.py +6 -0
  6. pvlib/iotools/psm3.py +1 -1
  7. pvlib/iotools/psm4.py +819 -0
  8. pvlib/iotools/pvgis.py +10 -2
  9. pvlib/iotools/tmy.py +3 -69
  10. pvlib/irradiance.py +38 -15
  11. pvlib/ivtools/sdm/__init__.py +20 -0
  12. pvlib/ivtools/sdm/_fit_desoto_pvsyst_sandia.py +585 -0
  13. pvlib/ivtools/sdm/cec.py +93 -0
  14. pvlib/ivtools/sdm/desoto.py +401 -0
  15. pvlib/ivtools/sdm/pvsyst.py +630 -0
  16. pvlib/location.py +73 -33
  17. pvlib/modelchain.py +19 -36
  18. pvlib/pvsystem.py +114 -65
  19. pvlib/snow.py +64 -28
  20. pvlib/spectrum/__init__.py +0 -1
  21. pvlib/spectrum/irradiance.py +2 -64
  22. pvlib/spectrum/mismatch.py +3 -3
  23. pvlib/tools.py +6 -5
  24. {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/METADATA +6 -5
  25. pvlib-0.12.1a1.dist-info/RECORD +80 -0
  26. {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/WHEEL +1 -1
  27. pvlib/data/BIRD_08_16_2012.csv +0 -8761
  28. pvlib/data/BIRD_08_16_2012_patm.csv +0 -8761
  29. pvlib/data/Burlington, United States SolarAnywhere Time Series 2021 Lat_44_465 Lon_-73_205 TMY3 format.csv +0 -8762
  30. pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv +0 -578
  31. pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv +0 -74
  32. pvlib/data/CPS SCH275KTL-DO-US-800-250kW_275kVA_1.OND +0 -146
  33. pvlib/data/CRNS0101-05-2019-AZ_Tucson_11_W.txt +0 -4
  34. pvlib/data/CRN_with_problems.txt +0 -3
  35. pvlib/data/ET-M772BH550GL.PAN +0 -75
  36. pvlib/data/NLD_Amsterdam062400_IWEC.epw +0 -8768
  37. pvlib/data/PVsyst_demo.csv +0 -10757
  38. pvlib/data/PVsyst_demo_model.csv +0 -3588
  39. pvlib/data/SRML-day-EUPO1801.txt +0 -1441
  40. pvlib/data/abq19056.dat +0 -6
  41. pvlib/data/bishop88_numerical_precision.csv +0 -101
  42. pvlib/data/bsrn-lr0100-pay0616.dat +0 -86901
  43. pvlib/data/bsrn-pay0616.dat.gz +0 -0
  44. pvlib/data/cams_mcclear_1min_verbose.csv +0 -60
  45. pvlib/data/cams_mcclear_monthly.csv +0 -42
  46. pvlib/data/cams_radiation_1min_verbose.csv +0 -72
  47. pvlib/data/cams_radiation_monthly.csv +0 -47
  48. pvlib/data/detect_clearsky_data.csv +0 -35
  49. pvlib/data/detect_clearsky_threshold_data.csv +0 -126
  50. pvlib/data/greensboro_kimber_soil_manwash.dat +0 -8761
  51. pvlib/data/greensboro_kimber_soil_nowash.dat +0 -8761
  52. pvlib/data/inverter_fit_snl_meas.csv +0 -127
  53. pvlib/data/inverter_fit_snl_sim.csv +0 -19
  54. pvlib/data/ivtools_numdiff.csv +0 -52
  55. pvlib/data/midc_20181014.txt +0 -1441
  56. pvlib/data/midc_raw_20181018.txt +0 -1441
  57. pvlib/data/midc_raw_short_header_20191115.txt +0 -1441
  58. pvlib/data/msn19056.dat +0 -6
  59. pvlib/data/precise_iv_curves1.json +0 -10251
  60. pvlib/data/precise_iv_curves2.json +0 -10251
  61. pvlib/data/precise_iv_curves_parameter_sets1.csv +0 -33
  62. pvlib/data/precise_iv_curves_parameter_sets2.csv +0 -33
  63. pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA2_10kWp_CIS_5_2a_2013_2014.json +0 -1
  64. pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA_30deg_0deg_2016_2016.csv +0 -35
  65. pvlib/data/pvgis_tmy_meta.json +0 -32
  66. pvlib/data/pvgis_tmy_test.csv +0 -8761
  67. pvlib/data/pvwatts_8760_rackmount.csv +0 -8779
  68. pvlib/data/pvwatts_8760_roofmount.csv +0 -8779
  69. pvlib/data/singleaxis_tracker_wslope.csv +0 -8761
  70. pvlib/data/spectrl2_example_spectra.csv +0 -123
  71. pvlib/data/surfrad-slv16001.dat +0 -1442
  72. pvlib/data/test_psm3_2017.csv +0 -17521
  73. pvlib/data/test_psm3_2019_5min.csv +0 -289
  74. pvlib/data/test_psm3_tmy-2017.csv +0 -8761
  75. pvlib/data/test_read_psm3.csv +0 -17523
  76. pvlib/data/test_read_pvgis_horizon.csv +0 -49
  77. pvlib/data/tmy_45.000_8.000_2005_2023.csv +0 -8789
  78. pvlib/data/tmy_45.000_8.000_2005_2023.epw +0 -8768
  79. pvlib/data/tmy_45.000_8.000_2005_2023.json +0 -1
  80. pvlib/data/tmy_45.000_8.000_2005_2023.txt +0 -8761
  81. pvlib/data/tmy_45.000_8.000_userhorizon.json +0 -1
  82. pvlib/ivtools/sdm.py +0 -1379
  83. pvlib/spa_c_files/README.md +0 -81
  84. pvlib/spa_c_files/cspa_py.pxd +0 -43
  85. pvlib/spa_c_files/spa_py.pyx +0 -30
  86. pvlib/tests/__init__.py +0 -0
  87. pvlib/tests/bifacial/__init__.py +0 -0
  88. pvlib/tests/bifacial/test_infinite_sheds.py +0 -317
  89. pvlib/tests/bifacial/test_losses_models.py +0 -54
  90. pvlib/tests/bifacial/test_pvfactors.py +0 -82
  91. pvlib/tests/bifacial/test_utils.py +0 -192
  92. pvlib/tests/conftest.py +0 -476
  93. pvlib/tests/iotools/__init__.py +0 -0
  94. pvlib/tests/iotools/test_acis.py +0 -213
  95. pvlib/tests/iotools/test_bsrn.py +0 -131
  96. pvlib/tests/iotools/test_crn.py +0 -95
  97. pvlib/tests/iotools/test_epw.py +0 -23
  98. pvlib/tests/iotools/test_midc.py +0 -89
  99. pvlib/tests/iotools/test_panond.py +0 -32
  100. pvlib/tests/iotools/test_psm3.py +0 -198
  101. pvlib/tests/iotools/test_pvgis.py +0 -644
  102. pvlib/tests/iotools/test_sodapro.py +0 -298
  103. pvlib/tests/iotools/test_solaranywhere.py +0 -287
  104. pvlib/tests/iotools/test_solargis.py +0 -68
  105. pvlib/tests/iotools/test_solcast.py +0 -324
  106. pvlib/tests/iotools/test_solrad.py +0 -152
  107. pvlib/tests/iotools/test_srml.py +0 -124
  108. pvlib/tests/iotools/test_surfrad.py +0 -75
  109. pvlib/tests/iotools/test_tmy.py +0 -133
  110. pvlib/tests/ivtools/__init__.py +0 -0
  111. pvlib/tests/ivtools/test_sde.py +0 -230
  112. pvlib/tests/ivtools/test_sdm.py +0 -429
  113. pvlib/tests/ivtools/test_utils.py +0 -173
  114. pvlib/tests/spectrum/__init__.py +0 -0
  115. pvlib/tests/spectrum/conftest.py +0 -40
  116. pvlib/tests/spectrum/test_irradiance.py +0 -138
  117. pvlib/tests/spectrum/test_mismatch.py +0 -304
  118. pvlib/tests/spectrum/test_response.py +0 -124
  119. pvlib/tests/spectrum/test_spectrl2.py +0 -72
  120. pvlib/tests/test__deprecation.py +0 -97
  121. pvlib/tests/test_albedo.py +0 -84
  122. pvlib/tests/test_atmosphere.py +0 -351
  123. pvlib/tests/test_clearsky.py +0 -884
  124. pvlib/tests/test_conftest.py +0 -37
  125. pvlib/tests/test_iam.py +0 -555
  126. pvlib/tests/test_inverter.py +0 -213
  127. pvlib/tests/test_irradiance.py +0 -1487
  128. pvlib/tests/test_location.py +0 -356
  129. pvlib/tests/test_modelchain.py +0 -2020
  130. pvlib/tests/test_numerical_precision.py +0 -124
  131. pvlib/tests/test_pvarray.py +0 -71
  132. pvlib/tests/test_pvsystem.py +0 -2511
  133. pvlib/tests/test_scaling.py +0 -207
  134. pvlib/tests/test_shading.py +0 -391
  135. pvlib/tests/test_singlediode.py +0 -608
  136. pvlib/tests/test_snow.py +0 -212
  137. pvlib/tests/test_soiling.py +0 -230
  138. pvlib/tests/test_solarposition.py +0 -966
  139. pvlib/tests/test_spa.py +0 -454
  140. pvlib/tests/test_temperature.py +0 -470
  141. pvlib/tests/test_tools.py +0 -146
  142. pvlib/tests/test_tracking.py +0 -474
  143. pvlib/tests/test_transformer.py +0 -60
  144. pvlib-0.11.2.dist-info/RECORD +0 -191
  145. {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info/licenses}/AUTHORS.md +0 -0
  146. {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info/licenses}/LICENSE +0 -0
  147. {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/top_level.txt +0 -0
@@ -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)