From 486ab59d45c828dd615e952b3a74d2f1a019fd29 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Wed, 16 Oct 2019 11:28:22 +0200 Subject: [PATCH] [EXTREME ESTIMATOR][MARGIN MODEL] refactor linear margin model folder organization. refactor names in univariate trend analysis --- .../utils_hypercube.py | 5 +- .../study_visualization/study_visualizer.py | 7 +- .../stations_data/main_spatial_comparison.py | 2 +- .../regression_margin/regression_margin.py | 2 +- .../simulation/lin_space2_simulation.py | 2 +- experiment/simulation/lin_space_simulation.py | 2 +- .../trend_analysis/non_stationary_trends.py | 6 +- ...bstract_comparison_non_stationary_model.py | 8 +- .../abstract_gev_trend_test.py | 57 +++++----- .../gev_trend_test_one_parameter.py | 6 +- .../gev_trend_test_two_parameters.py | 6 +- .../trend_analysis/univariate_test/utils.py | 10 +- .../estimator/abstract_estimator.py | 5 +- .../full_estimator/abstract_full_estimator.py | 2 +- .../full_estimator_for_simulation.py | 2 +- .../abstract_margin_estimator.py | 5 +- .../margin_estimator_for_simulation.py | 2 +- .../linear_margin_model/__init__.py | 0 .../abstract_temporal_linear_margin_model.py | 68 ++++++++++++ .../linear_margin_model.py | 0 .../temporal_linear_margin_models.py | 65 +++++++++++ .../temporal_linear_margin_model.py | 103 ------------------ .../extreme_models/result_from_fit.py | 42 +++++++ .../test_margin_function.py | 2 +- .../test_extreme_models/test_margin_model.py | 9 +- .../test_margin_temporal.py | 2 +- .../test_margin_temporal_transformed.py | 2 +- .../test_max_stable_temporal.py | 2 +- .../test_gev/test_gev_temporal.py | 2 +- .../test_dataset.py | 3 +- .../test_slicer.py | 2 +- .../test_fitmaxstab_with_margin.py | 2 +- .../test_rmaxstab_with_margin.py | 2 +- test/test_utils.py | 4 +- utils.py | 3 + 35 files changed, 253 insertions(+), 189 deletions(-) create mode 100644 extreme_estimator/extreme_models/margin_model/linear_margin_model/__init__.py create mode 100644 extreme_estimator/extreme_models/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py rename extreme_estimator/extreme_models/margin_model/{ => linear_margin_model}/linear_margin_model.py (100%) create mode 100644 extreme_estimator/extreme_models/margin_model/linear_margin_model/temporal_linear_margin_models.py delete mode 100644 extreme_estimator/extreme_models/margin_model/temporal_linear_margin_model.py diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/utils_hypercube.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/utils_hypercube.py index 267d4e35..608b4842 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/utils_hypercube.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/utils_hypercube.py @@ -12,7 +12,8 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat from utils import get_display_name_from_object_type -def load_quantity_visualizer(quantity_hypercube_class, altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, +def load_quantity_visualizer(quantity_hypercube_class, altitudes, last_starting_year, nb_data_reduced_for_speed, + only_first_one, save_to_file, study_classes, trend_test_class): visualizers = [StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) for study in study_iterator_global(study_classes=study_classes, only_first_one=only_first_one, @@ -47,7 +48,7 @@ def load_altitude_visualizer(altitude_hypercube_class, altitudes, last_starting_ last_starting_year=last_starting_year, first_starting_year=first_starting_year, exact_starting_year=exact_starting_year, - verbose=verbose, + verbose=verbose, ) assert isinstance(visualizer, AltitudeHypercubeVisualizer) return visualizer diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py index faa2ef59..be39035a 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/study_visualizer.py @@ -1,12 +1,10 @@ import os import os.path as op from collections import OrderedDict -from multiprocessing.pool import Pool from random import sample, seed from typing import Dict import math -import matplotlib import matplotlib.pyplot as plt import numpy as np import pandas as pd @@ -15,7 +13,6 @@ import seaborn as sns from experiment.meteo_france_data.scm_models_data.abstract_extended_study import AbstractExtendedStudy from experiment.trend_analysis.abstract_score import MeanScore, AbstractTrendScore from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy -from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from experiment.trend_analysis.non_stationary_trends import \ ConditionalIndedendenceLocationTrendTest, MaxStableLocationTrendTest, IndependenceLocationTrendTest @@ -25,7 +22,7 @@ from experiment.utils import average_smoothing_with_sliding_window from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ LinearStationaryMarginModel from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \ AbstractMarginFunction @@ -46,7 +43,7 @@ from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from spatio_temporal_dataset.spatio_temporal_observations.annual_maxima_observations import AnnualMaxima from test.test_utils import load_test_max_stable_models from utils import get_display_name_from_object_type, VERSION_TIME, float_to_str_with_only_some_significant_digits, \ - cached_property, NB_CORES + cached_property BLOCK_MAXIMA_DISPLAY_NAME = 'block maxima ' diff --git a/experiment/meteo_france_data/stations_data/main_spatial_comparison.py b/experiment/meteo_france_data/stations_data/main_spatial_comparison.py index 592c4750..36f6dc46 100644 --- a/experiment/meteo_france_data/stations_data/main_spatial_comparison.py +++ b/experiment/meteo_france_data/stations_data/main_spatial_comparison.py @@ -1,5 +1,5 @@ from experiment.meteo_france_data.stations_data.comparison_analysis import ComparisonAnalysis -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ BetweenZeroAndOneNormalization from utils import get_display_name_from_object_type diff --git a/experiment/regression_margin/regression_margin.py b/experiment/regression_margin/regression_margin.py index 31a65482..18cc9a57 100644 --- a/experiment/regression_margin/regression_margin.py +++ b/experiment/regression_margin/regression_margin.py @@ -2,7 +2,7 @@ import numpy as np from extreme_estimator.estimator.full_estimator.abstract_full_estimator import FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ ConstantMarginModel from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from extreme_estimator.margin_fits.gev.gev_params import GevParams diff --git a/experiment/simulation/lin_space2_simulation.py b/experiment/simulation/lin_space2_simulation.py index b25c00b8..271501de 100644 --- a/experiment/simulation/lin_space2_simulation.py +++ b/experiment/simulation/lin_space2_simulation.py @@ -2,7 +2,7 @@ from experiment.simulation.abstract_simulation import AbstractSimulation from extreme_estimator.estimator.full_estimator.full_estimator_for_simulation import FULL_ESTIMATORS_FOR_SIMULATION from extreme_estimator.estimator.margin_estimator.margin_estimator_for_simulation import \ MARGIN_ESTIMATORS_FOR_SIMULATION -from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import ConstantMarginModel from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from extreme_estimator.margin_fits.gev.gev_params import GevParams from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates diff --git a/experiment/simulation/lin_space_simulation.py b/experiment/simulation/lin_space_simulation.py index b00ec2d7..4a30b96e 100644 --- a/experiment/simulation/lin_space_simulation.py +++ b/experiment/simulation/lin_space_simulation.py @@ -1,5 +1,5 @@ from experiment.simulation.abstract_simulation import AbstractSimulation -from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import ConstantMarginModel from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from extreme_estimator.margin_fits.gev.gev_params import GevParams from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates diff --git a/experiment/trend_analysis/non_stationary_trends.py b/experiment/trend_analysis/non_stationary_trends.py index e1eecad9..0334c3c2 100644 --- a/experiment/trend_analysis/non_stationary_trends.py +++ b/experiment/trend_analysis/non_stationary_trends.py @@ -10,11 +10,11 @@ from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin, AbstractFullEstimator from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator, \ AbstractMarginEstimator -from extreme_estimator.extreme_models.margin_model.linear_margin_model import \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import \ LinearStationaryMarginModel, LinearNonStationaryLocationMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import \ + StationaryStationModel, NonStationaryLocationStationModel from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import StationaryStationModel, \ - NonStationaryLocationStationModel from extreme_estimator.extreme_models.utils import OptimizationConstants from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from utils import get_display_name_from_object_type diff --git a/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py b/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py index c9fb5671..9bff527b 100644 --- a/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py +++ b/experiment/trend_analysis/univariate_test/abstract_comparison_non_stationary_model.py @@ -1,7 +1,7 @@ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest from experiment.trend_analysis.univariate_test.gev_trend_test_two_parameters import GevLocationAndScaleTrendTest -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import \ - NonStationaryLocationAndScaleModel, NonStationaryLocationStationModel, NonStationaryScaleStationModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import \ + NonStationaryLocationStationModel, NonStationaryScaleStationModel import numpy as np @@ -28,10 +28,10 @@ class AbstractComparisonNonStationaryModelOneParameter(AbstractComparisonNonStat class ComparisonAgainstMu(AbstractComparisonNonStationaryModelOneParameter, GevLocationAndScaleTrendTest): def __init__(self, years, maxima, starting_year): - super().__init__(years, maxima, starting_year, stationary_model_class=NonStationaryLocationStationModel) + super().__init__(years, maxima, starting_year, constrained_model_class=NonStationaryLocationStationModel) class ComparisonAgainstSigma(AbstractComparisonNonStationaryModelOneParameter, GevLocationAndScaleTrendTest): def __init__(self, years, maxima, starting_year): - super().__init__(years, maxima, starting_year, stationary_model_class=NonStationaryScaleStationModel) + super().__init__(years, maxima, starting_year, constrained_model_class=NonStationaryScaleStationModel) diff --git a/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py b/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py index 1db2c6ee..f9a59b27 100644 --- a/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py +++ b/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py @@ -5,9 +5,9 @@ from scipy.stats import chi2 from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator -from extreme_estimator.extreme_models.margin_model.param_function.linear_coef import LinearCoef -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import StationaryStationModel, \ - NonStationaryLocationStationModel, NonStationaryScaleStationModel, NonStationaryShapeStationModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import AbstractTemporalLinearMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import \ + StationaryStationModel from extreme_estimator.extreme_models.utils import SafeRunException from extreme_estimator.margin_fits.gev.gev_params import GevParams from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates @@ -26,25 +26,26 @@ class AbstractGevTrendTest(AbstractUnivariateTest): quantile_for_strength = 0.98 nb_years_for_quantile_evolution = 10 - def __init__(self, years, maxima, starting_year, non_stationary_model_class, stationary_model_class=StationaryStationModel): + def __init__(self, years, maxima, starting_year, unconstrained_model_class, constrained_model_class=StationaryStationModel, + fit_method=AbstractTemporalLinearMarginModel.ISMEV_GEV_FIT_METHOD_STR): super().__init__(years, maxima, starting_year) + self.fit_method = fit_method + # Load observations, coordinates and datasets df = pd.DataFrame({AbstractCoordinates.COORDINATE_T: years}) df_maxima_gev = pd.DataFrame(maxima, index=df.index) observations = AbstractSpatioTemporalObservations(df_maxima_gev=df_maxima_gev) - self.coordinates = AbstractTemporalCoordinates.from_df(df, - transformation_class=CenteredScaledNormalization) # type: AbstractTemporalCoordinates + self.coordinates = AbstractTemporalCoordinates.from_df(df, transformation_class=CenteredScaledNormalization) self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates) try: - # todo: rename stationary -> standard, non-stationary -> more complex model - # Fit stationary model - stationary_model = stationary_model_class(self.coordinates, starting_point=self.starting_year) - self.stationary_estimator = LinearMarginEstimator(self.dataset, stationary_model) - self.stationary_estimator.fit() - # Fit non stationary model - non_stationary_model = non_stationary_model_class(self.coordinates, starting_point=self.starting_year) - self.non_stationary_estimator = LinearMarginEstimator(self.dataset, non_stationary_model) - self.non_stationary_estimator.fit() + # Fit constrained model + constrained_model = constrained_model_class(self.coordinates, starting_point=self.starting_year, fit_method=self.fit_method) + self.constrained_estimator = LinearMarginEstimator(self.dataset, constrained_model) + self.constrained_estimator.fit() + # Fit unconstrained model + unconstrained_model = unconstrained_model_class(self.coordinates, starting_point=self.starting_year, fit_method=self.fit_method) + self.unconstrained_estimator = LinearMarginEstimator(self.dataset, unconstrained_model) + self.unconstrained_estimator.fit() self.crashed = False except SafeRunException: self.crashed = True @@ -81,28 +82,28 @@ class AbstractGevTrendTest(AbstractUnivariateTest): @property def likelihood_ratio(self): - return self.non_stationary_deviance - self.stationary_deviance + return self.unconstrained_model_deviance - self.constrained_model_deviance @property - def stationary_deviance(self): + def constrained_model_deviance(self): if self.crashed: return np.nan else: - return self.stationary_estimator.result_from_fit.deviance + return self.constrained_estimator.result_from_fit.deviance @property - def non_stationary_deviance(self): + def unconstrained_model_deviance(self): if self.crashed: return np.nan else: - return self.non_stationary_estimator.result_from_fit.deviance + return self.unconstrained_estimator.result_from_fit.deviance @property - def non_stationary_nllh(self): + def unconstained_nllh(self): if self.crashed: return np.nan else: - return self.non_stationary_estimator.result_from_fit.nllh + return self.unconstrained_estimator.result_from_fit.nllh # Evolution of the GEV parameters and corresponding quantiles @@ -111,20 +112,20 @@ class AbstractGevTrendTest(AbstractUnivariateTest): return np.sign(self.test_trend_slope_strength) def get_non_stationary_linear_coef(self, gev_param_name: str): - return self.non_stationary_estimator.margin_function_fitted.get_coef(gev_param_name, - AbstractCoordinates.COORDINATE_T) + return self.unconstrained_estimator.margin_function_fitted.get_coef(gev_param_name, + AbstractCoordinates.COORDINATE_T) @cached_property def non_stationary_constant_gev_params(self) -> GevParams: # Constant parameters correspond to the gev params in 1958 - return self.non_stationary_estimator.margin_function_fitted.get_gev_params(coordinate=np.array([1958]), - is_transformed=False) + return self.unconstrained_estimator.margin_function_fitted.get_gev_params(coordinate=np.array([1958]), + is_transformed=False) @cached_property def stationary_constant_gev_params(self) -> GevParams: # Constant parameters correspond to any gev params - return self.stationary_estimator.margin_function_fitted.get_gev_params(coordinate=np.array([1958]), - is_transformed=False) + return self.constrained_estimator.margin_function_fitted.get_gev_params(coordinate=np.array([1958]), + is_transformed=False) @property diff --git a/experiment/trend_analysis/univariate_test/gev_trend_test_one_parameter.py b/experiment/trend_analysis/univariate_test/gev_trend_test_one_parameter.py index f4582a5b..f2628318 100644 --- a/experiment/trend_analysis/univariate_test/gev_trend_test_one_parameter.py +++ b/experiment/trend_analysis/univariate_test/gev_trend_test_one_parameter.py @@ -1,13 +1,13 @@ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import \ NonStationaryLocationStationModel, NonStationaryScaleStationModel, NonStationaryShapeStationModel from extreme_estimator.margin_fits.gev.gev_params import GevParams class GevTrendTestOneParameter(AbstractGevTrendTest): - def __init__(self, years, maxima, starting_year, non_stationary_model_class, gev_param_name): - super().__init__(years, maxima, starting_year, non_stationary_model_class) + def __init__(self, years, maxima, starting_year, unconstrained_model_class, gev_param_name): + super().__init__(years, maxima, starting_year, unconstrained_model_class) self.gev_param_name = gev_param_name @property diff --git a/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py b/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py index c2b0cbca..84db815a 100644 --- a/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py +++ b/experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py @@ -1,5 +1,5 @@ from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import \ NonStationaryLocationAndScaleModel, StationaryStationModel from extreme_estimator.margin_fits.gev.gev_params import GevParams @@ -13,9 +13,9 @@ class GevTrendTestTwoParameters(AbstractGevTrendTest): class GevLocationAndScaleTrendTest(GevTrendTestTwoParameters): - def __init__(self, years, maxima, starting_year, stationary_model_class=StationaryStationModel): + def __init__(self, years, maxima, starting_year, constrained_model_class=StationaryStationModel): super().__init__(years, maxima, starting_year, - NonStationaryLocationAndScaleModel, stationary_model_class=stationary_model_class) + NonStationaryLocationAndScaleModel, constrained_model_class=constrained_model_class) @property def mu1(self): diff --git a/experiment/trend_analysis/univariate_test/utils.py b/experiment/trend_analysis/univariate_test/utils.py index 18e3aafe..4574992d 100644 --- a/experiment/trend_analysis/univariate_test/utils.py +++ b/experiment/trend_analysis/univariate_test/utils.py @@ -3,20 +3,22 @@ from multiprocessing.pool import Pool import numpy as np from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest +from extreme_estimator.extreme_models.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import \ + AbstractTemporalLinearMarginModel from utils import NB_CORES -def compute_gev_change_point_test_result(smooth_maxima, starting_year, trend_test_class, years): +def compute_gev_change_point_test_result(smooth_maxima, starting_year, trend_test_class, years, fit_method=AbstractTemporalLinearMarginModel.ISMEV_GEV_FIT_METHOD_STR): trend_test = trend_test_class(years, smooth_maxima, starting_year) # type: AbstractGevTrendTest assert isinstance(trend_test, AbstractGevTrendTest) return trend_test.test_trend_type, \ trend_test.test_trend_slope_strength, \ - trend_test.non_stationary_nllh, \ + trend_test.unconstained_nllh, \ trend_test.test_trend_constant_quantile, \ trend_test.mean_difference_same_sign_as_slope_strenght, \ trend_test.variance_difference_same_sign_as_slope_strenght, \ - trend_test.non_stationary_deviance, \ - trend_test.stationary_deviance + trend_test.unconstrained_model_deviance, \ + trend_test.constrained_model_deviance def compute_gev_change_point_test_results(multiprocessing, maxima, starting_years, trend_test_class, diff --git a/extreme_estimator/estimator/abstract_estimator.py b/extreme_estimator/estimator/abstract_estimator.py index 73f453ea..ae736464 100644 --- a/extreme_estimator/estimator/abstract_estimator.py +++ b/extreme_estimator/estimator/abstract_estimator.py @@ -1,13 +1,10 @@ import time -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearMarginModel -from extreme_estimator.extreme_models.margin_model.margin_function.parametric_margin_function import \ - ParametricMarginFunction +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel from extreme_estimator.extreme_models.result_from_fit import ResultFromFit from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \ AbstractMarginFunction from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction -from extreme_estimator.extreme_models.margin_model.param_function.linear_coef import LinearCoef from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset diff --git a/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py b/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py index 38b59b5b..cdce4f7b 100644 --- a/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py +++ b/extreme_estimator/estimator/full_estimator/abstract_full_estimator.py @@ -3,7 +3,7 @@ from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator impo from extreme_estimator.estimator.max_stable_estimator.abstract_max_stable_estimator import MaxStableEstimator from extreme_estimator.extreme_models.margin_model.abstract_margin_model import AbstractMarginModel from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import AbstractMaxStableModel from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset diff --git a/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py b/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py index dd436b01..811db6d3 100644 --- a/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py +++ b/extreme_estimator/estimator/full_estimator/full_estimator_for_simulation.py @@ -1,6 +1,6 @@ from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ ConstantMarginModel from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset diff --git a/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py b/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py index 220d4b57..03aa7d4b 100644 --- a/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py +++ b/extreme_estimator/estimator/margin_estimator/abstract_margin_estimator.py @@ -1,10 +1,7 @@ from abc import ABC from extreme_estimator.estimator.abstract_estimator import AbstractEstimator -from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \ - AbstractMarginFunction -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearMarginModel, \ - LinearAllParametersAllDimsMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset diff --git a/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py b/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py index 0737759e..311fba79 100644 --- a/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py +++ b/extreme_estimator/estimator/margin_estimator/margin_estimator_for_simulation.py @@ -1,5 +1,5 @@ from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ ConstantMarginModel from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset diff --git a/extreme_estimator/extreme_models/margin_model/linear_margin_model/__init__.py b/extreme_estimator/extreme_models/margin_model/linear_margin_model/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extreme_estimator/extreme_models/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py b/extreme_estimator/extreme_models/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py new file mode 100644 index 00000000..5f3eefff --- /dev/null +++ b/extreme_estimator/extreme_models/margin_model/linear_margin_model/abstract_temporal_linear_margin_model.py @@ -0,0 +1,68 @@ +import numpy as np +import pandas as pd + +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel +from extreme_estimator.extreme_models.result_from_fit import ResultFromFit, ResultFromIsmev, ResultFromExtremes +from extreme_estimator.extreme_models.utils import r, ro, get_null +from extreme_estimator.extreme_models.utils import safe_run_r_estimator +from extreme_estimator.margin_fits.gev.gev_params import GevParams +from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates + + +class AbstractTemporalLinearMarginModel(LinearMarginModel): + """Linearity only with respect to the temporal coordinates""" + ISMEV_GEV_FIT_METHOD_STR = 'isMev.gev.fit' + EXTREMES_FEVD_BAYESIAN_FIT_METHOD_STR = 'extRemes.fevd.Bayesian' + + def __init__(self, coordinates: AbstractCoordinates, use_start_value=False, params_start_fit=None, + params_sample=None, starting_point=None, fit_method='isMev.gev.fit'): + super().__init__(coordinates, use_start_value, params_start_fit, params_sample, starting_point) + assert fit_method in [self.ISMEV_GEV_FIT_METHOD_STR, self.EXTREMES_FEVD_BAYESIAN_FIT_METHOD_STR] + self.fit_method = fit_method + + def fitmargin_from_maxima_gev(self, data: np.ndarray, df_coordinates_spat: pd.DataFrame, + df_coordinates_temp: pd.DataFrame) -> ResultFromFit: + assert data.shape[1] == len(df_coordinates_temp.values) + if self.fit_method == self.ISMEV_GEV_FIT_METHOD_STR: + return self.ismev_gev_fit(data, df_coordinates_temp) + if self.fit_method == self.EXTREMES_FEVD_BAYESIAN_FIT_METHOD_STR: + return self.extremes_fevd_bayesian_fit(data, df_coordinates_temp) + + # Gev Fit with isMev package + + def ismev_gev_fit(self, data: np.ndarray, df_coordinates_temp: pd.DataFrame) -> ResultFromIsmev: + res = safe_run_r_estimator(function=r('gev.fit'), use_start=self.use_start_value, + xdat=ro.FloatVector(data[0]), y=df_coordinates_temp.values, mul=self.mul, + sigl=self.sigl, shl=self.shl) + return ResultFromIsmev(res, self.margin_function_start_fit.gev_param_name_to_dims) + + # Gev fit with extRemes package + + def extremes_fevd_bayesian_fit(self, data, df_coordinates_temp) -> ResultFromExtremes: + res = safe_run_r_estimator(function=r('fevd_fixed'), use_start=self.use_start_value, + xdat=ro.FloatVector(data[0]), y=df_coordinates_temp.values, mul=self.mul, + sigl=self.sigl, shl=self.shl) + return ResultFromExtremes(res, self.margin_function_start_fit.gev_param_name_to_dims) + + # Default arguments for all methods + + @property + def mul(self): + return get_null() + + @property + def sigl(self): + return get_null() + + @property + def shl(self): + return get_null() + + @property + def siglink(self): + return r('identity') + + + + + diff --git a/extreme_estimator/extreme_models/margin_model/linear_margin_model.py b/extreme_estimator/extreme_models/margin_model/linear_margin_model/linear_margin_model.py similarity index 100% rename from extreme_estimator/extreme_models/margin_model/linear_margin_model.py rename to extreme_estimator/extreme_models/margin_model/linear_margin_model/linear_margin_model.py diff --git a/extreme_estimator/extreme_models/margin_model/linear_margin_model/temporal_linear_margin_models.py b/extreme_estimator/extreme_models/margin_model/linear_margin_model/temporal_linear_margin_models.py new file mode 100644 index 00000000..fb7eaf39 --- /dev/null +++ b/extreme_estimator/extreme_models/margin_model/linear_margin_model/temporal_linear_margin_models.py @@ -0,0 +1,65 @@ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import \ + AbstractTemporalLinearMarginModel +from extreme_estimator.extreme_models.utils import r +from extreme_estimator.margin_fits.gev.gev_params import GevParams + + +class StationaryStationModel(AbstractTemporalLinearMarginModel): + + def load_margin_functions(self, gev_param_name_to_dims=None): + super().load_margin_functions({}) + + +class NonStationaryLocationStationModel(AbstractTemporalLinearMarginModel): + + def load_margin_functions(self, gev_param_name_to_dims=None): + super().load_margin_functions({GevParams.LOC: [self.coordinates.idx_temporal_coordinates]}) + + @property + def mul(self): + return 1 + + +class NonStationaryScaleStationModel(AbstractTemporalLinearMarginModel): + + def load_margin_functions(self, gev_param_name_to_dims=None): + super().load_margin_functions({GevParams.SCALE: [self.coordinates.idx_temporal_coordinates]}) + + @property + def sigl(self): + return 1 + + +class NonStationaryLogScaleStationModel(NonStationaryScaleStationModel): + + def load_margin_functions(self, gev_param_name_to_dims=None): + super().load_margin_functions({GevParams.SCALE: [self.coordinates.idx_temporal_coordinates]}) + + @property + def siglink(self): + return r('exp') + + +class NonStationaryShapeStationModel(AbstractTemporalLinearMarginModel): + + def load_margin_functions(self, gev_param_name_to_dims=None): + super().load_margin_functions({GevParams.SHAPE: [self.coordinates.idx_temporal_coordinates]}) + + @property + def shl(self): + return 1 + + +class NonStationaryLocationAndScaleModel(AbstractTemporalLinearMarginModel): + + def load_margin_functions(self, gev_param_name_to_dims=None): + super().load_margin_functions({GevParams.LOC: [self.coordinates.idx_temporal_coordinates], + GevParams.SCALE: [self.coordinates.idx_temporal_coordinates]}) + + @property + def mul(self): + return 1 + + @property + def sigl(self): + return 1 \ No newline at end of file diff --git a/extreme_estimator/extreme_models/margin_model/temporal_linear_margin_model.py b/extreme_estimator/extreme_models/margin_model/temporal_linear_margin_model.py deleted file mode 100644 index 156558e1..00000000 --- a/extreme_estimator/extreme_models/margin_model/temporal_linear_margin_model.py +++ /dev/null @@ -1,103 +0,0 @@ -import numpy as np -import pandas as pd - -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearMarginModel -from extreme_estimator.extreme_models.result_from_fit import ResultFromFit, ResultFromIsmev -from extreme_estimator.extreme_models.utils import r, ro, get_null -from extreme_estimator.extreme_models.utils import safe_run_r_estimator -from extreme_estimator.margin_fits.gev.gev_params import GevParams -from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates - - -class TemporalLinearMarginModel(LinearMarginModel): - # Linearity only with respect to the temporal coordinates - - def __init__(self, coordinates: AbstractCoordinates, use_start_value=False, params_start_fit=None, - params_sample=None, starting_point=None): - super().__init__(coordinates, use_start_value, params_start_fit, params_sample, starting_point) - - def fitmargin_from_maxima_gev(self, data: np.ndarray, df_coordinates_spat: pd.DataFrame, - df_coordinates_temp: pd.DataFrame) -> ResultFromFit: - # Gev Fit with isMev package - assert data.shape[1] == len(df_coordinates_temp.values) - res = safe_run_r_estimator(function=r('gev.fit'), use_start=self.use_start_value, - xdat=ro.FloatVector(data[0]), y=df_coordinates_temp.values, mul=self.mul, - sigl=self.sigl, shl=self.shl) - return ResultFromIsmev(res, self.margin_function_start_fit.gev_param_name_to_dims) - - @property - def mul(self): - return get_null() - - @property - def sigl(self): - return get_null() - - @property - def shl(self): - return get_null() - - @property - def siglink(self): - return r('identity') - - -class StationaryStationModel(TemporalLinearMarginModel): - - def load_margin_functions(self, gev_param_name_to_dims=None): - super().load_margin_functions({}) - - -class NonStationaryLocationStationModel(TemporalLinearMarginModel): - - def load_margin_functions(self, gev_param_name_to_dims=None): - super().load_margin_functions({GevParams.LOC: [self.coordinates.idx_temporal_coordinates]}) - - @property - def mul(self): - return 1 - - -class NonStationaryScaleStationModel(TemporalLinearMarginModel): - - def load_margin_functions(self, gev_param_name_to_dims=None): - super().load_margin_functions({GevParams.SCALE: [self.coordinates.idx_temporal_coordinates]}) - - @property - def sigl(self): - return 1 - - -class NonStationaryLogScaleStationModel(NonStationaryScaleStationModel): - - def load_margin_functions(self, gev_param_name_to_dims=None): - super().load_margin_functions({GevParams.SCALE: [self.coordinates.idx_temporal_coordinates]}) - - @property - def siglink(self): - return r('exp') - - -class NonStationaryShapeStationModel(TemporalLinearMarginModel): - - def load_margin_functions(self, gev_param_name_to_dims=None): - super().load_margin_functions({GevParams.SHAPE: [self.coordinates.idx_temporal_coordinates]}) - - @property - def shl(self): - return 1 - - -class NonStationaryLocationAndScaleModel(TemporalLinearMarginModel): - - def load_margin_functions(self, gev_param_name_to_dims=None): - super().load_margin_functions({GevParams.LOC: [self.coordinates.idx_temporal_coordinates], - GevParams.SCALE: [self.coordinates.idx_temporal_coordinates]}) - - @property - def mul(self): - return 1 - - @property - def sigl(self): - return 1 diff --git a/extreme_estimator/extreme_models/result_from_fit.py b/extreme_estimator/extreme_models/result_from_fit.py index c3170e18..212ce05f 100644 --- a/extreme_estimator/extreme_models/result_from_fit.py +++ b/extreme_estimator/extreme_models/result_from_fit.py @@ -92,6 +92,48 @@ class ResultFromIsmev(ResultFromFit): return convertFloatVector_to_float(self.name_to_value['conv']) == 0 +class ResultFromExtremes(ResultFromFit): + + def __init__(self, result_from_fit: robjects.ListVector, gev_param_name_to_dim=None) -> None: + super().__init__(result_from_fit) + self.gev_param_name_to_dim = gev_param_name_to_dim + + @property + def margin_coef_dict(self): + assert self.gev_param_name_to_dim is not None + # Build the Coeff dict from gev_param_name_to_dim + coef_dict = {} + i = 0 + mle_values = self.name_to_value['mle'] + for gev_param_name in GevParams.PARAM_NAMES: + # Add intercept + intercept_coef_name = LinearCoef.coef_template_str(gev_param_name, LinearCoef.INTERCEPT_NAME).format(1) + coef_dict[intercept_coef_name] = mle_values[i] + i += 1 + # Add a potential linear temporal trend + if gev_param_name in self.gev_param_name_to_dim: + temporal_coef_name = LinearCoef.coef_template_str(gev_param_name, + AbstractCoordinates.COORDINATE_T).format(1) + coef_dict[temporal_coef_name] = mle_values[i] + i += 1 + return coef_dict + + @property + def all_parameters(self): + return self.margin_coef_dict + + @property + def nllh(self): + return convertFloatVector_to_float(self.name_to_value['nllh']) + + @property + def deviance(self): + return - 2 * self.nllh + + @property + def convergence(self) -> str: + return convertFloatVector_to_float(self.name_to_value['conv']) == 0 + class ResultFromSpatialExtreme(ResultFromFit): """ Handler from any result with the result of a fit functions from the package Spatial Extreme diff --git a/test/test_extreme_estimator/test_extreme_models/test_margin_function.py b/test/test_extreme_estimator/test_extreme_models/test_margin_function.py index 56722109..1d1fd8ea 100644 --- a/test/test_extreme_estimator/test_extreme_models/test_margin_function.py +++ b/test/test_extreme_estimator/test_extreme_models/test_margin_function.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \ AbstractMarginFunction from extreme_estimator.extreme_models.margin_model.margin_function.linear_margin_function import LinearMarginFunction diff --git a/test/test_extreme_estimator/test_extreme_models/test_margin_model.py b/test/test_extreme_estimator/test_extreme_models/test_margin_model.py index f317c22a..e146af2c 100644 --- a/test/test_extreme_estimator/test_extreme_models/test_margin_model.py +++ b/test/test_extreme_estimator/test_extreme_models/test_margin_model.py @@ -1,12 +1,7 @@ import unittest -import numpy as np - -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel -from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \ - AbstractMarginFunction -from extreme_estimator.extreme_models.margin_model.spline_margin_model import ConstantSplineMarginModel, \ - SplineMarginModel, Degree1SplineMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel +from extreme_estimator.extreme_models.margin_model.spline_margin_model import Degree1SplineMarginModel from extreme_estimator.margin_fits.gev.gev_params import GevParams from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_1D import LinSpaceSpatialCoordinates from spatio_temporal_dataset.coordinates.spatial_coordinates.coordinates_2D import LinSpaceSpatial2DCoordinates diff --git a/test/test_extreme_estimator/test_extreme_models/test_margin_temporal.py b/test/test_extreme_estimator/test_extreme_models/test_margin_temporal.py index 17bb019a..affe7ad8 100644 --- a/test/test_extreme_estimator/test_extreme_models/test_margin_temporal.py +++ b/test/test_extreme_estimator/test_extreme_models/test_margin_temporal.py @@ -3,7 +3,7 @@ import unittest import numpy as np from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ LinearStationaryMarginModel from extreme_estimator.extreme_models.utils import set_seed_for_test from spatio_temporal_dataset.dataset.simulation_dataset import MarginDataset diff --git a/test/test_extreme_estimator/test_extreme_models/test_margin_temporal_transformed.py b/test/test_extreme_estimator/test_extreme_models/test_margin_temporal_transformed.py index df2e0b1c..d3a9ca08 100644 --- a/test/test_extreme_estimator/test_extreme_models/test_margin_temporal_transformed.py +++ b/test/test_extreme_estimator/test_extreme_models/test_margin_temporal_transformed.py @@ -3,7 +3,7 @@ import unittest import numpy as np from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ LinearStationaryMarginModel from extreme_estimator.extreme_models.utils import set_seed_for_test from spatio_temporal_dataset.coordinates.spatio_temporal_coordinates.abstract_spatio_temporal_coordinates import \ diff --git a/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py b/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py index e0b4c08a..c48667bd 100644 --- a/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py +++ b/test/test_extreme_estimator/test_extreme_models/test_max_stable_temporal.py @@ -4,7 +4,7 @@ import numpy as np from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel, \ LinearStationaryMarginModel from extreme_estimator.extreme_models.utils import set_seed_for_test from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset diff --git a/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_temporal.py b/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_temporal.py index f0a17fb3..64403ba0 100644 --- a/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_temporal.py +++ b/test/test_extreme_estimator/test_margin_fits/test_gev/test_gev_temporal.py @@ -4,7 +4,7 @@ import numpy as np import pandas as pd from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import StationaryStationModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import StationaryStationModel, \ NonStationaryLocationStationModel from extreme_estimator.extreme_models.utils import r, set_seed_r from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates diff --git a/test/test_spatio_temporal_dataset/test_dataset.py b/test/test_spatio_temporal_dataset/test_dataset.py index 538f9f0c..bedad477 100644 --- a/test/test_spatio_temporal_dataset/test_dataset.py +++ b/test/test_spatio_temporal_dataset/test_dataset.py @@ -2,9 +2,8 @@ import unittest from itertools import product import numpy as np -from rpy2.rinterface import RRuntimeError -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearNonStationaryLocationMarginModel from extreme_estimator.extreme_models.utils import set_seed_for_test, SafeRunException from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ diff --git a/test/test_spatio_temporal_dataset/test_slicer.py b/test/test_spatio_temporal_dataset/test_slicer.py index ed13dda6..3d24a110 100644 --- a/test/test_spatio_temporal_dataset/test_slicer.py +++ b/test/test_spatio_temporal_dataset/test_slicer.py @@ -2,7 +2,7 @@ from typing import List import unittest -from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import ConstantMarginModel from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset from spatio_temporal_dataset.dataset.simulation_dataset import FullSimulatedDataset diff --git a/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py b/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py index c2945acb..86d74df4 100644 --- a/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py +++ b/test/test_unitary/test_fitmaxstab/test_fitmaxstab_with_margin.py @@ -2,7 +2,7 @@ import unittest from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin -from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import ConstantMarginModel, \ LinearMarginModelExample from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import CovarianceFunction from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Schlather diff --git a/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py b/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py index c4825bf6..0c6869b9 100644 --- a/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py +++ b/test/test_unitary/test_rmaxstab/test_rmaxstab_with_margin.py @@ -2,7 +2,7 @@ import unittest import numpy as np -from extreme_estimator.extreme_models.margin_model.linear_margin_model import ConstantMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import ConstantMarginModel, \ LinearAllParametersAllDimsMarginModel from extreme_estimator.extreme_models.utils import r from extreme_estimator.margin_fits.gev.gev_params import GevParams diff --git a/test/test_utils.py b/test/test_utils.py index bc11b408..09b329ab 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -6,9 +6,9 @@ from experiment.meteo_france_data.scm_models_data.crocus.crocus import Crocus, C from extreme_estimator.estimator.full_estimator.abstract_full_estimator import SmoothMarginalsThenUnitaryMsp, \ FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.estimator.max_stable_estimator.abstract_max_stable_estimator import MaxStableEstimator -from extreme_estimator.extreme_models.margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.linear_margin_model import LinearAllParametersAllDimsMarginModel, \ ConstantMarginModel -from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import \ +from extreme_estimator.extreme_models.margin_model.linear_margin_model.temporal_linear_margin_models import \ NonStationaryLocationStationModel, NonStationaryScaleStationModel, NonStationaryShapeStationModel from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import \ AbstractMaxStableModelWithCovarianceFunction, CovarianceFunction diff --git a/utils.py b/utils.py index f43fe09f..2305a67c 100644 --- a/utils.py +++ b/utils.py @@ -9,6 +9,7 @@ for c in [' ', ':', '-']: NB_CORES = 7 + def get_root_path() -> str: return op.dirname(op.abspath(__file__)) @@ -70,12 +71,14 @@ class ClassPropertyDescriptor(object): self.fset = func return self + def classproperty(func): if not isinstance(func, (classmethod, staticmethod)): func = classmethod(func) return ClassPropertyDescriptor(func) + if __name__ == '__main__': e = Example() print(e.big_attribute) -- GitLab