Skip to content

Commit 58adb2e

Browse files
committed
Fixes
1 parent 0cfd41c commit 58adb2e

File tree

9 files changed

+61
-72
lines changed

9 files changed

+61
-72
lines changed

pandas/compat/__init__.py

+22
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ def signature(f):
100100
'varargs', 'keywords'])
101101
return argspec(args, defaults, varargs, keywords)
102102

103+
def _get_range_parameters(data):
104+
"""Gets the start, stop, and step parameters from a range object"""
105+
return data.start, data.stop, data.step
106+
103107
# have to explicitly put builtins into the namespace
104108
range = range
105109
map = map
@@ -146,6 +150,24 @@ def bytes_to_str(b, encoding='ascii'):
146150
def signature(f):
147151
return inspect.getargspec(f)
148152

153+
def _get_range_parameters(data):
154+
"""Gets the start, stop, and step parameters from a range object"""
155+
# seems we only have indexing ops to infer
156+
# rather than direct accessors
157+
if len(data) > 1:
158+
step = data[1] - data[0]
159+
stop = data[-1] + step
160+
start = data[0]
161+
elif len(data):
162+
start = data[0]
163+
stop = data[0] + 1
164+
step = 1
165+
else:
166+
start = stop = 0
167+
step = 1
168+
169+
return start, stop, step
170+
149171
# import iterator versions of these functions
150172
range = xrange
151173
intern = intern

pandas/core/common.py

-24
Original file line numberDiff line numberDiff line change
@@ -552,30 +552,6 @@ class Sentinel(object):
552552
return Sentinel()
553553

554554

555-
def _get_range_parameters(data):
556-
"""Gets the start, stop, and step parameters from a range object"""
557-
if compat.PY3:
558-
step = data.step
559-
stop = data.stop
560-
start = data.start
561-
else:
562-
# seems we only have indexing ops to infer
563-
# rather than direct accessors
564-
if len(data) > 1:
565-
step = data[1] - data[0]
566-
stop = data[-1] + step
567-
start = data[0]
568-
elif len(data):
569-
start = data[0]
570-
stop = data[0] + 1
571-
step = 1
572-
else:
573-
start = stop = 0
574-
step = 1
575-
576-
return start, stop, step
577-
578-
579555
# ----------------------------------------------------------------------
580556
# Detect our environment
581557

pandas/core/indexes/range.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
is_int64_dtype)
1111

1212
from pandas import compat
13-
from pandas.compat import lrange, range
13+
from pandas.compat import lrange, range, _get_range_parameters
1414
from pandas.compat.numpy import function as nv
15-
from pandas.core.common import _all_none, _get_range_parameters
15+
from pandas.core.common import _all_none
1616
from pandas.core.indexes.base import Index, _index_shared_docs
1717
from pandas.util._decorators import Appender, cache_readonly
1818
import pandas.core.dtypes.concat as _concat

pandas/core/series.py

+5-9
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@
4646
_maybe_box_datetimelike,
4747
_dict_compat,
4848
standardize_mapping,
49-
_any_none,
50-
_get_range_parameters)
49+
_any_none)
5150
from pandas.core.index import (Index, MultiIndex, InvalidIndexError,
5251
Float64Index, _ensure_index)
5352
from pandas.core.indexing import check_bool_indexer, maybe_convert_indices
@@ -61,7 +60,8 @@
6160
from pandas.core.indexes.period import PeriodIndex
6261
from pandas import compat
6362
from pandas.io.formats.terminal import get_terminal_size
64-
from pandas.compat import zip, u, OrderedDict, StringIO
63+
from pandas.compat import (
64+
zip, u, OrderedDict, StringIO, range, _get_range_parameters)
6565
from pandas.compat.numpy import function as nv
6666

6767
from pandas.core import accessor
@@ -3181,12 +3181,8 @@ def _try_cast(arr, take_fast_path):
31813181
elif isinstance(data, range):
31823182
# GH 16804
31833183
start, stop, step = _get_range_parameters(data)
3184-
if is_extension_type(dtype):
3185-
arr = np.arange(start, stop, step, dtype='int64')
3186-
subarr = _try_cast(arr, False)
3187-
else:
3188-
subarr = np.arange(start, stop, step, dtype=dtype or 'int64')
3189-
3184+
arr = np.arange(start, stop, step, dtype='int64')
3185+
subarr = _try_cast(arr, False)
31903186
else:
31913187
subarr = _try_cast(data, False)
31923188

pandas/tests/frame/test_constructors.py

+4-8
Original file line numberDiff line numberDiff line change
@@ -1927,15 +1927,11 @@ def test_to_frame_with_falsey_names(self):
19271927
result = DataFrame(Series(name=0)).dtypes
19281928
tm.assert_series_equal(result, expected)
19291929

