pvlib 0.9.5__py3-none-any.whl → 0.10.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 (71) hide show
  1. pvlib/__init__.py +3 -2
  2. pvlib/atmosphere.py +6 -171
  3. pvlib/bifacial/infinite_sheds.py +30 -267
  4. pvlib/bifacial/utils.py +225 -5
  5. pvlib/data/test_psm3_2017.csv +17521 -17521
  6. pvlib/data/test_read_psm3.csv +17522 -17522
  7. pvlib/data/test_read_pvgis_horizon.csv +49 -0
  8. pvlib/data/variables_style_rules.csv +3 -0
  9. pvlib/iam.py +17 -4
  10. pvlib/inverter.py +6 -1
  11. pvlib/iotools/__init__.py +7 -2
  12. pvlib/iotools/acis.py +516 -0
  13. pvlib/iotools/midc.py +4 -4
  14. pvlib/iotools/psm3.py +32 -31
  15. pvlib/iotools/pvgis.py +84 -28
  16. pvlib/iotools/sodapro.py +8 -6
  17. pvlib/iotools/srml.py +121 -18
  18. pvlib/iotools/surfrad.py +2 -2
  19. pvlib/iotools/tmy.py +146 -102
  20. pvlib/irradiance.py +151 -0
  21. pvlib/ivtools/sde.py +11 -7
  22. pvlib/ivtools/sdm.py +16 -10
  23. pvlib/ivtools/utils.py +6 -6
  24. pvlib/location.py +3 -2
  25. pvlib/modelchain.py +67 -70
  26. pvlib/pvsystem.py +160 -532
  27. pvlib/shading.py +41 -0
  28. pvlib/singlediode.py +215 -65
  29. pvlib/soiling.py +3 -3
  30. pvlib/spa.py +327 -368
  31. pvlib/spectrum/__init__.py +8 -2
  32. pvlib/spectrum/mismatch.py +335 -0
  33. pvlib/temperature.py +1 -8
  34. pvlib/tests/bifacial/test_infinite_sheds.py +0 -111
  35. pvlib/tests/bifacial/test_utils.py +101 -4
  36. pvlib/tests/conftest.py +0 -31
  37. pvlib/tests/iotools/test_acis.py +213 -0
  38. pvlib/tests/iotools/test_midc.py +6 -6
  39. pvlib/tests/iotools/test_psm3.py +3 -3
  40. pvlib/tests/iotools/test_pvgis.py +21 -14
  41. pvlib/tests/iotools/test_sodapro.py +1 -1
  42. pvlib/tests/iotools/test_srml.py +71 -6
  43. pvlib/tests/iotools/test_tmy.py +43 -8
  44. pvlib/tests/ivtools/test_sde.py +19 -17
  45. pvlib/tests/ivtools/test_sdm.py +9 -4
  46. pvlib/tests/test_atmosphere.py +6 -62
  47. pvlib/tests/test_iam.py +12 -0
  48. pvlib/tests/test_irradiance.py +40 -2
  49. pvlib/tests/test_location.py +1 -1
  50. pvlib/tests/test_modelchain.py +33 -76
  51. pvlib/tests/test_pvsystem.py +366 -201
  52. pvlib/tests/test_shading.py +28 -0
  53. pvlib/tests/test_singlediode.py +166 -30
  54. pvlib/tests/test_soiling.py +8 -7
  55. pvlib/tests/test_spa.py +6 -7
  56. pvlib/tests/test_spectrum.py +145 -1
  57. pvlib/tests/test_temperature.py +0 -7
  58. pvlib/tests/test_tools.py +25 -0
  59. pvlib/tests/test_tracking.py +0 -149
  60. pvlib/tools.py +26 -1
  61. pvlib/tracking.py +1 -269
  62. {pvlib-0.9.5.dist-info → pvlib-0.10.0.dist-info}/METADATA +1 -9
  63. {pvlib-0.9.5.dist-info → pvlib-0.10.0.dist-info}/RECORD +67 -68
  64. pvlib/forecast.py +0 -1211
  65. pvlib/iotools/ecmwf_macc.py +0 -312
  66. pvlib/tests/iotools/test_ecmwf_macc.py +0 -162
  67. pvlib/tests/test_forecast.py +0 -228
  68. {pvlib-0.9.5.dist-info → pvlib-0.10.0.dist-info}/AUTHORS.md +0 -0
  69. {pvlib-0.9.5.dist-info → pvlib-0.10.0.dist-info}/LICENSE +0 -0
  70. {pvlib-0.9.5.dist-info → pvlib-0.10.0.dist-info}/WHEEL +0 -0
  71. {pvlib-0.9.5.dist-info → pvlib-0.10.0.dist-info}/top_level.txt +0 -0
