@@ -74,10 +74,11 @@ def test_construction(self):
7474 self .assertEqual (Timedelta ('-1:00:00' ), - timedelta (hours = 1 ))
7575 self .assertEqual (Timedelta ('-01:00:00' ), - timedelta (hours = 1 ))
7676
77- # more strings
77+ # more strings & abbrevs
7878 # GH 8190
7979 self .assertEqual (Timedelta ('1 h' ), timedelta (hours = 1 ))
8080 self .assertEqual (Timedelta ('1 hour' ), timedelta (hours = 1 ))
81+ self .assertEqual (Timedelta ('1 hr' ), timedelta (hours = 1 ))
8182 self .assertEqual (Timedelta ('1 hours' ), timedelta (hours = 1 ))
8283 self .assertEqual (Timedelta ('-1 hours' ), - timedelta (hours = 1 ))
8384 self .assertEqual (Timedelta ('1 m' ), timedelta (minutes = 1 ))
@@ -169,18 +170,59 @@ def test_round(self):
169170 t1 = Timedelta ('1 days 02:34:56.789123456' )
170171 t2 = Timedelta ('-1 days 02:34:56.789123456' )
171172
172- for (reso , s1 , s2 ) in [('N' , t1 , t2 ),
173+ for (freq , s1 , s2 ) in [('N' , t1 , t2 ),
173174 ('U' , Timedelta ('1 days 02:34:56.789123000' ),Timedelta ('-1 days 02:34:56.789123000' )),
174175 ('L' , Timedelta ('1 days 02:34:56.789000000' ),Timedelta ('-1 days 02:34:56.789000000' )),
175176 ('S' , Timedelta ('1 days 02:34:56' ),Timedelta ('-1 days 02:34:56' )),
177+ ('2S' , Timedelta ('1 days 02:34:56' ),Timedelta ('-1 days 02:34:56' )),
178+ ('5S' , Timedelta ('1 days 02:34:55' ),Timedelta ('-1 days 02:34:55' )),
176179 ('T' , Timedelta ('1 days 02:34:00' ),Timedelta ('-1 days 02:34:00' )),
180+ ('12T' , Timedelta ('1 days 02:24:00' ),Timedelta ('-1 days 02:24:00' )),
177181 ('H' , Timedelta ('1 days 02:00:00' ),Timedelta ('-1 days 02:00:00' )),
178182 ('d' , Timedelta ('1 days' ),Timedelta ('-1 days' ))]:
179- r1 = t1 .round (reso )
183+ r1 = t1 .round (freq )
180184 self .assertEqual (r1 , s1 )
181- r2 = t2 .round (reso )
185+ r2 = t2 .round (freq )
182186 self .assertEqual (r2 , s2 )
183187
188+ # invalid
189+ for freq in ['Y' ,'M' ,'foobar' ]:
190+ self .assertRaises (ValueError , lambda : t1 .round (freq ))
191+
192+ t1 = timedelta_range ('1 days' ,periods = 3 ,freq = '1 min 2 s 3 us' )
193+ t2 = - 1 * t1
194+ t1a = timedelta_range ('1 days' ,periods = 3 ,freq = '1 min 2 s' )
195+ t1b = timedelta_range ('1 days' ,periods = 3 ,freq = '1 min' )
196+ t1c = pd .TimedeltaIndex ([1 ,1 ,1 ],unit = 'D' )
197+
198+ # note that negative times round DOWN! so don't give whole numbers
199+ for (freq , s1 , s2 ) in [('N' , t1 , t2 ),
200+ ('U' , t1 , t2 ),
201+ ('L' , t1a , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:58:57.999000' ,
202+ '-2 days +23:57:55.999000' ],
203+ dtype = 'timedelta64[ns]' , freq = None )),
204+ ('S' , t1a , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:58:57' , '-2 days +23:57:55' ],
205+ dtype = 'timedelta64[ns]' , freq = None )),
206+ ('2S' , t1a , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:58:56' , '-2 days +23:57:54' ],
207+ dtype = 'timedelta64[ns]' , freq = None )),
208+ ('5S' , t1b , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:58:55' , '-2 days +23:57:55' ],
209+ dtype = 'timedelta64[ns]' , freq = None )),
210+ ('T' , t1b , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:58:00' , '-2 days +23:57:00' ],
211+ dtype = 'timedelta64[ns]' , freq = None )),
212+ ('12T' , t1c , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:48:00' , '-2 days +23:48:00' ],
213+ dtype = 'timedelta64[ns]' , freq = None )),
214+ ('H' , t1c , TimedeltaIndex (['-1 days +00:00:00' , '-2 days +23:00:00' , '-2 days +23:00:00' ],
215+ dtype = 'timedelta64[ns]' , freq = None )),
216+ ('d' , t1c , pd .TimedeltaIndex ([- 1 ,- 2 ,- 2 ],unit = 'D' ))]:
217+ r1 = t1 .round (freq )
218+ tm .assert_index_equal (r1 , s1 )
219+ r2 = t2 .round (freq )
220+ tm .assert_index_equal (r2 , s2 )
221+
222+ # invalid
223+ for freq in ['Y' ,'M' ,'foobar' ]:
224+ self .assertRaises (ValueError , lambda : t1 .round (freq ))
225+
184226 def test_repr (self ):
185227
186228 self .assertEqual (repr (Timedelta (10 ,unit = 'd' )),"Timedelta('10 days 00:00:00')" )
0 commit comments