Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH1089 Migrate frame/series tests to new framework #1093

Open
wants to merge 15 commits into
base: main
Choose a base branch
from
Open
43 changes: 21 additions & 22 deletions pandas-stubs/core/series.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -1628,12 +1628,6 @@ class Series(IndexOpsMixin[S1], NDFrame):
self, other: int | np_ndarray_anyint | Series[int]
) -> Series[int]: ...
# def __array__(self, dtype: Optional[_bool] = ...) -> _np_ndarray
@overload
def __div__(self: Series[int], other: Series[int]) -> Series[float]: ...
@overload
def __div__(self: Series[int], other: int) -> Series[float]: ...
@overload
def __div__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
def __eq__(self, other: object) -> Series[_bool]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
def __floordiv__(self, other: num | _ListLike | Series[S1]) -> Series[int]: ...
def __ge__( # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
Expand All @@ -1649,15 +1643,19 @@ class Series(IndexOpsMixin[S1], NDFrame):
self, other: S1 | _ListLike | Series[S1] | datetime | timedelta | date
) -> Series[_bool]: ...
@overload
def __mul__( # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
self, other: S1 | Self
) -> Self: ...
@overload
def __mul__(
self, other: timedelta | Timedelta | TimedeltaSeries | np.timedelta64
) -> TimedeltaSeries: ...
Dr-Irv marked this conversation as resolved.
Show resolved Hide resolved
@overload
def __mul__(self: Series[int], other: int) -> Series[int]: ...
@overload
def __mul__(self: Series[int], other: Series[int]) -> Series[int]: ...
def __mul__( # pyright: ignore[reportOverlappingOverload]
self: Series[int], other: Series[int] | int
) -> Series[int]: ...
@overload
def __mul__(self: Series[int], other: Series[float]) -> Series[float]: ...
def __mul__(self: Series[int], other: Series[float] | float) -> Series[float]: ...
@overload
def __mul__(self: Series[Any], other: Series[Any]) -> Series: ...
@overload
Expand Down Expand Up @@ -1687,12 +1685,6 @@ class Series(IndexOpsMixin[S1], NDFrame):
def __rand__( # pyright: ignore[reportIncompatibleMethodOverride]
self, other: int | np_ndarray_anyint | Series[int]
) -> Series[int]: ...
@overload
def __rdiv__(self: Series[int], other: int) -> Series[float]: ...
@overload
def __rdiv__(self: Series[int], other: Series[int]) -> Series[float]: ...
@overload
def __rdiv__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
def __rdivmod__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
def __rfloordiv__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
def __rmod__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
Expand Down Expand Up @@ -1741,16 +1733,23 @@ class Series(IndexOpsMixin[S1], NDFrame):
@overload
def __sub__(
self: Series[int],
other: int,
other: int | Series[int],
) -> Series[int]: ...
@overload
def __sub__(
self,
other: complex,
) -> Series[complex]: ...
@overload
def __sub__(self, other: S1 | Self) -> Self: ...
Dr-Irv marked this conversation as resolved.
Show resolved Hide resolved
@overload
def __sub__(self, other: num | _ListLike | Series) -> Series: ...
def __truediv__(self, other: num | _ListLike | Series[S1] | Path) -> Series: ...
@overload
def __truediv__(self: Series[int], other: Series[int] | int) -> Series[float]: ...
@overload
def __truediv__(
self, other: num | _ListLike | Series[S1] | Path
) -> Series | Self: ...
Dr-Irv marked this conversation as resolved.
Show resolved Hide resolved
# ignore needed for mypy as we want different results based on the arguments
@overload # type: ignore[override]
def __xor__( # pyright: ignore[reportOverlappingOverload]
Expand Down Expand Up @@ -1956,9 +1955,9 @@ class Series(IndexOpsMixin[S1], NDFrame):
@overload
def mul(
self: Series[int],
other: Series[int],
other: Series[int] | int,
level: Level | None = ...,
fill_value: float | None = ...,
fill_value: int | None = ...,
axis: AxisIndex | None = ...,
) -> Series[int]: ...
@overload
Expand Down Expand Up @@ -2152,7 +2151,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
**kwargs,
) -> float: ...
@overload
def sub(
def sub( # pyright: ignore[reportOverlappingOverload]
self: Series[int],
other: int,
level: Level | None = ...,
Expand All @@ -2166,7 +2165,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
level: Level | None = ...,
fill_value: float | None = ...,
axis: AxisIndex | None = ...,
) -> Series[int]: ...
) -> Series[float]: ...
@overload
def sub(
self,
Expand Down
26 changes: 15 additions & 11 deletions tests/test_series.py
Original file line number Diff line number Diff line change
Expand Up @@ -653,15 +653,14 @@ def test_types_element_wise_arithmetic() -> None:
check(assert_type(s + s2, "pd.Series[int]"), pd.Series, np.integer)
check(assert_type(s.add(s2, fill_value=0), "pd.Series[int]"), pd.Series, np.integer)

check(assert_type(s - s2, pd.Series), pd.Series, np.integer)
check(assert_type(s - s2, "pd.Series[int]"), pd.Series, np.integer)
check(assert_type(s.sub(s2, fill_value=0), "pd.Series[int]"), pd.Series, np.integer)

check(assert_type(s * s2, "pd.Series[int]"), pd.Series, np.integer)
check(assert_type(s.mul(s2, fill_value=0), "pd.Series[int]"), pd.Series, np.integer)

# GH1089 should be the following
# check(assert_type(s / s2, "pd.Series[float]"), pd.Series, np.float64)
check(assert_type(s / s2, "pd.Series"), pd.Series, np.float64)
check(assert_type(s / s2, "pd.Series[float]"), pd.Series, np.float64)
check(
assert_type(s.div(s2, fill_value=0), "pd.Series[float]"), pd.Series, np.float64
)
Expand Down Expand Up @@ -696,11 +695,9 @@ def test_types_scalar_arithmetic() -> None:
check(assert_type(s.sub(1, fill_value=0), "pd.Series[int]"), pd.Series, np.integer)

check(assert_type(s * 2, "pd.Series[int]"), pd.Series, np.integer)
check(assert_type(s.mul(2, fill_value=0), pd.Series), pd.Series, np.integer)
check(assert_type(s.mul(2, fill_value=0), "pd.Series[int]"), pd.Series, np.integer)

# GH1089 should be
# check(assert_type(s / 2, "pd.Series[float]"), pd.Series, np.float64)
check(assert_type(s / 2, pd.Series), pd.Series, np.float64)
check(assert_type(s / 2, "pd.Series[float]"), pd.Series, np.float64)
check(
assert_type(s.div(2, fill_value=0), "pd.Series[float]"), pd.Series, np.float64
)
Expand Down Expand Up @@ -1312,10 +1309,12 @@ def test_types_dot() -> None:
s1 = pd.Series([0, 1, 2, 3])
s2 = pd.Series([-1, 2, -3, 4])
df1 = pd.DataFrame([[0, 1], [-2, 3], [4, -5], [6, 7]])
df2 = pd.DataFrame([[0.0, 1.0], [-2.0, 3.0], [4.0, -5.0], [6.0, 7.0]])
n1 = np.array([[0, 1], [1, 2], [-1, -1], [2, 0]])
check(assert_type(s1.dot(s2), Scalar), np.integer)
check(assert_type(s1 @ s2, Scalar), np.integer)
check(assert_type(s1.dot(df1), pd.Series), pd.Series, np.integer)
Dr-Irv marked this conversation as resolved.
Show resolved Hide resolved
check(assert_type(s1.dot(df2), pd.Series), pd.Series, np.float64)
check(assert_type(s1 @ df1, pd.Series), pd.Series)
check(assert_type(s1.dot(n1), np.ndarray), np.ndarray)
check(assert_type(s1 @ n1, np.ndarray), np.ndarray)
Expand All @@ -1336,10 +1335,15 @@ def test_series_min_max_sub_axis() -> None:
sm = s1 * s2
sd = s1 / s2
check(assert_type(sa, pd.Series), pd.Series)
check(assert_type(ss, pd.Series), pd.Series)
# TODO GH1089 This should not match to Series[int]
check(assert_type(sm, pd.Series), pd.Series, np.integer) # pyright: ignore[reportAssertTypeFailure]
check(assert_type(sd, pd.Series), pd.Series)
check(
assert_type(ss, pd.Series), # pyright: ignore[reportAssertTypeFailure]
Dr-Irv marked this conversation as resolved.
Show resolved Hide resolved
pd.Series,
)
check(assert_type(sm, pd.Series), pd.Series)
check(
assert_type(sd, pd.Series), # pyright: ignore[reportAssertTypeFailure]
pd.Series,
)


def test_series_index_isin() -> None:
Expand Down
Loading