1930-
def test_constructor_range_dtype(self):
1930+
@pytest.mark.parametrize('dtype', [None, 'uint8', 'category'])
1931+
def test_constructor_range_dtype(self, dtype):
19311932
# GH 16804
1932-
expected = DataFrame({'A': [0, 1, 2, 3, 4]}, dtype='int64')
1933-
result = DataFrame({'A': range(5)})
1934-
tm.assert_frame_equal(result, expected)
1935-
1936-
# override default dtype
1937-
expected = DataFrame({'A': [0, 1, 2, 3, 4]}, dtype='uint8')
1938-
result = DataFrame({'A': range(5)}, dtype='uint8')
1933+
expected = DataFrame({'A': [0, 1, 2, 3, 4]}, dtype=dtype or 'int64')
1934+
result = DataFrame({'A': range(5)}, dtype=dtype)
19391935
tm.assert_frame_equal(result, expected)
19401936

19411937

pandas/tests/series/test_constructors.py

+4-8
Original file line numberDiff line numberDiff line change
@@ -847,13 +847,9 @@ def test_constructor_generic_timestamp_deprecated(self):
847847
with tm.assert_raises_regex(TypeError, msg):
848848
Series([], dtype='M8[ps]')
849849

850-
def test_constructor_range_dtype(self):
850+
@pytest.mark.parametrize('dtype', [None, 'uint8', 'category'])
851+
def test_constructor_range_dtype(self, dtype):
851852
# GH 16804
852-
expected = Series([0, 1, 2, 3, 4], dtype='int64')
853-
result = Series(range(5))
854-
tm.assert_series_equal(result, expected)
855-
856-
# override default dtype
857-
expected = Series([0, 1, 2, 3, 4], dtype='uint8')
858-
result = Series(range(5), dtype='uint8')
853+
expected = Series([0, 1, 2, 3, 4], dtype=dtype or 'int64')
854+
result = Series(range(5), dtype=dtype)
859855
tm.assert_series_equal(result, expected)

pandas/tests/test_common.py

+1-18
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import numpy as np
88

99
from pandas import Series, Timestamp
10-
from pandas.compat import range, lmap, PY2
10+
from pandas.compat import range, lmap
1111
import pandas.core.common as com
1212
import pandas.util.testing as tm
1313

@@ -221,20 +221,3 @@ def test_standardize_mapping():
221221

222222
dd = collections.defaultdict(list)
223223
assert isinstance(com.standardize_mapping(dd), partial)
224-
225-
226-
@pytest.mark.parametrize(
227-
'start,stop,step', [(0, 10, 2), (11, -2, -1), (0, -5, 1), (2, 4, 8)])
228-
def test_get_range_parameters(start, stop, step):
229-
rng = range(start, stop, step)
230-
if PY2 and len(rng) == 0:
231-
start_expected, stop_expected, step_expected = 0, 0, 1
232-
elif PY2 and len(rng) == 1:
233-
start_expected, stop_expected, step_expected = start, start + 1, 1
234-
else:
235-
start_expected, stop_expected, step_expected = start, stop, step
236-
237-
start_result, stop_result, step_result = com._get_range_parameters(rng)
238-
assert start_result == start_expected
239-
assert stop_result == stop_expected
240-
assert step_result == step_expected

pandas/tests/test_compat.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
Testing that functions from compat work as expected
44
"""
55

6+
import pytest
67
from pandas.compat import (range, zip, map, filter, lrange, lzip, lmap,
78
lfilter, builtins, iterkeys, itervalues, iteritems,
8-
next)
9+
next, _get_range_parameters, PY2)
910

1011

1112
class TestBuiltinIterators(object):
@@ -69,3 +70,22 @@ def test_dict_iterators(self):
6970
assert next(itervalues({1: 2})) == 2
7071
assert next(iterkeys({1: 2})) == 1
7172
assert next(iteritems({1: 2})) == (1, 2)
73+
74+
75+
class TestCompatFunctions(object):
76+
77+
@pytest.mark.parametrize(
78+
'start,stop,step', [(0, 10, 2), (11, -2, -1), (0, -5, 1), (2, 4, 8)])
79+
def test_get_range_parameters(self, start, stop, step):
80+
rng = range(start, stop, step)
81+
if PY2 and len(rng) == 0:
82+
start_expected, stop_expected, step_expected = 0, 0, 1
83+
elif PY2 and len(rng) == 1:
84+
start_expected, stop_expected, step_expected = start, start + 1, 1
85+
else:
86+
start_expected, stop_expected, step_expected = start, stop, step
87+
88+
start_result, stop_result, step_result = _get_range_parameters(rng)
89+
assert start_result == start_expected
90+
assert stop_result == stop_expected
91+
assert step_result == step_expected

pandas/tests/test_resample.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -3030,10 +3030,10 @@ def test_nearest(self):
30303030
# GH 17496
30313031
# Resample nearest
30323032
index = pd.date_range('1/1/2000', periods=3, freq='T')
3033-
result = pd.Series(np.arange(3), index=index).resample('20s').nearest()
3033+
result = pd.Series(range(3), index=index).resample('20s').nearest()
30343034

30353035
expected = pd.Series(
3036-
np.array([0, 0, 1, 1, 1, 2, 2]),
3036+
[0, 0, 1, 1, 1, 2, 2],
30373037
index=pd.DatetimeIndex(
30383038
['2000-01-01 00:00:00', '2000-01-01 00:00:20',
30393039
'2000-01-01 00:00:40', '2000-01-01 00:01:00',

0 commit comments

Comments
 (0)