From cdcbd7e65cd958a02fea5cdace6ab7e543273cee Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Wed, 17 Jul 2019 15:05:21 +0200
Subject: [PATCH] [GEV TREND TEST] rename and refactor the code for one
 parameter gev trend test (to prepare the introduction of tests with two
 parameters)

---
 .../altitude_hypercube_visualizer.py          |  8 +-
 .../main_fast_hypercube_one_altitudes.py      |  4 +-
 .../main_fast_hypercube_several_altitudes.py  |  4 +-
 .../main_files/main_full_hypercube.py         |  4 +-
 .../main_studies_visualizer.py                |  2 +-
 .../main_study_visualizer.py                  |  4 +-
 .../study_visualization/study_visualizer.py   |  2 +-
 .../stations_data/main_station_comparison.py  |  2 +-
 .../main_station_comparison_all_altitudes.py  |  6 +-
 .../comparisons_visualization.py              |  2 +-
 .../main0_comparison_with_observations.py     |  0
 ...main3_non_stationary_strength_evolution.py |  8 +-
 experiment/paper1_steps/utils.py              |  2 +-
 ...int_test.py => abstract_gev_trend_test.py} | 97 +++++--------------
 .../gev_trend_test_one_parameter.py           | 53 ++++++++++
 .../gev_trend_test_two_parameters.py          |  0
 .../trend_analysis/univariate_test/utils.py   |  6 +-
 test/test_experiment/test_SCM_study.py        |  5 +-
 test/test_experiment/test_hypercube.py        |  4 +-
 19 files changed, 107 insertions(+), 106 deletions(-)
 create mode 100644 experiment/paper1_steps/hard extreme evolution - annual maxima/main0_comparison_with_observations.py
 rename experiment/trend_analysis/univariate_test/{abstract_gev_change_point_test.py => abstract_gev_trend_test.py} (65%)
 create mode 100644 experiment/trend_analysis/univariate_test/gev_trend_test_one_parameter.py
 create mode 100644 experiment/trend_analysis/univariate_test/gev_trend_test_two_parameters.py

diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py
index df073708..5db8641c 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer.py
@@ -9,7 +9,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
     SCM_STUDY_NAME_TO_COLOR, SCM_STUDY_NAME_TO_ABBREVIATION, SCM_STUDY_CLASS_TO_ABBREVIATION, SCM_STUDIES_NAMES
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
     StudyVisualizer
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import AbstractGevChangePointTest
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
 from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
 from utils import get_display_name_from_object_type
@@ -320,7 +320,7 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
                                                                       int(massif_to_constant[m]),
                                                                       "+" if massif_to_strength[m] > 0 else "",
                                                                       round(massif_to_strength[m] * massif_to_constant[m], 1),
-                                                                      AbstractGevChangePointTest.nb_years_for_quantile_evolution)
+                                                                      AbstractGevTrendTest.nb_years_for_quantile_evolution)
                                     for m in massif_to_strength}
         else:
             massif_name_to_value = massif_to_year
@@ -342,8 +342,8 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer):
             title += ' until starting_year={}'.format(self.last_starting_year)
         title += ' with {} test'.format(get_display_name_from_object_type(self.trend_test_class))
         if self.reduce_strength_array:
-            title += '\nEvolution of the quantile {} every {} years'.format(AbstractGevChangePointTest.quantile_for_strength,
-                                                                   AbstractGevChangePointTest.nb_years_for_quantile_evolution)
+            title += '\nEvolution of the quantile {} every {} years'.format(AbstractGevTrendTest.quantile_for_strength,
+                                                                            AbstractGevTrendTest.nb_years_for_quantile_evolution)
         if set:
             plt.suptitle(title)
         return title
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_one_altitudes.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_one_altitudes.py
index a4c57959..77152f09 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_one_altitudes.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_one_altitudes.py
@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
     load_altitude_visualizer, load_quantity_visualizer
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
     ALL_ALTITUDES, SCM_STUDIES
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
 
 
 def get_fast_parameters(altitude=1800):
