Skip to content

Commit 6f04606

Browse files
authored
TST: parametrize tests over dt64 unit (#55959)
1 parent 795357d commit 6f04606

16 files changed

+181
-151
lines changed

pandas/tests/indexes/datetimes/test_date_range.py

+6
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,12 @@ def test_date_range_businesshour(self):
473473
rng = date_range("2014-07-04 09:00", "2014-07-08 16:00", freq="bh")
474474
tm.assert_index_equal(idx, rng)
475475

476+
def test_date_range_business_hour_short(self, unit):
477+
# GH#49835
478+
idx4 = date_range(start="2014-07-01 10:00", freq="bh", periods=1, unit=unit)
479+
expected4 = DatetimeIndex(["2014-07-01 10:00"], freq="bh").as_unit(unit)
480+
tm.assert_index_equal(idx4, expected4)
481+
476482
def test_date_range_timedelta(self):
477483
start = "2020-01-01"
478484
end = "2020-01-11"

pandas/tests/indexes/interval/test_interval.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ def test_properties(self, closed):
8686
[
8787
[1, 1, 2, 5, 15, 53, 217, 1014, 5335, 31240, 201608],
8888
[-np.inf, -100, -10, 0.5, 1, 1.5, 3.8, 101, 202, np.inf],
89-
pd.to_datetime(["20170101", "20170202", "20170303", "20170404"]),
89+
date_range("2017-01-01", "2017-01-04"),
90+
pytest.param(
91+
date_range("2017-01-01", "2017-01-04", unit="s"),
92+
marks=pytest.mark.xfail(reason="mismatched result unit"),
93+
),
9094
pd.to_timedelta(["1ns", "2ms", "3s", "4min", "5h", "6D"]),
9195
],
9296
)

pandas/tests/reductions/test_reductions.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -822,24 +822,23 @@ def test_numpy_argmax(self):
822822
# See GH#16830
823823
data = np.arange(1, 11)
824824

825-
s = Series(data, index=data)
826-
result = np.argmax(s)
825+
ser = Series(data, index=data)
826+
result = np.argmax(ser)
827827
expected = np.argmax(data)
828828
assert result == expected
829829

830-
result = s.argmax()
830+
result = ser.argmax()
831831

832832
assert result == expected
833833

834834
msg = "the 'out' parameter is not supported"
835835
with pytest.raises(ValueError, match=msg):
836-
np.argmax(s, out=data)
836+
np.argmax(ser, out=data)
837837

838-
def test_idxmin_dt64index(self):
838+
def test_idxmin_dt64index(self, unit):
839839
# GH#43587 should have NaT instead of NaN
840-
ser = Series(
841-
[1.0, 2.0, np.nan], index=DatetimeIndex(["NaT", "2015-02-08", "NaT"])
842-
)
840+
dti = DatetimeIndex(["NaT", "2015-02-08", "NaT"]).as_unit(unit)
841+
ser = Series([1.0, 2.0, np.nan], index=dti)
843842
msg = "The behavior of Series.idxmin with all-NA values"
844843
with tm.assert_produces_warning(FutureWarning, match=msg):
845844
res = ser.idxmin(skipna=False)
@@ -853,12 +852,12 @@ def test_idxmin_dt64index(self):
853852
msg = "The behavior of DataFrame.idxmin with all-NA values"
854853
with tm.assert_produces_warning(FutureWarning, match=msg):
855854
res = df.idxmin(skipna=False)
856-
assert res.dtype == "M8[ns]"
855+
assert res.dtype == f"M8[{unit}]"
857856
assert res.isna().all()
858857
msg = "The behavior of DataFrame.idxmax with all-NA values"
859858
with tm.assert_produces_warning(FutureWarning, match=msg):
860859
res = df.idxmax(skipna=False)
861-
assert res.dtype == "M8[ns]"
860+
assert res.dtype == f"M8[{unit}]"
862861
assert res.isna().all()
863862

