Skip to content

Commit 1c606d5

Browse files
authored
TST: dt64 unit in tests (#56126)
1 parent 68ef1da commit 1c606d5

24 files changed

+182
-226
lines changed

pandas/core/tools/datetimes.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,8 @@ def _convert_listlike_datetimes(
495495
if tz_parsed is not None:
496496
# We can take a shortcut since the datetime64 numpy array
497497
# is in UTC
498-
dtype = cast(DatetimeTZDtype, tz_to_dtype(tz_parsed))
498+
out_unit = np.datetime_data(result.dtype)[0]
499+
dtype = cast(DatetimeTZDtype, tz_to_dtype(tz_parsed, out_unit))
499500
dt64_values = result.view(f"M8[{dtype.unit}]")
500501
dta = DatetimeArray._simple_new(dt64_values, dtype=dtype)
501502
return DatetimeIndex._simple_new(dta, name=name)

pandas/tests/arithmetic/test_timedelta64.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,7 @@ def test_td64arr_add_datetime64_nat(self, box_with_array):
10391039
other = np.datetime64("NaT")
10401040

10411041
tdi = timedelta_range("1 day", periods=3)
1042-
expected = DatetimeIndex(["NaT", "NaT", "NaT"])
1042+
expected = DatetimeIndex(["NaT", "NaT", "NaT"], dtype="M8[ns]")
10431043

10441044
tdser = tm.box_expected(tdi, box_with_array)
10451045
expected = tm.box_expected(expected, box_with_array)

pandas/tests/dtypes/test_dtypes.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,8 @@ def test_is_boolean(self, categories, expected):
200200

201201
def test_dtype_specific_categorical_dtype(self):
202202
expected = "datetime64[ns]"
203-
result = str(Categorical(DatetimeIndex([])).categories.dtype)
203+
dti = DatetimeIndex([], dtype=expected)
204+
result = str(Categorical(dti).categories.dtype)
204205
assert result == expected
205206

206207
def test_not_string(self):

pandas/tests/frame/methods/test_transpose.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ def test_transpose_td64_intervals(self):
2929

3030
def test_transpose_empty_preserves_datetimeindex(self):
3131
# GH#41382
32-
df = DataFrame(index=DatetimeIndex([]))
32+
dti = DatetimeIndex([], dtype="M8[ns]")
33+
df = DataFrame(index=dti)
3334

3435
expected = DatetimeIndex([], dtype="datetime64[ns]", freq=None)
3536

pandas/tests/indexes/datetimes/test_date_range.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ def test_date_range_edges(self, freq):
183183
)
184184
exp = DatetimeIndex(
185185
[ts + n * td for n in range(1, 5)],
186+
dtype="M8[ns]",
186187
freq=freq,
187188
)
188189
tm.assert_index_equal(idx, exp)
@@ -193,7 +194,7 @@ def test_date_range_edges(self, freq):
193194
end=ts + td,
194195
freq=freq,
195196
)
196-
exp = DatetimeIndex([], freq=freq)
197+
exp = DatetimeIndex([], dtype="M8[ns]", freq=freq)
197198
tm.assert_index_equal(idx, exp)
198199

199200
# start matches end
@@ -202,7 +203,7 @@ def test_date_range_edges(self, freq):
202203
end=ts + td,
203204
freq=freq,
204205
)
205-
exp = DatetimeIndex([ts + td], freq=freq)
206+
exp = DatetimeIndex([ts + td], dtype="M8[ns]", freq=freq)
206207
tm.assert_index_equal(idx, exp)
207208

208209
def test_date_range_near_implementation_bound(self):

pandas/tests/indexes/datetimes/test_scalar_compat.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ def test_dti_fields(self, tz):
304304
exp = dti[[0, 90, 181, 273]]
305305
tm.assert_index_equal(res, exp)
306306
res = dti[dti.is_leap_year]
307-
exp = DatetimeIndex([], freq="D", tz=dti.tz, name="name")
307+
exp = DatetimeIndex([], freq="D", tz=dti.tz, name="name").as_unit("ns")
308308
tm.assert_index_equal(res, exp)
309309

310310
def test_dti_is_year_quarter_start(self):

pandas/tests/indexes/datetimes/test_setops.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def test_union(self, tz, sort):
7373
expected2_notsorted = DatetimeIndex(list(other2) + list(rng2[:3]))
7474

