Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
8a99cf4
refactor: only drop TimestampSeries https://github.com/pandas-dev/pan…
cmp0xff Jul 13, 2025
ed69ec5
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274/fi…
cmp0xff Jul 28, 2025
f1cf19f
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Aug 2, 2025
ad0ee10
less mypy ignore
cmp0xff Aug 4, 2025
2dada6d
fix: even less mypy ignores
cmp0xff Aug 5, 2025
0359fd5
refactor(comment): https://github.com/pandas-dev/pandas-stubs/pull/12…
cmp0xff Aug 5, 2025
34703d7
feat: sub
cmp0xff Aug 5, 2025
c4d657e
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274/fi…
cmp0xff Aug 6, 2025
1eeb809
fix: pyrefly
cmp0xff Aug 6, 2025
ceff1fe
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274/fi…
cmp0xff Aug 6, 2025
dd8baff
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#di…
cmp0xff Aug 6, 2025
8a07eca
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#di…
cmp0xff Aug 6, 2025
3458fc9
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#di…
cmp0xff Aug 6, 2025
d333902
fix: reduce ignore
cmp0xff Aug 6, 2025
368c3ff
refactor: explain a temporary failure
cmp0xff Aug 7, 2025
2f661ae
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Aug 7, 2025
15996ff
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#di…
cmp0xff Aug 7, 2025
c9c46b0
feat: arithmetic sub
cmp0xff Aug 8, 2025
e3447cf
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1312#di…
cmp0xff Aug 8, 2025
672009e
feat(comment): https://github.com/pandas-dev/pandas-stubs/pull/1312#d…
cmp0xff Aug 11, 2025
5dab881
Merge branch 'main' into feature/cmp0xff/arithmetic-sub
cmp0xff Aug 14, 2025
1e9b11d
fix(comment): completeness https://github.com/pandas-dev/pandas-stubs…
cmp0xff Aug 14, 2025
6484af7
feat(series): arithmetic mul
cmp0xff Aug 8, 2025
72c2bd1
Merge branch 'feature/cmp0xff/arithmetic-mul' into hotfix/cmp0xff/gh7…
cmp0xff Aug 16, 2025
0657417
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Aug 19, 2025
7a87d18
fix: type asserts
cmp0xff Aug 20, 2025
6469196
feat: tests for addition
cmp0xff Aug 20, 2025
aac6cff
fix(mypy): attempt for python > 310
cmp0xff Aug 20, 2025
72208c7
feat: tests for subtraction
cmp0xff Aug 20, 2025
533b15d
fix: pyright
cmp0xff Aug 20, 2025
ce06dc2
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#di…
cmp0xff Aug 20, 2025
f855f86
refactor: revert unused design
cmp0xff Aug 20, 2025
8a01e12
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Aug 22, 2025
0a84cd0
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Aug 27, 2025
253e61a
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Sep 2, 2025
f736d55
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Sep 4, 2025
3ff2c36
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Sep 11, 2025
f10e990
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Sep 13, 2025
4e5e68c
feat: progressive philosophy
cmp0xff Sep 13, 2025
55fdfe9
Merge branch 'main' into hotfix/cmp0xff/gh718-drop-tss
cmp0xff Sep 14, 2025
6572abc
fix(pytest): remove invalid tests
cmp0xff Sep 15, 2025
7b380b3
fix: comment
cmp0xff Sep 15, 2025
e7705e4
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274/fi…
cmp0xff Sep 15, 2025
b487bc9
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#di…
cmp0xff Sep 15, 2025
ff37521
chore(philosophy): first draft
cmp0xff Sep 15, 2025
61a9703
fix(pyright): median
cmp0xff Sep 15, 2025
e2b1901
fix: comment
cmp0xff Sep 16, 2025
a488907
fix(comment): https://github.com/pandas-dev/pandas-stubs/pull/1274#pu…
cmp0xff Sep 17, 2025
a0ae00d
fix(comment): test_sub
cmp0xff Sep 17, 2025
ed7de8d
fix: typo
cmp0xff Sep 17, 2025
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
2 changes: 1 addition & 1 deletion docs/philosophy.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ type checkers and be warned if they are unreasonable.

When there are several possible valid outcomes of an arithmetic expression,
for example numeric types `Series[bool]`, `Series[int]`, etc., `Series[Any]`
will be given as the resulting typing.
will be given as the resulting type of the arithmetic operation.

### Interval is Generic

