From 1168f8fadde2ab42c40ada56359600dfb392a469 Mon Sep 17 00:00:00 2001 From: tp Date: Mon, 15 Apr 2019 13:43:54 +0100 Subject: [PATCH] CLN: remove compat.itervalues --- pandas/compat/__init__.py | 5 ----- pandas/core/base.py | 8 +++----- pandas/core/dtypes/concat.py | 4 +--- pandas/core/groupby/generic.py | 3 +-- pandas/core/nanops.py | 3 +-- pandas/core/panel.py | 3 +-- pandas/io/json/normalize.py | 5 ++--- pandas/io/parsers.py | 2 +- pandas/tests/io/test_packers.py | 6 +++--- pandas/tests/test_compat.py | 5 +---- 10 files changed, 14 insertions(+), 30 deletions(-) diff --git a/pandas/compat/__init__.py b/pandas/compat/__init__.py index e92c053a282bc..7e201920f4331 100644 --- a/pandas/compat/__init__.py +++ b/pandas/compat/__init__.py @@ -6,8 +6,6 @@ Key items to import for compatible code: * lists: lrange(), lmap(), lzip(), lfilter() -* iterable method compatibility: itervalues - * Uses the original method if available, otherwise uses items, keys, values. * add_metaclass(metaclass) - class decorator that recreates class with with the given metaclass instead (and avoids intermediary class creation) @@ -41,9 +39,6 @@ def lfilter(*args, **kwargs): return list(filter(*args, **kwargs)) -def itervalues(obj, **kw): - return iter(obj.values(**kw)) - # ---------------------------------------------------------------------------- # functions largely based / taken from the six module diff --git a/pandas/core/base.py b/pandas/core/base.py index e86d751182b2a..1d3eb880f32e3 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -9,7 +9,6 @@ import numpy as np import pandas._libs.lib as lib -import pandas.compat as compat from pandas.compat import PYPY from pandas.compat.numpy import function as nv from pandas.errors import AbstractMethodError @@ -362,7 +361,7 @@ def nested_renaming_depr(level=4): # if we have a dict of any non-scalars # eg. {'A' : ['mean']}, normalize all to # be list-likes - if any(is_aggregator(x) for x in compat.itervalues(arg)): + if any(is_aggregator(x) for x in arg.values()): new_arg = OrderedDict() for k, v in arg.items(): if not isinstance(v, (tuple, list, dict)): @@ -493,13 +492,12 @@ def _agg(arg, func): def is_any_series(): # return a boolean if we have *any* nested series - return any(isinstance(r, ABCSeries) - for r in compat.itervalues(result)) + return any(isinstance(r, ABCSeries) for r in result.values()) def is_any_frame(): # return a boolean if we have *any* nested series return any(isinstance(r, ABCDataFrame) - for r in compat.itervalues(result)) + for r in result.values()) if isinstance(result, list): return concat(result, keys=keys, axis=1, sort=True), True diff --git a/pandas/core/dtypes/concat.py b/pandas/core/dtypes/concat.py index 7e765a38cedcd..f8488b7a153e3 100644 --- a/pandas/core/dtypes/concat.py +++ b/pandas/core/dtypes/concat.py @@ -14,8 +14,6 @@ ABCDatetimeArray, ABCDatetimeIndex, ABCIndexClass, ABCPeriodIndex, ABCRangeIndex, ABCSparseDataFrame, ABCTimedeltaIndex) -from pandas import compat - def get_dtype_kinds(l): """ @@ -69,7 +67,7 @@ def _get_series_result_type(result, objs=None): if isinstance(result, dict): # concat Series with axis 1 if all(isinstance(c, (SparseSeries, SparseDataFrame)) - for c in compat.itervalues(result)): + for c in result.values()): return SparseDataFrame else: return DataFrame diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index b6fc31bb6f015..0f0abeb0a318f 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -15,7 +15,6 @@ import numpy as np from pandas._libs import Timestamp, lib -import pandas.compat as compat from pandas.compat import lzip from pandas.errors import AbstractMethodError from pandas.util._decorators import Appender, Substitution @@ -850,7 +849,7 @@ def _aggregate_multiple_funcs(self, arg, _level): obj._selection = name results[name] = obj.aggregate(func) - if any(isinstance(x, DataFrame) for x in compat.itervalues(results)): + if any(isinstance(x, DataFrame) for x in results.values()): # let higher level handle if _level: return results diff --git a/pandas/core/nanops.py b/pandas/core/nanops.py index 6c08cacb551df..4ba6e04495fbb 100644 --- a/pandas/core/nanops.py +++ b/pandas/core/nanops.py @@ -9,7 +9,6 @@ from pandas._config import get_option from pandas._libs import iNaT, lib, tslibs -import pandas.compat as compat from pandas.core.dtypes.cast import _int64_max, maybe_upcast_putmask from pandas.core.dtypes.common import ( @@ -68,7 +67,7 @@ def check(self, obj): def __call__(self, f): @functools.wraps(f) def _f(*args, **kwargs): - obj_iter = itertools.chain(args, compat.itervalues(kwargs)) + obj_iter = itertools.chain(args, kwargs.values()) if any(self.check(obj) for obj in obj_iter): msg = 'reduction operation {name!r} not allowed for this dtype' raise TypeError(msg.format(name=f.__name__.replace('nan', ''))) diff --git a/pandas/core/panel.py b/pandas/core/panel.py index a7edddc1da8db..645a3dc31f637 100644 --- a/pandas/core/panel.py +++ b/pandas/core/panel.py @@ -6,7 +6,6 @@ import numpy as np -import pandas.compat as compat from pandas.compat.numpy import function as nv from pandas.util._decorators import Appender, Substitution, deprecate_kwarg from pandas.util._validators import validate_axis_style_args @@ -1180,7 +1179,7 @@ def _construct_return_type(self, result, axes=None): # need to assume they are the same if ndim is None: if isinstance(result, dict): - ndim = getattr(list(compat.itervalues(result))[0], 'ndim', 0) + ndim = getattr(list(result.values())[0], 'ndim', 0) # have a dict, so top-level is +1 dim if ndim != 0: diff --git a/pandas/io/json/normalize.py b/pandas/io/json/normalize.py index 26bf6a8cf410d..fa4e35b08bf6e 100644 --- a/pandas/io/json/normalize.py +++ b/pandas/io/json/normalize.py @@ -8,7 +8,7 @@ from pandas._libs.writers import convert_json_to_lines -from pandas import DataFrame, compat +from pandas import DataFrame def _convert_to_line_delimits(s): @@ -198,8 +198,7 @@ def _pull_field(js, spec): data = [data] if record_path is None: - if any([isinstance(x, dict) - for x in compat.itervalues(y)] for y in data): + if any([isinstance(x, dict) for x in y.values()] for y in data): # naive normalization, this is idempotent for flat records # and potentially will inflate the data considerably for # deeply nested structures: diff --git a/pandas/io/parsers.py b/pandas/io/parsers.py index 1e5b6529911bb..a21c910979f9d 100755 --- a/pandas/io/parsers.py +++ b/pandas/io/parsers.py @@ -1154,7 +1154,7 @@ def read(self, nrows=None): if index is None: if col_dict: # Any column is actually fine: - new_rows = len(next(compat.itervalues(col_dict))) + new_rows = len(next(iter(col_dict.values()))) index = RangeIndex(self._currow, self._currow + new_rows) else: new_rows = 0 diff --git a/pandas/tests/io/test_packers.py b/pandas/tests/io/test_packers.py index c24adcbf29477..91dbe5c78acf3 100644 --- a/pandas/tests/io/test_packers.py +++ b/pandas/tests/io/test_packers.py @@ -14,7 +14,7 @@ import pandas from pandas import ( Categorical, DataFrame, Index, Interval, MultiIndex, NaT, Period, Series, - Timestamp, bdate_range, compat, date_range, period_range) + Timestamp, bdate_range, date_range, period_range) import pandas.util.testing as tm from pandas.util.testing import ( assert_categorical_equal, assert_frame_equal, assert_index_equal, @@ -818,12 +818,12 @@ def setup_method(self, method): def test_utf(self): # GH10581 for encoding in self.utf_encodings: - for frame in compat.itervalues(self.frame): + for frame in self.frame.values(): result = self.encode_decode(frame, encoding=encoding) assert_frame_equal(result, frame) def test_default_encoding(self): - for frame in compat.itervalues(self.frame): + for frame in self.frame.values(): result = frame.to_msgpack() expected = frame.to_msgpack(encoding='utf8') assert result == expected diff --git a/pandas/tests/test_compat.py b/pandas/tests/test_compat.py index 3777b585ea92e..654de06082363 100644 --- a/pandas/tests/test_compat.py +++ b/pandas/tests/test_compat.py @@ -5,7 +5,7 @@ import builtins import re -from pandas.compat import itervalues, lfilter, lmap, lrange, lzip, re_type +from pandas.compat import lfilter, lmap, lrange, lzip, re_type class TestBuiltinIterators(object): @@ -50,9 +50,6 @@ def test_lzip(self): lengths = 10, self.check_results(results, expecteds, lengths) - def test_dict_iterators(self): - assert next(itervalues({1: 2})) == 2 - def test_re_type(): assert isinstance(re.compile(''), re_type)