Source code for at_py.readwrite.env_dispatch

"""Dispatch full ``.env`` parsing by executable/model name (Matlab ``read_env.m``)."""

from __future__ import annotations

from at_py.readwrite.env import ParsedEnvKraken, parse_env_kraken
from at_py.readwrite.env_bellhop import (
    ParsedEnvBellhop,
    ParsedEnvBellhop3D,
    parse_env_bellhop,
    parse_env_bellhop3d,
)
from at_py.readwrite.env_format import format_parsed_env, format_parsed_env_bytes
from at_py.readwrite.env_ram import ParsedEnvRAM, parse_env_ram

_KRAKEN_FAMILY = frozenset(
    {"SCOOTER", "KRAKEN", "KRAKENC", "KRAKEL", "SPARC", "BOUNCE"},
)


[docs] def parse_read_env( text: str, model: str, ) -> ParsedEnvKraken | ParsedEnvBellhop | ParsedEnvBellhop3D | ParsedEnvRAM: """Parse a full environmental file for the given AT model (Matlab ``read_env``). Dispatches to :func:`parse_env_kraken`, :func:`parse_env_bellhop`, :func:`parse_env_bellhop3d`, or :func:`parse_env_ram` according to ``model`` (case-insensitive), matching the branches in ``read_env.m`` plus RAM ``ram.in``. """ m = model.strip().upper() if m in _KRAKEN_FAMILY: return parse_env_kraken(text) if m == "BELLHOP": return parse_env_bellhop(text) if m == "BELLHOP3D": return parse_env_bellhop3d(text) if m == "RAM": return parse_env_ram(text) allowed = ", ".join(sorted(_KRAKEN_FAMILY | {"BELLHOP", "BELLHOP3D", "RAM"})) raise ValueError(f"unsupported read_env model {model!r}; expected one of: {allowed}")
[docs] def parse_read_env_bytes( data: bytes, model: str, *, encoding: str = "utf-8", ) -> ParsedEnvKraken | ParsedEnvBellhop | ParsedEnvBellhop3D | ParsedEnvRAM: """Like :func:`parse_read_env` but decodes ``data`` with ``encoding`` first.""" return parse_read_env(data.decode(encoding, errors="replace"), model)
__all__ = [ "parse_read_env", "parse_read_env_bytes", "format_parsed_env", "format_parsed_env_bytes", "ParsedEnvRAM", ]