Skip to content
Merged
18 changes: 5 additions & 13 deletions pandas-stubs/core/series.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2705,13 +2705,9 @@ class Series(IndexOpsMixin[S1], NDFrame):
axis: int = 0,
) -> TimedeltaSeries: ...
@overload
def __rsub__( # type: ignore[misc]
def __rsub__( # type: ignore[overload-overlap]
self: Series[Never],
other: datetime | np.datetime64 | np_ndarray_dt | TimestampSeries,
) -> TimedeltaSeries: ...
@overload
def __rsub__(
self: Series[Never], other: complex | _ListLike | Series
other: complex | datetime | np.datetime64 | _ListLike | Series,
) -> Series: ...
@overload
def __rsub__(self, other: Series[Never]) -> Series: ...
Expand Down Expand Up @@ -2779,17 +2775,13 @@ class Series(IndexOpsMixin[S1], NDFrame):
),
) -> Series[complex]: ...
@overload
def rsub(
self: Series[Never],
other: datetime | np.datetime64 | np_ndarray_dt | TimestampSeries,
level: Level | None = None,
fill_value: float | None = None,
axis: int = 0,
def __rsub__(
self: Series[Timestamp], other: datetime | np.datetime64 | np_ndarray_dt
) -> TimedeltaSeries: ...
@overload
def rsub(
self: Series[Never],
other: complex | _ListLike | Series,
other: complex | datetime | np.datetime64 | _ListLike | Series,
level: Level | None = None,
fill_value: float | None = None,
axis: int = 0,
Expand Down
8 changes: 4 additions & 4 deletions tests/series/arithmetic/str/test_add.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


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

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


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


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

Expand Down Expand Up @@ -101,7 +101,7 @@ def test_add_numpy_array() -> None:


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

Expand Down
157 changes: 81 additions & 76 deletions tests/series/arithmetic/test_add.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,122 +5,127 @@

from tests import check

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


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

check(assert_type(left + b, pd.Series), pd.Series)
check(assert_type(left + i, pd.Series), pd.Series)
check(assert_type(left + f, pd.Series), pd.Series)
check(assert_type(left + c, pd.Series), pd.Series)
check(assert_type(left_i + b, pd.Series), pd.Series)
check(assert_type(left_i + i, pd.Series), pd.Series)
check(assert_type(left_i + f, pd.Series), pd.Series)
check(assert_type(left_i + c, pd.Series), pd.Series)

check(assert_type(b + left, pd.Series), pd.Series)
check(assert_type(i + left, pd.Series), pd.Series)
check(assert_type(f + left, pd.Series), pd.Series)
check(assert_type(c + left, pd.Series), pd.Series)
check(assert_type(b + left_i, pd.Series), pd.Series)
check(assert_type(i + left_i, pd.Series), pd.Series)
check(assert_type(f + left_i, pd.Series), pd.Series)
check(assert_type(c + left_i, pd.Series), pd.Series)

check(assert_type(left.add(b), pd.Series), pd.Series)
check(assert_type(left.add(i), pd.Series), pd.Series)
check(assert_type(left.add(f), pd.Series), pd.Series)
check(assert_type(left.add(c), pd.Series), pd.Series)
check(assert_type(left_i.add(b), pd.Series), pd.Series)
check(assert_type(left_i.add(i), pd.Series), pd.Series)
check(assert_type(left_i.add(f), pd.Series), pd.Series)
check(assert_type(left_i.add(c), pd.Series), pd.Series)

check(assert_type(left.radd(b), pd.Series), pd.Series)
check(assert_type(left.radd(i), pd.Series), pd.Series)
check(assert_type(left.radd(f), pd.Series), pd.Series)
check(assert_type(left.radd(c), pd.Series), pd.Series)
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
check(assert_type(left_i.radd(c), pd.Series), pd.Series)


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

check(assert_type(left + b, pd.Series), pd.Series)
check(assert_type(left + i, pd.Series), pd.Series)
check(assert_type(left + f, pd.Series), pd.Series)
check(assert_type(left + c, pd.Series), pd.Series)
check(assert_type(left_i + b, pd.Series), pd.Series)
check(assert_type(left_i + i, pd.Series), pd.Series)
check(assert_type(left_i + f, pd.Series), pd.Series)
check(assert_type(left_i + c, pd.Series), pd.Series)

check(assert_type(b + left, pd.Series), pd.Series)
check(assert_type(i + left, pd.Series), pd.Series)
check(assert_type(f + left, pd.Series), pd.Series)
check(assert_type(c + left, pd.Series), pd.Series)
check(assert_type(b + left_i, pd.Series), pd.Series)
check(assert_type(i + left_i, pd.Series), pd.Series)
check(assert_type(f + left_i, pd.Series), pd.Series)
check(assert_type(c + left_i, pd.Series), pd.Series)

check(assert_type(left.add(b), pd.Series), pd.Series)
check(assert_type(left.add(i), pd.Series), pd.Series)
check(assert_type(left.add(f), pd.Series), pd.Series)
check(assert_type(left.add(c), pd.Series), pd.Series)
check(assert_type(left_i.add(b), pd.Series), pd.Series)
check(assert_type(left_i.add(i), pd.Series), pd.Series)
check(assert_type(left_i.add(f), pd.Series), pd.Series)
check(assert_type(left_i.add(c), pd.Series), pd.Series)

check(assert_type(left.radd(b), pd.Series), pd.Series)
check(assert_type(left.radd(i), pd.Series), pd.Series)
check(assert_type(left.radd(f), pd.Series), pd.Series)
check(assert_type(left.radd(c), pd.Series), pd.Series)
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
check(assert_type(left_i.radd(c), pd.Series), pd.Series)


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

check(assert_type(left + b, pd.Series), pd.Series)
check(assert_type(left + i, pd.Series), pd.Series)
check(assert_type(left + f, pd.Series), pd.Series)
check(assert_type(left + c, pd.Series), pd.Series)
check(assert_type(left_i + b, pd.Series), pd.Series)
check(assert_type(left_i + i, pd.Series), pd.Series)
check(assert_type(left_i + f, pd.Series), pd.Series)
check(assert_type(left_i + c, pd.Series), pd.Series)

# `numpy` typing gives the corresponding `ndarray`s in the static type
# checking, where our `__radd__` cannot override. At runtime, they return
# `Series`s.
# `mypy` thinks the return types are `Any`, which is a bug.
check(
assert_type(b + left, "npt.NDArray[np.bool_]"), pd.Series # type: ignore[assert-type]
assert_type(b + left_i, "npt.NDArray[np.bool_]"), pd.Series # type: ignore[assert-type]
)
check(
assert_type(i + left, "npt.NDArray[np.int64]"), pd.Series # type: ignore[assert-type]
assert_type(i + left_i, "npt.NDArray[np.int64]"), pd.Series # type: ignore[assert-type]
)
check(
assert_type(f + left, "npt.NDArray[np.float64]"), pd.Series # type: ignore[assert-type]
assert_type(f + left_i, "npt.NDArray[np.float64]"), pd.Series # type: ignore[assert-type]
)
check(
assert_type(c + left, "npt.NDArray[np.complex128]"), pd.Series # type: ignore[assert-type]
assert_type(c + left_i, "npt.NDArray[np.complex128]"), pd.Series # type: ignore[assert-type]
)

check(assert_type(left.add(b), pd.Series), pd.Series)
check(assert_type(left.add(i), pd.Series), pd.Series)
check(assert_type(left.add(f), pd.Series), pd.Series)
check(assert_type(left.add(c), pd.Series), pd.Series)
check(assert_type(left_i.add(b), pd.Series), pd.Series)
check(assert_type(left_i.add(i), pd.Series), pd.Series)
check(assert_type(left_i.add(f), pd.Series), pd.Series)
check(assert_type(left_i.add(c), pd.Series), pd.Series)

check(assert_type(left.radd(b), pd.Series), pd.Series)
check(assert_type(left.radd(i), pd.Series), pd.Series)
check(assert_type(left.radd(f), pd.Series), pd.Series)
check(assert_type(left.radd(c), pd.Series), pd.Series)
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
check(assert_type(left_i.radd(c), pd.Series), pd.Series)


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

check(assert_type(left + b, pd.Series), pd.Series)
check(assert_type(left + i, pd.Series), pd.Series)
check(assert_type(left + f, pd.Series), pd.Series)
check(assert_type(left + c, pd.Series), pd.Series)

check(assert_type(b + left, pd.Series), pd.Series)
check(assert_type(i + left, pd.Series), pd.Series)
check(assert_type(f + left, pd.Series), pd.Series)
check(assert_type(c + left, pd.Series), pd.Series)

check(assert_type(left.add(b), pd.Series), pd.Series)
check(assert_type(left.add(i), pd.Series), pd.Series)
check(assert_type(left.add(f), pd.Series), pd.Series)
check(assert_type(left.add(c), pd.Series), pd.Series)

check(assert_type(left.radd(b), pd.Series), pd.Series)
check(assert_type(left.radd(i), pd.Series), pd.Series)
check(assert_type(left.radd(f), pd.Series), pd.Series)
check(assert_type(left.radd(c), pd.Series), pd.Series)
check(assert_type(left_i + a, pd.Series), pd.Series)
check(assert_type(left_i + b, pd.Series), pd.Series)
check(assert_type(left_i + i, pd.Series), pd.Series)
check(assert_type(left_i + f, pd.Series), pd.Series)
check(assert_type(left_i + c, pd.Series), pd.Series)

check(assert_type(a + left_i, pd.Series), pd.Series)
check(assert_type(b + left_i, pd.Series), pd.Series)
check(assert_type(i + left_i, pd.Series), pd.Series)
check(assert_type(f + left_i, pd.Series), pd.Series)
check(assert_type(c + left_i, pd.Series), pd.Series)

check(assert_type(left_i.add(a), pd.Series), pd.Series)
check(assert_type(left_i.add(b), pd.Series), pd.Series)
check(assert_type(left_i.add(i), pd.Series), pd.Series)
check(assert_type(left_i.add(f), pd.Series), pd.Series)
check(assert_type(left_i.add(c), pd.Series), pd.Series)

check(assert_type(left_i.radd(a), pd.Series), pd.Series)
check(assert_type(left_i.radd(b), pd.Series), pd.Series)
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
check(assert_type(left_i.radd(c), pd.Series), pd.Series)
Loading
Loading