From 14f3cd3f14b77c9dd5838904b55e8357fab79529 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Wed, 24 Jun 2020 10:25:00 +0200 Subject: [PATCH] [contrasting] refactor tests --- .../polynomial_margin_model/__init__.py | 0 .../polynomial_margin_model.py | 0 .../gev_trend_test_three_parameters.py | 2 +- .../gev_trend_test_two_parameters.py | 2 +- .../gumbel_test_two_parameters.py | 2 +- .../altitudes_fit/two_fold_fit.py | 3 +- .../test_temporal_estimator/__init__.py | 0 .../test_gev_temporal_extremes_bayesian.py | 0 .../test_gev_temporal_extremes_gumbel.py | 0 .../test_gev_temporal_extremes_l_moments.py | 0 .../test_gev_temporal_extremes_mle.py | 0 .../test_gev_temporal_is_mev.py | 0 ...st_gev_temporal_polynomial_extremes_mle.py | 4 +-- .../test_contrasting/test_two_fold_fit.py | 29 ++++++++++--------- 14 files changed, 20 insertions(+), 22 deletions(-) create mode 100644 extreme_fit/model/margin_model/polynomial_margin_model/__init__.py rename extreme_fit/model/margin_model/{ => polynomial_margin_model}/polynomial_margin_model.py (100%) create mode 100644 test/test_extreme_fit/test_estimator/test_temporal_estimator/__init__.py rename test/test_extreme_fit/{test_distribution/test_gev => test_estimator/test_temporal_estimator}/test_gev_temporal_extremes_bayesian.py (100%) rename test/test_extreme_fit/{test_distribution/test_gev => test_estimator/test_temporal_estimator}/test_gev_temporal_extremes_gumbel.py (100%) rename test/test_extreme_fit/{test_distribution/test_gev => test_estimator/test_temporal_estimator}/test_gev_temporal_extremes_l_moments.py (100%) rename test/test_extreme_fit/{test_distribution/test_gev => test_estimator/test_temporal_estimator}/test_gev_temporal_extremes_mle.py (100%) rename test/test_extreme_fit/{test_distribution/test_gev => test_estimator/test_temporal_estimator}/test_gev_temporal_is_mev.py (100%) rename test/test_extreme_fit/{test_distribution/test_gev => test_estimator/test_temporal_estimator}/test_gev_temporal_polynomial_extremes_mle.py (93%) diff --git a/extreme_fit/model/margin_model/polynomial_margin_model/__init__.py b/extreme_fit/model/margin_model/polynomial_margin_model/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/extreme_fit/model/margin_model/polynomial_margin_model.py b/extreme_fit/model/margin_model/polynomial_margin_model/polynomial_margin_model.py similarity index 100% rename from extreme_fit/model/margin_model/polynomial_margin_model.py rename to extreme_fit/model/margin_model/polynomial_margin_model/polynomial_margin_model.py diff --git a/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py b/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py index 8af11133..6e0ac523 100644 --- a/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py +++ b/extreme_trend/trend_test_three_parameters/gev_trend_test_three_parameters.py @@ -1,4 +1,4 @@ -from extreme_fit.model.margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ +from extreme_fit.model.margin_model.polynomial_margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ NonStationaryQuadraticScaleModel from extreme_fit.model.margin_model.utils import \ MarginFitMethod diff --git a/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py b/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py index 794e2b33..223490ff 100644 --- a/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py +++ b/extreme_trend/trend_test_two_parameters/gev_trend_test_two_parameters.py @@ -1,5 +1,5 @@ from extreme_data.eurocode_data.utils import EUROCODE_QUANTILE -from extreme_fit.model.margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ +from extreme_fit.model.margin_model.polynomial_margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ NonStationaryQuadraticScaleModel from extreme_trend.abstract_gev_trend_test import AbstractGevTrendTest from extreme_trend.trend_test_one_parameter.gev_trend_test_one_parameter import \ diff --git a/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py b/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py index f4a9db11..e62ccdac 100644 --- a/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py +++ b/extreme_trend/trend_test_two_parameters/gumbel_test_two_parameters.py @@ -1,5 +1,5 @@ from extreme_data.eurocode_data.utils import EUROCODE_QUANTILE -from extreme_fit.model.margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ +from extreme_fit.model.margin_model.polynomial_margin_model.polynomial_margin_model import \ NonStationaryQuadraticLocationGumbelModel, NonStationaryQuadraticScaleGumbelModel from extreme_trend.trend_test_two_parameters.gev_trend_test_two_parameters import \ GevTrendTestTwoParameters diff --git a/projects/altitude_spatial_model/altitudes_fit/two_fold_fit.py b/projects/altitude_spatial_model/altitudes_fit/two_fold_fit.py index 5f5371e3..b5593f46 100644 --- a/projects/altitude_spatial_model/altitudes_fit/two_fold_fit.py +++ b/projects/altitude_spatial_model/altitudes_fit/two_fold_fit.py @@ -13,8 +13,7 @@ class TwoFoldFit(object): def __init__(self, two_fold_datasets_generator: TwoFoldDatasetsGenerator, model_family_name_to_model_classes: Dict[str, List[type]], - fit_method=MarginFitMethod.extremes_fevd_mle, - ): + fit_method=MarginFitMethod.extremes_fevd_mle): self.two_fold_datasets_generator = two_fold_datasets_generator self.fit_method = fit_method self.model_family_name_to_model_classes = model_family_name_to_model_classes diff --git a/test/test_extreme_fit/test_estimator/test_temporal_estimator/__init__.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_bayesian.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_bayesian.py similarity index 100% rename from test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_bayesian.py rename to test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_bayesian.py diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_gumbel.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_gumbel.py similarity index 100% rename from test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_gumbel.py rename to test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_gumbel.py diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_l_moments.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_l_moments.py similarity index 100% rename from test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_l_moments.py rename to test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_l_moments.py diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_mle.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_mle.py similarity index 100% rename from test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_extremes_mle.py rename to test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_extremes_mle.py diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_is_mev.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_is_mev.py similarity index 100% rename from test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_is_mev.py rename to test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_is_mev.py diff --git a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_polynomial_extremes_mle.py b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_polynomial_extremes_mle.py similarity index 93% rename from test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_polynomial_extremes_mle.py rename to test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_polynomial_extremes_mle.py index a5b09acf..1f8a50ed 100644 --- a/test/test_extreme_fit/test_distribution/test_gev/test_gev_temporal_polynomial_extremes_mle.py +++ b/test/test_extreme_fit/test_estimator/test_temporal_estimator/test_gev_temporal_polynomial_extremes_mle.py @@ -4,13 +4,11 @@ import numpy as np import pandas as pd from extreme_fit.distribution.gev.gev_params import GevParams -from extreme_fit.model.margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ +from extreme_fit.model.margin_model.polynomial_margin_model.polynomial_margin_model import NonStationaryQuadraticLocationModel, \ NonStationaryQuadraticScaleModel, NonStationaryQuadraticLocationGumbelModel, NonStationaryQuadraticScaleGumbelModel from extreme_trend.abstract_gev_trend_test import fitted_linear_margin_estimator from extreme_fit.model.margin_model.utils import \ MarginFitMethod -from extreme_fit.model.margin_model.linear_margin_model.temporal_linear_margin_models import StationaryTemporalModel, \ - NonStationaryLocationTemporalModel, NonStationaryLocationAndScaleTemporalModel from extreme_fit.model.utils import r, set_seed_r from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates from spatio_temporal_dataset.coordinates.temporal_coordinates.abstract_temporal_coordinates import \ diff --git a/test/test_projects/test_contrasting/test_two_fold_fit.py b/test/test_projects/test_contrasting/test_two_fold_fit.py index 5f45ac39..eb49b9b6 100644 --- a/test/test_projects/test_contrasting/test_two_fold_fit.py +++ b/test/test_projects/test_contrasting/test_two_fold_fit.py @@ -14,34 +14,35 @@ from projects.altitude_spatial_model.altitudes_fit.utils import Score from spatio_temporal_dataset.slicer.split import Split +def load_two_fold_fit(fit_method, year_max): + altitudes = [900, 1200] + study_class = SafranSnowfall1Day + studies = AltitudesStudies(study_class, altitudes, year_max=year_max) + two_fold_datasets_generator = TwoFoldDatasetsGenerator(studies, nb_samples=1, massif_names=['Vercors']) + model_family_name_to_model_class = {'Stationary': [ConstantMarginModel]} + return TwoFoldFit(two_fold_datasets_generator=two_fold_datasets_generator, + model_family_name_to_model_classes=model_family_name_to_model_class, + fit_method=fit_method) + + class TestTwoFoldFit(unittest.TestCase): def setUp(self) -> None: super().setUp() set_seed_for_test() - def load_two_fold_fit(self, fit_method, year_max): - self.altitudes = [900, 1200] - self.study_class = SafranSnowfall1Day - studies = AltitudesStudies(self.study_class, self.altitudes, year_max=year_max) - self.two_fold_datasets_generator = TwoFoldDatasetsGenerator(studies, nb_samples=1, massif_names=['Vercors']) - self.model_family_name_to_model_class = {'Stationary': [ConstantMarginModel]} - return TwoFoldFit(two_fold_datasets_generator=self.two_fold_datasets_generator, - model_family_name_to_model_classes=self.model_family_name_to_model_class, - fit_method=fit_method) - def test_determinism_dataset_generation(self): - two_fold_fit = self.load_two_fold_fit(fit_method=MarginFitMethod.spatial_extremes_mle, year_max=1963) + two_fold_fit = load_two_fold_fit(fit_method=MarginFitMethod.spatial_extremes_mle, year_max=1963) massif_fit = two_fold_fit.massif_name_to_massif_fit['Vercors'] - model_fit = massif_fit.sample_id_to_sample_fit[0].model_class_to_model_fit[ - ConstantMarginModel] # type: TwoFoldModelFit + sample_fit = massif_fit.sample_id_to_sample_fit[0] + model_fit = sample_fit.model_class_to_model_fit[ConstantMarginModel] # type: TwoFoldModelFit dataset_fold1 = model_fit.estimator_fold_1.dataset index_train = list(dataset_fold1.coordinates.coordinates_index(split=Split.train_temporal)) self.assertEqual([2, 3, 8, 9], index_train) self.assertEqual(110.52073192596436, np.sum(dataset_fold1.maxima_gev(split=Split.train_temporal))) def test_determinism_fit_spatial_extreme(self): - two_fold_fit = self.load_two_fold_fit(fit_method=MarginFitMethod.spatial_extremes_mle, year_max=2019) + two_fold_fit = load_two_fold_fit(fit_method=MarginFitMethod.spatial_extremes_mle, year_max=2019) massif_fit = two_fold_fit.massif_name_to_massif_fit['Vercors'] model_fit = massif_fit.sample_id_to_sample_fit[0].model_class_to_model_fit[ ConstantMarginModel] # type: TwoFoldModelFit -- GitLab