17
17
18
18
import pandas .core .common as com
19
19
20
- from pandas .tseries .offsets import Tick , DateOffset
20
+ from pandas .tseries .offsets import Tick
21
21
from pandas .tseries .frequencies import to_offset
22
22
23
23
from . import datetimelike as dtl
@@ -54,10 +54,11 @@ def f(self):
54
54
return property (f )
55
55
56
56
57
- def _td_array_cmp (opname , cls ):
57
+ def _td_array_cmp (cls , op ):
58
58
"""
59
59
Wrap comparison operations to convert timedelta-like to timedelta64
60
60
"""
61
+ opname = '__{name}__' .format (name = op .__name__ )
61
62
nat_result = True if opname == '__ne__' else False
62
63
63
64
def wrapper (self , other ):
@@ -126,25 +127,23 @@ def _simple_new(cls, values, freq=None, **kwargs):
126
127
127
128
def __new__ (cls , values , freq = None , start = None , end = None , periods = None ,
128
129
closed = None ):
129
- if (freq is not None and not isinstance (freq , DateOffset ) and
130
- freq != 'infer' ):
131
- freq = to_offset (freq )
132
130
133
- periods = dtl .validate_periods ( periods )
131
+ freq , freq_infer = dtl .maybe_infer_freq ( freq )
134
132
135
133
if values is None :
134
+ # TODO: Remove this block and associated kwargs; GH#20535
136
135
if freq is None and com ._any_none (periods , start , end ):
137
136
raise ValueError ('Must provide freq argument if no data is '
138
137
'supplied' )
139
- else :
140
- return cls ._generate_range (start , end , periods , freq ,
141
- closed = closed )
138
+ periods = dtl . validate_periods ( periods )
139
+ return cls ._generate_range (start , end , periods , freq ,
140
+ closed = closed )
142
141
143
142
result = cls ._simple_new (values , freq = freq )
144
- if freq == 'infer' :
143
+ if freq_infer :
145
144
inferred = result .inferred_freq
146
145
if inferred :
147
- result ._freq = to_offset (inferred )
146
+ result .freq = to_offset (inferred )
148
147
149
148
return result
150
149
@@ -161,23 +160,12 @@ def _generate_range(cls, start, end, periods, freq, closed=None, **kwargs):
161
160
if end is not None :
162
161
end = Timedelta (end )
163
162
164
- left_closed = False
165
- right_closed = False
166
-
167
163
if start is None and end is None :
168
164
if closed is not None :
169
165
raise ValueError ("Closed has to be None if not both of start"
170
166
"and end are defined" )
171
167
172
- if closed is None :
173
- left_closed = True
174
- right_closed = True
175
- elif closed == "left" :
176
- left_closed = True
177
- elif closed == "right" :
178
- right_closed = True
179
- else :
180
- raise ValueError ("Closed has to be either 'left', 'right' or None" )
168
+ left_closed , right_closed = dtl .validate_endpoints (closed )
181
169
182
170
if freq is not None :
183
171
index = _generate_regular_range (start , end , periods , freq )
@@ -197,6 +185,8 @@ def _generate_range(cls, start, end, periods, freq, closed=None, **kwargs):
197
185
# ----------------------------------------------------------------
198
186
# Arithmetic Methods
199
187
188
+ _create_comparison_method = classmethod (_td_array_cmp )
189
+
200
190
def _add_offset (self , other ):
201
191
assert not isinstance (other , Tick )
202
192
raise TypeError ("cannot add the type {typ} to a {cls}"
@@ -266,19 +256,6 @@ def _evaluate_with_timedelta_like(self, other, op):
266
256
267
257
return NotImplemented
268
258
269
- # ----------------------------------------------------------------
270
- # Comparison Methods
271
-
272
- @classmethod
273
- def _add_comparison_methods (cls ):
274
- """add in comparison methods"""
275
- cls .__eq__ = _td_array_cmp ('__eq__' , cls )
276
- cls .__ne__ = _td_array_cmp ('__ne__' , cls )
277
- cls .__lt__ = _td_array_cmp ('__lt__' , cls )
278
- cls .__gt__ = _td_array_cmp ('__gt__' , cls )
279
- cls .__le__ = _td_array_cmp ('__le__' , cls )
280
- cls .__ge__ = _td_array_cmp ('__ge__' , cls )
281
-
282
259
# ----------------------------------------------------------------
283
260
# Conversion Methods - Vectorized analogues of Timedelta methods
284
261
@@ -392,7 +369,7 @@ def f(x):
392
369
return result
393
370
394
371
395
- TimedeltaArrayMixin ._add_comparison_methods ()
372
+ TimedeltaArrayMixin ._add_comparison_ops ()
396
373
397
374
398
375
# ---------------------------------------------------------------------
0 commit comments