Source code for genno.compat.pandas

import logging
from contextlib import contextmanager
from functools import lru_cache

from packaging.version import Version, parse

log = logging.getLogger(__name__)


@lru_cache
def version() -> Version:
    import pandas

    return parse(pandas.__version__)


[docs] @contextmanager def disable_copy_on_write(name): """Context manager to disable Pandas :ref:`pandas:copy_on_write`. A message is logged with level :any:`logging.DEBUG` if the setting is changed. """ import pandas stored = pandas.options.mode.copy_on_write override_value = "warn" if version() >= Version("2.2.0") else False try: if stored is True: log.debug(f"Override pandas.mode.options.copy_on_write = True for {name}") pandas.options.mode.copy_on_write = override_value yield finally: pandas.options.mode.copy_on_write = stored
[docs] @lru_cache def handles_parquet_attrs() -> bool: """Return :any:`True` if :mod:`pandas` can read/write attrs to/from Parquet files. If not, a message is logged. """ if version() < Version("2.1.0"): log.info( f"Pandas {version()!s} < 2.1.0 cannot read/write Quantity.attrs " f"to/from Parquet; {__name__} will use pickle from the standard library" ) return False else: return True