Skip to content

Commit 3b4b86b

Browse files
authored
CLN: Clean reductions/test_reductions.py (#32035)
1 parent cea4059 commit 3b4b86b

File tree

1 file changed

+66
-61
lines changed

1 file changed

+66
-61
lines changed

Diff for: pandas/tests/reductions/test_reductions.py

+66-61
Original file line numberDiff line numberDiff line change
@@ -66,60 +66,64 @@ def test_ops(self, opname, obj):
6666
expected = expected.astype("M8[ns]").astype("int64")
6767
assert result.value == expected
6868

69-
def test_nanops(self):
69+
@pytest.mark.parametrize("opname", ["max", "min"])
70+
def test_nanops(self, opname, index_or_series):
7071
# GH#7261
71-
for opname in ["max", "min"]:
72-
for klass in [Index, Series]:
73-
arg_op = "arg" + opname if klass is Index else "idx" + opname
74-
75-
obj = klass([np.nan, 2.0])
76-
assert getattr(obj, opname)() == 2.0
77-
78-
obj = klass([np.nan])
79-
assert pd.isna(getattr(obj, opname)())
80-
assert pd.isna(getattr(obj, opname)(skipna=False))
81-
82-
obj = klass([], dtype=object)
83-
assert pd.isna(getattr(obj, opname)())
84-
assert pd.isna(getattr(obj, opname)(skipna=False))
85-
86-
obj = klass([pd.NaT, datetime(2011, 11, 1)])
87-
# check DatetimeIndex monotonic path
88-
assert getattr(obj, opname)() == datetime(2011, 11, 1)
89-
assert getattr(obj, opname)(skipna=False) is pd.NaT
90-
91-
assert getattr(obj, arg_op)() == 1
92-
result = getattr(obj, arg_op)(skipna=False)
93-
if klass is Series:
94-
assert np.isnan(result)
95-
else:
96-
assert result == -1
97-
98-
obj = klass([pd.NaT, datetime(2011, 11, 1), pd.NaT])
99-
# check DatetimeIndex non-monotonic path
100-
assert getattr(obj, opname)(), datetime(2011, 11, 1)
101-
assert getattr(obj, opname)(skipna=False) is pd.NaT
102-
103-
assert getattr(obj, arg_op)() == 1
104-
result = getattr(obj, arg_op)(skipna=False)
105-
if klass is Series:
106-
assert np.isnan(result)
107-
else:
108-
assert result == -1
109-
110-
for dtype in ["M8[ns]", "datetime64[ns, UTC]"]:
111-
# cases with empty Series/DatetimeIndex
112-
obj = klass([], dtype=dtype)
113-
114-
assert getattr(obj, opname)() is pd.NaT
115-
assert getattr(obj, opname)(skipna=False) is pd.NaT
116-
117-
with pytest.raises(ValueError, match="empty sequence"):
118-
getattr(obj, arg_op)()
119-
with pytest.raises(ValueError, match="empty sequence"):
120-
getattr(obj, arg_op)(skipna=False)
121-
122-
# argmin/max
72+
klass = index_or_series
73+
arg_op = "arg" + opname if klass is Index else "idx" + opname
74+
75+
obj = klass([np.nan, 2.0])
76+
assert getattr(obj, opname)() == 2.0
77+
78+
obj = klass([np.nan])
79+
assert pd.isna(getattr(obj, opname)())
80+
assert pd.isna(getattr(obj, opname)(skipna=False))
81+
82+
obj = klass([], dtype=object)
83+
assert pd.isna(getattr(obj, opname)())
84+
assert pd.isna(getattr(obj, opname)(skipna=False))
85+
86+
obj = klass([pd.NaT, datetime(2011, 11, 1)])
87+
# check DatetimeIndex monotonic path
88+
assert getattr(obj, opname)() == datetime(2011, 11, 1)
89+
assert getattr(obj, opname)(skipna=False) is pd.NaT
90+
91+
assert getattr(obj, arg_op)() == 1
92+
result = getattr(obj, arg_op)(skipna=False)
93+
if klass is Series:
94+
assert np.isnan(result)
95+
else:
96+
assert result == -1
97+
98+
obj = klass([pd.NaT, datetime(2011, 11, 1), pd.NaT])
99+
# check DatetimeIndex non-monotonic path
100+
assert getattr(obj, opname)(), datetime(2011, 11, 1)
101+
assert getattr(obj, opname)(skipna=False) is pd.NaT
102+
103+
assert getattr(obj, arg_op)() == 1
104+
result = getattr(obj, arg_op)(skipna=False)
105+
if klass is Series:
106+
assert np.isnan(result)
107+
else:
108+
assert result == -1
109+
110+
@pytest.mark.parametrize("opname", ["max", "min"])
111+
@pytest.mark.parametrize("dtype", ["M8[ns]", "datetime64[ns, UTC]"])
112+
def test_nanops_empty_object(self, opname, index_or_series, dtype):
113+
klass = index_or_series
114+
arg_op = "arg" + opname if klass is Index else "idx" + opname
115+
116+
obj = klass([], dtype=dtype)
117+
118+
assert getattr(obj, opname)() is pd.NaT
119+
assert getattr(obj, opname)(skipna=False) is pd.NaT
120+
121+
with pytest.raises(ValueError, match="empty sequence"):
122+
getattr(obj, arg_op)()
123+
with pytest.raises(ValueError, match="empty sequence"):
124+
getattr(obj, arg_op)(skipna=False)
125+
126+
def test_argminmax(self):
123127
obj = Index(np.arange(5, dtype="int64"))
124128
assert obj.argmin() == 0
125129
assert obj.argmax() == 4
@@ -224,16 +228,17 @@ def test_minmax_timedelta64(self):
224228
assert idx.argmin() == 0
225229
assert idx.argmax() == 2
226230

227-
for op in ["min", "max"]:
228-
# Return NaT
229-
obj = TimedeltaIndex([])
230-
assert pd.isna(getattr(obj, op)())
231+
@pytest.mark.parametrize("op", ["min", "max"])
232+
def test_minmax_timedelta_empty_or_na(self, op):
233+
# Return NaT
234+
obj = TimedeltaIndex([])
235+
assert getattr(obj, op)() is pd.NaT
231236

232-
obj = TimedeltaIndex([pd.NaT])
233-
assert pd.isna(getattr(obj, op)())
237+
obj = TimedeltaIndex([pd.NaT])
238+
assert getattr(obj, op)() is pd.NaT
234239

235-
obj = TimedeltaIndex([pd.NaT, pd.NaT, pd.NaT])
236-
assert pd.isna(getattr(obj, op)())
240+
obj = TimedeltaIndex([pd.NaT, pd.NaT, pd.NaT])
241+
assert getattr(obj, op)() is pd.NaT
237242

238243
def test_numpy_minmax_timedelta64(self):
239244
td = timedelta_range("16815 days", "16820 days", freq="D")

0 commit comments

Comments
 (0)