text: """
  Python 3 compatibility tools.
  
  """
  from __future__ import division, absolute_import, print_function
  
  __all__ = ['bytes', 'asbytes', 'isfileobj', 'getexception', 'strchar',
             'unicode', 'asunicode', 'asbytes_nested', 'asunicode_nested',
             'asstr', 'open_latin1', 'long', 'basestring', 'sixu',
             'integer_types', 'is_pathlib_path', 'Path']
  
  import sys
  try:
      from pathlib import Path
  except ImportError:
      Path = None
  
  if sys.version_info[0] >= 3:
      import io
  
      long = int
      integer_types = (int,)
      basestring = str
      unicode = str
      bytes = bytes
  
      def asunicode(s):
          if isinstance(s, bytes):
              return s.decode('latin1')
          return str(s)
  
      def asbytes(s):
          if isinstance(s, bytes):
              return s
          return str(s).encode('latin1')
  
      def asstr(s):
          if isinstance(s, bytes):
              return s.decode('latin1')
          return str(s)
  
      def isfileobj(f):
          return isinstance(f, (io.FileIO, io.BufferedReader, io.BufferedWriter))
  
      def open_latin1(filename, mode='r'):
          return open(filename, mode=mode, encoding='iso-8859-1')
  
      def sixu(s):
          return s
  
      strchar = 'U'
  
  
  else:
      bytes = str
      long = long
      basestring = basestring
      unicode = unicode
      integer_types = (int, long)
      asbytes = str
      asstr = str
      strchar = 'S'
  
      def isfileobj(f):
          return isinstance(f, file)
  
      def asunicode(s):
          if isinstance(s, unicode):
              return s
          return str(s).decode('ascii')
  
      def open_latin1(filename, mode='r'):
          return open(filename, mode=mode)
  
      def sixu(s):
          return unicode(s, 'unicode_escape')
  
  
  def getexception():
      return sys.exc_info()[1]
  
  def asbytes_nested(x):
      if hasattr(x, '__iter__') and not isinstance(x, (bytes, unicode)):
          return [asbytes_nested(y) for y in x]
      else:
          return asbytes(x)
  
  def asunicode_nested(x):
      if hasattr(x, '__iter__') and not isinstance(x, (bytes, unicode)):
          return [asunicode_nested(y) for y in x]
      else:
          return asunicode(x)
  
  
  def is_pathlib_path(obj):
      """
      Check whether obj is a pathlib.Path object.
      """
      return Path is not None and isinstance(obj, Path)
  