""" compat ====== Cross-compatible functions for different versions of Python. Other items: * platform checker """ from __future__ import annotations import os import platform import sys from typing import TYPE_CHECKING from pandas.compat._constants import ( IS64, ISMUSL, PY310, PY311, PY312, PYPY, ) import pandas.compat.compressors from pandas.compat.numpy import is_numpy_dev from pandas.compat.pyarrow import ( pa_version_under10p1, pa_version_under11p0, pa_version_under13p0, pa_version_under14p0, pa_version_under14p1, ) if TYPE_CHECKING: from pandas._typing import F def set_function_name(f: F, name: str, cls: type) -> 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 def get_bz2_file() -> type[pandas.compat.compressors.BZ2File]: """ Importing the `BZ2File` class from the `bz2` module. Returns ------- class The `BZ2File` class from the `bz2` module. Raises ------ RuntimeError If the `bz2` module was not imported correctly, or didn't exist. """ if not pandas.compat.compressors.has_bz2: raise RuntimeError( "bz2 module not available. " "A Python re-install with the proper dependencies, " "might be required to solve this issue." ) return pandas.compat.compressors.BZ2File __all__ = [ "is_numpy_dev", "pa_version_under10p1", "pa_version_under11p0", "pa_version_under13p0", "pa_version_under14p0", "pa_version_under14p1", "IS64", "ISMUSL", "PY310", "PY311", "PY312", "PYPY", ]