Skip to content

CLN: Remove miscellaneous rarely used items from pandas.compat #25873

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Mar 27, 2019
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions pandas/_libs/parsers.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -655,8 +655,7 @@ cdef class TextReader:
raise ValueError('Multiple files found in compressed '
'zip file %s', str(zip_names))
elif self.compression == 'xz':
lzma = compat.import_lzma()

import lzma
if isinstance(source, basestring):
source = lzma.LZMAFile(source, 'rb')
else:
Expand Down
64 changes: 0 additions & 64 deletions pandas/compat/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
Cross-compatible functions for Python 2 and 3.

Key items to import for 2/3 compatible code:
* iterators: reduce()
* lists: lrange(), lmap(), lzip(), lfilter()
* iterable method compatibility: iteritems, iterkeys, itervalues
* Uses the original method if available, otherwise uses items, keys, values.
Expand Down Expand Up @@ -100,15 +99,6 @@ def signature(f):
'varargs', 'keywords'])
return argspec(args, defaults, varargs, keywords)

def get_range_parameters(data):
"""Gets the start, stop, and step parameters from a range object"""
return data.start, data.stop, data.step

# have to explicitly put builtins into the namespace
intern = sys.intern
reduce = functools.reduce
unichr = chr

# list-producing versions of the major Python iterating functions
def lrange(*args, **kwargs):
return list(range(*args, **kwargs))
Expand All @@ -122,8 +112,6 @@ def lmap(*args, **kwargs):
def lfilter(*args, **kwargs):
return list(filter(*args, **kwargs))

from importlib import reload
reload = reload
Hashable = collections.abc.Hashable
Iterable = collections.abc.Iterable
Iterator = collections.abc.Iterator
Expand All @@ -149,37 +137,12 @@ def bytes_to_str(b, encoding='ascii'):
def signature(f):
return inspect.getargspec(f)

def get_range_parameters(data):
"""Gets the start, stop, and step parameters from a range object"""
# seems we only have indexing ops to infer
# rather than direct accessors
if len(data) > 1:
step = data[1] - data[0]
stop = data[-1] + step
start = data[0]
elif len(data):
start = data[0]
stop = data[0] + 1
step = 1
else:
start = stop = 0
step = 1

return start, stop, step

# import iterator versions of these functions
intern = intern
reduce = reduce
unichr = unichr

# Python 2-builtin ranges produce lists
lrange = builtins.range
lzip = builtins.zip
lmap = builtins.map
lfilter = builtins.filter

reload = builtins.reload

Hashable = collections.Hashable
Iterable = collections.Iterable
Iterator = collections.Iterator
Expand Down Expand Up @@ -247,7 +210,6 @@ class to receive bound method

if PY3:
string_types = str,
class_types = type,
text_type = str
binary_type = bytes

Expand All @@ -274,11 +236,6 @@ def east_asian_len(data, encoding=None, ambiguous_width=1):
else:
return len(data)

def import_lzma():
""" import lzma from the std library """
import lzma
return lzma

def set_function_name(f, name, cls):
""" Bind the name/qualname attributes of the function """
f.__name__ = name
Expand All @@ -289,7 +246,6 @@ def set_function_name(f, name, cls):
return f
else:
string_types = basestring,
class_types = (type, types.ClassType)
text_type = unicode
binary_type = str

Expand Down Expand Up @@ -321,12 +277,6 @@ def east_asian_len(data, encoding=None, ambiguous_width=1):
else:
return len(data)

def import_lzma():
""" import the backported lzma library
or raise ImportError if not available """
from backports import lzma
return lzma

def set_function_name(f, name, cls):
""" Bind the name attributes of the function """
f.__name__ = name
Expand All @@ -335,20 +285,6 @@ def set_function_name(f, name, cls):
string_and_binary_types = string_types + (binary_type,)


if PY2:
# In PY2 functools.wraps doesn't provide metadata pytest needs to generate
# decorated tests using parametrization. See pytest GH issue #2782
def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS,
updated=functools.WRAPPER_UPDATES):
def wrapper(f):
f = functools.wraps(wrapped, assigned, updated)(f)
f.__wrapped__ = wrapped
return f
return wrapper
else:
wraps = functools.wraps


