Skip to content

Commit a3b045c

Browse files
author
MomIsBestFriend
committed
Refactored "test_binop_other"
1 parent a72eef5 commit a3b045c

File tree

1 file changed

+96
-42
lines changed

1 file changed

+96
-42
lines changed

pandas/tests/internals/test_internals.py

+96-42
Original file line numberDiff line numberDiff line change
@@ -1164,63 +1164,117 @@ def any(self, axis=None):
11641164

11651165

11661166
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(
11811169
"op",
11821170
[
11831171
operator.add,
1184-
operator.sub,
1185-
operator.mul,
1186-
operator.truediv,
11871172
operator.mod,
1173+
operator.mul,
11881174
operator.pow,
1175+
operator.sub,
1176+
operator.truediv,
11891177
],
11901178
ids=lambda x: x.__name__,
11911179
)
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"
12041221

12051222
e = DummyElement(value, dtype)
12061223
s = pd.DataFrame({"A": [e.value, e.value]}, dtype=e.dtype)
12071224

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+
]:
12191275
with pytest.raises(TypeError):
12201276
op(s, e.value)
12211277
else:
1222-
# FIXME: Since dispatching to Series, this test no longer
1223-
# asserts anything meaningful
12241278
result = op(s, e.value).dtypes
12251279
expected = op(s, value).dtypes
12261280
tm.assert_series_equal(result, expected)

0 commit comments

Comments
 (0)