"""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",
]