Source code for curepy.retrieval_methods.retrieval_method_factory
"""Factory design to generate retrieval objects"""
from curepy.retrieval_methods.base import BaseRetrieval
from curepy.retrieval_methods.mcmc import MCMC
from curepy.retrieval_methods.optimal_estimation import OE
from typing import Union
RETRIEVAL_HANDLERS = {"mcmc": MCMC, "oe": OE}
[docs]
class RetrievalFactory:
def __init__(self) -> None:
"""
Initialise the factory with the default set of retrieval handlers.
"""
self.retrieval_objects = RETRIEVAL_HANDLERS
[docs]
def make_retrieval_object(
self, name: Union[str, BaseRetrieval], *args, **kwargs
) -> BaseRetrieval:
"""
Return the specified retrieval object.
:param name: Retrieval method identifier. May be a string key
(e.g. ``"mcmc"``, ``"oe"``) or a
:class:`~curepy.retrieval_methods.base.BaseRetrieval` subclass.
:returns: Instantiated retrieval method object.
"""
if name in self.retrieval_objects.values():
return name(*args, **kwargs)
elif name.lower() in self.retrieval_objects.keys():
return self.retrieval_objects[name.lower()](*args, **kwargs)
else:
raise ValueError(
f"The provided retrieval name ({name}) is not an implemented retrieval method {self.retrieval_objects.keys()}"
)