864863
def test_idxmin(self):

pandas/tests/resample/test_datetime_index.py

+39-32
Original file line numberDiff line numberDiff line change
@@ -1365,15 +1365,16 @@ def test_resample_consistency(unit):
13651365

13661366

13671367
@pytest.mark.parametrize("dates", [dates1, dates2, dates3])
1368-
def test_resample_timegrouper(dates):
1368+
def test_resample_timegrouper(dates, unit):
13691369
# GH 7227
1370+
dates = DatetimeIndex(dates).as_unit(unit)
13701371
df = DataFrame({"A": dates, "B": np.arange(len(dates))})
13711372
result = df.set_index("A").resample("ME").count()
13721373
exp_idx = DatetimeIndex(
13731374
["2014-07-31", "2014-08-31", "2014-09-30", "2014-10-31", "2014-11-30"],
13741375
freq="ME",
13751376
name="A",
1376-
)
1377+
).as_unit(unit)
13771378
expected = DataFrame({"B": [1, 0, 2, 2, 1]}, index=exp_idx)
13781379
if df["A"].isna().any():
13791380
expected.index = expected.index._with_freq(None)
@@ -2077,26 +2078,39 @@ def test_resample_BM_deprecated():
20772078
tm.assert_series_equal(result, expected)
20782079

20792080

2080-
def test_resample_ms_closed_right():
2081+
def test_resample_ms_closed_right(unit):
20812082
# https://github.com/pandas-dev/pandas/issues/55271
2082-
dti = date_range(start="2020-01-31", freq="1min", periods=6000)
2083+
dti = date_range(start="2020-01-31", freq="1min", periods=6000, unit=unit)
20832084
df = DataFrame({"ts": dti}, index=dti)
20842085
grouped = df.resample("MS", closed="right")
20852086
result = grouped.last()
2087+
exp_dti = DatetimeIndex(
2088+
[datetime(2020, 1, 1), datetime(2020, 2, 1)], freq="MS"
2089+
).as_unit(unit)
20862090
expected = DataFrame(
20872091
{"ts": [datetime(2020, 2, 1), datetime(2020, 2, 4, 3, 59)]},
2088-
index=DatetimeIndex([datetime(2020, 1, 1), datetime(2020, 2, 1)], freq="MS"),
2089-
)
2092+
index=exp_dti,
2093+
).astype(f"M8[{unit}]")
20902094
tm.assert_frame_equal(result, expected)
20912095

20922096

20932097
@pytest.mark.parametrize("freq", ["B", "C"])
2094-
def test_resample_c_b_closed_right(freq: str):
2098+
def test_resample_c_b_closed_right(freq: str, unit):
20952099
# https://github.com/pandas-dev/pandas/issues/55281
2096-
dti = date_range(start="2020-01-31", freq="1min", periods=6000)
2100+
dti = date_range(start="2020-01-31", freq="1min", periods=6000, unit=unit)
20972101
df = DataFrame({"ts": dti}, index=dti)
20982102
grouped = df.resample(freq, closed="right")
20992103
result = grouped.last()
2104+
2105+
exp_dti = DatetimeIndex(
2106+
[
2107+
datetime(2020, 1, 30),
2108+
datetime(2020, 1, 31),
2109+
datetime(2020, 2, 3),
2110+
datetime(2020, 2, 4),
2111+
],
2112+
freq=freq,
2113+
).as_unit(unit)
21002114
expected = DataFrame(
21012115
{
21022116
"ts": [
@@ -2106,35 +2120,28 @@ def test_resample_c_b_closed_right(freq: str):
21062120
datetime(2020, 2, 4, 3, 59),
21072121
]
21082122
},
2109-
index=DatetimeIndex(
2110-
[
2111-
datetime(2020, 1, 30),
2112-
datetime(2020, 1, 31),
2113-
datetime(2020, 2, 3),
2114-
datetime(2020, 2, 4),
2115-
],
2116-
freq=freq,
2117-
),
2118-
)
2123+
index=exp_dti,
2124+
).astype(f"M8[{unit}]")
21192125
tm.assert_frame_equal(result, expected)
21202126

