From 661f0fa7ad641c9f1f60f776d8afb2c7612493e5 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Thu, 6 Oct 2022 18:58:48 +0100 Subject: [PATCH 1/3] ENH: Add dt.date support for functions that accept it --- pandas-stubs/_typing.pyi | 1 + pandas-stubs/core/indexes/datetimes.pyi | 16 ++++++++-------- tests/test_timefuncs.py | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/pandas-stubs/_typing.pyi b/pandas-stubs/_typing.pyi index 4ef2c6c75..db4db891f 100644 --- a/pandas-stubs/_typing.pyi +++ b/pandas-stubs/_typing.pyi @@ -46,6 +46,7 @@ PandasScalar: TypeAlias = Union[ # Scalar: TypeAlias = Union[PythonScalar, PandasScalar] DatetimeLike: TypeAlias = Union[datetime.datetime, np.datetime64, Timestamp] +DateAndDatetimeLike: TypeAlias = Union[datetime.date, DatetimeLike] DatetimeDictArg: TypeAlias = Union[ Sequence[int], Sequence[float], list[str], tuple[Scalar, ...], AnyArrayLike diff --git a/pandas-stubs/core/indexes/datetimes.pyi b/pandas-stubs/core/indexes/datetimes.pyi index 5b6cc4216..1057731c6 100644 --- a/pandas-stubs/core/indexes/datetimes.pyi +++ b/pandas-stubs/core/indexes/datetimes.pyi @@ -27,7 +27,7 @@ from pandas.core.series import ( from pandas._typing import ( AnyArrayLike, ArrayLike, - DatetimeLike, + DateAndDatetimeLike, IntervalClosedType, ) @@ -89,8 +89,8 @@ class DatetimeIndex(DatetimeTimedeltaMixin, DatetimeIndexProperties): def dtype(self) -> np.dtype | DatetimeTZDtype: ... def date_range( - start: str | DatetimeLike | None = ..., - end: str | DatetimeLike | None = ..., + start: str | DateAndDatetimeLike | None = ..., + end: str | DateAndDatetimeLike | None = ..., periods: int | None = ..., freq: str | timedelta | Timedelta | BaseOffset = ..., tz: str | tzinfo = ..., @@ -100,8 +100,8 @@ def date_range( ) -> DatetimeIndex: ... @overload def bdate_range( - start: str | DatetimeLike | None = ..., - end: str | DatetimeLike | None = ..., + start: str | DateAndDatetimeLike | None = ..., + end: str | DateAndDatetimeLike | None = ..., periods: int | None = ..., freq: str | timedelta | Timedelta | BaseOffset = ..., tz: str | tzinfo = ..., @@ -113,8 +113,8 @@ def bdate_range( ) -> DatetimeIndex: ... @overload def bdate_range( - start: str | DatetimeLike | None = ..., - end: str | DatetimeLike | None = ..., + start: str | DateAndDatetimeLike | None = ..., + end: str | DateAndDatetimeLike | None = ..., periods: int | None = ..., *, freq: str | timedelta | Timedelta | BaseOffset, @@ -122,6 +122,6 @@ def bdate_range( normalize: bool = ..., name: Hashable | None = ..., weekmask: str | None = ..., - holidays: Sequence[str | DatetimeLike | date], + holidays: Sequence[str | DateAndDatetimeLike | date], inclusive: IntervalClosedType = ..., ) -> DatetimeIndex: ... diff --git a/tests/test_timefuncs.py b/tests/test_timefuncs.py index 8963ae31f..d43161ca0 100644 --- a/tests/test_timefuncs.py +++ b/tests/test_timefuncs.py @@ -558,6 +558,24 @@ def test_some_offsets() -> None: ), pd.DatetimeIndex, ) + check( + assert_type( + pd.date_range( + dt.date(2022, 1, 1), dt.date(2022, 2, 1), freq=dt.timedelta(days=2) + ), + pd.DatetimeIndex, + ), + pd.DatetimeIndex, + ) + check( + assert_type( + pd.bdate_range( + dt.date(2022, 1, 1), dt.date(2022, 2, 1), freq=dt.timedelta(days=2) + ), + pd.DatetimeIndex, + ), + pd.DatetimeIndex, + ) check( assert_type( pd.date_range("1/1/2022", "2/1/2022", freq=pd.Timedelta(days=5)), @@ -689,6 +707,7 @@ def test_to_timedelta_index() -> None: def test_bdate_range_holidays() -> None: pd.bdate_range("2000-1-1", "2001-1-1", freq="C", holidays=["2000-12-15"]) + pd.bdate_range("2000-1-1", "2001-1-1", freq="C", holidays=[dt.date(2000, 12, 15)]) pd.bdate_range( "2000-1-1", "2001-1-1", freq="C", holidays=[pd.Timestamp(2000, 12, 15)] ) From 47d9a25366e9ad9d59ee855e726137f18a41274d Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Fri, 7 Oct 2022 07:07:46 +0100 Subject: [PATCH 2/3] CLN: Remove unnecessary date --- pandas-stubs/core/indexes/datetimes.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas-stubs/core/indexes/datetimes.pyi b/pandas-stubs/core/indexes/datetimes.pyi index 1057731c6..e44affb90 100644 --- a/pandas-stubs/core/indexes/datetimes.pyi +++ b/pandas-stubs/core/indexes/datetimes.pyi @@ -122,6 +122,6 @@ def bdate_range( normalize: bool = ..., name: Hashable | None = ..., weekmask: str | None = ..., - holidays: Sequence[str | DateAndDatetimeLike | date], + holidays: Sequence[str | DateAndDatetimeLike], inclusive: IntervalClosedType = ..., ) -> DatetimeIndex: ... From a07e6eda0c4c0c069ccfb7abe32dd76777c09097 Mon Sep 17 00:00:00 2001 From: Kevin Sheppard Date: Fri, 7 Oct 2022 07:55:47 +0100 Subject: [PATCH 3/3] CLN: Remove unused import --- pandas-stubs/core/indexes/datetimes.pyi | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas-stubs/core/indexes/datetimes.pyi b/pandas-stubs/core/indexes/datetimes.pyi index e44affb90..4d301d989 100644 --- a/pandas-stubs/core/indexes/datetimes.pyi +++ b/pandas-stubs/core/indexes/datetimes.pyi @@ -1,5 +1,4 @@ from datetime import ( - date, timedelta, tzinfo, )