@@ -21,7 +21,7 @@ def get_fast_parameters(altitude=1800):
     nb_data_reduced_for_speed = 4
     altitudes = [altitude]
     last_starting_year = None
-    trend_test_class = GevLocationChangePointTest
+    trend_test_class = GevLocationTrendTest
     return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
 
 
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_several_altitudes.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_several_altitudes.py
index 5b2a3fcf..822bd604 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_several_altitudes.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_fast_hypercube_several_altitudes.py
@@ -11,7 +11,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
     load_altitude_visualizer, load_quantity_visualizer
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
     ALL_ALTITUDES, SCM_STUDIES
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
 
 
 def get_fast_parameters(altitude=None):
@@ -23,7 +23,7 @@ def get_fast_parameters(altitude=None):
     else:
         altitudes = [ALL_ALTITUDES[3], ALL_ALTITUDES[-7]]
     last_starting_year = None
-    trend_test_class = GevLocationChangePointTest
+    trend_test_class = GevLocationTrendTest
     return altitudes, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
 
 
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_full_hypercube.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_full_hypercube.py
index d8fff38a..ee7d7047 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_full_hypercube.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_files/main_full_hypercube.py
@@ -11,7 +11,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
     load_altitude_visualizer, load_quantity_visualizer
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
     ALL_ALTITUDES, SCM_STUDIES
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
 
 
 def get_full_parameters(altitude=None):
@@ -24,7 +24,7 @@ def get_full_parameters(altitude=None):
         altitudes = ALL_ALTITUDES[3:-6]
     first_starting_year = 1958 + 10
     last_starting_year = 2017 - 10
-    trend_test_class = GevLocationChangePointTest
+    trend_test_class = GevLocationTrendTest
     return altitudes, first_starting_year, last_starting_year, nb_data_reduced_for_speed, only_first_one, save_to_file, trend_test_class
 
 
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py
index 4b47fcbe..c3bfd1ec 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/studies_visualization/main_studies_visualizer.py
@@ -1,6 +1,6 @@
 import time
 from experiment.trend_analysis.abstract_score import MannKendall, WeigthedScore, MeanScore, MedianScore
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevLocationChangePointTest, \
     GevScaleChangePointTest, GevShapeChangePointTest
 from experiment.trend_analysis.univariate_test.abstract_univariate_test import MannKendallTrendTest
 from experiment.meteo_france_data.scm_models_data.safran.safran import ExtendedSafranTotalPrecip
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py
index 8b6e82bd..4bc1d621 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/study_visualization/main_study_visualizer.py
@@ -13,7 +13,7 @@ from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSno
 
 from collections import OrderedDict
 
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
 from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \
     BetweenZeroAndOneNormalization, BetweenMinusOneAndOneNormalization
 from utils import get_display_name_from_object_type
@@ -209,7 +209,7 @@ def trend_analysis():
                                            complete_non_stationary_trend_analysis=True)
         # study_visualizer.visualize_all_independent_temporal_trend()
         # study_visualizer.visualize_temporal_trend_relevance()
