Source code for eclypse.report.backends

"""Backends for the Report DataFrame abstraction.

This package exposes:
- The FrameBackend abstract base class.
- Built-in implementations (pandas, polars eager, polars lazy).
- A small factory helper to resolve backends by name.
"""

from eclypse.report import FrameBackend

from .pandas_backend import PandasBackend
from .polars_backend import PolarsBackend
from .polars_lazy_backend import PolarsLazyBackend
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from collections.abc import Callable


[docs] def get_backend(backend: str | FrameBackend) -> FrameBackend: """Resolve a backend from a name or an already-instantiated backend object. Args: backend: Either a backend name (e.g. "pandas", "polars", "polars_lazy") or a FrameBackend instance. Returns: A FrameBackend instance. Raises: TypeError: If a non-string backend is not a FrameBackend instance. ValueError: If the backend name is unknown. """ if not isinstance(backend, str): if not isinstance(backend, FrameBackend): raise TypeError("The provided backend is not an instance of FrameBackend.") return backend default_backends: dict[str, Callable[[], FrameBackend]] = { "pandas": PandasBackend, "polars": PolarsBackend, "polars_lazy": PolarsLazyBackend, } name = backend.lower().strip() if name in default_backends: return default_backends[name]() raise ValueError(f"Unknown backend: {backend}")
__all__ = [ "FrameBackend", "PandasBackend", "PolarsBackend", "PolarsLazyBackend", "get_backend", ]