Spaces:
Running
Running
""" | |
Python 3.X compatibility tools. | |
While this file was originally intended for Python 2 -> 3 transition, | |
it is now used to create a compatibility layer between different | |
minor versions of Python 3. | |
While the active version of numpy may not support a given version of python, we | |
allow downstream libraries to continue to use these shims for forward | |
compatibility with numpy while they transition their code to newer versions of | |
Python. | |
""" | |
__all__ = ['bytes', 'asbytes', 'isfileobj', 'getexception', 'strchar', | |
'unicode', 'asunicode', 'asbytes_nested', 'asunicode_nested', | |
'asstr', 'open_latin1', 'long', 'basestring', 'sixu', | |
'integer_types', 'is_pathlib_path', 'npy_load_module', 'Path', | |
'pickle', 'contextlib_nullcontext', 'os_fspath', 'os_PathLike'] | |
import sys | |
import os | |
from pathlib import Path | |
import io | |
import abc | |
from abc import ABC as abc_ABC | |
try: | |
import pickle5 as pickle | |
except ImportError: | |
import pickle | |
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' | |
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. | |
Prefer using ``isinstance(obj, os.PathLike)`` instead of this function. | |
""" | |
return isinstance(obj, Path) | |
# from Python 3.7 | |
class contextlib_nullcontext: | |
"""Context manager that does no additional processing. | |
Used as a stand-in for a normal context manager, when a particular | |
block of code is only sometimes used with a normal context manager: | |
cm = optional_cm if condition else nullcontext() | |
with cm: | |
# Perform operation, using optional_cm if condition is True | |
.. note:: | |
Prefer using `contextlib.nullcontext` instead of this context manager. | |
""" | |
def __init__(self, enter_result=None): | |
self.enter_result = enter_result | |
def __enter__(self): | |
return self.enter_result | |
def __exit__(self, *excinfo): | |
pass | |
def npy_load_module(name, fn, info=None): | |
""" | |
Load a module. | |
.. versionadded:: 1.11.2 | |
Parameters | |
---------- | |
name : str | |
Full module name. | |
fn : str | |
Path to module file. | |
info : tuple, optional | |
Only here for backward compatibility with Python 2.*. | |
Returns | |
------- | |
mod : module | |
""" | |
# Explicitly lazy import this to avoid paying the cost | |
# of importing importlib at startup | |
from importlib.machinery import SourceFileLoader | |
return SourceFileLoader(name, fn).load_module() | |
os_fspath = os.fspath | |
os_PathLike = os.PathLike | |