@@ -290,155 +290,6 @@ def test_low_sun_angles():
290
290
  assert_allclose(expected[k], v)
291
291
 
292
292
 
293
- def test_SingleAxisTracker_tracking():
294
- with pytest.warns(pvlibDeprecationWarning):
295
- system = tracking.SingleAxisTracker(max_angle=90, axis_tilt=30,
296
- axis_azimuth=180, gcr=2.0/7.0,
297
- backtrack=True)
298
-
299
- apparent_zenith = pd.Series([30])
300
- apparent_azimuth = pd.Series([135])
301
-
302
- tracker_data = system.singleaxis(apparent_zenith, apparent_azimuth)
303
-
304
- expect = pd.DataFrame({'aoi': 7.286245, 'surface_azimuth': 142.65730,
305
- 'surface_tilt': 35.98741,
306
- 'tracker_theta': -20.88121},
307
- index=[0], dtype=np.float64)
308
- expect = expect[SINGLEAXIS_COL_ORDER]
309
-
310
- assert_frame_equal(expect, tracker_data)
311
-
312
- # results calculated using PVsyst
313
- pvsyst_solar_azimuth = 7.1609
314
- pvsyst_solar_height = 27.315
315
- pvsyst_axis_tilt = 20.
316
- pvsyst_axis_azimuth = 20.
317
- with pytest.warns(pvlibDeprecationWarning):
318
- pvsyst_system = tracking.SingleAxisTracker(
319
- max_angle=60., axis_tilt=pvsyst_axis_tilt,
320
- axis_azimuth=180+pvsyst_axis_azimuth, backtrack=False)
321
- # the definition of azimuth is different from PYsyst
322
- apparent_azimuth = pd.Series([180+pvsyst_solar_azimuth])
323
- apparent_zenith = pd.Series([90-pvsyst_solar_height])
324
- tracker_data = pvsyst_system.singleaxis(apparent_zenith, apparent_azimuth)
325
- expect = pd.DataFrame({'aoi': 41.07852, 'surface_azimuth': 180-18.432,
326
- 'surface_tilt': 24.92122,
327
- 'tracker_theta': -15.18391},
328
- index=[0], dtype=np.float64)
329
- expect = expect[SINGLEAXIS_COL_ORDER]
330
-
331
- assert_frame_equal(expect, tracker_data)
332
-
333
-
334
- # see test_irradiance for more thorough testing
335
- def test_get_aoi():
336
- with pytest.warns(pvlibDeprecationWarning):
337
- system = tracking.SingleAxisTracker(max_angle=90, axis_tilt=30,
338
- axis_azimuth=180, gcr=2.0/7.0,
339
- backtrack=True)
340
- surface_tilt = np.array([30, 0])
341
- surface_azimuth = np.array([90, 270])
342
- solar_zenith = np.array([70, 10])
343
- solar_azimuth = np.array([100, 180])
344
- out = system.get_aoi(surface_tilt, surface_azimuth,
345
- solar_zenith, solar_azimuth)
346
- expected = np.array([40.632115, 10.])
347
- assert_allclose(out, expected, atol=0.000001)
348
-
349
-
350
- def test_get_irradiance():
351
- with pytest.warns(pvlibDeprecationWarning):
352
- system = tracking.SingleAxisTracker(max_angle=90, axis_tilt=30,
353
- axis_azimuth=180, gcr=2.0/7.0,
354
- backtrack=True)
355
- times = pd.date_range(start='20160101 1200-0700',
356
- end='20160101 1800-0700', freq='6H')
357
- # latitude=32, longitude=-111
358
- solar_position = pd.DataFrame(np.array(
359
- [[55.36421554, 55.38851771, 34.63578446, 34.61148229,
360
- 172.32003763, -3.44516534],
361
- [96.50000401, 96.50000401, -6.50000401, -6.50000401,
362
- 246.91581654, -3.56292888]]),
363
- columns=['apparent_zenith', 'zenith', 'apparent_elevation',
364
- 'elevation', 'azimuth', 'equation_of_time'],
365
- index=times)
366
- irrads = pd.DataFrame({'dni': [900, 0], 'ghi': [600, 0], 'dhi': [100, 0]},
367
- index=times)
368
- solar_zenith = solar_position['apparent_zenith']
369
- solar_azimuth = solar_position['azimuth']
370
-
371
- # invalid warnings already generated in horizon test above,
372
- # no need to clutter test output here
373
- with np.errstate(invalid='ignore'):
374
- tracker_data = system.singleaxis(solar_zenith, solar_azimuth)
375
-
376
- # some invalid values in irradiance.py. not our problem here
377
- with np.errstate(invalid='ignore'):
378
- irradiance = system.get_irradiance(tracker_data['surface_tilt'],
379
- tracker_data['surface_azimuth'],
380
- solar_zenith,
381
- solar_azimuth,
382
- irrads['dni'],
383
- irrads['ghi'],
384
- irrads['dhi'])
385
-
386
- expected = pd.DataFrame(data=np.array(
387
- [[961.80070, 815.94490, 145.85580, 135.32820, 10.52757492],
388
- [nan, nan, nan, nan, nan]]),
389
- columns=['poa_global', 'poa_direct',
390
- 'poa_diffuse', 'poa_sky_diffuse',
391
- 'poa_ground_diffuse'],
392
- index=times)
393
-
394
- assert_frame_equal(irradiance, expected, check_less_precise=2)
395
-
396
- # test with albedo as a Series
397
- irrads['albedo'] = [0.5, 0.5]
398
- with np.errstate(invalid='ignore'):
399
- irradiance = system.get_irradiance(tracker_data['surface_tilt'],
400
- tracker_data['surface_azimuth'],
401
- solar_zenith,
402
- solar_azimuth,
403
- irrads['dni'],
404
- irrads['ghi'],
405
- irrads['dhi'],
406
- albedo=irrads['albedo'])
407
-
408
- expected = pd.Series(data=[21.05514984, nan], index=times,
409
- name='poa_ground_diffuse')
410
-
411
- assert_series_equal(irradiance['poa_ground_diffuse'], expected,
412
- check_less_precise=2)
413
-
414
-
415
-
416
- def test_SingleAxisTracker___repr__():
417
- with pytest.warns(pvlibDeprecationWarning):
418
- system = tracking.SingleAxisTracker(
419
- max_angle=45, gcr=.25, module='blah', inverter='blarg',
420
- temperature_model_parameters={'a': -3.56})
421
- expected = """SingleAxisTracker:
422
- axis_tilt: 0
423
- axis_azimuth: 0
424
- max_angle: 45
425
- backtrack: True
426
- gcr: 0.25
427
- cross_axis_tilt: 0.0
428
- name: None
429
- Array:
430
- name: None
431
- mount: SingleAxisTrackerMount(axis_tilt=0, axis_azimuth=0, max_angle=45, backtrack=True, gcr=0.25, cross_axis_tilt=0.0, racking_model=None, module_height=None)
432
- module: blah
433
- albedo: 0.25
434
- module_type: None
435
- temperature_model_parameters: {'a': -3.56}
436
- strings: 1
437
- modules_per_string: 1
438
- inverter: blarg""" # noqa: E501
439
- assert system.__repr__() == expected
440
-
441
-
442
293
  def test_calc_axis_tilt():
