pvlib 0.11.1__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 (149) hide show
  1. pvlib/__init__.py +1 -0
  2. pvlib/_deprecation.py +73 -0
  3. pvlib/atmosphere.py +77 -7
  4. pvlib/bifacial/infinite_sheds.py +4 -3
  5. pvlib/bifacial/utils.py +2 -1
  6. pvlib/clearsky.py +35 -22
  7. pvlib/iam.py +4 -4
  8. pvlib/iotools/midc.py +1 -1
  9. pvlib/iotools/psm3.py +1 -1
  10. pvlib/iotools/pvgis.py +10 -12
  11. pvlib/iotools/tmy.py +3 -69
  12. pvlib/irradiance.py +112 -55
  13. pvlib/ivtools/sdm.py +75 -52
  14. pvlib/location.py +73 -33
  15. pvlib/modelchain.py +18 -35
  16. pvlib/pvsystem.py +139 -94
  17. pvlib/snow.py +64 -28
  18. pvlib/solarposition.py +46 -30
  19. pvlib/spa.py +4 -2
  20. pvlib/spectrum/__init__.py +0 -1
  21. pvlib/spectrum/irradiance.py +2 -64
  22. pvlib/spectrum/mismatch.py +3 -3
  23. pvlib/spectrum/spectrl2.py +2 -1
  24. pvlib/temperature.py +49 -3
  25. pvlib/tools.py +6 -5
  26. {pvlib-0.11.1.dist-info → pvlib-0.12.0.dist-info}/METADATA +14 -11
  27. pvlib-0.12.0.dist-info/RECORD +75 -0
  28. {pvlib-0.11.1.dist-info → pvlib-0.12.0.dist-info}/WHEEL +1 -1
  29. pvlib/data/BIRD_08_16_2012.csv +0 -8761
  30. pvlib/data/BIRD_08_16_2012_patm.csv +0 -8761
  31. pvlib/data/Burlington, United States SolarAnywhere Time Series 2021 Lat_44_465 Lon_-73_205 TMY3 format.csv +0 -8762
  32. pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv +0 -578
  33. pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv +0 -74
  34. pvlib/data/CPS SCH275KTL-DO-US-800-250kW_275kVA_1.OND +0 -146
  35. pvlib/data/CRNS0101-05-2019-AZ_Tucson_11_W.txt +0 -4
  36. pvlib/data/CRN_with_problems.txt +0 -3
  37. pvlib/data/ET-M772BH550GL.PAN +0 -75
  38. pvlib/data/NLD_Amsterdam062400_IWEC.epw +0 -8768
  39. pvlib/data/PVsyst_demo.csv +0 -10757
  40. pvlib/data/PVsyst_demo_model.csv +0 -3588
  41. pvlib/data/SRML-day-EUPO1801.txt +0 -1441
  42. pvlib/data/abq19056.dat +0 -6
  43. pvlib/data/aod550_tcwv_20121101_test.nc +0 -0
  44. pvlib/data/bishop88_numerical_precision.csv +0 -101
  45. pvlib/data/bsrn-lr0100-pay0616.dat +0 -86901
  46. pvlib/data/bsrn-pay0616.dat.gz +0 -0
  47. pvlib/data/cams_mcclear_1min_verbose.csv +0 -60
  48. pvlib/data/cams_mcclear_monthly.csv +0 -42
  49. pvlib/data/cams_radiation_1min_verbose.csv +0 -72
  50. pvlib/data/cams_radiation_monthly.csv +0 -47
  51. pvlib/data/detect_clearsky_data.csv +0 -35
  52. pvlib/data/detect_clearsky_threshold_data.csv +0 -126
  53. pvlib/data/greensboro_kimber_soil_manwash.dat +0 -8761
  54. pvlib/data/greensboro_kimber_soil_nowash.dat +0 -8761
  55. pvlib/data/inverter_fit_snl_meas.csv +0 -127
  56. pvlib/data/inverter_fit_snl_sim.csv +0 -19
  57. pvlib/data/ivtools_numdiff.csv +0 -52
  58. pvlib/data/midc_20181014.txt +0 -1441
  59. pvlib/data/midc_raw_20181018.txt +0 -1441
  60. pvlib/data/midc_raw_short_header_20191115.txt +0 -1441
  61. pvlib/data/msn19056.dat +0 -6
  62. pvlib/data/precise_iv_curves1.json +0 -10251
  63. pvlib/data/precise_iv_curves2.json +0 -10251
  64. pvlib/data/precise_iv_curves_parameter_sets1.csv +0 -33
  65. pvlib/data/precise_iv_curves_parameter_sets2.csv +0 -33
  66. pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA2_10kWp_CIS_5_2a_2013_2014.json +0 -1
  67. pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA_30deg_0deg_2016_2016.csv +0 -35
  68. pvlib/data/pvgis_tmy_meta.json +0 -32
  69. pvlib/data/pvgis_tmy_test.dat +0 -8761
  70. pvlib/data/pvwatts_8760_rackmount.csv +0 -8779
  71. pvlib/data/pvwatts_8760_roofmount.csv +0 -8779
  72. pvlib/data/singleaxis_tracker_wslope.csv +0 -8761
  73. pvlib/data/spectrl2_example_spectra.csv +0 -123
  74. pvlib/data/surfrad-slv16001.dat +0 -1442
  75. pvlib/data/test_psm3_2017.csv +0 -17521
  76. pvlib/data/test_psm3_2019_5min.csv +0 -289
  77. pvlib/data/test_psm3_tmy-2017.csv +0 -8761
  78. pvlib/data/test_read_psm3.csv +0 -17523
  79. pvlib/data/test_read_pvgis_horizon.csv +0 -49
  80. pvlib/data/tmy_45.000_8.000_2005_2020.csv +0 -8789
  81. pvlib/data/tmy_45.000_8.000_2005_2020.epw +0 -8768
  82. pvlib/data/tmy_45.000_8.000_2005_2020.json +0 -1
  83. pvlib/data/tmy_45.000_8.000_2005_2020.txt +0 -8761
  84. pvlib/data/tmy_45.000_8.000_userhorizon.json +0 -1
  85. pvlib/data/variables_style_rules.csv +0 -56
  86. pvlib/spa_c_files/README.md +0 -81
  87. pvlib/spa_c_files/cspa_py.pxd +0 -43
  88. pvlib/spa_c_files/spa_py.pyx +0 -30
  89. pvlib/tests/__init__.py +0 -0
  90. pvlib/tests/bifacial/__init__.py +0 -0
  91. pvlib/tests/bifacial/test_infinite_sheds.py +0 -317
  92. pvlib/tests/bifacial/test_losses_models.py +0 -54
  93. pvlib/tests/bifacial/test_pvfactors.py +0 -82
  94. pvlib/tests/bifacial/test_utils.py +0 -192
  95. pvlib/tests/conftest.py +0 -476
  96. pvlib/tests/iotools/__init__.py +0 -0
  97. pvlib/tests/iotools/test_acis.py +0 -213
  98. pvlib/tests/iotools/test_bsrn.py +0 -131
  99. pvlib/tests/iotools/test_crn.py +0 -95
  100. pvlib/tests/iotools/test_epw.py +0 -23
  101. pvlib/tests/iotools/test_midc.py +0 -89
  102. pvlib/tests/iotools/test_panond.py +0 -32
  103. pvlib/tests/iotools/test_psm3.py +0 -198
  104. pvlib/tests/iotools/test_pvgis.py +0 -644
  105. pvlib/tests/iotools/test_sodapro.py +0 -298
  106. pvlib/tests/iotools/test_solaranywhere.py +0 -287
  107. pvlib/tests/iotools/test_solargis.py +0 -68
  108. pvlib/tests/iotools/test_solcast.py +0 -324
  109. pvlib/tests/iotools/test_solrad.py +0 -152
  110. pvlib/tests/iotools/test_srml.py +0 -124
  111. pvlib/tests/iotools/test_surfrad.py +0 -75
  112. pvlib/tests/iotools/test_tmy.py +0 -133
  113. pvlib/tests/ivtools/__init__.py +0 -0
  114. pvlib/tests/ivtools/test_sde.py +0 -230
  115. pvlib/tests/ivtools/test_sdm.py +0 -407
  116. pvlib/tests/ivtools/test_utils.py +0 -173
  117. pvlib/tests/spectrum/__init__.py +0 -0
  118. pvlib/tests/spectrum/conftest.py +0 -40
  119. pvlib/tests/spectrum/test_irradiance.py +0 -138
  120. pvlib/tests/spectrum/test_mismatch.py +0 -304
  121. pvlib/tests/spectrum/test_response.py +0 -124
  122. pvlib/tests/spectrum/test_spectrl2.py +0 -72
  123. pvlib/tests/test_albedo.py +0 -84
  124. pvlib/tests/test_atmosphere.py +0 -204
  125. pvlib/tests/test_clearsky.py +0 -878
  126. pvlib/tests/test_conftest.py +0 -81
  127. pvlib/tests/test_iam.py +0 -555
  128. pvlib/tests/test_inverter.py +0 -213
  129. pvlib/tests/test_irradiance.py +0 -1441
  130. pvlib/tests/test_location.py +0 -356
  131. pvlib/tests/test_modelchain.py +0 -2020
  132. pvlib/tests/test_numerical_precision.py +0 -124
  133. pvlib/tests/test_pvarray.py +0 -71
  134. pvlib/tests/test_pvsystem.py +0 -2495
  135. pvlib/tests/test_scaling.py +0 -207
  136. pvlib/tests/test_shading.py +0 -391
  137. pvlib/tests/test_singlediode.py +0 -608
  138. pvlib/tests/test_snow.py +0 -212
  139. pvlib/tests/test_soiling.py +0 -230
  140. pvlib/tests/test_solarposition.py +0 -933
  141. pvlib/tests/test_spa.py +0 -425
  142. pvlib/tests/test_temperature.py +0 -470
  143. pvlib/tests/test_tools.py +0 -146
  144. pvlib/tests/test_tracking.py +0 -474
  145. pvlib/tests/test_transformer.py +0 -60
  146. pvlib-0.11.1.dist-info/RECORD +0 -192
  147. {pvlib-0.11.1.dist-info → pvlib-0.12.0.dist-info/licenses}/AUTHORS.md +0 -0
  148. {pvlib-0.11.1.dist-info → pvlib-0.12.0.dist-info/licenses}/LICENSE +0 -0
  149. {pvlib-0.11.1.dist-info → pvlib-0.12.0.dist-info}/top_level.txt +0 -0
