From d862d32f8e7ab879401fa290dd790f905277e409 Mon Sep 17 00:00:00 2001
From: Le Roux Erwan <erwan.le-roux@irstea.fr>
Date: Sun, 9 Jun 2019 11:23:48 +0200
Subject: [PATCH] [STUDY] refactor study and extended study, so that
 reigon_name_to_massif becomes a class property

---
 .../abstract_extended_study.py                | 26 ++++++++++++-------
 .../scm_models_data/abstract_study.py         |  7 +++--
 .../main_hypercube_visualization.py           |  4 +--
 3 files changed, 21 insertions(+), 16 deletions(-)

diff --git a/experiment/meteo_france_data/scm_models_data/abstract_extended_study.py b/experiment/meteo_france_data/scm_models_data/abstract_extended_study.py
index 93e98334..d95b8709 100644
--- a/experiment/meteo_france_data/scm_models_data/abstract_extended_study.py
+++ b/experiment/meteo_france_data/scm_models_data/abstract_extended_study.py
@@ -4,14 +4,15 @@ from collections import OrderedDict
 from experiment.meteo_france_data.scm_models_data.abstract_study import AbstractStudy
 from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \
     AbstractSpatialCoordinates
+from utils import classproperty
 
 
 class AbstractExtendedStudy(AbstractStudy):
 
 
 
-    @property
-    def region_names(self):
+    @classproperty
+    def region_names(cls):
         return ['Alps', 'Northern Alps', 'Central Alps', 'Southern Alps', 'Extreme South Alps']
 
     @property
@@ -22,22 +23,27 @@ class AbstractExtendedStudy(AbstractStudy):
     def study_massif_names(self):
         return self.region_names + super().study_massif_names
 
-    @property
-    def massif_name_to_region_name(self):
-        df_centroid = self.load_df_centroid()
+    @classproperty
+    def massif_name_to_region_name(cls):
+        df_centroid = cls.load_df_centroid()
         return OrderedDict(zip(df_centroid.index, df_centroid['REGION']))
 
-    @property
-    def region_name_to_massif_ids(self):
+    @classproperty
+    def region_name_to_massif_names(cls):
+        return {k: [cls.original_safran_massif_id_to_massif_name[i] for i in v]
+                for k, v in cls.region_name_to_massif_ids.items()}
+
+    @classproperty
+    def region_name_to_massif_ids(cls):
         region_name_to_massifs_ids = {}
-        for region_name_loop in self.region_names:
+        for region_name_loop in cls.region_names:
             # We use "is in" so that the "Alps" will automatically regroup all the massif data
             massif_names_belong_to_the_group = [massif_name
-                                                for massif_name, region_name in self.massif_name_to_region_name.items()
+                                                for massif_name, region_name in cls.massif_name_to_region_name.items()
                                                 if region_name_loop in region_name]
             massif_ids_belong_to_the_group = [massif_id
                                               for massif_id, massif_name in
-                                              self.original_safran_massif_id_to_massif_name.items()
+                                              cls.original_safran_massif_id_to_massif_name.items()
                                               if massif_name in massif_names_belong_to_the_group]
             region_name_to_massifs_ids[region_name_loop] = massif_ids_belong_to_the_group
         return region_name_to_massifs_ids
diff --git a/experiment/meteo_france_data/scm_models_data/abstract_study.py b/experiment/meteo_france_data/scm_models_data/abstract_study.py
index 6fe1e078..7eebbec1 100644
--- a/experiment/meteo_france_data/scm_models_data/abstract_study.py
+++ b/experiment/meteo_france_data/scm_models_data/abstract_study.py
@@ -327,11 +327,10 @@ class AbstractStudy(object):
 
     """  Spatial properties """
 
-    @property
-    def original_safran_massif_id_to_massif_name(self) -> Dict[int, str]:
-        return {massif_id: massif_name for massif_id, massif_name in enumerate(self.all_massif_names)}
+    @classproperty
+    def original_safran_massif_id_to_massif_name(cls) -> Dict[int, str]:
+        return {massif_id: massif_name for massif_id, massif_name in enumerate(cls.all_massif_names)}
 
-    # @cached_property
     @classproperty
     def all_massif_names(cls) -> List[str]:
         """
diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py
index c577d90e..71e060ec 100644
--- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py
+++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/main_hypercube_visualization.py
@@ -90,9 +90,9 @@ def fast_altitude_year_hypercube():
                                                                 trend_test_class=trend_test_class,
                                                                 nb_data_reduced_for_speed=nb_data_reduced_for_speed,
                                                                 last_starting_year=last_starting_year)
-                visualizer.visualize_year_trend_test()
+                # visualizer.visualize_year_trend_test()
                 visualizer.visualize_altitude_trend_test()
-                visualizer.visualize_massif_trend_test()
+                # visualizer.visualize_massif_trend_test()
 
 
 def full_altitude_year_hypercube():
-- 
GitLab