margin_estimator.py 1.32 KiB
from extreme_estimator.R_model.margin_model.abstract_margin_model import AbstractMarginModel
from extreme_estimator.estimator.abstract_estimator import AbstractEstimator
from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset


class AbstractMarginEstimator(AbstractEstimator):

    def __init__(self, dataset: AbstractDataset):
        super().__init__(dataset)
        assert self.dataset.maxima_gev is not None
        self._margin_function_fitted = None

    @property
    def margin_function_fitted(self):
        assert self._margin_function_fitted is not None, 'Error: estimator has not been not fitted yet'
        return self._margin_function_fitted


class PointWiseMarginEstimator(AbstractMarginEstimator):
    pass


class SmoothMarginEstimator(AbstractMarginEstimator):
    """# with different type of marginals: cosntant, linear...."""

    def __init__(self, dataset: AbstractDataset, margin_model: AbstractMarginModel):
        super().__init__(dataset)
        assert isinstance(margin_model, AbstractMarginModel)
        self.margin_model = margin_model

    def _fit(self):
        self._margin_function_fitted = self.margin_model.fitmargin_from_maxima_gev(maxima_gev=self.dataset.maxima_gev,
                                                                                   coordinates=self.dataset.coordinates)