21212127

2122-
def test_resample_b_55282():
2128+
def test_resample_b_55282(unit):
21232129
# https://github.com/pandas-dev/pandas/issues/55282
2124-
s = Series(
2125-
[1, 2, 3, 4, 5, 6], index=date_range("2023-09-26", periods=6, freq="12h")
2126-
)
2127-
result = s.resample("B", closed="right", label="right").mean()
2130+
dti = date_range("2023-09-26", periods=6, freq="12h", unit=unit)
2131+
ser = Series([1, 2, 3, 4, 5, 6], index=dti)
2132+
result = ser.resample("B", closed="right", label="right").mean()
2133+
2134+
exp_dti = DatetimeIndex(
2135+
[
2136+
datetime(2023, 9, 26),
2137+
datetime(2023, 9, 27),
2138+
datetime(2023, 9, 28),
2139+
datetime(2023, 9, 29),
2140+
],
2141+
freq="B",
2142+
).as_unit(unit)
21282143
expected = Series(
21292144
[1.0, 2.5, 4.5, 6.0],
2130-
index=DatetimeIndex(
2131-
[
2132-
datetime(2023, 9, 26),
2133-
datetime(2023, 9, 27),
2134-
datetime(2023, 9, 28),
2135-
datetime(2023, 9, 29),
2136-
],
2137-
freq="B",
2138-
),
2145+
index=exp_dti,
21392146
)
21402147
tm.assert_series_equal(result, expected)

pandas/tests/scalar/timedelta/test_arithmetic.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -309,13 +309,13 @@ def test_td_add_sub_td64_ndarray(self):
309309

310310
def test_td_add_sub_dt64_ndarray(self):
311311
td = Timedelta("1 day")
312-
other = pd.to_datetime(["2000-01-01"]).values
312+
other = np.array(["2000-01-01"], dtype="M8[ns]")
313313

314-
expected = pd.to_datetime(["2000-01-02"]).values
314+
expected = np.array(["2000-01-02"], dtype="M8[ns]")
315315
tm.assert_numpy_array_equal(td + other, expected)
316316
tm.assert_numpy_array_equal(other + td, expected)
317317

318-
expected = pd.to_datetime(["1999-12-31"]).values
318+
expected = np.array(["1999-12-31"], dtype="M8[ns]")
319319
tm.assert_numpy_array_equal(-td + other, expected)
320320
tm.assert_numpy_array_equal(other - td, expected)
321321

pandas/tests/series/methods/test_map.py

+19-13
Original file line numberDiff line numberDiff line change
@@ -418,38 +418,44 @@ def __missing__(self, key):
418418
tm.assert_series_equal(result, expected)
419419

420420

421-
def test_map_box():
421+
def test_map_box_dt64(unit):
422422
vals = [pd.Timestamp("2011-01-01"), pd.Timestamp("2011-01-02")]
423-
s = Series(vals)
424-
assert s.dtype == "datetime64[ns]"
423+
ser = Series(vals).dt.as_unit(unit)
424+
assert ser.dtype == f"datetime64[{unit}]"
425425
# boxed value must be Timestamp instance
426-
res = s.map(lambda x: f"{type(x).__name__}_{x.day}_{x.tz}")
426+
res = ser.map(lambda x: f"{type(x).__name__}_{x.day}_{x.tz}")
427427
exp = Series(["Timestamp_1_None", "Timestamp_2_None"])
428428
tm.assert_series_equal(res, exp)
429429

