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
pvlib/snow.py CHANGED
@@ -13,30 +13,38 @@ def _time_delta_in_hours(times):
13
13
  return delta.dt.total_seconds().div(3600)
14
14
 
15
15
 
16
- def fully_covered_nrel(snowfall, threshold_snowfall=1.):
16
+ def fully_covered_nrel(snowfall, snow_depth=None, threshold_snowfall=1.,
17
+ threshold_depth=1.):
17
18
  '''
18
- Calculates the timesteps when the row's slant height is fully covered
19
- by snow.
19
+ Calculates the timesteps when modules are fully covered by snow.
20
20
 
21
21
  Parameters
22
22
  ----------
23
- snowfall : Series
24
- Accumulated snowfall in each time period [cm]
25
-
26
- threshold_snowfall : float, default 1.0
27
- Hourly snowfall above which snow coverage is set to the row's slant
28
- height. [cm/hr]
23
+ snowfall: Series
24
+ Snowfall in each time period. [cm]
25
+ snow_depth: Series, optional
26
+ Snow depth on the ground at the beginning of each time period.
27
+ Must have the same index as ``snowfall``. [cm]
28
+ threshold_snowfall: float, default 1.0
29
+ Hourly snowfall above which the row is fully covered for that hour.
30
+ [cm/hr]
31
+ threshold_depth: float, default 1.0
32
+ Snow depth on the ground, above which snow can affect the modules. [cm]
29
33
 
30
34
  Returns
31
35
  ----------
32
- boolean: Series
33
- True where the snowfall exceeds the defined threshold to fully cover
34
- the panel.
36
+ covered: Series
37
+ A Series of boolean, True where the snowfall exceeds the defined
38
+ threshold to fully cover the panel.
35
39
 
36
40
  Notes
37
41
  -----
38
42
  Implements the model described in [1]_ with minor improvements in [2]_.
39
43
 
44
+ ``snow_depth`` is used to return `False` (not fully covered) when snow
45
+ is less than ``threshold_depth``. This check is described in [2]_ as needed
46
+ for systems with low tilt angle.
47
+
40
48
  References
41
49
  ----------
42
50
  .. [1] Marion, B.; Schaefer, R.; Caine, H.; Sanchez, G. (2013).
@@ -56,15 +64,20 @@ def fully_covered_nrel(snowfall, threshold_snowfall=1.):
56
64
  hourly_snow_rate.iloc[0] = snowfall.iloc[0] / timedelta
57
65
  else: # can't infer frequency from index
58
66
  hourly_snow_rate.iloc[0] = 0 # replaces NaN
59
- return hourly_snow_rate > threshold_snowfall
67
+ covered = (hourly_snow_rate > threshold_snowfall)
68
+ # no coverage when no snow on the ground
69
+ if snow_depth is not None:
70
+ covered = covered & (snow_depth >= threshold_depth)
71
+ return covered
60
72
 
61
73
 
62
74
  def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
63
- initial_coverage=0, threshold_snowfall=1.,
64
- can_slide_coefficient=-80., slide_amount_coefficient=0.197):
75
+ snow_depth=None, initial_coverage=0, threshold_snowfall=1.,
76
+ threshold_depth=1., can_slide_coefficient=-80.,
77
+ slide_amount_coefficient=0.197):
65
78
  '''
66
- Calculates the fraction of the slant height of a row of modules covered by
67
- snow at every time step.
79
+ Calculates the fraction of the slant height of a row of modules that is
80
+ covered by snow at every time step.
68
81
 
69
82
  Implements the model described in [1]_ with minor improvements in [2]_,
70
83
  with the change that the output is in fraction of the row's slant height
@@ -74,7 +87,7 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
74
87
  Parameters
75
88
  ----------
76
89
  snowfall : Series
77
- Accumulated snowfall within each time period. [cm]
90
+ Snowfall within each time period. [cm]
78
91
  poa_irradiance : Series
79
92
  Total in-plane irradiance [W/m^2]
80
93
  temp_air : Series