pvlib/solarposition.py CHANGED
@@ -30,7 +30,7 @@ from pvlib.tools import datetime_to_djd, djd_to_datetime
30
30
  def get_solarposition(time, latitude, longitude,
31
31
  altitude=None, pressure=None,
32
32
  method='nrel_numpy',
33
- temperature=12, **kwargs):
33
+ temperature=12.0, **kwargs):
34
34
  """
35
35
  A convenience wrapper for the solar position calculators.
36
36
 
@@ -125,8 +125,8 @@ def get_solarposition(time, latitude, longitude,
125
125
  return ephem_df
126
126
 
127
127
 
128
- def spa_c(time, latitude, longitude, pressure=101325, altitude=0,
129
- temperature=12, delta_t=67.0,
128
+ def spa_c(time, latitude, longitude, pressure=101325., altitude=0.,
129
+ temperature=12., delta_t=67.0,
130
130
  raw_spa_output=False):
131
131
  r"""
132
132
  Calculate the solar position using the C implementation of the NREL
@@ -149,11 +149,11 @@ def spa_c(time, latitude, longitude, pressure=101325, altitude=0,
149
149
  longitude : float
150
150
  Longitude in decimal degrees. Positive east of prime meridian,
151
151
  negative to west.
152
- pressure : float, default 101325
152
+ pressure : float, default 101325.0
153
153
  Pressure in Pascals
154
- altitude : float, default 0
154
+ altitude : float, default 0.0
155
155
  Height above sea level. [m]
156
- temperature : float, default 12
156
+ temperature : float, default 12.0
157
157
  Temperature in C
158
158
  delta_t : float, default 67.0
159
159
  Difference between terrestrial time and UT1.
@@ -279,7 +279,7 @@ def _datetime_to_unixtime(dtindex):
279
279
 
280
280
 
281
281
  def spa_python(time, latitude, longitude,
282
- altitude=0, pressure=101325, temperature=12, delta_t=67.0,
282
+ altitude=0., pressure=101325., temperature=12., delta_t=67.0,
283
283
  atmos_refract=None, how='numpy', numthreads=4):
284
284
  """
285
285
  Calculate the solar position using a python implementation of the
@@ -302,11 +302,11 @@ def spa_python(time, latitude, longitude,
302
302
  longitude : float
303
303
  Longitude in decimal degrees. Positive east of prime meridian,
304
304
  negative to west.
305
- altitude : float, default 0
305
+ altitude : float, default 0.0
306
306
  Distance above sea level.
307
- pressure : int or float, optional, default 101325
307
+ pressure : int or float, optional, default 101325.0
308
308
  avg. yearly air pressure in Pascals.
309
- temperature : int or float, optional, default 12
309
+ temperature : int or float, optional, default 12.0
310
310
  avg. yearly air temperature in degrees C.
311
311
  delta_t : float or array, optional, default 67.0
312
312
  Difference between terrestrial time and UT1.
@@ -507,9 +507,9 @@ def _ephem_setup(latitude, longitude, altitude, pressure, temperature,
507
507
 
508
508
  def sun_rise_set_transit_ephem(times, latitude, longitude,
509
509
  next_or_previous='next',
510
- altitude=0,
511
- pressure=101325,
512
- temperature=12, horizon='0:00'):
510
+ altitude=0.,
511
+ pressure=101325.,
512
+ temperature=12., horizon='0:00'):
513
513
  """
514
514
  Calculate the next sunrise and sunset times using the PyEphem package.
515
515
 
@@ -523,11 +523,11 @@ def sun_rise_set_transit_ephem(times, latitude, longitude,
523
523
  Longitude in degrees, positive east of prime meridian, negative to west
524
524
  next_or_previous : str
525
525
  'next' or 'previous' sunrise and sunset relative to time
526
- altitude : float, default 0
526
+ altitude : float, default 0.0
527
527
  distance above sea level in meters.
528
- pressure : int or float, optional, default 101325
528
+ pressure : int or float, optional, default 101325.0
529
529
  air pressure in Pascals.
530
- temperature : int or float, optional, default 12
530
+ temperature : int or float, optional, default 12.0
531
531
  air temperature in degrees C.
532
532
  horizon : string, format +/-X:YY
533
533
  arc degrees:arc minutes from geometrical horizon for sunrise and
@@ -590,8 +590,8 @@ def sun_rise_set_transit_ephem(times, latitude, longitude,
590
590
  'transit': trans})
591
591
 
592
592
 
593
- def pyephem(time, latitude, longitude, altitude=0, pressure=101325,
594
- temperature=12, horizon='+0:00'):
593
+ def pyephem(time, latitude, longitude, altitude=0., pressure=101325.,
594
+ temperature=12., horizon='+0:00'):
595
595
  """
596
596
  Calculate the solar position using the PyEphem package.
597
597
 
@@ -605,11 +605,11 @@ def pyephem(time, latitude, longitude, altitude=0, pressure=101325,
605
605
  longitude : float
606
606
  Longitude in decimal degrees. Positive east of prime meridian,
607
607
  negative to west.
608
- altitude : float, default 0
608
+ altitude : float, default 0.0
609
609
  Height above sea level in meters. [m]
610
- pressure : int or float, optional, default 101325
610
+ pressure : int or float, optional, default 101325.0
611
611
  air pressure in Pascals.
612
- temperature : int or float, optional, default 12
612
+ temperature : int or float, optional, default 12.0
613
613
  air temperature in degrees C.
614
614
  horizon : string, optional, default '+0:00'
615
615
  arc degrees:arc minutes from geometrical horizon for sunrise and
@@ -679,7 +679,7 @@ def pyephem(time, latitude, longitude, altitude=0, pressure=101325,
679
679
  return sun_coords
680
680
 
681
681
 
682
- def ephemeris(time, latitude, longitude, pressure=101325, temperature=12):
682
+ def ephemeris(time, latitude, longitude, pressure=101325.0, temperature=12.0):
683
683
  """
684
684
  Python-native solar position calculator.
685
685
  The accuracy of this code is not guaranteed.
@@ -695,9 +695,9 @@ def ephemeris(time, latitude, longitude, pressure=101325, temperature=12):
695
695
  longitude : float
696
696
  Longitude in decimal degrees. Positive east of prime meridian,
697
697
  negative to west.
698
- pressure : float or Series, default 101325
698
+ pressure : float or Series, default 101325.0
699
699
  Ambient pressure (Pascals)
700
- temperature : float or Series, default 12
700
+ temperature : float or Series, default 12.0
701
701
  Ambient temperature (C)
702
702
 
703
703
  Returns
@@ -856,8 +856,8 @@ def ephemeris(time, latitude, longitude, pressure=101325, temperature=12):
856
856
 
857
857
 
858
858
  def calc_time(lower_bound, upper_bound, latitude, longitude, attribute, value,
859
- altitude=0, pressure=101325, temperature=12, horizon='+0:00',
860
- xtol=1.0e-12):
859
+ altitude=0.0, pressure=101325.0, temperature=12.0,
860
+ horizon='+0:00', xtol=1.0e-12):
861
861
  """
862
862
  Calculate the time between lower_bound and upper_bound
863
863
  where the attribute is equal to value. Uses PyEphem for
@@ -879,12 +879,12 @@ def calc_time(lower_bound, upper_bound, latitude, longitude, attribute, value,
879
879
  and 'az' (which must be given in radians).
880
880
  value : int or float
881
881
  The value of the attribute to solve for
882
- altitude : float, default 0
882
+ altitude : float, default 0.0
883
883
  Distance above sea level.
884
- pressure : int or float, optional, default 101325
884
+ pressure : int or float, optional, default 101325.0
885
885
  Air pressure in Pascals. Set to 0 for no
886
886
  atmospheric correction.
887
- temperature : int or float, optional, default 12
887
+ temperature : int or float, optional, default 12.0
888
888
  Air temperature in degrees C.
889
889
  horizon : string, optional, default '+0:00'
890
890
  arc degrees:arc minutes from geometrical horizon for sunrise and
@@ -1349,6 +1349,12 @@ def hour_angle(times, longitude, equation_of_time):
1349
1349
  times : :class:`pandas.DatetimeIndex`
1350
1350
  Corresponding timestamps, must be localized to the timezone for the
1351
1351
  ``longitude``.
1352
+
1353
+ A `pytz.exceptions.AmbiguousTimeError` will be raised if any of the
1354
+ given times are on a day when the local daylight savings transition
1355
+ happens at midnight. If you're working with such a timezone,
1356
+ consider converting to a non-DST timezone (e.g. GMT-4) before
1357
+ calling this function.
1352
1358
  longitude : numeric
1353
1359
  Longitude in degrees
1354
1360
  equation_of_time : numeric
@@ -1421,7 +1427,17 @@ def _times_to_hours_after_local_midnight(times):
1421
1427
  if not times.tz:
1422
1428
  raise ValueError('times must be localized')
1423
1429
 
1424
- hrs = (times - times.normalize()) / pd.Timedelta('1h')
1430
+ # Some timezones have a DST shift at midnight:
1431
+ # 11:59pm -> 1:00am - results in a nonexistent midnight
1432
+ # 12:59am -> 12:00am - results in an ambiguous midnight
1433
+ # We remove the timezone before normalizing for this reason.
1434
+ naive_normalized_times = times.tz_localize(None).normalize()
1435
+
1436
+ # Use Pandas functionality for shifting nonexistent times forward
1437
+ normalized_times = naive_normalized_times.tz_localize(
1438
+ times.tz, nonexistent='shift_forward', ambiguous='raise')
1439
+
1440
+ hrs = (times - normalized_times) / pd.Timedelta('1h')
1425
1441
 
1426
1442
  # ensure array return instead of a version-dependent pandas <T>Index
1427
1443
  return np.array(hrs)
pvlib/spa.py CHANGED
@@ -413,8 +413,10 @@ def julian_day_dt(year, month, day, hour, minute, second, microsecond):
413
413
  frac_of_day = (microsecond / 1e6 + (second + minute * 60 + hour * 3600)
414
414
  ) * 1.0 / (3600*24)
415
415
  d = day + frac_of_day
416
- jd = (int(365.25 * (year + 4716)) + int(30.6001 * (month + 1)) + d +
417
- b - 1524.5)
416
+ jd = int(365.25 * (year + 4716)) + int(30.6001 * (month + 1)) + d - 1524.5
417
+ if jd > 2299160.0:
418
+ jd += b
419
+
418
420
  return jd
419
421
 
420
422
 
@@ -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
@@ -189,7 +126,8 @@ def average_photon_energy(spectra):
189
126
  ----------
190
127
  spectra : pandas.Series or pandas.DataFrame
191
128
 
192
- Spectral irradiance, must be positive. [Wm⁻²nm⁻¹]
129
+ Spectral irradiance, must be positive [Wm⁻²nm⁻¹].
130
+ See :term:`spectra`.
193
131
 
194
132
  A single spectrum must be a :py:class:`pandas.Series` with wavelength
195
133
  [nm] as the index, while multiple spectra must be rows in a
@@ -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
 
@@ -228,10 +228,11 @@ def spectrl2(apparent_zenith, aoi, surface_tilt, ground_albedo,
228
228
  Returns
229
229
  -------
230
230
  spectra_components : dict
231
- A dict of arrays. With the exception of `wavelength`, which has length
231
+ A dict of arrays. With the exception of `wavelength`, which has length
232
232
  122, each array has shape (122, N) where N is the length of the
233
233
  input ``apparent_zenith``. All values are spectral irradiance
234
234
  with units Wm⁻²nm⁻¹, except for `wavelength`, which is in nanometers.
235
+ See :term:`spectra_components`.
235
236
 
236
237
  * wavelength
237
238
  * dni_extra
pvlib/temperature.py CHANGED
@@ -118,13 +118,25 @@ def sapm_cell(poa_global, temp_air, wind_speed, a, b, deltaT,
118
118
  +===============+================+=======+=========+=====================+
119
119
  | glass/glass | open rack | -3.47 | -0.0594 | 3 |
120
120
  +---------------+----------------+-------+---------+---------------------+
121
- | glass/glass | close roof | -2.98 | -0.0471 | 1 |
121
+ | glass/glass | close mount | -2.98 | -0.0471 | 1 |
122
122
  +---------------+----------------+-------+---------+---------------------+
123
123
  | glass/polymer | open rack | -3.56 | -0.075 | 3 |
124
124
  +---------------+----------------+-------+---------+---------------------+
125
125
  | glass/polymer | insulated back | -2.81 | -0.0455 | 0 |
126
126
  +---------------+----------------+-------+---------+---------------------+
127
127
 
128
+ Mounting cases can be described in terms of air flow across and around the
129
+ rear-facing surface of the module:
130
+
131
+ * "open rack" refers to mounting that allows relatively free air flow.
132
+ This case is typical of ground-mounted systems on fixed racking or
133
+ single axis trackers.
134
+ * "close mount" refers to limited or restricted air flow. This case is
135
+ typical of roof-mounted systems with some gap behind the module.
136
+ * "insulated back" refers to systems with no air flow contacting the rear
137
+ surface of the module. This case is typical of building-integrated PV
138
+ systems, or systems laid flat on a ground surface.
139
+
128
140
  References
129
141
  ----------
130
142
  .. [1] King, D. et al, 2004, "Sandia Photovoltaic Array Performance
@@ -199,13 +211,25 @@ def sapm_module(poa_global, temp_air, wind_speed, a, b):
199
211
  +===============+================+=======+=========+=====================+
200
212
  | glass/glass | open rack | -3.47 | -0.0594 | 3 |
201
213
  +---------------+----------------+-------+---------+---------------------+
202
- | glass/glass | close roof | -2.98 | -0.0471 | 1 |
214
+ | glass/glass | close mount | -2.98 | -0.0471 | 1 |
203
215
  +---------------+----------------+-------+---------+---------------------+
204
216
  | glass/polymer | open rack | -3.56 | -0.075 | 3 |
205
217
  +---------------+----------------+-------+---------+---------------------+
206
218
  | glass/polymer | insulated back | -2.81 | -0.0455 | 0 |
207
219
  +---------------+----------------+-------+---------+---------------------+
208
220
 
221
+ Mounting cases can be described in terms of air flow across and around the
222
+ rear-facing surface of the module:
223
+
224
+ * "open rack" refers to mounting that allows relatively free air flow.
225
+ This case is typical of ground-mounted systems on fixed racking or
226
+ single axis trackers.
227
+ * "close mount" refers to limited or restricted air flow. This case is
228
+ typical of roof-mounted systems with some gap behind the module.
229
+ * "insulated back" refers to systems with no air flow contacting the rear
230
+ surface of the module. This case is typical of building-integrated PV
231
+ systems, or systems laid flat on a ground surface.
232
+
209
233
  References
210
234
  ----------
211
235
  .. [1] King, D. et al, 2004, "Sandia Photovoltaic Array Performance
@@ -269,13 +293,25 @@ def sapm_cell_from_module(module_temperature, poa_global, deltaT,
269
293
  +===============+================+=======+=========+=====================+
270
294
  | glass/glass | open rack | -3.47 | -0.0594 | 3 |
271
295
  +---------------+----------------+-------+---------+---------------------+
272
- | glass/glass | close roof | -2.98 | -0.0471 | 1 |
296
+ | glass/glass | close mount | -2.98 | -0.0471 | 1 |
273
297
  +---------------+----------------+-------+---------+---------------------+
274
298
  | glass/polymer | open rack | -3.56 | -0.075 | 3 |
275
299
  +---------------+----------------+-------+---------+---------------------+
276
300
  | glass/polymer | insulated back | -2.81 | -0.0455 | 0 |
277
301
  +---------------+----------------+-------+---------+---------------------+
278
302
 
303
+ Mounting cases can be described in terms of air flow across and around the
304
+ rear-facing surface of the module:
305
+
306
+ * "open rack" refers to mounting that allows relatively free air flow.
307
+ This case is typical of ground-mounted systems on fixed racking or
308
+ single axis trackers.
309
+ * "close mount" refers to limited or restricted air flow. This case is
310
+ typical of roof-mounted systems with some gap behind the module.
311
+ * "insulated back" refers to systems with no air flow contacting the rear
312
+ surface of the module. This case is typical of building-integrated PV
313
+ systems, or systems laid flat on a ground surface.
314
+
279
315
  References
280
316
  ----------
281
317
  .. [1] King, D. et al, 2004, "Sandia Photovoltaic Array Performance
@@ -360,6 +396,16 @@ def pvsyst_cell(poa_global, temp_air, wind_speed=1.0, u_c=29.0, u_v=0.0,
360
396
  | insulated | 15.0 | 0.0 |
361
397
  +--------------+---------------+---------------+
362
398
 
399
+ Mounting cases can be described in terms of air flow across and around the
400
+ rear-facing surface of the module:
401
+
402
+ * "freestanding" refers to mounting that allows relatively free air
403
+ circulation around the modules. This case is typical of ground-mounted
404
+ systems on tilted, fixed racking or single axis trackers.
405
+ * "insulated" refers to mounting with air flow across only the front
406
+ surface. This case is typical of roof-mounted systems with no gap
407
+ behind the module.
408
+
363
409
  References
364
410
  ----------
365
411
  .. [1] "PVsyst 7 Help", [Online]. Available:
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,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pvlib
3
- Version: 0.11.1
3
+ Version: 0.12.0
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>
@@ -25,8 +25,13 @@ Requires-Dist: pytz
25
25
  Requires-Dist: requests
26
26
  Requires-Dist: scipy>=1.6.0
27
27
  Requires-Dist: h5py
28
- Provides-Extra: all
29
- Requires-Dist: pvlib[doc,optional,test]; extra == "all"
28
+ Provides-Extra: optional
29
+ Requires-Dist: cython; extra == "optional"
30
+ Requires-Dist: ephem; extra == "optional"
31
+ Requires-Dist: nrel-pysam; extra == "optional"
32
+ Requires-Dist: numba>=0.17.0; extra == "optional"
33
+ Requires-Dist: solarfactors; extra == "optional"
34
+ Requires-Dist: statsmodels; extra == "optional"
30
35
  Provides-Extra: doc
31
36
  Requires-Dist: ipython; extra == "doc"
32
37
  Requires-Dist: pickleshare; extra == "doc"
@@ -39,13 +44,7 @@ Requires-Dist: pillow; extra == "doc"
39
44
  Requires-Dist: sphinx-toggleprompt==0.5.2; extra == "doc"
40
45
  Requires-Dist: sphinx-favicon; extra == "doc"
41
46
  Requires-Dist: solarfactors; extra == "doc"
42
- Provides-Extra: optional
43
- Requires-Dist: cython; extra == "optional"
44
- Requires-Dist: ephem; extra == "optional"
45
- Requires-Dist: nrel-pysam; extra == "optional"
46
- Requires-Dist: numba>=0.17.0; extra == "optional"
47
- Requires-Dist: solarfactors; extra == "optional"
48
- Requires-Dist: statsmodels; extra == "optional"
47
+ Requires-Dist: sphinx-hoverxref~=1.4.2; extra == "doc"
49
48
  Provides-Extra: test
50
49
  Requires-Dist: pytest; extra == "test"
51
50
  Requires-Dist: pytest-cov; extra == "test"
@@ -55,6 +54,10 @@ Requires-Dist: pytest-timeout; extra == "test"
55
54
  Requires-Dist: pytest-rerunfailures; extra == "test"
56
55
  Requires-Dist: pytest-remotedata; extra == "test"
57
56
  Requires-Dist: packaging; extra == "test"
57
+ Provides-Extra: all
58
+ Requires-Dist: pvlib[doc,optional,test]; extra == "all"
59
+ Dynamic: home-page
60
+ Dynamic: license-file
58
61
 
59
62
  pvlib python is a community developed toolbox that provides a set of
60
63
  functions and classes for simulating the performance of photovoltaic
@@ -0,0 +1,75 @@
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=oNtCGLNHiHysrjbe7C1eGpF_4-yJmN1rhxuVjvlVOj8,26257
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=He5JZfdvCwcyh1nF8wnJ98zB-TEL_D2gMGOQczP4NOA,147464
9
+ pvlib/location.py,sha256=G31Iabv1KcYzMFr5sd0JhcJr9IpZx2rLv25h1K2XaAE,17509
10
+ pvlib/modelchain.py,sha256=f0mI6cq0FkUOC5Wa_8T8kULhyipYIQp0sof_LL7h6a8,72788
11
+ pvlib/pvarray.py,sha256=r60sGTxFNlPiFQndusCJmlEIPX0dv9_7ozKw8zxh7IM,12677
12
+ pvlib/pvsystem.py,sha256=EkqgqTFEyMMUXUcDWpA_alxVp1Uw5ppCmYq0qYDTZeI,110108
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=tVa9xjsWVMO5hC_-EEMzgXoz6XxKKCU5r6AnoBSpOW0,2219
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/pvgis.py,sha256=R2gms1LTR7KMAY5U-P1jE0bHm3eoBqpKnnZvPU_5n_g,31477
50
+ pvlib/iotools/sodapro.py,sha256=Hw4kOUorJ3olSjB5FBlZjdNxIrkjWtDIHZd1IugVsBs,15629
51
+ pvlib/iotools/solaranywhere.py,sha256=_kDetQ0R8rQgcfTZjeQArq9nmCtVa4upF_KGrcipovQ,12535
52
+ pvlib/iotools/solargis.py,sha256=6FeIsqs_bs2oNrUGvkv7Dc4AlIsDiwpCs5oFVcBheO8,8274
53
+ pvlib/iotools/solcast.py,sha256=d-2LAC-Tlazmih_QZKYbOKCyZaP7U08pIwoKTfciTCk,15332
54
+ pvlib/iotools/solrad.py,sha256=M8Xwasro6_hFiZP7hcsYSeEze3q5kNmnV0kAdNHqgBI,7177
55
+ pvlib/iotools/srml.py,sha256=J-irJ-A5i182jZx47Lh4dET-lX5Y2O6DM0-T6IFMD04,8779
56
+ pvlib/iotools/surfrad.py,sha256=WFh2__FGlOwHg6RTxIkcMmdMucX0vbQfHEz9q_HLGjY,7349
57
+ pvlib/iotools/tmy.py,sha256=zfkxn88qSKBR0GOHWxgrQ6r-BOC-ueoDfppjOS18VBI,26603
58
+ pvlib/ivtools/__init__.py,sha256=bnUDPqkzCP96CaFFK3Gw4HNczJoHtO-cI9GBGAtZVGI,159
59
+ pvlib/ivtools/sde.py,sha256=HL2oE70Ls7xccikyaUSi6SQKx3cWES5XoaMAGuMjPIw,17008
60
+ pvlib/ivtools/sdm.py,sha256=Q5d-codgQNo_aPkmEHkEI9L5RDEshdiGQQrwjS80tWU,52105
61
+ pvlib/ivtools/utils.py,sha256=xL88J-RuYLXFZyy1za8tvoWei0hcwWb_2ktXara2m_M,19423
62
+ pvlib/spa_c_files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ pvlib/spa_c_files/setup.py,sha256=RcMEf0R2wKHJjvpUH5y6h22m86y6UrdXwkPkHKNme48,1102
64
+ pvlib/spa_c_files/spa_py_example.py,sha256=p3ms0mhLycAuZJyaE3Wageqnd_56zh2EKxXK-jlTJfg,1179
65
+ pvlib/spectrum/__init__.py,sha256=8lK8ZJRh5nl4A6eK0OlbiHdViorCHiJkANrK7QkjQIw,516
66
+ pvlib/spectrum/irradiance.py,sha256=GhTUpmtNc4gPeicVJV03psaqRmHTcogAda7KuvE7cLs,7756
67
+ pvlib/spectrum/mismatch.py,sha256=Vhp1WeyP4vle6hXLsAhDZYwPwyEdPjBhfDL2B1yi0BU,30497
68
+ pvlib/spectrum/response.py,sha256=k3FCoPPR_2yGrfXPGsZljJcgrQ7sckQn0CwiqERNntY,9413
69
+ pvlib/spectrum/spectrl2.py,sha256=sPOZe5lXgkwMem3JbEi19uW7OQq4FzxcZyCnxzXFjWs,19022
70
+ pvlib-0.12.0.dist-info/licenses/AUTHORS.md,sha256=Fxk4p_lXlMeQ6g2A1-7oPrgpULDxuJuC9Ebc-3yyj_o,1474
71
+ pvlib-0.12.0.dist-info/licenses/LICENSE,sha256=oC4S3araPPDV292K_91XfC7sZAdYqVhCowT3UTuMC-Q,1622
72
+ pvlib-0.12.0.dist-info/METADATA,sha256=6OgwePCBl-de6_yVd1kyAjE7myv5Uzly_sWT22xYnt8,2937
73
+ pvlib-0.12.0.dist-info/WHEEL,sha256=tTnHoFhvKQHCh4jz3yCn0WPTYIy7wXx3CJtJ7SJGV7c,91
74
+ pvlib-0.12.0.dist-info/top_level.txt,sha256=eq9CH6YXUc3Fh3dyQ5hQXoGYfSm1SYEAlMygyR22MgE,6
75
+ pvlib-0.12.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (77.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5