1414 date_range )
1515
1616
17+ @pytest .fixture (params = [None , 'UTC' , 'Asia/Tokyo' ,
18+ 'US/Eastern' , 'dateutil/Asia/Singapore' ,
19+ 'dateutil/US/Pacific' ])
20+ def tz (request ):
21+ return request .param
22+
23+
24+ @pytest .fixture (params = [pd .offsets .Hour (2 ), timedelta (hours = 2 ),
25+ np .timedelta64 (2 , 'h' ), Timedelta (hours = 2 )],
26+ ids = str )
27+ def delta (request ):
28+ # Several ways of representing two hours
29+ return request .param
30+
31+
32+ @pytest .fixture (
33+ params = [
34+ datetime (2011 , 1 , 1 ),
35+ DatetimeIndex (['2011-01-01' , '2011-01-02' ]),
36+ DatetimeIndex (['2011-01-01' , '2011-01-02' ]).tz_localize ('US/Eastern' ),
37+ np .datetime64 ('2011-01-01' ),
38+ Timestamp ('2011-01-01' )],
39+ ids = lambda x : type (x ).__name__ )
40+ def addend (request ):
41+ return request .param
42+
43+
1744class TestDatetimeIndexArithmetic (object ):
18- tz = [None , 'UTC' , 'Asia/Tokyo' , 'US/Eastern' , 'dateutil/Asia/Singapore' ,
19- 'dateutil/US/Pacific' ]
20-
21- def test_add_iadd (self ):
22- for tz in self .tz :
23-
24- # offset
25- offsets = [pd .offsets .Hour (2 ), timedelta (hours = 2 ),
26- np .timedelta64 (2 , 'h' ), Timedelta (hours = 2 )]
27-
28- for delta in offsets :
29- rng = pd .date_range ('2000-01-01' , '2000-02-01' , tz = tz )
30- result = rng + delta
31- expected = pd .date_range ('2000-01-01 02:00' ,
32- '2000-02-01 02:00' , tz = tz )
33- tm .assert_index_equal (result , expected )
34- rng += delta
35- tm .assert_index_equal (rng , expected )
36-
37- # int
38- rng = pd .date_range ('2000-01-01 09:00' , freq = 'H' , periods = 10 ,
39- tz = tz )
40- result = rng + 1
41- expected = pd .date_range ('2000-01-01 10:00' , freq = 'H' , periods = 10 ,
42- tz = tz )
43- tm .assert_index_equal (result , expected )
44- rng += 1
45- tm .assert_index_equal (rng , expected )
4645
46+ def test_dti_add_timestamp_raises (self ):
4747 idx = DatetimeIndex (['2011-01-01' , '2011-01-02' ])
4848 msg = "cannot add DatetimeIndex and Timestamp"
4949 with tm .assert_raises_regex (TypeError , msg ):
5050 idx + Timestamp ('2011-01-01' )
5151
52+ def test_dti_radd_timestamp_raises (self ):
53+ idx = DatetimeIndex (['2011-01-01' , '2011-01-02' ])
54+ msg = "cannot add DatetimeIndex and Timestamp"
5255 with tm .assert_raises_regex (TypeError , msg ):
5356 Timestamp ('2011-01-01' ) + idx
5457
55- def test_sub_isub (self ):
56- for tz in self .tz :
57-
58- # offset
59- offsets = [pd .offsets .Hour (2 ), timedelta (hours = 2 ),
60- np .timedelta64 (2 , 'h' ), Timedelta (hours = 2 )]
61-
62- for delta in offsets :
63- rng = pd .date_range ('2000-01-01' , '2000-02-01' , tz = tz )
64- expected = pd .date_range ('1999-12-31 22:00' ,
65- '2000-01-31 22:00' , tz = tz )
66-
67- result = rng - delta
68- tm .assert_index_equal (result , expected )
69- rng -= delta
70- tm .assert_index_equal (rng , expected )
71-
72- # int
73- rng = pd .date_range ('2000-01-01 09:00' , freq = 'H' , periods = 10 ,
74- tz = tz )
75- result = rng - 1
76- expected = pd .date_range ('2000-01-01 08:00' , freq = 'H' , periods = 10 ,
77- tz = tz )
78- tm .assert_index_equal (result , expected )
79- rng -= 1
80- tm .assert_index_equal (rng , expected )
81-
82- @pytest .mark .parametrize ('addend' , [
83- datetime (2011 , 1 , 1 ),
84- DatetimeIndex (['2011-01-01' , '2011-01-02' ]),
85- DatetimeIndex (['2011-01-01' , '2011-01-02' ]).tz_localize ('US/Eastern' ),
86- np .datetime64 ('2011-01-01' ),
87- Timestamp ('2011-01-01' )])
58+ # -------------------------------------------------------------
59+ # Binary operations DatetimeIndex and int
60+
61+ def test_dti_add_int (self , tz ):
62+ rng = pd .date_range ('2000-01-01 09:00' , freq = 'H' ,
63+ periods = 10 , tz = tz )
64+ result = rng + 1
65+ expected = pd .date_range ('2000-01-01 10:00' , freq = 'H' ,
66+ periods = 10 , tz = tz )
67+ tm .assert_index_equal (result , expected )
68+
69+ def test_dti_iadd_int (self , tz ):
70+ rng = pd .date_range ('2000-01-01 09:00' , freq = 'H' ,
71+ periods = 10 , tz = tz )
72+ expected = pd .date_range ('2000-01-01 10:00' , freq = 'H' ,
73+ periods = 10 , tz = tz )
74+ rng += 1
75+ tm .assert_index_equal (rng , expected )
76+
77+ def test_dti_sub_int (self , tz ):
78+ rng = pd .date_range ('2000-01-01 09:00' , freq = 'H' ,
79+ periods = 10 , tz = tz )
80+ result = rng - 1
81+ expected = pd .date_range ('2000-01-01 08:00' , freq = 'H' ,
82+ periods = 10 , tz = tz )
83+ tm .assert_index_equal (result , expected )
84+
85+ def test_dti_isub_int (self , tz ):
86+ rng = pd .date_range ('2000-01-01 09:00' , freq = 'H' ,
87+ periods = 10 , tz = tz )
88+ expected = pd .date_range ('2000-01-01 08:00' , freq = 'H' ,
89+ periods = 10 , tz = tz )
90+ rng -= 1
91+ tm .assert_index_equal (rng , expected )
92+
93+ # -------------------------------------------------------------
94+ # Binary operations DatetimeIndex and timedelta-like
95+
96+ def test_dti_add_timedeltalike (self , tz , delta ):
97+ rng = pd .date_range ('2000-01-01' , '2000-02-01' , tz = tz )
98+ result = rng + delta
99+ expected = pd .date_range ('2000-01-01 02:00' ,
100+ '2000-02-01 02:00' , tz = tz )
101+ tm .assert_index_equal (result , expected )
102+
103+ def test_dti_iadd_timedeltalike (self , tz , delta ):
104+ rng = pd .date_range ('2000-01-01' , '2000-02-01' , tz = tz )
105+ expected = pd .date_range ('2000-01-01 02:00' ,
106+ '2000-02-01 02:00' , tz = tz )
107+ rng += delta
108+ tm .assert_index_equal (rng , expected )
109+
110+ def test_dti_sub_timedeltalike (self , tz , delta ):
111+ rng = pd .date_range ('2000-01-01' , '2000-02-01' , tz = tz )
112+ expected = pd .date_range ('1999-12-31 22:00' ,
113+ '2000-01-31 22:00' , tz = tz )
114+ result = rng - delta
115+ tm .assert_index_equal (result , expected )
116+
117+ def test_dti_isub_timedeltalike (self , tz , delta ):
118+ rng = pd .date_range ('2000-01-01' , '2000-02-01' , tz = tz )
119+ expected = pd .date_range ('1999-12-31 22:00' ,
120+ '2000-01-31 22:00' , tz = tz )
121+ rng -= delta
122+ tm .assert_index_equal (rng , expected )
123+
124+ # -------------------------------------------------------------
125+ # Binary Operations DatetimeIndex and datetime-like
126+ # TODO: A couple other tests belong in this section. Move them in
127+ # A PR where there isn't already a giant diff.
128+
88129 def test_add_datetimelike_and_dti (self , addend ):
89130 # GH#9631
90131 dti = DatetimeIndex (['2011-01-01' , '2011-01-02' ])
@@ -95,12 +136,6 @@ def test_add_datetimelike_and_dti(self, addend):
95136 with tm .assert_raises_regex (TypeError , msg ):
96137 addend + dti
97138
98- @pytest .mark .parametrize ('addend' , [
99- datetime (2011 , 1 , 1 ),
100- DatetimeIndex (['2011-01-01' , '2011-01-02' ]),
101- DatetimeIndex (['2011-01-01' , '2011-01-02' ]).tz_localize ('US/Eastern' ),
102- np .datetime64 ('2011-01-01' ),
103- Timestamp ('2011-01-01' )])
104139 def test_add_datetimelike_and_dti_tz (self , addend ):
105140 # GH#9631
106141 dti_tz = DatetimeIndex (['2011-01-01' ,
@@ -112,6 +147,8 @@ def test_add_datetimelike_and_dti_tz(self, addend):
112147 with tm .assert_raises_regex (TypeError , msg ):
113148 addend + dti_tz
114149
150+ # -------------------------------------------------------------
151+
115152 def test_sub_dti_dti (self ):
116153 # previously performed setop (deprecated in 0.16.0), now changed to
117154 # return subtraction -> TimeDeltaIndex (GH ...)
0 commit comments