Skip to content

Commit 33c4625

Browse files
GH1541 Revert Series[Any].__add__(str) (#1542)
* GH1541 Revert Series[Any].__add__(str) * GH1541 Revert Series[Any].__add__(str) * GH1541 PR Feedback * GH1541 PR Feedback * GH1541 PR Feedback * GH1541 PR Feedback * GH1541 PR Feedback * GH1541 PR Feedback
1 parent ef4ad02 commit 33c4625

File tree

4 files changed

+42
-8
lines changed

4 files changed

+42
-8
lines changed

pandas-stubs/core/indexes/base.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ class Index(IndexOpsMixin[S1], ElementOpsMixin[S1]):
626626
def __lt__(self, other: Self | S1) -> np_1darray_bool: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
627627
def __gt__(self, other: Self | S1) -> np_1darray_bool: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
628628
@overload
629-
def __add__(self: Index[Never], other: _str) -> Never: ...
629+
def __add__(self: Index[Never], other: _str) -> Index[_str]: ...
630630
@overload
631631
def __add__(
632632
self: Index[Never], other: complex | ArrayLike | SequenceNotStr[S1] | Index
@@ -680,7 +680,7 @@ class Index(IndexOpsMixin[S1], ElementOpsMixin[S1]):
680680
self: Index[_str], other: np_ndarray_str | Index[_str]
681681
) -> Index[_str]: ...
682682
@overload
683-
def __radd__(self: Index[Never], other: _str) -> Never: ...
683+
def __radd__(self: Index[Never], other: _str) -> Index[_str]: ...
684684
@overload
685685
def __radd__(
686686
self: Index[Never], other: complex | ArrayLike | SequenceNotStr[S1] | Index

pandas-stubs/core/series.pyi

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1789,6 +1789,8 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame):
17891789
# just failed to generate these so I couldn't match
17901790
# them up.
17911791
@overload
1792+
def __add__(self: Series[Never], other: _str) -> Series[_str]: ...
1793+
@overload
17921794
def __add__(self: Series[Never], other: complex | ListLike) -> Series: ...
17931795
@overload
17941796
def __add__(self, other: Index[Never] | Series[Never]) -> Series: ...
@@ -1875,6 +1877,14 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame):
18751877
self: Series[_str], other: np_ndarray_str | Index[_str] | Series[_str]
18761878
) -> Series[_str]: ...
18771879
@overload
1880+
def add(
1881+
self: Series[Never],
1882+
other: _str,
1883+
level: Level | None = None,
1884+
fill_value: float | None = None,
1885+
axis: int = 0,
1886+
) -> Series[_str]: ...
1887+
@overload
18781888
def add(
18791889
self: Series[Never],
18801890
other: complex | ListLike,
@@ -2008,6 +2018,8 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame):
20082018
axis: int = 0,
20092019
) -> Series[_str]: ...
20102020
@overload
2021+
def __radd__(self: Series[Never], other: _str) -> Series[_str]: ...
2022+
@overload
20112023
def __radd__(self: Series[Never], other: complex | ListLike) -> Series: ...
20122024
@overload
20132025
def __radd__(self, other: Index[Never] | Series[Never]) -> Series: ...
@@ -2108,6 +2120,14 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame):
21082120
@overload
21092121
def __radd__(self: Series[BaseOffset], other: BaseOffset) -> Series[BaseOffset]: ...
21102122
@overload
2123+
def radd(
2124+
self: Series[Never],
2125+
other: _str,
2126+
level: Level | None = None,
2127+
fill_value: float | None = None,
2128+
axis: int = 0,
2129+
) -> Series[_str]: ...
2130+
@overload
21112131
def radd(
21122132
self: Series[Never],
21132133
other: complex | ListLike,

tests/indexes/arithmetic/test_add.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
import numpy as np
44
import pandas as pd
5-
from typing_extensions import (
6-
Never,
7-
assert_type,
8-
)
5+
from typing_extensions import assert_type
96

107
from tests import (
118
TYPE_CHECKING_INVALID_USAGE,
@@ -105,7 +102,13 @@ def test_add_i_pd_index() -> None:
105102
def test_add_i_py_str() -> None:
106103
"""Test pd.Index[Any] (int) + Python str"""
107104
s = "abc"
105+
midx = pd.MultiIndex.from_tuples([("a",)])
106+
idx = midx.levels[0]
107+
108+
check(assert_type(idx + "c1", "pd.Index[str]"), pd.Index, str)
109+
check(assert_type("c1" + idx, "pd.Index[str]"), pd.Index, str)
108110

109111
if TYPE_CHECKING_INVALID_USAGE:
110-
assert_type(left_i + s, Never)
111-
assert_type(s + left_i, Never)
112+
# GH1541 relaxing typing, won't work at runtime though
113+
assert_type(left_i + s, "pd.Index[str]")
114+
assert_type(s + left_i, "pd.Index[str]")

tests/series/arithmetic/test_add.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,14 @@ def test_add_i_pd_series() -> None:
181181
check(assert_type(left_i.radd(i), pd.Series), pd.Series)
182182
check(assert_type(left_i.radd(f), pd.Series), pd.Series)
183183
check(assert_type(left_i.radd(c), pd.Series), pd.Series)
184+
185+
186+
def test_series_add_str() -> None:
187+
"""Test Series.__add__ with Series[Any]."""
188+
df = pd.DataFrame({0: ["a", "b"]})
189+
sr = df[0]
190+
191+
check(assert_type(sr + "c1", "pd.Series[str]"), pd.Series, str)
192+
check(assert_type("c1" + sr, "pd.Series[str]"), pd.Series, str)
193+
check(assert_type(sr.add("c1"), "pd.Series[str]"), pd.Series, str)
194+
check(assert_type(sr.radd("c1"), "pd.Series[str]"), pd.Series, str)

0 commit comments

Comments
 (0)