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
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
@@ -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,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: pvlib
3
- Version: 0.11.2
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>
@@ -44,7 +44,7 @@ Requires-Dist: pillow; extra == "doc"
44
44
  Requires-Dist: sphinx-toggleprompt==0.5.2; extra == "doc"
45
45
  Requires-Dist: sphinx-favicon; extra == "doc"
46
46
  Requires-Dist: solarfactors; extra == "doc"
47
- Requires-Dist: sphinx-hoverxref; extra == "doc"
47
+ Requires-Dist: sphinx-hoverxref~=1.4.2; extra == "doc"
48
48
  Provides-Extra: test
49
49
  Requires-Dist: pytest; extra == "test"
50
50
  Requires-Dist: pytest-cov; extra == "test"
@@ -56,6 +56,8 @@ Requires-Dist: pytest-remotedata; extra == "test"
56
56
  Requires-Dist: packaging; extra == "test"
57
57
  Provides-Extra: all
58
58
  Requires-Dist: pvlib[doc,optional,test]; extra == "all"
59
+ Dynamic: home-page
60
+ Dynamic: license-file
59
61
 
60
62
  pvlib python is a community developed toolbox that provides a set of
61
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.6.0)
2
+ Generator: setuptools (77.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5