@@ -74,46 +74,6 @@ class Other:
74
74
assert td .__mul__ (other ) is NotImplemented
75
75
assert td .__floordiv__ (other ) is NotImplemented
76
76
77
- def test_timedelta_ops_scalar (self ):
78
- # GH 6808
79
- base = pd .to_datetime ('20130101 09:01:12.123456' )
80
- expected_add = pd .to_datetime ('20130101 09:01:22.123456' )
81
- expected_sub = pd .to_datetime ('20130101 09:01:02.123456' )
82
-
83
- for offset in [pd .to_timedelta (10 , unit = 's' ), timedelta (seconds = 10 ),
84
- np .timedelta64 (10 , 's' ),
85
- np .timedelta64 (10000000000 , 'ns' ),
86
- pd .offsets .Second (10 )]:
87
- result = base + offset
88
- assert result == expected_add
89
-
90
- result = base - offset
91
- assert result == expected_sub
92
-
93
- base = pd .to_datetime ('20130102 09:01:12.123456' )
94
- expected_add = pd .to_datetime ('20130103 09:01:22.123456' )
95
- expected_sub = pd .to_datetime ('20130101 09:01:02.123456' )
96
-
97
- for offset in [pd .to_timedelta ('1 day, 00:00:10' ),
98
- pd .to_timedelta ('1 days, 00:00:10' ),
99
- timedelta (days = 1 , seconds = 10 ),
100
- np .timedelta64 (1 , 'D' ) + np .timedelta64 (10 , 's' ),
101
- pd .offsets .Day () + pd .offsets .Second (10 )]:
102
- result = base + offset
103
- assert result == expected_add
104
-
105
- result = base - offset
106
- assert result == expected_sub
107
-
108
- def test_ops_offsets (self ):
109
- td = Timedelta (10 , unit = 'd' )
110
- assert Timedelta (241 , unit = 'h' ) == td + pd .offsets .Hour (1 )
111
- assert Timedelta (241 , unit = 'h' ) == pd .offsets .Hour (1 ) + td
112
- assert 240 == td / pd .offsets .Hour (1 )
113
- assert 1 / 240.0 == pd .offsets .Hour (1 ) / td
114
- assert Timedelta (239 , unit = 'h' ) == td - pd .offsets .Hour (1 )
115
- assert Timedelta (- 239 , unit = 'h' ) == pd .offsets .Hour (1 ) - td
116
-
117
77
def test_unary_ops (self ):
118
78
td = Timedelta (10 , unit = 'd' )
119
79
@@ -129,130 +89,8 @@ def test_unary_ops(self):
129
89
130
90
def test_binary_ops_nat (self ):
131
91
td = Timedelta (10 , unit = 'd' )
132
-
133
- assert (td - pd .NaT ) is pd .NaT
134
- assert (td + pd .NaT ) is pd .NaT
92
+ # FIXME: The next test is wrong: td * NaT should raise
135
93
assert (td * pd .NaT ) is pd .NaT
136
- assert (td / pd .NaT ) is np .nan
137
- assert (td // pd .NaT ) is np .nan
138
- assert (td // np .timedelta64 ('NaT' )) is np .nan
139
-
140
- def test_binary_ops_integers (self ):
141
- td = Timedelta (10 , unit = 'd' )
142
-
143
- assert td * 2 == Timedelta (20 , unit = 'd' )
144
- assert td / 2 == Timedelta (5 , unit = 'd' )
145
- assert td // 2 == Timedelta (5 , unit = 'd' )
146
-
147
- # invert
148
- assert td * - 1 == Timedelta ('-10d' )
149
- assert - 1 * td == Timedelta ('-10d' )
150
-
151
- # can't operate with integers
152
- pytest .raises (TypeError , lambda : td + 2 )
153
- pytest .raises (TypeError , lambda : td - 2 )
154
-
155
- def test_binary_ops_with_timedelta (self ):
156
- td = Timedelta (10 , unit = 'd' )
157
-
158
- assert td - td == Timedelta (0 , unit = 'ns' )
159
- assert td + td == Timedelta (20 , unit = 'd' )
160
- assert td / td == 1
161
-
162
- # invalid multiply with another timedelta
163
- pytest .raises (TypeError , lambda : td * td )
164
-
165
- def test_floordiv (self ):
166
- # GH#18846
167
- td = Timedelta (hours = 3 , minutes = 4 )
168
- scalar = Timedelta (hours = 3 , minutes = 3 )
169
-
170
- # scalar others
171
- assert td // scalar == 1
172
- assert - td // scalar .to_pytimedelta () == - 2
173
- assert (2 * td ) // scalar .to_timedelta64 () == 2
174
-
175
- assert td // np .nan is pd .NaT
176
- assert np .isnan (td // pd .NaT )
177
- assert np .isnan (td // np .timedelta64 ('NaT' ))
178
-
179
- with pytest .raises (TypeError ):
180
- td // np .datetime64 ('2016-01-01' , dtype = 'datetime64[us]' )
181
-
182
- expected = Timedelta (hours = 1 , minutes = 32 )
183
- assert td // 2 == expected
184
- assert td // 2.0 == expected
185
- assert td // np .float64 (2.0 ) == expected
186
- assert td // np .int32 (2.0 ) == expected
187
- assert td // np .uint8 (2.0 ) == expected
188
-
189
- # Array-like others
190
- assert td // np .array (scalar .to_timedelta64 ()) == 1
191
-
192
- res = (3 * td ) // np .array ([scalar .to_timedelta64 ()])
193
- expected = np .array ([3 ], dtype = np .int64 )
194
- tm .assert_numpy_array_equal (res , expected )
195
-
196
- res = (10 * td ) // np .array ([scalar .to_timedelta64 (),
197
- np .timedelta64 ('NaT' )])
198
- expected = np .array ([10 , np .nan ])
199
- tm .assert_numpy_array_equal (res , expected )
200
-
201
- ser = pd .Series ([1 ], dtype = np .int64 )
202
- res = td // ser
203
- assert res .dtype .kind == 'm'
204
-
205
- def test_rfloordiv (self ):
206
- # GH#18846
207
- td = Timedelta (hours = 3 , minutes = 3 )
208
- scalar = Timedelta (hours = 3 , minutes = 4 )
209
-
210
- # scalar others
211
- # x // Timedelta is defined only for timedelta-like x. int-like,
212
- # float-like, and date-like, in particular, should all either
213
- # a) raise TypeError directly or
214
- # b) return NotImplemented, following which the reversed
215
- # operation will raise TypeError.
216
- assert td .__rfloordiv__ (scalar ) == 1
217
- assert (- td ).__rfloordiv__ (scalar .to_pytimedelta ()) == - 2
218
- assert (2 * td ).__rfloordiv__ (scalar .to_timedelta64 ()) == 0
219
-
220
- assert np .isnan (td .__rfloordiv__ (pd .NaT ))
221
- assert np .isnan (td .__rfloordiv__ (np .timedelta64 ('NaT' )))
222
-
223
- dt64 = np .datetime64 ('2016-01-01' , dtype = 'datetime64[us]' )
224
- with pytest .raises (TypeError ):
225
- td .__rfloordiv__ (dt64 )
226
-
227
- assert td .__rfloordiv__ (np .nan ) is NotImplemented
228
- assert td .__rfloordiv__ (3.5 ) is NotImplemented
229
- assert td .__rfloordiv__ (2 ) is NotImplemented
230
-
231
- with pytest .raises (TypeError ):
232
- td .__rfloordiv__ (np .float64 (2.0 ))
233
- with pytest .raises (TypeError ):
234
- td .__rfloordiv__ (np .int32 (2.0 ))
235
- with pytest .raises (TypeError ):
236
- td .__rfloordiv__ (np .uint8 (9 ))
237
-
238
- # Array-like others
239
- assert td .__rfloordiv__ (np .array (scalar .to_timedelta64 ())) == 1
240
-
241
- res = td .__rfloordiv__ (np .array ([(3 * scalar ).to_timedelta64 ()]))
242
- expected = np .array ([3 ], dtype = np .int64 )
243
- tm .assert_numpy_array_equal (res , expected )
244
-
245
- arr = np .array ([(10 * scalar ).to_timedelta64 (),
246
- np .timedelta64 ('NaT' )])
247
- res = td .__rfloordiv__ (arr )
248
- expected = np .array ([10 , np .nan ])
249
- tm .assert_numpy_array_equal (res , expected )
250
-
251
- ser = pd .Series ([1 ], dtype = np .int64 )
252
- res = td .__rfloordiv__ (ser )
253
- assert res is NotImplemented
254
- with pytest .raises (TypeError ):
255
- ser // td
256
94
257
95
258
96
class TestTimedeltaComparison (object ):
0 commit comments