-        study_visualizer.df_trend_spatio_temporal(GevLocationChangePointTest,
+        study_visualizer.df_trend_spatio_temporal(GevLocationTrendTest,
                                                   starting_years=[1958, 1980], nb_massif_for_fast_mode=2)
 
 
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 a038c142..d4fa910e 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
@@ -15,7 +15,7 @@ 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_change_point_test import AbstractGevChangePointTest
+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
diff --git a/experiment/meteo_france_data/stations_data/main_station_comparison.py b/experiment/meteo_france_data/stations_data/main_station_comparison.py
index 9aaddcda..46076629 100644
--- a/experiment/meteo_france_data/stations_data/main_station_comparison.py
+++ b/experiment/meteo_france_data/stations_data/main_station_comparison.py
@@ -2,7 +2,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
     ALL_ALTITUDES_WITH_20_STATIONS_AT_LEAST
 from experiment.meteo_france_data.stations_data.visualization.comparisons_visualization.comparisons_visualization import \
     ComparisonsVisualization, path_backup_csv_file
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevLocationChangePointTest, \
     GevScaleChangePointTest, GevShapeChangePointTest
 
 
diff --git a/experiment/meteo_france_data/stations_data/main_station_comparison_all_altitudes.py b/experiment/meteo_france_data/stations_data/main_station_comparison_all_altitudes.py
index 9f1456bb..1d5f2e99 100644
--- a/experiment/meteo_france_data/stations_data/main_station_comparison_all_altitudes.py
+++ b/experiment/meteo_france_data/stations_data/main_station_comparison_all_altitudes.py
@@ -1,9 +1,7 @@
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \
-    ALL_ALTITUDES_WITH_20_STATIONS_AT_LEAST, ALL_ALTITUDES
+    ALL_ALTITUDES
 from experiment.meteo_france_data.stations_data.visualization.comparisons_visualization.comparisons_visualization import \
-    ComparisonsVisualization, path_backup_csv_file
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \
-    GevScaleChangePointTest, GevShapeChangePointTest
+    ComparisonsVisualization
 
 
 # Create the map with the average error per massif
diff --git a/experiment/meteo_france_data/stations_data/visualization/comparisons_visualization/comparisons_visualization.py b/experiment/meteo_france_data/stations_data/visualization/comparisons_visualization/comparisons_visualization.py
index 5ccecce6..4e1b2427 100644
--- a/experiment/meteo_france_data/stations_data/visualization/comparisons_visualization/comparisons_visualization.py
+++ b/experiment/meteo_france_data/stations_data/visualization/comparisons_visualization/comparisons_visualization.py
@@ -14,7 +14,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
     VisualizationParameters
 from experiment.meteo_france_data.stations_data.comparison_analysis import ComparisonAnalysis, MASSIF_COLUMN_NAME, \
     REANALYSE_STR, ALTITUDE_COLUMN_NAME, STATION_COLUMN_NAME
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevLocationChangePointTest
 from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest
 from experiment.trend_analysis.univariate_test.utils import compute_gev_change_point_test_results
 from extreme_estimator.extreme_models.result_from_fit import ResultFromIsmev
diff --git a/experiment/paper1_steps/hard extreme evolution - annual maxima/main0_comparison_with_observations.py b/experiment/paper1_steps/hard extreme evolution - annual maxima/main0_comparison_with_observations.py
new file mode 100644
index 00000000..e69de29b
diff --git a/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py b/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py
index 790b9203..7801d504 100644
--- a/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py	
+++ b/experiment/paper1_steps/hard extreme evolution - annual maxima/main3_non_stationary_strength_evolution.py	
@@ -2,8 +2,8 @@ import time
 
 from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \
     Altitude_Hypercube_Year_Visualizer
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \
-    GevScaleChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevScaleTrendTest, \
+    GevLocationTrendTest
 
 """
 Visualize the 0.99 quantile initial value and its evolution
@@ -15,14 +15,14 @@ def main_fast_spatial_risk_evolution():
     for altitude in FULL_ALTITUDES[-1:]:
         vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
                                                   exact_starting_year=1958, reduce_strength_array=True,
-                                                  trend_test_class=GevScaleChangePointTest)
+                                                  trend_test_class=GevScaleTrendTest)
         # vizualiser.save_to_file = False
         vizualiser.visualize_massif_trend_test_one_altitude()
 
 
 def main_full_spatial_risk_evolution():
     for altitude in FULL_ALTITUDES[:]:
-        for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest][:]:
+        for trend_test_class in [GevLocationTrendTest, GevScaleTrendTest][:]:
             vizualiser = get_full_altitude_visualizer(Altitude_Hypercube_Year_Visualizer, altitude=altitude,
                                                       exact_starting_year=1958, reduce_strength_array=True,
                                                       trend_test_class=trend_test_class)
diff --git a/experiment/paper1_steps/utils.py b/experiment/paper1_steps/utils.py
index 3aa74c75..290d2b10 100644
--- a/experiment/paper1_steps/utils.py
+++ b/experiment/paper1_steps/utils.py
@@ -7,7 +7,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual
     get_full_parameters
 from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.utils_hypercube import \
     load_altitude_visualizer
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevScaleChangePointTest, \
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import GevScaleChangePointTest, \
     GevLocationChangePointTest
 
 FULL_ALTITUDES = [900, 1200, 1500, 1800, 2100, 2400, 2700, 3000]
diff --git a/experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py b/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py
similarity index 65%
rename from experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py
rename to experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py
index 6417491e..24381cc7 100644
--- a/experiment/trend_analysis/univariate_test/abstract_gev_change_point_test.py
+++ b/experiment/trend_analysis/univariate_test/abstract_gev_trend_test.py
@@ -19,7 +19,7 @@ from spatio_temporal_dataset.spatio_temporal_observations.abstract_spatio_tempor
     AbstractSpatioTemporalObservations
 
 
-class AbstractGevChangePointTest(AbstractUnivariateTest):
+class AbstractGevTrendTest(AbstractUnivariateTest):
     RRunTimeError_TREND = 'R RunTimeError trend'
     # I should use the quantile from the Eurocode for the buildings
     quantile_for_strength = 0.98
@@ -34,15 +34,11 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
         self.coordinates = AbstractTemporalCoordinates.from_df(df,
                                                                transformation_class=CenteredScaledNormalization)  # type: AbstractTemporalCoordinates
         self.dataset = AbstractDataset(observations=observations, coordinates=self.coordinates)
-        # For the moment, we chose:
-        # -the 0.99 quantile (even if for building maybe we should use the 1/50 so 0.98 quantile)
-        # -to see the evolution between two successive years
 
         try:
             # Fit stationary model
             self.stationary_estimator = LinearMarginEstimator(self.dataset, StationaryStationModel(self.coordinates))
             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)
@@ -51,6 +47,8 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
         except SafeRunException:
             self.crashed = True
 
+    # Type of trends
+
     @classmethod
     def real_trend_types(cls):
         return super().real_trend_types() + [cls.RRunTimeError_TREND]
@@ -63,12 +61,25 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
         return real_trend_types
 
     @property
-    def likelihood_ratio(self):
-        return self.non_stationary_deviance - self.stationary_deviance
+    def test_trend_type(self) -> str:
+        if self.crashed:
+            return self.RRunTimeError_TREND
+        else:
+            return super().test_trend_type
+
+    # Likelihood ratio test
 
     @property
-    def non_stationary_constant_gev_params(self) -> GevParams:
-        return self.non_stationary_estimator.result_from_fit.constant_gev_params
+    def is_significant(self) -> bool:
+        return self.likelihood_ratio > chi2.ppf(q=1 - self.SIGNIFICANCE_LEVEL, df=self.degree_freedom_chi2)
+
+    @property
+    def degree_freedom_chi2(self) -> int:
+        raise NotImplementedError
+
+    @property
+    def likelihood_ratio(self):
+        return self.non_stationary_deviance - self.stationary_deviance
 
     @property
     def stationary_deviance(self):
@@ -91,35 +102,11 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
         else:
             return self.non_stationary_estimator.result_from_fit.nllh
 
-    @property
-    def is_significant(self) -> bool:
-        return self.likelihood_ratio > chi2.ppf(q=1 - self.SIGNIFICANCE_LEVEL, df=1)
-
-    # Add a trend type that correspond to run that crashed
-
-    # @classmethod
-    # def trend_type_to_style(cls):
-    #     trend_type_to_style = super().trend_type_to_style()
-    #     trend_type_to_style[cls.RRunTimeError_TREND] = 'b:'
-    #     return trend_type_to_style
-
-    @property
-    def test_trend_type(self) -> str:
-        if self.crashed:
-            return self.RRunTimeError_TREND
-        else:
-            return super().test_trend_type
-
-    def get_coef(self, estimator, coef_name):
-        return estimator.margin_function_fitted.get_coef(self.gev_param_name, coef_name)
+    # Evolution of the GEV parameters and corresponding quantiles
 
     @property
-    def non_stationary_intercept_coef(self):
-        return self.get_coef(self.non_stationary_estimator, LinearCoef.INTERCEPT_NAME)
-
-    @property
-    def non_stationary_linear_coef(self):
-        return self.get_coef(self.non_stationary_estimator, AbstractCoordinates.COORDINATE_T)
+    def non_stationary_constant_gev_params(self) -> GevParams:
+        return self.non_stationary_estimator.result_from_fit.constant_gev_params
 
     @property
     def test_trend_slope_strength(self):
@@ -140,43 +127,5 @@ class AbstractGevChangePointTest(AbstractUnivariateTest):
         else:
             return self.non_stationary_constant_gev_params.quantile(p=self.quantile_for_strength)
 
-    @property
-    def percentage_of_change_per_year(self):
-        ratio = np.abs(self.non_stationary_linear_coef) / np.abs(self.non_stationary_intercept_coef)
-        scaled_ratio = ratio * self.coordinates.transformed_distance_between_two_successive_years
-        percentage_of_change_per_year = 100 * scaled_ratio
-        return percentage_of_change_per_year[0]
-
-    @property
-    def test_sign(self) -> int:
-        return np.sign(self.non_stationary_linear_coef)
-
-
-class GevLocationChangePointTest(AbstractGevChangePointTest):
-
-    def __init__(self, years, maxima, starting_year):
-        super().__init__(years, maxima, starting_year,
-                         NonStationaryLocationStationModel, GevParams.LOC)
-
-    def _slope_strength(self):
-        return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(p=self.quantile_for_strength,
-                                                                                         mu1=self.non_stationary_linear_coef)
-
-
-class GevScaleChangePointTest(AbstractGevChangePointTest):
-
-    def __init__(self, years, maxima, starting_year):
-        super().__init__(years, maxima, starting_year,
-                         NonStationaryScaleStationModel, GevParams.SCALE)
-
-    def _slope_strength(self):
-        return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(
-            p=self.quantile_for_strength,
-            sigma1=self.non_stationary_linear_coef)
-
 
-class GevShapeChangePointTest(AbstractGevChangePointTest):
 
-    def __init__(self, years, maxima, starting_year):
-        super().__init__(years, maxima, starting_year,
-                         NonStationaryShapeStationModel, GevParams.SHAPE)
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
new file mode 100644
index 00000000..87967e03
--- /dev/null
+++ b/experiment/trend_analysis/univariate_test/gev_trend_test_one_parameter.py
@@ -0,0 +1,53 @@
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
+from extreme_estimator.extreme_models.margin_model.temporal_linear_margin_model import StationaryStationModel, \
+    NonStationaryLocationStationModel, NonStationaryScaleStationModel, NonStationaryShapeStationModel
+from extreme_estimator.margin_fits.gev.gev_params import GevParams
+import numpy as np
+
+from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates
+
+
+class GevTrendTestOneParameter(AbstractGevTrendTest):
+
+    @property
+    def degree_freedom_chi2(self) -> int:
+        return 1
+
+    @property
+    def test_sign(self) -> int:
+        return np.sign(self.non_stationary_linear_coef)
+
+    @property
+    def non_stationary_linear_coef(self):
+        return self.non_stationary_estimator.margin_function_fitted.get_coef(self.gev_param_name,
+                                                                             AbstractCoordinates.COORDINATE_T)
+
+
+class GevLocationTrendTest(GevTrendTestOneParameter):
+
+    def __init__(self, years, maxima, starting_year):
+        super().__init__(years, maxima, starting_year,
+                         NonStationaryLocationStationModel, GevParams.LOC)
+
+    def _slope_strength(self):
+        return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(p=self.quantile_for_strength,
+                                                                                         mu1=self.non_stationary_linear_coef)
+
+
+class GevScaleTrendTest(GevTrendTestOneParameter):
+
+    def __init__(self, years, maxima, starting_year):
+        super().__init__(years, maxima, starting_year,
+                         NonStationaryScaleStationModel, GevParams.SCALE)
+
+    def _slope_strength(self):
+        return self.non_stationary_constant_gev_params.quantile_strength_evolution_ratio(
+            p=self.quantile_for_strength,
+            sigma1=self.non_stationary_linear_coef)
+
+
+class GevShapeTrendTest(GevTrendTestOneParameter):
+
+    def __init__(self, years, maxima, starting_year):
+        super().__init__(years, maxima, starting_year,
+                         NonStationaryShapeStationModel, GevParams.SHAPE)
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
new file mode 100644
index 00000000..e69de29b
diff --git a/experiment/trend_analysis/univariate_test/utils.py b/experiment/trend_analysis/univariate_test/utils.py
index 475a8855..23da2440 100644
--- a/experiment/trend_analysis/univariate_test/utils.py
+++ b/experiment/trend_analysis/univariate_test/utils.py
@@ -2,13 +2,13 @@ from multiprocessing.pool import Pool
 
 import numpy as np
 
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import AbstractGevChangePointTest
+from experiment.trend_analysis.univariate_test.abstract_gev_trend_test import AbstractGevTrendTest
 from utils import NB_CORES
 
 
 def compute_gev_change_point_test_result(smooth_maxima, starting_year, trend_test_class, years):
-    trend_test = trend_test_class(years, smooth_maxima, starting_year)  # type: AbstractGevChangePointTest
-    assert isinstance(trend_test, AbstractGevChangePointTest)
+    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.test_trend_constant_quantile, trend_test.non_stationary_deviance, trend_test.stationary_deviance
 
 
diff --git a/test/test_experiment/test_SCM_study.py b/test/test_experiment/test_SCM_study.py
index 395e5c2f..8c0e1e67 100644
--- a/test/test_experiment/test_SCM_study.py
+++ b/test/test_experiment/test_SCM_study.py
@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
     study_iterator, study_iterator_global, SCM_STUDIES, ALL_ALTITUDES
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
     StudyVisualizer
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
 from utils import get_display_name_from_object_type
 
 
@@ -22,7 +22,8 @@ class TestSCMAllStudy(unittest.TestCase):
         for study_class in [ExtendedSafranSnowfall]:
             for study in study_iterator(study_class, only_first_one=True, verbose=False):
                 study_visualizer = StudyVisualizer(study, show=False, save_to_file=False, multiprocessing=True)
-                study_visualizer.df_trend_spatio_temporal(GevLocationChangePointTest, [1958, 1959, 1960], nb_massif_for_change_point_test=3,
+                study_visualizer.df_trend_spatio_temporal(GevLocationTrendTest, [1958, 1959, 1960],
+                                                          nb_massif_for_change_point_test=3,
                                                           sample_one_massif_from_each_region=False)
         self.assertTrue(True)
 
diff --git a/test/test_experiment/test_hypercube.py b/test/test_experiment/test_hypercube.py
index 3609c59c..b80a08b2 100644
--- a/test/test_experiment/test_hypercube.py
+++ b/test/test_experiment/test_hypercube.py
@@ -12,7 +12,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.study_visualizat
     study_iterator
 from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.study_visualizer import \
     StudyVisualizer
-from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest
+from experiment.trend_analysis.univariate_test.gev_trend_test_one_parameter import GevLocationTrendTest
 from extreme_estimator.extreme_models.utils import set_seed_for_test
 
 
@@ -27,7 +27,7 @@ class TestHypercube(unittest.TestCase):
                        for study in study_iterator(study_class=SafranSnowfall, only_first_one=False,
                                                    altitudes=altitudes, verbose=self.DISPLAY)]
         self.altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers))
-        self.trend_test_class = GevLocationChangePointTest
+        self.trend_test_class = GevLocationTrendTest
         self.nb_data_reduced_for_speed = 4
 
     # def test_altitude_hypercube_visualizer(self):
-- 
GitLab