Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from pathlib import Path | |
| from app.utils.config_utils import reverse_param_label | |
| def menu_statisticals(min_years: int, max_years: int, STATS, SEASON): | |
| if "selected_point" not in st.session_state: | |
| st.session_state["selected_point"] = None | |
| if "run_analysis" not in st.session_state: | |
| st.session_state["run_analysis"] = False | |
| # Crée les colonnes | |
| col0, col1, col2, col3, col4, col5, col6, col7 = st.columns([0.3, 0.3, 0.2, 0.25, 0.25, 0.25, 0.2, 0.2]) | |
| with col0: | |
| st.selectbox("Statistique étudiée", list(STATS.keys()), key="stat_choice") | |
| with col1: | |
| st.slider( | |
| "Staturation couleurs", | |
| min_value=0.950, | |
| max_value=1.00, | |
| value=0.995, | |
| step=0.001, | |
| format="%.3f", | |
| key="quantile_choice" | |
| ) | |
| with col2: | |
| st.selectbox("Saison", list(SEASON.keys()), key="season_choice") | |
| with col3: | |
| season = st.session_state["season_choice"] | |
| if season in ["Année hydrologique", "Hiver"]: | |
| st.slider( | |
| "Période", | |
| min_value=min_years+1, | |
| max_value=max_years, | |
| value=(min_years+1, max_years), | |
| key="year_range" | |
| ) | |
| else: | |
| st.slider( | |
| "Période", | |
| min_value=min_years, | |
| max_value=max_years, | |
| value=(min_years, max_years), | |
| key="year_range" | |
| ) | |
| with col4: | |
| if st.session_state["stat_choice"] in ["Cumul", "Jour de pluie"]: | |
| st.selectbox("Echelle temporelle", ["Journalière"], key="scale_choice") | |
| else: | |
| st.selectbox("Echelle temporelle", ["Journalière", "Horaire"], key="scale_choice") | |
| with col5: | |
| st.slider( | |
| "Données manquantes", | |
| min_value=0.0, | |
| max_value=1.0, | |
| value=0.1, | |
| step=0.01, | |
| key="missing_rate" | |
| ) | |
| with col6: | |
| st.checkbox("Courbes de niveaux", value=False, key="show_relief") # Case à cocher | |
| st.checkbox("Afficher les stations", value=False, key="show_stations") # Case à cocher | |
| with col7: | |
| if st.button("Lancer l’analyse"): | |
| st.session_state["run_analysis"] = True | |
| if st.session_state["run_analysis"]: | |
| return ( | |
| st.session_state["stat_choice"], | |
| st.session_state["quantile_choice"], | |
| st.session_state["year_range"][0], | |
| st.session_state["year_range"][1], | |
| st.session_state["season_choice"], | |
| st.session_state["scale_choice"], | |
| st.session_state["missing_rate"], | |
| st.session_state["show_relief"], | |
| st.session_state["show_stations"] | |
| ) | |
| else: | |
| return None | |
| def menu_gev(config: dict, model_options: dict, ns_param_map: dict, SEASON, show_param: bool): | |
| if "run_analysis" not in st.session_state: | |
| st.session_state["run_analysis"] = False | |
| col0, col1, col2, col3, col4, col5, col6, col7 = st.columns([0.6, 0.9, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]) | |
| # Échelle | |
| with col0: | |
| Echelle = st.selectbox("Echelle temporelle", ["Journalière", "Horaire"], key="scale_choice") | |
| st.session_state["echelle"] = "quotidien" if Echelle.lower() == "journalière" else "horaire" | |
| st.session_state["unit"] = "mm/j" if st.session_state["echelle"] == "quotidien" else "mm/h" | |
| # Modèle | |
| with col1: | |
| selected_model = st.selectbox( | |
| "Modèle GEV", | |
| [None] + list(model_options.keys()), | |
| format_func=lambda x: "— Choisir un modèle —" if x is None else x, | |
| key="model_type" | |
| ) | |
| if st.session_state["model_type"] is not None: | |
| model_name = model_options[st.session_state["model_type"]] | |
| st.session_state["model_name"] = model_name | |
| # Quantile | |
| with col2: | |
| st.selectbox("Choix de la saison", list(SEASON.keys()), key="season_choice") | |
| with col3: | |
| st.slider( | |
| "Percentile de retrait", | |
| min_value=0.950, | |
| max_value=1.000, | |
| value=1.000, | |
| step=0.001, | |
| format="%.3f", | |
| key="quantile_choice" | |
| ) | |
| # Paramètre GEV | |
| with col4: | |
| if show_param: | |
| param_map = ns_param_map[model_name] | |
| available_params = list(param_map.values()) # labels unicode | |
| selected_label = st.selectbox( | |
| "Paramètre GEV à afficher", | |
| available_params, | |
| index=0, | |
| key="gev_param_choice" | |
| ) | |
| # Conversion propre | |
| st.session_state["param_choice"] = reverse_param_label( | |
| selected_label, model_name, ns_param_map | |
| ) | |
| else: | |
| # st.session_state["param_choice"] = "Δqᵀ" | |
| # selected_label = "Δqᵀ" | |
| selected_label = st.selectbox( | |
| "Quantité à afficher", | |
| ["Δqᵀ", "ΔE", "ΔVar", "ΔCV"], | |
| index=0, | |
| key="delta_param_choice" | |
| ) | |
| st.session_state["param_choice"] = selected_label | |
| if selected_label in ["Δqᵀ"]: | |
| with col5: | |
| st.slider( | |
| "Niveau de retour", | |
| min_value=10, | |
| max_value=100, | |
| value=10, | |
| step=10, | |
| key="T_choice" | |
| ) | |
| else: | |
| st.session_state["T_choice"] = None | |
| if selected_label in ["Δqᵀ", "ΔE", "ΔVar", "ΔCV"]: | |
| with col6: | |
| st.slider( | |
| "Delta annees", | |
| min_value=1, | |
| max_value=60, | |
| value=10, | |
| step=1, | |
| key="par_X_annees" | |
| ) | |
| else: | |
| st.session_state["par_X_annees"] = None | |
| # Bouton d’analyse | |
| with col7: | |
| if st.button("Lancer l’analyse"): | |
| st.session_state["run_analysis"] = True | |
| if st.session_state["run_analysis"]: | |
| # Valeurs par défaut | |
| stat_choice_key = "max" | |
| scale_choice_key = "mm_j" if st.session_state["echelle"] == "quotidien" else "mm_h" | |
| season_choice_key = SEASON[st.session_state["season_choice"]] | |
| min_year_choice = config["years"]["min"] + 1 if season_choice_key in ["hydro", "djf"] else config["years"]["min"] | |
| max_year_choice = config["years"]["max"] | |
| missing_rate = 0.15 | |
| # Répertoires | |
| mod_dir = Path(config["gev"]["modelised"]) / st.session_state["echelle"] / season_choice_key | |
| obs_dir = Path(config["gev"]["observed"]) / st.session_state["echelle"] / season_choice_key | |
| return { | |
| "echelle": st.session_state["echelle"], | |
| "unit": st.session_state["unit"], | |
| "model_name": st.session_state["model_name"], | |
| "model_name_pres": selected_model, | |
| "param_choice": st.session_state["param_choice"], | |
| "param_choice_pres": selected_label, | |
| "quantile_choice": st.session_state["quantile_choice"], | |
| "stat_choice_key": stat_choice_key, | |
| "scale_choice_key": scale_choice_key, | |
| "season_choice_key": season_choice_key, | |
| "season_choice": st.session_state["season_choice"], | |
| "min_year_choice": min_year_choice, | |
| "max_year_choice": max_year_choice, | |
| "missing_rate": missing_rate, | |
| "mod_dir": mod_dir, | |
| "obs_dir": obs_dir, | |
| "T_choice": st.session_state["T_choice"], | |
| "par_X_annees": st.session_state["par_X_annees"] | |
| } | |
| return None | |