@@ -182,7 +182,6 @@ class DatetimeIndex(DatetimeArrayMixin, DatelikeOps, TimelikeOps,
182182
183183 """
184184 _resolution = cache_readonly (DatetimeArrayMixin ._resolution .fget )
185- _shallow_copy = Index ._shallow_copy
186185
187186 _typ = 'datetimeindex'
188187 _join_precedence = 10
@@ -199,11 +198,15 @@ def _join_i8_wrapper(joinf, **kwargs):
199198
200199 _engine_type = libindex .DatetimeEngine
201200
202- tz = None
201+ _tz = None
203202 _freq = None
204203 _comparables = ['name' , 'freqstr' , 'tz' ]
205204 _attributes = ['name' , 'freq' , 'tz' ]
206205
206+ # dummy attribute so that datetime.__eq__(DatetimeArray) defers
207+ # by returning NotImplemented
208+ timetuple = None
209+
207210 # define my properties & methods for delegation
208211 _bool_ops = ['is_month_start' , 'is_month_end' ,
209212 'is_quarter_start' , 'is_quarter_end' , 'is_year_start' ,
@@ -226,6 +229,9 @@ def _join_i8_wrapper(joinf, **kwargs):
226229 _timezone = cache_readonly (DatetimeArrayMixin ._timezone .fget )
227230 is_normalized = cache_readonly (DatetimeArrayMixin .is_normalized .fget )
228231
232+ # --------------------------------------------------------------------
233+ # Constructors
234+
229235 def __new__ (cls , data = None ,
230236 freq = None , start = None , end = None , periods = None , tz = None ,
231237 normalize = False , closed = None , ambiguous = 'raise' ,
@@ -280,7 +286,7 @@ def __new__(cls, data=None,
280286 data = data .tz_localize (tz , ambiguous = ambiguous )
281287 else :
282288 # the tz's must match
283- if str (tz ) != str ( data .tz ):
289+ if not timezones . tz_compare (tz , data .tz ):
284290 msg = ('data is already tz-aware {0}, unable to '
285291 'set specified tz: {1}' )
286292 raise TypeError (msg .format (data .tz , tz ))
@@ -327,12 +333,6 @@ def __new__(cls, data=None,
327333
328334 return subarr ._deepcopy_if_needed (ref_to_data , copy )
329335
330- def _convert_for_op (self , value ):
331- """ Convert value to be insertable to ndarray """
332- if self ._has_same_tz (value ):
333- return _to_m8 (value )
334- raise ValueError ('Passed item and index have different timezone' )
335-
336336 @classmethod
337337 def _simple_new (cls , values , name = None , freq = None , tz = None ,
338338 dtype = None , ** kwargs ):
@@ -349,6 +349,8 @@ def _simple_new(cls, values, name=None, freq=None, tz=None,
349349 result ._reset_identity ()
350350 return result
351351
352+ # --------------------------------------------------------------------
353+
352354 @property
353355 def _values (self ):
354356 # tz-naive -> ndarray
@@ -448,6 +450,12 @@ def __setstate__(self, state):
448450 raise Exception ("invalid pickle state" )
449451 _unpickle_compat = __setstate__
450452
453+ def _convert_for_op (self , value ):
454+ """ Convert value to be insertable to ndarray """
455+ if self ._has_same_tz (value ):
456+ return _to_m8 (value )
457+ raise ValueError ('Passed item and index have different timezone' )
458+
451459 def _maybe_update_attributes (self , attrs ):
452460 """ Update Index attributes (e.g. freq) depending on op """
453461 freq = attrs .get ('freq' , None )
@@ -1104,6 +1112,9 @@ def slice_indexer(self, start=None, end=None, step=None, kind=None):
11041112 else :
11051113 raise
11061114
1115+ # --------------------------------------------------------------------
1116+ # Wrapping DatetimeArray
1117+
11071118 year = wrap_field_accessor (DatetimeArrayMixin .year )
11081119 month = wrap_field_accessor (DatetimeArrayMixin .month )
11091120 day = wrap_field_accessor (DatetimeArrayMixin .day )
@@ -1142,6 +1153,8 @@ def slice_indexer(self, start=None, end=None, step=None, kind=None):
11421153 month_name = wrap_array_method (DatetimeArrayMixin .month_name , True )
11431154 day_name = wrap_array_method (DatetimeArrayMixin .day_name , True )
11441155
1156+ # --------------------------------------------------------------------
1157+
11451158 @Substitution (klass = 'DatetimeIndex' )
11461159 @Appender (_shared_docs ['searchsorted' ])
11471160 def searchsorted (self , value , side = 'left' , sorter = None ):
0 commit comments