1111from pandas import compat
1212
1313from pandas .core .dtypes .common import (
14- _TD_DTYPE , ensure_int64 , is_timedelta64_dtype , is_list_like )
14+ _TD_DTYPE , is_list_like )
1515from pandas .core .dtypes .generic import ABCSeries
1616from pandas .core .dtypes .missing import isna
1717
@@ -111,16 +111,16 @@ def dtype(self):
111111 _attributes = ["freq" ]
112112
113113 @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]'
124124
125125 result = object .__new__ (cls )
126126 result ._data = values
@@ -131,6 +131,10 @@ def __new__(cls, values, freq=None):
131131
132132 freq , freq_infer = dtl .maybe_infer_freq (freq )
133133
134+ values = np .array (values , copy = False )
135+ if values .dtype == np .object_ :
136+ values = array_to_timedelta64 (values )
137+
134138 result = cls ._simple_new (values , freq = freq )
135139 if freq_infer :
136140 inferred = result .inferred_freq
@@ -166,17 +170,15 @@ def _generate_range(cls, start, end, periods, freq, closed=None):
166170
167171 if freq is not None :
168172 index = _generate_regular_range (start , end , periods , freq )
169- index = cls ._simple_new (index , freq = freq )
170173 else :
171174 index = np .linspace (start .value , end .value , periods ).astype ('i8' )
172- index = cls ._simple_new (index , freq = freq )
173175
174176 if not left_closed :
175177 index = index [1 :]
176178 if not right_closed :
177179 index = index [:- 1 ]
178180
179- return index
181+ return cls . _simple_new ( index , freq = freq )
180182
181183 # ----------------------------------------------------------------
182184 # Arithmetic Methods
0 commit comments