430+
431+
def test_map_box_dt64tz(unit):
430432
vals = [
431433
pd.Timestamp("2011-01-01", tz="US/Eastern"),
432434
pd.Timestamp("2011-01-02", tz="US/Eastern"),
433435
]
434-
s = Series(vals)
435-
assert s.dtype == "datetime64[ns, US/Eastern]"
436-
res = s.map(lambda x: f"{type(x).__name__}_{x.day}_{x.tz}")
436+
ser = Series(vals).dt.as_unit(unit)
437+
assert ser.dtype == f"datetime64[{unit}, US/Eastern]"
438+
res = ser.map(lambda x: f"{type(x).__name__}_{x.day}_{x.tz}")
437439
exp = Series(["Timestamp_1_US/Eastern", "Timestamp_2_US/Eastern"])
438440
tm.assert_series_equal(res, exp)
439441

442+
443+
def test_map_box_td64(unit):
440444
# timedelta
441445
vals = [pd.Timedelta("1 days"), pd.Timedelta("2 days")]
442-
s = Series(vals)
443-
assert s.dtype == "timedelta64[ns]"
444-
res = s.map(lambda x: f"{type(x).__name__}_{x.days}")
446+
ser = Series(vals).dt.as_unit(unit)
447+
assert ser.dtype == f"timedelta64[{unit}]"
448+
res = ser.map(lambda x: f"{type(x).__name__}_{x.days}")
445449
exp = Series(["Timedelta_1", "Timedelta_2"])
446450
tm.assert_series_equal(res, exp)
447451

452+
453+
def test_map_box_period():
448454
# period
449455
vals = [pd.Period("2011-01-01", freq="M"), pd.Period("2011-01-02", freq="M")]
450-
s = Series(vals)
451-
assert s.dtype == "Period[M]"
452-
res = s.map(lambda x: f"{type(x).__name__}_{x.freqstr}")
456+
ser = Series(vals)
457+
assert ser.dtype == "Period[M]"
458+
res = ser.map(lambda x: f"{type(x).__name__}_{x.freqstr}")
453459
exp = Series(["Period_M", "Period_M"])
454460
tm.assert_series_equal(res, exp)
455461

pandas/tests/series/methods/test_quantile.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ def test_quantile(self, datetime_series):
4848
with pytest.raises(ValueError, match=msg):
4949
s.quantile(percentile_array)
5050

51-
def test_quantile_multi(self, datetime_series):
51+
def test_quantile_multi(self, datetime_series, unit):
52+
datetime_series.index = datetime_series.index.as_unit(unit)
5253
qs = [0.1, 0.9]
5354
result = datetime_series.quantile(qs)
5455
expected = Series(
@@ -68,6 +69,7 @@ def test_quantile_multi(self, datetime_series):
6869
[Timestamp("2000-01-10 19:12:00"), Timestamp("2000-01-10 19:12:00")],
6970
index=[0.2, 0.2],
7071
name="xxx",
72+
dtype=f"M8[{unit}]",
7173
)
7274
tm.assert_series_equal(result, expected)
7375

pandas/tests/series/methods/test_tz_localize.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,11 @@ def test_series_tz_localize_matching_index(self):
7070
["foo", "invalid"],
7171
],
7272
)
73-
def test_tz_localize_nonexistent(self, warsaw, method, exp):
73+
def test_tz_localize_nonexistent(self, warsaw, method, exp, unit):
7474
# GH 8917
7575
tz = warsaw
7676
n = 60
77-
dti = date_range(start="2015-03-29 02:00:00", periods=n, freq="min")
77+
dti = date_range(start="2015-03-29 02:00:00", periods=n, freq="min", unit=unit)
7878
ser = Series(1, index=dti)
7979
df = ser.to_frame()
8080

@@ -101,7 +101,7 @@ def test_tz_localize_nonexistent(self, warsaw, method, exp):
101101

102102
else:
103103
result = ser.tz_localize(tz, nonexistent=method)
104-
expected = Series(1, index=DatetimeIndex([exp] * n, tz=tz))
104+
expected = Series(1, index=DatetimeIndex([exp] * n, tz=tz).as_unit(unit))
105105
tm.assert_series_equal(result, expected)
106106