Expand Down
45 changes: 3 additions & 42 deletions pandas-stubs/core/series.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -2211,23 +2211,6 @@ class Series(IndexOpsMixin[S1], NDFrame):
@overload
def __and__(self, other: int | np_ndarray_anyint | Series[int]) -> Series[int]: ...
def __eq__(self, other: object) -> Series[_bool]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
@overload
def __floordiv__(
self: Series[Timedelta], other: float | Sequence[float]
) -> TimedeltaSeries: ...
@overload
def __floordiv__(
self: Series[Timedelta],
other: (
timedelta
| np.timedelta64
| np_ndarray_td
| TimedeltaIndex
| Series[Timedelta]
| TimedeltaSeries
),
) -> Series[int]: ...
@overload
def __floordiv__(self, other: num | _ListLike | Series[S1]) -> Series[int]: ...
def __ge__( # type: ignore[override]
self, other: S1 | _ListLike | Series[S1] | datetime | timedelta | date
Expand Down Expand Up @@ -2750,19 +2733,6 @@ class Series(IndexOpsMixin[S1], NDFrame):
@overload
def __rand__(self, other: int | np_ndarray_anyint | Series[int]) -> Series[int]: ...
def __rdivmod__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
@overload
def __rfloordiv__(
self: Series[Timedelta],
other: (
timedelta
| np.timedelta64
| np_ndarray_td
| TimedeltaIndex
| Series[Timedelta]
| TimedeltaSeries
),
) -> Series[int]: ...
@overload
def __rfloordiv__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
def __rmod__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
def __rpow__(self, other: num | _ListLike | Series[S1]) -> Series[S1]: ...
Expand Down Expand Up @@ -3034,7 +3004,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
@overload
def sub(
self: Series[Timestamp],
other: datetime | np.datetime64 | np_ndarray_dt,
other: datetime | Sequence[datetime] | np.datetime64 | np_ndarray_dt,
level: Level | None = None,
fill_value: float | None = None,
axis: int = 0,
Expand All @@ -3052,6 +3022,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
self: Series[Timestamp],
other: (
timedelta
| Sequence[timedelta]
| np.timedelta64
| np_ndarray_td
| TimedeltaIndex
Expand Down Expand Up @@ -3177,8 +3148,6 @@ class Series(IndexOpsMixin[S1], NDFrame):
| Series[complex]
),
) -> Series[complex]: ...
# @overload
# def __rsub__(self: Series[Timestamp], other: np_ndarray_td) -> Never: ...
@overload
def __rsub__(
self: Series[Timestamp], other: datetime | np.datetime64 | np_ndarray_dt
Expand Down Expand Up @@ -3322,18 +3291,10 @@ class Series(IndexOpsMixin[S1], NDFrame):
fill_value: float | None = None,
axis: int = 0,
) -> Series[complex]: ...
# @overload
# def rsub(
# self: Series[Timestamp],
# other: np_ndarray_td,
# level: Level | None = None,
# fill_value: float | None = None,
# axis: int = 0,
# ) -> Never: ...
@overload
def rsub(
self: Series[Timestamp],
other: datetime | np.datetime64 | np_ndarray_dt,
other: datetime | Sequence[datetime] | np.datetime64 | np_ndarray_dt,
level: Level | None = None,
fill_value: float | None = None,
axis: int = 0,
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ types-pytz = ">= 2022.1.1"
numpy = ">= 1.23.5"

[tool.poetry.group.dev.dependencies]
mypy = "1.17.1"
mypy = "1.18.1"
pandas = "2.3.2"
pyarrow = ">=10.0.1"
pytest = ">=7.1.2"
Expand Down
6 changes: 2 additions & 4 deletions tests/series/arithmetic/test_sub.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,12 +167,10 @@ def test_sub_ts_py_datetime() -> None:
_5 = a - left_ts # type: ignore[operator] # pyright: ignore[reportOperatorIssue]

check(assert_type(left_ts.sub(s), "TimedeltaSeries"), pd.Series, pd.Timedelta)
if TYPE_CHECKING_INVALID_USAGE:
left_ts.sub(a) # type: ignore[arg-type] # pyright: ignore[reportArgumentType,reportCallIssue]
check(assert_type(left_ts.sub(a), "TimedeltaSeries"), pd.Series, pd.Timedelta)

check(assert_type(left_ts.rsub(s), "TimedeltaSeries"), pd.Series, pd.Timedelta)
if TYPE_CHECKING_INVALID_USAGE:
left_ts.rsub(a) # type: ignore[arg-type] # pyright: ignore[reportArgumentType,reportCallIssue]
check(assert_type(left_ts.rsub(a), "TimedeltaSeries"), pd.Series, pd.Timedelta)


def test_sub_ts_numpy_datetime() -> None:
Expand Down
2 changes: 2 additions & 0 deletions tests/series/arithmetic/timestamp/test_add.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ def test_add_numpy_array() -> None:
# `Series`.
if TYPE_CHECKING_INVALID_USAGE:
assert_type(s + left, "npt.NDArray[np.datetime64]")
# Here even the dtype of `NDArray` is in the wrong direction.
# `np.datetime64` would be more sensible.
check(assert_type(d + left, "npt.NDArray[np.timedelta64]"), pd.Series, pd.Timestamp)

if TYPE_CHECKING_INVALID_USAGE:
Expand Down
9 changes: 5 additions & 4 deletions tests/series/arithmetic/timestamp/test_sub.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,12 @@ def test_sub_py_sequence() -> None:
_1 = s - left # type: ignore[operator] # pyright: ignore[reportOperatorIssue]
_b = d - left # type: ignore[operator] # pyright: ignore[reportOperatorIssue]

left.sub(s) # type: ignore[call-overload] # pyright: ignore[reportArgumentType,reportCallIssue]
left.sub(d) # type: ignore[call-overload] # pyright: ignore[reportArgumentType,reportCallIssue]
left.sub(s)
left.sub(d)

left.rsub(s) # type: ignore[call-overload] # pyright: ignore[reportArgumentType,reportCallIssue]
left.rsub(d) # type: ignore[call-overload] # pyright: ignore[reportArgumentType,reportCallIssue]
left.rsub(s)
if TYPE_CHECKING_INVALID_USAGE:
left.rsub(d) # type: ignore[arg-type] # pyright: ignore[reportArgumentType,reportCallIssue]


def test_sub_numpy_array() -> None:
Expand Down
Loading