Source code for playnano.analysis.utils.loader
"""
Module for resolving and instantiating analysis modules.
Handles lookup in the built-in registry and via entry points
registered under the group 'playnano.analysis'.
"""
from __future__ import annotations
import importlib.metadata
from playnano.analysis import BUILTIN_ANALYSIS_MODULES
from playnano.analysis.base import AnalysisModule
[docs]
def load_analysis_module(name: str) -> AnalysisModule:
"""
Load and instantiate an AnalysisModule by name.
Parameters
----------
name : str
Name of the analysis module to load.
Returns
-------
AnalysisModule
Instantiated module.
Raises
------
ValueError
If the module cannot be found.
TypeError
If the loaded object is not a subclass of AnalysisModule.
"""
cls = BUILTIN_ANALYSIS_MODULES.get(name)
if cls is None:
eps = importlib.metadata.entry_points().select(
group="playnano.analysis", name=name
)
if not eps:
raise ValueError(
f"Analysis module '{name}' not found in registry or entry points"
)
cls = eps[0].load()
instance = cls()
if not isinstance(instance, AnalysisModule):
raise TypeError(f"Loaded '{name}' is not a subclass of AnalysisModule")
return instance