Commit b2947f46 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[contrasting project] add test for study loader. refactor their init function...

[contrasting project] add test for study loader. refactor their init function to have a better error message.
parent 65d8de60
No related merge requests found
Showing with 56 additions and 42 deletions
+56 -42
...@@ -22,33 +22,32 @@ class Safran(AbstractStudy): ...@@ -22,33 +22,32 @@ class Safran(AbstractStudy):
class SafranSnowfall(Safran, CumulatedStudy): class SafranSnowfall(Safran, CumulatedStudy):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
CumulatedStudy.__init__(self, SafranSnowfallVariable, *args, **kwargs) super().__init__(SafranSnowfallVariable, **kwargs)
Safran.__init__(self, SafranSnowfallVariable, *args, **kwargs)
class SafranSnowfall1Day(SafranSnowfall): class SafranSnowfall1Day(SafranSnowfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=1, *args, **kwargs) super().__init__(nb_consecutive_days=1, **kwargs)
class SafranSnowfall3Days(SafranSnowfall): class SafranSnowfall3Days(SafranSnowfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=3, *args, **kwargs) super().__init__(nb_consecutive_days=3, **kwargs)
class SafranSnowfall5Days(SafranSnowfall): class SafranSnowfall5Days(SafranSnowfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=5, *args, **kwargs) super().__init__(nb_consecutive_days=5, **kwargs)
class SafranSnowfall7Days(SafranSnowfall): class SafranSnowfall7Days(SafranSnowfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=7, *args, **kwargs) super().__init__(nb_consecutive_days=7, **kwargs)
class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall): class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall):
...@@ -57,38 +56,38 @@ class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall): ...@@ -57,38 +56,38 @@ class ExtendedSafranSnowfall(AbstractExtendedStudy, SafranSnowfall):
class SafranRainfall(CumulatedStudy, Safran): class SafranRainfall(CumulatedStudy, Safran):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(SafranRainfallVariable, *args, **kwargs) super().__init__(SafranRainfallVariable, **kwargs)
class SafranRainfall1Day(SafranRainfall): class SafranRainfall1Day(SafranRainfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=1, *args, **kwargs) super().__init__(nb_consecutive_days=1, **kwargs)
class SafranRainfall3Days(SafranRainfall): class SafranRainfall3Days(SafranRainfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=3, *args, **kwargs) super().__init__(nb_consecutive_days=3, **kwargs)
class SafranRainfall5Days(SafranRainfall): class SafranRainfall5Days(SafranRainfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=5, *args, **kwargs) super().__init__(nb_consecutive_days=5, **kwargs)
class SafranRainfall7Days(SafranRainfall): class SafranRainfall7Days(SafranRainfall):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=7, *args, **kwargs) super().__init__(nb_consecutive_days=7, **kwargs)
class SafranPrecipitation(CumulatedStudy, Safran): class SafranPrecipitation(CumulatedStudy, Safran):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(SafranTotalPrecipVariable, *args, **kwargs) super().__init__(SafranTotalPrecipVariable, **kwargs)
def load_variable_array(self, dataset): def load_variable_array(self, dataset):
return [np.array(dataset.variables[k]) for k in self.load_keyword()] return [np.array(dataset.variables[k]) for k in self.load_keyword()]
...@@ -100,26 +99,26 @@ class SafranPrecipitation(CumulatedStudy, Safran): ...@@ -100,26 +99,26 @@ class SafranPrecipitation(CumulatedStudy, Safran):
class SafranPrecipitation1Day(SafranPrecipitation): class SafranPrecipitation1Day(SafranPrecipitation):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=1, *args, **kwargs) super().__init__(nb_consecutive_days=1, **kwargs)
class SafranPrecipitation3Days(SafranPrecipitation): class SafranPrecipitation3Days(SafranPrecipitation):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=3, *args, **kwargs) super().__init__(nb_consecutive_days=3, **kwargs)
class SafranPrecipitation5Days(SafranPrecipitation): class SafranPrecipitation5Days(SafranPrecipitation):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=5, *args, **kwargs) super().__init__(nb_consecutive_days=5, **kwargs)
class SafranPrecipitation7Days(SafranPrecipitation): class SafranPrecipitation7Days(SafranPrecipitation):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(nb_consecutive_days=7, *args, **kwargs) super().__init__(nb_consecutive_days=7, **kwargs)
class ExtendedSafranPrecipitation(AbstractExtendedStudy, SafranPrecipitation): class ExtendedSafranPrecipitation(AbstractExtendedStudy, SafranPrecipitation):
...@@ -128,14 +127,20 @@ class ExtendedSafranPrecipitation(AbstractExtendedStudy, SafranPrecipitation): ...@@ -128,14 +127,20 @@ class ExtendedSafranPrecipitation(AbstractExtendedStudy, SafranPrecipitation):
class SafranTemperature(Safran): class SafranTemperature(Safran):
def __init__(self, *args, **kwargs): def __init__(self, **kwargs):
super().__init__(SafranTemperatureVariable, *args, **kwargs) super().__init__(SafranTemperatureVariable, **kwargs)
def annual_aggregation_function(self, *args, **kwargs): def annual_aggregation_function(self, *args, **kwargs):
return np.mean(*args, **kwargs) return np.mean(*args, **kwargs)
if __name__ == '__main__': if __name__ == '__main__':
study = SafranRainfall1Day() altitude = 900
year_min = 1959
year_max = 2000
study = SafranRainfall1Day(altitude, year_min=year_min, year_max=year_max)
d = study.year_to_dataset_ordered_dict[1959]
print(d.keywords)
print(d.variables.keys())
print(study.year_to_annual_maxima[1959]) print(study.year_to_annual_maxima[1959])
print(study.ordered_years) print(study.ordered_years)
...@@ -2,6 +2,8 @@ import pandas as pd ...@@ -2,6 +2,8 @@ import pandas as pd
from extreme_fit.distribution.gev.gev_params import GevParams from extreme_fit.distribution.gev.gev_params import GevParams
from extreme_fit.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator from extreme_fit.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator
from extreme_fit.model.margin_model.linear_margin_model.abstract_temporal_linear_margin_model import \
TemporalMarginFitMethod
from extreme_fit.model.margin_model.linear_margin_model.temporal_linear_margin_models import StationaryTemporalModel from extreme_fit.model.margin_model.linear_margin_model.temporal_linear_margin_models import StationaryTemporalModel
from spatio_temporal_dataset.coordinates.temporal_coordinates.generated_temporal_coordinates import \ from spatio_temporal_dataset.coordinates.temporal_coordinates.generated_temporal_coordinates import \
ConsecutiveTemporalCoordinates ConsecutiveTemporalCoordinates
...@@ -20,7 +22,7 @@ def fitted_linear_margin_estimator(model_class, coordinates, dataset, starting_y ...@@ -20,7 +22,7 @@ def fitted_linear_margin_estimator(model_class, coordinates, dataset, starting_y
return estimator return estimator
def fitted_stationary_gev(x_gev, fit_method, model_class=StationaryTemporalModel, starting_year=None, def fitted_stationary_gev(x_gev, fit_method=TemporalMarginFitMethod.is_mev_gev_fit, model_class=StationaryTemporalModel, starting_year=None,
transformation_class=CenteredScaledNormalization) -> GevParams: transformation_class=CenteredScaledNormalization) -> GevParams:
coordinates = ConsecutiveTemporalCoordinates.from_nb_temporal_steps(nb_temporal_steps=len(x_gev), coordinates = ConsecutiveTemporalCoordinates.from_nb_temporal_steps(nb_temporal_steps=len(x_gev),
transformation_class=CenteredScaledNormalization) transformation_class=CenteredScaledNormalization)
......
...@@ -25,6 +25,7 @@ def binomial_observation(): ...@@ -25,6 +25,7 @@ def binomial_observation():
plt.yticks([0.0, 1.0], ['Heads', 'Tails']) plt.yticks([0.0, 1.0], ['Heads', 'Tails'])
ax.plot(time, data, color=color, label=label, linewidth=4) ax.plot(time, data, color=color, label=label, linewidth=4)
def histogram_for_gev(): def histogram_for_gev():
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoadTotal
...@@ -53,9 +54,6 @@ def histogram_for_gev(): ...@@ -53,9 +54,6 @@ def histogram_for_gev():
ax.set_ylim([0, 0.3]) ax.set_ylim([0, 0.3])
def histogram_for_normal(): def histogram_for_normal():
ax = plt.gca() ax = plt.gca()
linewidth = 5 linewidth = 5
...@@ -71,9 +69,8 @@ def histogram_for_normal(): ...@@ -71,9 +69,8 @@ def histogram_for_normal():
ax.set_ylim([0, 0.6]) ax.set_ylim([0, 0.6])
if __name__ == '__main__': if __name__ == '__main__':
# binomial_observation() # binomial_observation()
# histogram_for_gev() # histogram_for_gev()
histogram_for_normal() histogram_for_normal()
plt.show() plt.show()
\ No newline at end of file
...@@ -4,9 +4,10 @@ from random import sample ...@@ -4,9 +4,10 @@ from random import sample
import pandas as pd import pandas as pd
from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoad3Days
from extreme_data.meteo_france_data.scm_models_data.safran.cumulated_study import NB_DAYS from extreme_data.meteo_france_data.scm_models_data.safran.cumulated_study import NB_DAYS
from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranTemperature, \ from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranTemperature, \
SafranPrecipitation SafranPrecipitation, SafranSnowfall3Days, SafranRainfall3Days
from extreme_data.meteo_france_data.scm_models_data.utils import SeasonForTheMaxima from extreme_data.meteo_france_data.scm_models_data.utils import SeasonForTheMaxima
from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \ from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \
study_iterator_global, SCM_STUDIES, ALL_ALTITUDES study_iterator_global, SCM_STUDIES, ALL_ALTITUDES
...@@ -33,9 +34,10 @@ class TestSCMAllStudy(unittest.TestCase): ...@@ -33,9 +34,10 @@ class TestSCMAllStudy(unittest.TestCase):
self.assertEqual(len(days), len(daily_time_series)) self.assertEqual(len(days), len(daily_time_series))
def test_instantiate_studies(self): def test_instantiate_studies(self):
study_classes = SCM_STUDIES
nb_sample = 2 nb_sample = 2
for nb_days in sample(set(NB_DAYS), k=nb_sample): for nb_days in sample(set(NB_DAYS), k=nb_sample):
for study in study_iterator_global(study_classes=SCM_STUDIES, for study in study_iterator_global(study_classes=study_classes,
only_first_one=False, verbose=False, only_first_one=False, verbose=False,
altitudes=sample(set(ALL_ALTITUDES), k=nb_sample), nb_days=nb_days): altitudes=sample(set(ALL_ALTITUDES), k=nb_sample), nb_days=nb_days):
first_path_file = study.ordered_years_and_path_files[0][0] first_path_file = study.ordered_years_and_path_files[0][0]
...@@ -44,6 +46,14 @@ class TestSCMAllStudy(unittest.TestCase): ...@@ -44,6 +46,14 @@ class TestSCMAllStudy(unittest.TestCase):
msg='{} days for type {}'.format(nb_days, get_display_name_from_object_type( msg='{} days for type {}'.format(nb_days, get_display_name_from_object_type(
type(variable_object)))) type(variable_object))))
def test_instantiate_studies_with_number_of_days(self):
altitude = 900
year_min = 1959
year_max = 2000
study_classes = [SafranSnowfall3Days, SafranRainfall3Days, CrocusSnowLoad3Days]
for study_class in study_classes:
study_class(altitude=altitude, year_min=year_min, year_max=year_max)
class TestSCMStudy(unittest.TestCase): class TestSCMStudy(unittest.TestCase):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment