python: Remove Python 2.7 compatibility code
authorAndreas Sandberg <andreas.sandberg@arm.com>
Thu, 21 Jan 2021 17:09:38 +0000 (17:09 +0000)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 22 Jan 2021 15:29:12 +0000 (15:29 +0000)
We don't support Python 2.7 anymore. Remove glue code like the six
dependency and "from __future__" imports from gem5's standard library.

Change-Id: I71834c325f86ff0329b222be87794ead96081f05
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39584
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Gabe Black <gabe.black@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>

28 files changed:
src/python/importer.py
src/python/m5/SimObject.py
src/python/m5/__init__.py
src/python/m5/core.py
src/python/m5/debug.py
src/python/m5/event.py
src/python/m5/ext/__init__.py
src/python/m5/internal/params.py
src/python/m5/main.py
src/python/m5/objects/__init__.py
src/python/m5/options.py
src/python/m5/params.py
src/python/m5/proxy.py
src/python/m5/simulate.py
src/python/m5/stats/__init__.py
src/python/m5/ticks.py
src/python/m5/trace.py
src/python/m5/util/__init__.py
src/python/m5/util/attrdict.py
src/python/m5/util/code_formatter.py
src/python/m5/util/convert.py
src/python/m5/util/dot_writer.py
src/python/m5/util/fdthelper.py
src/python/m5/util/grammar.py
src/python/m5/util/jobfile.py
src/python/m5/util/multidict.py
src/python/m5/util/pybind.py
src/python/m5/util/terminal.py

index c29fb7bd10f04fe1820601bce80a5d07881621b9..b89b4a8d1f21a60c253fb0af11598684fd1a0805 100644 (file)
@@ -24,9 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 # Simple importer that allows python to import data from a dict of
 # code objects.  The keys are the module path, and the items are the
 # filename and bytecode of the file.
index b47d98d833eb99a06e0362870cd0a2cc7bf02746..1697237a96e94950a23df87e2b82a5f293677883 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-from six import add_metaclass
-import six
-if six.PY3:
-    long = int
-
 import sys
 from types import FunctionType, MethodType, ModuleType
 from functools import wraps
@@ -1178,8 +1171,7 @@ class SimObjectCliWrapper(object):
 # The SimObject class is the root of the special hierarchy.  Most of
 # the code in this class deals with the configuration hierarchy itself
 # (parent/child node relationships).
-@add_metaclass(MetaSimObject)
-class SimObject(object):
+class SimObject(object, metaclass=MetaSimObject):
     # Specify metaclass.  Any class inheriting from SimObject will
     # get this metaclass.
     type = 'SimObject'
index 309764dbca6ae2d3392dc2ca9f2a7072ae4fb056..254d9a6822f3edfeae10900830c52f4ae02109d8 100644 (file)
@@ -24,9 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 # Import useful subpackages of M5, but *only* when run as an m5
 # script.  This is mostly to keep backward compatibility with existing
 # scripts while allowing new SCons code to operate properly.
index 34d54bc6ede4cd89c94655af30e8a951aff32fa9..fcbf4aa49896f8f4440b045c5eebee09a0367a1a 100644 (file)
@@ -36,8 +36,5 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 from _m5.core import setOutputDir
 from _m5.loader import setInterpDir
index 6b45b16ff7920229868119f7753d0103a00deffa..10d0980c27f6a17dd053bdee58bb61d71bd6ddb1 100644 (file)
@@ -24,8 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 from collections import Mapping
 
 import _m5.debug
index 9b5532c3ec2d5b329cad1c7f5b029aa6092a2410..f0230cffb2d1728bfee7e5e8d56a41dba2c2edc9 100644 (file)
@@ -38,8 +38,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 import m5
 import _m5.event
 
index f950c98324e5758be6122b4d902711bc6dc526b1..cdd1f4277fc4fdd5a9b9804a1c64b94b63fe6ec9 100644 (file)
@@ -35,5 +35,3 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
index 1cc6e3a53725844be51ea81aeda25955efbf5034..2fc79c0c8220b72f635a2905c4e1e57fafe8c25d 100644 (file)
@@ -36,9 +36,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import inspect
 import _m5
 
index 34088898b79d8b3003e33dc0f1c4b3b50226ef96..9342ad0bd765b3898c2fd3cf7835cc8bf1d7a607 100644 (file)
@@ -36,8 +36,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 import code
 import datetime
 import os
index f1ff90087dadc234275bee5152d5cb033fe8e426..3ec3b8cb3bba3c8525ee5d386f8e544ee2f98ba4 100644 (file)
@@ -24,9 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 from m5.internal import params
 from m5.SimObject import *
 
index eea2e1d894e413c110b1012d1d611f8a3478b1f9..a580160102d9348f0d5c2eecf7b7dc0e12948e75 100644 (file)
@@ -24,9 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import optparse
 import sys
 
index 45082d7ac03a4c4f90c6ad4f1d089b05f906cb9e..5ff507189e7db103ea6e3d18ff39660e03419534 100644 (file)
 #
 #####################################################################
 
-from __future__ import print_function
-from six import with_metaclass
-import six
-if six.PY3:
-    long = int
-
 import copy
 import datetime
 import re
@@ -97,7 +91,7 @@ class MetaParamValue(type):
 
 # Dummy base class to identify types that are legitimate for SimObject
 # parameters.
-class ParamValue(with_metaclass(MetaParamValue, object)):
+class ParamValue(object, metaclass=MetaParamValue):
     cmd_line_settable = False
 
     # Generate the code needed as a prerequisite for declaring a C++
@@ -235,7 +229,7 @@ class ParamDesc(object):
 # that the value is a vector (list) of the specified type instead of a
 # single value.
 
-class VectorParamValue(with_metaclass(MetaParamValue, list)):
+class VectorParamValue(list, metaclass=MetaParamValue):
     def __setattr__(self, attr, value):
         raise AttributeError("Not allowed to set %s on '%s'" % \
                              (attr, type(self).__name__))
@@ -467,9 +461,6 @@ class NumericParamValue(ParamValue):
     def __float__(self):
         return float(self.value)
 
-    def __long__(self):
-        return long(self.value)
-
     def __int__(self):
         return int(self.value)
 
@@ -538,11 +529,6 @@ class NumericParamValue(ParamValue):
     def __lt__(self, other):
         return self.value < NumericParamValue.unwrap(other)
 
-    # Python 2.7 pre __future__.division operators
-    # TODO: Remove these when after "import division from __future__"
-    __div__ =  __truediv__
-    __idiv__ = __itruediv__
-
     def config_value(self):
         return self.value
 
@@ -586,7 +572,7 @@ class CheckedIntType(MetaParamValue):
 # class is subclassed to generate parameter classes with specific
 # bounds.  Initialization of the min and max bounds is done in the
 # metaclass CheckedIntType.__init__.
-class CheckedInt(with_metaclass(CheckedIntType, NumericParamValue)):
+class CheckedInt(NumericParamValue, metaclass=CheckedIntType):
     cmd_line_settable = True
 
     def _check(self):
@@ -597,8 +583,8 @@ class CheckedInt(with_metaclass(CheckedIntType, NumericParamValue)):
     def __init__(self, value):
         if isinstance(value, str):
             self.value = convert.toInteger(value)
-        elif isinstance(value, (int, long, float, NumericParamValue)):
-            self.value = long(value)
+        elif isinstance(value, (int, float, NumericParamValue)):
+            self.value = int(value)
         else:
             raise TypeError("Can't convert object of type %s to CheckedInt" \
                   % type(value).__name__)
@@ -617,7 +603,7 @@ class CheckedInt(with_metaclass(CheckedIntType, NumericParamValue)):
         code('#include "base/types.hh"')
 
     def getValue(self):
-        return long(self.value)
+        return int(self.value)
 
 class Int(CheckedInt):      cxx_type = 'int';      size = 32; unsigned = False
 class Unsigned(CheckedInt): cxx_type = 'unsigned'; size = 32; unsigned = True
@@ -666,7 +652,7 @@ class Float(ParamValue, float):
     cmd_line_settable = True
 
     def __init__(self, value):
