33
33
34
34
from . import datetimelike as dtl
35
35
36
+ _BAD_DTYPE = "dtype {dtype} cannot be converted to timedelta64[ns]"
37
+
36
38
37
39
def _to_m8 (key ):
38
40
"""
@@ -147,15 +149,7 @@ def __init__(self, values, dtype=_TD_DTYPE, freq=None, copy=False):
147
149
values = values ._values
148
150
149
151
if isinstance (values , type (self )):
150
- if freq is None :
151
- freq = values .freq
152
- elif freq and values .freq :
153
- freq = to_offset (freq )
154
- freq , freq_infer = dtl .validate_inferred_freq (
155
- freq , values .freq ,
156
- freq_infer = False
157
- )
158
- values = values ._data
152
+ values , freq , freq_infer = extract_values_freq (values , freq )
159
153
160
154
if not isinstance (values , np .ndarray ):
161
155
msg = (
@@ -171,18 +165,15 @@ def __init__(self, values, dtype=_TD_DTYPE, freq=None, copy=False):
171
165
values = values .view (_TD_DTYPE )
172
166
173
167
if values .dtype != _TD_DTYPE :
174
- msg = (
175
- "The dtype of 'values' is incorrect. Must be "
176
- "'timedelta64[ns]'. Got '{}' instead."
177
- )
178
- raise ValueError (msg .format (values .dtype ))
168
+ raise TypeError (_BAD_DTYPE .format (dtype = values .dtype ))
179
169
180
- dtype_msg = "'dtype' must be 'timedelta64[ns]'. Got '{}' instead."
181
170
try :
182
- if dtype != _TD_DTYPE :
183
- raise ValueError (dtype_msg .format (dtype ))
171
+ dtype_mismatch = dtype != _TD_DTYPE
184
172
except TypeError :
185
- raise ValueError (dtype_msg .format (dtype ))
173
+ raise TypeError (_BAD_DTYPE .format (dtype = dtype ))
174
+ else :
175
+ if dtype_mismatch :
176
+ raise TypeError (_BAD_DTYPE .format (dtype = dtype ))
186
177
187
178
if freq == "infer" :
188
179
msg = (
@@ -1017,3 +1008,18 @@ def _generate_regular_range(start, end, periods, offset):
1017
1008
1018
1009
data = np .arange (b , e , stride , dtype = np .int64 )
1019
1010
return data
1011
+
1012
+
1013
+ def extract_values_freq (arr , freq ):
1014
+ # type: (TimedeltaArray, Offset) -> Tuple[ndarray, Offset, bool]
1015
+ freq_infer = False
1016
+ if freq is None :
1017
+ freq = arr .freq
1018
+ elif freq and arr .freq :
1019
+ freq = to_offset (freq )
1020
+ freq , freq_infer = dtl .validate_inferred_freq (
1021
+ freq , arr .freq ,
1022
+ freq_infer = False
1023
+ )
1024
+ values = arr ._data
1025
+ return values , freq , freq_infer
0 commit comments