utils_altitude_studies_visualizer.py 2.71 KiB
from extreme_fit.model.margin_model.polynomial_margin_model.utils import \
    ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
from extreme_data.meteo_france_data.scm_models_data.altitudes_studies import AltitudesStudies
from extreme_trend.one_fold_fit.altitudes_studies_visualizer_for_non_stationary_models import \
    AltitudesStudiesVisualizerForNonStationaryModels


def load_visualizer_list(season, study_class, altitudes_list, massif_names, model_must_pass_the_test=True, **kwargs_study):
    model_classes = ALTITUDINAL_GEV_MODELS_BASED_ON_POINTWISE_ANALYSIS
    visualizer_list = []
    # Load all studies
    for altitudes in altitudes_list:
        studies = AltitudesStudies(study_class, altitudes, season=season, **kwargs_study)
        visualizer = AltitudesStudiesVisualizerForNonStationaryModels(studies=studies,
                                                                      model_classes=model_classes,
                                                                      massif_names=massif_names,
                                                                      show=False,
                                                                      temporal_covariate_for_fit=None,
                                                                      confidence_interval_based_on_delta_method=False,
                                                                      display_only_model_that_pass_anderson_test=model_must_pass_the_test
                                                                      )
        visualizer_list.append(visualizer)
    compute_and_assign_max_abs(visualizer_list)

    return visualizer_list


def compute_and_assign_max_abs(visualizer_list):
    # Compute the max abs for all metrics
    method_name_and_order_to_max_abs = {}
    for method_name in AltitudesStudiesVisualizerForNonStationaryModels.moment_names:
        for order in AltitudesStudiesVisualizerForNonStationaryModels.orders:
            c = (method_name, order)
            max_abs = max([
                max([abs(e) for e in v.method_name_and_order_to_d(method_name, order).values()
                     ]) for v in visualizer_list])
            if max_abs == 0:
                epsilon = 0.1
                max_abs = epsilon
            method_name_and_order_to_max_abs[c] = max_abs
    # Assign the max abs dictionary
    for v in visualizer_list:
        v._method_name_and_order_to_max_abs = method_name_and_order_to_max_abs
    # Compute the max abs for the shape parameter
    max_abs_for_shape = max([max([abs(e) for e in v.massif_name_to_shape.values()]) for v in visualizer_list])
    for v in visualizer_list:
        v._max_abs_for_shape = max_abs_for_shape
    return method_name_and_order_to_max_abs, max_abs_for_shape