def add_metaclass(metaclass):
"""Class decorator for creating a class with a metaclass."""
def wrapper(cls):
Expand Down
6 changes: 2 additions & 4 deletions pandas/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,17 +218,15 @@ def all_compare_operators(request):
return request.param


@pytest.fixture(params=[None, 'gzip', 'bz2', 'zip',
pytest.param('xz', marks=td.skip_if_no_lzma)])
@pytest.fixture(params=[None, 'gzip', 'bz2', 'zip', 'xz'])
def compression(request):
"""
Fixture for trying common compression types in compression tests
"""
return request.param


@pytest.fixture(params=['gzip', 'bz2', 'zip',
pytest.param('xz', marks=td.skip_if_no_lzma)])
@pytest.fixture(params=['gzip', 'bz2', 'zip', 'xz'])
def compression_only(request):
"""
Fixture for trying common compression types in compression tests excluding
Expand Down
4 changes: 3 additions & 1 deletion pandas/core/computation/common.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from functools import reduce

import numpy as np

from pandas.compat import reduce, string_types
from pandas.compat import string_types

import pandas as pd

Expand Down
4 changes: 2 additions & 2 deletions pandas/core/computation/expr.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
"""

import ast
from functools import partial
from functools import partial, reduce
import itertools as it
import operator
import tokenize

import numpy as np

from pandas.compat import StringIO, lmap, reduce, string_types
from pandas.compat import StringIO, lmap, string_types

import pandas as pd
from pandas import compat
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/indexes/range.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from pandas._libs import index as libindex, lib
import pandas.compat as compat
from pandas.compat import get_range_parameters, lrange
from pandas.compat import lrange
from pandas.compat.numpy import function as nv
from pandas.util._decorators import Appender, cache_readonly

Expand Down Expand Up @@ -132,7 +132,7 @@ def from_range(cls, data, name=None, dtype=None, **kwargs):
'{0}(...) must be called with object coercible to a '
'range, {1} was passed'.format(cls.__name__, repr(data)))

start, stop, step = get_range_parameters(data)
start, stop, step = data.start, data.stop, data.step
return RangeIndex(start, stop, step, dtype=dtype, name=name, **kwargs)

@classmethod
Expand Down
6 changes: 2 additions & 4 deletions pandas/core/internals/construction.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@
from pandas._libs import lib
from pandas._libs.tslibs import IncompatibleFrequency
import pandas.compat as compat
from pandas.compat import (
get_range_parameters, lmap, lrange, raise_with_traceback)
from pandas.compat import lmap, lrange, raise_with_traceback

