@@ -167,8 +167,6 @@ def _simple_new(cls, start, stop=None, step=None, name=None,
167
167
for k , v in kwargs .items ():
168
168
setattr (result , k , v )
169
169
170
- result ._range = range (result ._start , result ._stop , result ._step )
171
-
172
170
result ._reset_identity ()
173
171
return result
174
172
@@ -238,20 +236,20 @@ def _format_with_header(self, header, na_rep='NaN', **kwargs):
238
236
@cache_readonly
239
237
def start (self ):
240
238
"""
241
- The value of the `start` parameter (or ``0`` if this was not supplied)
239
+ The value of the `start` parameter (``0`` if this was not supplied)
242
240
"""
243
241
# GH 25710
244
242
return self ._range .start
245
243
246
244
@property
247
245
def _start (self ):
248
246
"""
249
- The value of the `start` parameter (or ``0`` if this was not supplied)
247
+ The value of the `start` parameter (``0`` if this was not supplied)
250
248
251
249
.. deprecated:: 0.25.0
252
- Use ._range. start or .start instead.
250
+ Use `` start`` instead.
253
251
"""
254
- return self ._range . start
252
+ return self .start
255
253
256
254
@cache_readonly
257
255
def stop (self ):
@@ -266,38 +264,38 @@ def _stop(self):
266
264
The value of the `stop` parameter
267
265
268
266
.. deprecated:: 0.25.0
269
- Use ._range. stop or .stop instead.
267
+ Use `` stop`` instead.
270
268
"""
271
269
# GH 25710
272
- return self ._range . stop
270
+ return self .stop
273
271
274
272
@cache_readonly
275
273
def step (self ):
276
274
"""
277
- The value of the `step` parameter (or ``1`` if this was not supplied)
275
+ The value of the `step` parameter (``1`` if this was not supplied)
278
276
"""
279
277
# GH 25710
280
278
return self ._range .step
281
279
282
280
@property
283
281
def _step (self ):
284
282
"""
285
- The value of the `step` parameter (or ``1`` if this was not supplied)
283
+ The value of the `step` parameter (``1`` if this was not supplied)
286
284
287
285
.. deprecated:: 0.25.0
288
- Use ._range. step or .step instead.
286
+ Use `` step`` instead.
289
287
"""
290
288
# GH 25710
291
- return self ._range . step
289
+ return self .step
292
290
293
291
@cache_readonly
294
292
def nbytes (self ):
295
293
"""
296
294
Return the number of bytes in the underlying data.
297
295
"""
298
296
rng = self ._range
299
- return getsizeof (rng ) + sum (getsizeof (rng , v )
300
- for v in ['start' , 'stop' , 'step' ])
297
+ return getsizeof (rng ) + sum (getsizeof (getattr ( rng , attr_name ) )
298
+ for attr_name in ['start' , 'stop' , 'step' ])
301
299
302
300
def memory_usage (self , deep = False ):
303
301
"""
@@ -361,7 +359,7 @@ def tolist(self):
361
359
def _shallow_copy (self , values = None , ** kwargs ):
362
360
if values is None :
363
361
name = kwargs .get ("name" , self .name )
364
- return RangeIndex ._simple_new (
362
+ return self ._simple_new (
365
363
name = name , ** dict (self ._get_data_as_items ()))
366
364
else :
367
365
kwargs .setdefault ('name' , self .name )
@@ -372,7 +370,7 @@ def copy(self, name=None, deep=False, dtype=None, **kwargs):
372
370
self ._validate_dtype (dtype )
373
371
if name is None :
374
372
name = self .name
375
- return RangeIndex .from_range (self ._range , name = name )
373
+ return self .from_range (self ._range , name = name )
376
374
377
375
def _minmax (self , meth ):
378
376
no_steps = len (self ) - 1
@@ -454,7 +452,7 @@ def intersection(self, other, sort=False):
454
452
return super ().intersection (other , sort = sort )
455
453
456
454
if not len (self ) or not len (other ):
457
- return RangeIndex ._simple_new (None )
455
+ return self ._simple_new (None )
458
456
459
457
first = self ._range [::- 1 ] if self .step < 0 else self ._range
460
458
second = other ._range [::- 1 ] if other .step < 0 else other ._range
@@ -464,7 +462,7 @@ def intersection(self, other, sort=False):
464
462
int_low = max (first .start , second .start )
465
463
int_high = min (first .stop , second .stop )
466
464
if int_high <= int_low :
467
- return RangeIndex ._simple_new (None )
465
+ return self ._simple_new (None )
468
466
469
467
# Method hint: linear Diophantine equation
470
468
# solve intersection problem
@@ -474,20 +472,18 @@ def intersection(self, other, sort=False):
474
472
475
473
# check whether element sets intersect
476
474
if (first .start - second .start ) % gcd :
477
- return RangeIndex ._simple_new (None )
475
+ return self ._simple_new (None )
478
476
479
477
# calculate parameters for the RangeIndex describing the
480
478
# intersection disregarding the lower bounds
481
479
tmp_start = first .start + (second .start - first .start ) * \
482
480
first .step // gcd * s
483
481
new_step = first .step * second .step // gcd
484
- new_index = RangeIndex ._simple_new (tmp_start , int_high , new_step )
482
+ new_index = self ._simple_new (tmp_start , int_high , new_step )
485
483
486
484
# adjust index to limiting interval
487
485
new_start = new_index ._min_fitting_element (int_low )
488
- new_index = RangeIndex ._simple_new (new_start ,
489
- new_index .stop ,
490
- new_index .step )
486
+ new_index = self ._simple_new (new_start , new_index .stop , new_index .step )
491
487
492
488
if (self .step < 0 and other .step < 0 ) is not (new_index .step < 0 ):
493
489
new_index = new_index [::- 1 ]
@@ -566,21 +562,23 @@ def _union(self, other, sort):
566
562
if ((start_s - start_o ) % step_s == 0 and
567
563
(start_s - end_o ) <= step_s and
568
564
(start_o - end_s ) <= step_s ):
569
- return RangeIndex (start_r , end_r + step_s , step_s )
565
+ return self . __class__ (start_r , end_r + step_s , step_s )
570
566
if ((step_s % 2 == 0 ) and
571
567
(abs (start_s - start_o ) <= step_s / 2 ) and
572
568
(abs (end_s - end_o ) <= step_s / 2 )):
573
- return RangeIndex (start_r , end_r + step_s / 2 , step_s / 2 )
569
+ return self .__class__ (start_r ,
570
+ end_r + step_s / 2 ,
571
+ step_s / 2 )
574
572
elif step_o % step_s == 0 :
575
573
if ((start_o - start_s ) % step_s == 0 and
576
574
(start_o + step_s >= start_s ) and
577
575
(end_o - step_s <= end_s )):
578
- return RangeIndex (start_r , end_r + step_s , step_s )
576
+ return self . __class__ (start_r , end_r + step_s , step_s )
579
577
elif step_s % step_o == 0 :
580
578
if ((start_s - start_o ) % step_o == 0 and
581
579
(start_s + step_o >= start_o ) and
582
580
(end_s - step_o <= end_o )):
583
- return RangeIndex (start_r , end_r + step_o , step_o )
581
+ return self . __class__ (start_r , end_r + step_o , step_o )
584
582
return self ._int64index ._union (other , sort = sort )
585
583
586
584
@Appender (_index_shared_docs ['join' ])
@@ -629,7 +627,7 @@ def __getitem__(self, key):
629
627
size = len (self )))
630
628
if isinstance (key , slice ):
631
629
new_range = self ._range [key ]
632
- return RangeIndex .from_range (new_range , name = self .name )
630
+ return self .from_range (new_range , name = self .name )
633
631
634
632
# fall back to Int64Index
635
633
return super_getitem (key )
@@ -645,12 +643,10 @@ def __floordiv__(self, other):
645
643
start = self .start // other
646
644
step = self .step // other
647
645
stop = start + len (self ) * step
648
- return RangeIndex ._simple_new (
649
- start , stop , step , name = self .name )
646
+ return self ._simple_new (start , stop , step , name = self .name )
650
647
if len (self ) == 1 :
651
648
start = self .start // other
652
- return RangeIndex ._simple_new (
653
- start , start + 1 , 1 , name = self .name )
649
+ return self ._simple_new (start , start + 1 , 1 , name = self .name )
654
650
return self ._int64index // other
655
651
656
652
@classmethod
@@ -706,7 +702,7 @@ def _evaluate_numeric_binop(self, other):
706
702
rstart = op (left .start , right )
707
703
rstop = op (left .stop , right )
708
704
709
- result = RangeIndex (rstart , rstop , rstep , ** attrs )
705
+ result = self . __class__ (rstart , rstop , rstep , ** attrs )
710
706
711
707
# for compat with numpy / Int64Index
712
708
# even if we can represent as a RangeIndex, return
0 commit comments