Skip to content

Commit ddc41d1

Browse files
committed
fix: comments
1 parent bad9882 commit ddc41d1

File tree

6 files changed

+58
-40
lines changed

6 files changed

+58
-40
lines changed

pandas-stubs/_typing.pyi

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,14 @@ np_ndarray_td: TypeAlias = npt.NDArray[np.timedelta64]
825825

826826
# Define shape and generic type variables with defaults similar to numpy
827827
GenericT = TypeVar("GenericT", bound=np.generic, default=Any)
828+
TD64ItemT = TypeVar(
829+
"TD64ItemT",
830+
bound=datetime.timedelta | int | None,
831+
default=datetime.timedelta | int | None,
832+
)
833+
DT64ItemT = TypeVar(
834+
"DT64ItemT", bound=datetime.date | int | None, default=datetime.date | int | None
835+
)
828836
GenericT_co = TypeVar("GenericT_co", bound=np.generic, default=Any, covariant=True)
829837
ShapeT = TypeVar("ShapeT", bound=tuple[int, ...], default=tuple[Any, ...])
830838
# Numpy ndarray with more ergonomic typevar

pandas-stubs/core/series.pyi

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -214,11 +214,6 @@ class _SupportsAdd(Protocol[_T_co]):
214214
class _SupportsMul(Protocol[_T_co]):
215215
def __mul__(self, value: Self, /) -> _T_co: ...
216216

217-
@type_check_only
218-
class _SupportsAdd_MulFloat(Protocol[_T_co]):
219-
def __add__(self, value: Self, /) -> _T_co: ...
220-
def __mul__(self, value: float, /) -> _T_co: ...
221-
222217
@type_check_only
223218
class SupportsTruedivInt(Protocol[_T_co]):
224219
def __truediv__(self, value: int, /) -> _T_co: ...
@@ -4466,7 +4461,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
44664461
level: None = ...,
44674462
numeric_only: _bool = False,
44684463
**kwargs: Any,
4469-
) -> float: ...
4464+
) -> Any: ...
44704465
@overload
44714466
def mean(
44724467
self: Series[Timestamp],
@@ -4478,13 +4473,13 @@ class Series(IndexOpsMixin[S1], NDFrame):
44784473
) -> Timestamp: ...
44794474
@overload
44804475
def mean(
4481-
self: SupportsGetItem[Scalar, _SupportsAdd_MulFloat[S1]],
4476+
self: SupportsGetItem[Scalar, SupportsTruedivInt[S2]],
44824477
axis: AxisIndex | None = 0,
44834478
skipna: _bool = True,
44844479
level: None = ...,
44854480
numeric_only: _bool = False,
44864481
**kwargs: Any,
4487-
) -> S1: ...
4482+
) -> S2: ...
44884483
@overload
44894484
def median(
44904485
self: Series[Never],
@@ -4632,7 +4627,26 @@ class Series(IndexOpsMixin[S1], NDFrame):
46324627
) -> Scalar: ...
46334628
@overload
46344629
def std(
4635-
self: Series[Timestamp] | Series[Timedelta],
4630+
self: Series[Never],
4631+
axis: AxisIndex | None = 0,
4632+
skipna: _bool | None = True,
4633+
ddof: int = 1,
4634+
numeric_only: _bool = False,
4635+
**kwargs: Any,
4636+
) -> Any: ...
4637+
@overload
4638+
def std(
4639+
self: Series[complex],
4640+
axis: AxisIndex | None = 0,
4641+
skipna: _bool | None = True,
4642+
level: None = ...,
4643+
ddof: int = ...,
4644+
numeric_only: _bool = False,
4645+
**kwargs: Any,
4646+
) -> np.float64: ...
4647+
@overload
4648+
def std(
4649+
self: Series[Timestamp],
46364650
axis: AxisIndex | None = 0,
46374651
skipna: _bool | None = True,
46384652
level: None = ...,
@@ -4642,13 +4656,13 @@ class Series(IndexOpsMixin[S1], NDFrame):
46424656
) -> Timedelta: ...
46434657
@overload
46444658
def std(
4645-
self,
4659+
self: SupportsGetItem[Scalar, SupportsTruedivInt[S2]],
46464660
axis: AxisIndex | None = 0,
46474661
skipna: _bool | None = True,
46484662
ddof: int = 1,
46494663
numeric_only: _bool = False,
46504664
**kwargs: Any,
4651-
) -> float: ...
4665+
) -> S2: ...
46524666
def sum(
46534667
self: SupportsGetItem[Scalar, _SupportsAdd[_T]],
46544668
axis: AxisIndex | None = 0,

tests/series/test_agg.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,73 @@
1313

1414
def test_agg_any_float() -> None:
1515
series = pd.DataFrame({"A": [1.0, float("nan"), 2.0]})["A"]
16+
check(assert_type(series.mean(), Any), np.float64)
1617
check(assert_type(series.median(), Any), np.float64)
18+
check(assert_type(series.std(), Any), np.float64)
1719

1820

1921
def test_agg_bool() -> None:
2022
series = pd.Series([True, False, True])
23+
check(assert_type(series.mean(), float), np.float64)
2124
check(assert_type(series.median(), float), np.float64)
25+
check(assert_type(series.std(), float), np.float64)
2226

2327

2428
def test_agg_int() -> None:
2529
series = pd.Series([3, 1, 2])
30+
check(assert_type(series.mean(), float), np.float64)
2631
check(assert_type(series.median(), float), np.float64)
32+
check(assert_type(series.std(), float), np.float64)
2733

2834

2935
def test_agg_float() -> None:
3036
series = pd.Series([3.0, float("nan"), 2.0])
37+
check(assert_type(series.mean(), float), np.float64)
3138
check(assert_type(series.median(), float), np.float64)
39+
check(assert_type(series.std(), float), np.float64)
3240

3341

3442
def test_agg_complex() -> None:
3543
series = pd.Series([3j, 3 + 4j, 2j])
44+
check(assert_type(series, "pd.Series[complex]"), pd.Series, np.complex128)
45+
46+
check(assert_type(series.mean(), complex), np.complex128)
3647
with pytest_warns_bounded(
3748
np.exceptions.ComplexWarning,
3849
r"Casting complex values to real discards the imaginary part",
3950
):
4051
check(assert_type(series.median(), float), np.float64)
52+
with (
53+
pytest_warns_bounded(
54+
np.exceptions.ComplexWarning,
55+
r"Casting complex values to real discards the imaginary part",
56+
),
57+
pytest_warns_bounded(RuntimeWarning, r"invalid value encountered in sqrt"),
58+
):
59+
check(assert_type(series.std(), np.float64), np.float64)
4160

4261

4362
def test_agg_str() -> None:
4463
series = pd.Series(["1", "a", "🐼"])
4564
if TYPE_CHECKING_INVALID_USAGE:
65+
series.mean() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]
4666
series.median() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]
67+
series.std() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]
4768

