diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py index 73e13c6a6f210db23419d5d0c6101d116f07bebc..d0f2920b77b5236d9e78885819e95966998f1031 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/abstract_hypercube_visualizer.py @@ -21,17 +21,22 @@ class AbstractHypercubeVisualizer(object): trend_test_class, nb_data_reduced_for_speed=False, save_to_file=False, - nb_top_likelihood_values=1, - last_starting_year=None): + last_starting_year=None, + verbose=True): + self.verbose = verbose self.last_starting_year = last_starting_year - self.nb_data_for_fast_mode = 7 if nb_data_reduced_for_speed else None + if isinstance(nb_data_reduced_for_speed, bool): + self.nb_data_for_fast_mode = 7 if nb_data_reduced_for_speed else None + else: + assert isinstance(nb_data_reduced_for_speed, int) + self.nb_data_for_fast_mode = nb_data_reduced_for_speed self.save_to_file = save_to_file self.trend_test_class = trend_test_class self.tuple_to_study_visualizer = tuple_to_study_visualizer # type: Dict[Tuple, StudyVisualizer] - print('Hypercube with parameters:') - print(self.last_starting_year) - print(self.trend_test_class) - # print(self.nb_data_for_fast_mode) + if self.verbose: + print('Hypercube with parameters:') + print('Starting year:', self.last_starting_year) + print('Trend test class:', get_display_name_from_object_type(self.trend_test_class)) # Main attributes defining the hypercube 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 420cc2d705274a3bf4613257d58e0e5fb13bc3c4..37c9706836ad3f78162e7160bf5a3a7ed826f036 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 @@ -28,19 +28,23 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): return self.display_trend_type_to_style.keys() @property - def nb_axes(self): + def nb_rows(self): return 1 - def trend_type_to_series(self, reduction_function): + def trend_type_to_series(self, reduction_function, isin_parameters=None): # Map each trend type to its serie with percentages # Define here all the trend type we might need in the results/displays trend_types_to_process = list(self.display_trend_types) + [AbstractUnivariateTest.SIGNIFICATIVE_ALL_TREND] - return {trend_type: self.trend_type_reduction_series(reduction_function, trend_type) + return {trend_type: self.trend_type_reduction_series(reduction_function=reduction_function, + df_bool=self.df_bool(trend_type, isin_parameters).copy()) for trend_type in trend_types_to_process} - def trend_type_reduction_series(self, reduction_function, display_trend_type): + def df_bool(self, display_trend_type, isin_parameters=None): + return self.df_hypercube_trend_type.isin(AbstractUnivariateTest.get_real_trend_types(display_trend_type)) + + def trend_type_reduction_series(self, reduction_function, df_bool): # Reduce df_bool df to a serie s_trend_type_percentage - s_trend_type_percentage = reduction_function(self.df_bool(display_trend_type)) + s_trend_type_percentage = reduction_function(df_bool) assert isinstance(s_trend_type_percentage, pd.Series) assert not isinstance(s_trend_type_percentage.index, pd.MultiIndex) s_trend_type_percentage *= 100 @@ -52,9 +56,6 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): # series = [s_trend_type_percentage, s_trend_strength] return series - def df_bool(self, display_trend_type): - return self.df_hypercube_trend_type.isin(AbstractUnivariateTest.get_real_trend_types(display_trend_type)) - def subtitle_to_reduction_function(self, reduction_function, level=None, add_detailed_plot=False, subtitle=None): def reduction_function_with_level(df_bool, **kwargs): return reduction_function(df_bool, **kwargs) if level is None else reduction_function(df_bool, level, @@ -77,28 +78,32 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): if xlabel != 'starting years': labels.remove('starting years') common_txt = 'averaged on {}'.format(' & '.join(labels)) - common_txt += 'with any starting year <= {}'.format(str(self.last_starting_year)) + common_txt += ' with any starting year <= {}'.format(str(self.last_starting_year)) return common_txt def visualize_trend_test_evolution(self, reduction_function, xlabel, xlabel_values, axes=None, marker='o', - subtitle=''): + subtitle='', isin_parameters=None, + show_or_save_to_file=True, + plot_title=None): if axes is None: - fig, axes = plt.subplots(self.nb_axes, 1, figsize=self.study_visualizer.figsize) - if not isinstance(axes, np.ndarray): - axes = [axes] + axes = self.load_trend_test_evolution_axes(self.nb_rows) + else: + assert len(axes) == self.nb_rows - trend_type_to_series = self.trend_type_to_series(reduction_function) + trend_type_to_series = self.trend_type_to_series(reduction_function, isin_parameters) for ax_idx, ax in enumerate(axes): for display_trend_type in self.display_trend_types: style = self.display_trend_type_to_style[display_trend_type] percentages_values = trend_type_to_series[display_trend_type][ax_idx] + xlabel_values = list(percentages_values.index) + percentages_values = list(percentages_values.values) ax.plot(xlabel_values, percentages_values, style + marker, label=display_trend_type) if ax_idx == 0: # Global information ax.set_ylabel(self.get_title_plot(xlabel, ax_idx=0)) if xlabel != STARTING_YEARS_XLABEL: - ax.set_yticks(list(range(0, 101, 10))) + ax.set_yticks(list(range(0, 101, 20))) else: ax.set_ylabel(self.get_title_plot(xlabel, ax_idx=ax_idx)) @@ -110,36 +115,46 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): ax.set_xlabel(xlabel) ax.grid() ax.legend() + ax.set_title(plot_title) specific_title = 'Evolution of {} trends (significative or not) wrt to the {} with {}'.format(subtitle, xlabel, self.trend_test_name) specific_title += '\n ' + self.get_title_plot(xlabel) # Figure title - specific_title += '\n' - - trend_types = [AbstractUnivariateTest.ALL_TREND, - AbstractUnivariateTest.SIGNIFICATIVE_ALL_TREND, - AbstractUnivariateTest.SIGNIFICATIVE_POSITIVE_TREND, - AbstractUnivariateTest.SIGNIFICATIVE_NEGATIVE_TREND] - series = [trend_type_to_series[trend_type][0] for trend_type in trend_types] - percents = [serie.sum() if xlabel == STARTING_YEARS_XLABEL else serie.mean() for serie in series] - percents = [round(p) for p in percents] - - specific_title += 'Total ' if xlabel == STARTING_YEARS_XLABEL else 'Mean ' - specific_title += 'all trend {}, all significative trends: {} (+:{} -{})'.format(*percents) + # specific_title += '\n' + # + # trend_types = [AbstractUnivariateTest.ALL_TREND, + # AbstractUnivariateTest.SIGNIFICATIVE_ALL_TREND, + # AbstractUnivariateTest.SIGNIFICATIVE_POSITIVE_TREND, + # AbstractUnivariateTest.SIGNIFICATIVE_NEGATIVE_TREND] + # series = [trend_type_to_series[trend_type][0] for trend_type in trend_types] + # percents = [serie.sum() if xlabel == STARTING_YEARS_XLABEL else serie.mean() for serie in series] + # percents = [np.round(p) for p in percents] + # specific_title += 'Total ' if xlabel == STARTING_YEARS_XLABEL else 'Mean ' + # specific_title += 'all trend {}, all significative trends: {} (+:{} -{})'.format(*percents) plt.suptitle(specific_title) - self.show_or_save_to_file(specific_title=specific_title) + if show_or_save_to_file: + self.show_or_save_to_file(specific_title=specific_title) + + return specific_title + + def load_trend_test_evolution_axes(self, nb_rows): + fig, axes = plt.subplots(nb_rows, 1, figsize=self.study_visualizer.figsize) + if not isinstance(axes, np.ndarray): + axes = [axes] + return axes - def visualize_trend_test_repartition(self, reduction_function, axes=None, subtitle=''): + def visualize_trend_test_repartition(self, reduction_function, axes=None, subtitle='', isin_parameters=None): if axes is None: - nb_trend_type = len(self.display_trend_type_to_style) - fig, axes = plt.subplots(self.nb_axes, nb_trend_type, figsize=self.study_visualizer.figsize) + axes = self.load_axes_for_trend_test_repartition(self.nb_rows) + else: + assert len(axes) == self.nb_rows for i, axes_row in enumerate(axes): trend_type_to_serie = {k: v[i].replace(0.0, np.nan) for k, v in - self.trend_type_to_series(reduction_function).items()} + self.trend_type_to_series(reduction_function, isin_parameters).items()} vmax = max([s.max() for s in trend_type_to_serie.values()]) vmin = min([s.min() for s in trend_type_to_serie.values()]) vmax = max(vmax, 0.01) @@ -162,6 +177,11 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): plt.suptitle(title) self.show_or_save_to_file(specific_title=title) + def load_axes_for_trend_test_repartition(self, nb_rows): + nb_trend_type = len(self.display_trend_type_to_style) + fig, axes = plt.subplots(nb_rows, nb_trend_type, figsize=self.study_visualizer.figsize) + return axes + @property def altitude_index_level(self): return 0 @@ -189,18 +209,23 @@ class AltitudeHypercubeVisualizer(AbstractHypercubeVisualizer): # Take the mean with respect to the level of interest return df.mean(level=level) - def visualize_altitude_trend_test(self, axes=None, marker='o', add_detailed_plots=False): + def visualize_altitude_trend_test(self, axes=None, marker='o', add_detailed_plots=False, plot_title=None, + isin_parameters=None, + show_or_save_to_file=True): for subtitle, reduction_function in self.subtitle_to_reduction_function(self.index_reduction, level=self.altitude_index_level, add_detailed_plot=add_detailed_plots).items(): - self.visualize_trend_test_evolution(reduction_function=reduction_function, xlabel=ALTITUDES_XLABEL, - xlabel_values=self.altitudes, axes=axes, marker=marker, - subtitle=subtitle) - - def visualize_massif_trend_test(self, axes=None, add_detailed_plots=False): + last_result = self.visualize_trend_test_evolution(reduction_function=reduction_function, + xlabel=ALTITUDES_XLABEL, + xlabel_values=self.altitudes, axes=axes, marker=marker, + subtitle=subtitle, isin_parameters=isin_parameters, + show_or_save_to_file=show_or_save_to_file, + plot_title=plot_title) + return last_result + + def visualize_massif_trend_test(self, axes=None, add_detailed_plots=False, isin_parameters=None): for subtitle, reduction_function in self.subtitle_to_reduction_function(self.index_reduction, level=self.massif_index_level, add_detailed_plot=add_detailed_plots).items(): - self.visualize_trend_test_repartition(reduction_function, axes, subtitle=subtitle) - - + self.visualize_trend_test_repartition(reduction_function, axes, subtitle=subtitle, + isin_parameters=isin_parameters) diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py index 14a1c0c35deda9bb77002650b30c6300ea7ff211..024d060bc8e56b4c5b0fa8c71d612b20398806b7 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_hypercube_visualizer_extended.py @@ -1,18 +1,58 @@ +from experiment.meteo_france_data.scm_models_data.abstract_extended_study import AbstractExtendedStudy from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.abstract_hypercube_visualizer import \ AbstractHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ AltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ - Altitude_Hypercube_Year_Visualizer + Altitude_Hypercube_Year_Visualizer, AltitudeHypercubeVisualizerBis class AltitudeHypercubeVisualizerExtended(AltitudeHypercubeVisualizer): - def df_bool(self, display_trend_type): + def df_bool(self, display_trend_type, isin_parameters=None): df_bool = super().df_bool(display_trend_type) - print(df_bool) + # Slice a part of the array + if isin_parameters is not None: + assert isinstance(isin_parameters, list) + for isin_parameter in isin_parameters: + transpose, values, level = isin_parameter + if transpose: + df_bool = df_bool.transpose() + ind = df_bool.index.isin(values=values, level=level) + res = df_bool.loc[ind].copy() + df_bool = res.transpose() if transpose else res return df_bool + @property + def region_name_to_isin_parameters(self): + return {region_name: [(False, values, self.massif_index_level)] + for region_name, values in AbstractExtendedStudy.region_name_to_massif_names.items()} + + @property + def nb_regions(self): + return len(self.region_name_to_isin_parameters) + + def altitude_band_name_to_isin_parameters(self): + return self.altitudes + + def visualize_altitute_trend_test_by_regions(self): + return self._visualize_altitude_trend_test(name_to_isin_parameters=self.region_name_to_isin_parameters) + + def _visualize_altitude_trend_test(self, name_to_isin_parameters=None): + assert name_to_isin_parameters is not None, 'this method should not be called directly' + multiplication_factor = len(name_to_isin_parameters) + all_axes = self.load_trend_test_evolution_axes(self.nb_rows * multiplication_factor) + specific_title = '' + for j, (name, isin_parameters) in enumerate(name_to_isin_parameters.items()): + axes = all_axes[j::multiplication_factor] + specific_title = self.visualize_altitude_trend_test(axes, plot_title=name, isin_parameters=isin_parameters, show_or_save_to_file=False) + print(specific_title) + self.show_or_save_to_file(specific_title=specific_title) + + +class AltitudeHypercubeVisualizerBisExtended(AltitudeHypercubeVisualizerExtended, AltitudeHypercubeVisualizerBis): + pass + class AltitudeYearHypercubeVisualizerExtended(AltitudeHypercubeVisualizerExtended, Altitude_Hypercube_Year_Visualizer): - pass \ No newline at end of file + pass diff --git a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_year_hypercube_visualizer.py b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_year_hypercube_visualizer.py index ae0d689ddca3cb1c227d616a098a876f37a65515..6535430d121e7798f61adc56ac666a521491999a 100644 --- a/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_year_hypercube_visualizer.py +++ b/experiment/meteo_france_data/scm_models_data/visualization/hypercube_visualization/altitude_year_hypercube_visualizer.py @@ -4,16 +4,7 @@ from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visual AltitudeHypercubeVisualizer -class Altitude_Hypercube_Year_Visualizer(AltitudeHypercubeVisualizer): - - def get_title_plot(self, xlabel, ax_idx=None): - if ax_idx == self.nb_axes - 1: - return 'mean starting year' - return super().get_title_plot(xlabel, ax_idx) - - @property - def nb_axes(self): - return super().nb_axes + 1 +class AltitudeHypercubeVisualizerBis(AltitudeHypercubeVisualizer): @staticmethod def index_reduction(df, level, **kwargs): @@ -26,10 +17,21 @@ class Altitude_Hypercube_Year_Visualizer(AltitudeHypercubeVisualizer): # Take the mean with respect to the level of interest return df.mean(level=level) - def trend_type_reduction_series(self, reduction_function, display_trend_type): - series = super().trend_type_reduction_series(reduction_function, display_trend_type) + +class Altitude_Hypercube_Year_Visualizer(AltitudeHypercubeVisualizerBis): + + def get_title_plot(self, xlabel, ax_idx=None): + if ax_idx == self.nb_rows - 1: + return 'mean starting year' + return super().get_title_plot(xlabel, ax_idx) + + @property + def nb_rows(self): + return super().nb_rows + 1 + + def trend_type_reduction_series(self, reduction_function, df_bool): + series = super().trend_type_reduction_series(reduction_function, df_bool) # Create df argmax - df_bool = self.df_bool(display_trend_type) df = df_bool.copy() df = (df * df.columns)[df_bool] # Reduce and append 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 17dc97510ef9aa7f07c2fc18fb4affb47564f218..d3df13adf9644592ec75dd7bda86515e2e358965 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 @@ -5,7 +5,7 @@ from itertools import product from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ AltitudeHypercubeVisualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer_extended import \ - AltitudeYearHypercubeVisualizerExtended + AltitudeYearHypercubeVisualizerExtended, AltitudeHypercubeVisualizerExtended, AltitudeHypercubeVisualizerBisExtended from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ Altitude_Hypercube_Year_Visualizer from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.quantity_altitude_visualizer import \ @@ -84,9 +84,10 @@ def fast_altitude_year_hypercube(): for study_class in SCM_STUDIES[:1]: for last_starting_year in [None, 1989, 1999][:1]: for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]: - visualizers = [StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) - for study in study_iterator(study_class=study_class, only_first_one=only_first_one, - altitudes=altitudes)] + visualizers = [ + StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) + for study in study_iterator(study_class=study_class, only_first_one=only_first_one, + altitudes=altitudes)] altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) visualizer = Altitude_Hypercube_Year_Visualizer(altitude_to_visualizer, save_to_file=save_to_file, trend_test_class=trend_test_class, @@ -97,7 +98,7 @@ def fast_altitude_year_hypercube(): # visualizer.visualize_massif_trend_test() -def fast_altitude_year_hypercube_extendede(): +def fast_altitude_year_hypercube_extended(): save_to_file = False only_first_one = False nb_data_reduced_for_speed = True @@ -105,16 +106,18 @@ def fast_altitude_year_hypercube_extendede(): for study_class in SCM_STUDIES[:1]: for last_starting_year in [None, 1989, 1999][:1]: for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]: - visualizers = [StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) - for study in study_iterator(study_class=study_class, only_first_one=only_first_one, - altitudes=altitudes)] + visualizers = [ + StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) + for study in study_iterator(study_class=study_class, only_first_one=only_first_one, + altitudes=altitudes)] altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) - visualizer = AltitudeYearHypercubeVisualizerExtended(altitude_to_visualizer, save_to_file=save_to_file, - trend_test_class=trend_test_class, - nb_data_reduced_for_speed=nb_data_reduced_for_speed, - last_starting_year=last_starting_year) + visualizer = AltitudeHypercubeVisualizerExtended(altitude_to_visualizer, save_to_file=save_to_file, + 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_altitude_trend_test() + visualizer.visualize_altitute_trend_test_by_regions() # visualizer.visualize_massif_trend_test() @@ -126,7 +129,7 @@ def full_altitude_year_hypercube(): for study_class in SCM_STUDIES[:1]: for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, GevShapeChangePointTest][:1]: - years = [1967, 1977, 1987, 1997, 2007, None][:-1][::-1] + years = [1967, 1977, 1987, 1997, 2007, None][-2:-1][::-1] for last_starting_year in years: visualizers = [ StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) @@ -143,6 +146,32 @@ def full_altitude_year_hypercube(): visualizer.visualize_altitude_trend_test() +def full_altitude_year_hypercube_extended(): + save_to_file = True + only_first_one = False + nb_data_reduced_for_speed = False + altitudes = ALL_ALTITUDES[3:-6] + for study_class in SCM_STUDIES[:1]: + for trend_test_class in [GevLocationChangePointTest, GevScaleChangePointTest, + GevShapeChangePointTest][:1]: + years = [1967, 1977, 1987, 1997, 2007, None][-2:-1][::-1] + for last_starting_year in years: + visualizers = [ + StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) + for study in study_iterator(study_class=study_class, only_first_one=only_first_one, + altitudes=altitudes)] + altitude_to_visualizer = OrderedDict(zip(altitudes, visualizers)) + visualizer = AltitudeHypercubeVisualizerBisExtended(altitude_to_visualizer, + save_to_file=save_to_file, + trend_test_class=trend_test_class, + nb_data_reduced_for_speed=nb_data_reduced_for_speed, + last_starting_year=last_starting_year) + visualizer.visualize_altitute_trend_test_by_regions() + # visualizer.visualize_year_trend_test() + # visualizer.visualize_massif_trend_test() + visualizer.visualize_altitude_trend_test() + + def fast_quantity_altitude_hypercube(): save_to_file = False only_first_one = False @@ -166,8 +195,10 @@ def fast_quantity_altitude_hypercube(): def main_run(): # fast_altitude_hypercube() # fast_altitude_year_hypercube() - fast_altitude_year_hypercube_extendede() - # full_altitude_year_hypercube() + + # fast_altitude_year_hypercube_extended() + # full_altitude_year_hypercube_extended() + full_altitude_year_hypercube() # fast_quantity_altitude_hypercube() # full_quantity_altitude_hypercube() diff --git a/experiment/trend_analysis/univariate_test/abstract_univariate_test.py b/experiment/trend_analysis/univariate_test/abstract_univariate_test.py index d412e7c172dade18295d45a650b55ec17ad32682..35b71dba8579c5c1afe88c6a9e9c1c3c6c198d46 100644 --- a/experiment/trend_analysis/univariate_test/abstract_univariate_test.py +++ b/experiment/trend_analysis/univariate_test/abstract_univariate_test.py @@ -58,8 +58,8 @@ class AbstractUnivariateTest(object): d = OrderedDict() # d[cls.POSITIVE_TREND] = 'g--' # d[cls.NEGATIVE_TREND] = 'r--' - d[cls.ALL_TREND] = 'k--' - d[cls.NON_SIGNIFICATIVE_TREND] = 'b--' + d[cls.ALL_TREND] = 'k-' + d[cls.NON_SIGNIFICATIVE_TREND] = 'b-' # d[cls.SIGNIFICATIVE_ALL_TREND] = 'k-' d[cls.SIGNIFICATIVE_POSITIVE_TREND] = 'g-' d[cls.SIGNIFICATIVE_NEGATIVE_TREND] = 'r-' diff --git a/test/test_experiment/test_hypercube.py b/test/test_experiment/test_hypercube.py new file mode 100644 index 0000000000000000000000000000000000000000..845102aeef2a9fb58a855ea02baf0f171339ec6e --- /dev/null +++ b/test/test_experiment/test_hypercube.py @@ -0,0 +1,57 @@ +import unittest +from collections import OrderedDict + +import numpy as np + +from experiment.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall +from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ + AltitudeHypercubeVisualizer +from experiment.meteo_france_data.scm_models_data.visualization.hypercube_visualization.altitude_year_hypercube_visualizer import \ + Altitude_Hypercube_Year_Visualizer +from experiment.meteo_france_data.scm_models_data.visualization.study_visualization.main_study_visualizer import \ + 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 extreme_estimator.extreme_models.utils import set_seed_for_test + + +class TestHypercube(unittest.TestCase): + DISPLAY = True + + def setUp(self) -> None: + set_seed_for_test(42) + altitudes = [900, 3000] + + visualizers = [StudyVisualizer(study, temporal_non_stationarity=True, verbose=False, multiprocessing=True) + 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.nb_data_reduced_for_speed = 2 + + # def test_altitude_hypercube_visualizer(self): + # visualizer = AltitudeHypercubeVisualizer(self.altitude_to_visualizer, save_to_file=False, + # trend_test_class=self.trend_test_class, + # nb_data_reduced_for_speed=self.nb_data_reduced_for_speed, + # verbose=self.DISPLAY) + # self.df = visualizer.df_hypercube_trend_type + + def test_year_altitude_hypercube_visualizer(self): + visualizer = Altitude_Hypercube_Year_Visualizer(self.altitude_to_visualizer, save_to_file=False, + trend_test_class=self.trend_test_class, + nb_data_reduced_for_speed=self.nb_data_reduced_for_speed, + verbose=self.DISPLAY) + self.df = visualizer.df_hypercube_trend_type + + def tearDown(self) -> None: + if self.DISPLAY: + print(self.df) + # Check that all the rows contain + nb_non_nan_values_per_row = (~self.df.isnull()).sum(axis=1) + equality = nb_non_nan_values_per_row.values == np.ones(len(self.df)) + self.assertTrue(equality.all()) + + +if __name__ == '__main__': + unittest.main()