""" compat ====== Cross-compatible functions for different versions of Python. Other items: * platform checker """ from __future__ import annotations import os import platform import sys from pandas._typing import F from pandas.compat._constants import ( IS64, PY39, PY310, PY311, PYPY, ) import pandas.compat.compressors from pandas.compat.numpy import ( is_numpy_dev, np_version_under1p21, ) from pandas.compat.pyarrow import ( pa_version_under7p0, pa_version_under8p0, pa_version_under9p0, pa_version_under11p0, ) def set_function_name(f: F, name: str, cls) -> F: """ Bind the name/qualname attributes of the function. """ f.__name__ = name f.__qualname__ = f"{cls.__name__}.{name}" f.__module__ = cls.__module__ return f def is_platform_little_endian() -> bool: """ Checking if the running platform is little endian. Returns ------- bool True if the running platform is little endian. """ return sys.byteorder == "little" def is_platform_windows() -> bool: """ Checking if the running platform is windows. Returns ------- bool True if the running platform is windows. """ return sys.platform in ["win32", "cygwin"] def is_platform_linux() -> bool: """ Checking if the running platform is linux. Returns ------- bool True if the running platform is linux. """ return sys.platform == "linux" def is_platform_mac() -> bool: """ Checking if the running platform is mac. Returns ------- bool True if the running platform is mac. """ return sys.platform == "darwin" def is_platform_arm() -> bool: """ Checking if the running platform use ARM architecture. Returns ------- bool True if the running platform uses ARM architecture. """ return platform.machine() in ("arm64", "aarch64") or platform.machine().startswith( "armv" ) def is_platform_power() -> bool: """ Checking if the running platform use Power architecture. Returns ------- bool True if the running platform uses ARM architecture. """ return platform.machine() in ("ppc64", "ppc64le") def is_ci_environment() -> bool: """ Checking if running in a continuous integration environment by checking the PANDAS_CI environment variable. Returns ------- bool True if the running in a continuous integration environment. """ return os.environ.get("PANDAS_CI", "0") == "1" def get_lzma_file() -> type[pandas.compat.compressors.LZMAFile]: """ Importing the `LZMAFile` class from the `lzma` module. Returns ------- class The `LZMAFile` class from the `lzma` module. Raises ------ RuntimeError If the `lzma` module was not imported correctly, or didn't exist. """ if not pandas.compat.compressors.has_lzma: raise RuntimeError( "lzma module not available. " "A Python re-install with the proper dependencies, " "might be required to solve this issue." ) return pandas.compat.compressors.LZMAFile __all__ = [ "is_numpy_dev", "np_version_under1p21", "pa_version_under7p0", "pa_version_under8p0", "pa_version_under9p0", "pa_version_under11p0", "IS64", "PY39", "PY310", "PY311", "PYPY", ]