Skip to content

Commit c99cedc

Browse files
committed
fix: #718 mean
1 parent 0abdfc6 commit c99cedc

File tree

2 files changed

+28
-79
lines changed

2 files changed

+28
-79
lines changed

pandas-stubs/core/series.pyi

Lines changed: 24 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ from typing import (
2525
Generic,
2626
Literal,
2727
NoReturn,
28+
TypeVar,
2829
overload,
2930
)
3031

@@ -181,6 +182,13 @@ from pandas.core.dtypes.dtypes import CategoricalDtype
181182

182183
from pandas.plotting import PlotAccessor
183184

185+
_scalar_timedelta: TypeAlias = timedelta | np.timedelta64 | BaseOffset | Timedelta
186+
_vector_timedelta: TypeAlias = (
187+
Sequence[timedelta] | Sequence[Timedelta] | Series[Timedelta] | TimedeltaIndex
188+
)
189+
_all_timedelta: TypeAlias = _scalar_timedelta | _vector_timedelta
190+
_stamp_and_delta = TypeVar("_stamp_and_delta", bound=Timestamp | Timedelta)
191+
184192
class _iLocIndexerSeries(_iLocIndexer, Generic[S1]):
185193
# get item
186194
@overload
@@ -1591,15 +1599,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
15911599
) -> Series[int]: ...
15921600
@overload
15931601
def __add__(
1594-
self: Series[Timestamp],
1595-
other: (
1596-
Timedelta
1597-
| Series[Timedelta]
1598-
| TimedeltaIndex
1599-
| np.timedelta64
1600-
| timedelta
1601-
| BaseOffset
1602-
),
1602+
self: Series[Timestamp], other: _all_timedelta
16031603
) -> Series[Timestamp]: ...
16041604
@overload
16051605
def __add__(self: Series[Timedelta], other: Period) -> PeriodSeries: ...
@@ -1686,7 +1686,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
16861686
def __or__(self, other: int | np_ndarray_anyint | Series[int]) -> Series[int]: ...
16871687
@overload
16881688
def __radd__(
1689-
self: Series[Timestamp], other: Series[Timedelta] | np.timedelta64 | timedelta
1689+
self: Series[Timestamp], other: _all_timedelta
16901690
) -> Series[Timestamp]: ...
16911691
@overload
16921692
def __radd__(
@@ -1707,14 +1707,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
17071707
def __rdivmod__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
17081708
@overload
17091709
def __rfloordiv__(
1710-
self: Series[Timedelta],
1711-
other: (
1712-
timedelta
1713-
| Series[Timedelta]
1714-
| np.timedelta64
1715-
| TimedeltaIndex
1716-
| Sequence[timedelta]
1717-
),
1710+
self: Series[Timedelta], other: _all_timedelta
17181711
) -> Series[int]: ...
17191712
@overload
17201713
def __rfloordiv__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
@@ -1737,16 +1730,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
17371730
def __rsub__(self, other: num | _ListLike | Series[S1]) -> Series: ...
17381731
@overload
17391732
def __rtruediv__(
1740-
self: Series[Timedelta],
1741-
other: (
1742-
timedelta
1743-
| Timedelta
1744-
| Sequence[Timedelta]
1745-
| Series[Timedelta]
1746-
| np.timedelta64
1747-
| TimedeltaIndex
1748-
| Sequence[timedelta]
1749-
),
1733+
self: Series[Timedelta], other: _all_timedelta
17501734
) -> Series[float]: ...
17511735
@overload
17521736
def __rtruediv__(self, other: num | _ListLike | Series[S1] | Path) -> Series: ...
@@ -1764,15 +1748,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
17641748
) -> Series[int]: ...
17651749
@overload
17661750
def __sub__(
1767-
self: Series[Timestamp],
1768-
other: (
1769-
Timedelta
1770-
| Series[Timedelta]
1771-
| TimedeltaIndex
1772-
| np.timedelta64
1773-
| timedelta
1774-
| BaseOffset
1775-
),
1751+
self: Series[Timestamp], other: _all_timedelta
17761752
) -> Series[Timestamp]: ...
17771753
@overload
17781754
def __sub__(
@@ -1794,16 +1770,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
17941770
) -> Series[Timestamp]: ...
17951771
@overload
17961772
def __truediv__(
1797-
self: Series[Timedelta],
1798-
other: (
1799-
timedelta
1800-
| Timedelta
1801-
| Sequence[Timedelta]
1802-
| Series[Timedelta]
1803-
| np.timedelta64
1804-
| TimedeltaIndex
1805-
| Sequence[timedelta]
1806-
),
1773+
self: Series[Timedelta], other: _all_timedelta
18071774
) -> Series[float]: ...
18081775
@overload
18091776
def __truediv__(
@@ -1996,25 +1963,16 @@ class Series(IndexOpsMixin[S1], NDFrame):
19961963
numeric_only: _bool = ...,
19971964
**kwargs: Any,
19981965
) -> S1: ...
1999-
# @overload
2000-
# def mean(
2001-
# self: Series[Timestamp],
2002-
# axis: AxisIndex | None = ...,
2003-
# skipna: _bool = ...,
2004-
# level: None = ...,
2005-
# numeric_only: _bool = ...,
2006-
# **kwargs: Any,
2007-
# ) -> Timestamp: ...
2008-
# @overload
2009-
# def mean(
2010-
# self: Series[Timedelta],
2011-
# axis: AxisIndex | None = ...,
2012-
# skipna: _bool = ...,
2013-
# level: None = ...,
2014-
# numeric_only: _bool = ...,
2015-
# **kwargs: Any,
2016-
# ) -> Timedelta: ...
2017-
# @overload
1966+
@overload
1967+
def mean(
1968+
self: Series[_stamp_and_delta],
1969+
axis: AxisIndex | None = ...,
1970+
skipna: _bool = ...,
1971+
level: None = ...,
1972+
numeric_only: _bool = ...,
1973+
**kwargs: Any,
1974+
) -> _stamp_and_delta: ...
1975+
@overload
20181976
def mean(
20191977
self,
20201978
axis: AxisIndex | None = ...,

tests/test_timefuncs.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -400,10 +400,7 @@ def test_series_dt_accessors() -> None:
400400
upper="2.3.99",
401401
):
402402
check(
403-
assert_type(
404-
s0.dt.to_pydatetime(),
405-
np.ndarray,
406-
),
403+
assert_type(s0.dt.to_pydatetime(), np.ndarray),
407404
np.ndarray if PD_LTE_23 else pd.Series,
408405
dt.datetime,
409406
)
@@ -598,13 +595,7 @@ def test_series_dt_accessors() -> None:
598595
"The behavior of TimedeltaProperties.to_pytimedelta is deprecated",
599596
lower="2.3.99",
600597
):
601-
check(
602-
assert_type(
603-
s2.dt.to_pytimedelta(),
604-
np.ndarray,
605-
),
606-
np.ndarray,
607-
)
598+
check(assert_type(s2.dt.to_pytimedelta(), np.ndarray), np.ndarray)
608599
check(assert_type(s2.dt.total_seconds(), "pd.Series[float]"), pd.Series, float)
609600
check(assert_type(s2.dt.unit, TimeUnit), str)
610601
check(
@@ -1497,7 +1488,7 @@ def test_timedeltaseries_add_timestampseries() -> None:
14971488

14981489
def test_mean_median_std() -> None:
14991490
s = pd.Series([pd.Timedelta("1 ns"), pd.Timedelta("2 ns"), pd.Timedelta("3 ns")])
1500-
# check(assert_type(s.mean(), pd.Timedelta), pd.Timedelta)
1491+
check(assert_type(s.mean(), pd.Timedelta), pd.Timedelta)
15011492
check(assert_type(s.median(), pd.Timedelta), pd.Timedelta)
15021493
check(assert_type(s.std(), pd.Timedelta), pd.Timedelta)
15031494

@@ -1508,7 +1499,7 @@ def test_mean_median_std() -> None:
15081499
pd.Timestamp("2021-01-03"),
15091500
]
15101501
)
1511-
# check(assert_type(s2.mean(), pd.Timestamp), pd.Timestamp)
1502+
check(assert_type(s2.mean(), pd.Timestamp), pd.Timestamp)
15121503
check(assert_type(s2.median(), pd.Timestamp), pd.Timestamp)
15131504
check(assert_type(s2.std(), pd.Timedelta), pd.Timedelta)
15141505

0 commit comments

Comments
 (0)