@@ -82,12 +95,17 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
82
95
  surface_tilt : numeric
83
96
  Tilt of module's from horizontal, e.g. surface facing up = 0,
84
97
  surface facing horizon = 90. [degrees]
98
+ snow_depth : Series, optional
99
+ Snow depth on the ground at the beginning of each time period.
100
+ Must have the same index as ``snowfall``. [cm]
85
101
  initial_coverage : float, default 0
86
102
  Fraction of row's slant height that is covered with snow at the
87
103
  beginning of the simulation. [unitless]
88
- threshold_snowfall : float, default 1.0
89
- Hourly snowfall above which snow coverage is set to the row's slant
90
- height. [cm/hr]
104
+ threshold_snowfall: float, default 1.0
105
+ Hourly snowfall above which the row is fully covered for that hour.
106
+ [cm/hr]
107
+ threshold_depth: float, default 1.0
108
+ Snow depth on the ground, above which snow can affect the modules. [cm]
91
109
  can_slide_coefficient : float, default -80.
92
110
  Coefficient to determine if snow can slide given irradiance and air
93
111
  temperature. [W/(m^2 C)]
@@ -103,8 +121,12 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
103
121
 
104
122
  Notes
105
123
  -----
106
- In [1]_, `can_slide_coefficient` is termed `m`, and the value of
107
- `slide_amount_coefficient` is given in tenths of a module's slant height.
124
+ In [1]_, ``can_slide_coefficient`` is termed `m`, and the value of
125
+ ``slide_amount_coefficient`` is given in tenths of a module's slant height.
126
+
127
+ ``snow_depth`` is used to set ``snow_coverage`` to 0 (not fully covered)
128
+ when snow is less than ``threshold_depth``. This check is described in
129
+ [2]_ as needed for systems with low tilt angle.
108
130
 
109
131
  References
110
132
  ----------
@@ -117,7 +139,8 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
117
139
  '''
118
140
 
119
141
  # find times with new snowfall
120
- new_snowfall = fully_covered_nrel(snowfall, threshold_snowfall)
142
+ new_snowfall = fully_covered_nrel(snowfall, snow_depth, threshold_snowfall,
143
+ threshold_depth)
121
144
 
122
145
  # set up output Series
123
146
  snow_coverage = pd.Series(np.nan, index=poa_irradiance.index)
@@ -132,6 +155,13 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
132
155
  # don't slide in the interval preceding the snowfall data
133
156
  slide_amt.iloc[0] = 0
134
157
 
158
+ if snow_depth is not None:
159
+ # All slides off if snow on the ground is less than threshold_depth.
160
+ # Described in [2] to avoid non-sliding snow for low-tilt systems.
161
+ # Default threshold_depth of 1cm is from [2[ and SAM's implementation.
162
+ # https://github.com/NREL/ssc/issues/1265
163
+ slide_amt[snow_depth < threshold_depth] = 1.
164
+
135
165
  # build time series of cumulative slide amounts
136
166
  sliding_period_ID = new_snowfall.cumsum()
137
167
  cumulative_sliding = slide_amt.groupby(sliding_period_ID).cumsum()
@@ -143,7 +173,6 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
143
173
  snow_coverage.ffill(inplace=True)
144
174
  snow_coverage -= cumulative_sliding
145
175
 
146
- # clean up periods where row is completely uncovered
147
176
  return snow_coverage.clip(lower=0)
148
177
 
149
178
 
@@ -278,9 +307,8 @@ def loss_townsend(snow_total, snow_events, surface_tilt, relative_humidity,
278
307
  axis to the module edge.
279
308
 
280
309
  The parameter `string_factor` is an enhancement added to the model after
281
- publication of [1]_ per private communication with the model's author. The
282
- definition for snow events documented above is also based on private
283
- communication with the model's author.
310
+ publication of [1]_, as described in [2]_.
311
+ The definition for snow events documented above is based on [3]_.
284
312
 
285
313
  References
286
314
  ----------
@@ -288,6 +316,14 @@ def loss_townsend(snow_total, snow_events, surface_tilt, relative_humidity,
288
316
  update from two winters of measurements in the SIERRA. 37th IEEE
289
317
  Photovoltaic Specialists Conference, Seattle, WA, USA.
290
318
  :doi:`10.1109/PVSC.2011.6186627`
319
+ .. [2] Townsend, T. and Previtali, J. (2023). A Fresh Dusting: Current
320
+ Uses of the Townsend Snow Model. In "Photovoltaic Reliability
321
+ Workshop (PVRW) 2023 Proceedings: Posters.", ed. Silverman,
322
+ T. J. Dec. 2023. NREL/CP-5900-87918.
323
+ Available at: https://www.nrel.gov/docs/fy25osti/90585.pdf
324
+ .. [3] Townsend, T. (2013). Predicting PV Energy Loss Caused by Snow.
325
+ Solar Power International, Chicago IL.
326
+ :doi:`10.13140/RG.2.2.14299.68647`
291
327
  '''
