1
- from datetime import timedelta
2
-
3
1
import numpy as np
4
2
import pytest
5
3
6
4
from pandas import (
7
5
Index ,
8
- NaT ,
9
6
Series ,
10
7
Timedelta ,
11
8
timedelta_range ,
12
9
)
13
10
import pandas ._testing as tm
14
- from pandas .core .arrays import TimedeltaArray
15
11
16
12
17
13
class TestTimedeltaIndex :
18
- @pytest .fixture
19
- def index (self ):
20
- return tm .makeTimedeltaIndex (10 )
21
-
22
14
def test_misc_coverage (self ):
23
15
rng = timedelta_range ("1 day" , periods = 5 )
24
16
result = rng .groupby (rng .days )
@@ -34,14 +26,6 @@ def test_map(self):
34
26
exp = Index ([f (x ) for x in rng ], dtype = np .int64 )
35
27
tm .assert_index_equal (result , exp )
36
28
37
- def test_pass_TimedeltaIndex_to_index (self ):
38
- rng = timedelta_range ("1 days" , "10 days" )
39
- idx = Index (rng , dtype = object )
40
-
41
- expected = Index (rng .to_pytimedelta (), dtype = object )
42
-
43
- tm .assert_numpy_array_equal (idx .values , expected .values )
44
-
45
29
def test_fields (self ):
46
30
rng = timedelta_range ("1 days, 10:11:12.100123456" , periods = 2 , freq = "s" )
47
31
tm .assert_index_equal (rng .days , Index ([1 , 1 ], dtype = np .int64 ))
@@ -75,80 +59,3 @@ def test_fields(self):
75
59
# preserve name (GH15589)
76
60
rng .name = "name"
77
61
assert rng .days .name == "name"
78
-
79
- def test_freq_conversion_always_floating (self ):
80
- # pre-2.0 td64 astype converted to float64. now for supported units
81
- # (s, ms, us, ns) this converts to the requested dtype.
82
- # This matches TDA and Series
83
- tdi = timedelta_range ("1 Day" , periods = 30 )
84
-
85
- res = tdi .astype ("m8[s]" )
86
- exp_values = np .asarray (tdi ).astype ("m8[s]" )
87
- exp_tda = TimedeltaArray ._simple_new (
88
- exp_values , dtype = exp_values .dtype , freq = tdi .freq
89
- )
90
- expected = Index (exp_tda )
91
- assert expected .dtype == "m8[s]"
92
- tm .assert_index_equal (res , expected )
93
-
94
- # check this matches Series and TimedeltaArray
95
- res = tdi ._data .astype ("m8[s]" )
96
- tm .assert_equal (res , expected ._values )
97
-
98
- res = tdi .to_series ().astype ("m8[s]" )
99
- tm .assert_equal (res ._values , expected ._values ._with_freq (None ))
100
-
101
- def test_freq_conversion (self , index_or_series ):
102
- # doc example
103
-
104
- scalar = Timedelta (days = 31 )
105
- td = index_or_series (
106
- [scalar , scalar , scalar + timedelta (minutes = 5 , seconds = 3 ), NaT ],
107
- dtype = "m8[ns]" ,
108
- )
109
-
110
- result = td / np .timedelta64 (1 , "D" )
111
- expected = index_or_series (
112
- [31 , 31 , (31 * 86400 + 5 * 60 + 3 ) / 86400.0 , np .nan ]
113
- )
114
- tm .assert_equal (result , expected )
115
-
116
- # We don't support "D" reso, so we use the pre-2.0 behavior
117
- # casting to float64
118
- msg = (
119
- r"Cannot convert from timedelta64\[ns\] to timedelta64\[D\]. "
120
- "Supported resolutions are 's', 'ms', 'us', 'ns'"
121
- )
122
- with pytest .raises (ValueError , match = msg ):
123
- td .astype ("timedelta64[D]" )
124
-
125
- result = td / np .timedelta64 (1 , "s" )
126
- expected = index_or_series (
127
- [31 * 86400 , 31 * 86400 , 31 * 86400 + 5 * 60 + 3 , np .nan ]
128
- )
129
- tm .assert_equal (result , expected )
130
-
131
- exp_values = np .asarray (td ).astype ("m8[s]" )
132
- exp_tda = TimedeltaArray ._simple_new (exp_values , dtype = exp_values .dtype )
133
- expected = index_or_series (exp_tda )
134
- assert expected .dtype == "m8[s]"
135
- result = td .astype ("timedelta64[s]" )
136
- tm .assert_equal (result , expected )
137
-
138
- def test_arithmetic_zero_freq (self ):
139
- # GH#51575 don't get a .freq with freq.n = 0
140
- tdi = timedelta_range (0 , periods = 100 , freq = "ns" )
141
- result = tdi / 2
142
- assert result .freq is None
143
- expected = tdi [:50 ].repeat (2 )
144
- tm .assert_index_equal (result , expected )
145
-
146
- result2 = tdi // 2
147
- assert result2 .freq is None
148
- expected2 = expected
149
- tm .assert_index_equal (result2 , expected2 )
150
-
151
- result3 = tdi * 0
152
- assert result3 .freq is None
153
- expected3 = tdi [:1 ].repeat (100 )
154
- tm .assert_index_equal (result3 , expected3 )
0 commit comments