4869

4970
def test_agg_ts() -> None:
5071
series = pd.Series(pd.to_datetime(["2025-09-18", "2025-09-18", "2025-09-18"]))
5172
check(assert_type(series, "pd.Series[pd.Timestamp]"), pd.Series, pd.Timestamp)
5273

74+
check(assert_type(series.mean(), pd.Timestamp), pd.Timestamp)
5375
check(assert_type(series.median(), pd.Timestamp), pd.Timestamp)
76+
check(assert_type(series.std(), pd.Timedelta), pd.Timedelta)
5477

5578

5679
def test_agg_td() -> None:
5780
series = pd.Series(pd.to_timedelta(["1 days", "2 days", "3 days"]))
5881
check(assert_type(series, "pd.Series[pd.Timedelta]"), pd.Series, pd.Timedelta)
5982

83+
check(assert_type(series.mean(), pd.Timedelta), pd.Timedelta)
6084
check(assert_type(series.median(), pd.Timedelta), pd.Timedelta)
85+
check(assert_type(series.std(), pd.Timedelta), pd.Timedelta)

tests/series/test_series.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,6 @@ def test_types_rank() -> None:
495495

496496
def test_types_mean() -> None:
497497
s = pd.Series([1, 2, 3, np.nan])
498-
check(assert_type(s.mean(), float), float)
499498
check(
500499
assert_type(s.groupby(level=0).mean(), "pd.Series[float]"),
501500
pd.Series,
@@ -740,7 +739,6 @@ def test_types_var() -> None:
740739

741740
def test_types_std() -> None:
742741
s = pd.Series([-10, 2, 3, 10])
743-
s.std()
744742
s.std(axis=0, ddof=1)
745743
s.std(skipna=True, numeric_only=False)
746744

tests/test_timefuncs.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,22 +1724,6 @@ def test_timedeltaseries_add_timestampseries() -> None:
17241724
check(assert_type(plus, "pd.Series[pd.Timestamp]"), pd.Series, pd.Timestamp)
17251725

17261726

1727-
def test_mean_std() -> None:
1728-
s = pd.Series([pd.Timedelta("1 ns"), pd.Timedelta("2 ns"), pd.Timedelta("3 ns")])
1729-
check(assert_type(s.mean(), pd.Timedelta), pd.Timedelta)
1730-
check(assert_type(s.std(), pd.Timedelta), pd.Timedelta)
1731-
1732-
s2 = pd.Series(
1733-
[
1734-
pd.Timestamp("2021-01-01"),
1735-
pd.Timestamp("2021-01-02"),
1736-
pd.Timestamp("2021-01-03"),
1737-
]
1738-
)
1739-
check(assert_type(s2.mean(), pd.Timestamp), pd.Timestamp)
1740-
check(assert_type(s2.std(), pd.Timedelta), pd.Timedelta)
1741-
1742-
17431727
def test_timestamp_strptime_fails():
17441728
if TYPE_CHECKING_INVALID_USAGE:
17451729
assert_never(

ttest.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)