292
328
 
293
329
  # unit conversions from cm and m to in, from C to K, and from % to fraction
@@ -8,7 +8,6 @@ from pvlib.spectrum.mismatch import ( # noqa: F401
8
8
  spectral_factor_jrc,
9
9
  )
10
10
  from pvlib.spectrum.irradiance import ( # noqa: F401
11
- get_am15g,
12
11
  get_reference_spectra,
13
12
  average_photon_energy,
14
13
  )
@@ -4,7 +4,6 @@ calculations related to spectral irradiance data.
4
4
  """
5
5
 
6
6
  import pvlib
7
- from pvlib._deprecation import deprecated
8
7
  import numpy as np
9
8
  import pandas as pd
10
9
  from pathlib import Path
@@ -13,68 +12,6 @@ from scipy import constants
13
12
  from scipy.integrate import trapezoid
14
13
 
15
14
 
16
- @deprecated(
17
- since="0.11",
18
- removal="0.12",
19
- name="pvlib.spectrum.get_am15g",
20
- alternative="pvlib.spectrum.get_reference_spectra",
21
- addendum=(
22
- "The new function reads more data. Use it with "
23
- + "standard='ASTM G173-03' and extract the 'global' column."
24
- ),
25
- )
26
- def get_am15g(wavelength=None):
27
- r"""
28
- Read the ASTM G173-03 AM1.5 global spectrum on a 37-degree tilted surface,
29
- optionally interpolated to the specified wavelength(s).
30
-
31
- Global (tilted) irradiance includes direct and diffuse irradiance from sky
32
- and ground reflections, and is more formally called hemispherical
33
- irradiance (on a tilted surface). In the context of photovoltaic systems
34
- the irradiance on a flat receiver is frequently called plane-of-array (POA)
35
- irradiance.
36
-
37
- Parameters
38
- ----------
39
- wavelength: 1-D sequence of numeric, optional
40
- Wavelengths at which the spectrum is interpolated.
41
- By default the 2002 wavelengths of the standard are returned. [nm].
42
-
43
- Returns
44
- -------
45
- am15g: pandas.Series
46
- The AM1.5g standard spectrum indexed by ``wavelength``. [W/(m²nm)].
47
-
48
- Notes
49
- -----
50
- If ``wavelength`` is specified this function uses linear interpolation.
51
-
52
- If the values in ``wavelength`` are too widely spaced, the integral of the
53
- spectrum may deviate from the standard value of 1000.37 W/m².
54
-
55
- The values in the data file provided with pvlib-python are copied from an
56
- Excel file distributed by NREL, which is found here:
57
- https://www.nrel.gov/grid/solar-resource/assets/data/astmg173.xls
58
-
59
- More information about reference spectra is found here:
60
- https://www.nrel.gov/grid/solar-resource/spectra-am1.5.html
61
-
62
- See Also
63
- --------
64
- pvlib.spectrum.get_reference_spectra : reads also the direct and
65
- extraterrestrial components of the spectrum.
66
-
67
- References
68
- ----------
69
- .. [1] ASTM "G173-03 Standard Tables for Reference Solar Spectral
70
- Irradiances: Direct Normal and Hemispherical on 37° Tilted Surface."
71
- """ # noqa: E501
72
- # Contributed by Anton Driesse (@adriesse), PV Performance Labs. Aug. 2022
73
- # modified by @echedey-ls, as a wrapper of spectrum.get_reference_spectra
74
- standard = get_reference_spectra(wavelength, standard="ASTM G173-03")
75
- return standard["global"]
76
-
77
-
78
15
  def get_reference_spectra(wavelengths=None, standard="ASTM G173-03"):
79
16
  r"""
