Skip to content

Commit 8e0411f

Browse files
authored
TST: parametrize over unit (#55806)
1 parent 0cdb37c commit 8e0411f

9 files changed

+162
-135
lines changed

pandas/conftest.py

+8
Original file line numberDiff line numberDiff line change
@@ -1295,6 +1295,14 @@ def utc_fixture(request):
12951295
utc_fixture2 = utc_fixture
12961296

12971297

1298+
@pytest.fixture(params=["s", "ms", "us", "ns"])
1299+
def unit(request):
1300+
"""
1301+
datetime64 units we support.
1302+
"""
1303+
return request.param
1304+
1305+
12981306
# ----------------------------------------------------------------
12991307
# Dtypes
13001308
# ----------------------------------------------------------------

pandas/tests/arithmetic/test_datetime64.py

+49-39
Original file line numberDiff line numberDiff line change
@@ -987,21 +987,21 @@ def test_dt64arr_sub_timestamp_tzaware(self, box_with_array):
987987
tm.assert_equal(ser - ts, expected)
988988
tm.assert_equal(ts - ser, -expected)
989989

990-
def test_dt64arr_sub_NaT(self, box_with_array):
990+
def test_dt64arr_sub_NaT(self, box_with_array, unit):
991991
# GH#18808
992-
dti = DatetimeIndex([NaT, Timestamp("19900315")])
992+
dti = DatetimeIndex([NaT, Timestamp("19900315")]).as_unit(unit)
993993
ser = tm.box_expected(dti, box_with_array)
994994

995995
result = ser - NaT
996-
expected = Series([NaT, NaT], dtype="timedelta64[ns]")
996+
expected = Series([NaT, NaT], dtype=f"timedelta64[{unit}]")
997997
expected = tm.box_expected(expected, box_with_array)
998998
tm.assert_equal(result, expected)
999999

10001000
dti_tz = dti.tz_localize("Asia/Tokyo")
10011001
ser_tz = tm.box_expected(dti_tz, box_with_array)
10021002

10031003
result = ser_tz - NaT
1004-
expected = Series([NaT, NaT], dtype="timedelta64[ns]")
1004+
expected = Series([NaT, NaT], dtype=f"timedelta64[{unit}]")
10051005
expected = tm.box_expected(expected, box_with_array)
10061006
tm.assert_equal(result, expected)
10071007

@@ -1872,15 +1872,15 @@ def test_operators_datetimelike_invalid(
18721872
# Smoke test
18731873
op(arg2)
18741874

1875-
def test_sub_single_tz(self):
1875+
def test_sub_single_tz(self, unit):
18761876
# GH#12290
1877-
s1 = Series([Timestamp("2016-02-10", tz="America/Sao_Paulo")])
1878-
s2 = Series([Timestamp("2016-02-08", tz="America/Sao_Paulo")])
1877+
s1 = Series([Timestamp("2016-02-10", tz="America/Sao_Paulo")]).dt.as_unit(unit)
1878+
s2 = Series([Timestamp("2016-02-08", tz="America/Sao_Paulo")]).dt.as_unit(unit)
18791879
result = s1 - s2
1880-
expected = Series([Timedelta("2days")])
1880+
expected = Series([Timedelta("2days")]).dt.as_unit(unit)
18811881
tm.assert_series_equal(result, expected)
18821882
result = s2 - s1
1883-
expected = Series([Timedelta("-2days")])
1883+
expected = Series([Timedelta("-2days")]).dt.as_unit(unit)
18841884
tm.assert_series_equal(result, expected)
18851885

18861886
def test_dt64tz_series_sub_dtitz(self):
@@ -1895,13 +1895,19 @@ def test_dt64tz_series_sub_dtitz(self):
18951895
res = ser - dti
18961896
tm.assert_series_equal(res, expected)
18971897

1898-
def test_sub_datetime_compat(self):
1898+
def test_sub_datetime_compat(self, unit):
18991899
# see GH#14088
1900-
s = Series([datetime(2016, 8, 23, 12, tzinfo=pytz.utc), NaT])
1900+
ser = Series([datetime(2016, 8, 23, 12, tzinfo=pytz.utc), NaT]).dt.as_unit(unit)
19011901
dt = datetime(2016, 8, 22, 12, tzinfo=pytz.utc)
1902-
exp = Series([Timedelta("1 days"), NaT])
1903-
tm.assert_series_equal(s - dt, exp)
1904-
tm.assert_series_equal(s - Timestamp(dt), exp)
1902+
exp_unit = unit
1903+
if unit in ["s", "ms"]:
1904+
# The datetime object has "us" so we upcast
1905+
exp_unit = "us"
1906+
exp = Series([Timedelta("1 days"), NaT]).dt.as_unit(exp_unit)
1907+
result = ser - dt
1908+
tm.assert_series_equal(result, exp)
1909+
result2 = ser - Timestamp(dt)
1910+
tm.assert_series_equal(result2, exp)
19051911

19061912
def test_dt64_series_add_mixed_tick_DateOffset(self):
19071913
# GH#4532
@@ -1922,11 +1928,11 @@ def test_dt64_series_add_mixed_tick_DateOffset(self):
19221928
)
19231929
tm.assert_series_equal(result, expected)
19241930

1925-
def test_datetime64_ops_nat(self):
1931+
def test_datetime64_ops_nat(self, unit):
19261932
# GH#11349
1927-
datetime_series = Series([NaT, Timestamp("19900315")])
1928-
nat_series_dtype_timestamp = Series([NaT, NaT], dtype="datetime64[ns]")
1929-
single_nat_dtype_datetime = Series([NaT], dtype="datetime64[ns]")
1933+
datetime_series = Series([NaT, Timestamp("19900315")]).dt.as_unit(unit)
1934+
nat_series_dtype_timestamp = Series([NaT, NaT], dtype=f"datetime64[{unit}]")
1935+
single_nat_dtype_datetime = Series([NaT], dtype=f"datetime64[{unit}]")
19301936

19311937
# subtraction
19321938
tm.assert_series_equal(-NaT + datetime_series, nat_series_dtype_timestamp)
@@ -2097,16 +2103,16 @@ def test_dti_sub_tdi(self, tz_naive_fixture):
20972103
with pytest.raises(TypeError, match=msg):
20982104
tdi.values - dti
20992105

2100-
def test_dti_isub_tdi(self, tz_naive_fixture):
2106+
def test_dti_isub_tdi(self, tz_naive_fixture, unit):
21012107
# GH#17558
21022108
tz = tz_naive_fixture
2103-
dti = DatetimeIndex([Timestamp("2017-01-01", tz=tz)] * 10)
2104-
tdi = pd.timedelta_range("0 days", periods=10)
2105-
expected = date_range("2017-01-01", periods=10, tz=tz, freq="-1D")
2109+
dti = DatetimeIndex([Timestamp("2017-01-01", tz=tz)] * 10).as_unit(unit)
2110+
tdi = pd.timedelta_range("0 days", periods=10, unit=unit)
2111+
expected = date_range("2017-01-01", periods=10, tz=tz, freq="-1D", unit=unit)
21062112
expected = expected._with_freq(None)
21072113

21082114
# isub with TimedeltaIndex
2109-
result = DatetimeIndex([Timestamp("2017-01-01", tz=tz)] * 10)
2115+
result = DatetimeIndex([Timestamp("2017-01-01", tz=tz)] * 10).as_unit(unit)
21102116
result -= tdi
21112117
tm.assert_index_equal(result, expected)
21122118

@@ -2124,7 +2130,7 @@ def test_dti_isub_tdi(self, tz_naive_fixture):
21242130
tdi -= dti
21252131

21262132
# isub with timedelta64 array
2127-
result = DatetimeIndex([Timestamp("2017-01-01", tz=tz)] * 10)
2133+
result = DatetimeIndex([Timestamp("2017-01-01", tz=tz)] * 10).as_unit(unit)
21282134
result -= tdi.values
21292135
tm.assert_index_equal(result, expected)
21302136

@@ -2158,13 +2164,13 @@ def test_dta_add_sub_index(self, tz_naive_fixture):
21582164
expected = dti - tdi
21592165
tm.assert_index_equal(result, expected)
21602166

2161-
def test_sub_dti_dti(self):
2167+
def test_sub_dti_dti(self, unit):
21622168
# previously performed setop (deprecated in 0.16.0), now changed to
21632169
# return subtraction -> TimeDeltaIndex (GH ...)
21642170

2165-
dti = date_range("20130101", periods=3)
2166-
dti_tz = date_range("20130101", periods=3).tz_localize("US/Eastern")
2167-
expected = TimedeltaIndex([0, 0, 0])
2171+
dti = date_range("20130101", periods=3, unit=unit)
2172+
dti_tz = date_range("20130101", periods=3, unit=unit).tz_localize("US/Eastern")
2173+
expected = TimedeltaIndex([0, 0, 0]).as_unit(unit)
21682174

21692175
result = dti - dti
21702176
tm.assert_index_equal(result, expected)
@@ -2183,16 +2189,16 @@ def test_sub_dti_dti(self):
21832189
tm.assert_index_equal(dti, expected)
21842190

21852191
# different length raises ValueError
2186-
dti1 = date_range("20130101", periods=3)
2187-
dti2 = date_range("20130101", periods=4)
2192+
dti1 = date_range("20130101", periods=3, unit=unit)
2193+
dti2 = date_range("20130101", periods=4, unit=unit)
21882194
msg = "cannot add indices of unequal length"
21892195
with pytest.raises(ValueError, match=msg):
21902196
dti1 - dti2
21912197

21922198
# NaN propagation
2193-
dti1 = DatetimeIndex(["2012-01-01", np.nan, "2012-01-03"])
2194-
dti2 = DatetimeIndex(["2012-01-02", "2012-01-03", np.nan])
2195-
expected = TimedeltaIndex(["1 days", np.nan, np.nan])
2199+
dti1 = DatetimeIndex(["2012-01-01", np.nan, "2012-01-03"]).as_unit(unit)
2200+
dti2 = DatetimeIndex(["2012-01-02", "2012-01-03", np.nan]).as_unit(unit)
2201+
expected = TimedeltaIndex(["1 days", np.nan, np.nan]).as_unit(unit)
21962202
result = dti2 - dti1
21972203
tm.assert_index_equal(result, expected)
21982204

@@ -2295,17 +2301,17 @@ def test_ops_nat_mixed_datetime64_timedelta64(self):
22952301
nat_series_dtype_timestamp,
22962302
)
22972303