443
294
  # expected values
444
295
  expected_axis_tilt = 2.239 # [degrees]
pvlib/tools.py CHANGED
@@ -346,7 +346,7 @@ def _golden_sect_DataFrame(params, lower, upper, func, atol=1e-8):
346
346
 
347
347
  phim1 = (np.sqrt(5) - 1) / 2
348
348
 
349
- df = params
349
+ df = params.copy() # shallow copy to avoid modifying caller's dict
350
350
  df['VH'] = upper
351
351
  df['VL'] = lower
352
352
 
@@ -377,6 +377,9 @@ def _golden_sect_DataFrame(params, lower, upper, func, atol=1e-8):
377
377
  df['max'] = 0.5 * (df['V1'] + df['V2'])
378
378
  func_result = func(df, 'max')
379
379
  x = np.where(np.isnan(func_result), np.nan, df['max'])
380
+ if np.isscalar(df['max']):
381
+ # np.where always returns an ndarray, converting scalars to 0d-arrays
382
+ x = x.item()
380
383
 
381
384
  return func_result, x
382
385
 
@@ -469,3 +472,25 @@ def _first_order_centered_difference(f, x0, dx=DX, args=()):
469
472
  # removal in scipy 1.12.0
470
473
  df = f(x0+dx, *args) - f(x0-dx, *args)
