Skip to content

Commit 90b438f

Browse files
committed
Merge g1.3
2 parents efe3eeb + 0ac7f81 commit 90b438f

File tree

487 files changed

+53053
-5853
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

487 files changed

+53053
-5853
lines changed

.github/workflows/pythonpackage.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ on: [push]
55
jobs:
66
build:
77

8-
runs-on: ubuntu-latest
8+
runs-on: ubuntu-20.04
99
strategy:
1010
max-parallel: 7
1111
matrix:
12-
python-version: [3.6, 3.7, 3.8, 3.9, "3.10", "3.11"]
12+
python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10", "3.11"]
1313

1414
steps:
1515
- uses: actions/checkout@v2
@@ -31,3 +31,6 @@ jobs:
3131
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude geogama
3232
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
3333
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude geogama
34+
- name: Unit tests
35+
run: |
36+
python -m unittest

.gitignore

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,17 @@ __pycache__/
33
*.pyc
44
\#*\#
55
.\#*
6-
.cache
7-
.idea
8-
crue10_examples/
9-
docs/html
6+
.cache/
7+
.hypothesis/
8+
.idea/
9+
.pytest_cache/
1010
venv/
11-
tmp
12-
*_all.csv
11+
12+
crue10/tests/data/out/*
13+
docs/html
14+
tmp/
15+
*.xml.lock
16+
*_all.csv
17+
18+
ISSUE*/
19+
PR*/

CHANGELOG.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,68 @@
11
Journal des modifications
22
=========================
33

