Skip to content

Commit 9a71f1f

Browse files
committed
fix: #718 __add__
1 parent db4891f commit 9a71f1f

File tree

4 files changed

+33
-78
lines changed

4 files changed

+33
-78
lines changed

pandas-stubs/core/series.pyi

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,14 +1596,12 @@ class Series(IndexOpsMixin[S1], NDFrame):
15961596
# just failed to generate these so I couldn't match
15971597
# them up.
15981598
@overload
1599-
def __add__(
1600-
self: Series[int],
1601-
other: int | np_ndarray_anyint | Series[int] | Sequence[int],
1602-
) -> Series[int]: ...
1599+
def __add__(self: Series[_T_INT], other: _nonseries_int | Series[int]) -> Series[_T_INT]: ...
16031600
@overload
16041601
def __add__(
1605-
self: Series[Timestamp], other: _nonseries_timedelta | Series[Timedelta]
1606-
) -> Series[Timestamp]: ...
1602+
self: Series[_T_STAMP_AND_DELTA],
1603+
other: _nonseries_timedelta | Series[Timedelta],
1604+
) -> Series[_T_STAMP_AND_DELTA]: ...
16071605
@overload
16081606
def __add__(self: Series[Timedelta], other: Period) -> PeriodSeries: ...
16091607
@overload
@@ -1612,10 +1610,6 @@ class Series(IndexOpsMixin[S1], NDFrame):
16121610
other: datetime | Timestamp | Series[Timestamp] | DatetimeIndex,
16131611
) -> Series[Timestamp]: ...
16141612
@overload
1615-
def __add__(
1616-
self: Series[Timedelta], other: timedelta | Timedelta | np.timedelta64
1617-
) -> Series[Timedelta]: ...
1618-
@overload
16191613
def __add__(self, other: S1 | Self) -> Self: ...
16201614
@overload
16211615
def __add__(
@@ -1639,13 +1633,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
16391633
@overload
16401634
def __floordiv__(
16411635
self: Series[Timedelta],
1642-
other: (
1643-
timedelta
1644-
| Series[Timedelta]
1645-
| np.timedelta64
1646-
| TimedeltaIndex
1647-
| Sequence[timedelta]
1648-
),
1636+
other: _nonseries_timedelta | Series[Timedelta],
16491637
) -> Series[int]: ...
16501638
@overload
16511639
def __floordiv__(self, other: num | _ListLike | Series[S1]) -> Series[int]: ...
@@ -1662,17 +1650,22 @@ class Series(IndexOpsMixin[S1], NDFrame):
16621650
self, other: S1 | _ListLike | Series[S1] | datetime | timedelta | date
16631651
) -> Series[_bool]: ...
16641652
@overload
1653+
def __mul__(self: Series[_T_INT], other: _nonseries_int | Series[int]) -> Series[_T_INT]: ...
1654+
@overload
16651655
def __mul__(
1666-
self: Series[_T_INT], other: _nonseries_int | Series[int]
1667-
) -> Series[_T_INT]: ...
1656+
self: Series[_T_STAMP_AND_DELTA],
1657+
other: (
1658+
num | Sequence[num] | Series[int] | Series[float] | float | Sequence[float]
1659+
),
1660+
) -> Series[_T_STAMP_AND_DELTA]: ...
16681661
@overload
16691662
def __mul__(
1670-
self: Series[Timedelta],
1671-
other: num | Sequence[num] | Series[int] | Series[float],
1672-
) -> Series[Timedelta]: ...
1663+
self: Series[_T_STAMP_AND_DELTA],
1664+
other: _nonseries_timedelta | Series[Timedelta],
1665+
) -> Never: ...
16731666
@overload
16741667
def __mul__(
1675-
self, other: timedelta | Timedelta | Series[Timedelta] | np.timedelta64
1668+
self, other: _nonseries_timedelta | Series[Timedelta]
16761669
) -> Series[Timedelta]: ...
16771670
@overload
16781671
def __mul__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
@@ -1742,22 +1735,16 @@ class Series(IndexOpsMixin[S1], NDFrame):
17421735
self, other: bool | MaskType | list[int]
17431736
) -> Series[bool]: ...
17441737
@overload
1745-
def __rxor__(self, other: int | np_ndarray_anyint | Series[int]) -> Series[int]: ...
1738+
def __rxor__(self, other: _nonseries_int | Series[int]) -> Series[int]: ...
17461739
@overload
1747-
def __sub__(
1748-
self: Series[int],
1749-
other: int | np_ndarray_anyint | Series[int] | Sequence[int],
1750-
) -> Series[int]: ...
1740+
def __sub__(self: Series[_T_INT], other: _nonseries_int | Series[int]) -> Series[_T_INT]: ...
17511741
@overload
17521742
def __sub__(
17531743
self: Series[Timestamp], other: _nonseries_timedelta | Series[Timedelta]
17541744
) -> Series[Timestamp]: ...
17551745
@overload
17561746
def __sub__(
1757-
self: Series[Timedelta],
1758-
other: (
1759-
timedelta | Timedelta | Series[Timedelta] | TimedeltaIndex | np.timedelta64
1760-
),
1747+
self, other: _nonseries_timedelta | Series[Timedelta]
17611748
) -> Series[Timedelta]: ...
17621749
@overload
17631750
def __sub__(
@@ -1769,16 +1756,12 @@ class Series(IndexOpsMixin[S1], NDFrame):
17691756
def __truediv__(
17701757
self: Series[_T_STAMP_AND_DELTA],
17711758
other: float | Series[int] | Series[float] | Sequence[float],
1772-
) -> Series[Timestamp]: ...
1759+
) -> Series[_T_STAMP_AND_DELTA]: ...
17731760
@overload
17741761
def __truediv__(
17751762
self: Series[Timedelta], other: _nonseries_timedelta | Series[Timedelta]
17761763
) -> Series[float]: ...
17771764
@overload
1778-
def __truediv__(
1779-
self: Series[Timedelta], other: float | Sequence[float]
1780-
) -> Series[Timedelta]: ...
1781-
@overload
17821765
def __truediv__(self, other: num | _ListLike | Series[S1] | Path) -> Series: ...
17831766
# ignore needed for mypy as we want different results based on the arguments
17841767
@overload # type: ignore[override]

