@@ -39,6 +39,21 @@ def test_to_offset_multiple(self):
3939 expected = offsets .Hour (3 )
4040 assert (result == expected )
4141
42+ freqstr = '2h 20.5min'
43+ result = frequencies .to_offset (freqstr )
44+ expected = offsets .Second (8430 )
45+ assert (result == expected )
46+
47+ freqstr = '1.5min'
48+ result = frequencies .to_offset (freqstr )
49+ expected = offsets .Second (90 )
50+ assert (result == expected )
51+
52+ freqstr = '0.5S'
53+ result = frequencies .to_offset (freqstr )
54+ expected = offsets .Milli (500 )
55+ assert (result == expected )
56+
4257 freqstr = '15l500u'
4358 result = frequencies .to_offset (freqstr )
4459 expected = offsets .Micro (15500 )
@@ -49,6 +64,16 @@ def test_to_offset_multiple(self):
4964 expected = offsets .Milli (10075 )
5065 assert (result == expected )
5166
67+ freqstr = '1s0.25ms'
68+ result = frequencies .to_offset (freqstr )
69+ expected = offsets .Micro (1000250 )
70+ assert (result == expected )
71+
72+ freqstr = '1s0.25L'
73+ result = frequencies .to_offset (freqstr )
74+ expected = offsets .Micro (1000250 )
75+ assert (result == expected )
76+
5277 freqstr = '2800N'
5378 result = frequencies .to_offset (freqstr )
5479 expected = offsets .Nano (2800 )
@@ -107,10 +132,8 @@ def test_to_offset_invalid(self):
107132 frequencies .to_offset ('-2-3U' )
108133 with tm .assertRaisesRegexp (ValueError , 'Invalid frequency: -2D:3H' ):
109134 frequencies .to_offset ('-2D:3H' )
110-
111- # ToDo: Must be fixed in #8419
112- with tm .assertRaisesRegexp (ValueError , 'Invalid frequency: .5S' ):
113- frequencies .to_offset ('.5S' )
135+ with tm .assertRaisesRegexp (ValueError , 'Invalid frequency: 1.5.0S' ):
136+ frequencies .to_offset ('1.5.0S' )
114137
115138 # split offsets with spaces are valid
116139 assert frequencies .to_offset ('2D 3H' ) == offsets .Hour (51 )
@@ -379,6 +402,26 @@ def test_freq_to_reso(self):
379402 result = Reso .get_freq (Reso .get_str (Reso .get_reso_from_freq (freq )))
380403 self .assertEqual (freq , result )
381404
405+ def test_resolution_bumping (self ):
406+ # GH 14378
407+ Reso = frequencies .Resolution
408+
409+ self .assertEqual (Reso .get_stride_from_decimal (1.5 , 'T' ), (90 , 'S' ))
410+ self .assertEqual (Reso .get_stride_from_decimal (62.4 , 'T' ), (3744 , 'S' ))
411+ self .assertEqual (Reso .get_stride_from_decimal (1.04 , 'H' ), (3744 , 'S' ))
412+ self .assertEqual (Reso .get_stride_from_decimal (1 , 'D' ), (1 , 'D' ))
413+ self .assertEqual (Reso .get_stride_from_decimal (0.342931 , 'H' ),
414+ (1234551600 , 'U' ))
415+ self .assertEqual (Reso .get_stride_from_decimal (1.2345 , 'D' ),
416+ (106660800 , 'L' ))
417+
418+ with self .assertRaises (ValueError ):
419+ Reso .get_stride_from_decimal (0.5 , 'N' )
420+
421+ # too much precision in the input can prevent
422+ with self .assertRaises (ValueError ):
423+ Reso .get_stride_from_decimal (0.3429324798798269273987982 , 'H' )
424+
382425 def test_get_freq_code (self ):
383426 # freqstr
384427 self .assertEqual (frequencies .get_freq_code ('A' ),
0 commit comments