Skip to content

CLN: PY3 compat signature #26016

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 4 commits into from
Apr 7, 2019
Merged
Show file tree
Hide file tree
Changes from all 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
31 changes: 0 additions & 31 deletions pandas/compat/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
import platform
import types
import struct
import inspect
from collections import namedtuple

PY2 = sys.version_info[0] == 2
PY3 = sys.version_info[0] >= 3
Expand Down Expand Up @@ -64,32 +62,6 @@ def str_to_bytes(s, encoding=None):
def bytes_to_str(b, encoding=None):
return b.decode(encoding or 'utf-8')

# The signature version below is directly copied from Django,
# https://github.com/django/django/pull/4846
def signature(f):
sig = inspect.signature(f)
args = [
p.name for p in sig.parameters.values()
if p.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
]
varargs = [
p.name for p in sig.parameters.values()
if p.kind == inspect.Parameter.VAR_POSITIONAL
]
varargs = varargs[0] if varargs else None
keywords = [
p.name for p in sig.parameters.values()
if p.kind == inspect.Parameter.VAR_KEYWORD
]
keywords = keywords[0] if keywords else None
defaults = [
p.default for p in sig.parameters.values()
if p.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD
and p.default is not p.empty
] or None
argspec = namedtuple('Signature', ['args', 'defaults',
'varargs', 'keywords'])
return argspec(args, defaults, varargs, keywords)
else:
# Python 2
_name_re = re.compile(r"[a-zA-Z_][a-zA-Z0-9_]*$")
Expand All @@ -103,9 +75,6 @@ def str_to_bytes(s, encoding='ascii'):
def bytes_to_str(b, encoding='ascii'):
return b

def signature(f):
return inspect.getargspec(f)

if PY2:
def iteritems(obj, **kw):
return obj.iteritems(**kw)
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/apply.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import inspect
import warnings

import numpy as np

from pandas._libs import reduction
import pandas.compat as compat
from pandas.util._decorators import cache_readonly

from pandas.core.dtypes.common import (
Expand Down Expand Up @@ -123,7 +123,7 @@ def get_result(self):
# Some methods (shift, etc.) require the axis argument, others
# don't, so inspect and insert if necessary.
func = getattr(self.obj, self.f)
sig = compat.signature(func)
sig = inspect.getfullargspec(func)
if 'axis' in sig.args:
self.kwds['axis'] = self.axis
return func(*self.args, **self.kwds)
Expand Down
5 changes: 3 additions & 2 deletions pandas/tests/reductions/test_stat_reductions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"""
Tests for statistical reductions of 2nd moment or higher: var, skew, kurt, ...
"""
import inspect

import numpy as np
import pytest
Expand All @@ -10,7 +11,7 @@
import pandas.util._test_decorators as td

import pandas as pd
from pandas import DataFrame, Series, compat
from pandas import DataFrame, Series
import pandas.util.testing as tm


Expand Down Expand Up @@ -75,7 +76,7 @@ def _check_stat_op(self, name, alternate, string_series_,
f(string_series_, axis=1)

# Unimplemented numeric_only parameter.
if 'numeric_only' in compat.signature(f).args:
if 'numeric_only' in inspect.getfullargspec(f).args:
with pytest.raises(NotImplementedError, match=name):
f(string_series_, numeric_only=True)

Expand Down
7 changes: 3 additions & 4 deletions pandas/util/_decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import warnings

from pandas._libs.properties import cache_readonly # noqa
from pandas.compat import signature


def deprecate(name, alternative, version, alt_name=None,
Expand Down Expand Up @@ -335,7 +334,7 @@ def make_signature(func):
(['a', 'b', 'c=2'], ['a', 'b', 'c'])
"""

spec = signature(func)
spec = inspect.getfullargspec(func)
if spec.defaults is None:
n_wo_defaults = len(spec.args)
defaults = ('',) * n_wo_defaults
Expand All @@ -347,6 +346,6 @@ def make_signature(func):
args.append(var if default == '' else var + '=' + repr(default))
if spec.varargs:
args.append('*' + spec.varargs)
if spec.keywords:
args.append('**' + spec.keywords)
if spec.varkw:
args.append('**' + spec.varkw)
return args, spec.args
7 changes: 3 additions & 4 deletions scripts/validate_docstrings.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@

sys.path.insert(0, os.path.join(BASE_PATH))
import pandas
from pandas.compat import signature

sys.path.insert(1, os.path.join(BASE_PATH, 'doc', 'sphinxext'))
from numpydoc.docscrape import NumpyDocString
Expand Down Expand Up @@ -420,16 +419,16 @@ def signature_parameters(self):
# accessor classes have a signature but don't want to show this
return tuple()
try:
sig = signature(self.obj)
sig = inspect.getfullargspec(self.obj)
except (TypeError, ValueError):
# Some objects, mainly in C extensions do not support introspection
# of the signature
return tuple()
params = sig.args
if sig.varargs:
params.append("*" + sig.varargs)
if sig.keywords:
params.append("**" + sig.keywords)
if sig.varkw:
params.append("**" + sig.varkw)
params = tuple(params)
if params and params[0] in ('self', 'cls'):
return params[1:]
Expand Down