Skip to content

Commit 2a99f70

Browse files
GH1327 Add overloead for date_range and timedelta_range
1 parent 3aa4044 commit 2a99f70

File tree

5 files changed

+95
-11
lines changed

5 files changed

+95
-11
lines changed

pandas-stubs/core/groupby/generic.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,17 +213,17 @@ class SeriesGroupBy(GroupBy[Series[S2]], Generic[S2, ByT]):
213213
_TT = TypeVar("_TT", bound=Literal[True, False])
214214

215215
# ty ignore needed because of https://github.com/astral-sh/ty/issues/157#issuecomment-3017337945
216-
class DFCallable1(Protocol[P]): # ty: ignore[invalid-argument-type]
216+
class DFCallable1(Protocol[P]):
217217
def __call__(
218218
self, df: DataFrame, /, *args: P.args, **kwargs: P.kwargs
219219
) -> Scalar | list | dict: ...
220220

221-
class DFCallable2(Protocol[P]): # ty: ignore[invalid-argument-type]
221+
class DFCallable2(Protocol[P]):
222222
def __call__(
223223
self, df: DataFrame, /, *args: P.args, **kwargs: P.kwargs
224224
) -> DataFrame | Series: ...
225225

226-
class DFCallable3(Protocol[P]): # ty: ignore[invalid-argument-type]
226+
class DFCallable3(Protocol[P]):
227227
def __call__(self, df: Iterable, /, *args: P.args, **kwargs: P.kwargs) -> float: ...
228228

229229
class DataFrameGroupBy(GroupBy[DataFrame], Generic[ByT, _TT]):

pandas-stubs/core/indexes/datetimes.pyi

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,45 @@ class DatetimeIndex(
102102
self, periods: int = 1, freq: DateOffset | Timedelta | str | None = None
103103
) -> Self: ...
104104

105+
@overload
106+
def date_range(
107+
end: str | DateAndDatetimeLike,
108+
periods: int,
109+
freq: str | timedelta | Timedelta | BaseOffset | None = None,
110+
tz: TimeZones = None,
111+
normalize: bool = False,
112+
name: Hashable | None = None,
113+
inclusive: IntervalClosedType = "both",
114+
unit: TimeUnit | None = None,
115+
) -> DatetimeIndex: ...
116+
@overload
117+
def date_range(
118+
start: str | DateAndDatetimeLike,
119+
periods: int,
120+
freq: str | timedelta | Timedelta | BaseOffset | None = None,
121+
tz: TimeZones = None,
122+
normalize: bool = False,
123+
name: Hashable | None = None,
124+
inclusive: IntervalClosedType = "both",
125+
unit: TimeUnit | None = None,
126+
) -> DatetimeIndex: ...
127+
@overload
128+
def date_range(
129+
start: str | DateAndDatetimeLike | None,
130+
end: str | DateAndDatetimeLike | None,
131+
freq: str | timedelta | Timedelta | BaseOffset | None = None,
132+
tz: TimeZones = None,
133+
normalize: bool = False,
134+
name: Hashable | None = None,
135+
inclusive: IntervalClosedType = "both",
136+
unit: TimeUnit | None = None,
137+
) -> DatetimeIndex: ...
138+
@overload
105139
def date_range(
106-
start: str | DateAndDatetimeLike | None = None,
107-
end: str | DateAndDatetimeLike | None = None,
108-
periods: int | None = None,
109-
freq: str | timedelta | Timedelta | BaseOffset = "D",
140+
start: str | DateAndDatetimeLike,
141+
end: str | DateAndDatetimeLike,
142+
periods: int,
143+
freq: None = None,
110144
tz: TimeZones = None,
111145
normalize: bool = False,
112146
name: Hashable | None = None,

pandas-stubs/core/indexes/timedeltas.pyi

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,51 @@ class TimedeltaIndex(
7979
def to_series(self, index=..., name: Hashable = ...) -> TimedeltaSeries: ...
8080
def shift(self, periods: int = 1, freq=...) -> Self: ...
8181

82+
@overload
8283
def timedelta_range(
83-
start: TimedeltaConvertibleTypes | None = None,
84-
end: TimedeltaConvertibleTypes | None = None,
85-
periods: int | None = None,
84+
start: TimedeltaConvertibleTypes,
85+
end: TimedeltaConvertibleTypes,
86+
periods: int,
87+
freq: None = None,
88+
name: Hashable | None = None,
89+
closed: Literal["left", "right"] | None = None,
90+
*,
91+
unit: None | str = ...,
92+
) -> TimedeltaIndex: ...
93+
@overload
94+
def timedelta_range(
95+
start: TimedeltaConvertibleTypes,
96+
periods: int,
97+
freq: None = None,
98+
name: Hashable | None = None,
99+
closed: Literal["left", "right"] | None = None,
100+
*,
101+
unit: None | str = ...,
102+
) -> TimedeltaIndex: ...
103+
@overload
104+
def timedelta_range(
105+
start: TimedeltaConvertibleTypes,
106+
periods: int,
107+
freq: str | DateOffset | Timedelta | dt.timedelta | None = None,
108+
name: Hashable | None = None,
109+
closed: Literal["left", "right"] | None = None,
110+
*,
111+
unit: None | str = ...,
112+
) -> TimedeltaIndex: ...
113+
@overload
114+
def timedelta_range(
115+
start: TimedeltaConvertibleTypes,
116+
end: TimedeltaConvertibleTypes,
117+
freq: str | DateOffset | Timedelta | dt.timedelta | None = None,
118+
name: Hashable | None = None,
119+
closed: Literal["left", "right"] | None = None,
120+
*,
121+
unit: None | str = ...,
122+
) -> TimedeltaIndex: ...
123+
@overload
124+
def timedelta_range(
125+
end: TimedeltaConvertibleTypes,
126+
periods: int,
86127
freq: str | DateOffset | Timedelta | dt.timedelta | None = None,
87128
name: Hashable | None = None,
88129
closed: Literal["left", "right"] | None = None,

tests/test_styler.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from pandas._typing import Scalar
2323

2424
from tests import (
25+
PD_LTE_23,
2526
check,
2627
ensure_clean,
2728
)
@@ -141,7 +142,8 @@ def test_highlight_quantile() -> None:
141142

142143

143144
def test_loader() -> None:
144-
check(assert_type(DF.style.loader, PackageLoader), PackageLoader)
145+
if PD_LTE_23:
146+
check(assert_type(DF.style.loader, PackageLoader), PackageLoader)
145147

146148

147149
def test_pipe() -> None:

tests/test_timefuncs.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1563,6 +1563,13 @@ def test_timedelta_range() -> None:
15631563
pd.TimedeltaIndex,
15641564
)
15651565

1566+
if TYPE_CHECKING_INVALID_USAGE:
1567+
day1 = pd.Timedelta(1, unit="D")
1568+
day10 = pd.Timedelta(10, unit="D")
1569+
pd.timedelta_range(
1570+
day1, day10, periods=10, freq="D" # type: ignore[call-overload] # pyright: ignore[reportArgumentType]
1571+
)
1572+
15661573

15671574
def test_dateoffset_freqstr() -> None:
15681575
offset = DateOffset(minutes=10)

0 commit comments

Comments
 (0)