@@ -66,60 +66,64 @@ def test_ops(self, opname, obj):
66
66
expected = expected .astype ("M8[ns]" ).astype ("int64" )
67
67
assert result .value == expected
68
68
69
- def test_nanops (self ):
69
+ @pytest .mark .parametrize ("opname" , ["max" , "min" ])
70
+ def test_nanops (self , opname , index_or_series ):
70
71
# 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 ):
123
127
obj = Index (np .arange (5 , dtype = "int64" ))
124
128
assert obj .argmin () == 0
125
129
assert obj .argmax () == 4
@@ -224,16 +228,17 @@ def test_minmax_timedelta64(self):
224
228
assert idx .argmin () == 0
225
229
assert idx .argmax () == 2
226
230
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
231
236
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
234
239
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
237
242
238
243
def test_numpy_minmax_timedelta64 (self ):
239
244
td = timedelta_range ("16815 days" , "16820 days" , freq = "D" )
0 commit comments