2298-
def test_ufunc_coercions(self):
2299-
idx = date_range("2011-01-01", periods=3, freq="2D", name="x")
2304+
def test_ufunc_coercions(self, unit):
2305+
idx = date_range("2011-01-01", periods=3, freq="2D", name="x", unit=unit)
23002306

23012307
delta = np.timedelta64(1, "D")
2302-
exp = date_range("2011-01-02", periods=3, freq="2D", name="x")
2308+
exp = date_range("2011-01-02", periods=3, freq="2D", name="x", unit=unit)
23032309
for result in [idx + delta, np.add(idx, delta)]:
23042310
assert isinstance(result, DatetimeIndex)
23052311
tm.assert_index_equal(result, exp)
23062312
assert result.freq == "2D"
23072313

2308-
exp = date_range("2010-12-31", periods=3, freq="2D", name="x")
2314+
exp = date_range("2010-12-31", periods=3, freq="2D", name="x", unit=unit)
23092315

23102316
for result in [idx - delta, np.subtract(idx, delta)]:
23112317
assert isinstance(result, DatetimeIndex)
@@ -2318,13 +2324,17 @@ def test_ufunc_coercions(self):
23182324
delta = np.array(
23192325
[np.timedelta64(1, "D"), np.timedelta64(2, "D"), np.timedelta64(3, "D")]
23202326
)
2321-
exp = DatetimeIndex(["2011-01-02", "2011-01-05", "2011-01-08"], name="x")
2327+
exp = DatetimeIndex(
2328+
["2011-01-02", "2011-01-05", "2011-01-08"], name="x"
2329+
).as_unit(unit)
23222330

