done
This commit is contained in:
@ -0,0 +1,406 @@
|
||||
# pyright: strict
|
||||
import datetime as dt
|
||||
from datetime import timedelta
|
||||
from typing import (
|
||||
ClassVar,
|
||||
Literal,
|
||||
NamedTuple,
|
||||
overload,
|
||||
)
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from pandas import (
|
||||
DatetimeIndex,
|
||||
Index,
|
||||
PeriodIndex,
|
||||
Series,
|
||||
TimedeltaIndex,
|
||||
)
|
||||
from pandas.core.series import (
|
||||
TimedeltaSeries,
|
||||
TimestampSeries,
|
||||
)
|
||||
from typing_extensions import (
|
||||
Self,
|
||||
TypeAlias,
|
||||
)
|
||||
|
||||
from pandas._libs.tslibs import (
|
||||
BaseOffset,
|
||||
NaTType,
|
||||
)
|
||||
from pandas._libs.tslibs.period import Period
|
||||
from pandas._libs.tslibs.timestamps import Timestamp
|
||||
from pandas._typing import (
|
||||
ShapeT,
|
||||
TimeUnit,
|
||||
np_1darray,
|
||||
np_ndarray,
|
||||
npt,
|
||||
)
|
||||
|
||||
class Components(NamedTuple):
|
||||
days: int
|
||||
hours: int
|
||||
minutes: int
|
||||
seconds: int
|
||||
milliseconds: int
|
||||
microseconds: int
|
||||
nanoseconds: int
|
||||
|
||||
# This should be kept consistent with the keys in the dict timedelta_abbrevs
|
||||
# in pandas/_libs/tslibs/timedeltas.pyx
|
||||
TimeDeltaUnitChoices: TypeAlias = Literal[
|
||||
"W",
|
||||
"w",
|
||||
"D",
|
||||
"d",
|
||||
"days",
|
||||
"day",
|
||||
"hours",
|
||||
"hour",
|
||||
"hr",
|
||||
"h",
|
||||
"m",
|
||||
"minute",
|
||||
"min",
|
||||
"minutes",
|
||||
"s",
|
||||
"seconds",
|
||||
"sec",
|
||||
"second",
|
||||
"ms",
|
||||
"milliseconds",
|
||||
"millisecond",
|
||||
"milli",
|
||||
"millis",
|
||||
"us",
|
||||
"microseconds",
|
||||
"microsecond",
|
||||
"µs",
|
||||
"micro",
|
||||
"micros",
|
||||
"ns",
|
||||
"nanoseconds",
|
||||
"nano",
|
||||
"nanos",
|
||||
"nanosecond",
|
||||
]
|
||||
|
||||
UnitChoices: TypeAlias = (
|
||||
TimeDeltaUnitChoices
|
||||
| Literal[
|
||||
"Y",
|
||||
"y",
|
||||
"M",
|
||||
]
|
||||
)
|
||||
|
||||
class Timedelta(timedelta):
|
||||
min: ClassVar[Timedelta] # pyright: ignore[reportIncompatibleVariableOverride]
|
||||
max: ClassVar[Timedelta] # pyright: ignore[reportIncompatibleVariableOverride]
|
||||
resolution: ClassVar[ # pyright: ignore[reportIncompatibleVariableOverride]
|
||||
Timedelta
|
||||
]
|
||||
value: int
|
||||
def __new__(
|
||||
cls,
|
||||
value: str | float | Timedelta | timedelta | np.timedelta64 = ...,
|
||||
unit: TimeDeltaUnitChoices = ...,
|
||||
*,
|
||||
days: float | np.integer | np.floating = ...,
|
||||
seconds: float | np.integer | np.floating = ...,
|
||||
microseconds: float | np.integer | np.floating = ...,
|
||||
milliseconds: float | np.integer | np.floating = ...,
|
||||
minutes: float | np.integer | np.floating = ...,
|
||||
hours: float | np.integer | np.floating = ...,
|
||||
weeks: float | np.integer | np.floating = ...,
|
||||
) -> Self: ...
|
||||
# GH 46171
|
||||
# While Timedelta can return pd.NaT, having the constructor return
|
||||
# a Union with NaTType makes things awkward for users of pandas
|
||||
@property
|
||||
def days(self) -> int: ...
|
||||
@property
|
||||
def nanoseconds(self) -> int: ...
|
||||
@property
|
||||
def seconds(self) -> int: ...
|
||||
@property
|
||||
def microseconds(self) -> int: ...
|
||||
def total_seconds(self) -> float: ...
|
||||
def to_pytimedelta(self) -> timedelta: ...
|
||||
def to_timedelta64(self) -> np.timedelta64: ...
|
||||
@property
|
||||
def asm8(self) -> np.timedelta64: ...
|
||||
# TODO: round/floor/ceil could return NaT?
|
||||
def round(self, freq: str | BaseOffset) -> Self: ...
|
||||
def floor(self, freq: str | BaseOffset) -> Self: ...
|
||||
def ceil(self, freq: str | BaseOffset) -> Self: ...
|
||||
@property
|
||||
def resolution_string(self) -> str: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __add__(self, other: timedelta | Timedelta | np.timedelta64) -> Timedelta: ...
|
||||
@overload
|
||||
def __add__(self, other: dt.datetime | np.datetime64 | Timestamp) -> Timestamp: ...
|
||||
@overload
|
||||
def __add__(self, other: NaTType) -> NaTType: ...
|
||||
@overload
|
||||
def __add__(self, other: Period) -> Period: ...
|
||||
@overload
|
||||
def __add__(self, other: dt.date) -> dt.date: ...
|
||||
@overload
|
||||
def __add__(self, other: PeriodIndex) -> PeriodIndex: ...
|
||||
@overload
|
||||
def __add__(self, other: DatetimeIndex) -> DatetimeIndex: ...
|
||||
@overload
|
||||
def __add__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __add__(
|
||||
self, other: np_ndarray[ShapeT, np.datetime64]
|
||||
) -> np_ndarray[ShapeT, np.datetime64]: ...
|
||||
@overload
|
||||
def __add__(self, other: pd.TimedeltaIndex) -> pd.TimedeltaIndex: ...
|
||||
@overload
|
||||
def __add__(
|
||||
self,
|
||||
other: TimedeltaSeries,
|
||||
) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __add__(self, other: TimestampSeries) -> TimestampSeries: ...
|
||||
@overload
|
||||
def __radd__(self, other: np.datetime64) -> Timestamp: ...
|
||||
@overload
|
||||
def __radd__(self, other: timedelta | Timedelta | np.timedelta64) -> Timedelta: ...
|
||||
@overload
|
||||
def __radd__(self, other: NaTType) -> NaTType: ...
|
||||
@overload
|
||||
def __radd__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __radd__(
|
||||
self, other: np_ndarray[ShapeT, np.datetime64]
|
||||
) -> np_ndarray[ShapeT, np.datetime64]: ...
|
||||
@overload
|
||||
def __radd__(self, other: pd.TimedeltaIndex) -> pd.TimedeltaIndex: ...
|
||||
@overload
|
||||
def __radd__(self, other: pd.PeriodIndex) -> pd.PeriodIndex: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __sub__(self, other: timedelta | Timedelta | np.timedelta64) -> Timedelta: ...
|
||||
@overload
|
||||
def __sub__(self, other: NaTType) -> NaTType: ...
|
||||
@overload
|
||||
def __sub__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __sub__(self, other: pd.TimedeltaIndex) -> TimedeltaIndex: ...
|
||||
@overload
|
||||
def __sub__(
|
||||
self, other: TimedeltaSeries | Series[pd.Timedelta]
|
||||
) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __rsub__(self, other: timedelta | Timedelta | np.timedelta64) -> Timedelta: ...
|
||||
@overload
|
||||
def __rsub__(self, other: dt.datetime | Timestamp | np.datetime64) -> Timestamp: ... # type: ignore[misc]
|
||||
@overload
|
||||
def __rsub__(self, other: NaTType) -> NaTType: ...
|
||||
@overload
|
||||
def __rsub__(self, other: Period) -> Period: ...
|
||||
@overload
|
||||
def __rsub__(self, other: PeriodIndex) -> PeriodIndex: ...
|
||||
@overload
|
||||
def __rsub__(self, other: DatetimeIndex) -> DatetimeIndex: ...
|
||||
@overload
|
||||
def __rsub__(
|
||||
self, other: np_ndarray[ShapeT, np.datetime64]
|
||||
) -> np_ndarray[ShapeT, np.datetime64]: ...
|
||||
@overload
|
||||
def __rsub__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __rsub__(self, other: pd.TimedeltaIndex) -> pd.TimedeltaIndex: ...
|
||||
def __neg__(self) -> Timedelta: ...
|
||||
def __pos__(self) -> Timedelta: ...
|
||||
def __abs__(self) -> Timedelta: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __mul__(self, other: float) -> Timedelta: ...
|
||||
@overload
|
||||
def __mul__(
|
||||
self, other: np_ndarray[ShapeT, np.integer] | np_ndarray[ShapeT, np.floating]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __mul__(self, other: Series[int]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __mul__(self, other: Series[float]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __mul__(self, other: Index[int] | Index[float]) -> TimedeltaIndex: ...
|
||||
@overload
|
||||
def __rmul__(self, other: float) -> Timedelta: ...
|
||||
@overload
|
||||
def __rmul__(
|
||||
self, other: np_ndarray[ShapeT, np.floating] | np_ndarray[ShapeT, np.integer]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __rmul__(self, other: Series[int]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __rmul__(self, other: Series[float]) -> TimedeltaSeries: ...
|
||||
# maybe related to https://github.com/python/mypy/issues/10755
|
||||
@overload
|
||||
def __rmul__(self, other: Index[int] | Index[float]) -> TimedeltaIndex: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
# error: Signature of "__floordiv__" incompatible with supertype "timedelta"
|
||||
@overload # type: ignore[override]
|
||||
def __floordiv__(self, other: timedelta | Timedelta | np.timedelta64) -> int: ...
|
||||
@overload
|
||||
def __floordiv__(self, other: float) -> Timedelta: ...
|
||||
@overload
|
||||
def __floordiv__(
|
||||
self, other: np_ndarray[ShapeT, np.integer] | np_ndarray[ShapeT, np.floating]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __floordiv__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.int_]: ...
|
||||
@overload
|
||||
def __floordiv__(self, other: Index[int] | Index[float]) -> TimedeltaIndex: ...
|
||||
@overload
|
||||
def __floordiv__(self, other: Series[int]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __floordiv__(self, other: Series[float]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __floordiv__(self, other: TimedeltaSeries) -> Series[int]: ...
|
||||
@overload
|
||||
def __floordiv__(self, other: NaTType | None) -> float: ...
|
||||
@overload
|
||||
def __rfloordiv__(self, other: timedelta | Timedelta | str) -> int: ...
|
||||
@overload
|
||||
def __rfloordiv__(self, other: NaTType | None) -> float: ...
|
||||
@overload
|
||||
def __rfloordiv__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.int_]: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __truediv__(self, other: timedelta | Timedelta | NaTType) -> float: ...
|
||||
@overload
|
||||
def __truediv__(self, other: float) -> Timedelta: ...
|
||||
@overload
|
||||
def __truediv__(
|
||||
self, other: np_ndarray[ShapeT, np.integer] | np_ndarray[ShapeT, np.floating]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __truediv__(self, other: TimedeltaSeries) -> Series[float]: ...
|
||||
@overload
|
||||
def __truediv__(self, other: Series[int]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __truediv__(self, other: Series[float]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __truediv__(self, other: Index[int] | Index[float]) -> TimedeltaIndex: ...
|
||||
def __rtruediv__(self, other: timedelta | Timedelta | NaTType) -> float: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload
|
||||
def __eq__(self, other: timedelta | Timedelta | np.timedelta64) -> bool: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
|
||||
@overload
|
||||
def __eq__(self, other: TimedeltaSeries | Series[pd.Timedelta]) -> Series[bool]: ... # type: ignore[overload-overlap]
|
||||
@overload
|
||||
def __eq__(self, other: Index) -> np_1darray[np.bool]: ... # type: ignore[overload-overlap]
|
||||
@overload
|
||||
def __eq__( # type: ignore[overload-overlap]
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.bool_]: ...
|
||||
@overload
|
||||
def __eq__(self, other: object) -> Literal[False]: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload
|
||||
def __ne__(self, other: timedelta | Timedelta | np.timedelta64) -> bool: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
|
||||
@overload
|
||||
def __ne__(self, other: TimedeltaSeries | Series[pd.Timedelta]) -> Series[bool]: ... # type: ignore[overload-overlap]
|
||||
@overload
|
||||
def __ne__(self, other: Index) -> np_1darray[np.bool]: ... # type: ignore[overload-overlap]
|
||||
@overload
|
||||
def __ne__( # type: ignore[overload-overlap]
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.bool_]: ...
|
||||
@overload
|
||||
def __ne__(self, other: object) -> Literal[True]: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __mod__(self, other: timedelta) -> Timedelta: ...
|
||||
@overload
|
||||
def __mod__(self, other: float) -> Timedelta: ...
|
||||
@overload
|
||||
def __mod__(self, other: Series[int] | Series[float]) -> TimedeltaSeries: ...
|
||||
@overload
|
||||
def __mod__(self, other: Index[int] | Index[float]) -> TimedeltaIndex: ...
|
||||
@overload
|
||||
def __mod__(
|
||||
self, other: np_ndarray[ShapeT, np.integer] | np_ndarray[ShapeT, np.floating]
|
||||
) -> np_ndarray[ShapeT, np.timedelta64]: ...
|
||||
@overload
|
||||
def __mod__(
|
||||
self, other: Series[int] | Series[float] | TimedeltaSeries
|
||||
) -> TimedeltaSeries: ...
|
||||
def __divmod__(self, other: timedelta) -> tuple[int, Timedelta]: ...
|
||||
# Mypy complains Forward operator "<inequality op>" is not callable, so ignore misc
|
||||
# for le, lt ge and gt
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __le__(self, other: timedelta | Timedelta | np.timedelta64) -> bool: ... # type: ignore[misc]
|
||||
@overload
|
||||
def __le__(self, other: TimedeltaIndex) -> np_1darray[np.bool]: ...
|
||||
@overload
|
||||
def __le__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.bool_]: ...
|
||||
@overload
|
||||
def __le__(self, other: TimedeltaSeries | Series[pd.Timedelta]) -> Series[bool]: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __lt__(self, other: timedelta | Timedelta | np.timedelta64) -> bool: ... # type: ignore[misc]
|
||||
@overload
|
||||
def __lt__(self, other: TimedeltaIndex) -> np_1darray[np.bool]: ...
|
||||
@overload
|
||||
def __lt__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.bool_]: ...
|
||||
@overload
|
||||
def __lt__(self, other: TimedeltaSeries | Series[pd.Timedelta]) -> Series[bool]: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __ge__(self, other: timedelta | Timedelta | np.timedelta64) -> bool: ... # type: ignore[misc]
|
||||
@overload
|
||||
def __ge__(self, other: TimedeltaIndex) -> np_1darray[np.bool]: ...
|
||||
@overload
|
||||
def __ge__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.bool_]: ...
|
||||
@overload
|
||||
def __ge__(self, other: TimedeltaSeries | Series[pd.Timedelta]) -> Series[bool]: ...
|
||||
# Override due to more types supported than dt.timedelta
|
||||
@overload # type: ignore[override]
|
||||
def __gt__(self, other: timedelta | Timedelta | np.timedelta64) -> bool: ... # type: ignore[misc]
|
||||
@overload
|
||||
def __gt__(self, other: TimedeltaIndex) -> np_1darray[np.bool]: ...
|
||||
@overload
|
||||
def __gt__(
|
||||
self, other: np_ndarray[ShapeT, np.timedelta64]
|
||||
) -> np_ndarray[ShapeT, np.bool_]: ...
|
||||
@overload
|
||||
def __gt__(self, other: TimedeltaSeries | Series[pd.Timedelta]) -> Series[bool]: ...
|
||||
def __hash__(self) -> int: ...
|
||||
def isoformat(self) -> str: ...
|
||||
def to_numpy(self) -> np.timedelta64: ...
|
||||
@property
|
||||
def components(self) -> Components: ...
|
||||
def view(self, dtype: npt.DTypeLike = ...) -> object: ...
|
||||
@property
|
||||
def unit(self) -> TimeUnit: ...
|
||||
def as_unit(self, unit: TimeUnit, round_ok: bool = True) -> Self: ...
|
Reference in New Issue
Block a user