80
17
  Read a standard spectrum specified by ``standard``, optionally
@@ -201,7 +138,8 @@ def average_photon_energy(spectra):
201
138
  ape : numeric or pandas.Series
202
139
  Average Photon Energy [eV].
203
140
  Note: returns ``np.nan`` in the case of all-zero spectral irradiance
204
- input.
141
+ input, or where one or more spectral irradiance values is
142
+ ``np.nan``.
205
143
 
206
144
  Notes
207
145
  -----
@@ -520,7 +520,7 @@ def spectral_factor_pvspec(airmass_absolute, clearsky_index,
520
520
  One of the following PV technology strings from [1]_:
521
521
 
522
522
  * ``'fs4-1'`` - First Solar series 4-1 and earlier CdTe module.
523
- * ``'fs4-2'`` - First Solar 4-2 and later CdTe module.
523
+ * ``'fs4-2'`` - First Solar series 4-2 and later CdTe module.
524
524
  * ``'monosi'`` - anonymous monocrystalline Si module.
525
525
  * ``'multisi'`` - anonymous multicrystalline Si module.
526
526
  * ``'cigs'`` - anonymous copper indium gallium selenide module.
@@ -576,8 +576,8 @@ def spectral_factor_pvspec(airmass_absolute, clearsky_index,
576
576
  _coefficients = {}
577
577
  _coefficients['multisi'] = (0.9847, -0.05237, 0.03034)
578
578
  _coefficients['monosi'] = (0.9845, -0.05169, 0.03034)
579
- _coefficients['fs-2'] = (1.002, -0.07108, 0.02465)
580
- _coefficients['fs-4'] = (0.9981, -0.05776, 0.02336)
579
+ _coefficients['fs4-2'] = (1.002, -0.07108, 0.02465)
580
+ _coefficients['fs4-1'] = (0.9981, -0.05776, 0.02336)
581
581
  _coefficients['cigs'] = (0.9791, -0.03904, 0.03096)
582
582
  _coefficients['asi'] = (1.051, -0.1033, 0.009838)
583
583
 
pvlib/tools.py CHANGED
@@ -3,10 +3,11 @@ Collection of functions used in pvlib_python
3
3
  """
4
4
 
5
5
  import datetime as dt
6
+ import warnings
7
+
6
8
  import numpy as np
7
9
  import pandas as pd
8
10
  import pytz
9
- import warnings
10
11
 
11
12
 
12
13
  def cosd(angle):
@@ -119,21 +120,21 @@ def atand(number):
119
120
 
120
121
  def localize_to_utc(time, location):
121
122
  """
122
- Converts or localizes a time series to UTC.
123
+ Converts ``time`` to UTC, localizing if necessary using location.
123
124
 
124
125
  Parameters
125
126
  ----------
126
127
  time : datetime.datetime, pandas.DatetimeIndex,
127
128
  or pandas.Series/DataFrame with a DatetimeIndex.
128
- location : pvlib.Location object
129
+ location : pvlib.Location object (unused if ``time`` is localized)
129
130
 
130
131
  Returns
131
132
  -------
132
- pandas object localized to UTC.
133
+ datetime.datetime or pandas object localized to UTC.
133
134
  """
134
135
  if isinstance(time, dt.datetime):
135
136
  if time.tzinfo is None:
136
- time = pytz.timezone(location.tz).localize(time)
137
+ time = location.pytz.localize(time)
137
138
  time_utc = time.astimezone(pytz.utc)
138
139
  else:
139
140
  try:
@@ -1,15 +1,14 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pvlib
3
- Version: 0.11.2
3
+ Version: 0.12.1a1
4
4
  Summary: A set of functions and classes for simulating the performance of photovoltaic energy systems.
5
5
  Home-page: https://github.com/pvlib/pvlib-python
6
6
  Author-email: pvlib python Developers <pvlib-admin@googlegroups.com>
7
- License: BSD-3-Clause
7
+ License-Expression: BSD-3-Clause
8
8
  Project-URL: Bug Tracker, https://github.com/pvlib/pvlib-python/issues
9
9
  Project-URL: Documentation, https://pvlib-python.readthedocs.io/
10
10
  Project-URL: Source Code, https://github.com/pvlib/pvlib-python
11
11
  Classifier: Development Status :: 4 - Beta
12
- Classifier: License :: OSI Approved :: BSD License
13
12
  Classifier: Operating System :: OS Independent
14
13
  Classifier: Intended Audience :: Science/Research
15
14
  Classifier: Programming Language :: Python
@@ -44,7 +43,7 @@ Requires-Dist: pillow; extra == "doc"
44
43
  Requires-Dist: sphinx-toggleprompt==0.5.2; extra == "doc"
45
44
  Requires-Dist: sphinx-favicon; extra == "doc"
46
45
  Requires-Dist: solarfactors; extra == "doc"
47
- Requires-Dist: sphinx-hoverxref; extra == "doc"
46
+ Requires-Dist: sphinx-hoverxref~=1.4.2; extra == "doc"
48
47
  Provides-Extra: test
49
48
  Requires-Dist: pytest; extra == "test"
50
49
  Requires-Dist: pytest-cov; extra == "test"
@@ -56,6 +55,8 @@ Requires-Dist: pytest-remotedata; extra == "test"
56
55
  Requires-Dist: packaging; extra == "test"
57
56
  Provides-Extra: all
58
57
  Requires-Dist: pvlib[doc,optional,test]; extra == "all"
58
+ Dynamic: home-page
59
+ Dynamic: license-file
59
60
 
60
61
  pvlib python is a community developed toolbox that provides a set of
61
62
  functions and classes for simulating the performance of photovoltaic
@@ -0,0 +1,80 @@
1
+ pvlib/__init__.py,sha256=vdXAcBhLHHabZq1hdGnBEoo5cif6hLIS7mCJtgnWWUA,515
2
+ pvlib/_deprecation.py,sha256=pBZkJGV1r3m6q6ymqbQcT__t_toUkDQgPYYCK_Yu1so,15794
3
+ pvlib/albedo.py,sha256=MqrkDztnF6VWaM7W28AGGEgCyAK6X13bDvPk9YEaimU,6205
4
+ pvlib/atmosphere.py,sha256=zG6dXIrAdCvruXXHi7OthbcVqbXfSd6laib7JPkCztA,26854
5
+ pvlib/clearsky.py,sha256=9ReN3IGJHlJv_3bnxWEQUVZkww-klafsqqE5A-jelBQ,38553
6
+ pvlib/iam.py,sha256=zL0YzOaMA2Twbl0JJ0y5nxoxjmaOb9OQGH_Z1MVGcIw,44224
7
+ pvlib/inverter.py,sha256=ZpSv3cjt-Qm_JundL_jkvhCUd3iGjmlKcnNJeJqA2Qw,19127
8
+ pvlib/irradiance.py,sha256=PTVInBAqcHeQzmJaxhIn8eQbCXjeRBlK1jo9S4FaXjs,147940
9
+ pvlib/location.py,sha256=G31Iabv1KcYzMFr5sd0JhcJr9IpZx2rLv25h1K2XaAE,17509
10
+ pvlib/modelchain.py,sha256=G7FysXI-3hcedpFeFstL_PonWzkRwjl3wGZgPy6OL00,72788
11
+ pvlib/pvarray.py,sha256=r60sGTxFNlPiFQndusCJmlEIPX0dv9_7ozKw8zxh7IM,12677
12
+ pvlib/pvsystem.py,sha256=_TiDNphMQgauZImvXjpBAhEnDHwml43Rui0Zn83UggQ,111917
13
+ pvlib/scaling.py,sha256=SsQEmM4f4O1wC7e0amEV4SgaRTBX8nG5IiSV9Xs0i5o,10983
14
+ pvlib/shading.py,sha256=S1Av-oskqxQTyLKkmaVr854bve3StfbP_yF5isHF5zI,26172
15
+ pvlib/singlediode.py,sha256=wcq7QE68CNy04gOHzP-vrdYfZh_QHJcIzkDZXSkZsWQ,35399
16
+ pvlib/snow.py,sha256=1jbfCvyi8ClE15U_stwdnxdaMnXOw8igN3BIYEjFrko,14755
17
+ pvlib/soiling.py,sha256=zDJ3N0uyeS1CoO0mxSdG16q2FCBLZSHbujJHgish54U,8799
18
+ pvlib/solarposition.py,sha256=EZ6tCrz64fLX8-7xTBLwu6JnvjXStFCx2a8Xo1nM6Eo,51200
19
+ pvlib/spa.py,sha256=rXdizMpf2WEe-eKpseN_lf5MWzFihhayrT6E6h5fkgI,44847
20
+ pvlib/temperature.py,sha256=JmLUNkSlldlpSVu8dkRm_HRaSsA2QI1Li13AOCJU_cc,57886
21
+ pvlib/tools.py,sha256=A1g0GNp8S8OGVWSSPYkmuKy26MOpDeVXm0dMxa1sydk,13957
22
+ pvlib/tracking.py,sha256=YAgTSpT21GxOeTpow_cvD5njqJalwl-nHIr9KxuBHsQ,16152
23
+ pvlib/transformer.py,sha256=FXyYaPPooFXAvAP3Ib5vENDVJocbo6kUuBAPzQdimHo,3437
24
+ pvlib/version.py,sha256=0CONzyOSN34Jgbaj9JzemFuaEnbRON_yxp-ah6_KxxQ,165
25
+ pvlib/bifacial/__init__.py,sha256=64cyMvdne1gJJ-tSEetheorxEeMm-TOIad1u-0DSucA,460
26
+ pvlib/bifacial/infinite_sheds.py,sha256=eG4t_oLkInYZeGkFrDaZmT39tXShi4o0IIsvoI2rLuk,23105
27
+ pvlib/bifacial/loss_models.py,sha256=RDl9TcKqFoYXnE3P88DjLVFODh2mHdKEFUUH-BnvH7E,5944
28
+ pvlib/bifacial/pvfactors.py,sha256=QJXqjok4UcaUToNs6eR5ZDMsVf3HHT2AqW2u36hOOSI,5437
29
+ pvlib/bifacial/utils.py,sha256=98D7buxlcE8oilC3BqHqqDT7pCjrM-dAGhYvpYjqalU,14558
30
+ pvlib/data/12839.tm2,sha256=6v86FhwMJeUJIEx8Mj9Rqp_OqmeaQ3rpObunQVaM6ss,1261501
31
+ pvlib/data/703165TY.csv,sha256=8DM6aKEW9a6S8ShaKrh4TY4A5So2dEVlisiNctk9jKQ,1760582
32
+ pvlib/data/723170TYA.CSV,sha256=Hpb4RjjOmOaykAK8RaJ6ppuymw7QNo07Urex-BYQxsk,1716576
33
+ pvlib/data/ASTMG173.csv,sha256=kZZKwjwOyC272kp_FgpfX69VHf4Y_65-JEbXS1fueFk,57708
34
+ pvlib/data/Altitude.h5,sha256=08rUZ3iJrKcrksvEiC4_lQJL8oiIjsVJNivURWPQ3v0,1366196
35
+ pvlib/data/LinkeTurbidities.h5,sha256=NMfkwL-GVBbsu_wysMPptWA5pqrf9pl8w8nMroxj6TE,15637705
36
+ pvlib/data/adr-library-cec-inverters-2019-03-05.csv,sha256=6yNlInxEMmvyUEGnYEJQFB4NpDqE0qoNWBA3frRStXs,1147612
37
+ pvlib/data/sam-library-cec-inverters-2019-03-05.csv,sha256=wZIlLw1hIE31j7DflVFKKqUp2ItFojbbfxZzdmHWFtg,568421
38
+ pvlib/data/sam-library-cec-modules-2019-03-05.csv,sha256=p8OxrT2rtUJTaGFcFjIvLjUYX8QWOAtHHE5I3VRbGSA,5446588
39
+ pvlib/data/sam-library-sandia-modules-2015-6-30.csv,sha256=fhC-Oi0IaYVViKEjyDyDWDCIFfD52rU2gL7w2FBAhPM,195253
40
+ pvlib/data/soiling_hsu_example_inputs.csv,sha256=Dkr0Sc5GA2s6I2hBSeAGIEI5J4KKBNgf-LTtzKS0qEE,319716
41
+ pvlib/iotools/__init__.py,sha256=CqYpFa4q0xlQ-tTR_eqWybyzib5IiKdFb30WbZEulRo,2613
42
+ pvlib/iotools/acis.py,sha256=nzuH3SZBhMNoSk0fBr35O4YADDah6D02Acyj5RNUYeI,18449
43
+ pvlib/iotools/bsrn.py,sha256=Y_-_7qdxu047oiCQLO6idu42MMCvh3Im5uBPxCa-YwU,21837
44
+ pvlib/iotools/crn.py,sha256=PLugc4RF_0LzesWHnyCOtx9KmqeECZH9kxcXgzgjGrQ,5336
45
+ pvlib/iotools/epw.py,sha256=U35VKQE-bsttZp3QUZ2AsEqZpMQDIPj4IrhsWGGFJsI,17263
46
+ pvlib/iotools/midc.py,sha256=T2kskGsBzeHY-9HHc8096mbOaifKvFturCTcZq1pIzY,9568
47
+ pvlib/iotools/panond.py,sha256=okK6zNh5r-H1gDPbZRmWEcYYaBmifPhp1ESR-P2YM9s,5262
48
+ pvlib/iotools/psm3.py,sha256=vSK-9cMhaOeFNyqajYbu27jzRs9VQR2h3XY7jCPDMeo,14771
49
+ pvlib/iotools/psm4.py,sha256=sbM3P05-f6YrqXT-vvbsbdr8xd4om6jmrd-z1OXHelU,32060
50
+ pvlib/iotools/pvgis.py,sha256=R2gms1LTR7KMAY5U-P1jE0bHm3eoBqpKnnZvPU_5n_g,31477
51
+ pvlib/iotools/sodapro.py,sha256=Hw4kOUorJ3olSjB5FBlZjdNxIrkjWtDIHZd1IugVsBs,15629
52
+ pvlib/iotools/solaranywhere.py,sha256=_kDetQ0R8rQgcfTZjeQArq9nmCtVa4upF_KGrcipovQ,12535
53
+ pvlib/iotools/solargis.py,sha256=6FeIsqs_bs2oNrUGvkv7Dc4AlIsDiwpCs5oFVcBheO8,8274
54
+ pvlib/iotools/solcast.py,sha256=d-2LAC-Tlazmih_QZKYbOKCyZaP7U08pIwoKTfciTCk,15332
55
+ pvlib/iotools/solrad.py,sha256=M8Xwasro6_hFiZP7hcsYSeEze3q5kNmnV0kAdNHqgBI,7177
56
+ pvlib/iotools/srml.py,sha256=J-irJ-A5i182jZx47Lh4dET-lX5Y2O6DM0-T6IFMD04,8779
57
+ pvlib/iotools/surfrad.py,sha256=WFh2__FGlOwHg6RTxIkcMmdMucX0vbQfHEz9q_HLGjY,7349
58
+ pvlib/iotools/tmy.py,sha256=zfkxn88qSKBR0GOHWxgrQ6r-BOC-ueoDfppjOS18VBI,26603
59
+ pvlib/ivtools/__init__.py,sha256=bnUDPqkzCP96CaFFK3Gw4HNczJoHtO-cI9GBGAtZVGI,159
60
+ pvlib/ivtools/sde.py,sha256=HL2oE70Ls7xccikyaUSi6SQKx3cWES5XoaMAGuMjPIw,17008
61
+ pvlib/ivtools/utils.py,sha256=xL88J-RuYLXFZyy1za8tvoWei0hcwWb_2ktXara2m_M,19423
62
+ pvlib/ivtools/sdm/__init__.py,sha256=P9akg2O7mFkAXoC8Kh2HcaZhbT96K4tTKnYr3b1dt2g,474
63
+ pvlib/ivtools/sdm/_fit_desoto_pvsyst_sandia.py,sha256=1lHhBK5dRl2R80F4ZGwmQsoghAthCLNU_ce_3dt3Vbc,22522
64
+ pvlib/ivtools/sdm/cec.py,sha256=StIQ92RPaU--pp_2QQjFa1SFl5JSntjbEL5GItiOlNU,3434
65
+ pvlib/ivtools/sdm/desoto.py,sha256=saB71F9sXBRAbWB--gHt-QFnAPRYrg_eDEkNK777x38,15107
66
+ pvlib/ivtools/sdm/pvsyst.py,sha256=ur2LVbm_6S941BHNMKOtA-y5OaaT8LfwIctztSO1FbE,23246
67
+ pvlib/spa_c_files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
+ pvlib/spa_c_files/setup.py,sha256=RcMEf0R2wKHJjvpUH5y6h22m86y6UrdXwkPkHKNme48,1102
69
+ pvlib/spa_c_files/spa_py_example.py,sha256=p3ms0mhLycAuZJyaE3Wageqnd_56zh2EKxXK-jlTJfg,1179
70
+ pvlib/spectrum/__init__.py,sha256=8lK8ZJRh5nl4A6eK0OlbiHdViorCHiJkANrK7QkjQIw,516
71
+ pvlib/spectrum/irradiance.py,sha256=VY0-FTUv2WWHTZRyy4lo8lQGrAjIREf4nQMVYrv0mXM,7827
72
+ pvlib/spectrum/mismatch.py,sha256=Vhp1WeyP4vle6hXLsAhDZYwPwyEdPjBhfDL2B1yi0BU,30497
73
+ pvlib/spectrum/response.py,sha256=k3FCoPPR_2yGrfXPGsZljJcgrQ7sckQn0CwiqERNntY,9413
74
+ pvlib/spectrum/spectrl2.py,sha256=sPOZe5lXgkwMem3JbEi19uW7OQq4FzxcZyCnxzXFjWs,19022
75
+ pvlib-0.12.1a1.dist-info/licenses/AUTHORS.md,sha256=Fxk4p_lXlMeQ6g2A1-7oPrgpULDxuJuC9Ebc-3yyj_o,1474
76
+ pvlib-0.12.1a1.dist-info/licenses/LICENSE,sha256=oC4S3araPPDV292K_91XfC7sZAdYqVhCowT3UTuMC-Q,1622
77
+ pvlib-0.12.1a1.dist-info/METADATA,sha256=AuJUb7gX-u4wwLmcVz8otIDN7diBbl9UMprIHrD3_Q4,2899
78
+ pvlib-0.12.1a1.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
79
+ pvlib-0.12.1a1.dist-info/top_level.txt,sha256=eq9CH6YXUc3Fh3dyQ5hQXoGYfSm1SYEAlMygyR22MgE,6
80
+ pvlib-0.12.1a1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.6.0)
2
+ Generator: setuptools (80.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5