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