From cd3ddb91ba9568927763a6599a0ad64bffbc3a53 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Thu, 21 Feb 2019 16:07:36 +0100
Subject: [PATCH] [SCM] add covariance function display when using max stable
 models

---
 experiment/meteo_france_SCM_study/main_visualize.py   | 11 ++++++-----
 .../safran/safran_visualizer.py                       | 11 +++++++++--
 test/test_utils.py                                    |  6 +++---
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/experiment/meteo_france_SCM_study/main_visualize.py b/experiment/meteo_france_SCM_study/main_visualize.py
index 0a96d042..fea9ed0d 100644
--- a/experiment/meteo_france_SCM_study/main_visualize.py
+++ b/experiment/meteo_france_SCM_study/main_visualize.py
@@ -19,7 +19,7 @@ def study_iterator(study_class, only_first_one=False, both_altitude=False, verbo
     if verbose:
         print('Loading studies....')
     for nb_day in nb_days:
-        for alti in AbstractStudy.ALTITUDES[::-1]:
+        for alti in AbstractStudy.ALTITUDES[::1]:
             if verbose:
                 print('alti: {}, nb_day: {}'.format(alti, nb_day))
             study = study_class(alti, nb_day) if is_safran_study else study_class(alti)
@@ -41,11 +41,12 @@ def extended_visualization():
 
 
 def normal_visualization():
+    only_first_one = True
     for study_class in SCM_STUDIES[1:2]:
-        for study in study_iterator(study_class, only_first_one=True):
+        for study in study_iterator(study_class, only_first_one=only_first_one):
             study_visualizer = StudyVisualizer(study)
             # study_visualizer.visualize_independent_margin_fits(threshold=[None, 20, 40, 60][0])
-            study_visualizer.visualize_linear_margin_fit()
+            study_visualizer.visualize_linear_margin_fit(only_first_max_stable=only_first_one)
 
 
 def complete_analysis(only_first_one=False):
@@ -63,6 +64,6 @@ def complete_analysis(only_first_one=False):
 
 
 if __name__ == '__main__':
-    normal_visualization()
+    # normal_visualization()
     # extended_visualization()
-    # complete_analysis()
+    complete_analysis()
diff --git a/experiment/meteo_france_SCM_study/safran/safran_visualizer.py b/experiment/meteo_france_SCM_study/safran/safran_visualizer.py
index b147faa9..ae256286 100644
--- a/experiment/meteo_france_SCM_study/safran/safran_visualizer.py
+++ b/experiment/meteo_france_SCM_study/safran/safran_visualizer.py
@@ -11,6 +11,8 @@ from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \
     FullEstimatorInASingleStepWithSmoothMargin
 from extreme_estimator.estimator.margin_estimator.abstract_margin_estimator import SmoothMarginEstimator
 from extreme_estimator.extreme_models.margin_model.smooth_margin_model import LinearAllParametersAllDimsMarginModel
+from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model import CovarianceFunction, \
+    AbstractMaxStableModelWithCovarianceFunction
 from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith
 from extreme_estimator.margin_fits.gev.gev_params import GevParams
 from extreme_estimator.margin_fits.gev.gevmle_fit import GevMleFit
@@ -96,9 +98,12 @@ class StudyVisualizer(object):
         assert len(x) == len(y)
         return x, y
 
-    def visualize_linear_margin_fit(self):
+    def visualize_linear_margin_fit(self, only_first_max_stable=False):
         plot_name = 'Full Likelihood with Linear marginals and max stable dependency structure'
-        max_stable_models = load_test_max_stable_models(only_one_covariance_function=True)[:1]
+        default_covariance_function = CovarianceFunction.cauchy
+        max_stable_models = load_test_max_stable_models(default_covariance_function=default_covariance_function)
+        if only_first_max_stable:
+            max_stable_models = max_stable_models[:1]
         fig, axes = plt.subplots(len(max_stable_models) + 1, len(GevParams.SUMMARY_NAMES), figsize=self.figsize)
         fig.subplots_adjust(hspace=1.0, wspace=1.0)
         margin_class = LinearAllParametersAllDimsMarginModel
@@ -111,6 +116,8 @@ class StudyVisualizer(object):
             margin_model = margin_class(coordinates=self.coordinates)
             estimator = FullEstimatorInASingleStepWithSmoothMargin(self.dataset, margin_model, max_stable_model)
             title = get_display_name_from_object_type(type(max_stable_model))
+            if isinstance(max_stable_model, AbstractMaxStableModelWithCovarianceFunction):
+                title += ' ' + str(default_covariance_function).split('.')[-1]
             self.fit_and_visualize_estimator(estimator, axes[i], title=title)
         self.show_or_save_to_file(plot_name)
 
diff --git a/test/test_utils.py b/test/test_utils.py
index 3cf6be93..36e1ea3a 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -46,13 +46,13 @@ def load_smooth_margin_models(coordinates):
     return [margin_class(coordinates=coordinates) for margin_class in TEST_MARGIN_TYPES]
 
 
-def load_test_max_stable_models(only_one_covariance_function=False):
-    default_covariance_function = CovarianceFunction.cauchy
+def load_test_max_stable_models(default_covariance_function=None):
     # Load all max stable model
     max_stable_models = []
     for max_stable_class in TEST_MAX_STABLE_MODEL:
         if issubclass(max_stable_class, AbstractMaxStableModelWithCovarianceFunction):
-            if only_one_covariance_function:
+            if default_covariance_function is not None:
+                assert default_covariance_function in CovarianceFunction
                 max_stable_models.append(max_stable_class(covariance_function=default_covariance_function))
             else:
                 max_stable_models.extend([max_stable_class(covariance_function=covariance_function)
-- 
GitLab