Skip to content

Commit e54943a

Browse files
authored
period_range and Period should accept date, datetime and pd.Timestamp (#728)
* Update series.pyi and add test case * Add additional accepted types * Add test cases for additional types * Fix tests and remove unnecessary import
1 parent 29281fe commit e54943a

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

pandas-stubs/_libs/tslibs/period.pyi

+6-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ class PeriodMixin:
6161
class Period(PeriodMixin):
6262
def __init__(
6363
self,
64-
value: Period | str | None = ...,
64+
value: Period
65+
| str
66+
| datetime.datetime
67+
| datetime.date
68+
| Timestamp
69+
| None = ...,
6570
freq: str | BaseOffset | None = ...,
6671
ordinal: int | None = ...,
6772
year: int | None = ...,

pandas-stubs/core/indexes/period.pyi

+13-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from collections.abc import Hashable
2+
import datetime
23
from typing import overload
34

45
import numpy as np
@@ -84,8 +85,18 @@ class PeriodIndex( # type: ignore[misc]
8485
def freqstr(self) -> str: ...
8586

8687
def period_range(
87-
start: str | pd.Period | None = ...,
88-
end: str | pd.Period | None = ...,
88+
start: str
89+
| datetime.datetime
90+
| datetime.date
91+
| pd.Timestamp
92+
| pd.Period
93+
| None = ...,
94+
end: str
95+
| datetime.datetime
96+
| datetime.date
97+
| pd.Timestamp
98+
| pd.Period
99+
| None = ...,
89100
periods: int | None = ...,
90101
freq: str | BaseOffset | None = ...,
91102
name: Hashable | None = ...,

tests/test_scalars.py

+15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import datetime
34
import datetime as dt
45
from typing import (
56
TYPE_CHECKING,
@@ -1690,6 +1691,20 @@ def test_period_construction() -> None:
16901691
pd.Period,
16911692
)
16921693
check(assert_type(pd.Period(freq="Q", year=2012, quarter=2), pd.Period), pd.Period)
1694+
check(
1695+
assert_type(
1696+
pd.Period(value=datetime.datetime(2012, 1, 1), freq="D"), pd.Period
1697+
),
1698+
pd.Period,
1699+
)
1700+
check(
1701+
assert_type(pd.Period(value=datetime.date(2012, 1, 1), freq="D"), pd.Period),
1702+
pd.Period,
1703+
)
1704+
check(
1705+
assert_type(pd.Period(value=pd.Timestamp(2012, 1, 1), freq="D"), pd.Period),
1706+
pd.Period,
1707+
)
16931708

16941709

16951710
def test_period_properties() -> None:

tests/test_timefuncs.py

+25
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,31 @@ def test_period_range() -> None:
838838
),
839839
pd.PeriodIndex,
840840
)
841+
check(
842+
assert_type(
843+
pd.period_range(
844+
pd.Timestamp("2001-01-01"), end=pd.Timestamp("2002-01-01"), freq="Q"
845+
),
846+
pd.PeriodIndex,
847+
),
848+
pd.PeriodIndex,
849+
)
850+
check(
851+
assert_type(
852+
pd.period_range(
853+
dt.datetime(2001, 1, 1), end=dt.datetime(2002, 1, 1), freq="Q"
854+
),
855+
pd.PeriodIndex,
856+
),
857+
pd.PeriodIndex,
858+
)
859+
check(
860+
assert_type(
861+
pd.period_range(dt.date(2001, 1, 1), end=dt.date(2002, 1, 1), freq="Q"),
862+
pd.PeriodIndex,
863+
),
864+
pd.PeriodIndex,
865+
)
841866

842867

843868
def test_to_datetime_scalar() -> None:

0 commit comments

Comments
 (0)