@@ -619,6 +619,72 @@ def test_empty_cftimeindex():
619
619
assert index .date_type is None
620
620
621
621
622
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
623
+ def test_cftimeindex_add (index ):
624
+ date_type = index .date_type
625
+ expected_dates = [date_type (1 , 1 , 2 ), date_type (1 , 2 , 2 ),
626
+ date_type (2 , 1 , 2 ), date_type (2 , 2 , 2 )]
627
+ expected = CFTimeIndex (expected_dates )
628
+ result = index + timedelta (days = 1 )
629
+ assert result .equals (expected )
630
+ assert isinstance (result , CFTimeIndex )
631
+
632
+
633
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
634
+ def test_cftimeindex_radd (index ):
635
+ date_type = index .date_type
636
+ expected_dates = [date_type (1 , 1 , 2 ), date_type (1 , 2 , 2 ),
637
+ date_type (2 , 1 , 2 ), date_type (2 , 2 , 2 )]
638
+ expected = CFTimeIndex (expected_dates )
639
+ result = timedelta (days = 1 ) + index
640
+ assert result .equals (expected )
641
+ assert isinstance (result , CFTimeIndex )
642
+
643
+
644
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
645
+ def test_cftimeindex_sub (index ):
646
+ date_type = index .date_type
647
+ expected_dates = [date_type (1 , 1 , 2 ), date_type (1 , 2 , 2 ),
648
+ date_type (2 , 1 , 2 ), date_type (2 , 2 , 2 )]
649
+ expected = CFTimeIndex (expected_dates )
650
+ result = index + timedelta (days = 2 )
651
+ result = result - timedelta (days = 1 )
652
+ assert result .equals (expected )
653
+ assert isinstance (result , CFTimeIndex )
654
+
655
+
656
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
657
+ def test_cftimeindex_rsub (index ):
658
+ with pytest .raises (TypeError ):
659
+ timedelta (days = 1 ) - index
660
+
661
+
662
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
663
+ @pytest .mark .parametrize ('freq' , ['D' , timedelta (days = 1 )])
664
+ def test_cftimeindex_shift (index , freq ):
665
+ date_type = index .date_type
666
+ expected_dates = [date_type (1 , 1 , 3 ), date_type (1 , 2 , 3 ),
667
+ date_type (2 , 1 , 3 ), date_type (2 , 2 , 3 )]
668
+ expected = CFTimeIndex (expected_dates )
669
+ result = index .shift (2 , freq )
670
+ assert result .equals (expected )
671
+ assert isinstance (result , CFTimeIndex )
672
+
673
+
674
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
675
+ def test_cftimeindex_shift_invalid_n ():
676
+ index = xr .cftime_range ('2000' , periods = 3 )
677
+ with pytest .raises (TypeError ):
678
+ index .shift ('a' , 'D' )
679
+
680
+
681
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
682
+ def test_cftimeindex_shift_invalid_freq ():
683
+ index = xr .cftime_range ('2000' , periods = 3 )
684
+ with pytest .raises (TypeError ):
685
+ index .shift (1 , 1 )
686
+
687
+
622
688
@requires_cftime
623
689
def test_parse_array_of_cftime_strings ():
624
690
from cftime import DatetimeNoLeap
0 commit comments