DassHydro / smash

An open source, Python library interfacing the Fortran Spatially distributed Modelling and ASsimilation for Hydrology platform.
https://smash.recover.inrae.fr/
GNU General Public License v3.0
10 stars 5 forks source link

feasible domain for states and parameters + support boolean as interger in setup #219

Closed maximejay closed 1 week ago

maximejay commented 3 weeks ago

Stick to numpy 1.4.* since the major release 2.0, not supported by some package

maximejay commented 3 weeks ago

Salut, Voici 3 commits. Jj'avais voulu faire 3 branches séparées mais j'ai cumulé par erreur les commits. Je ne sais pas comment faire machine arrière. Je supprime donc les 2 autre pull request précédentes puisque celle-ci contient tous les commit.

Commit 1) Downgrade Numpy to 1.4.* en attendant que les paquets se mettent à jour

Commit 2) Problème de test sur les valeurs limites des états du modèle. rr_initial_states ne permet pas d'avoir des valeurs d'états égales aux bornes définies ds cst FEASIBLE_RR_INITIAL_STATES Or rr_final_states peut contenir des valeurs aux bornes supérieurs. Il n'est donc pas possible de copier les états finaux à la place des états initiaux et de redémarrer une simulation (tps réel, assim, etc...) modification du test : (upp_arr >= upp) => (upp_arr > upp)

Question ouverte sur la borne inférieure: est ce que les états peuvent avoir des valeurs nulles ? (je crois pas mais j'en suis plus très sur...)

Commit 3) Le fichier setup yml contient des boolens Le dictionnaire python setup contient des boolens setup est utilisé pour la création de l'objet model en entrée de smash.Model() En résultat la variable model.setup contient des entiers à la place des boolens

=> le dictionnaire setup peut donc maintenant contenir des entiers 1 ou 0 à la place des boolens (plus facile lorsque l'on copie les valeurs de model.setup vers un nouveau setup)

inoelloc commented 3 weeks ago

Salut, Voici 3 commits. Jj'avais voulu faire 3 branches séparées mais j'ai cumulé par erreur les commits. Je ne sais pas comment faire machine arrière. Je supprime donc les 2 autre pull request précédentes puisque celle-ci contient tous les commit.

Commit 1) Downgrade Numpy to 1.4.* en attendant que les paquets se mettent à jour

Commit 2) Problème de test sur les valeurs limites des états du modèle. rr_initial_states ne permet pas d'avoir des valeurs d'états égales aux bornes définies ds cst FEASIBLE_RR_INITIAL_STATES Or rr_final_states peut contenir des valeurs aux bornes supérieurs. Il n'est donc pas possible de copier les états finaux à la place des états initiaux et de redémarrer une simulation (tps réel, assim, etc...) modification du test : (upp_arr >= upp) => (upp_arr > upp)

Question ouverte sur la borne inférieure: est ce que les états peuvent avoir des valeurs nulles ? (je crois pas mais j'en suis plus très sur...)

Commit 3) Le fichier setup yml contient des boolens Le dictionnaire python setup contient des boolens setup est utilisé pour la création de l'objet model en entrée de smash.Model() En résultat la variable model.setup contient des entiers à la place des boolens

=> le dictionnaire setup peut donc maintenant contenir des entiers 1 ou 0 à la place des boolens (plus facile lorsque l'on copie les valeurs de model.setup vers un nouveau setup)

Salut @maximejay, Commit 1) Plus besoin Commit 2) Ok. Je ferais la meme chose pour la borne inférieure. En tout cas, qu'on fixe la définition de FEASIBLE_RR_INITIAL_STATES à des bornes inclusives (ce qui est le cas pour les bornes d'optimisation je crois). Si les états ne peuvent pas être nuls, on change la borne inférieure. Appliquer la meme chose pour RR_PARAMETERS, SERR_MU_PARAMETERS et SERR_SIGMA_PARAMETERS Commit 3) Ok. Je te propose cette correction de la fonction:

def _standardize_model_setup_bool(key: str, value: bool | int) -> bool:
    if isinstance(value, bool):
        pass
    elif isinstance(value, int):
        if value != 0 and value != 1:
            raise ValueError(f"{key} model setup must be equal to 0 or 1")
    else:
        raise TypeError(f"{key} model setup must be a boolean or integer (0, 1)")

    return bool(value)
maximejay commented 2 weeks ago

Salut ,

Ok pour la modif de la fonction _standardize_model_setup_bool.

J'ai supprimé le commit sur la version de numpy.

Pour la comparaison des états je propose de ne pas toucher aux fonctions dans _standardize, mais plutôt de définir un une variable dans constant.py F_EPS qui définie la précision attendue pour comparer les réels.... Qu'en penses tu ?

maximejay commented 1 week ago

J'ai changé F_EPS par F_PRECISION pour Float_PRECISION J'utilise F_PRECISION désormais dans les routines de _standardize.py pour checker les bornes des états et des params Comment fait on pour changer la cible du merge ? plutot merger vers main que maintenance ? Merci

inoelloc commented 1 week ago

Re based on main #241