14
14
from pvlib .location import Location
15
15
from pvlib import solarposition
16
16
17
- from . import requires_ephem
17
+ from . import requires_ephem , incompatible_pandas_0131
18
18
19
19
# setup times and locations to be tested.
20
20
times = pd .date_range (start = datetime .datetime (2014 ,6 ,24 ),
@@ -141,23 +141,31 @@ def test_spa_python_numba_physical_dst():
141
141
assert_frame_equal (this_expected , ephem_data [expected .columns ])
142
142
143
143
144
+ @incompatible_pandas_0131
144
145
def test_get_sun_rise_set_transit ():
145
146
south = Location (- 35.0 , 0.0 , tz = 'UTC' )
146
147
times = pd .DatetimeIndex ([datetime .datetime (1996 , 7 , 5 , 0 ),
147
148
datetime .datetime (2004 , 12 , 4 , 0 )]
148
149
).tz_localize ('UTC' )
149
- sunrise = pd .DatetimeIndex ([datetime .datetime (1996 , 7 , 5 , 7 , 8 , 15 , 471676 ),
150
- datetime .datetime (2004 , 12 , 4 , 4 , 38 , 57 , 27416 )]
150
+ sunrise = pd .DatetimeIndex ([datetime .datetime (1996 , 7 , 5 , 7 , 8 , 15 ),
151
+ datetime .datetime (2004 , 12 , 4 , 4 , 38 , 57 )]
151
152
).tz_localize ('UTC' ).tolist ()
152
- sunset = pd .DatetimeIndex ([datetime .datetime (1996 , 7 , 5 , 17 , 1 , 4 , 479889 ),
153
- datetime .datetime (2004 , 12 , 4 , 19 , 2 , 2 , 499704 )]
153
+ sunset = pd .DatetimeIndex ([datetime .datetime (1996 , 7 , 5 , 17 , 1 , 4 ),
154
+ datetime .datetime (2004 , 12 , 4 , 19 , 2 , 2 )]
154
155
).tz_localize ('UTC' ).tolist ()
155
156
result = solarposition .get_sun_rise_set_transit (times , south .latitude ,
156
157
south .longitude ,
157
158
delta_t = 64.0 )
158
159
frame = pd .DataFrame ({'sunrise' :sunrise , 'sunset' :sunset }, index = times )
159
- del result ['transit' ]
160
- assert_frame_equal (frame , result )
160
+ result_rounded = pd .DataFrame (index = result .index )
161
+ # need to iterate because to_datetime does not accept 2D data
162
+ # the rounding fails on pandas < 0.17
163
+ for col , data in result .iteritems ():
164
+ result_rounded [col ] = pd .to_datetime (
165
+ np .floor (data .values .astype (np .int64 ) / 1e9 )* 1e9 , utc = True )
166
+
167
+ del result_rounded ['transit' ]
168
+ assert_frame_equal (frame , result_rounded )
161
169
162
170
163
171
# tests from USNO
@@ -166,18 +174,27 @@ def test_get_sun_rise_set_transit():
166
174
times = pd .DatetimeIndex ([datetime .datetime (2015 , 1 , 2 ),
167
175
datetime .datetime (2015 , 8 , 2 ),]
168
176
).tz_localize ('MST' )
169
- sunrise = pd .DatetimeIndex ([datetime .datetime (2015 , 1 , 2 , 7 , 19 , 2 , 225169 ),
170
- datetime .datetime (2015 , 8 , 2 , 5 , 1 , 26 , 963145 )
177
+ sunrise = pd .DatetimeIndex ([datetime .datetime (2015 , 1 , 2 , 7 , 19 , 2 ),
178
+ datetime .datetime (2015 , 8 , 2 , 5 , 1 , 26 )
171
179
]).tz_localize ('MST' ).tolist ()
172
- sunset = pd .DatetimeIndex ([datetime .datetime (2015 , 1 , 2 , 16 , 49 , 10 , 13145 ),
173
- datetime .datetime (2015 , 8 , 2 , 19 , 11 , 31 , 816401 )
180
+ sunset = pd .DatetimeIndex ([datetime .datetime (2015 , 1 , 2 , 16 , 49 , 10 ),
181
+ datetime .datetime (2015 , 8 , 2 , 19 , 11 , 31 )
174
182
]).tz_localize ('MST' ).tolist ()
175
183
result = solarposition .get_sun_rise_set_transit (times , golden .latitude ,
176
184
golden .longitude ,
177
185
delta_t = 64.0 )
178
186
frame = pd .DataFrame ({'sunrise' :sunrise , 'sunset' :sunset }, index = times )
179
- del result ['transit' ]
180
- assert_frame_equal (frame , result )
187
+ result_rounded = pd .DataFrame (index = result .index )
188
+ # need to iterate because to_datetime does not accept 2D data
189
+ # the rounding fails on pandas < 0.17
190
+ for col , data in result .iteritems ():
191
+ result_rounded [col ] = (pd .to_datetime (
192
+ np .floor (data .values .astype (np .int64 ) / 1e9 )* 1e9 , utc = True )
193
+ .tz_convert ('MST' ))
194
+
195
+ del result_rounded ['transit' ]
196
+ assert_frame_equal (frame , result_rounded )
197
+
181
198
182
199
@requires_ephem
183
200
def test_pyephem_physical ():
0 commit comments