From d3a7ba8a4848780b8dbfed9bce775d5ebd385853 Mon Sep 17 00:00:00 2001 From: Le Roux Erwan <erwan.le-roux@irstea.fr> Date: Fri, 18 Oct 2019 17:48:02 +0200 Subject: [PATCH] [EXPERIMENT][EUROCODE] refactor eurocode data. --- ...ses.py => departement_alpes_francaises.py} | 14 ++++++------ ...{region_eurocode.py => eurocode_region.py} | 8 +++---- .../eurocode_data/eurocode_visualizer.py | 13 ++++++----- .../massif_name_to_departement.py | 22 ++++++++++++++++--- test/test_experiment/test_region_eurocode.py | 3 ++- 5 files changed, 39 insertions(+), 21 deletions(-) rename experiment/eurocode_data/{departementalpesfrancaises.py => departement_alpes_francaises.py} (85%) rename experiment/eurocode_data/{region_eurocode.py => eurocode_region.py} (93%) diff --git a/experiment/eurocode_data/departementalpesfrancaises.py b/experiment/eurocode_data/departement_alpes_francaises.py similarity index 85% rename from experiment/eurocode_data/departementalpesfrancaises.py rename to experiment/eurocode_data/departement_alpes_francaises.py index 4467bf7c..79d005be 100644 --- a/experiment/eurocode_data/departementalpesfrancaises.py +++ b/experiment/eurocode_data/departement_alpes_francaises.py @@ -1,12 +1,12 @@ from enum import Enum -from experiment.eurocode_data.region_eurocode import AbstractRegionType, E, C2, C1 +from experiment.eurocode_data.eurocode_region import AbstractEurocodeRegion, E, C2, C1 class AbstractDepartementAlpesFrancaises(object): def __init__(self, region: type): - self.region = region() # type: AbstractRegionType + self.region = region() # type: AbstractEurocodeRegion class HauteSavoie(AbstractDepartementAlpesFrancaises): @@ -27,6 +27,11 @@ class Isere(AbstractDepartementAlpesFrancaises): super().__init__(C2) +class Drome(AbstractDepartementAlpesFrancaises): + + def __init__(self): + super().__init__(C2) + class HautesAlpes(AbstractDepartementAlpesFrancaises): def __init__(self): @@ -45,9 +50,4 @@ class AlpesDeHauteProvence(AbstractDepartementAlpesFrancaises): super().__init__(C1) -class Drome(AbstractDepartementAlpesFrancaises): - - def __init__(self): - super().__init__(C2) - diff --git a/experiment/eurocode_data/region_eurocode.py b/experiment/eurocode_data/eurocode_region.py similarity index 93% rename from experiment/eurocode_data/region_eurocode.py rename to experiment/eurocode_data/eurocode_region.py index 6c72caf6..2b70fdd6 100644 --- a/experiment/eurocode_data/region_eurocode.py +++ b/experiment/eurocode_data/eurocode_region.py @@ -1,4 +1,4 @@ -class AbstractRegionType(object): +class AbstractEurocodeRegion(object): def __init__(self, sk0, sad) -> None: # Valeurs caracteristique de la charge de neige sur le sol à une altitude inférieure à 200m @@ -41,19 +41,19 @@ class AbstractRegionType(object): return 3.5, -2.45 -class C1(AbstractRegionType): +class C1(AbstractEurocodeRegion): def __init__(self) -> None: super().__init__(0.65, None) -class C2(AbstractRegionType): +class C2(AbstractEurocodeRegion): def __init__(self) -> None: super().__init__(0.65, 1.35) -class E(AbstractRegionType): +class E(AbstractEurocodeRegion): def __init__(self) -> None: super().__init__(1.40, None) diff --git a/experiment/eurocode_data/eurocode_visualizer.py b/experiment/eurocode_data/eurocode_visualizer.py index 74d031e2..387a8042 100644 --- a/experiment/eurocode_data/eurocode_visualizer.py +++ b/experiment/eurocode_data/eurocode_visualizer.py @@ -1,21 +1,22 @@ from collections import OrderedDict import matplotlib.pyplot as plt -from experiment.eurocode_data.massif_name_to_departement import massif_name_to_departements -from experiment.eurocode_data.region_eurocode import AbstractRegionType +from experiment.eurocode_data.massif_name_to_departement import massif_name_to_departement_objects +from experiment.eurocode_data.eurocode_region import AbstractEurocodeRegion from utils import get_display_name_from_object_type -def display_region_limit(region_type, altitudes, ordered_massif_name_to_quantiles, ordered_massif_name_to_significances=None, +def display_region_limit(region_type, altitudes, ordered_massif_name_to_quantiles, + ordered_massif_name_to_significances=None, display=True): assert isinstance(ordered_massif_name_to_quantiles, OrderedDict) assert ordered_massif_name_to_significances is None or isinstance(ordered_massif_name_to_significances, OrderedDict) # First, select massif name correspond to the region massif_name_belong_to_the_region = [] for massif_name in ordered_massif_name_to_quantiles.keys(): - if any([isinstance(dep.region, region_type) for dep in massif_name_to_departements[massif_name]]): + if any([isinstance(dep.region, region_type) for dep in massif_name_to_departement_objects[massif_name]]): massif_name_belong_to_the_region.append(massif_name) - region_object = region_type() # type: AbstractRegionType + region_object = region_type() # type: AbstractEurocodeRegion # Then, display the limit for the region fig, ax = plt.subplots(1, 1) ax.plot(altitudes, [region_object.eurocode_max_loading(altitude) for altitude in altitudes], label='Eurocode limit') @@ -27,4 +28,4 @@ def display_region_limit(region_type, altitudes, ordered_massif_name_to_quantile ax.set_ylabel('0.98 quantile (in N $m^-2$)') ax.legend() if display: - plt.show() \ No newline at end of file + plt.show() diff --git a/experiment/eurocode_data/massif_name_to_departement.py b/experiment/eurocode_data/massif_name_to_departement.py index fe9807ac..2e585248 100644 --- a/experiment/eurocode_data/massif_name_to_departement.py +++ b/experiment/eurocode_data/massif_name_to_departement.py @@ -1,9 +1,11 @@ from typing import Dict, List -from experiment.eurocode_data.departementalpesfrancaises import HauteSavoie, Savoie, Isere, Drome, HautesAlpes, \ +from experiment.eurocode_data.departement_alpes_francaises import HauteSavoie, Savoie, Isere, Drome, HautesAlpes, \ AlpesDeHauteProvence, AlpesMaritimes, AbstractDepartementAlpesFrancaises -massif_name_to_departements = { + + +massif_name_to_departement_types = { 'Chablais': [HauteSavoie], 'Aravis': [HauteSavoie, Savoie], 'Mont-Blanc': [HauteSavoie], @@ -27,4 +29,18 @@ massif_name_to_departements = { 'Ubaye': [AlpesDeHauteProvence], 'Haut_Var-Haut_Verdon': [AlpesDeHauteProvence], 'Mercantour': [AlpesMaritimes, AlpesDeHauteProvence]} -massif_name_to_departements = {m: [d() for d in deps] for m, deps in massif_name_to_departements.items()} # type: Dict[str, List[AbstractDepartementAlpesFrancaises]] + +massif_name_to_departement_objects = {m: [d() for d in deps] for m, deps in massif_name_to_departement_types.items()} # type: Dict[str, List[AbstractDepartementAlpesFrancaises]] + +DEPARTEMENT_TYPES = [HauteSavoie, Savoie, Isere, Drome, HautesAlpes, AlpesMaritimes, AlpesDeHauteProvence] + +departement_type_to_massif_names = {dep: [k for k, v in massif_name_to_departement_types.items() if dep in v] + for dep in DEPARTEMENT_TYPES +} + +if __name__ == '__main__': + for k, v in departement_type_to_massif_names.items(): + print(k, v) + + + diff --git a/test/test_experiment/test_region_eurocode.py b/test/test_experiment/test_region_eurocode.py index 706631c0..97e7d3df 100644 --- a/test/test_experiment/test_region_eurocode.py +++ b/test/test_experiment/test_region_eurocode.py @@ -2,7 +2,7 @@ import unittest from collections import OrderedDict from experiment.eurocode_data.eurocode_visualizer import display_region_limit -from experiment.eurocode_data.region_eurocode import C1, E +from experiment.eurocode_data.eurocode_region import C1, E, C2 class TestCoordinateSensitivity(unittest.TestCase): @@ -14,6 +14,7 @@ class TestCoordinateSensitivity(unittest.TestCase): ordered_massif_name_to_quantiles['Vanoise'] = [1.2, 1.5, 1.7, 2.1] ordered_massif_name_to_quantiles['Vercors'] = [0.7, 0.8, 1.1, 1.5] display_region_limit(C1, altitudes, ordered_massif_name_to_quantiles, display=self.DISPLAY) + display_region_limit(C2, altitudes, ordered_massif_name_to_quantiles, display=self.DISPLAY) display_region_limit(E, altitudes, ordered_massif_name_to_quantiles, display=self.DISPLAY) -- GitLab