Skip to content
Merged
1 change: 1 addition & 0 deletions pandas-stubs/_libs/tslibs/strptime.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# pyright
from typing import Any

def array_strptime(*args, **kwargs) -> Any: ...
5 changes: 4 additions & 1 deletion pandas-stubs/_libs/tslibs/timedeltas.pyi
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# pyright: strict
import datetime as dt
from datetime import timedelta
from typing import (
Expand Down Expand Up @@ -241,7 +242,9 @@ class Timedelta(timedelta):
@overload
def __rmul__(self, other: float) -> Timedelta: ...
@overload
def __rmul__(self, other: np.ndarray) -> np.ndarray: ...
def __rmul__(
self, other: npt.NDArray[np.floating] | npt.NDArray[np.integer]
) -> npt.NDArray[np.timedelta64]: ...
@overload
def __rmul__(self, other: Series[int]) -> TimedeltaSeries: ...
@overload
Expand Down
24 changes: 17 additions & 7 deletions pandas-stubs/_libs/tslibs/timestamps.pyi
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
# pyright: strict
from datetime import (
_IsoCalendarDate,
date as _date,
datetime,
time as _time,
timedelta,
tzinfo as _tzinfo,
)
from datetime import _IsoCalendarDate # pyright: ignore[reportPrivateUsage]
import sys
from time import struct_time
from typing import (
Any,
ClassVar,
Literal,
SupportsIndex,
Expand Down Expand Up @@ -166,25 +168,33 @@ class Timestamp(datetime, SupportsIndex):
@overload # type: ignore[override]
def __le__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc]
@overload
def __le__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ...
def __le__(
self, other: DatetimeIndex | npt.NDArray[np.datetime64]
) -> np_ndarray_bool: ...
@overload
def __le__(self, other: TimestampSeries) -> Series[bool]: ...
@overload # type: ignore[override]
def __lt__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc]
@overload
def __lt__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ...
def __lt__(
self, other: DatetimeIndex | npt.NDArray[np.datetime64]
) -> np_ndarray_bool: ...
@overload
def __lt__(self, other: TimestampSeries) -> Series[bool]: ...
@overload # type: ignore[override]
def __ge__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc]
@overload
def __ge__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ...
def __ge__(
self, other: DatetimeIndex | npt.NDArray[np.datetime64]
) -> np_ndarray_bool: ...
@overload
def __ge__(self, other: TimestampSeries) -> Series[bool]: ...
@overload # type: ignore[override]
def __gt__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[misc]
@overload
def __gt__(self, other: Index | npt.NDArray[np.datetime64]) -> np_ndarray_bool: ...
def __gt__(
self, other: DatetimeIndex | npt.NDArray[np.datetime64]
) -> np_ndarray_bool: ...
@overload
def __gt__(self, other: TimestampSeries) -> Series[bool]: ...
# error: Signature of "__add__" incompatible with supertype "date"/"datetime"
Expand Down Expand Up @@ -224,15 +234,15 @@ class Timestamp(datetime, SupportsIndex):
@overload
def __eq__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap]
@overload
def __eq__(self, other: npt.NDArray[np.datetime64] | Index) -> np_ndarray_bool: ... # type: ignore[overload-overlap]
def __eq__(self, other: npt.NDArray[np.datetime64] | Index[Any]) -> np_ndarray_bool: ... # type: ignore[overload-overlap]
@overload
def __eq__(self, other: object) -> Literal[False]: ...
@overload
def __ne__(self, other: Timestamp | datetime | np.datetime64) -> bool: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
@overload
def __ne__(self, other: TimestampSeries) -> Series[bool]: ... # type: ignore[overload-overlap]
@overload
def __ne__(self, other: npt.NDArray[np.datetime64] | Index) -> np_ndarray_bool: ... # type: ignore[overload-overlap]
def __ne__(self, other: npt.NDArray[np.datetime64] | Index[Any]) -> np_ndarray_bool: ... # type: ignore[overload-overlap]
@overload
def __ne__(self, other: object) -> Literal[True]: ...
def __hash__(self) -> int: ...
Expand Down
25 changes: 23 additions & 2 deletions tests/test_scalars.py
Original file line number Diff line number Diff line change
Expand Up @@ -713,8 +713,16 @@ def test_timedelta_mul_div() -> None:

check(assert_type(md_int * td, pd.Timedelta), pd.Timedelta)
check(assert_type(md_float * td, pd.Timedelta), pd.Timedelta)
check(assert_type(md_ndarray_intp * td, np.ndarray), np.ndarray, np.timedelta64)
check(assert_type(md_ndarray_float * td, np.ndarray), np.ndarray, np.timedelta64)
check(
assert_type(md_ndarray_intp * td, npt.NDArray[np.timedelta64]),
np.ndarray,
np.timedelta64,
)
check(
assert_type(md_ndarray_float * td, npt.NDArray[np.timedelta64]),
np.ndarray,
np.timedelta64,
)
check(assert_type(mp_series_int * td, TimedeltaSeries), pd.Series, pd.Timedelta)
check(assert_type(md_series_float * td, TimedeltaSeries), pd.Series, pd.Timedelta)
check(assert_type(md_int64_index * td, pd.TimedeltaIndex), pd.TimedeltaIndex)
Expand Down Expand Up @@ -1253,6 +1261,8 @@ def test_timestamp_cmp() -> None:
c_np_dt64 = np.datetime64(1, "ns")
c_dt_datetime = dt.datetime(year=2000, month=1, day=1)
c_datetimeindex = pd.DatetimeIndex(["2000-1-1"])
# DatetimeIndex, but the type checker detects it to be Index[Unknown].
c_unknown_index = pd.DataFrame({"a": [1]}, index=c_datetimeindex).index
c_np_ndarray_dt64 = np_dt64_arr
c_series_dt64: TimestampSeries = pd.Series([1, 2, 3], dtype="datetime64[ns]")
c_series_timestamp = pd.Series(pd.DatetimeIndex(["2000-1-1"]))
Expand All @@ -1273,6 +1283,8 @@ def test_timestamp_cmp() -> None:

check(assert_type(ts > c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts <= c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts > c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts <= c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_)

check(assert_type(ts > c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts <= c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_)
Expand Down Expand Up @@ -1313,6 +1325,8 @@ def test_timestamp_cmp() -> None:

check(assert_type(ts >= c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts < c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts >= c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts < c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_)

check(assert_type(ts >= c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_)
check(assert_type(ts < c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_)
Expand Down Expand Up @@ -1358,6 +1372,13 @@ def test_timestamp_cmp() -> None:
assert_type(ts != c_datetimeindex, np_ndarray_bool), np.ndarray, np.bool_
)
assert (eq_arr != ne_arr).all()
eq_arr = check(
assert_type(ts == c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_
)
ne_arr = check(
assert_type(ts != c_unknown_index, np_ndarray_bool), np.ndarray, np.bool_
)
assert (eq_arr != ne_arr).all()

eq_arr = check(
assert_type(ts == c_np_ndarray_dt64, np_ndarray_bool), np.ndarray, np.bool_
Expand Down
Loading