23232331
for result in [idx + delta, np.add(idx, delta)]:
23242332
tm.assert_index_equal(result, exp)
23252333
assert result.freq == exp.freq
23262334

2327-
exp = DatetimeIndex(["2010-12-31", "2011-01-01", "2011-01-02"], name="x")
2335+
exp = DatetimeIndex(
2336+
["2010-12-31", "2011-01-01", "2011-01-02"], name="x"
2337+
).as_unit(unit)
23282338
for result in [idx - delta, np.subtract(idx, delta)]:
23292339
assert isinstance(result, DatetimeIndex)
23302340
tm.assert_index_equal(result, exp)

pandas/tests/arithmetic/test_timedelta64.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -336,17 +336,17 @@ def test_subtraction_ops(self):
336336

337337
result = tdi - td
338338
expected = TimedeltaIndex(["0 days", NaT, "1 days"], name="foo")
339-
tm.assert_index_equal(result, expected, check_names=False)
339+
tm.assert_index_equal(result, expected)
340340

341341
result = td - tdi
342342
expected = TimedeltaIndex(["0 days", NaT, "-1 days"], name="foo")
343-
tm.assert_index_equal(result, expected, check_names=False)
343+
tm.assert_index_equal(result, expected)
344344

345345
result = dti - td
346346
expected = DatetimeIndex(
347347
["20121231", "20130101", "20130102"], freq="D", name="bar"
348348
)
349-
tm.assert_index_equal(result, expected, check_names=False)
349+
tm.assert_index_equal(result, expected)
350350