4+
## [4.0] - yyyy-mm-dd
5+
6+
### Nouveautés
7+
- Support en lecture/écriture des grammaires v1.2 et v1.3 :
8+
* ajout de 2 variables utilisateurs : `VERSION_GRAMMAIRE_PRECEDENTE` et `VERSION_GRAMMAIRE_COURANTE`
9+
* possibilité de changer de grammaire avec `changer_version_grammaire`
10+
- Vérification de la dimension/taille des array 2D pour les méthodes de type "set"
11+
- Ajout de tests unitaires (dans `crue10/tests`)
12+
13+
Détails :
14+
* Les grammaires doivent être identiques en lecture pour chaque Etude/Scenario/Modele/SousModele (plantage sinon)
15+
16+
### Changements
17+
- Refactoring :
18+
* `crue10.base` : la classe `FichierXML` devient `EnsembleFichiersXML`, son attribut `access` devient `mode`
19+
(par héritage, l'attribut change aussi pour `Etude`, `Scenario`, `Modele`, `SousModele`, `FichierOtfa`)
20+
* `crue10.emh.branche` :
21+
* les propriétés du type `name_loi_*` deviennent `nom_loi_*`
22+
* `BarrageFilEau` :
23+
* l'attribut `comment_denoye` devient `comment_manoeuvrant`
24+
* la méthode `set_liste_elements_seuil_avec_coeff_par_defaut` devient `set_liste_elements_seuil_avec_coef_par_defaut`
25+
* [MAJEUR] l'attribut `loi_QZam` devient `loi_QpilZam`
26+
* [MAJEUR] l'attribut `liste_elements_seuil` devient `liste_elements_barrage`
27+
* [MAJEUR] la méthode `set_loi_QZam` devient `set_loi_QpilZam`
28+
* `crue10.modele.Modele` :
29+
* [MAJEUR] la méthode `get_branches_liste_entre_noeuds` devient `get_liste_branches_entre_deux_noeuds`
30+
* `crue10.run` :
31+
* [MAJEUR] la méthode `get_results` devient `get_resultats_calcul` (en prévision de l'ajout des résultats du pré-traitement géométrique)
32+
* `crue10.run.results` devient `crue10.run.resultats_calcul` :
33+
* la classe `RunResults` devient `ResultatsCalcul`
34+
* [MAJEUR] la méthode `get_res_steady` devient `get_data_pseudoperm`
35+
* [MAJEUR] la méthode `get_res_unsteady` devient `get_data_trans`
36+
* Pour les métadonnées des calculs :
37+
* [MAJEUR] l'attribut `calc_steady_dict` devient `res_calc_pseudoperm`
38+
* [MAJEUR] l'attribut `calc_unsteady_dict` devient `res_calc_trans`
39+
* la méthode `get_calc_steady` devient `get_res_calc_pseudoperm`
40+
* la méthode `get_calc_unsteady` devient `get_res_calc_trans`
41+
* la méthode `CalcPseudoPerm` devient `ResCalcPseudoPerm` (pour éviter le conflit avec `crue10.scenario.calcul`)
42+
* la méthode `CalcTrans` devient `ResCalcTrans` (pour éviter le conflit avec `crue10.scenario.calcul`)
43+
* Pour les post-traitements :
44+
* [MAJEUR] la méthode `get_res_all_steady_var_at_emhs` devient `get_all_pseudoperm_var_at_emhs_as_array`
45+
* [MAJEUR] la méthode `get_res_unsteady_var_at_emhs` devient `get_trans_var_at_emhs_as_array`
46+
* [MAJEUR] la méthode `export_calc_steady_as_csv` devient `write_all_calc_pseudoperm_in_csv`
47+
* [MAJEUR] la méthode `export_calc_steady_as_csv` devient `write_all_calc_trans_in_csv`
48+
* [MAJEUR] la méthode `get_res_steady_at_sections_along_branches_as_dataframe` devient `extract_profil_long_pseudoperm_as_dataframe`
49+
* [MAJEUR] la méthode `get_res_unsteady_at_sections_along_branches_as_dataframe` devient `extract_profil_long_trans_at_time_as_dataframe`
50+
* [MAJEUR] la méthode `get_res_unsteady_max_at_sections_along_branches_as_dataframe` devient `extract_profil_long_trans_max_as_dataframe`
51+
* [MAJEUR] la méthode `export_calc_unsteady_as_df` devient `extract_res_trans_as_dataframe`
52+
* [MAJEUR] la méthode `export_calc_unsteady_as_csv_table` est supprimée
53+
* `crue10.scenario.Scenario` :
54+
* [MAJEUR] la méthode `get_last_run` devient `get_dernier_run`
55+
* la méthode `add_run` devient `ajouter_run`
56+
* l'attribut `current_run_id` devient `nom_run_courant`
57+
* la méthode `set_current_run_id` devient `set_run_courant`
58+
* la méthode `get_liste_run_ids` devient `get_liste_noms_runs`
59+
60+
### Corrections
61+
- `crue10.etude.Etude._read_etu` : génère une exception `ExceptionCrue10` au lieu d'une `PermissionError`
62+
s'il s'agit d'un dossier
63+
- `crue10.emh.casier.ProfilCasier` : ajout propriété `xz_filtered` et utilisation pour `compute_surface`
64+
(pour considérer seulement le lit utile)
65+
466
## [3.1] - 2022-07-21
567
Version avant préparation pour ajout nouvelle grammaire v1.3
668

README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,30 @@ Versions Python testées : 2.7, 3.6, 3.7, 3.8, 3.9, 3.10 et 3.11.
2727
## Scripts en ligne de commande
2828

2929
Voir [les pages wiki](https://github.com/CNR-Engineering/Crue10_tools/wiki) pour savoir comment utiliser ces outils.
30+
31+
## Tests unitaires
32+
33+
Le lancement des tests unitaires (présents dans `crue10/tests`) se fait avec la commande :
34+
35+
```
36+
python -m unittest
37+
````
38+
39+
Liste des tests unitaires par classes principales :
40+
* Etude => `test_end_to_end.py`, `test_file_xsd_validation.py`
41+
* Scenario => `test_scenario.py`
42+
* Modele => `test_modele.py`
43+
* SousModele => `test_sous_modele.py`
44+
* EMH
45+
* branches => `test_emh_branche.py`
46+
* casiers => `test_emh_casier.py`
47+
* noeuds => `test_emh_noeud.py`
48+
* sections => `test_emh_section.py`
49+
* Run => `test_run.py`
50+
* ResultatsCalcul => `test_resultats_calcul.py`
51+
52+
Les tests unitaires sont vérifiés à chaque push grâce à un workflow Github et peuvent être déclenchés manuellement si
53+
besoin. La coche verte ou la croix rouge à côté du commit permet de savoir rapidement s'ils se sont bien passés.
54+
55+
Remarque : les tests unitaires sont débranchés pour la version Python 2.7. Pour les lancer, il faut utiliser la
56+
commande `python -m unittest discover`.

cli/crue10_extract_table_at_casiers.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ def crue10_extract_table_at_casiers(args):
2828

2929
# Get results at Casiers
3030
if args.run_id is None:
31-
run = scenario.get_last_run()
31+
run = scenario.get_dernier_run()
3232
else:
3333
run = scenario.get_run(args.run_id)
34-
results = run.get_results()
35-
res_trans = results.get_res_unsteady(args.calc_unsteady)
34+
resultats = run.get_resultats_calcul()
35+
res_trans = resultats.get_data_trans(args.calc_trans)
3636

37-
emh_names = results.emh['Casier']
38-
variables = results.variables['Casier']
37+
emh_names = resultats.emh['Casier']
38+
variables = resultats.variables['Casier']
3939
res = res_trans['Casier']
4040

4141
# Check if variables exist at Casiers
@@ -48,7 +48,7 @@ def crue10_extract_table_at_casiers(args):
4848
sys.exit(2)
4949

5050
# Select time range
51-
time = results.get_calc_unsteady(args.calc_unsteady).time_serie()
51+
time = resultats.get_res_calc_trans(args.calc_trans).time_serie()
5252
res = res[np.logical_and(args.start_time <= time, time <= args.end_time), :, :]
5353

5454
# Compute Vol/Splan (except when Splan=0 to avoid division by zero) and extract the max over the time
@@ -73,7 +73,7 @@ def crue10_extract_table_at_casiers(args):
7373
parser.add_argument('--run_id', help="identifiant du Run à exploiter (si absent alors le dernier Run est pris)")
7474
parser.add_argument('--start_time', help="premier temps (en secondes) à considérer", type=float, default=-float('inf'))
7575
parser.add_argument('--end_time', help="dernier temps (en secondes) à considérer", type=float, default=float('inf'))
76-
parser.add_argument('calc_unsteady', help="nom du calcul transitoire")
76+
parser.add_argument('calc_trans', help="nom du calcul transitoire")
7777
parser.add_argument('csv_path', help="chemin vers le fichier CSV de sortie")
7878

7979

cli/crue10_merge_models.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@
2929
def crue10_merge_models(args):
3030
if len(args.etu_path_list) != len(args.mo_name_list) != len(args.suffix_list):
3131
raise ExceptionCrue10("Les arguments `--etu_path_list`, `--suffix_list` et `--mo_name_list`"
32-
" n'ont pas la même longueur !")
32+
" n'ont pas la même longueur !")
33+
if len(args.etu_path_list) < 2:
34+
raise ExceptionCrue10('Il faut mentionner au moins les deux modèles à fusionner')
3335

3436
# Parse argument `--nodes_to_share`
3537
nb_models = len(args.mo_name_list)
@@ -50,12 +52,13 @@ def crue10_merge_models(args):
5052
if not reference_found:
5153
raise ExceptionCrue10("Le noeud de référence n'a pas pu être trouvé pour : `%s`" % nodes_str)
5254

53-
study_out = Etude(args.etu_path_out, access='w')
55+
study_first = Etude(args.etu_path_list[0], mode='r')
56+
study_out = Etude(args.etu_path_out, mode='w', version_grammaire=study_first.version_grammaire)
5457
study_out.create_empty_scenario('Sc_%s' % args.out_name, 'Mo_%s' % args.out_name, nom_sous_modele=None)
5558
model_out = study_out.get_modele('Mo_%s' % args.out_name)
5659

5760
for i, (etu_path, mo_name, suffix) in enumerate(zip(args.etu_path_list, args.mo_name_list, args.suffix_list)):
58-
study_in = Etude(etu_path, access='r')
61+
study_in = Etude(etu_path, mode='r')
5962
model_in = study_in.get_modele(mo_name)
6063
model_in.read_all()
6164

cli/crue10_merge_submodels.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,34 @@
1414

1515
def crue10_merge_sous_modeles(args):
1616
if len(args.etu_path_list) != len(args.sm_name_list) != len(args.suffix_list):
17-
raise ExceptionCrue10("Les arguments `etu_path_list`, `suffix_list` et `sm_name_list` n'ont pas la même longueur !")
17+
raise ExceptionCrue10("Les arguments `etu_path_list`, `suffix_list` "
18+
"et `sm_name_list` n'ont pas la même longueur !")
19+
if len(args.etu_path_list) < 2:
20+
raise ExceptionCrue10("Il faut au moins 2 sous-modèles pour faire la fusion !")
1821

1922
merged_sous_modele = None
2023
for etu_path, sm_name, suffix in zip(args.etu_path_list, args.sm_name_list, args.suffix_list):
2124
etude = Etude(etu_path)
2225
sous_modele = etude.get_sous_modele(sm_name)
2326
sous_modele.read_all()
24-
print(sous_modele)
27+
logger.info(sous_modele)
2528

2629
if merged_sous_modele is None:
27-
merged_sous_modele = SousModele(sous_modele.id, files=sous_modele.files)
30+
merged_sous_modele = SousModele(sous_modele.id, files=sous_modele.files,
31+
version_grammaire=sous_modele.version_grammaire)
2832
merged_sous_modele.ajouter_emh_depuis_sous_modele(sous_modele, suffix)
2933

30-
print("~> Sous-modèle fusionné:")
31-
print(merged_sous_modele)
34+
logger.info("~> Sous-modèle fusionné:")
35+
logger.info(merged_sous_modele)
3236
merged_sous_modele.write_all(args.output_folder, folder_config='Config')
3337

3438

3539
parser = MyArgParse(description=__doc__)
36-
parser.add_argument('--etu_path_list', help="liste des chemins vers des fichiers etu.xml", nargs='+')
37-
parser.add_argument('--sm_name_list', help="liste des noms des sous-modèles", nargs='+')
38-
parser.add_argument('--suffix_list', help="liste des sufixes", nargs='+')
40+
parser_submodels = parser.add_argument_group("Choix des sous-modèles à fusionner")
41+
parser_submodels.add_argument('--etu_path_list', help="liste des chemins vers des fichiers etu.xml", nargs='+',
42+
required=True)
43+
parser_submodels.add_argument('--sm_name_list', help="liste des noms des sous-modèles", nargs='+', required=True)
44+
parser_submodels.add_argument('--suffix_list', help="liste des suffixes", nargs='+', required=True)
3945
parser.add_argument('output_folder', help="nom du dossier de sortie")
4046

4147

cli/crue10_run_and_post_from_modifications.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,20 +45,20 @@ def crue10_run_and_post_from_modifications(args):
4545

4646
if run.nb_erreurs() == 0:
4747
try:
48-
results = run.get_results()
48+
resultats = run.get_resultats_calcul()
4949
except Exception as e:
5050
logger.error(e)
51-
logger.warn("Les fichiers de résultats du Run `%s` ne sont pas exploitables" % run.id)
52-
res = results.get_res_steady(args.calc_name)
53-
pos_Z = results.variables['Section'].index('Z')
51+
logger.warning("Les fichiers de résultats du Run `%s` ne sont pas exploitables" % run.id)
52+
res = resultats.get_data_pseudoperm(args.calc_name)
53+
pos_Z = resultats.variables['Section'].index('Z')
5454
values = res['Section'][:, pos_Z]
5555
t1 = perf_counter()
5656
writer.writerow({'variable': 'time_crue', 'value': run.get_time()})
5757
writer.writerow({'variable': 'time_total', 'value': t1 - t0})
58-
for emh_name, value in zip(results.emh['Section'], values):
58+
for emh_name, value in zip(resultats.emh['Section'], values):
5959
writer.writerow({'variable': emh_name, 'value': value})
6060
else:
61-
logger.warn("Le Run `%s` contient des erreurs et sera ignoré" % run.id)
61+
logger.warning("Le Run `%s` contient des erreurs et sera ignoré" % run.id)
6262

6363

6464
parser = MyArgParse(description=__doc__)

cli/crue10_xsd_validator.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#!/usr/bin/env python
22
# coding: utf-8
33
"""
4-
Check against XSD validation every crue10 xml files
5-
included in the target study (etu.xml file)
4+
Lancement de la validation XSD sur chaque fichier XML composant l'étude
5+
Les éventuelles erreurs sont affichées à l'écran
66
"""
77
import sys
88

@@ -13,8 +13,8 @@
1313

1414
def crue10_xsd_validator(args):
1515
has_error = False
16-
study = Etude(args.etu_path)
17-
errors = study.check_xml_files()
16+
etude = Etude(args.etu_path)
17+
errors = etude.check_xml_files()
1818

1919
for file, errors in errors.items():
2020
if errors:

crue10/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
VERSION = '0.31'
1+
# coding: utf-8
2+
3+
#: Version du dépôt Crue10_tools
4+
VERSION = '4.0'

0 commit comments

Comments
 (0)