diff --git a/experiment/meteo_france_SCM_study/__init__.py b/experiment/meteo_france_SCM_models/__init__.py similarity index 100% rename from experiment/meteo_france_SCM_study/__init__.py rename to experiment/meteo_france_SCM_models/__init__.py diff --git a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/__init__.py b/experiment/meteo_france_SCM_models/study/__init__.py similarity index 100% rename from experiment/meteo_france_SCM_study/visualization/hypercube_visualization/__init__.py rename to experiment/meteo_france_SCM_models/study/__init__.py diff --git a/experiment/meteo_france_SCM_study/abstract_extended_study.py b/experiment/meteo_france_SCM_models/study/abstract_extended_study.py similarity index 97% rename from experiment/meteo_france_SCM_study/abstract_extended_study.py rename to experiment/meteo_france_SCM_models/study/abstract_extended_study.py index a2d39a70a8b68e30d28f4bd25b92029bbefb9fab..e14d632479627710803929d7720cd0ec45d63f8b 100644 --- a/experiment/meteo_france_SCM_study/abstract_extended_study.py +++ b/experiment/meteo_france_SCM_models/study/abstract_extended_study.py @@ -1,7 +1,7 @@ import numpy as np from collections import OrderedDict -from experiment.meteo_france_SCM_study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy from spatio_temporal_dataset.coordinates.spatial_coordinates.abstract_spatial_coordinates import \ AbstractSpatialCoordinates diff --git a/experiment/meteo_france_SCM_study/abstract_study.py b/experiment/meteo_france_SCM_models/study/abstract_study.py similarity index 98% rename from experiment/meteo_france_SCM_study/abstract_study.py rename to experiment/meteo_france_SCM_models/study/abstract_study.py index 51b76c85a99079c0fa6b23b4a2a5ca15c24bad59..7b37cc844d0e273d04ccbe3c146380c174acbcdd 100644 --- a/experiment/meteo_france_SCM_study/abstract_study.py +++ b/experiment/meteo_france_SCM_models/study/abstract_study.py @@ -15,9 +15,9 @@ from matplotlib import cm from matplotlib.colors import Normalize from netCDF4 import Dataset -from experiment.meteo_france_SCM_study.abstract_variable import AbstractVariable -from experiment.meteo_france_SCM_study.scm_constants import ALTITUDES, ZS_INT_23, ZS_INT_MASK, LONGITUDES, LATITUDES -from experiment.meteo_france_SCM_study.visualization.utils import get_km_formatter +from experiment.meteo_france_SCM_models.study.abstract_variable import AbstractVariable +from experiment.meteo_france_SCM_models.study.scm_constants import ALTITUDES, ZS_INT_23, ZS_INT_MASK, LONGITUDES, LATITUDES +from experiment.meteo_france_SCM_models.visualization.utils import get_km_formatter from extreme_estimator.extreme_models.margin_model.margin_function.abstract_margin_function import \ AbstractMarginFunction from extreme_estimator.margin_fits.plot.create_shifted_cmap import get_color_rbga_shifted, create_colorbase_axis diff --git a/experiment/meteo_france_SCM_study/abstract_variable.py b/experiment/meteo_france_SCM_models/study/abstract_variable.py similarity index 75% rename from experiment/meteo_france_SCM_study/abstract_variable.py rename to experiment/meteo_france_SCM_models/study/abstract_variable.py index 2ed37e127d7f23d93ba9525fe1dd8aa24b76e9ae..9e5a07c400f6cc7f93e76bda78d681417c67cece 100644 --- a/experiment/meteo_france_SCM_study/abstract_variable.py +++ b/experiment/meteo_france_SCM_models/study/abstract_variable.py @@ -9,8 +9,9 @@ class AbstractVariable(object): NAME = '' UNIT = '' - def __init__(self, variable_array): + def __init__(self, variable_array, nb_consecutive_days_of_snowfall=1): self.variable_array = variable_array + self.nb_consecutive_days_of_snowfall = nb_consecutive_days_of_snowfall @classmethod def keyword(cls): diff --git a/experiment/meteo_france_SCM_study/visualization/studies_visualization/__init__.py b/experiment/meteo_france_SCM_models/study/crocus/__init__.py similarity index 100% rename from experiment/meteo_france_SCM_study/visualization/studies_visualization/__init__.py rename to experiment/meteo_france_SCM_models/study/crocus/__init__.py diff --git a/experiment/meteo_france_SCM_models/study/crocus/crocus.py b/experiment/meteo_france_SCM_models/study/crocus/crocus.py new file mode 100644 index 0000000000000000000000000000000000000000..e974080280ae8c837db47654d9d13defceef4441 --- /dev/null +++ b/experiment/meteo_france_SCM_models/study/crocus/crocus.py @@ -0,0 +1,71 @@ +import numpy as np + +from experiment.meteo_france_SCM_models.study.abstract_extended_study import AbstractExtendedStudy +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.crocus.crocus_variables import CrocusSweVariable, CrocusDepthVariable + + +class Crocus(AbstractStudy): + """ + In the Crocus data, there is no 'massifsList' variable, thus we assume massifs are ordered just like Safran data + """ + + def __init__(self, variable_class, *args, **kwargs): + assert variable_class in [CrocusSweVariable, CrocusDepthVariable] + super().__init__(variable_class, *args, **kwargs) + self.model_name = 'Crocus' + + def annual_aggregation_function(self, *args, **kwargs): + return np.mean(*args, **kwargs) + + def winter_annual_aggregation(self, time_serie): + # In the Durand paper, we only want the data from November to April + # 91 = 30 + 31 + 30 first days of the time serie correspond to the month of August + September + October + # 92 = 31 + 30 + 31 last days correspond to the month of May + June + JUly + return super().apply_annual_aggregation(time_serie[91:-92, ...]) + + +class CrocusSwe(Crocus): + + def __init__(self, *args, **kwargs): + super().__init__(CrocusSweVariable, *args, **kwargs) + + def apply_annual_aggregation(self, time_serie): + return self.winter_annual_aggregation(time_serie) + + +class ExtendedCrocusSwe(AbstractExtendedStudy, CrocusSwe): + pass + + +class CrocusDepth(Crocus): + + def __init__(self, *args, **kwargs): + super().__init__(CrocusDepthVariable, *args, **kwargs) + + def apply_annual_aggregation(self, time_serie): + return self.winter_annual_aggregation(time_serie) + + +class ExtendedCrocusDepth(AbstractExtendedStudy, CrocusDepth): + pass + + +class CrocusDaysWithSnowOnGround(Crocus): + """Having snow on the ground is equivalent to snow depth > 0""" + + def __init__(self, *args, **kwargs): + super().__init__(CrocusDepthVariable, *args, **kwargs) + + def annual_aggregation_function(self, *args, **kwargs): + return np.count_nonzero(*args, **kwargs) + + +if __name__ == '__main__': + for variable_class in [CrocusSweVariable, CrocusDepthVariable][:1]: + study = Crocus(variable_class=variable_class, altitude=2400) + d = study.year_to_dataset_ordered_dict[1960] + print(study.df_massifs_longitude_and_latitude) + time_arr = np.array(d.variables['time']) + a = study.year_to_daily_time_serie_array[1960] + print(a.shape) diff --git a/experiment/meteo_france_SCM_models/study/crocus/crocus_variables.py b/experiment/meteo_france_SCM_models/study/crocus/crocus_variables.py new file mode 100644 index 0000000000000000000000000000000000000000..874517a3e8dd2b9e8ca8dab424d8b1c70878e947 --- /dev/null +++ b/experiment/meteo_france_SCM_models/study/crocus/crocus_variables.py @@ -0,0 +1,28 @@ +import numpy as np + +from experiment.meteo_france_SCM_models.study.abstract_variable import AbstractVariable + + +class CrocusVariable(AbstractVariable): + + @property + def daily_time_serie_array(self) -> np.ndarray: + return self.variable_array + + +class CrocusSweVariable(CrocusVariable): + NAME = 'Snow Water Equivalent' + UNIT = 'kg per m2 or mm' + + @classmethod + def keyword(cls): + return 'SWE_1DY_ISBA' + + +class CrocusDepthVariable(CrocusVariable): + NAME = 'Snow Depth' + UNIT = 'm' + + @classmethod + def keyword(cls): + return "SD_1DY_ISBA" diff --git a/experiment/meteo_france_SCM_models/study/cumulated_study.py b/experiment/meteo_france_SCM_models/study/cumulated_study.py new file mode 100644 index 0000000000000000000000000000000000000000..e5300ff483796c7a0ae87a09483e89ed57d7cc54 --- /dev/null +++ b/experiment/meteo_france_SCM_models/study/cumulated_study.py @@ -0,0 +1,20 @@ +import numpy as np + +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.abstract_variable import AbstractVariable + + +class CumulatedStudy(AbstractStudy): + def __init__(self, variable_class: type, nb_consecutive_days: int = 1, *args, **kwargs): + assert nb_consecutive_days in [1, 3, 5, 7] + super().__init__(variable_class, *args, **kwargs) + self.nb_consecutive_days = nb_consecutive_days + + def instantiate_variable_object(self, variable_array) -> AbstractVariable: + return self.variable_class(variable_array, self.nb_consecutive_days) + + @property + def variable_name(self): + return super().variable_name + ' cumulated over {} day(s)'.format(self.nb_consecutive_days) + + diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/__init__.py b/experiment/meteo_france_SCM_models/study/safran/__init__.py similarity index 100% rename from experiment/meteo_france_SCM_study/visualization/study_visualization/__init__.py rename to experiment/meteo_france_SCM_models/study/safran/__init__.py diff --git a/experiment/meteo_france_SCM_models/study/safran/safran.py b/experiment/meteo_france_SCM_models/study/safran/safran.py new file mode 100644 index 0000000000000000000000000000000000000000..f845aa013330365a25eea51fb9e342ec97d873eb --- /dev/null +++ b/experiment/meteo_france_SCM_models/study/safran/safran.py @@ -0,0 +1,74 @@ +import numpy as np + +from experiment.meteo_france_SCM_models.study.abstract_extended_study import AbstractExtendedStudy +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.abstract_variable import AbstractVariable +from experiment.meteo_france_SCM_models.study.cumulated_study import CumulatedStudy +from experiment.meteo_france_SCM_models.study.safran.safran_variable import SafranSnowfallVariable, \ + SafranRainfallVariable, SafranTemperatureVariable, SafranTotalPrecipVariable + + +class Safran(AbstractStudy): + + def __init__(self, variable_class: type, *args, **kwargs): + assert variable_class in [SafranSnowfallVariable, SafranRainfallVariable, SafranTemperatureVariable, + SafranTotalPrecipVariable] + super().__init__(variable_class, *args, **kwargs) + self.model_name = 'Safran' + + def annual_aggregation_function(self, *args, **kwargs): + return np.sum(*args, **kwargs) + + +class SafranSnowfall(Safran, CumulatedStudy): + + def __init__(self, *args, **kwargs): + CumulatedStudy.__init__(self, SafranSnowfallVariable, *args, **kwargs) + Safran.__init__(self, SafranSnowfallVariable, *args, **kwargs) + + +class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall): + pass + + +class SafranRainfall(CumulatedStudy, Safran): + + def __init__(self, *args, **kwargs): + super().__init__(SafranRainfallVariable, *args, **kwargs) + + +class SafranTotalPrecip(CumulatedStudy, Safran): + + def __init__(self, *args, **kwargs): + super().__init__(SafranTotalPrecipVariable, *args, **kwargs) + + def instantiate_variable_object(self, variable_array) -> AbstractVariable: + variable_array_snowfall, variable_array_rainfall = variable_array + return self.variable_class(variable_array_snowfall, variable_array_rainfall, self.nb_consecutive_days) + + +class ExtendedSafranTotalPrecip(AbstractExtendedStudy, SafranTotalPrecip): + pass + + +class SafranTemperature(Safran): + + def __init__(self, *args, **kwargs): + super().__init__(SafranTemperatureVariable, *args, **kwargs) + + def annual_aggregation_function(self, *args, **kwargs): + return np.mean(*args, **kwargs) + + +if __name__ == '__main__': + study = SafranSnowfall() + d = study.year_to_dataset_ordered_dict[1958] + # print(d.variables['time']) + # print(study.all_massif_names) + # print(study.massif_name_to_altitudes) + # print(study.year_to_daily_time_serie_array[1958].shape) + print(study.missing_massif_name) + + # print(len(d.variables['time'])) + # print(study.year_to_annual_total) + # print(study.df_annual_total.columns) diff --git a/experiment/meteo_france_SCM_models/study/safran/safran_variable.py b/experiment/meteo_france_SCM_models/study/safran/safran_variable.py new file mode 100644 index 0000000000000000000000000000000000000000..d2c8faa113467438f3bc77fac5c00f8b33c381a6 --- /dev/null +++ b/experiment/meteo_france_SCM_models/study/safran/safran_variable.py @@ -0,0 +1,109 @@ +import numpy as np + +from experiment.meteo_france_SCM_models.study.abstract_variable import AbstractVariable + + +class SafranSnowfallVariable(AbstractVariable): + """" + Safran data is hourly + + Hypothesis: + + -How to count how much snowfall in one hour ? + I take the average between the rhythm of snowfall per second between the start and the end + and multiply that by 60 x 60 which corresponds to the number of seconds in one hour + + -How do how I define the limit of a day ? + From the start, i.e. in August at 4am something like that,then if I add a 24H duration, I arrive to the next day + + -How do you aggregate several days ? + We aggregate all the N consecutive days into a value x_i, then we take the max + (but here the problem might be that the x_i are not idnependent, they are highly dependent one from another) + """ + + NAME = 'Snowfall' + UNIT = 'kg per m2 or mm' + + @classmethod + def keyword(cls): + return 'Snowf' + + def __init__(self, variable_array, nb_consecutive_days_of_snowfall=1): + super().__init__(variable_array) + self.nb_consecutive_days_of_snowfall = nb_consecutive_days_of_snowfall + # Compute the daily snowfall in kg/m2 + snowfall_rates = variable_array + + # Compute the mean snowrate, then multiply it by 60 * 60 * 24 + # day_duration_in_seconds = 24 * 60 * 60 + # nb_days = len(snowfall_rates) // 24 + # print(nb_days) + # daily_snowrate = [np.mean(snowfall_rates[24 * i:24 * (i + 1) + 1], axis=0) for i in range(nb_days)] + # self.daily_snowfall = day_duration_in_seconds * np.array(daily_snowrate) + + # Compute the hourly snowfall first, then aggregate + mean_snowfall_rates = 0.5 * (snowfall_rates[:-1] + snowfall_rates[1:]) + hourly_snowfall = 60 * 60 * mean_snowfall_rates + # Transform the snowfall amount into a dataframe + nb_days = len(hourly_snowfall) // 24 + self.daily_snowfall = [sum(hourly_snowfall[24 * i:24 * (i + 1)]) for i in range(nb_days)] + + @property + def daily_time_serie_array(self) -> np.ndarray: + # Aggregate the daily snowfall by the number of consecutive days + shifted_list = [self.daily_snowfall[i:] for i in range(self.nb_consecutive_days_of_snowfall)] + # First element of shifted_list is of length n, Second element of length n-1, Third element n-2.... + # The zip is done with respect to the shortest list + snowfall_in_consecutive_days = np.array([sum(e) for e in zip(*shifted_list)]) + # The returned array is of size n-nb_days+1 x nb_massif + + # so that the length of the vector match a year, we can add zeros (since it corresponds to the July month, + # we are sure that there is no snowfall at this period) However such trick does not work for other variable such as Temperature + + return snowfall_in_consecutive_days + + +class SafranRainfallVariable(SafranSnowfallVariable): + NAME = 'Rainfall' + UNIT = 'kg per m2 or mm' + + @classmethod + def keyword(cls): + return 'Rainf' + + +class SafranTotalPrecipVariable(AbstractVariable): + + def __init__(self, snow_variable_array, rain_variable_array, nb_consecutive_days_of_snowfall=1): + super().__init__(None) + self.snow_precipitation = SafranSnowfallVariable(snow_variable_array, nb_consecutive_days_of_snowfall) + self.rain_precipitation = SafranRainfallVariable(rain_variable_array, nb_consecutive_days_of_snowfall) + + @classmethod + def keyword(cls): + return [SafranSnowfallVariable.keyword(), SafranRainfallVariable.keyword()] + + @property + def daily_time_serie_array(self) -> np.ndarray: + return self.snow_precipitation.daily_time_serie_array + self.rain_precipitation.daily_time_serie_array + + +class SafranTemperatureVariable(AbstractVariable): + NAME = 'Temperature' + UNIT = 'Celsius Degrees' + + @classmethod + def keyword(cls): + return 'Tair' + + def __init__(self, variable_array): + super().__init__(variable_array) + # Temperature are in K, I transform them as celsius + self.hourly_temperature = self.variable_array - 273.15 + nb_days = len(self.hourly_temperature) // 24 + # Compute the mean temperature + self.daily_temperature = [np.mean(self.hourly_temperature[24 * i:24 * (i + 1)], axis=0) for i in range(nb_days)] + + @property + def daily_time_serie_array(self): + return np.array(self.daily_temperature) diff --git a/experiment/meteo_france_SCM_study/scm_constants.py b/experiment/meteo_france_SCM_models/study/scm_constants.py similarity index 100% rename from experiment/meteo_france_SCM_study/scm_constants.py rename to experiment/meteo_france_SCM_models/study/scm_constants.py diff --git a/experiment/meteo_france_SCM_models/visualization/__init__.py b/experiment/meteo_france_SCM_models/visualization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/__init__.py b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/abstract_hypercube_visualizer.py b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/abstract_hypercube_visualizer.py similarity index 96% rename from experiment/meteo_france_SCM_study/visualization/hypercube_visualization/abstract_hypercube_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/hypercube_visualization/abstract_hypercube_visualizer.py index 32ff017e459cb0f2f6050d5bc46facc27b72e20b..ab333ca2358d2956a20e86ceaa26ad616aa2fe1a 100644 --- a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/abstract_hypercube_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/abstract_hypercube_visualizer.py @@ -5,7 +5,7 @@ from typing import Dict, Tuple import matplotlib.pyplot as plt import pandas as pd -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer from utils import cached_property, VERSION_TIME, get_display_name_from_object_type diff --git a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/altitude_hypercube_visualizer.py b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/altitude_hypercube_visualizer.py similarity index 97% rename from experiment/meteo_france_SCM_study/visualization/hypercube_visualization/altitude_hypercube_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/hypercube_visualization/altitude_hypercube_visualizer.py index cb8557e287c999291afcdd361b17e29db0432016..ff0083457087b6b30eac7b475085e67800e08789 100644 --- a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/altitude_hypercube_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/altitude_hypercube_visualizer.py @@ -2,9 +2,9 @@ import matplotlib.pyplot as plt import numpy as np import pandas as pd -from experiment.meteo_france_SCM_study.visualization.hypercube_visualization.abstract_hypercube_visualizer import \ +from experiment.meteo_france_SCM_models.visualization.hypercube_visualization.abstract_hypercube_visualizer import \ AbstractHypercubeVisualizer -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from utils import get_display_name_from_object_type diff --git a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/main_hypercube_visualization.py similarity index 94% rename from experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py rename to experiment/meteo_france_SCM_models/visualization/hypercube_visualization/main_hypercube_visualization.py index f274e0ab70060fc9c79cd065d556cb05d3580fde..b46406c74993ff2d2e3bd5c16c3d3189d8770618 100644 --- a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/main_hypercube_visualization.py +++ b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/main_hypercube_visualization.py @@ -2,13 +2,13 @@ import time from itertools import product from collections import OrderedDict -from experiment.meteo_france_SCM_study.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ +from experiment.meteo_france_SCM_models.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ AltitudeHypercubeVisualizer, Altitude_Hypercube_Year_Visualizer -from experiment.meteo_france_SCM_study.visualization.hypercube_visualization.quantity_altitude_visualizer import \ +from experiment.meteo_france_SCM_models.visualization.hypercube_visualization.quantity_altitude_visualizer import \ QuantityAltitudeHypercubeVisualizer -from experiment.meteo_france_SCM_study.visualization.study_visualization.main_study_visualizer import ALL_ALTITUDES, \ +from experiment.meteo_france_SCM_models.visualization.study_visualization.main_study_visualizer import ALL_ALTITUDES, \ SCM_STUDIES, study_iterator, study_iterator_global -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \ GevScaleChangePointTest, GevShapeChangePointTest from utils import get_display_name_from_object_type diff --git a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/quantity_altitude_visualizer.py b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/quantity_altitude_visualizer.py similarity index 93% rename from experiment/meteo_france_SCM_study/visualization/hypercube_visualization/quantity_altitude_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/hypercube_visualization/quantity_altitude_visualizer.py index f4e29b8b1aa21209814e6501dbc64a4fa356ee59..c558f29861cfdb64c2a81158309712bdc2dae6c8 100644 --- a/experiment/meteo_france_SCM_study/visualization/hypercube_visualization/quantity_altitude_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/hypercube_visualization/quantity_altitude_visualizer.py @@ -1,6 +1,6 @@ import pandas as pd -from experiment.meteo_france_SCM_study.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ +from experiment.meteo_france_SCM_models.visualization.hypercube_visualization.altitude_hypercube_visualizer import \ AltitudeHypercubeVisualizer diff --git a/experiment/meteo_france_SCM_models/visualization/studies_visualization/__init__.py b/experiment/meteo_france_SCM_models/visualization/studies_visualization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/experiment/meteo_france_SCM_study/visualization/studies_visualization/main_studies_visualizer.py b/experiment/meteo_france_SCM_models/visualization/studies_visualization/main_studies_visualizer.py similarity index 84% rename from experiment/meteo_france_SCM_study/visualization/studies_visualization/main_studies_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/studies_visualization/main_studies_visualizer.py index dbfb52b61814050952726c5c0a3de22095dac92c..ceed354d79333460fdb8af810844553f6684504a 100644 --- a/experiment/meteo_france_SCM_study/visualization/studies_visualization/main_studies_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/studies_visualization/main_studies_visualizer.py @@ -3,14 +3,14 @@ from experiment.trend_analysis.abstract_score import MannKendall, WeigthedScore, from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest, \ GevScaleChangePointTest, GevShapeChangePointTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import MannKendallTrendTest -from experiment.meteo_france_SCM_study.safran.safran import ExtendedSafranTotalPrecip -from experiment.meteo_france_SCM_study.visualization.studies_visualization.studies import Studies -from experiment.meteo_france_SCM_study.visualization.studies_visualization.studies_visualizer import StudiesVisualizer, \ +from experiment.meteo_france_SCM_models.study.safran.safran import ExtendedSafranTotalPrecip +from experiment.meteo_france_SCM_models.visualization.studies_visualization.studies import Studies +from experiment.meteo_france_SCM_models.visualization.studies_visualization.studies_visualizer import StudiesVisualizer, \ AltitudeVisualizer -from experiment.meteo_france_SCM_study.visualization.study_visualization.main_study_visualizer import ALL_ALTITUDES, \ +from experiment.meteo_france_SCM_models.visualization.study_visualization.main_study_visualizer import ALL_ALTITUDES, \ study_iterator_global, SCM_STUDIES -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer from collections import OrderedDict diff --git a/experiment/meteo_france_SCM_study/visualization/studies_visualization/studies.py b/experiment/meteo_france_SCM_models/visualization/studies_visualization/studies.py similarity index 86% rename from experiment/meteo_france_SCM_study/visualization/studies_visualization/studies.py rename to experiment/meteo_france_SCM_models/visualization/studies_visualization/studies.py index 350f90d6f2043a86bf57df6a0483ca1a476f45cc..8affe7977966765c55670b617b17d421ea4f40fc 100644 --- a/experiment/meteo_france_SCM_study/visualization/studies_visualization/studies.py +++ b/experiment/meteo_france_SCM_models/visualization/studies_visualization/studies.py @@ -1,8 +1,8 @@ from collections import OrderedDict from typing import Dict -from experiment.meteo_france_SCM_study.abstract_study import AbstractStudy -from experiment.meteo_france_SCM_study.scm_constants import ALTITUDES +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.scm_constants import ALTITUDES class Studies(object): diff --git a/experiment/meteo_france_SCM_study/visualization/studies_visualization/studies_visualizer.py b/experiment/meteo_france_SCM_models/visualization/studies_visualization/studies_visualizer.py similarity index 96% rename from experiment/meteo_france_SCM_study/visualization/studies_visualization/studies_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/studies_visualization/studies_visualizer.py index 664506f859ae2917f796157e5d8aeb4b65190313..56abb1415be8b7b43b450cfb750e8e1de0d9b003 100644 --- a/experiment/meteo_france_SCM_study/visualization/studies_visualization/studies_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/studies_visualization/studies_visualizer.py @@ -9,12 +9,12 @@ import pandas as pd import matplotlib.pyplot as plt from matplotlib.lines import Line2D -from experiment.meteo_france_SCM_study.abstract_extended_study import AbstractExtendedStudy +from experiment.meteo_france_SCM_models.study.abstract_extended_study import AbstractExtendedStudy from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest -from experiment.meteo_france_SCM_study.visualization.studies_visualization.studies import \ +from experiment.meteo_france_SCM_models.visualization.studies_visualization.studies import \ Studies -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer -from experiment.meteo_france_SCM_study.visualization.utils import plot_df +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.utils import plot_df from utils import cached_property, get_display_name_from_object_type, VERSION_TIME diff --git a/experiment/meteo_france_SCM_models/visualization/study_visualization/__init__.py b/experiment/meteo_france_SCM_models/visualization/study_visualization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py b/experiment/meteo_france_SCM_models/visualization/study_visualization/main_study_visualizer.py similarity index 95% rename from experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/study_visualization/main_study_visualizer.py index 4f74b69f8c0bb2438ea59dcbb6c1d4b9c6c7b318..57323d9075eec00ee93c14a63bcff527c27f2310 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/main_study_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/study_visualization/main_study_visualizer.py @@ -2,13 +2,13 @@ import time from typing import List from experiment.trend_analysis.abstract_score import MannKendall -from experiment.meteo_france_SCM_study.abstract_study import AbstractStudy -from experiment.meteo_france_SCM_study.crocus.crocus import CrocusDepth, CrocusSwe, ExtendedCrocusDepth, \ +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.crocus.crocus import CrocusDepth, CrocusSwe, ExtendedCrocusDepth, \ ExtendedCrocusSwe, CrocusDaysWithSnowOnGround -from experiment.meteo_france_SCM_study.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, SafranRainfall, \ +from experiment.meteo_france_SCM_models.study.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, SafranRainfall, \ SafranTemperature, SafranTotalPrecip -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer from collections import OrderedDict from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import GevLocationChangePointTest diff --git a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py b/experiment/meteo_france_SCM_models/visualization/study_visualization/study_visualizer.py similarity index 98% rename from experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py rename to experiment/meteo_france_SCM_models/visualization/study_visualization/study_visualizer.py index a5deda714f8a0c1168074bec984df70fb6143264..836b8ca0effbc0d5829c826aa3239be15b4c8abe 100644 --- a/experiment/meteo_france_SCM_study/visualization/study_visualization/study_visualizer.py +++ b/experiment/meteo_france_SCM_models/visualization/study_visualization/study_visualizer.py @@ -10,12 +10,12 @@ import pandas as pd import seaborn as sns from experiment.trend_analysis.abstract_score import MeanScore, AbstractTrendScore -from experiment.meteo_france_SCM_study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy from experiment.trend_analysis.univariate_test.abstract_gev_change_point_test import AbstractGevChangePointTest from experiment.trend_analysis.univariate_test.abstract_univariate_test import AbstractUnivariateTest from experiment.trend_analysis.non_stationary_trends import \ ConditionalIndedendenceLocationTrendTest, MaxStableLocationTrendTest, IndependenceLocationTrendTest -from experiment.meteo_france_SCM_study.visualization.utils import create_adjusted_axes +from experiment.meteo_france_SCM_models.visualization.utils import create_adjusted_axes from experiment.utils import average_smoothing_with_sliding_window from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ FullEstimatorInASingleStepWithSmoothMargin @@ -333,9 +333,11 @@ class StudyVisualizer(object): @property def starting_years(self): + # Starting years are any potential between the start_year and the end_year. + # start_year is a potential starting_year + # end_year is not a potential starting_year start_year, stop_year = self.study.start_year_and_stop_year - # return list(range(start_year, stop_year - 2 * self.number_of_top_values)) - return list(range(start_year, 1991)) + return list(range(start_year, stop_year)) @cached_property def massif_name_to_detailed_scores(self): diff --git a/experiment/meteo_france_SCM_study/visualization/utils.py b/experiment/meteo_france_SCM_models/visualization/utils.py similarity index 100% rename from experiment/meteo_france_SCM_study/visualization/utils.py rename to experiment/meteo_france_SCM_models/visualization/utils.py diff --git a/experiment/meteo_france_SCM_study/safran/fit_safran.py b/experiment/meteo_france_SCM_study/safran/fit_safran.py deleted file mode 100644 index 3b46d8e756cc2e5dbefe83257c6a2c664aaf6aec..0000000000000000000000000000000000000000 --- a/experiment/meteo_france_SCM_study/safran/fit_safran.py +++ /dev/null @@ -1,24 +0,0 @@ -import pandas as pd - -from experiment.meteo_france_SCM_study.safran.safran import ExtendedSafranSnowfall -from utils import VERSION - - -def fit_mle_gev_for_all_safran_and_different_days(): - # Dump the result in a csv - dfs = [] - for safran_alti in [1800, 2400][:1]: - for nb_day in [1, 3, 7][:]: - print('alti: {}, nb_day: {}'.format(safran_alti, nb_day)) - # safran = Safran(safran_alti, nb_day) - safran = ExtendedSafranSnowfall(safran_alti, nb_day) - df = safran.df_gev_mle_each_massif - df.index += ' Safran{} with {} days'.format(safran.altitude, safran.nb_consecutive_days) - dfs.append(df) - df = pd.concat(dfs) - path = r'/home/erwan/Documents/projects/spatiotemporalextremes/local/spatio_temporal_datasets/results/fit_mle_massif/fit_mle_gev_{}.csv' - df.to_csv(path.format(VERSION)) - - -if __name__ == '__main__': - fit_mle_gev_for_all_safran_and_different_days() diff --git a/experiment/trend_analysis/non_stationary_trends.py b/experiment/trend_analysis/non_stationary_trends.py index 627e3281cd2897c9c3ff954730cb909ac5bf5c11..e7e96bc91fd6e6c5405292b98701058bb0023afc 100644 --- a/experiment/trend_analysis/non_stationary_trends.py +++ b/experiment/trend_analysis/non_stationary_trends.py @@ -4,7 +4,7 @@ from typing import Union import pandas as pd -from experiment.meteo_france_SCM_study.visualization.utils import align_yaxis_on_zero +from experiment.meteo_france_SCM_models.visualization.utils import align_yaxis_on_zero from extreme_estimator.estimator.abstract_estimator import AbstractEstimator from scipy.stats import chi2 from extreme_estimator.estimator.full_estimator.abstract_full_estimator import \ diff --git a/extreme_estimator/extreme_models/margin_model/margin_function/abstract_margin_function.py b/extreme_estimator/extreme_models/margin_model/margin_function/abstract_margin_function.py index 34cc9b0d4f488c4687350e17628e1773f31822e0..315ab036d6fba0bf6f335d05cd052c94284c7c63 100644 --- a/extreme_estimator/extreme_models/margin_model/margin_function/abstract_margin_function.py +++ b/extreme_estimator/extreme_models/margin_model/margin_function/abstract_margin_function.py @@ -5,7 +5,7 @@ import matplotlib.pyplot as plt import numpy as np import pandas as pd -from experiment.meteo_france_SCM_study.visualization.utils import create_adjusted_axes +from experiment.meteo_france_SCM_models.visualization.utils import create_adjusted_axes from extreme_estimator.margin_fits.gev.gev_params import GevParams from extreme_estimator.margin_fits.plot.create_shifted_cmap import imshow_shifted from spatio_temporal_dataset.coordinates.abstract_coordinates import AbstractCoordinates diff --git a/test/test_experiment/test_SCM_study.py b/test/test_experiment/test_SCM_study.py index e8070c84f14c6f36af0efb63415b6d8ce18c255a..cde5ebf2f8cfc765233dc4039b0eb9760b90cbdb 100644 --- a/test/test_experiment/test_SCM_study.py +++ b/test/test_experiment/test_SCM_study.py @@ -3,12 +3,10 @@ import unittest import pandas as pd -from experiment.meteo_france_SCM_study.crocus.crocus import ExtendedCrocusSwe -from experiment.meteo_france_SCM_study.visualization.study_visualization.main_study_visualizer import study_iterator -from experiment.meteo_france_SCM_study.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, SafranTemperature, \ - SafranRainfall, SafranTotalPrecip -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer -from test.test_utils import load_scm_studies +from experiment.meteo_france_SCM_models.visualization.study_visualization.main_study_visualizer import study_iterator +from experiment.meteo_france_SCM_models.study.safran.safran import SafranSnowfall, ExtendedSafranSnowfall, SafranTemperature, \ + SafranTotalPrecip +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer # TESTS TO REACTIVATE SOMETIMES diff --git a/test/test_experiment/test_coordinate_sensitivity.py b/test/test_experiment/test_coordinate_sensitivity.py index 2674c703e04c3463fb3e766ad14145415ce5fbf7..2282a8b3b6d99509ea8e3827a6b965eb5fcaece5 100644 --- a/test/test_experiment/test_coordinate_sensitivity.py +++ b/test/test_experiment/test_coordinate_sensitivity.py @@ -1,11 +1,11 @@ import unittest -from experiment.meteo_france_SCM_study.crocus.crocus import CrocusSwe -from experiment.meteo_france_SCM_study.visualization.study_visualization.main_study_visualizer import \ +from experiment.meteo_france_SCM_models.study.crocus.crocus import CrocusSwe +from experiment.meteo_france_SCM_models.visualization.study_visualization.main_study_visualizer import \ study_iterator_global from experiment.trend_analysis.non_stationary_trends import \ ConditionalIndedendenceLocationTrendTest -from experiment.meteo_france_SCM_study.visualization.study_visualization.study_visualizer import StudyVisualizer +from experiment.meteo_france_SCM_models.visualization.study_visualization.study_visualizer import StudyVisualizer from spatio_temporal_dataset.coordinates.transformed_coordinates.transformation.uniform_normalization import \ BetweenZeroAndOneNormalization, BetweenZeroAndOneNormalizationMinEpsilon, BetweenZeroAndOneNormalizationMaxEpsilon from utils import get_display_name_from_object_type diff --git a/test/test_utils.py b/test/test_utils.py index 00fe031f846ae3ed6b5ec4b484af9c1356da638f..a53cb224c9f31b655ea837fbd3fe7d95c88e4eb3 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -1,9 +1,8 @@ from itertools import product from typing import List -from experiment.meteo_france_SCM_study.abstract_study import AbstractStudy -from experiment.meteo_france_SCM_study.crocus.crocus import Crocus, CrocusSwe, CrocusDepth -from experiment.meteo_france_SCM_study.crocus.crocus_variables import CrocusSweVariable, CrocusDepthVariable +from experiment.meteo_france_SCM_models.study.abstract_study import AbstractStudy +from experiment.meteo_france_SCM_models.study.crocus.crocus import Crocus, CrocusSwe, CrocusDepth from extreme_estimator.estimator.full_estimator.abstract_full_estimator import SmoothMarginalsThenUnitaryMsp, \ FullEstimatorInASingleStepWithSmoothMargin from extreme_estimator.estimator.max_stable_estimator.abstract_max_stable_estimator import MaxStableEstimator @@ -15,7 +14,7 @@ from extreme_estimator.extreme_models.max_stable_model.abstract_max_stable_model AbstractMaxStableModelWithCovarianceFunction, CovarianceFunction from extreme_estimator.extreme_models.max_stable_model.max_stable_models import Smith, BrownResnick, Schlather, \ Geometric, ExtremalT, ISchlather -from experiment.meteo_france_SCM_study.safran.safran import SafranSnowfall, Safran, SafranRainfall, \ +from experiment.meteo_france_SCM_models.study.safran.safran import SafranSnowfall, Safran, SafranRainfall, \ SafranTemperature, SafranTotalPrecip from spatio_temporal_dataset.coordinates.spatial_coordinates.alps_station_3D_coordinates import \ AlpsStation3DCoordinatesWithAnisotropy