diff --git a/pandas-stubs/core/indexes/base.pyi b/pandas-stubs/core/indexes/base.pyi index 3f3332940..35a610cf4 100644 --- a/pandas-stubs/core/indexes/base.pyi +++ b/pandas-stubs/core/indexes/base.pyi @@ -626,7 +626,7 @@ class Index(IndexOpsMixin[S1], ElementOpsMixin[S1]): def __lt__(self, other: Self | S1) -> np_1darray_bool: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] def __gt__(self, other: Self | S1) -> np_1darray_bool: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride] @overload - def __add__(self: Index[Never], other: _str) -> Never: ... + def __add__(self: Index[Never], other: _str) -> Index[_str]: ... @overload def __add__( self: Index[Never], other: complex | ArrayLike | SequenceNotStr[S1] | Index @@ -680,7 +680,7 @@ class Index(IndexOpsMixin[S1], ElementOpsMixin[S1]): self: Index[_str], other: np_ndarray_str | Index[_str] ) -> Index[_str]: ... @overload - def __radd__(self: Index[Never], other: _str) -> Never: ... + def __radd__(self: Index[Never], other: _str) -> Index[_str]: ... @overload def __radd__( self: Index[Never], other: complex | ArrayLike | SequenceNotStr[S1] | Index diff --git a/pandas-stubs/core/reshape/pivot.pyi b/pandas-stubs/core/reshape/pivot.pyi index eb7d9d479..2af85c5f8 100644 --- a/pandas-stubs/core/reshape/pivot.pyi +++ b/pandas-stubs/core/reshape/pivot.pyi @@ -67,11 +67,13 @@ _Values: TypeAlias = SequenceNotStr[Any] | _ExtendedAnyArrayLike @overload def pivot_table( data: DataFrame, - values: _PivotTableValuesTypes[ + values: _PivotTableValuesTypes[ # ty: ignore[non-subscriptable] Hashable # ty: ignore[invalid-type-arguments] ] = None, - index: _PivotTableIndexTypes[Hashable] = None, # ty: ignore[invalid-type-arguments] - columns: _PivotTableColumnsTypes[ + index: _PivotTableIndexTypes[ # ty: ignore[non-subscriptable] + Hashable # ty: ignore[invalid-type-arguments] + ] = None, + columns: _PivotTableColumnsTypes[ # ty: ignore[non-subscriptable] Hashable # ty: ignore[invalid-type-arguments] ] = None, aggfunc: ( @@ -91,13 +93,15 @@ def pivot_table( @overload def pivot_table( data: DataFrame, - values: _PivotTableValuesTypes[ + values: _PivotTableValuesTypes[ # ty: ignore[non-subscriptable] Hashable # ty: ignore[invalid-type-arguments] ] = None, *, index: Grouper, columns: ( - _PivotTableColumnsTypes[Hashable] # ty: ignore[invalid-type-arguments] + _PivotTableColumnsTypes[ # ty: ignore[non-subscriptable] + Hashable # ty: ignore[invalid-type-arguments] + ] | np_ndarray | Index[Any] ) = None, @@ -116,11 +120,13 @@ def pivot_table( @overload def pivot_table( data: DataFrame, - values: _PivotTableValuesTypes[ + values: _PivotTableValuesTypes[ # ty: ignore[non-subscriptable] Hashable # ty: ignore[invalid-type-arguments] ] = None, index: ( - _PivotTableIndexTypes[Hashable] # ty: ignore[invalid-type-arguments] + _PivotTableIndexTypes[ # ty: ignore[non-subscriptable] + Hashable # ty: ignore[invalid-type-arguments] + ] | np_ndarray | Index[Any] ) = None, diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index 469d44ea0..b8326903c 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -1789,6 +1789,8 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame): # just failed to generate these so I couldn't match # them up. @overload + def __add__(self: Series[Never], other: _str) -> Series[_str]: ... + @overload def __add__(self: Series[Never], other: complex | ListLike) -> Series: ... @overload def __add__(self, other: Index[Never] | Series[Never]) -> Series: ... @@ -2008,6 +2010,8 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame): axis: int = 0, ) -> Series[_str]: ... @overload + def __radd__(self: Series[Never], other: _str) -> Series[_str]: ... + @overload def __radd__(self: Series[Never], other: complex | ListLike) -> Series: ... @overload def __radd__(self, other: Index[Never] | Series[Never]) -> Series: ... diff --git a/tests/indexes/arithmetic/test_add.py b/tests/indexes/arithmetic/test_add.py index c7c415b46..1316e8830 100644 --- a/tests/indexes/arithmetic/test_add.py +++ b/tests/indexes/arithmetic/test_add.py @@ -3,7 +3,6 @@ import numpy as np import pandas as pd from typing_extensions import ( - Never, assert_type, ) @@ -107,5 +106,6 @@ def test_add_i_py_str() -> None: s = "abc" if TYPE_CHECKING_INVALID_USAGE: - assert_type(left_i + s, Never) - assert_type(s + left_i, Never) + # relaxing typing, won't work at runtime though + assert_type(left_i + s, "pd.Index[str]") + assert_type(s + left_i, "pd.Index[str]") diff --git a/tests/series/arithmetic/str/test_add.py b/tests/series/arithmetic/str/test_add.py index 6aa5ce0ff..355d277b3 100644 --- a/tests/series/arithmetic/str/test_add.py +++ b/tests/series/arithmetic/str/test_add.py @@ -145,3 +145,12 @@ def test_add_pd_series() -> None: if TYPE_CHECKING_INVALID_USAGE: left.radd(i) # type: ignore[arg-type] # pyright: ignore[reportArgumentType, reportCallIssue] check(assert_type(left.radd(r0), "pd.Series[str]"), pd.Series, str) + + +def test_series_add_str() -> None: + """Test Series.__add__ with Series[Any].""" + df = pd.DataFrame({0: ["a", "b"]}) + sr = df[0] + + check(assert_type(sr + "c1", "pd.Series[str]"), pd.Series, str) + check(assert_type("c1" + sr, "pd.Series[str]"), pd.Series, str) diff --git a/tests/test_timefuncs.py b/tests/test_timefuncs.py index 0b210feb2..678317728 100644 --- a/tests/test_timefuncs.py +++ b/tests/test_timefuncs.py @@ -1,7 +1,9 @@ from __future__ import annotations import datetime as dt -from typing import TypeAlias +from typing import ( + TypeAlias, +) from dateutil.relativedelta import ( FR,