Source code for NEDAS.models
from __future__ import annotations
import importlib
from typing import Type, TYPE_CHECKING
if TYPE_CHECKING:
from NEDAS.core.model import Model
registry = {
'lorenz96': 'Lorenz96Model',
'qg.fortran': 'QGFortranModel',
'qg.fortran.emulator': 'QGFortranModelEmulator',
'qg.python': 'QGPythonModel',
'vort2d': 'Vort2DModel',
'topaz.v5': 'Topaz5Model',
'nextsim.v1': 'NextsimModel',
'nextsim.dg': 'NextsimDGModel',
'wrf': 'WRFModel',
}
[docs]
def get_model_class(model_name: str) -> Type["Model"]:
"""
Factory function to return the correct Model subclass.
Args:
model_name (str): Model name
Returns:
Type["Model"]: Corresponding Model subclass
"""
model_name = model_name.lower()
if model_name not in registry.keys():
raise NotImplementedError(f"Model class not implemented for '{model_name}'")
module = importlib.import_module('NEDAS.models.'+model_name)
ModelClass = getattr(module, registry[model_name])
return ModelClass
__all__ = ['registry', 'get_model_class']