|
14 | 14 | date_range)
|
15 | 15 |
|
16 | 16 |
|
| 17 | + |
17 | 18 | class TestDatetimeIndexArithmetic(object):
|
18 | 19 | tz = [None, 'UTC', 'Asia/Tokyo', 'US/Eastern', 'dateutil/Asia/Singapore',
|
19 | 20 | 'dateutil/US/Pacific']
|
20 | 21 |
|
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) |
| 22 | + # Several ways of representing two hours |
| 23 | + two_hour_variants = [pd.offsets.Hour(2), timedelta(hours=2), |
| 24 | + np.timedelta64(2, 'h'), Timedelta(hours=2)] |
46 | 25 |
|
| 26 | + def test_dti_add_timestamp_raises(self): |
47 | 27 | idx = DatetimeIndex(['2011-01-01', '2011-01-02'])
|
48 | 28 | msg = "cannot add DatetimeIndex and Timestamp"
|
49 | 29 | with tm.assert_raises_regex(TypeError, msg):
|
50 | 30 | idx + Timestamp('2011-01-01')
|
51 | 31 |
|
| 32 | + def test_dti_radd_timestamp_raises(self): |
| 33 | + idx = DatetimeIndex(['2011-01-01', '2011-01-02']) |
| 34 | + msg = "cannot add DatetimeIndex and Timestamp" |
52 | 35 | with tm.assert_raises_regex(TypeError, msg):
|
53 | 36 | Timestamp('2011-01-01') + idx
|
54 | 37 |
|
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) |
| 38 | + # ------------------------------------------------------------- |
| 39 | + # Binary operations DatetimeIndex and int |
| 40 | + |
| 41 | + @pytest.mark.parametrize('tz', tz) |
| 42 | + def test_dti_add_int(self, tz): |
| 43 | + rng = pd.date_range('2000-01-01 09:00', freq='H', |
| 44 | + periods=10, tz=tz) |
| 45 | + result = rng + 1 |
| 46 | + expected = pd.date_range('2000-01-01 10:00', freq='H', |
| 47 | + periods=10, tz=tz) |
| 48 | + tm.assert_index_equal(result, expected) |
| 49 | + |
| 50 | + @pytest.mark.parametrize('tz', tz) |
| 51 | + def test_dti_iadd_int(self, tz): |
| 52 | + rng = pd.date_range('2000-01-01 09:00', freq='H', |
| 53 | + periods=10, tz=tz) |
| 54 | + expected = pd.date_range('2000-01-01 10:00', freq='H', |
| 55 | + periods=10, tz=tz) |
| 56 | + rng += 1 |
| 57 | + tm.assert_index_equal(rng, expected) |
| 58 | + |
| 59 | + @pytest.mark.parametrize('tz', tz) |
| 60 | + def test_dti_sub_int(self): |
| 61 | + rng = pd.date_range('2000-01-01 09:00', freq='H', |
| 62 | + periods=10, tz=tz) |
| 63 | + result = rng - 1 |
| 64 | + expected = pd.date_range('2000-01-01 08:00', freq='H', |
| 65 | + periods=10, tz=tz) |
| 66 | + tm.assert_index_equal(result, expected) |
| 67 | + |
| 68 | + @pytest.mark.parametrize('tz', tz) |
| 69 | + def test_dti_isub_int(self): |
| 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 08:00', freq='H', |
| 73 | + periods=10, tz=tz) |
| 74 | + rng -= 1 |
| 75 | + tm.assert_index_equal(rng, expected) |
| 76 | + |
| 77 | + # ------------------------------------------------------------- |
| 78 | + # Binary operations DatetimeIndex and timedelta-like |
| 79 | + |
| 80 | + @pytest.mark.parametrize('delta', two_hour_variants) |
| 81 | + @pytest.mark.parametrize('tz', tz) |
| 82 | + def test_dti_add_timedeltalike(self, tz): |
| 83 | + rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz) |
| 84 | + result = rng + delta |
| 85 | + expected = pd.date_range('2000-01-01 02:00', |
| 86 | + '2000-02-01 02:00', tz=tz) |
| 87 | + tm.assert_index_equal(result, expected) |
| 88 | + |
| 89 | + @pytest.mark.parametrize('delta', two_hour_variants) |
| 90 | + @pytest.mark.parametrize('tz', tz) |
| 91 | + def test_dti_iadd_timedeltalike(self, tz): |
| 92 | + rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz) |
| 93 | + expected = pd.date_range('2000-01-01 02:00', |
| 94 | + '2000-02-01 02:00', tz=tz) |
| 95 | + rng += delta |
| 96 | + tm.assert_index_equal(rng, expected) |
| 97 | + |
| 98 | + @pytest.mark.parametrize('delta', two_hour_variants) |
| 99 | + @pytest.mark.parametrize('tz', tz) |
| 100 | + def test_dti_sub_timedeltalike(self, tz): |
| 101 | + rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz) |
| 102 | + expected = pd.date_range('1999-12-31 22:00', |
| 103 | + '2000-01-31 22:00', tz=tz) |
| 104 | + result = rng - delta |
| 105 | + tm.assert_index_equal(result, expected) |
| 106 | + |
| 107 | + @pytest.mark.parametrize('delta', two_hour_variants) |
| 108 | + @pytest.mark.parametrize('tz', tz) |
| 109 | + def test_dti_isub_timedeltalike(self, tz): |
| 110 | + rng = pd.date_range('2000-01-01', '2000-02-01', tz=tz) |
| 111 | + expected = pd.date_range('1999-12-31 22:00', |
| 112 | + '2000-01-31 22:00', tz=tz) |
| 113 | + rng -= delta |
| 114 | + tm.assert_index_equal(rng, expected) |
| 115 | + |
| 116 | + # ------------------------------------------------------------- |
| 117 | + # Binary Operations DatetimeIndex and datetime-like |
| 118 | + # TODO: A couple other tests belong in this section. Move them in |
| 119 | + # A PR where there isn't already a giant diff. |
81 | 120 |
|
82 | 121 | @pytest.mark.parametrize('addend', [
|
83 | 122 | datetime(2011, 1, 1),
|
@@ -112,6 +151,8 @@ def test_add_datetimelike_and_dti_tz(self, addend):
|
112 | 151 | with tm.assert_raises_regex(TypeError, msg):
|
113 | 152 | addend + dti_tz
|
114 | 153 |
|
| 154 | + # ------------------------------------------------------------- |
| 155 | + |
115 | 156 | def test_sub_dti_dti(self):
|
116 | 157 | # previously performed setop (deprecated in 0.16.0), now changed to
|
117 | 158 | # return subtraction -> TimeDeltaIndex (GH ...)
|
|
0 commit comments