@@ -211,49 +211,40 @@ def get_resolution(const int64_t[:] stamps, tzinfo tz=None):
211
211
int reso = RESO_DAY, curr_reso
212
212
ndarray[int64_t] trans
213
213
int64_t[:] deltas
214
- Py_ssize_t[:] pos
215
- int64_t local_val, delta
214
+ intp_t[:] pos
215
+ int64_t local_val, delta = NPY_NAT
216
+ bint use_utc = False , use_tzlocal = False , use_fixed = False
216
217
217
218
if is_utc(tz) or tz is None :
218
- for i in range (n):
219
- if stamps[i] == NPY_NAT:
220
- continue
221
- dt64_to_dtstruct(stamps[i], & dts)
222
- curr_reso = _reso_stamp(& dts)
223
- if curr_reso < reso:
224
- reso = curr_reso
219
+ use_utc = True
225
220
elif is_tzlocal(tz):
226
- for i in range (n):
227
- if stamps[i] == NPY_NAT:
228
- continue
229
- local_val = tz_convert_utc_to_tzlocal(stamps[i], tz)
230
- dt64_to_dtstruct(local_val, & dts)
231
- curr_reso = _reso_stamp(& dts)
232
- if curr_reso < reso:
233
- reso = curr_reso
221
+ use_tzlocal = True
234
222
else :
235
- # Adjust datetime64 timestamp, recompute datetimestruct
236
223
trans, deltas, typ = get_dst_info(tz)
237
-
238
224
if typ not in [" pytz" , " dateutil" ]:
239
225
# static/fixed; in this case we know that len(delta) == 1
226
+ use_fixed = True
240
227
delta = deltas[0 ]
241
- for i in range (n):
242
- if stamps[i] == NPY_NAT:
243
- continue
244
- dt64_to_dtstruct(stamps[i] + delta, & dts)
245
- curr_reso = _reso_stamp(& dts)
246
- if curr_reso < reso:
247
- reso = curr_reso
248
228
else :
249
229
pos = trans.searchsorted(stamps, side = " right" ) - 1
250
- for i in range (n):
251
- if stamps[i] == NPY_NAT:
252
- continue
253
- dt64_to_dtstruct(stamps[i] + deltas[pos[i]], & dts)
254
- curr_reso = _reso_stamp(& dts)
255
- if curr_reso < reso:
256
- reso = curr_reso
230
+
231
+ for i in range (n):
232
+ if stamps[i] == NPY_NAT:
233
+ continue
234
+
235
+ if use_utc:
236
+ local_val = stamps[i]
237
+ elif use_tzlocal:
238
+ local_val = tz_convert_utc_to_tzlocal(stamps[i], tz)
239
+ elif use_fixed:
240
+ local_val = stamps[i] + delta
241
+ else :
242
+ local_val = stamps[i] + deltas[pos[i]]
243
+
244
+ dt64_to_dtstruct(local_val, & dts)
245
+ curr_reso = _reso_stamp(& dts)
246
+ if curr_reso < reso:
247
+ reso = curr_reso
257
248
258
249
return Resolution(reso)
259
250
0 commit comments