@@ -629,6 +629,17 @@ def test_cftimeindex_add(index):
629
629
assert isinstance (result , CFTimeIndex )
630
630
631
631
632
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
633
+ @pytest .mark .parametrize ('calendar' , _CFTIME_CALENDARS )
634
+ def test_cftimeindex_add_timedeltaindex (calendar ):
635
+ a = xr .cftime_range ('2000' , periods = 5 , calendar = calendar )
636
+ deltas = pd .TimedeltaIndex ([timedelta (days = 2 ) for _ in range (5 )])
637
+ result = a + deltas
638
+ expected = a .shift (2 , 'D' )
639
+ assert result .equals (expected )
640
+ assert isinstance (result , CFTimeIndex )
641
+
642
+
632
643
@pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
633
644
def test_cftimeindex_radd (index ):
634
645
date_type = index .date_type
@@ -640,6 +651,17 @@ def test_cftimeindex_radd(index):
640
651
assert isinstance (result , CFTimeIndex )
641
652
642
653
654
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
655
+ @pytest .mark .parametrize ('calendar' , _CFTIME_CALENDARS )
656
+ def test_timedeltaindex_add_cftimeindex (calendar ):
657
+ a = xr .cftime_range ('2000' , periods = 5 , calendar = calendar )
658
+ deltas = pd .TimedeltaIndex ([timedelta (days = 2 ) for _ in range (5 )])
659
+ result = deltas + a
660
+ expected = a .shift (2 , 'D' )
661
+ assert result .equals (expected )
662
+ assert isinstance (result , CFTimeIndex )
663
+
664
+
643
665
@pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
644
666
def test_cftimeindex_sub (index ):
645
667
date_type = index .date_type
@@ -652,6 +674,28 @@ def test_cftimeindex_sub(index):
652
674
assert isinstance (result , CFTimeIndex )
653
675
654
676
677
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
678
+ @pytest .mark .parametrize ('calendar' , _CFTIME_CALENDARS )
679
+ def test_cftimeindex_sub_cftimeindex (calendar ):
680
+ a = xr .cftime_range ('2000' , periods = 5 , calendar = calendar )
681
+ b = a .shift (2 , 'D' )
682
+ result = b - a
683
+ expected = pd .TimedeltaIndex ([timedelta (days = 2 ) for _ in range (5 )])
684
+ assert result .equals (expected )
685
+ assert isinstance (result , pd .TimedeltaIndex )
686
+
687
+
688
+ @pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
689
+ @pytest .mark .parametrize ('calendar' , _CFTIME_CALENDARS )
690
+ def test_cftimeindex_sub_timedeltaindex (calendar ):
691
+ a = xr .cftime_range ('2000' , periods = 5 , calendar = calendar )
692
+ deltas = pd .TimedeltaIndex ([timedelta (days = 2 ) for _ in range (5 )])
693
+ result = a - deltas
694
+ expected = a .shift (- 2 , 'D' )
695
+ assert result .equals (expected )
696
+ assert isinstance (result , CFTimeIndex )
697
+
698
+
655
699
@pytest .mark .skipif (not has_cftime , reason = 'cftime not installed' )
656
700
def test_cftimeindex_rsub (index ):
657
701
with pytest .raises (TypeError ):
0 commit comments