Source code for atomscale.timeseries.registry

"""Registry for data providers."""

from __future__ import annotations

from atomscale.similarity.provider import SimilarityTrajectoryProvider

from .ellipsometry import EllipsometryProvider
from .optical import OpticalProvider
from .provider import TimeseriesProvider
from .recipe import RecipeProvider
from .rheed import RHEEDProvider
from .tool_state import ToolStateProvider

_PROVIDER_CLASSES: dict[str, type[TimeseriesProvider]] = {
    RHEEDProvider.TYPE: RHEEDProvider,
    OpticalProvider.TYPE: OpticalProvider,
    ToolStateProvider.TYPE: ToolStateProvider,
    # Accept data catalogue entries created before the backend enum migration.
    "metrology": ToolStateProvider,
    # Recipe (process plan) is a distinct first-class type, served from its own
    # /recipe endpoint — not folded into tool-state.
    RecipeProvider.TYPE: RecipeProvider,
    EllipsometryProvider.TYPE: EllipsometryProvider,
    SimilarityTrajectoryProvider.TYPE: SimilarityTrajectoryProvider,
}


[docs] def get_provider(data_type: str) -> TimeseriesProvider: try: return _PROVIDER_CLASSES[data_type]() # type: ignore[call-arg] except KeyError: raise ValueError(f"Unsupported timeseries type: '{data_type}'") # noqa: B904