Source code for kmcpy.models.fitting.registry

"""Registry utilities for mapping model classes to fitter classes."""

from __future__ import annotations

from typing import Type

_FITTER_REGISTRY: dict[type, type] = {}


[docs] def register_fitter(model_class: Type, fitter_class: Type) -> None: """Register a fitter implementation for a model class.""" if model_class in _FITTER_REGISTRY: existing = _FITTER_REGISTRY[model_class] if existing is not fitter_class: raise ValueError( f"Model {model_class.__name__} already has fitter " f"{existing.__name__} registered." ) _FITTER_REGISTRY[model_class] = fitter_class
[docs] def get_fitter_for_model(model_class: Type) -> Type | None: """Look up a fitter for a model class using MRO fallback.""" for cls in model_class.__mro__: fitter_class = _FITTER_REGISTRY.get(cls) if fitter_class is not None: return fitter_class return None