Skip to content

Commit b6cdcf1

Browse files
committed
fix(series): arithmetics for Series[Any]
1 parent 966aebf commit b6cdcf1

File tree

7 files changed

+356
-331
lines changed

7 files changed

+356
-331
lines changed

pandas-stubs/core/series.pyi

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2705,13 +2705,9 @@ class Series(IndexOpsMixin[S1], NDFrame):
27052705
axis: int = 0,
27062706
) -> TimedeltaSeries: ...
27072707
@overload
2708-
def __rsub__( # type: ignore[misc]
2708+
def __rsub__( # type: ignore[overload-overlap]
27092709
self: Series[Never],
2710-
other: datetime | np.datetime64 | np_ndarray_dt | TimestampSeries,
2711-
) -> TimedeltaSeries: ...
2712-
@overload
2713-
def __rsub__(
2714-
self: Series[Never], other: complex | _ListLike | Series
2710+
other: complex | datetime | np.datetime64 | _ListLike | Series,
27152711
) -> Series: ...
27162712
@overload
27172713
def __rsub__(self, other: Series[Never]) -> Series: ...
@@ -2779,17 +2775,13 @@ class Series(IndexOpsMixin[S1], NDFrame):
27792775
),
27802776
) -> Series[complex]: ...
27812777
@overload
2782-
def rsub(
2783-
self: Series[Never],
2784-
other: datetime | np.datetime64 | np_ndarray_dt | TimestampSeries,
2785-
level: Level | None = None,
2786-
fill_value: float | None = None,
2787-
axis: int = 0,
2778+
def __rsub__(
2779+
self: Series[Timestamp], other: datetime | np.datetime64 | np_ndarray_dt
27882780
) -> TimedeltaSeries: ...
27892781
@overload
27902782
def rsub(
27912783
self: Series[Never],
2792-
other: complex | _ListLike | Series,
2784+
other: complex | datetime | np.datetime64 | _ListLike | Series,
27932785
level: Level | None = None,
27942786
fill_value: float | None = None,
27952787
axis: int = 0,

tests/series/arithmetic/str/test_add.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919

2020
def test_add_py_scalar() -> None:
21-
"""Testpd.Series[str]+ Python native 'scalar's"""
21+
"""Test pd.Series[str] + Python native 'scalar's"""
2222
i = 4
2323
r0 = "right"
2424

@@ -40,7 +40,7 @@ def test_add_py_scalar() -> None:
4040

4141

4242
def test_add_py_sequence() -> None:
43-
"""Testpd.Series[str]+ Python native sequence"""
43+
"""Test pd.Series[str] + Python native sequence"""
4444
i = [3, 5, 8]
4545
r0 = ["a", "bc", "def"]
4646
r1 = tuple(r0)
@@ -67,7 +67,7 @@ def test_add_py_sequence() -> None:
6767

6868

6969
def test_add_numpy_array() -> None:
70-
"""Testpd.Series[str]+ numpy array"""
70+
"""Test pd.Series[str] + numpy array"""
7171
i = np.array([3, 5, 8], np.int64)
7272
r0 = np.array(["a", "bc", "def"], np.str_)
7373

@@ -101,7 +101,7 @@ def test_add_numpy_array() -> None:
101101

102102

103103
def test_add_pd_series() -> None:
104-
"""Testpd.Series[str]+ pandas series"""
104+
"""Test pd.Series[str] + pandas series"""
105105
i = pd.Series([3, 5, 8])
106106
r0 = pd.Series(["a", "bc", "def"])
107107

tests/series/arithmetic/test_add.py

Lines changed: 81 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -5,122 +5,127 @@
55

66
from tests import check
77

8-
left = pd.DataFrame({"a": [1, 2, 3]})["a"] # left operand
8+
left_i = pd.DataFrame({"a": [1, 2, 3]})["a"] # left operand
99

1010

11-
def test_add_py_scalar() -> None:
12-
"""Test pd.Series[Any] + Python native scalars"""
11+
def test_add_i_py_scalar() -> None:
12+
"""Test pd.Series[Any] (int) + Python native scalars"""
1313
b, i, f, c = True, 1, 1.0, 1j
1414

15-
check(assert_type(left + b, pd.Series), pd.Series)
16-
check(assert_type(left + i, pd.Series), pd.Series)
17-
check(assert_type(left + f, pd.Series), pd.Series)
18-
check(assert_type(left + c, pd.Series), pd.Series)
15+
check(assert_type(left_i + b, pd.Series), pd.Series)
16+
check(assert_type(left_i + i, pd.Series), pd.Series)
17+
check(assert_type(left_i + f, pd.Series), pd.Series)
18+
check(assert_type(left_i + c, pd.Series), pd.Series)
1919

20-
check(assert_type(b + left, pd.Series), pd.Series)
21-
check(assert_type(i + left, pd.Series), pd.Series)
22-
check(assert_type(f + left, pd.Series), pd.Series)
23-
check(assert_type(c + left, pd.Series), pd.Series)
20+
check(assert_type(b + left_i, pd.Series), pd.Series)
21+
check(assert_type(i + left_i, pd.Series), pd.Series)
22+
check(assert_type(f + left_i, pd.Series), pd.Series)
23+
check(assert_type(c + left_i, pd.Series), pd.Series)
2424

25-
check(assert_type(left.add(b), pd.Series), pd.Series)
26-
check(assert_type(left.add(i), pd.Series), pd.Series)
27-
check(assert_type(left.add(f), pd.Series), pd.Series)
28-
check(assert_type(left.add(c), pd.Series), pd.Series)
25+
check(assert_type(left_i.add(b), pd.Series), pd.Series)
26+
check(assert_type(left_i.add(i), pd.Series), pd.Series)
27+
check(assert_type(left_i.add(f), pd.Series), pd.Series)
28+
check(assert_type(left_i.add(c), pd.Series), pd.Series)
2929

30-
check(assert_type(left.radd(b), pd.Series), pd.Series)
31-
check(assert_type(left.radd(i), pd.Series), pd.Series)
32-
check(assert_type(left.radd(f), pd.Series), pd.Series)
33-
check(assert_type(left.radd(c), pd.Series), pd.Series)
30+
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
31+
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
32+
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
33+
check(assert_type(left_i.radd(c), pd.Series), pd.Series)
3434

3535

36-
def test_add_py_sequence() -> None:
37-
"""Test pd.Series[Any] + Python native sequence"""
36+
def test_add_i_py_sequence() -> None:
37+
"""Test pd.Series[Any] (int) + Python native sequence"""
3838
b, i, f, c = [True, False, True], [2, 3, 5], [1.0, 2.0, 3.0], [1j, 1j, 4j]
3939

40-
check(assert_type(left + b, pd.Series), pd.Series)
41-
check(assert_type(left + i, pd.Series), pd.Series)
42-
check(assert_type(left + f, pd.Series), pd.Series)
43-
check(assert_type(left + c, pd.Series), pd.Series)
40+
check(assert_type(left_i + b, pd.Series), pd.Series)
41+
check(assert_type(left_i + i, pd.Series), pd.Series)
42+
check(assert_type(left_i + f, pd.Series), pd.Series)
43+
check(assert_type(left_i + c, pd.Series), pd.Series)
4444

45-
check(assert_type(b + left, pd.Series), pd.Series)
46-
check(assert_type(i + left, pd.Series), pd.Series)
47-
check(assert_type(f + left, pd.Series), pd.Series)
48-
check(assert_type(c + left, pd.Series), pd.Series)
45+
check(assert_type(b + left_i, pd.Series), pd.Series)
46+
check(assert_type(i + left_i, pd.Series), pd.Series)
47+
check(assert_type(f + left_i, pd.Series), pd.Series)
48+
check(assert_type(c + left_i, pd.Series), pd.Series)
4949

50-
check(assert_type(left.add(b), pd.Series), pd.Series)
51-
check(assert_type(left.add(i), pd.Series), pd.Series)
52-
check(assert_type(left.add(f), pd.Series), pd.Series)
53-
check(assert_type(left.add(c), pd.Series), pd.Series)
50+
check(assert_type(left_i.add(b), pd.Series), pd.Series)
51+
check(assert_type(left_i.add(i), pd.Series), pd.Series)
52+
check(assert_type(left_i.add(f), pd.Series), pd.Series)
53+
check(assert_type(left_i.add(c), pd.Series), pd.Series)
5454

55-
check(assert_type(left.radd(b), pd.Series), pd.Series)
56-
check(assert_type(left.radd(i), pd.Series), pd.Series)
57-
check(assert_type(left.radd(f), pd.Series), pd.Series)
58-
check(assert_type(left.radd(c), pd.Series), pd.Series)
55+
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
56+
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
57+
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
58+
check(assert_type(left_i.radd(c), pd.Series), pd.Series)
5959

6060

61-
def test_add_numpy_array() -> None:
62-
"""Test pd.Series[Any] + numpy array"""
61+
def test_add_i_numpy_array() -> None:
62+
"""Test pd.Series[Any] (int) + numpy array"""
6363
b = np.array([True, False, True], np.bool_)
6464
i = np.array([2, 3, 5], np.int64)
6565
f = np.array([1.0, 2.0, 3.0], np.float64)
6666
c = np.array([1.1j, 2.2j, 4.1j], np.complex128)
6767

68-
check(assert_type(left + b, pd.Series), pd.Series)
69-
check(assert_type(left + i, pd.Series), pd.Series)
70-
check(assert_type(left + f, pd.Series), pd.Series)
71-
check(assert_type(left + c, pd.Series), pd.Series)
68+
check(assert_type(left_i + b, pd.Series), pd.Series)
69+
check(assert_type(left_i + i, pd.Series), pd.Series)
70+
check(assert_type(left_i + f, pd.Series), pd.Series)
71+
check(assert_type(left_i + c, pd.Series), pd.Series)
7272

7373
# `numpy` typing gives the corresponding `ndarray`s in the static type
7474
# checking, where our `__radd__` cannot override. At runtime, they return
7575
# `Series`s.
7676
# `mypy` thinks the return types are `Any`, which is a bug.
7777
check(
78-
assert_type(b + left, "npt.NDArray[np.bool_]"), pd.Series # type: ignore[assert-type]
78+
assert_type(b + left_i, "npt.NDArray[np.bool_]"), pd.Series # type: ignore[assert-type]
7979
)
8080
check(
81-
assert_type(i + left, "npt.NDArray[np.int64]"), pd.Series # type: ignore[assert-type]
81+
assert_type(i + left_i, "npt.NDArray[np.int64]"), pd.Series # type: ignore[assert-type]
8282
)
8383
check(
84-
assert_type(f + left, "npt.NDArray[np.float64]"), pd.Series # type: ignore[assert-type]
84+
assert_type(f + left_i, "npt.NDArray[np.float64]"), pd.Series # type: ignore[assert-type]
8585
)
8686
check(
87-
assert_type(c + left, "npt.NDArray[np.complex128]"), pd.Series # type: ignore[assert-type]
87+
assert_type(c + left_i, "npt.NDArray[np.complex128]"), pd.Series # type: ignore[assert-type]
8888
)
8989

90-
check(assert_type(left.add(b), pd.Series), pd.Series)
91-
check(assert_type(left.add(i), pd.Series), pd.Series)
92-
check(assert_type(left.add(f), pd.Series), pd.Series)
93-
check(assert_type(left.add(c), pd.Series), pd.Series)
90+
check(assert_type(left_i.add(b), pd.Series), pd.Series)
91+
check(assert_type(left_i.add(i), pd.Series), pd.Series)
92+
check(assert_type(left_i.add(f), pd.Series), pd.Series)
93+
check(assert_type(left_i.add(c), pd.Series), pd.Series)
9494

95-
check(assert_type(left.radd(b), pd.Series), pd.Series)
96-
check(assert_type(left.radd(i), pd.Series), pd.Series)
97-
check(assert_type(left.radd(f), pd.Series), pd.Series)
98-
check(assert_type(left.radd(c), pd.Series), pd.Series)
95+
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
96+
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
97+
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
98+
check(assert_type(left_i.radd(c), pd.Series), pd.Series)
9999

100100

101-
def test_add_pd_series() -> None:
102-
"""Test pd.Series[Any] + pandas series"""
101+
def test_add_i_pd_series() -> None:
102+
"""Test pd.Series[Any] (int) + pandas series"""
103+
a = pd.DataFrame({"a": [1, 2, 3]})["a"]
103104
b = pd.Series([True, False, True])
104105
i = pd.Series([2, 3, 5])
105106
f = pd.Series([1.0, 2.0, 3.0])
106107
c = pd.Series([1.1j, 2.2j, 4.1j])
107108

108-
check(assert_type(left + b, pd.Series), pd.Series)
109-
check(assert_type(left + i, pd.Series), pd.Series)
110-
check(assert_type(left + f, pd.Series), pd.Series)
111-
check(assert_type(left + c, pd.Series), pd.Series)
112-
113-
check(assert_type(b + left, pd.Series), pd.Series)
114-
check(assert_type(i + left, pd.Series), pd.Series)
115-
check(assert_type(f + left, pd.Series), pd.Series)
116-
check(assert_type(c + left, pd.Series), pd.Series)
117-
118-
check(assert_type(left.add(b), pd.Series), pd.Series)
119-
check(assert_type(left.add(i), pd.Series), pd.Series)
120-
check(assert_type(left.add(f), pd.Series), pd.Series)
121-
check(assert_type(left.add(c), pd.Series), pd.Series)
122-
123-
check(assert_type(left.radd(b), pd.Series), pd.Series)
124-
check(assert_type(left.radd(i), pd.Series), pd.Series)
125-
check(assert_type(left.radd(f), pd.Series), pd.Series)
126-
check(assert_type(left.radd(c), pd.Series), pd.Series)
109+
check(assert_type(left_i + a, pd.Series), pd.Series)
110+
check(assert_type(left_i + b, pd.Series), pd.Series)
111+
check(assert_type(left_i + i, pd.Series), pd.Series)
112+
check(assert_type(left_i + f, pd.Series), pd.Series)
113+
check(assert_type(left_i + c, pd.Series), pd.Series)
114+
115+
check(assert_type(a + left_i, pd.Series), pd.Series)
116+
check(assert_type(b + left_i, pd.Series), pd.Series)
117+
check(assert_type(i + left_i, pd.Series), pd.Series)
118+
check(assert_type(f + left_i, pd.Series), pd.Series)
119+
check(assert_type(c + left_i, pd.Series), pd.Series)
120+
121+
check(assert_type(left_i.add(a), pd.Series), pd.Series)
122+
check(assert_type(left_i.add(b), pd.Series), pd.Series)
123+
check(assert_type(left_i.add(i), pd.Series), pd.Series)
124+
check(assert_type(left_i.add(f), pd.Series), pd.Series)
125+
check(assert_type(left_i.add(c), pd.Series), pd.Series)
126+
127+
check(assert_type(left_i.radd(a), pd.Series), pd.Series)
128+
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
129+
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
130+
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
131+
check(assert_type(left_i.radd(c), pd.Series), pd.Series)

0 commit comments

Comments
 (0)