Skip to content

Commit 9120dce

Browse files
committed
Use TimeUnit type alias instead of str or Literal["s", "ms", "us", "ns"]
1 parent 2ca04fa commit 9120dce

File tree

4 files changed

+22
-20
lines changed

4 files changed

+22
-20
lines changed

pandas-stubs/core/arrays/datetimelike.pyi

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from collections.abc import Sequence
2-
from typing import Literal
32

43
import numpy as np
54
from pandas.core.arrays.base import (
@@ -12,14 +11,15 @@ from pandas._libs import (
1211
NaT as NaT,
1312
NaTType as NaTType,
1413
)
14+
from pandas._typing import TimeUnit
1515

1616
class DatelikeOps:
1717
def strftime(self, date_format): ...
1818

1919
class TimelikeOps:
2020
@property
21-
def unit(self) -> str: ...
22-
def as_unit(self, unit: Literal["s", "ms", "us", "ns"]) -> Self: ...
21+
def unit(self) -> TimeUnit: ...
22+
def as_unit(self, unit: TimeUnit) -> Self: ...
2323
def round(self, freq, ambiguous: str = ..., nonexistent: str = ...): ...
2424
def floor(self, freq, ambiguous: str = ..., nonexistent: str = ...): ...
2525
def ceil(self, freq, ambiguous: str = ..., nonexistent: str = ...): ...

pandas-stubs/core/indexes/accessors.pyi

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ from pandas._libs.tslibs import BaseOffset
3636
from pandas._libs.tslibs.offsets import DateOffset
3737
from pandas._typing import (
3838
TimestampConvention,
39+
TimeUnit,
3940
np_ndarray_bool,
4041
)
4142

@@ -284,10 +285,8 @@ class DatetimeProperties(
284285
def to_pydatetime(self) -> np.ndarray: ...
285286
def isocalendar(self) -> DataFrame: ...
286287
@property
287-
def unit(self) -> str: ...
288-
def as_unit(
289-
self, unit: Literal["s", "ms", "us", "ns"]
290-
) -> _DTTimestampTimedeltaReturnType: ...
288+
def unit(self) -> TimeUnit: ...
289+
def as_unit(self, unit: TimeUnit) -> _DTTimestampTimedeltaReturnType: ...
291290

292291
_TDNoRoundingMethodReturnType = TypeVar(
293292
"_TDNoRoundingMethodReturnType", Series[int], Index
@@ -316,8 +315,8 @@ class TimedeltaProperties(
316315
_DatetimeRoundingMethods[TimedeltaSeries],
317316
):
318317
@property
319-
def unit(self) -> str: ...
320-
def as_unit(self, unit: Literal["s", "ms", "us", "ns"]) -> TimedeltaSeries: ...
318+
def unit(self) -> TimeUnit: ...
319+
def as_unit(self, unit: TimeUnit) -> TimedeltaSeries: ...
321320

322321
_PeriodDTReturnTypes = TypeVar("_PeriodDTReturnTypes", TimestampSeries, DatetimeIndex)
323322
_PeriodIntReturnTypes = TypeVar("_PeriodIntReturnTypes", Series[int], Index[int])

pandas-stubs/core/indexes/datetimelike.pyi

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
from typing import Literal
2-
31
from pandas.core.indexes.extension import ExtensionIndex
42
from pandas.core.indexes.timedeltas import TimedeltaIndex
53
from typing_extensions import Self
64

75
from pandas._libs.tslibs import BaseOffset
8-
from pandas._typing import S1
6+
from pandas._typing import (
7+
S1,
8+
TimeUnit,
9+
)
910

1011
class DatetimeIndexOpsMixin(ExtensionIndex[S1]):
1112
@property
@@ -24,5 +25,5 @@ class DatetimeIndexOpsMixin(ExtensionIndex[S1]):
2425

2526
class DatetimeTimedeltaMixin(DatetimeIndexOpsMixin[S1]):
2627
@property
27-
def unit(self) -> str: ...
28-
def as_unit(self, unit: Literal["s", "ms", "us", "ns"]) -> Self: ...
28+
def unit(self) -> TimeUnit: ...
29+
def as_unit(self, unit: TimeUnit) -> Self: ...

tests/test_timefuncs.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
from pandas._typing import FulldatetimeDict
2626
else:
2727
FulldatetimeDict = Any
28+
from pandas._typing import TimeUnit
29+
2830
from tests import (
2931
TYPE_CHECKING_INVALID_USAGE,
3032
check,
@@ -429,7 +431,7 @@ def test_series_dt_accessors() -> None:
429431
)
430432
check(assert_type(s0.dt.month_name(), "pd.Series[str]"), pd.Series, str)
431433
check(assert_type(s0.dt.day_name(), "pd.Series[str]"), pd.Series, str)
432-
check(assert_type(s0.dt.unit, str), str)
434+
check(assert_type(s0.dt.unit, TimeUnit), str)
433435
check(assert_type(s0.dt.as_unit("s"), "TimestampSeries"), pd.Series, pd.Timestamp)
434436
check(assert_type(s0.dt.as_unit("ms"), "TimestampSeries"), pd.Series, pd.Timestamp)
435437
check(assert_type(s0.dt.as_unit("us"), "TimestampSeries"), pd.Series, pd.Timestamp)
@@ -461,7 +463,7 @@ def test_series_dt_accessors() -> None:
461463
check(assert_type(s2.dt.components, pd.DataFrame), pd.DataFrame)
462464
check(assert_type(s2.dt.to_pytimedelta(), np.ndarray), np.ndarray)
463465
check(assert_type(s2.dt.total_seconds(), "pd.Series[float]"), pd.Series, float)
464-
check(assert_type(s2.dt.unit, str), str)
466+
check(assert_type(s2.dt.unit, TimeUnit), str)
465467
check(assert_type(s2.dt.as_unit("s"), "TimedeltaSeries"), pd.Series, pd.Timedelta)
466468
check(assert_type(s2.dt.as_unit("ms"), "TimedeltaSeries"), pd.Series, pd.Timedelta)
467469
check(assert_type(s2.dt.as_unit("us"), "TimedeltaSeries"), pd.Series, pd.Timedelta)
@@ -474,7 +476,7 @@ def test_series_dt_accessors() -> None:
474476
pd.Series([pd.Timestamp("2024-01-01"), pd.Timestamp("2024-01-02")]),
475477
)
476478

477-
check(assert_type(s4.dt.unit, str), str)
479+
check(assert_type(s4.dt.unit, TimeUnit), str)
478480
check(assert_type(s4.dt.as_unit("s"), pd.Series), pd.Series, pd.Timestamp)
479481
check(assert_type(s4.dt.as_unit("ms"), pd.Series), pd.Series, pd.Timestamp)
480482
check(assert_type(s4.dt.as_unit("us"), pd.Series), pd.Series, pd.Timestamp)
@@ -485,7 +487,7 @@ def test_series_dt_accessors() -> None:
485487
pd.Series([pd.Timedelta("1 day"), pd.Timedelta("2 days")]),
486488
)
487489

488-
check(assert_type(s5.dt.unit, str), str)
490+
check(assert_type(s5.dt.unit, TimeUnit), str)
489491
check(assert_type(s5.dt.as_unit("s"), pd.Series), pd.Series, pd.Timedelta)
490492
check(assert_type(s5.dt.as_unit("ms"), pd.Series), pd.Series, pd.Timedelta)
491493
check(assert_type(s5.dt.as_unit("us"), pd.Series), pd.Series, pd.Timedelta)
@@ -557,7 +559,7 @@ def test_datetimeindex_accessors() -> None:
557559
check(assert_type(i0.month_name(), pd.Index), pd.Index, str)
558560
check(assert_type(i0.day_name(), pd.Index), pd.Index, str)
559561
check(assert_type(i0.is_normalized, bool), bool)
560-
check(assert_type(i0.unit, str), str)
562+
check(assert_type(i0.unit, TimeUnit), str)
561563
check(assert_type(i0.as_unit("s"), pd.DatetimeIndex), pd.DatetimeIndex)
562564
check(assert_type(i0.as_unit("ms"), pd.DatetimeIndex), pd.DatetimeIndex)
563565
check(assert_type(i0.as_unit("us"), pd.DatetimeIndex), pd.DatetimeIndex)
@@ -582,7 +584,7 @@ def test_timedeltaindex_accessors() -> None:
582584
assert_type(i0.floor("D"), pd.TimedeltaIndex), pd.TimedeltaIndex, pd.Timedelta
583585
)
584586
check(assert_type(i0.ceil("D"), pd.TimedeltaIndex), pd.TimedeltaIndex, pd.Timedelta)
585-
check(assert_type(i0.unit, str), str)
587+
check(assert_type(i0.unit, TimeUnit), str)
586588
check(assert_type(i0.as_unit("s"), pd.TimedeltaIndex), pd.TimedeltaIndex)
587589
check(assert_type(i0.as_unit("ms"), pd.TimedeltaIndex), pd.TimedeltaIndex)
588590
check(assert_type(i0.as_unit("us"), pd.TimedeltaIndex), pd.TimedeltaIndex)

0 commit comments

Comments
 (0)