Skip to content

CLN: Remove StringMixin from pandas.core.computation #26482

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

Closed
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
5 changes: 2 additions & 3 deletions pandas/core/computation/expr.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@

import pandas as pd
from pandas.core import common as com
from pandas.core.base import StringMixin
from pandas.core.computation.common import (
_BACKTICK_QUOTED_STRING, _remove_spaces_column_name)
from pandas.core.computation.ops import (
Expand Down Expand Up @@ -701,7 +700,7 @@ def __init__(self, env, engine, parser, preparser=lambda x: x):
super().__init__(env, engine, parser, preparser=preparser)


class Expr(StringMixin):
class Expr:

"""Object encapsulating an expression.

Expand Down Expand Up @@ -732,7 +731,7 @@ def assigner(self):
def __call__(self):
return self.terms(self.env)

def __str__(self):
def __repr__(self):
return printing.pprint_thing(self.terms)

def __len__(self):
Expand Down
17 changes: 7 additions & 10 deletions pandas/core/computation/ops.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@

from pandas.core.dtypes.common import is_list_like, is_scalar

from pandas.core.base import StringMixin
import pandas.core.common as com
from pandas.core.computation.common import _ensure_decoded, _result_type_many
from pandas.core.computation.scope import _DEFAULT_GLOBALS
Expand Down Expand Up @@ -46,7 +45,7 @@ def __init__(self, name, is_local):
super().__init__(msg.format(name))


class Term(StringMixin):
class Term:

def __new__(cls, name, env, side=None, encoding=None):
klass = Constant if not isinstance(name, str) else cls
Expand All @@ -67,7 +66,7 @@ def __init__(self, name, env, side=None, encoding=None):
def local_name(self):
return self.name.replace(_LOCAL_TAG, '')

def __str__(self):
def __repr__(self):
return pprint_thing(self.name)

def __call__(self, *args, **kwargs):
Expand Down Expand Up @@ -166,16 +165,14 @@ def _resolve_name(self):
def name(self):
return self.value

def __str__(self):
# in python 2 str() of float
# can truncate shorter than repr()
def __repr__(self):
return repr(self.name)


_bool_op_map = {'not': '~', 'and': '&', 'or': '|'}


class Op(StringMixin):
class Op:

"""Hold an operator of arbitrary arity
"""
Expand All @@ -188,7 +185,7 @@ def __init__(self, op, operands, *args, **kwargs):
def __iter__(self):
return iter(self.operands)

def __str__(self):
def __repr__(self):
"""Print a generic n-ary operator and its operands using infix
notation"""
# recurse over the operands
Expand Down Expand Up @@ -506,7 +503,7 @@ def __call__(self, env):
operand = self.operand(env)
return self.func(operand)

def __str__(self):
def __repr__(self):
return pprint_thing('{0}({1})'.format(self.op, self.operand))

@property
Expand All @@ -531,7 +528,7 @@ def __call__(self, env):
with np.errstate(all='ignore'):
return self.func.func(*operands)

def __str__(self):
def __repr__(self):
operands = map(str, self.operands)
return pprint_thing('{0}({1})'.format(self.op, ','.join(operands)))

Expand Down
9 changes: 4 additions & 5 deletions pandas/core/computation/pytables.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
from pandas.core.dtypes.common import is_list_like

import pandas as pd
from pandas.core.base import StringMixin
import pandas.core.common as com
from pandas.core.computation import expr, ops
from pandas.core.computation.common import _ensure_decoded
Expand All @@ -36,7 +35,7 @@ class Term(ops.Term):

def __new__(cls, name, env, side=None, encoding=None):
klass = Constant if not isinstance(name, str) else cls
supr_new = StringMixin.__new__
supr_new = object.__new__
return supr_new(klass)

def __init__(self, name, env, side=None, encoding=None):
Expand Down Expand Up @@ -230,7 +229,7 @@ def convert_values(self):

class FilterBinOp(BinOp):

def __str__(self):
def __repr__(self):
return pprint_thing("[Filter : [{lhs}] -> [{op}]"
.format(lhs=self.filter[0], op=self.filter[1]))

Expand Down Expand Up @@ -302,7 +301,7 @@ def evaluate(self):

class ConditionBinOp(BinOp):

def __str__(self):
def __repr__(self):
return pprint_thing("[Condition : [{cond}]]"
.format(cond=self.condition))

Expand Down Expand Up @@ -549,7 +548,7 @@ def __init__(self, where, queryables=None, encoding=None, scope_level=0):
encoding=encoding)
self.terms = self.parse()

def __str__(self):
def __repr__(self):
if self.terms is not None:
return pprint_thing(self.terms)
return pprint_thing(self.expr)
Expand Down
13 changes: 6 additions & 7 deletions pandas/core/computation/scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
from pandas._libs.tslibs import Timestamp
from pandas.compat.chainmap import DeepChainMap

from pandas.core.base import StringMixin
import pandas.core.computation as compu


Expand Down Expand Up @@ -78,7 +77,7 @@ def _get_pretty_string(obj):
return sio.getvalue()


class Scope(StringMixin):
class Scope:

"""Object to hold scope, with a few bells to deal with some custom syntax
and contexts added by pandas.
Expand Down Expand Up @@ -135,13 +134,13 @@ def __init__(self, level, global_dict=None, local_dict=None, resolvers=(),
self.resolvers = DeepChainMap(*resolvers)
self.temps = {}

def __str__(self):
def __repr__(self):
scope_keys = _get_pretty_string(list(self.scope.keys()))
res_keys = _get_pretty_string(list(self.resolvers.keys()))
unicode_str = '{name}(scope={scope_keys}, resolvers={res_keys})'
return unicode_str.format(name=type(self).__name__,
scope_keys=scope_keys,
res_keys=res_keys)
template = '{name}(scope={scope_keys}, resolvers={res_keys})'
return template.format(name=type(self).__name__,
scope_keys=scope_keys,
res_keys=res_keys)

@property
def has_resolvers(self):
Expand Down