Source code for numeraire.core.registry

"""Open registries over closed enums.

A minimal evaluator registry. Bundled native evaluators register here; external packages
register the same way (directly or via the ``numeraire.methods`` entry-point group), so a
new method/evaluator never requires editing core.
"""

from __future__ import annotations

from numeraire.core.protocols import Evaluator

_EVALUATORS: dict[str, Evaluator] = {}


[docs] def register_evaluator(name: str, evaluator: Evaluator, *, overwrite: bool = False) -> None: """Register ``evaluator`` under ``name``. Raises if the name exists unless ``overwrite``.""" if not overwrite and name in _EVALUATORS: raise KeyError(f"evaluator {name!r} already registered") _EVALUATORS[name] = evaluator
[docs] def get_evaluator(name: str) -> Evaluator: """Return the evaluator registered under ``name``.""" try: return _EVALUATORS[name] except KeyError: raise KeyError(f"no evaluator registered as {name!r}") from None
[docs] def available_evaluators() -> tuple[str, ...]: """Return the names of all registered evaluators, sorted.""" return tuple(sorted(_EVALUATORS))