@@ -201,16 +201,6 @@ def __unicode__(self):
201201 return "%s(%s, dtype='%s')" % (type (self ).__name__ , prepr , self .dtype )
202202
203203
204- # facilitate the properties on the wrapped ops
205- def _field_accessor (name , docstring = None ):
206- op_accessor = '_{0}' .format (name )
207- def f (self ):
208- return self ._ops_compat (name ,op_accessor )
209-
210- f .__name__ = name
211- f .__doc__ = docstring
212- return property (f )
213-
214204class IndexOpsMixin (object ):
215205 """ common ops mixin to support a unified inteface / docs for Series / Index """
216206
@@ -219,24 +209,9 @@ def _is_allowed_index_op(self, name):
219209 raise TypeError ("cannot perform an {name} operations on this type {typ}" .format (
220210 name = name ,typ = type (self ._get_access_object ())))
221211
222- def _is_allowed_datetime_index_op (self , name ):
223- if not self ._allow_datetime_index_ops :
224- raise TypeError ("cannot perform an {name} operations on this type {typ}" .format (
225- name = name ,typ = type (self ._get_access_object ())))
226-
227- def _is_allowed_period_index_op (self , name ):
228- if not self ._allow_period_index_ops :
229- raise TypeError ("cannot perform an {name} operations on this type {typ}" .format (
230- name = name ,typ = type (self ._get_access_object ())))
231-
232212 def _ops_compat (self , name , op_accessor ):
233- from pandas .tseries .index import DatetimeIndex
234- from pandas .tseries .period import PeriodIndex
213+
235214 obj = self ._get_access_object ()
236- if isinstance (obj , DatetimeIndex ):
237- self ._is_allowed_datetime_index_op (name )
238- elif isinstance (obj , PeriodIndex ):
239- self ._is_allowed_period_index_op (name )
240215 try :
241216 return self ._wrap_access_object (getattr (obj ,op_accessor ))
242217 except AttributeError :
@@ -336,6 +311,44 @@ def factorize(self, sort=False, na_sentinel=-1):
336311 from pandas .core .algorithms import factorize
337312 return factorize (self , sort = sort , na_sentinel = na_sentinel )
338313
314+ # facilitate the properties on the wrapped ops
315+ def _field_accessor (name , docstring = None ):
316+ op_accessor = '_{0}' .format (name )
317+ def f (self ):
318+ return self ._ops_compat (name ,op_accessor )
319+
320+ f .__name__ = name
321+ f .__doc__ = docstring
322+ return property (f )
323+
324+ class DatetimeIndexOpsMixin (object ):
325+ """ common ops mixin to support a unified inteface datetimelike Index """
326+
327+ def _is_allowed_datetime_index_op (self , name ):
328+ if not self ._allow_datetime_index_ops :
329+ raise TypeError ("cannot perform an {name} operations on this type {typ}" .format (
330+ name = name ,typ = type (self ._get_access_object ())))
331+
332+ def _is_allowed_period_index_op (self , name ):
333+ if not self ._allow_period_index_ops :
334+ raise TypeError ("cannot perform an {name} operations on this type {typ}" .format (
335+ name = name ,typ = type (self ._get_access_object ())))
336+
337+ def _ops_compat (self , name , op_accessor ):
338+
339+ from pandas .tseries .index import DatetimeIndex
340+ from pandas .tseries .period import PeriodIndex
341+ obj = self ._get_access_object ()
342+ if isinstance (obj , DatetimeIndex ):
343+ self ._is_allowed_datetime_index_op (name )
344+ elif isinstance (obj , PeriodIndex ):
345+ self ._is_allowed_period_index_op (name )
346+ try :
347+ return self ._wrap_access_object (getattr (obj ,op_accessor ))
348+ except AttributeError :
349+ raise TypeError ("cannot perform an {name} operations on this type {typ}" .format (
350+ name = name ,typ = type (obj )))
351+
339352 date = _field_accessor ('date' ,'Returns numpy array of datetime.date. The date part of the Timestamps' )
340353 time = _field_accessor ('time' ,'Returns numpy array of datetime.time. The time part of the Timestamps' )
341354 year = _field_accessor ('year' , "The year of the datetime" )
0 commit comments