Source code for tud_lbm.operators.equilibrium

"""Equilibrium operators — implementations of EquilibriumOperator protocol.

Public API: build_equilibrium_fn()

Implementation modules (_equilibrium.py) are internal; use the factory to access.

Example:
    from operators.equilibrium import build_equilibrium_fn

    eq = build_equilibrium_fn("wb")
    feq = eq(rho, u, lattice)
"""

from __future__ import annotations
from typing import TYPE_CHECKING
from tud_lbm.operators._loader import auto_load_operators
from tud_lbm.operators.factory import build_operator

if TYPE_CHECKING:
    from tud_lbm.operators.protocols import EquilibriumOperator

# Auto-discover and import private operator modules for registry registration
auto_load_operators("tud_lbm.operators.equilibrium")


[docs] def build_equilibrium_fn(scheme: str = "wb") -> EquilibriumOperator: """Return an equilibrium operator satisfying EquilibriumOperator protocol. Args: scheme: Equilibrium model name ("wb" or others). Defaults to "wb" (Chai et al. D2Q9 model). Returns: A callable satisfying the EquilibriumOperator protocol. Can be called as: operator(rho, u, lattice) → feq Type-checkers see this as an EquilibriumOperator, so: op: EquilibriumOperator = build_equilibrium_fn("wb") Type-checkers will verify any use of op matches the protocol. Raises: ValueError: If scheme is not registered. Examples: >>> from operators.equilibrium import build_equilibrium_fn >>> equilibrium = build_equilibrium_fn("wb") >>> feq = equilibrium(rho, u, lattice) """ return build_operator("equilibrium", scheme)
__all__ = [ "build_equilibrium_fn", # ← Primary API (use this!) ]