55 TYPE_CHECKING ,
66 Any ,
77 Optional ,
8+ cast ,
89)
910
1011import numpy as np
2425 from pandas ._typing import FulldatetimeDict
2526else :
2627 FulldatetimeDict = Any
28+ from pandas ._typing import TimeUnit
29+
2730from tests import (
2831 TYPE_CHECKING_INVALID_USAGE ,
2932 check ,
@@ -428,6 +431,11 @@ def test_series_dt_accessors() -> None:
428431 )
429432 check (assert_type (s0 .dt .month_name (), "pd.Series[str]" ), pd .Series , str )
430433 check (assert_type (s0 .dt .day_name (), "pd.Series[str]" ), pd .Series , str )
434+ check (assert_type (s0 .dt .unit , TimeUnit ), str )
435+ check (assert_type (s0 .dt .as_unit ("s" ), "TimestampSeries" ), pd .Series , pd .Timestamp )
436+ check (assert_type (s0 .dt .as_unit ("ms" ), "TimestampSeries" ), pd .Series , pd .Timestamp )
437+ check (assert_type (s0 .dt .as_unit ("us" ), "TimestampSeries" ), pd .Series , pd .Timestamp )
438+ check (assert_type (s0 .dt .as_unit ("ns" ), "TimestampSeries" ), pd .Series , pd .Timestamp )
431439
432440 i1 = pd .period_range (start = "2022-06-01" , periods = 10 )
433441
@@ -455,6 +463,35 @@ def test_series_dt_accessors() -> None:
455463 check (assert_type (s2 .dt .components , pd .DataFrame ), pd .DataFrame )
456464 check (assert_type (s2 .dt .to_pytimedelta (), np .ndarray ), np .ndarray )
457465 check (assert_type (s2 .dt .total_seconds (), "pd.Series[float]" ), pd .Series , float )
466+ check (assert_type (s2 .dt .unit , TimeUnit ), str )
467+ check (assert_type (s2 .dt .as_unit ("s" ), "TimedeltaSeries" ), pd .Series , pd .Timedelta )
468+ check (assert_type (s2 .dt .as_unit ("ms" ), "TimedeltaSeries" ), pd .Series , pd .Timedelta )
469+ check (assert_type (s2 .dt .as_unit ("us" ), "TimedeltaSeries" ), pd .Series , pd .Timedelta )
470+ check (assert_type (s2 .dt .as_unit ("ns" ), "TimedeltaSeries" ), pd .Series , pd .Timedelta )
471+
472+ # Checks for general Series other than TimestampSeries and TimedeltaSeries
473+
474+ s4 = cast (
475+ "pd.Series[pd.Timestamp]" ,
476+ pd .Series ([pd .Timestamp ("2024-01-01" ), pd .Timestamp ("2024-01-02" )]),
477+ )
478+
479+ check (assert_type (s4 .dt .unit , TimeUnit ), str )
480+ check (assert_type (s4 .dt .as_unit ("s" ), pd .Series ), pd .Series , pd .Timestamp )
481+ check (assert_type (s4 .dt .as_unit ("ms" ), pd .Series ), pd .Series , pd .Timestamp )
482+ check (assert_type (s4 .dt .as_unit ("us" ), pd .Series ), pd .Series , pd .Timestamp )
483+ check (assert_type (s4 .dt .as_unit ("ns" ), pd .Series ), pd .Series , pd .Timestamp )
484+
485+ s5 = cast (
486+ "pd.Series[pd.Timedelta]" ,
487+ pd .Series ([pd .Timedelta ("1 day" ), pd .Timedelta ("2 days" )]),
488+ )
489+
490+ check (assert_type (s5 .dt .unit , TimeUnit ), str )
491+ check (assert_type (s5 .dt .as_unit ("s" ), pd .Series ), pd .Series , pd .Timedelta )
492+ check (assert_type (s5 .dt .as_unit ("ms" ), pd .Series ), pd .Series , pd .Timedelta )
493+ check (assert_type (s5 .dt .as_unit ("us" ), pd .Series ), pd .Series , pd .Timedelta )
494+ check (assert_type (s5 .dt .as_unit ("ns" ), pd .Series ), pd .Series , pd .Timedelta )
458495
459496
460497def test_datetimeindex_accessors () -> None :
@@ -522,6 +559,11 @@ def test_datetimeindex_accessors() -> None:
522559 check (assert_type (i0 .month_name (), pd .Index ), pd .Index , str )
523560 check (assert_type (i0 .day_name (), pd .Index ), pd .Index , str )
524561 check (assert_type (i0 .is_normalized , bool ), bool )
562+ check (assert_type (i0 .unit , TimeUnit ), str )
563+ check (assert_type (i0 .as_unit ("s" ), pd .DatetimeIndex ), pd .DatetimeIndex )
564+ check (assert_type (i0 .as_unit ("ms" ), pd .DatetimeIndex ), pd .DatetimeIndex )
565+ check (assert_type (i0 .as_unit ("us" ), pd .DatetimeIndex ), pd .DatetimeIndex )
566+ check (assert_type (i0 .as_unit ("ns" ), pd .DatetimeIndex ), pd .DatetimeIndex )
525567
526568
527569def test_timedeltaindex_accessors () -> None :
@@ -542,6 +584,11 @@ def test_timedeltaindex_accessors() -> None:
542584 assert_type (i0 .floor ("D" ), pd .TimedeltaIndex ), pd .TimedeltaIndex , pd .Timedelta
543585 )
544586 check (assert_type (i0 .ceil ("D" ), pd .TimedeltaIndex ), pd .TimedeltaIndex , pd .Timedelta )
587+ check (assert_type (i0 .unit , TimeUnit ), str )
588+ check (assert_type (i0 .as_unit ("s" ), pd .TimedeltaIndex ), pd .TimedeltaIndex )
589+ check (assert_type (i0 .as_unit ("ms" ), pd .TimedeltaIndex ), pd .TimedeltaIndex )
590+ check (assert_type (i0 .as_unit ("us" ), pd .TimedeltaIndex ), pd .TimedeltaIndex )
591+ check (assert_type (i0 .as_unit ("ns" ), pd .TimedeltaIndex ), pd .TimedeltaIndex )
545592
546593
547594def test_periodindex_accessors () -> None :
0 commit comments