from typing import TypeVar, Sequence, Type, Optional
from tadkit.base.tadlearner import TADLearner
from tadkit.base.typing import KWParams, ParamsDescription
Estimator = TypeVar("Estimator")
[docs]
def tadlearner_factory(
    Model: Type[Estimator],
    required_properties: Sequence[str],
    params_description: ParamsDescription,
    name: Optional[str] = None,
) -> Type[TADLearner]:
    """Wrap a sklearn anomaly detection model to a TADLearner.
    Args:
        Model: sklearn type model- to wrapp, possessing get_params, fit and score_samples methods.
        required_properties: The properties that the input data must satisfies.
        params_description: Description of the kwargs of the __init__ method that is exposed.
        name: The Name of the class. Default name if None.
    Returns:
        A subclass of TADLearner wrapping Model with given required_properties, params_description
            and __name__.
    """
    if name is None:
        name = Model.__name__ + "Learner"
    def __init__(self, **params: KWParams):
        Model.__init__(self, **params)
    Model.name = name
    Model.required_properties = required_properties
    Model.params_description = params_description
    return Model