Source code for leaspy.io.data.factory

"""Defines the noise model factory."""

from enum import Enum
from typing import Dict, Type, Union

from leaspy.exceptions import LeaspyDataInputError

from .abstract_dataframe_data_reader import AbstractDataframeDataReader
from .covariate_dataframe_data_reader import CovariateDataframeDataReader
from .event_dataframe_data_reader import EventDataframeDataReader
from .joint_dataframe_data_reader import JointDataframeDataReader
from .visit_dataframe_data_reader import VisitDataframeDataReader

__all__ = [
    "DataframeDataReaderNames",
    "DataframeDataReaderFactoryInput",
    "dataframe_data_reader_factory",
]


[docs] class DataframeDataReaderNames(Enum): """Enumeration defining the possible names for observation models.""" EVENT = "event" VISIT = "visit" JOINT = "joint" COVARIATE = "covariate"
[docs] @classmethod def from_string(cls, reader_name: str): """ Returns the enum member corresponding to the given string. Parameters ---------- reader_name : :obj:`str` The name of the reader, case-insensitive. Returns ------- :class:`~leaspy.io.data.factory.DataframeDataReaderNames` The corresponding enum member. Raises ------ :exc:`NotImplementedError` If the provided `reader_name` does not match any of the enum members and is not implemented. Give the valid names in the error message. """ try: return cls(reader_name.lower()) except ValueError: raise NotImplementedError( f"The requested ObservationModel {reader_name} is not implemented. " f"Valid observation model names are: {[elt.value for elt in cls]}." )
DataframeDataReaderFactoryInput = Union[ str, DataframeDataReaderNames, AbstractDataframeDataReader ] READERS: Dict[DataframeDataReaderNames, Type[AbstractDataframeDataReader]] = { DataframeDataReaderNames.EVENT: EventDataframeDataReader, DataframeDataReaderNames.VISIT: VisitDataframeDataReader, DataframeDataReaderNames.JOINT: JointDataframeDataReader, DataframeDataReaderNames.COVARIATE: CovariateDataframeDataReader, }
[docs] def dataframe_data_reader_factory( reader: DataframeDataReaderFactoryInput, **kwargs ) -> AbstractDataframeDataReader: """ Factory for observation models. Parameters ---------- model : :obj:`str` or :class:`~leaspy.models.obs_models` or :obj:`dict` [ :obj:`str`, ...] - If :class:`~leaspy.models.obs_models`, returns the instance. - If a string, then returns a new instance of the appropriate class (with optional parameters `kws`). - If a dictionary, it must contain the 'name' key and other initialization parameters. **kwargs Optional parameters for initializing the requested observation model when a string. Returns ------- :class:`~leaspy.io.data.abstract_dataframe_data_reader.AbstractDataframeDataReader` The desired observation model. Raises ------ :exc:`.LeaspyModelInputError` : If `model` is not supported. """ if isinstance(reader, AbstractDataframeDataReader): return reader if isinstance(reader, str): reader = DataframeDataReaderNames.from_string(reader) if isinstance(reader, DataframeDataReaderNames): return READERS[reader](**kwargs) raise LeaspyDataInputError( "The provided `data_type` should be a valid instance of `DataframeDataReader`, a string " f"among {[c.value for c in DataframeDataReaderNames]}." )