nnpd.core.settings ================== .. py:module:: nnpd.core.settings .. autoapi-nested-parse:: Explicit one-factor-at-a-time sweeps. Ordinary lists are literal values. Classes ------- .. autoapisummary:: nnpd.core.settings.Choice nnpd.core.settings.Variant Functions --------- .. autoapisummary:: nnpd.core.settings.canonical nnpd.core.settings.digest nnpd.core.settings.at nnpd.core.settings.select nnpd.core.settings.expand_sweep nnpd.core.settings.single nnpd.core.settings.load_settings nnpd.core.settings.default_profile Module Contents --------------- .. py:function:: canonical(value: Any) -> str Stable JSON; reject NaN, infinity, callables, and ambiguous custom objects. .. py:function:: digest(value: Any) -> str .. py:class:: Choice An atomic sweep knob: Choice([baseline, alternative, ...]). Values may themselves be lists or dictionaries (e.g. complete architectures). Nesting Choice inside an option is deliberately unsupported. .. py:attribute:: values :type: list[Any] | tuple[Any, ...] .. py:class:: Variant .. py:attribute:: settings :type: dict .. py:attribute:: changed :type: str | None .. py:attribute:: value :type: Any :value: None .. py:property:: id :type: str .. py:function:: at(settings: dict, path: str) -> Any .. py:function:: select(settings: dict, *paths: str) -> dict .. py:function:: expand_sweep(settings: dict) -> list[Variant] Baseline once, then one changed knob per run; never a Cartesian product. Dictionary insertion order determines presentation order, not run identity. Duplicate resolved settings are removed, including repeated baselines. .. py:function:: single(settings: dict, name: str) -> dict Settings that must be one value everywhere: reject any Choice. .. py:function:: load_settings(path: str | pathlib.Path, profile: str | None = None) -> dict Load a *trusted* Python settings file; this executes Python, not a sandbox. .. py:function:: default_profile(path: str | pathlib.Path) -> str