107107
result = df.tz_localize(tz, nonexistent=method)

pandas/tests/series/methods/test_value_counts.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313

1414
class TestSeriesValueCounts:
15-
def test_value_counts_datetime(self):
15+
def test_value_counts_datetime(self, unit):
1616
# most dtypes are tested in tests/base
1717
values = [
1818
pd.Timestamp("2011-01-01 09:00"),
@@ -26,21 +26,21 @@ def test_value_counts_datetime(self):
2626
exp_idx = pd.DatetimeIndex(
2727
["2011-01-01 09:00", "2011-01-01 11:00", "2011-01-01 10:00"],
2828
name="xxx",
29-
)
29+
).as_unit(unit)
3030
exp = Series([3, 2, 1], index=exp_idx, name="count")
3131

32-
ser = Series(values, name="xxx")
32+
ser = Series(values, name="xxx").dt.as_unit(unit)
3333
tm.assert_series_equal(ser.value_counts(), exp)
3434
# check DatetimeIndex outputs the same result
35-
idx = pd.DatetimeIndex(values, name="xxx")
35+
idx = pd.DatetimeIndex(values, name="xxx").as_unit(unit)
3636
tm.assert_series_equal(idx.value_counts(), exp)
3737

3838
# normalize
3939
exp = Series(np.array([3.0, 2.0, 1]) / 6.0, index=exp_idx, name="proportion")
4040
tm.assert_series_equal(ser.value_counts(normalize=True), exp)
4141
tm.assert_series_equal(idx.value_counts(normalize=True), exp)
4242

43-
def test_value_counts_datetime_tz(self):
43+
def test_value_counts_datetime_tz(self, unit):
4444
values = [
4545
pd.Timestamp("2011-01-01 09:00", tz="US/Eastern"),
4646
pd.Timestamp("2011-01-01 10:00", tz="US/Eastern"),
@@ -54,12 +54,12 @@ def test_value_counts_datetime_tz(self):
5454
["2011-01-01 09:00", "2011-01-01 11:00", "2011-01-01 10:00"],
5555
tz="US/Eastern",
5656
name="xxx",
57-
)
57+
).as_unit(unit)
5858
exp = Series([3, 2, 1], index=exp_idx, name="count")
5959

60-
ser = Series(values, name="xxx")
60+
ser = Series(values, name="xxx").dt.as_unit(unit)
6161
tm.assert_series_equal(ser.value_counts(), exp)
62-
idx = pd.DatetimeIndex(values, name="xxx")
62+
idx = pd.DatetimeIndex(values, name="xxx").as_unit(unit)
6363
tm.assert_series_equal(idx.value_counts(), exp)
6464

6565
exp = Series(np.array([3.0, 2.0, 1]) / 6.0, index=exp_idx, name="proportion")

pandas/tests/series/test_arithmetic.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -749,13 +749,17 @@ def test_series_add_aware_naive_raises(self):
749749
with pytest.raises(Exception, match=msg):
750750
ser_utc + ser
751751

752-
def test_datetime_understood(self):
752+
# TODO: belongs in tests/arithmetic?
753+
def test_datetime_understood(self, unit):
753754
# Ensures it doesn't fail to create the right series
754755
# reported in issue#16726
755-
series = Series(date_range("2012-01-01", periods=3))
756+
series = Series(date_range("2012-01-01", periods=3, unit=unit))
756757
offset = pd.offsets.DateOffset(days=6)
757758
result = series - offset
758-
expected = Series(pd.to_datetime(["2011-12-26", "2011-12-27", "2011-12-28"]))
759+
exp_dti = pd.to_datetime(["2011-12-26", "2011-12-27", "2011-12-28"]).as_unit(
760+
unit
761+
)
762+
expected = Series(exp_dti)
759763
tm.assert_series_equal(result, expected)
760764

761765
def test_align_date_objects_with_datetimeindex(self):

0 commit comments

Comments
 (0)