7575
rng3 = date_range("1/1/2000", freq="D", periods=5, tz=tz)
76-
other3 = DatetimeIndex([], tz=tz)
76+
other3 = DatetimeIndex([], tz=tz).as_unit("ns")
7777
expected3 = date_range("1/1/2000", freq="D", periods=5, tz=tz)
7878
expected3_notsorted = rng3
7979

@@ -235,7 +235,7 @@ def test_intersection(self, tz, sort):
235235
expected3 = date_range("6/1/2000", "6/20/2000", freq="D", name=None)
236236

237237
rng4 = date_range("7/1/2000", "7/31/2000", freq="D", name="idx")
238-
expected4 = DatetimeIndex([], freq="D", name="idx")
238+
expected4 = DatetimeIndex([], freq="D", name="idx", dtype="M8[ns]")
239239

240240
for rng, expected in [
241241
(rng2, expected2),
@@ -265,7 +265,7 @@ def test_intersection(self, tz, sort):
265265

266266
# GH 7880
267267
rng4 = date_range("7/1/2000", "7/31/2000", freq="D", tz=tz, name="idx")
268-
expected4 = DatetimeIndex([], tz=tz, name="idx")
268+
expected4 = DatetimeIndex([], tz=tz, name="idx").as_unit("ns")
269269
assert expected4.freq is None
270270

271271
for rng, expected in [
@@ -536,7 +536,7 @@ def test_intersection(self):
536536

537537
# non-overlapping
538538
the_int = rng[:10].intersection(rng[10:])
539-
expected = DatetimeIndex([])
539+
expected = DatetimeIndex([]).as_unit("ns")
540540
tm.assert_index_equal(the_int, expected)
541541

542542
def test_intersection_bug(self):

pandas/tests/indexes/interval/test_interval.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ def test_maybe_convert_i8_nat(self, breaks):
388388
# GH 20636
389389
index = IntervalIndex.from_breaks(breaks)
390390

391-
to_convert = breaks._constructor([pd.NaT] * 3)
391+
to_convert = breaks._constructor([pd.NaT] * 3).as_unit("ns")
392392
expected = Index([np.nan] * 3, dtype=np.float64)
393393
result = index._maybe_convert_i8(to_convert)
394394
tm.assert_index_equal(result, expected)

pandas/tests/indexes/period/test_partial_slicing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def test_range_slice_outofbounds(self, make_range):
117117
idx = make_range(start="2013/10/01", freq="D", periods=10)
118118

119119
df = DataFrame({"units": [100 + i for i in range(10)]}, index=idx)
120-
empty = DataFrame(index=type(idx)([], freq="D"), columns=["units"])
120+
empty = DataFrame(index=idx[:0], columns=["units"])
121121
empty["units"] = empty["units"].astype("int64")
122122

123123
tm.assert_frame_equal(df["2013/09/01":"2013/09/30"], empty)

pandas/tests/io/formats/test_format.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -872,20 +872,22 @@ def test_to_string_truncate_multilevel(self):
872872
with option_context("display.max_rows", 7, "display.max_columns", 7):
873873
assert has_doubly_truncated_repr(df)
874874

875-
def test_truncate_with_different_dtypes(self):
875+
@pytest.mark.parametrize("dtype", ["object", "datetime64[us]"])
876+
def test_truncate_with_different_dtypes(self, dtype):
876877
# 11594, 12045
877878
# when truncated the dtypes of the splits can differ
878879

879880
# 11594
880-
s = Series(
881+
ser = Series(
881882
[datetime(2012, 1, 1)] * 10
882883
+ [datetime(1012, 1, 2)]
883-
+ [datetime(2012, 1, 3)] * 10
884+
+ [datetime(2012, 1, 3)] * 10,
885+
dtype=dtype,
884886
)
885887

886888
with option_context("display.max_rows", 8):
887-
result = str(s)
888-
assert "object" in result
889+
result = str(ser)
890+
assert dtype in result
889891

890892
def test_truncate_with_different_dtypes2(self):
891893
# 12045

pandas/tests/io/parser/test_parse_dates.py

+7-14
Original file line numberDiff line numberDiff line change
@@ -831,9 +831,7 @@ def test_parse_dates_string(all_parsers):
831831
parser = all_parsers
832832
result = parser.read_csv(StringIO(data), index_col="date", parse_dates=["date"])
833833
# freq doesn't round-trip
834-
index = DatetimeIndex(
835-
list(date_range("1/1/2009", periods=3)), name="date", freq=None
836-
)
834+
index = date_range("1/1/2009", periods=3, name="date")._with_freq(None)
837835

838836
expected = DataFrame(
839837
{"A": ["a", "b", "c"], "B": [1, 3, 4], "C": [2, 4, 5]}, index=index
@@ -1736,17 +1734,12 @@ def test_parse_timezone(all_parsers):
17361734
2018-01-04 09:05:00+09:00,23400"""
17371735
result = parser.read_csv(StringIO(data), parse_dates=["dt"])
17381736

1739-
dti = DatetimeIndex(
1740-
list(
1741-
date_range(
1742-
start="2018-01-04 09:01:00",
1743-
end="2018-01-04 09:05:00",
1744-
freq="1min",
1745-
tz=timezone(timedelta(minutes=540)),
1746-
)
1747-
),
1748-
freq=None,
1749-
)
1737+
dti = date_range(
1738+
start="2018-01-04 09:01:00",
1739+
end="2018-01-04 09:05:00",
1740+
freq="1min",
1741+
tz=timezone(timedelta(minutes=540)),
1742+
)._with_freq(None)
17501743
expected_data = {"dt": dti, "val": [23350, 23400, 23400, 23400, 23400]}
17511744

17521745
expected = DataFrame(expected_data)

pandas/tests/resample/test_period_index.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -504,8 +504,8 @@ def test_resample_weekly_all_na(self):
504504
expected = ts.asfreq("W-THU").ffill()
505505
tm.assert_series_equal(result, expected)
506506

507-
def test_resample_tz_localized(self):
508-
dr = date_range(start="2012-4-13", end="2012-5-1")
507+
def test_resample_tz_localized(self, unit):
508+
dr = date_range(start="2012-4-13", end="2012-5-1", unit=unit)
509509
ts = Series(range(len(dr)), index=dr)
510510

511511
ts_utc = ts.tz_localize("UTC")
@@ -514,9 +514,7 @@ def test_resample_tz_localized(self):
514514
result = ts_local.resample("W").mean()
515515

516516
ts_local_naive = ts_local.copy()
517-
ts_local_naive.index = [
518-
x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime()
519-
]
517+
ts_local_naive.index = ts_local_naive.index.tz_localize(None)
520518

521519
exp = ts_local_naive.resample("W").mean().tz_localize("America/Los_Angeles")
522520
exp.index = pd.DatetimeIndex(exp.index, freq="W")

pandas/tests/resample/test_resampler_grouper.py

+34-49
Original file line numberDiff line numberDiff line change
@@ -349,18 +349,19 @@ def weighted_quantile(series, weights, q):
349349
tm.assert_series_equal(result, expected)
350350

351351

352-
def test_resample_groupby_with_label():
352+
def test_resample_groupby_with_label(unit):
353353
# GH 13235
354-
index = date_range("2000-01-01", freq="2D", periods=5)
354+
index = date_range("2000-01-01", freq="2D", periods=5, unit=unit)
355355
df = DataFrame(index=index, data={"col0": [0, 0, 1, 1, 2], "col1": [1, 1, 1, 1, 1]})
356356
msg = "DataFrameGroupBy.resample operated on the grouping columns"
357357
with tm.assert_produces_warning(FutureWarning, match=msg):
358358
result = df.groupby("col0").resample("1W", label="left").sum()
359359

360360
mi = [
361361
np.array([0, 0, 1, 2], dtype=np.int64),
362-
pd.to_datetime(
363-
np.array(["1999-12-26", "2000-01-02", "2000-01-02", "2000-01-02"])
362+
np.array(
363+
["1999-12-26", "2000-01-02", "2000-01-02", "2000-01-02"],
364+
dtype=f"M8[{unit}]",
364365
),
365366
]
366367
mindex = pd.MultiIndex.from_arrays(mi, names=["col0", None])
@@ -505,7 +506,9 @@ def test_resample_groupby_agg_object_dtype_all_nan(consolidate):
505506
idx = pd.MultiIndex.from_arrays(
506507
[
507508
["A"] * 3 + ["B"] * 3,
508-
pd.to_datetime(["2020-01-05", "2020-01-12", "2020-01-19"] * 2),
509+
pd.to_datetime(["2020-01-05", "2020-01-12", "2020-01-19"] * 2).as_unit(
510+
"ns"
511+
),
509512
],
510513
names=["key", "date"],
511514
)
@@ -530,19 +533,15 @@ def test_groupby_resample_with_list_of_keys():
530533
}
531534
)
532535
result = df.groupby("group").resample("2D", on="date")[["val"]].mean()
536+
537+
mi_exp = pd.MultiIndex.from_arrays(
538+
[[0, 0, 1, 1], df["date"]._values[::2]], names=["group", "date"]
539+
)
533540
expected = DataFrame(
534541
data={
535542
"val": [4.0, 3.5, 6.5, 3.0],
536543
},
537-
index=Index(
538-
data=[
539-
(0, Timestamp("2016-01-01")),
540-
(0, Timestamp("2016-01-03")),
541-
(1, Timestamp("2016-01-05")),
542-
(1, Timestamp("2016-01-07")),
543-
],
544-
name=("group", "date"),
545-
),
544+
index=mi_exp,
546545
)
547546
tm.assert_frame_equal(result, expected)
548547

@@ -605,17 +604,17 @@ def test_groupby_resample_size_all_index_same():
605604
msg = "DataFrameGroupBy.resample operated on the grouping columns"
606605
with tm.assert_produces_warning(FutureWarning, match=msg):
607606
result = df.groupby("A").resample("D").size()
607+
608+
mi_exp = pd.MultiIndex.from_arrays(
609+
[
610+
[1, 1, 2, 2],
611+
pd.DatetimeIndex(["2000-12-31", "2001-01-01"] * 2, dtype="M8[ns]"),
612+
],
613+
names=["A", None],
614+
)
608615
expected = Series(
609616
3,
610-
index=pd.MultiIndex.from_tuples(
611-
[
612-
(1, Timestamp("2000-12-31")),
613-
(1, Timestamp("2001-01-01")),
614-
(2, Timestamp("2000-12-31")),
615-
(2, Timestamp("2001-01-01")),
616-
],
617-
names=["A", None],
618-
),
617+
index=mi_exp,
619618
)
620619
tm.assert_series_equal(result, expected)
621620

@@ -627,25 +626,18 @@ def test_groupby_resample_on_index_with_list_of_keys():
627626
"group": [0, 0, 0, 0, 1, 1, 1, 1],
628627
"val": [3, 1, 4, 1, 5, 9, 2, 6],
629628
},
630-
index=Series(
631-
date_range(start="2016-01-01", periods=8),
632-
name="date",
633-
),
629+
index=date_range(start="2016-01-01", periods=8, name="date"),
634630
)
635631
result = df.groupby("group").resample("2D")[["val"]].mean()
632+
633+
mi_exp = pd.MultiIndex.from_arrays(
634+
[[0, 0, 1, 1], df.index[::2]], names=["group", "date"]
635+
)
636636
expected = DataFrame(
637637
data={
638638
"val": [2.0, 2.5, 7.0, 4.0],
639639
},
640-
index=Index(
641-
data=[
642-
(0, Timestamp("2016-01-01")),
643-
(0, Timestamp("2016-01-03")),
644-
(1, Timestamp("2016-01-05")),
645-
(1, Timestamp("2016-01-07")),
646-
],
647-
name=("group", "date"),
648-
),
640+
index=mi_exp,
649641
)
650642
tm.assert_frame_equal(result, expected)
651643

@@ -659,26 +651,19 @@ def test_groupby_resample_on_index_with_list_of_keys_multi_columns():
659651
"second_val": [2, 7, 1, 8, 2, 8, 1, 8],
660652
"third_val": [1, 4, 1, 4, 2, 1, 3, 5],
661653
},
662-
index=Series(
663-
date_range(start="2016-01-01", periods=8),
664-
name="date",
665-
),
654+
index=date_range(start="2016-01-01", periods=8, name="date"),
666655
)
667656
result = df.groupby("group").resample("2D")[["first_val", "second_val"]].mean()
657+
658+
mi_exp = pd.MultiIndex.from_arrays(
659+
[[0, 0, 1, 1], df.index[::2]], names=["group", "date"]
660+
)
668661
expected = DataFrame(
669662
data={
670663
"first_val": [2.0, 2.5, 7.0, 4.0],
671664
"second_val": [4.5, 4.5, 5.0, 4.5],
672665
},
673-
index=Index(
674-
data=[
675-
(0, Timestamp("2016-01-01")),
676-
(0, Timestamp("2016-01-03")),
677-
(1, Timestamp("2016-01-05")),
678-
(1, Timestamp("2016-01-07")),
679-
],
680-
name=("group", "date"),
681-
),
666+
index=mi_exp,
682667
)
683668
tm.assert_frame_equal(result, expected)
684669

0 commit comments

Comments
 (0)