tests/test_frame.py

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2805,13 +2805,7 @@ def test_indexslice_getitem():
28052805
def test_compute_values():
28062806
df = pd.DataFrame({"x": [1, 2, 3, 4]})
28072807
s: pd.Series = pd.Series([10, 20, 30, 40])
2808-
check(
2809-
assert_type(
2810-
df["x"] + s.values, pd.Series # pyright: ignore[reportAssertTypeFailure]
2811-
),
2812-
pd.Series,
2813-
np.int64,
2814-
)
2808+
check(assert_type(df["x"] + s.values, pd.Series), pd.Series, np.int64)
28152809

28162810

28172811
# https://github.com/microsoft/python-type-stubs/issues/164
@@ -2822,20 +2816,9 @@ def test_sum_get_add() -> None:
28222816
summer = df.sum(axis=1)
28232817
check(assert_type(summer, pd.Series), pd.Series)
28242818

2825-
check(
2826-
assert_type(s + summer, pd.Series), # pyright: ignore[reportAssertTypeFailure]
2827-
pd.Series,
2828-
)
2829-
check(
2830-
assert_type(s + df["y"], pd.Series), # pyright: ignore[reportAssertTypeFailure]
2831-
pd.Series,
2832-
)
2833-
check(
2834-
assert_type(
2835-
summer + summer, pd.Series # pyright: ignore[reportAssertTypeFailure]
2836-
),
2837-
pd.Series,
2838-
)
2819+
check(assert_type(s + summer, pd.Series), pd.Series)
2820+
check(assert_type(s + df["y"], pd.Series), pd.Series)
2821+
check(assert_type(summer + summer, pd.Series), pd.Series)
28392822

28402823

28412824
def test_getset_untyped() -> None:

tests/test_series.py

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1589,22 +1589,10 @@ def test_series_min_max_sub_axis() -> None:
15891589
ss = s1 - s2
15901590
sm = s1 * s2
15911591
sd = s1 / s2
1592-
check(
1593-
assert_type(sa, pd.Series), # pyright: ignore[reportAssertTypeFailure]
1594-
pd.Series,
1595-
)
1596-
check(
1597-
assert_type(ss, pd.Series), # pyright: ignore[reportAssertTypeFailure]
1598-
pd.Series,
1599-
)
1600-
check(
1601-
assert_type(sm, pd.Series), # pyright: ignore[reportAssertTypeFailure]
1602-
pd.Series,
1603-
)
1604-
check(
1605-
assert_type(sd, pd.Series), # pyright: ignore[reportAssertTypeFailure]
1606-
pd.Series,
1607-
)
1592+
check(assert_type(sa, pd.Series), pd.Series)
1593+
check(assert_type(ss, pd.Series), pd.Series)
1594+
check(assert_type(sm, pd.Series), pd.Series) # type: ignore[assert-type]
1595+
check(assert_type(sd, pd.Series), pd.Series)
16081596

16091597

16101598
def test_series_index_isin() -> None:
@@ -3897,7 +3885,7 @@ def foo(sf: pd.Series) -> None:
38973885
pass
38983886

38993887
foo(s)
3900-
check(assert_type(s + pd.Series([1]), pd.Series), pd.Series) # type: ignore [assert-type] # pyright: ignore[reportAssertTypeFailure]
3888+
check(assert_type(s + pd.Series([1]), pd.Series), pd.Series)
39013889

39023890

39033891
def test_series_items() -> None:

tests/test_timefuncs.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,9 +1474,10 @@ def test_timedelta64_and_arithmatic_operator() -> None:
14741474
check(assert_type((s3 + td), "pd.Series[pd.Timedelta]"), pd.Series, pd.Timedelta)
14751475
check(assert_type((s3 / td), "pd.Series[float]"), pd.Series, float)
14761476
if TYPE_CHECKING_INVALID_USAGE:
1477-
r1 = s1 * td
1478-
r2 = s1 / td # type: ignore[operator] # pyright: ignore[reportOperatorIssue]
1479-
r3 = s3 * td
1477+
s1.__mul__(td)
1478+
r1 = s1 * td # pyright: ignore[reportOperatorIssue]
1479+
r2 = s1 / td # pyright: ignore[reportOperatorIssue]
1480+
r3 = s3 * td # pyright: ignore[reportOperatorIssue]
14801481

14811482

14821483
def test_timedeltaseries_add_timestampseries() -> None:

0 commit comments

Comments
 (0)