Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions pandas-stubs/core/series.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -4610,14 +4610,33 @@ class Series(IndexOpsMixin[S1], ElementOpsMixin[S1], NDFrame):
**kwargs: Any,
) -> np_1darray: ...
def tolist(self) -> list[S1]: ...
@overload
def var(
self,
self: Series[Never],
axis: AxisIndex | None = 0,
skipna: _bool | None = True,
ddof: int = 1,
numeric_only: _bool = False,
**kwargs: Any,
) -> Scalar: ...
) -> float: ...
@overload
def var(
self: Series[complex],
axis: AxisIndex | None = 0,
skipna: _bool | None = True,
ddof: int = 1,
numeric_only: _bool = False,
**kwargs: Any,
) -> np.float64: ...
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
) -> np.float64: ...
) -> float: ...

@overload
def var(
self: SupportsGetItem[Scalar, SupportsTruedivInt[S2]],
axis: AxisIndex | None = 0,
skipna: _bool | None = True,
ddof: int = 1,
numeric_only: _bool = False,
**kwargs: Any,
) -> S2: ...
# Rename axis with `mapper`, `axis`, and `inplace=True`
@overload
def rename_axis(
Expand Down
11 changes: 11 additions & 0 deletions tests/series/test_agg.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,31 @@ def test_agg_any_float() -> None:
check(assert_type(series.mean(), float), np.float64)
check(assert_type(series.median(), float), np.float64)
check(assert_type(series.std(), float), np.float64)
check(assert_type(series.var(), float), np.float64)


def test_agg_bool() -> None:
series = pd.Series([True, False, True])
check(assert_type(series.mean(), float), np.float64)
check(assert_type(series.median(), float), np.float64)
check(assert_type(series.std(), float), np.float64)
check(assert_type(series.var(), float), np.float64)


def test_agg_int() -> None:
series = pd.Series([3, 1, 2])
check(assert_type(series.mean(), float), np.float64)
check(assert_type(series.median(), float), np.float64)
check(assert_type(series.std(), float), np.float64)
check(assert_type(series.var(), float), np.float64)


def test_agg_float() -> None:
series = pd.Series([3.0, float("nan"), 2.0])
check(assert_type(series.mean(), float), np.float64)
check(assert_type(series.median(), float), np.float64)
check(assert_type(series.std(), float), np.float64)
check(assert_type(series.var(), float), np.float64)


def test_agg_complex() -> None:
Expand All @@ -57,6 +61,11 @@ def test_agg_complex() -> None:
),
):
check(assert_type(series.std(), np.float64), np.float64)
with pytest_warns_bounded(
np.exceptions.ComplexWarning,
r"Casting complex values to real discards the imaginary part",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please use upper=2.3.99

):
check(assert_type(series.var(), np.float64), np.float64)


def test_agg_str() -> None:
Expand All @@ -65,6 +74,7 @@ def test_agg_str() -> None:
series.mean() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]
series.median() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]
series.std() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]
series.var() # type: ignore[misc] # pyright: ignore[reportAttributeAccessIssue]


def test_agg_ts() -> None:
Expand All @@ -83,3 +93,4 @@ def test_agg_td() -> None:
check(assert_type(series.mean(), pd.Timedelta), pd.Timedelta)
check(assert_type(series.median(), pd.Timedelta), pd.Timedelta)
check(assert_type(series.std(), pd.Timedelta), pd.Timedelta)
# Note: var() is not supported for Timedelta series at runtime
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use if TYPE_CHECKING_INVALID_USAGE and make sure series.var() here gives either errors by type checkers (like in test_agg_str) or Never (assert_type(series.var(), Never)).

Error is preferable over Never.

6 changes: 3 additions & 3 deletions tests/series/test_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -780,9 +780,9 @@ def test_types_abs() -> None:

def test_types_var() -> None:
s = pd.Series([-10, 2, 3, 10])
s.var()
s.var(axis=0, ddof=1)
s.var(skipna=True, numeric_only=False)
check(assert_type(s.var(), float), np.float64)
check(assert_type(s.var(axis=0, ddof=1), float), np.float64)
check(assert_type(s.var(skipna=True, numeric_only=False), float), np.float64)


def test_types_std() -> None:
Expand Down