Skip to content

Commit 2bde25b

Browse files
committed
Remove option to use bare range in init
1 parent 0678071 commit 2bde25b

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

pandas/core/indexes/base.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,10 @@ def __new__(cls, data=None, dtype=None, copy=False, name=None,
270270
data = data.to_numpy()
271271

272272
# range
273-
if isinstance(data, (RangeIndex, range)):
273+
if isinstance(data, RangeIndex):
274274
return RangeIndex(start=data, copy=copy, dtype=dtype, name=name)
275+
elif isinstance(data, range):
276+
return RangeIndex.from_range(data, dtype=dtype, name=name)
275277

276278
# categorical
277279
elif is_categorical_dtype(data) or is_categorical_dtype(dtype):

pandas/core/indexes/range.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class RangeIndex(Int64Index):
4040
4141
Parameters
4242
----------
43-
start : int (default: 0), range or RangeIndex instance
43+
start : int (default: 0), or other RangeIndex instance
4444
If int and "stop" is not given, interpreted as "stop" instead.
4545
stop : int (default: 0)
4646
step : int (default: 1)
@@ -84,11 +84,12 @@ def __new__(cls, start=None, stop=None, step=None,
8484
if fastpath:
8585
return cls._simple_new(range(start, stop, step), name=name)
8686

87-
# RangeIndex, range
88-
if isinstance(start, (RangeIndex, range)):
89-
if isinstance(start, RangeIndex):
90-
name = start.name if name is None else name
91-
start = start._range
87+
cls._validate_dtype(dtype)
88+
89+
# RangeIndex
90+
if isinstance(start, RangeIndex):
91+
name = start.name if name is None else name
92+
start = start._range
9293
return cls._simple_new(start, dtype=dtype, name=name)
9394

9495
# validate the arguments
@@ -122,14 +123,14 @@ def from_range(cls, data, name=None, dtype=None):
122123
raise TypeError(
123124
'{0}(...) must be called with object coercible to a '
124125
'range, {1} was passed'.format(cls.__name__, repr(data)))
126+
127+
cls._validate_dtype(dtype)
125128
return cls._simple_new(data, dtype=dtype, name=name)
126129

127130
@classmethod
128131
def _simple_new(cls, values, name=None, dtype=None, **kwargs):
129132
result = object.__new__(cls)
130133

131-
cls._validate_dtype(dtype)
132-
133134
# handle passed None, non-integers
134135
if values is None:
135136
# empty

pandas/tests/indexes/test_range.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,9 @@ def test_constructor_same(self):
9494

9595
def test_constructor_range(self):
9696

97-
result = RangeIndex(range(1, 5, 2))
98-
expected = RangeIndex(1, 5, 2)
99-
tm.assert_index_equal(result, expected, exact=True)
97+
msg = "Value needs to be a scalar value, was type <class 'range'>"
98+
with pytest.raises(TypeError, match=msg):
99+
result = RangeIndex(range(1, 5, 2))
100100

101101
result = RangeIndex.from_range(range(1, 5, 2))
102102
expected = RangeIndex(1, 5, 2)

0 commit comments

Comments
 (0)