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
@@ -1,356 +0,0 @@
1
- import datetime
2
- from unittest.mock import ANY
3
-
4
- import numpy as np
5
- from numpy import nan
6
- import pandas as pd
7
- from .conftest import assert_frame_equal, assert_index_equal
8
-
9
- import pytest
10
-
11
- import pytz
12
- from pytz.exceptions import UnknownTimeZoneError
13
-
14
- import pvlib
15
- from pvlib import location
16
- from pvlib.location import Location, lookup_altitude
17
- from pvlib.solarposition import declination_spencer71
18
- from pvlib.solarposition import equation_of_time_spencer71
19
- from .conftest import requires_ephem
20
-
21
-
22
- def test_location_required():
23
- Location(32.2, -111)
24
-
25
-
26
- def test_location_all():
27
- Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
28
-
29
-
30
- @pytest.mark.parametrize('tz', [
31
- pytz.timezone('US/Arizona'), 'America/Phoenix', -7, -7.0,
32
- datetime.timezone.utc
33
- ])
34
- def test_location_tz(tz):
35
- Location(32.2, -111, tz)
36
-
37
-
38
- def test_location_invalid_tz():
39
- with pytest.raises(UnknownTimeZoneError):
40
- Location(32.2, -111, 'invalid')
41
-
42
-
43
- def test_location_invalid_tz_type():
44
- with pytest.raises(TypeError):
45
- Location(32.2, -111, [5])
46
-
47
-
48
- def test_location_print_all():
49
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
50
- expected_str = '\n'.join([
51
- 'Location: ',
52
- ' name: Tucson',
53
- ' latitude: 32.2',
54
- ' longitude: -111',
55
- ' altitude: 700',
56
- ' tz: US/Arizona'
57
- ])
58
- assert tus.__str__() == expected_str
59
-
60
-
61
- def test_location_print_pytz():
62
- tus = Location(32.2, -111, pytz.timezone('US/Arizona'), 700, 'Tucson')
63
- expected_str = '\n'.join([
64
- 'Location: ',
65
- ' name: Tucson',
66
- ' latitude: 32.2',
67
- ' longitude: -111',
68
- ' altitude: 700',
69
- ' tz: US/Arizona'
70
- ])
71
- assert tus.__str__() == expected_str
72
-
73
-
74
- @pytest.fixture
75
- def times():
76
- return pd.date_range(start='20160101T0600-0700',
77
- end='20160101T1800-0700',
78
- freq='3h')
79
-
80
-
81
- def test_get_clearsky(mocker, times):
82
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
83
- m = mocker.spy(pvlib.clearsky, 'ineichen')
84
- out = tus.get_clearsky(times)
85
- assert m.call_count == 1
86
- assert_index_equal(out.index, times)
87
- # check that values are 0 before sunrise and after sunset
88
- assert out.iloc[0, :].sum().sum() == 0
89
- assert out.iloc[-1:, :].sum().sum() == 0
90
- # check that values are > 0 during the day
91
- assert (out.iloc[1:-1, :] > 0).all().all()
92
- assert (out.columns.values == ['ghi', 'dni', 'dhi']).all()
93
-
94
-
95
- def test_get_clearsky_ineichen_supply_linke(mocker):
96
- tus = Location(32.2, -111, 'US/Arizona', 700)
97
- times = pd.date_range(start='2014-06-24-0700', end='2014-06-25-0700',
98
- freq='3h')
99
- mocker.spy(pvlib.clearsky, 'ineichen')
100
- out = tus.get_clearsky(times, linke_turbidity=3)
101
- # we only care that the LT is passed in this test
102
- pvlib.clearsky.ineichen.assert_called_once_with(ANY, ANY, 3, ANY, ANY)
103
- assert_index_equal(out.index, times)
104
- # check that values are 0 before sunrise and after sunset
105
- assert out.iloc[0:2, :].sum().sum() == 0
106
- assert out.iloc[-2:, :].sum().sum() == 0
107
- # check that values are > 0 during the day
108
- assert (out.iloc[2:-2, :] > 0).all().all()
109
- assert (out.columns.values == ['ghi', 'dni', 'dhi']).all()
110
-
111
-
112
- def test_get_clearsky_haurwitz(times):
113
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
114
- clearsky = tus.get_clearsky(times, model='haurwitz')
115
- expected = pd.DataFrame(data=np.array(
116
- [[ 0. ],
117
- [ 242.30085588],
118
- [ 559.38247117],
119
- [ 384.6873791 ],
120
- [ 0. ]]),
121
- columns=['ghi'],
122
- index=times)
123
- assert_frame_equal(expected, clearsky)
124
-
125
-
126
- def test_get_clearsky_simplified_solis(times):
127
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
128
- clearsky = tus.get_clearsky(times, model='simplified_solis')
129
- expected = pd.DataFrame(data=np.
130
- array([[ 0. , 0. , 0. ],
131
- [ 70.00146271, 638.01145669, 236.71136245],
132
- [ 101.69729217, 852.51950946, 577.1117803 ],
133
- [ 86.1679965 , 755.98048017, 385.59586091],
134
- [ 0. , 0. , 0. ]]),
135
- columns=['dhi', 'dni', 'ghi'],
136
- index=times)
137
- expected = expected[['ghi', 'dni', 'dhi']]
138
- assert_frame_equal(expected, clearsky, check_less_precise=2)
139
-
140
-
141
- def test_get_clearsky_simplified_solis_apparent_elevation(times):
142
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
143
- solar_position = {'apparent_elevation': pd.Series(80, index=times),
144
- 'apparent_zenith': pd.Series(10, index=times)}
145
- clearsky = tus.get_clearsky(times, model='simplified_solis',
146
- solar_position=solar_position)
147
- expected = pd.DataFrame(data=np.
148
- array([[ 131.3124497 , 1001.14754036, 1108.14147919],
149
- [ 131.3124497 , 1001.14754036, 1108.14147919],
150
- [ 131.3124497 , 1001.14754036, 1108.14147919],
151
- [ 131.3124497 , 1001.14754036, 1108.14147919],
152
- [ 131.3124497 , 1001.14754036, 1108.14147919]]),
153
- columns=['dhi', 'dni', 'ghi'],
154
- index=times)
155
- expected = expected[['ghi', 'dni', 'dhi']]
156
- assert_frame_equal(expected, clearsky, check_less_precise=2)
157
-
158
-
159
- def test_get_clearsky_simplified_solis_dni_extra(times):
160
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
161
- clearsky = tus.get_clearsky(times, model='simplified_solis',
162
- dni_extra=1370)
163
- expected = pd.DataFrame(data=np.
164
- array([[ 0. , 0. , 0. ],
165
- [ 67.82281485, 618.15469596, 229.34422063],
166
- [ 98.53217848, 825.98663808, 559.15039353],
167
- [ 83.48619937, 732.45218243, 373.59500313],
168
- [ 0. , 0. , 0. ]]),
169
- columns=['dhi', 'dni', 'ghi'],
170
- index=times)
171
- expected = expected[['ghi', 'dni', 'dhi']]
172
- assert_frame_equal(expected, clearsky)
173
-
174
-
175
- def test_get_clearsky_simplified_solis_pressure(times):
176
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
177
- clearsky = tus.get_clearsky(times, model='simplified_solis',
178
- pressure=95000)
179
- expected = pd.DataFrame(data=np.
180
- array([[ 0. , 0. , 0. ],
181
- [ 70.20556637, 635.53091983, 236.17716435],
182
- [ 102.08954904, 850.49502085, 576.28465815],
183
- [ 86.46561686, 753.70744638, 384.90537859],
184
- [ 0. , 0. , 0. ]]),
185
- columns=['dhi', 'dni', 'ghi'],
186
- index=times)
187
- expected = expected[['ghi', 'dni', 'dhi']]
188
- assert_frame_equal(expected, clearsky, check_less_precise=2)
189
-
190
-
191
- def test_get_clearsky_simplified_solis_aod_pw(times):
192
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
193
- clearsky = tus.get_clearsky(times, model='simplified_solis',
194
- aod700=0.25, precipitable_water=2.)
195
- expected = pd.DataFrame(data=np.
196
- array([[ 0. , 0. , 0. ],
197
- [ 85.77821205, 374.58084365, 179.48483117],
198
- [ 143.52743364, 625.91745295, 490.06254157],
199
- [ 114.63275842, 506.52275195, 312.24711495],
200
- [ 0. , 0. , 0. ]]),
201
- columns=['dhi', 'dni', 'ghi'],
202
- index=times)
203
- expected = expected[['ghi', 'dni', 'dhi']]
204
- assert_frame_equal(expected, clearsky, check_less_precise=2)
205
-
206
-
207
- def test_get_clearsky_valueerror(times):
208
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
209
- with pytest.raises(ValueError):
210
- tus.get_clearsky(times, model='invalid_model')
211
-
212
-
213
- def test_from_tmy_3():
214
- from pvlib.tests.iotools.test_tmy import TMY3_TESTFILE
215
- from pvlib.iotools import read_tmy3
216
- data, meta = read_tmy3(TMY3_TESTFILE, map_variables=True)
217
- loc = Location.from_tmy(meta, data)
218
- assert loc.name is not None
219
- assert loc.altitude != 0
220
- assert loc.tz != 'UTC'
221
- assert_frame_equal(loc.weather, data)
222
-
223
-
224
- def test_from_tmy_2():
225
- from pvlib.tests.iotools.test_tmy import TMY2_TESTFILE
226
- from pvlib.iotools import read_tmy2
227
- data, meta = read_tmy2(TMY2_TESTFILE)
228
- loc = Location.from_tmy(meta, data)
229
- assert loc.name is not None
230
- assert loc.altitude != 0
231
- assert loc.tz != 'UTC'
232
- assert_frame_equal(loc.weather, data)
233
-
234
-
235
- def test_from_epw():
236
- from pvlib.tests.iotools.test_epw import epw_testfile
237
- from pvlib.iotools import read_epw
238
- data, meta = read_epw(epw_testfile)
239
- loc = Location.from_epw(meta, data)
240
- assert loc.name is not None
241
- assert loc.altitude != 0
242
- assert loc.tz != 'UTC'
243
- assert_frame_equal(loc.weather, data)
244
-
245
-
246
- def test_get_solarposition(expected_solpos, golden_mst):
247
- times = pd.date_range(datetime.datetime(2003, 10, 17, 12, 30, 30),
248
- periods=1, freq='D', tz=golden_mst.tz)
249
- ephem_data = golden_mst.get_solarposition(times, temperature=11)
250
- ephem_data = np.round(ephem_data, 3)
251
- expected_solpos.index = times
252
- expected_solpos = np.round(expected_solpos, 3)
253
- assert_frame_equal(expected_solpos, ephem_data[expected_solpos.columns])
254
-
255
-
256
- def test_get_airmass(times):
257
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
258
- airmass = tus.get_airmass(times)
259
- expected = pd.DataFrame(data=np.array(
260
- [[ nan, nan],
261
- [ 3.61046506, 3.32072602],
262
- [ 1.76470864, 1.62309115],
263
- [ 2.45582153, 2.25874238],
264
- [ nan, nan]]),
265
- columns=['airmass_relative', 'airmass_absolute'],
266
- index=times)
267
- assert_frame_equal(expected, airmass)
268
-
269
- airmass = tus.get_airmass(times, model='young1994')
270
- expected = pd.DataFrame(data=np.array(
271
- [[ nan, nan],
272
- [ 3.6075018 , 3.31800056],
273
- [ 1.7641033 , 1.62253439],
274
- [ 2.45413091, 2.25718744],
275
- [ nan, nan]]),
276
- columns=['airmass_relative', 'airmass_absolute'],
277
- index=times)
278
- assert_frame_equal(expected, airmass)
279
-
280
-
281
- def test_get_airmass_valueerror(times):
282
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
283
- with pytest.raises(ValueError):
284
- tus.get_airmass(times, model='invalid_model')
285
-
286
-
287
- def test_Location___repr__():
288
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
289
-
290
- expected = '\n'.join([
291
- 'Location: ',
292
- ' name: Tucson',
293
- ' latitude: 32.2',
294
- ' longitude: -111',
295
- ' altitude: 700',
296
- ' tz: US/Arizona'
297
- ])
298
- assert tus.__repr__() == expected
299
-
300
-
301
- @requires_ephem
302
- def test_get_sun_rise_set_transit(golden):
303
- times = pd.DatetimeIndex(['2015-01-01 07:00:00', '2015-01-01 23:00:00'],
304
- tz='MST')
305
- result = golden.get_sun_rise_set_transit(times, method='pyephem')
306
- assert all(result.columns == ['sunrise', 'sunset', 'transit'])
307
-
308
- result = golden.get_sun_rise_set_transit(times, method='spa')
309
- assert all(result.columns == ['sunrise', 'sunset', 'transit'])
310
-
311
- dayofyear = 1
312
- declination = declination_spencer71(dayofyear)
313
- eot = equation_of_time_spencer71(dayofyear)
314
- result = golden.get_sun_rise_set_transit(times, method='geometric',
315
- declination=declination,
316
- equation_of_time=eot)
317
- assert all(result.columns == ['sunrise', 'sunset', 'transit'])
318
-
319
-
320
- def test_get_sun_rise_set_transit_valueerror(golden):
321
- times = pd.DatetimeIndex(['2015-01-01 07:00:00', '2015-01-01 23:00:00'],
322
- tz='MST')
323
- with pytest.raises(ValueError):
324
- golden.get_sun_rise_set_transit(times, method='eyeball')
325
-
326
-
327
- def test_extra_kwargs():
328
- with pytest.raises(TypeError, match='arbitrary_kwarg'):
329
- Location(32.2, -111, arbitrary_kwarg='value')
330
-
331
-
332
- @pytest.mark.parametrize('lat,lon,expected_alt', [
333
- pytest.param(32.2540, -110.9742, 724, id='Tucson, USA'),
334
- pytest.param(-15.3875, 28.3228, 1253, id='Lusaka, Zambia'),
335
- pytest.param(35.6762, 139.6503, 40, id='Tokyo, Japan'),
336
- pytest.param(-35.2802, 149.1310, 566, id='Canberra, Australia'),
337
- pytest.param(4.7110, -74.0721, 2555, id='Bogota, Colombia'),
338
- pytest.param(31.525849, 35.449214, -415, id='Dead Sea, West Bank'),
339
- pytest.param(28.6139, 77.2090, 214, id='New Delhi, India'),
340
- pytest.param(0, 0, 0, id='Null Island, Atlantic Ocean'),
341
- ])
342
- def test_lookup_altitude(lat, lon, expected_alt):
343
- alt_found = lookup_altitude(lat, lon)
344
- assert alt_found == pytest.approx(expected_alt, abs=125)
345
-
346
-
347
- def test_location_lookup_altitude(mocker):
348
- mocker.spy(location, 'lookup_altitude')
349
- tus = Location(32.2, -111, 'US/Arizona', 700, 'Tucson')
350
- location.lookup_altitude.assert_not_called()
351
- assert tus.altitude == 700
352
- location.lookup_altitude.reset_mock()
353
-
354
- tus = Location(32.2, -111, 'US/Arizona')
355
- location.lookup_altitude.assert_called_once_with(32.2, -111)
356
- assert tus.altitude == location.lookup_altitude(32.2, -111)