diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index 770ad7767..b20c5c118 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -1609,6 +1609,11 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __add__(self, other: S1 | Self) -> Self: ... @overload + def __add__( + self, + other: complex, + ) -> Series[complex]: ... + @overload def __add__( self, other: num | _str | timedelta | Timedelta | _ListLike | Series | np.timedelta64, @@ -1716,6 +1721,16 @@ class Series(IndexOpsMixin[S1], NDFrame): self, other: Timestamp | datetime | TimestampSeries ) -> TimedeltaSeries: ... @overload + def __sub__( + self: Series[int], + other: int, + ) -> Series[int]: ... + @overload + def __sub__( + self, + other: complex, + ) -> Series[complex]: ... + @overload def __sub__(self, other: num | _ListLike | Series) -> Series: ... def __truediv__(self, other: num | _ListLike | Series[S1] | Path) -> Series: ... # ignore needed for mypy as we want different results based on the arguments @@ -1742,6 +1757,23 @@ class Series(IndexOpsMixin[S1], NDFrame): @property def loc(self) -> _LocIndexerSeries[S1]: ... # Methods + @overload + def add( + self: Series[int], + other: int, + level: Level | None = ..., + fill_value: float | None = ..., + axis: int = ..., + ) -> Series[int]: ... + @overload + def add( + self, + other: complex, + level: Level | None = ..., + fill_value: float | None = ..., + axis: int = ..., + ) -> Series[complex]: ... + @overload def add( self, other: Series[S1] | Scalar, @@ -2085,6 +2117,31 @@ class Series(IndexOpsMixin[S1], NDFrame): numeric_only: _bool = ..., **kwargs, ) -> float: ... + @overload + def sub( + self: Series[int], + other: int, + level: Level | None = ..., + fill_value: float | None = ..., + axis: AxisIndex | None = ..., + ) -> Series[int]: ... + @overload + def sub( + self: Series[int], + other: float, + level: Level | None = ..., + fill_value: float | None = ..., + axis: AxisIndex | None = ..., + ) -> Series[int]: ... + @overload + def sub( + self, + other: complex, + level: Level | None = ..., + fill_value: float | None = ..., + axis: AxisIndex | None = ..., + ) -> Series[complex]: ... + @overload def sub( self, other: num | _ListLike | Series[S1], diff --git a/tests/test_series.py b/tests/test_series.py index ddbb5e733..4f6c02fb3 100644 --- a/tests/test_series.py +++ b/tests/test_series.py @@ -450,7 +450,7 @@ def test_types_mean() -> None: check(assert_type(s.mean(), float), float) check( assert_type( - s.groupby(level=0).mean(), # pyright: ignore[reportAssertTypeFailure] + s.groupby(level=0).mean(), "pd.Series[float]", ), pd.Series, @@ -465,7 +465,7 @@ def test_types_median() -> None: check(assert_type(s.median(), float), float) check( assert_type( - s.groupby(level=0).median(), # pyright: ignore[reportAssertTypeFailure] + s.groupby(level=0).median(), "pd.Series[float]", ), pd.Series, @@ -690,7 +690,7 @@ def test_types_scalar_arithmetic() -> None: check(assert_type(s + 1, "pd.Series[int]"), pd.Series, np.integer) check(assert_type(s.add(1, fill_value=0), "pd.Series[int]"), pd.Series, np.integer) - check(assert_type(s - 1, pd.Series), pd.Series, np.integer) + check(assert_type(s - 1, "pd.Series[int]"), pd.Series, np.integer) check(assert_type(s.sub(1, fill_value=0), "pd.Series[int]"), pd.Series, np.integer) check(assert_type(s * 2, pd.Series), pd.Series, np.integer) @@ -721,8 +721,10 @@ def test_types_scalar_arithmetic() -> None: def test_types_complex_arithmetic() -> None: c = 1 + 1j s = pd.Series([1.0, 2.0, 3.0]) - check(assert_type(s + c, pd.Series), pd.Series) - check(assert_type(s - c, pd.Series), pd.Series) + check(assert_type(s + c, "pd.Series[complex]"), pd.Series, complex) + check(assert_type(s.add(c), "pd.Series[complex]"), pd.Series, complex) + check(assert_type(s - c, "pd.Series[complex]"), pd.Series, complex) + check(assert_type(s.sub(c), "pd.Series[complex]"), pd.Series, complex) def test_types_groupby() -> None: @@ -1368,7 +1370,7 @@ def test_series_mul() -> None: sm = s * 4 check(assert_type(sm, pd.Series), pd.Series) ss = s - 4 - check(assert_type(ss, pd.Series), pd.Series) + check(assert_type(ss, "pd.Series[int]"), pd.Series, np.integer) sm2 = s * s check(assert_type(sm2, pd.Series), pd.Series) sp = s + 4