471
474
  return df / 2 / dx
475
+
476
+
477
+ def get_pandas_index(*args):
478
+ """
479
+ Get the index of the first pandas DataFrame or Series in a list of
480
+ arguments.
481
+
482
+ Parameters
483
+ ----------
484
+ args: positional arguments
485
+ The numeric values to scan for a pandas index.
486
+
487
+ Returns
488
+ -------
489
+ A pandas index or None
490
+ None is returned if there are no pandas DataFrames or Series in the
491
+ args list.
492
+ """
493
+ return next(
494
+ (a.index for a in args if isinstance(a, (pd.DataFrame, pd.Series))),
495
+ None
496
+ )
pvlib/tracking.py CHANGED
@@ -2,275 +2,7 @@ import numpy as np
2
2
  import pandas as pd
3
3
 
4
4
  from pvlib.tools import cosd, sind, tand, acosd, asind
5
- from pvlib.pvsystem import (
6
- PVSystem, Array, SingleAxisTrackerMount, _unwrap_single_value
7
- )
8
- from pvlib import irradiance, atmosphere
9
- from pvlib._deprecation import deprecated
10
-
11
-
12
- @deprecated('0.9.0', alternative='PVSystem with SingleAxisTrackerMount')
13
- class SingleAxisTracker(PVSystem):
14
- """
15
- A class for single-axis trackers that inherits the PV modeling methods from
16
- :py:class:`~pvlib.pvsystem.PVSystem`. For details on calculating tracker
17
- rotation see :py:func:`pvlib.tracking.singleaxis`.
18
-
19
- Parameters
20
- ----------
21
- axis_tilt : float, default 0
22
- The tilt of the axis of rotation (i.e, the y-axis defined by
23
- ``axis_azimuth``) with respect to horizontal.
24
- ``axis_tilt`` must be >= 0 and <= 90. [degree]
25
-
26
- axis_azimuth : float, default 0
27
- A value denoting the compass direction along which the axis of
28
- rotation lies. Measured in decimal degrees east of north.
29
-
30
- max_angle : float, default 90
31
- A value denoting the maximum rotation angle, in decimal degrees,
32
- of the one-axis tracker from its horizontal position (horizontal
33
- if axis_tilt = 0). A max_angle of 90 degrees allows the tracker
34
- to rotate to a vertical position to point the panel towards a
35
- horizon. max_angle of 180 degrees allows for full rotation.
36
-
37
- backtrack : bool, default True
38
- Controls whether the tracker has the capability to "backtrack"
39
- to avoid row-to-row shading. False denotes no backtrack
40
- capability. True denotes backtrack capability.
41
-
42
- gcr : float, default 2.0/7.0
43
- A value denoting the ground coverage ratio of a tracker system
44
- which utilizes backtracking; i.e. the ratio between the PV array
45
- surface area to total ground area. A tracker system with modules
46
- 2 meters wide, centered on the tracking axis, with 6 meters
47
- between the tracking axes has a gcr of 2/6=0.333. If gcr is not
48
- provided, a gcr of 2/7 is default. gcr must be <=1.
49
-
50
- cross_axis_tilt : float, default 0.0
51
- The angle, relative to horizontal, of the line formed by the
52
- intersection between the slope containing the tracker axes and a plane
53
- perpendicular to the tracker axes. Cross-axis tilt should be specified
54
- using a right-handed convention. For example, trackers with axis
55
- azimuth of 180 degrees (heading south) will have a negative cross-axis
56
- tilt if the tracker axes plane slopes down to the east and positive
57
- cross-axis tilt if the tracker axes plane slopes down to the west. Use
58
- :func:`~pvlib.tracking.calc_cross_axis_tilt` to calculate
59
- `cross_axis_tilt`. [degrees]
60
-
61
- **kwargs
62
- Passed to :py:class:`~pvlib.pvsystem.PVSystem`. If the `arrays`
63
- parameter is specified it must have only a single Array. Furthermore
64
- if a :py:class:`~pvlib.pvsystem.Array` is provided it must have
65
- ``surface_tilt`` and ``surface_azimuth`` equal to None.
66
-
67
- Raises
68
- ------
69
- ValueError
70
- If more than one Array is specified.
71
- ValueError
72
- If an Array is provided with a surface tilt or azimuth not None.
73
-
74
- See also
75
- --------
76
- pvlib.tracking.singleaxis
77
- pvlib.tracking.calc_axis_tilt
78
- pvlib.tracking.calc_cross_axis_tilt
79
- """
80
-
81
- def __init__(self, axis_tilt=0, axis_azimuth=0, max_angle=90,
82
- backtrack=True, gcr=2.0/7.0, cross_axis_tilt=0.0, **kwargs):
83
-
84
- mount_kwargs = {
85
- k: kwargs.pop(k) for k in ['racking_model', 'module_height']
86
- if k in kwargs
87
- }
88
- mount = SingleAxisTrackerMount(axis_tilt, axis_azimuth, max_angle,
89
- backtrack, gcr, cross_axis_tilt,
90
- **mount_kwargs)
91
-
92
- array_defaults = {
93
- 'albedo': None, 'surface_type': None, 'module': None,
94
- 'module_type': None, 'module_parameters': None,
95
- 'temperature_model_parameters': None,
96
- 'modules_per_string': 1,
97
- }
98
- array_kwargs = {
99
- key: kwargs.get(key, array_defaults[key]) for key in array_defaults
100
- }
101
- # strings/strings_per_inverter is a special case
102
- array_kwargs['strings'] = kwargs.get('strings_per_inverter', 1)
103
-
104
- array = Array(mount=mount, **array_kwargs)
105
- pass_through_kwargs = { # other args to pass to PVSystem()
106
- k: v for k, v in kwargs.items() if k not in array_defaults
107
- }
108
- # leave these in case someone is using them
109
- self.axis_tilt = axis_tilt
110
- self.axis_azimuth = axis_azimuth
111
- self.max_angle = max_angle
112
- self.backtrack = backtrack
113
- self.gcr = gcr
114
- self.cross_axis_tilt = cross_axis_tilt
115
-
116
- pass_through_kwargs['surface_tilt'] = None
117
- pass_through_kwargs['surface_azimuth'] = None
118
-
119
- super().__init__(arrays=[array], **pass_through_kwargs)
120
-
121
- def __repr__(self):
122
- attrs = ['axis_tilt', 'axis_azimuth', 'max_angle', 'backtrack', 'gcr',
123
- 'cross_axis_tilt']
124
- sat_repr = ('SingleAxisTracker:\n ' + '\n '.join(
125
- f'{attr}: {getattr(self, attr)}' for attr in attrs))
126
- # get the parent PVSystem info
127
- pvsystem_repr = super().__repr__()
128
- # remove the first line (contains 'PVSystem: \n')
129
- pvsystem_repr = '\n'.join(pvsystem_repr.split('\n')[1:])
130
- return sat_repr + '\n' + pvsystem_repr
131
-
132
- def singleaxis(self, apparent_zenith, apparent_azimuth):
133
- """
134
- Get tracking data. See :py:func:`pvlib.tracking.singleaxis` more
135
- detail.
136
-
137
- Parameters
138
- ----------
139
- apparent_zenith : float, 1d array, or Series
140
- Solar apparent zenith angles in decimal degrees.
141
-
142
- apparent_azimuth : float, 1d array, or Series
143
- Solar apparent azimuth angles in decimal degrees.
144
-
145
- Returns
146
- -------
147
- tracking data
148
- """
149
- tracking_data = singleaxis(apparent_zenith, apparent_azimuth,
150
- self.axis_tilt, self.axis_azimuth,
151
- self.max_angle, self.backtrack,
152
- self.gcr, self.cross_axis_tilt)
153
-
154
- return tracking_data
155
-
156
- def get_aoi(self, surface_tilt, surface_azimuth, solar_zenith,
157
- solar_azimuth):
158
- """Get the angle of incidence on the system.
159
-
160
- For a given set of solar zenith and azimuth angles, the
161
- surface tilt and azimuth parameters are typically determined
162
- by :py:meth:`~SingleAxisTracker.singleaxis`. The
163
- :py:meth:`~SingleAxisTracker.singleaxis` method also returns
164
- the angle of incidence, so this method is only needed
165
- if using a different tracking algorithm.
166
-
167
- Parameters
168
- ----------
169
- surface_tilt : numeric
170
- Panel tilt from horizontal.
171
- surface_azimuth : numeric
172
- Panel azimuth from north
173
- solar_zenith : float or Series.
174
- Solar zenith angle.
175
- solar_azimuth : float or Series.
176
- Solar azimuth angle.
177
-
178
- Returns
179
- -------
180
- aoi : Series
181
- The angle of incidence in degrees from normal.
182
- """
183
-
184
- aoi = irradiance.aoi(surface_tilt, surface_azimuth,
185
- solar_zenith, solar_azimuth)
186
- return aoi
187
-
188
- @_unwrap_single_value
189
- def get_irradiance(self, surface_tilt, surface_azimuth,
190
- solar_zenith, solar_azimuth, dni, ghi, dhi,
191
- albedo=None, dni_extra=None, airmass=None,
192
- model='haydavies',
193
- **kwargs):
194
- """
195
- Uses the :func:`irradiance.get_total_irradiance` function to
196
- calculate the plane of array irradiance components on a tilted
197
- surface defined by the input data and ``self.albedo``.
198
-
199
- For a given set of solar zenith and azimuth angles, the
200
- surface tilt and azimuth parameters are typically determined
201
- by :py:meth:`~SingleAxisTracker.singleaxis`.
202
-
203
- Parameters
204
- ----------
205
- surface_tilt : numeric
206
- Panel tilt from horizontal.
207
- surface_azimuth : numeric
208
- Panel azimuth from north
209
- solar_zenith : numeric
210
- Solar zenith angle.
211
- solar_azimuth : numeric
212
- Solar azimuth angle.
213
- dni : float or Series
214
- Direct Normal Irradiance
215
- ghi : float or Series
216
- Global horizontal irradiance
217
- dhi : float or Series
218
- Diffuse horizontal irradiance
219
- albedo : None, float or Series, default None
220
- Ground surface albedo. [unitless]
221
- dni_extra : float or Series, default None
222
- Extraterrestrial direct normal irradiance
223
- airmass : float or Series, default None
224
- Airmass
225
- model : String, default 'haydavies'
226
- Irradiance model.
227
-
228
- **kwargs
229
- Passed to :func:`irradiance.get_total_irradiance`.
230
-
231
- Returns
232
- -------
233
- poa_irradiance : DataFrame
234
- Column names are: ``total, beam, sky, ground``.
235
- """
236
-
237
- # not needed for all models, but this is easier
238
- if dni_extra is None:
239
- dni_extra = irradiance.get_extra_radiation(solar_zenith.index)
240
-
241
- if airmass is None:
242
- airmass = atmosphere.get_relative_airmass(solar_zenith)
243
-
244
- # SingleAxisTracker only supports a single Array, but we need the
245
- # validate/iterate machinery so that single length tuple input/output
246
- # is handled the same as PVSystem.get_irradiance. GH 1159
247
- dni = self._validate_per_array(dni, system_wide=True)
248
- ghi = self._validate_per_array(ghi, system_wide=True)
249
- dhi = self._validate_per_array(dhi, system_wide=True)
250
-
251
- if albedo is None:
252
- # assign default albedo here because SingleAxisTracker
253
- # initializes albedo to None
254
- albedo = 0.25
255
-
256
- albedo = self._validate_per_array(albedo, system_wide=True)
257
-
258
- return tuple(
259
- irradiance.get_total_irradiance(
260
- surface_tilt,
261
- surface_azimuth,
262
- solar_zenith,
263
- solar_azimuth,
264
- dni, ghi, dhi,
265
- dni_extra=dni_extra,
266
- airmass=airmass,
267
- model=model,
268
- albedo=albedo,
269
- **kwargs)
270
- for array, dni, ghi, dhi, albedo in zip(
271
- self.arrays, dni, ghi, dhi, albedo
272
- )
273
- )
5
+ from pvlib import irradiance
274
6
 
