@@ -167,8 +167,6 @@ def _simple_new(cls, start, stop=None, step=None, name=None,
167167 for k , v in kwargs .items ():
168168 setattr (result , k , v )
169169
170- result ._range = range (result ._start , result ._stop , result ._step )
171-
172170 result ._reset_identity ()
173171 return result
174172
@@ -238,20 +236,20 @@ def _format_with_header(self, header, na_rep='NaN', **kwargs):
238236 @cache_readonly
239237 def start (self ):
240238 """
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)
242240 """
243241 # GH 25710
244242 return self ._range .start
245243
246244 @property
247245 def _start (self ):
248246 """
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)
250248
251249 .. deprecated:: 0.25.0
252- Use ._range. start or .start instead.
250+ Use `` start`` instead.
253251 """
254- return self ._range . start
252+ return self .start
255253
256254 @cache_readonly
257255 def stop (self ):
@@ -266,38 +264,38 @@ def _stop(self):
266264 The value of the `stop` parameter
267265
268266 .. deprecated:: 0.25.0
269- Use ._range. stop or .stop instead.
267+ Use `` stop`` instead.
270268 """
271269 # GH 25710
272- return self ._range . stop
270+ return self .stop
273271
274272 @cache_readonly
275273 def step (self ):
276274 """
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)
278276 """
279277 # GH 25710
280278 return self ._range .step
281279
282280 @property
283281 def _step (self ):
284282 """
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)
286284
287285 .. deprecated:: 0.25.0
288- Use ._range. step or .step instead.
286+ Use `` step`` instead.
289287 """
290288 # GH 25710
291- return self ._range . step
289+ return self .step
292290
293291 @cache_readonly
294292 def nbytes (self ):
295293 """
296294 Return the number of bytes in the underlying data.
297295 """
298296 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' ])
301299
302300 def memory_usage (self , deep = False ):
303301 """
@@ -361,7 +359,7 @@ def tolist(self):
361359 def _shallow_copy (self , values = None , ** kwargs ):
362360 if values is None :
363361 name = kwargs .get ("name" , self .name )
364- return RangeIndex ._simple_new (
362+ return self ._simple_new (
365363 name = name , ** dict (self ._get_data_as_items ()))
366364 else :
367365 kwargs .setdefault ('name' , self .name )
@@ -372,7 +370,7 @@ def copy(self, name=None, deep=False, dtype=None, **kwargs):
372370 self ._validate_dtype (dtype )
373371 if name is None :
374372 name = self .name
375- return RangeIndex .from_range (self ._range , name = name )
373+ return self .from_range (self ._range , name = name )
376374
377375 def _minmax (self , meth ):
378376 no_steps = len (self ) - 1
@@ -454,7 +452,7 @@ def intersection(self, other, sort=False):
454452 return super ().intersection (other , sort = sort )
455453
456454 if not len (self ) or not len (other ):
457- return RangeIndex ._simple_new (None )
455+ return self ._simple_new (None )
458456
459457 first = self ._range [::- 1 ] if self .step < 0 else self ._range
460458 second = other ._range [::- 1 ] if other .step < 0 else other ._range
@@ -464,7 +462,7 @@ def intersection(self, other, sort=False):
464462 int_low = max (first .start , second .start )
465463 int_high = min (first .stop , second .stop )
466464 if int_high <= int_low :
467- return RangeIndex ._simple_new (None )
465+ return self ._simple_new (None )
468466
469467 # Method hint: linear Diophantine equation
470468 # solve intersection problem
@@ -474,20 +472,18 @@ def intersection(self, other, sort=False):
474472
475473 # check whether element sets intersect
476474 if (first .start - second .start ) % gcd :
477- return RangeIndex ._simple_new (None )
475+ return self ._simple_new (None )
478476
479477 # calculate parameters for the RangeIndex describing the
480478 # intersection disregarding the lower bounds
481479 tmp_start = first .start + (second .start - first .start ) * \
482480 first .step // gcd * s
483481 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 )
485483
486484 # adjust index to limiting interval
487485 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 )
491487
492488 if (self .step < 0 and other .step < 0 ) is not (new_index .step < 0 ):
493489 new_index = new_index [::- 1 ]
@@ -566,21 +562,23 @@ def _union(self, other, sort):
566562 if ((start_s - start_o ) % step_s == 0 and
567563 (start_s - end_o ) <= step_s and
568564 (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 )
570566 if ((step_s % 2 == 0 ) and
571567 (abs (start_s - start_o ) <= step_s / 2 ) and
572568 (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 )
574572 elif step_o % step_s == 0 :
575573 if ((start_o - start_s ) % step_s == 0 and
576574 (start_o + step_s >= start_s ) and
577575 (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 )
579577 elif step_s % step_o == 0 :
580578 if ((start_s - start_o ) % step_o == 0 and
581579 (start_s + step_o >= start_o ) and
582580 (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 )
584582 return self ._int64index ._union (other , sort = sort )
585583
586584 @Appender (_index_shared_docs ['join' ])
@@ -629,7 +627,7 @@ def __getitem__(self, key):
629627 size = len (self )))
630628 if isinstance (key , slice ):
631629 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 )
633631
634632 # fall back to Int64Index
635633 return super_getitem (key )
@@ -645,12 +643,10 @@ def __floordiv__(self, other):
645643 start = self .start // other
646644 step = self .step // other
647645 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 )
650647 if len (self ) == 1 :
651648 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 )
654650 return self ._int64index // other
655651
656652 @classmethod
@@ -706,7 +702,7 @@ def _evaluate_numeric_binop(self, other):
706702 rstart = op (left .start , right )
707703 rstop = op (left .stop , right )
708704
709- result = RangeIndex (rstart , rstop , rstep , ** attrs )
705+ result = self . __class__ (rstart , rstop , rstep , ** attrs )
710706
711707 # for compat with numpy / Int64Index
712708 # even if we can represent as a RangeIndex, return
0 commit comments