abstract_model.py 1.17 KiB
from extreme_estimator.extreme_models.utils import get_loaded_r


class AbstractModel(object):
    r = get_loaded_r()

    def __init__(self, params_start_fit=None, params_sample=None):
        self.default_params_start_fit = None
        self.default_params_sample = None
        self.user_params_start_fit = params_start_fit
        self.user_params_sample = params_sample

    @property
    def params_start_fit(self) -> dict:
        return self.merge_params(default_params=self.default_params_start_fit, input_params=self.user_params_start_fit)

    @property
    def params_sample(self) -> dict:
        return self.merge_params(default_params=self.default_params_sample, input_params=self.user_params_sample)

    @staticmethod
    def merge_params(default_params, input_params):
        assert default_params is not None, 'some default_params need to be specified'
        merged_params = default_params.copy()
        if input_params is not None:
            assert isinstance(default_params, dict) and isinstance(input_params, dict)
            assert set(input_params.keys()).issubset(set(default_params.keys()))
            merged_params.update(input_params)
        return merged_params