5
5
TYPE_CHECKING ,
6
6
Any ,
7
7
Optional ,
8
+ cast ,
8
9
)
9
10
10
11
import numpy as np
24
25
from pandas ._typing import FulldatetimeDict
25
26
else :
26
27
FulldatetimeDict = Any
28
+ from pandas ._typing import TimeUnit
29
+
27
30
from tests import (
28
31
TYPE_CHECKING_INVALID_USAGE ,
29
32
check ,
@@ -428,6 +431,11 @@ def test_series_dt_accessors() -> None:
428
431
)
429
432
check (assert_type (s0 .dt .month_name (), "pd.Series[str]" ), pd .Series , str )
430
433
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 )
431
439
432
440
i1 = pd .period_range (start = "2022-06-01" , periods = 10 )
433
441
@@ -455,6 +463,35 @@ def test_series_dt_accessors() -> None:
455
463
check (assert_type (s2 .dt .components , pd .DataFrame ), pd .DataFrame )
456
464
check (assert_type (s2 .dt .to_pytimedelta (), np .ndarray ), np .ndarray )
457
465
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 )
458
495
459
496
460
497
def test_datetimeindex_accessors () -> None :
@@ -522,6 +559,11 @@ def test_datetimeindex_accessors() -> None:
522
559
check (assert_type (i0 .month_name (), pd .Index ), pd .Index , str )
523
560
check (assert_type (i0 .day_name (), pd .Index ), pd .Index , str )
524
561
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 )
525
567
526
568
527
569
def test_timedeltaindex_accessors () -> None :
@@ -542,6 +584,11 @@ def test_timedeltaindex_accessors() -> None:
542
584
assert_type (i0 .floor ("D" ), pd .TimedeltaIndex ), pd .TimedeltaIndex , pd .Timedelta
543
585
)
544
586
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 )
545
592
546
593
547
594
def test_periodindex_accessors () -> None :
0 commit comments