@@ -1164,63 +1164,117 @@ def any(self, axis=None):
1164
1164
1165
1165
1166
1166
class TestCanHoldElement :
1167
- @pytest .mark .parametrize (
1168
- "value, dtype" ,
1169
- [
1170
- (1 , "i8" ),
1171
- (1.0 , "f8" ),
1172
- (2 ** 63 , "f8" ),
1173
- (1j , "complex128" ),
1174
- (2 ** 63 , "complex128" ),
1175
- (True , "bool" ),
1176
- (np .timedelta64 (20 , "ns" ), "<m8[ns]" ),
1177
- (np .datetime64 (20 , "ns" ), "<M8[ns]" ),
1178
- ],
1179
- )
1180
- @pytest .mark .parametrize (
1167
+
1168
+ ops = pytest .mark .parametrize (
1181
1169
"op" ,
1182
1170
[
1183
1171
operator .add ,
1184
- operator .sub ,
1185
- operator .mul ,
1186
- operator .truediv ,
1187
1172
operator .mod ,
1173
+ operator .mul ,
1188
1174
operator .pow ,
1175
+ operator .sub ,
1176
+ operator .truediv ,
1189
1177
],
1190
1178
ids = lambda x : x .__name__ ,
1191
1179
)
1192
- def test_binop_other (self , op , value , dtype ):
1193
- skip = {
1194
- (operator .add , "bool" ),
1195
- (operator .sub , "bool" ),
1196
- (operator .mul , "bool" ),
1197
- (operator .truediv , "bool" ),
1198
- (operator .mod , "i8" ),
1199
- (operator .mod , "complex128" ),
1200
- (operator .pow , "bool" ),
1201
- }
1202
- if (op , dtype ) in skip :
1203
- pytest .skip ("Invalid combination {},{}" .format (op , dtype ))
1180
+
1181
+ @ops
1182
+ @pytest .mark .parametrize ("value" , [True ])
1183
+ def test_binop_bool (self , op , value ):
1184
+ dtype = "bool"
1185
+
1186
+ if op in [
1187
+ operator .add ,
1188
+ operator .mul ,
1189
+ operator .pow ,
1190
+ operator .sub ,
1191
+ operator .truediv ,
1192
+ ]:
1193
+ pytest .skip (f"Invalid combination { op } ,{ dtype } " )
1194
+
1195
+ e = DummyElement (value , dtype )
1196
+ s = pd .DataFrame ({"A" : [e .value , e .value ]}, dtype = e .dtype )
1197
+
1198
+ result = op (s , e .value ).dtypes
1199
+ expected = op (s , value ).dtypes
1200
+ tm .assert_series_equal (result , expected )
1201
+
1202
+ @ops
1203
+ @pytest .mark .parametrize ("value" , [1j , 2 ** 63 ])
1204
+ def test_binop_complex128 (self , op , value ):
1205
+ dtype = "complex128"
1206
+
1207
+ if op == operator .mod :
1208
+ pytest .skip (f"Invalid combination { op } ,{ dtype } " )
1209
+
1210
+ e = DummyElement (value , dtype )
1211
+ s = pd .DataFrame ({"A" : [e .value , e .value ]}, dtype = e .dtype )
1212
+
1213
+ result = op (s , e .value ).dtypes
1214
+ expected = op (s , value ).dtypes
1215
+ tm .assert_series_equal (result , expected )
1216
+
1217
+ @ops
1218
+ @pytest .mark .parametrize ("value" , [1.0 , 2 ** 63 ])
1219
+ def test_binop_f8 (self , op , value ):
1220
+ dtype = "f8"
1204
1221
1205
1222
e = DummyElement (value , dtype )
1206
1223
s = pd .DataFrame ({"A" : [e .value , e .value ]}, dtype = e .dtype )
1207
1224
1208
- invalid = {
1209
- (operator .pow , "<M8[ns]" ),
1210
- (operator .mod , "<M8[ns]" ),
1211
- (operator .truediv , "<M8[ns]" ),
1212
- (operator .mul , "<M8[ns]" ),
1213
- (operator .add , "<M8[ns]" ),
1214
- (operator .pow , "<m8[ns]" ),
1215
- (operator .mul , "<m8[ns]" ),
1216
- }
1217
-
1218
- if (op , dtype ) in invalid :
1225
+ result = op (s , e .value ).dtypes
1226
+ expected = op (s , value ).dtypes
1227
+ tm .assert_series_equal (result , expected )
1228
+
1229
+ @ops
1230
+ @pytest .mark .parametrize ("value" , [1 ])
1231
+ def test_binop_i8 (self , op , value ):
1232
+ dtype = "i8"
1233
+
1234
+ if op == operator .mod :
1235
+ pytest .skip (f"Invalid combination { op } ,{ dtype } " )
1236
+
1237
+ e = DummyElement (value , dtype )
1238
+ s = pd .DataFrame ({"A" : [e .value , e .value ]}, dtype = e .dtype )
1239
+
1240
+ result = op (s , e .value ).dtypes
1241
+ expected = op (s , value ).dtypes
1242
+ tm .assert_series_equal (result , expected )
1243
+
1244
+ @ops
1245
+ @pytest .mark .parametrize ("value" , [np .timedelta64 (20 , "ns" )])
1246
+ def test_binop_m (self , op , value ):
1247
+ dtype = "<m8[ns]"
1248
+
1249
+ e = DummyElement (value , dtype )
1250
+ s = pd .DataFrame ({"A" : [e .value , e .value ]}, dtype = e .dtype )
1251
+
1252
+ if op in [operator .mul , operator .pow ]:
1253
+ with pytest .raises (TypeError ):
1254
+ op (s , e .value )
1255
+ else :
1256
+ result = op (s , e .value ).dtypes
1257
+ expected = op (s , value ).dtypes
1258
+ tm .assert_series_equal (result , expected )
1259
+
1260
+ @ops
1261
+ @pytest .mark .parametrize ("value" , [np .datetime64 (20 , "ns" )])
1262
+ def test_binop_m_capitalized (self , op , value ):
1263
+ dtype = "<M8[ns]"
1264
+
1265
+ e = DummyElement (value , dtype )
1266
+ s = pd .DataFrame ({"A" : [e .value , e .value ]}, dtype = e .dtype )
1267
+
1268
+ if op in [
1269
+ operator .add ,
1270
+ operator .mod ,
1271
+ operator .mul ,
1272
+ operator .pow ,
1273
+ operator .truediv ,
1274
+ ]:
1219
1275
with pytest .raises (TypeError ):
1220
1276
op (s , e .value )
1221
1277
else :
1222
- # FIXME: Since dispatching to Series, this test no longer
1223
- # asserts anything meaningful
1224
1278
result = op (s , e .value ).dtypes
1225
1279
expected = op (s , value ).dtypes
1226
1280
tm .assert_series_equal (result , expected )
0 commit comments