275
7
 
276
8
  def singleaxis(apparent_zenith, apparent_azimuth,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pvlib
3
- Version: 0.9.5
3
+ Version: 0.10.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: pvlib python Developers
@@ -27,13 +27,11 @@ Requires-Dist: scipy (>=1.4.0)
27
27
  Requires-Dist: h5py
28
28
  Requires-Dist: importlib-metadata ; python_version < "3.8"
29
29
  Provides-Extra: all
30
- Requires-Dist: cftime (>=1.1.1) ; extra == 'all'
31
30
  Requires-Dist: cython ; extra == 'all'
32
31
  Requires-Dist: docutils (==0.15.2) ; extra == 'all'
33
32
  Requires-Dist: ephem ; extra == 'all'
34
33
  Requires-Dist: ipython ; extra == 'all'
35
34
  Requires-Dist: matplotlib ; extra == 'all'
36
- Requires-Dist: netcdf4 ; extra == 'all'
37
35
  Requires-Dist: nrel-pysam ; extra == 'all'
38
36
  Requires-Dist: numba ; extra == 'all'
39
37
  Requires-Dist: pillow ; extra == 'all'
@@ -46,7 +44,6 @@ Requires-Dist: pytest-remotedata ; extra == 'all'
46
44
  Requires-Dist: pytest-rerunfailures ; extra == 'all'
47
45
  Requires-Dist: pytest-timeout ; extra == 'all'
48
46
  Requires-Dist: requests-mock ; extra == 'all'
49
- Requires-Dist: siphon ; extra == 'all'
50
47
  Requires-Dist: sphinx (==4.5.0) ; extra == 'all'
51
48
  Requires-Dist: sphinx-gallery ; extra == 'all'
52
49
  Requires-Dist: sphinx-toggleprompt (>=0.0.5) ; extra == 'all'
@@ -59,20 +56,15 @@ Requires-Dist: pydata-sphinx-theme (==0.8.1) ; extra == 'doc'
59
56
  Requires-Dist: sphinx-gallery ; extra == 'doc'
60
57
  Requires-Dist: docutils (==0.15.2) ; extra == 'doc'
61
58
  Requires-Dist: pillow ; extra == 'doc'
62
- Requires-Dist: netcdf4 ; extra == 'doc'
63
- Requires-Dist: siphon ; extra == 'doc'
64
59
  Requires-Dist: sphinx-toggleprompt (>=0.0.5) ; extra == 'doc'
65
60
  Requires-Dist: pvfactors ; extra == 'doc'
66
61
  Provides-Extra: optional
67
62
  Requires-Dist: cython ; extra == 'optional'
68
63
  Requires-Dist: ephem ; extra == 'optional'
69
- Requires-Dist: netcdf4 ; extra == 'optional'
70
64
  Requires-Dist: nrel-pysam ; extra == 'optional'
71
65
  Requires-Dist: numba ; extra == 'optional'
72
66
  Requires-Dist: pvfactors ; extra == 'optional'
73
- Requires-Dist: siphon ; extra == 'optional'
74
67
  Requires-Dist: statsmodels ; extra == 'optional'
75
- Requires-Dist: cftime (>=1.1.1) ; extra == 'optional'
76
68
  Provides-Extra: test
77
69
  Requires-Dist: pytest ; extra == 'test'
78
70
  Requires-Dist: pytest-cov ; extra == 'test'