11
11
from pandas import compat
12
12
13
13
from pandas .core .dtypes .common import (
14
- _TD_DTYPE , ensure_int64 , is_timedelta64_dtype , is_list_like )
14
+ _TD_DTYPE , is_list_like )
15
15
from pandas .core .dtypes .generic import ABCSeries
16
16
from pandas .core .dtypes .missing import isna
17
17
@@ -111,16 +111,16 @@ def dtype(self):
111
111
_attributes = ["freq" ]
112
112
113
113
@classmethod
114
- def _simple_new (cls , values , freq = None , ** kwargs ):
115
- values = np . array ( values , copy = False )
116
- if values . dtype == np . object_ :
117
- values = array_to_timedelta64 ( values )
118
- if values . dtype != _TD_DTYPE :
119
- if is_timedelta64_dtype ( values ):
120
- # non-nano unit
121
- values = values .astype ( _TD_DTYPE )
122
- else :
123
- values = ensure_int64 ( values ). view ( _TD_DTYPE )
114
+ def _simple_new (cls , values , freq = None , dtype = _TD_DTYPE ):
115
+ # `dtype` is passed by _shallow_copy in corner cases, should always
116
+ # be timedelta64[ns] if present
117
+ assert dtype == _TD_DTYPE
118
+ assert isinstance ( values , np . ndarray ), type ( values )
119
+
120
+ if values . dtype == 'i8' :
121
+ values = values .view ( 'm8[ns]' )
122
+
123
+ assert values . dtype == 'm8[ns]'
124
124
125
125
result = object .__new__ (cls )
126
126
result ._data = values
@@ -131,6 +131,10 @@ def __new__(cls, values, freq=None):
131
131
132
132
freq , freq_infer = dtl .maybe_infer_freq (freq )
133
133
134
+ values = np .array (values , copy = False )
135
+ if values .dtype == np .object_ :
136
+ values = array_to_timedelta64 (values )
137
+
134
138
result = cls ._simple_new (values , freq = freq )
135
139
if freq_infer :
136
140
inferred = result .inferred_freq
@@ -166,17 +170,15 @@ def _generate_range(cls, start, end, periods, freq, closed=None):
166
170
167
171
if freq is not None :
168
172
index = _generate_regular_range (start , end , periods , freq )
169
- index = cls ._simple_new (index , freq = freq )
170
173
else :
171
174
index = np .linspace (start .value , end .value , periods ).astype ('i8' )
172
- index = cls ._simple_new (index , freq = freq )
173
175
174
176
if not left_closed :
175
177
index = index [1 :]
176
178
if not right_closed :
177
179
index = index [:- 1 ]
178
180
179
- return index
181
+ return cls . _simple_new ( index , freq = freq )
180
182
181
183
# ----------------------------------------------------------------
182
184
# Arithmetic Methods
0 commit comments