from pandas.core.dtypes.cast import (
construct_1d_arraylike_from_scalar, construct_1d_ndarray_preserving_na,
Expand Down Expand Up @@ -612,8 +611,7 @@ def sanitize_array(data, index, dtype=None, copy=False,

elif isinstance(data, range):
# GH#16804
start, stop, step = get_range_parameters(data)
arr = np.arange(start, stop, step, dtype='int64')
arr = np.arange(data.start, data.stop, data.step, dtype='int64')
subarr = _try_cast(arr, False, dtype, copy, raise_cast_failure)
else:
subarr = _try_cast(data, False, dtype, copy, raise_cast_failure)
Expand Down
2 changes: 1 addition & 1 deletion pandas/io/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ def _get_handle(path_or_buf, mode, encoding=None, compression=None,

# XZ Compression
elif compression == 'xz':
lzma = compat.import_lzma()
import lzma
f = lzma.LZMAFile(path_or_buf, mode)

# Unrecognized Compression
Expand Down
3 changes: 1 addition & 2 deletions pandas/io/formats/excel.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
"""Utilities for conversion to writer-agnostic Excel representation
"""

from functools import reduce
import itertools
import re
import warnings

import numpy as np

from pandas.compat import reduce

from pandas.core.dtypes import missing
from pandas.core.dtypes.common import is_float, is_scalar
from pandas.core.dtypes.generic import ABCMultiIndex, ABCPeriodIndex
Expand Down
6 changes: 3 additions & 3 deletions pandas/io/formats/html.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@

from pandas._config import get_option

from pandas.compat import lzip, unichr
from pandas.compat import lzip

from pandas.core.dtypes.generic import ABCMultiIndex

from pandas import compat, option_context
from pandas import option_context

from pandas.io.common import _is_url
from pandas.io.formats.format import TableFormatter, get_level_lengths
Expand Down Expand Up @@ -147,7 +147,7 @@ def render(self):
self._write_table()

if self.should_show_dimensions:
by = chr(215) if compat.PY3 else unichr(215) # ×
by = chr(215)
self.write('<p>{rows} rows {by} {cols} columns</p>'
.format(rows=len(self.frame),
by=by,
Expand Down
2 changes: 1 addition & 1 deletion pandas/tests/computation/test_eval.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from distutils.version import LooseVersion
from functools import reduce
from itertools import product
import operator
import warnings
Expand All @@ -7,7 +8,6 @@
from numpy.random import rand, randint, randn
import pytest

from pandas.compat import reduce
from pandas.errors import PerformanceWarning
import pandas.util._test_decorators as td

Expand Down
8 changes: 2 additions & 6 deletions pandas/tests/io/parser/test_network.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,8 @@


@pytest.mark.network
@pytest.mark.parametrize(
"compress_type, extension", [
('gzip', '.gz'), ('bz2', '.bz2'), ('zip', '.zip'),
pytest.param('xz', '.xz', marks=td.skip_if_no_lzma)
]
)
@pytest.mark.parametrize("compress_type, extension", [
('gzip', '.gz'), ('bz2', '.bz2'), ('zip', '.zip'), ('xz', '.xz')])
@pytest.mark.parametrize('mode', ['explicit', 'infer'])
@pytest.mark.parametrize('engine', ['python', 'c'])
def test_compressed_urls(salaries_table, compress_type, extension, mode,
Expand Down
3 changes: 2 additions & 1 deletion pandas/tests/io/test_html.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import print_function

from functools import partial
from importlib import reload
import os
import re
import threading
Expand All @@ -9,7 +10,7 @@
from numpy.random import rand
import pytest

from pandas.compat import BytesIO, StringIO, is_platform_windows, reload
from pandas.compat import BytesIO, StringIO, is_platform_windows
from pandas.errors import ParserError
import pandas.util._test_decorators as td

Expand Down
12 changes: 3 additions & 9 deletions pandas/tests/io/test_pickle.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
import pytest

from pandas.compat import is_platform_little_endian
import pandas.util._test_decorators as td

import pandas as pd
from pandas import Index
Expand Down Expand Up @@ -343,7 +342,7 @@ def compress_file(self, src_path, dest_path, compression):
compression=zipfile.ZIP_DEFLATED) as f:
f.write(src_path, os.path.basename(src_path))
elif compression == 'xz':
lzma = pd.compat.import_lzma()
import lzma
f = lzma.LZMAFile(dest_path, "w")
else:
msg = 'Unrecognized compression type: {}'.format(compression)
Expand Down Expand Up @@ -381,10 +380,7 @@ def test_write_explicit_bad(self, compression, get_random_path):
df = tm.makeDataFrame()
df.to_pickle(path, compression=compression)

@pytest.mark.parametrize('ext', [
'', '.gz', '.bz2', '.no_compress',
pytest.param('.xz', marks=td.skip_if_no_lzma)
])
@pytest.mark.parametrize('ext', ['', '.gz', '.bz2', '.no_compress', '.xz'])
def test_write_infer(self, ext, get_random_path):
base = get_random_path
path1 = base + ext
Expand Down Expand Up @@ -431,9 +427,7 @@ def test_read_explicit(self, compression, get_random_path):
tm.assert_frame_equal(df, df2)

@pytest.mark.parametrize('ext', [
'', '.gz', '.bz2', '.zip', '.no_compress',
pytest.param('.xz', marks=td.skip_if_no_lzma)
])
'', '.gz', '.bz2', '.zip', '.no_compress', '.xz'])
def test_read_infer(self, ext, get_random_path):
base = get_random_path
path1 = base + ".raw"
Expand Down
3 changes: 2 additions & 1 deletion pandas/tests/series/test_dtypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# pylint: disable-msg=E1101,W0612

from datetime import datetime, timedelta
from importlib import reload
import string
import sys

Expand Down Expand Up @@ -188,7 +189,7 @@ def test_astype_unicode(self):

# Restore the former encoding
if former_encoding is not None and former_encoding != "utf-8":
reload(sys) # noqa
reload(sys)
sys.setdefaultencoding(former_encoding)

@pytest.mark.parametrize("dtype_class", [dict, Series])
Expand Down
Loading