351351
result = dt - tdi
352352
expected = DatetimeIndex(["20121231", NaT, "20121230"], name="foo")

pandas/tests/base/test_conversion.py

+17-11
Original file line numberDiff line numberDiff line change
@@ -141,35 +141,41 @@ def test_categorial_datetimelike(self, method):
141141
result = method(i)[0]
142142
assert isinstance(result, Timestamp)
143143

144-
def test_iter_box(self):
144+
def test_iter_box_dt64(self, unit):
145145
vals = [Timestamp("2011-01-01"), Timestamp("2011-01-02")]
146-
s = Series(vals)
147-
assert s.dtype == "datetime64[ns]"
148-
for res, exp in zip(s, vals):
146+
ser = Series(vals).dt.as_unit(unit)
147+
assert ser.dtype == f"datetime64[{unit}]"
148+
for res, exp in zip(ser, vals):
149149
assert isinstance(res, Timestamp)
150150
assert res.tz is None
151151
assert res == exp
152+
assert res.unit == unit
152153

154+
def test_iter_box_dt64tz(self, unit):
153155
vals = [
154156
Timestamp("2011-01-01", tz="US/Eastern"),
155157
Timestamp("2011-01-02", tz="US/Eastern"),
156158
]
157-
s = Series(vals)
159+
ser = Series(vals).dt.as_unit(unit)
158160

159-
assert s.dtype == "datetime64[ns, US/Eastern]"
160-
for res, exp in zip(s, vals):
161+
assert ser.dtype == f"datetime64[{unit}, US/Eastern]"
162+
for res, exp in zip(ser, vals):
161163
assert isinstance(res, Timestamp)
162164
assert res.tz == exp.tz
163165
assert res == exp
166+
assert res.unit == unit
164167

168+
def test_iter_box_timedelta64(self, unit):
165169
# timedelta
166170
vals = [Timedelta("1 days"), Timedelta("2 days")]
167-
s = Series(vals)
168-
assert s.dtype == "timedelta64[ns]"
169-
for res, exp in zip(s, vals):
171+
ser = Series(vals).dt.as_unit(unit)
172+
assert ser.dtype == f"timedelta64[{unit}]"
173+
for res, exp in zip(ser, vals):
170174
assert isinstance(res, Timedelta)
171175
assert res == exp
176+
assert res.unit == unit
172177

178+
def test_iter_box_period(self):
173179
# period
174180
vals = [pd.Period("2011-01-01", freq="M"), pd.Period("2011-01-02", freq="M")]
175181
s = Series(vals)
@@ -370,7 +376,7 @@ def test_to_numpy_copy(arr, as_series):
370376

371377

372378
@pytest.mark.parametrize("as_series", [True, False])
373-
def test_to_numpy_dtype(as_series):
379+
def test_to_numpy_dtype(as_series, unit):
374380
tz = "US/Eastern"
375381
obj = pd.DatetimeIndex(["2000", "2001"], tz=tz)
376382
if as_series:

0 commit comments

Comments
 (0)