-        if isinstance(value, (int, long, float, NumericParamValue, Float, str)):
+        if isinstance(value, (int, float, NumericParamValue, Float, str)):
             self.value = float(value)
         else:
             raise TypeError("Can't convert object of type %s to Float" \
@@ -732,7 +718,7 @@ class Addr(CheckedInt):
             except (TypeError, ValueError):
                 # Convert number to string and use long() to do automatic
                 # base conversion (requires base=0 for auto-conversion)
-                self.value = long(str(value), base=0)
+                self.value = int(str(value), base=0)
 
         self._check()
     def __add__(self, other):
@@ -744,8 +730,8 @@ class Addr(CheckedInt):
         try:
             val = convert.toMemorySize(value)
         except TypeError:
-            val = long(value)
-        return "0x%x" % long(val)
+            val = int(value)
+        return "0x%x" % int(val)
 
 class AddrRange(ParamValue):
     cxx_type = 'AddrRange'
@@ -772,7 +758,7 @@ class AddrRange(ParamValue):
                 self.intlvMatch = int(kwargs.pop('intlvMatch'))
 
             if 'masks' in kwargs:
-                self.masks = [ long(x) for x in list(kwargs.pop('masks')) ]
+                self.masks = [ int(x) for x in list(kwargs.pop('masks')) ]
                 self.intlvBits = len(self.masks)
             else:
                 if 'intlvBits' in kwargs:
@@ -825,7 +811,7 @@ class AddrRange(ParamValue):
 
     def size(self):
         # Divide the size by the size of the interleaving slice
-        return (long(self.end) - long(self.start)) >> self.intlvBits
+        return (int(self.end) - int(self.start)) >> self.intlvBits
 
     @classmethod
     def cxx_predecls(cls, code):
@@ -875,7 +861,7 @@ class AddrRange(ParamValue):
         # Go from the Python class to the wrapped C++ class
         from _m5.range import AddrRange
 
-        return AddrRange(long(self.start), long(self.end),
+        return AddrRange(int(self.start), int(self.end),
                          self.masks, int(self.intlvMatch))
 
 # Boolean parameter type.  Python doesn't let you subclass bool, since
@@ -1016,7 +1002,7 @@ class IpAddress(ParamValue):
             try:
                 self.ip = convert.toIpAddress(value)
             except TypeError:
-                self.ip = long(value)
+                self.ip = int(value)
         self.verifyIp()
 
     def __call__(self, value):
@@ -1218,7 +1204,7 @@ def parse_time(value):
     if isinstance(value, struct_time):
         return value
 
-    if isinstance(value, (int, long)):
+    if isinstance(value, int):
         return gmtime(value)
 
     if isinstance(value, (datetime, date)):
@@ -1444,7 +1430,7 @@ module_init(py::module &m_internal)
 
 
 # Base class for enum types.
-class Enum(with_metaclass(MetaEnum, ParamValue)):
+class Enum(ParamValue, metaclass=MetaEnum):
     vals = []
     cmd_line_settable = True
 
@@ -1538,7 +1524,7 @@ class TickParamValue(NumericParamValue):
         return value
 
     def getValue(self):
-        return long(self.value)
+        return int(self.value)
 
     @classmethod
     def cxx_ini_predecls(cls, code):
@@ -1583,7 +1569,7 @@ class Latency(TickParamValue):
             value = self.value
         else:
             value = ticks.fromSeconds(self.value)
-        return long(value)
+        return int(value)
 
     def config_value(self):
         return self.getValue()
@@ -1626,7 +1612,7 @@ class Frequency(TickParamValue):
             value = self.value
         else:
             value = ticks.fromSeconds(1.0 / self.value)
-        return long(value)
+        return int(value)
 
     def config_value(self):
         return self.getValue()
@@ -1792,7 +1778,7 @@ class MemoryBandwidth(float,ParamValue):
 # make_param_value() above that lets these be assigned where a
 # SimObject is required.
 # only one copy of a particular node
-class NullSimObject(with_metaclass(Singleton, object)):
+class NullSimObject(object, metaclass=Singleton):
     _name = 'Null'
 
     def __call__(cls):
@@ -2159,7 +2145,7 @@ VectorSlavePort = VectorResponsePort
 # 'Fake' ParamDesc for Port references to assign to the _pdesc slot of
 # proxy objects (via set_param_desc()) so that proxy error messages
 # make sense.
-class PortParamDesc(with_metaclass(Singleton, object)):
+class PortParamDesc(object, metaclass=Singleton):
     ptype_str = 'Port'
     ptype = Port
 
index d15b6f297c3732cb439e50f290c759b737d5e8e9..fe4cb658ef36add9060ab2569c38f88960836264 100644 (file)
 #
 #####################################################################
 
-from __future__ import print_function
-from __future__ import absolute_import
-import six
-if six.PY3:
-    long = int
-
 import copy
 
-
 class BaseProxy(object):
     def __init__(self, search_self, search_up):
         self._search_self = search_self
@@ -74,7 +67,7 @@ class BaseProxy(object):
 
     def _gen_op(operation):
         def op(self, operand):
-            if not (isinstance(operand, (int, long, float)) or \
+            if not (isinstance(operand, (int, float)) or \
                 isproxy(operand)):
                 raise TypeError(
                     "Proxy operand must be a constant or a proxy to a param")
index 080d725a122b7895a98dcf2a4f84032b4fa29a55..a1a05dc96c293357222f56476f334dc0e7dfefc9 100644 (file)
@@ -37,8 +37,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 import atexit
 import os
 import sys
index 1fc6c9c08792df23af6d06ab06ea6d1bb799be05..cba1a32dfd94aaae1dc28908417ef3683de844a3 100644 (file)
@@ -37,9 +37,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import m5
 
 import _m5.stats
index cdba1e86aeb4866d39dc95096d1b2961f6d10666..1ec012bd5970dab96a9d791895de8d3c81b74f49 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
 import decimal
-import six
-if six.PY3:
-    long = int
 
 import sys
 from m5.util import warn
@@ -42,7 +38,7 @@ def setGlobalFrequency(ticksPerSecond):
     from m5.util import convert
     import _m5.core
 
-    if isinstance(ticksPerSecond, (int, long)):
+    if isinstance(ticksPerSecond, int):
         tps = ticksPerSecond
     elif isinstance(ticksPerSecond, float):
         tps = ticksPerSecond
index f7b464ce9edd0820871f19e8c5f3de8964d90992..9603914ca868e0548f1280bb153cbfa52f74bf13 100644 (file)
@@ -24,8 +24,5 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 # Export native methods to Python
 from _m5.trace import output, ignore, disable, enable
index deab0fc8e9c40a82b334945c1b17f4146ea44291..74c0ec02d10ce3bcd7837903c8d410d203a2acdf 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 import os
 import re
 import sys
 
-from six import string_types
-from six.moves import zip_longest
+from itertools import zip_longest
 
 from . import convert
 from . import jobfile
@@ -123,7 +120,7 @@ def compareVersions(v1, v2):
     def make_version_list(v):
         if isinstance(v, (list,tuple)):
             return v
-        elif isinstance(v, string_types):
+        elif isinstance(v, str):
             return list(map(lambda x: int(re.match('\d+', x).group()),
                             v.split('.')))
         else:
index 453daf79492702f10bf12e4fbe2dbfe13cdb2b0d..a072783dc1a97ea9919ae8dfd80f8d9030d24173 100644 (file)
@@ -24,8 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 __all__ = [ 'attrdict', 'multiattrdict', 'optiondict' ]
 
 class attrdict(dict):
index 37880de6507891c3938484c5fdb56b7ddcb7277d..0ca8c98a608fb60241d08d06f399cd5da50de9ed 100644 (file)
@@ -24,9 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from six import add_metaclass
-
 try:
     import builtins
 except ImportError:
@@ -112,8 +109,7 @@ class code_formatter_meta(type):
                 }
         cls.pattern = re.compile(pat, re.VERBOSE | re.DOTALL | re.MULTILINE)
 
-@add_metaclass(code_formatter_meta)
-class code_formatter(object):
+class code_formatter(object, metaclass=code_formatter_meta):
     delim = r'$'
     ident = r'[_A-z]\w*'
     pos = r'[0-9]+'
index 73335e62b8a6cae3e618a8f50a6eea3711f7dfda..ff452cdf71ff19015af040332a3970f09cc659ca 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-import six
-if six.PY3:
-    long = int
-
 # metric prefixes
 atto  = 1.0e-18
 femto = 1.0e-15
index 8b757e83559fa1ac9373beacc0709e5d3f2bc175..7b10fdcf32e357dd8cc24835582a7a37be0abdc1 100644 (file)
@@ -53,9 +53,6 @@
 #
 #####################################################################
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import m5, os, re
 from m5.SimObject import isRoot, isSimObjectVector
 from m5.params import PortRef, isNullPointer
index 7ad3aba132f9637ee35a1a0673d8349edc5fc414..d9dec11962feab7223ab2db552efd07f1224b3bc 100644 (file)
 #
 # Author: Glenn Bergmans
 
-import six
-if six.PY3:
-    long = int
-
 from m5.ext.pyfdt import pyfdt
 import re
 import os
@@ -56,7 +52,7 @@ class FdtPropertyWords(pyfdt.FdtPropertyWords):
             words = [words]
         # Make sure all values are ints (use automatic base detection if the
         # type is str)
-        words = [long(w, base=0) if type(w) == str else long(w) for w in words]
+        words = [int(w, base=0) if type(w) == str else int(w) for w in words]
         super(FdtPropertyWords, self).__init__(name, words)
 
 class FdtPropertyStrings(pyfdt.FdtPropertyStrings):
@@ -122,7 +118,7 @@ class FdtState(object):
     def int_to_cells(self, value, cells):
         """Helper function for: generates a list of 32 bit cells from an int,
         used to split up addresses in appropriate 32 bit chunks."""
-        value = long(value)
+        value = int(value)
 
         if (value >> (32 * cells)) != 0:
             fatal("Value %d doesn't fit in %d cells" % (value, cells))
index e09c989eea6a853508e0be26c016ff5450509cd1..9aba746260cd1714ef0715776f8117481e5187fb 100644 (file)
@@ -25,7 +25,6 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 import os
-from six import string_types
 
 import ply.lex
 import ply.yacc
@@ -94,7 +93,7 @@ class Grammar(object):
             "'%s' object has no attribute '%s'" % (type(self), attr))
 
     def parse_string(self, data, source='<string>', debug=None, tracking=0):
-        if not isinstance(data, string_types):
+        if not isinstance(data, str):
             raise AttributeError(
                 "argument must be a string, was '%s'" % type(f))
 
@@ -113,7 +112,7 @@ class Grammar(object):
         return result
 
     def parse_file(self, f, **kwargs):
-        if isinstance(f, string_types):
+        if isinstance(f, str):
             source = f
             f = open(f, 'r')
         elif isinstance(f, file):
index e1bd5b2c25ed310b285ccc8845884fa8c8b74912..e262cf1603e2287edc06aa3dfa18496921622c27 100644 (file)
@@ -24,9 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import sys
 
 class Data(object):
index 15589076638d21ed6e7ab5bf5b24b31e805eeea6..78b2c8b025470fe684ffbd174dfb7e34ba455097 100644 (file)
@@ -24,8 +24,6 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-
 __all__ = [ 'multidict' ]
 
 class multidict(object):
index 18df3bb60c3bf44b886afe4cdcb1515f8b2860ee..bb73be99496d80bee85cdae173f73bb4b0a15bcf 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-from __future__ import print_function
-from __future__ import absolute_import
-from six import add_metaclass
-
 from abc import *
 
-@add_metaclass(ABCMeta)
-class PyBindExport(object):
+class PyBindExport(object, metaclass=ABCMeta):
     @abstractmethod
     def export(self, code, cname):
         pass
index bb4ac80fedb8e048f40faa43315f21b44e94301e..f50e92dbae5b887146713361f685561012f8f5b4 100644 (file)
@@ -26,9 +26,6 @@
 #
 # Author: Steve Reinhardt
 
-from __future__ import print_function
-from __future__ import absolute_import
-
 import sys
 
 # Intended usage example: