wolfhece 2.1.85__py3-none-any.whl → 2.1.87__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -37,17 +37,17 @@ class ZipFileWrapper(ZipFile):
37
37
  return super().read(name="data")
38
38
 
39
39
  class Extracting_Zones(Zones):
40
- """
40
+ """
41
41
  Classe permettant de récupérer les valeurs à l'intérieur des polygones
42
42
  définis dans plusieurs zones.
43
43
 
44
44
  Ces polygones ne sont pas nécessairement ordonnés ou relatifs au lit mineur.
45
-
45
+
46
46
  """
47
47
 
48
48
  def __init__(self, filename='', ox: float = 0, oy: float = 0, tx: float = 0, ty: float = 0, parent=None, is2D=True, idx: str = '', plotted: bool = True, mapviewer=None, need_for_wx: bool = False) -> None:
49
49
  super().__init__(filename, ox, oy, tx, ty, parent, is2D, idx, plotted, mapviewer, need_for_wx)
50
-
50
+
51
51
  self.parts:dict = None
52
52
  self.linked:Union[dict, list] = None
53
53
 
@@ -67,7 +67,7 @@ class Extracting_Zones(Zones):
67
67
  """
68
68
  Serialize the values in a file
69
69
  """
70
-
70
+
71
71
  import json
72
72
  from codecs import getwriter
73
73
  from typing import IO
@@ -79,13 +79,13 @@ class Extracting_Zones(Zones):
79
79
  elif isinstance(obj, np.floating):
80
80
  return float(obj)
81
81
  elif isinstance(obj, np.ndarray):
82
- return obj.tolist()
82
+ return obj.tolist()
83
83
  elif obj == Wolfresults_2D:
84
84
  return 'CPU'
85
85
  elif obj == wolfres2DGPU:
86
- return 'GPU'
87
-
88
- return json.JSONEncoder.default(self, obj)
86
+ return 'GPU'
87
+
88
+ return json.JSONEncoder.default(self, obj)
89
89
 
90
90
  def _json_dump_bytes(fp: IO, obj):
91
91
  StreamWriter = getwriter("utf-8")
@@ -106,7 +106,7 @@ class Extracting_Zones(Zones):
106
106
  """
107
107
  Deserialize the values from a file
108
108
  """
109
-
109
+
110
110
  import json
111
111
  from codecs import getwriter
112
112
  from typing import IO
@@ -141,10 +141,10 @@ class Extracting_Zones(Zones):
141
141
  self.parts[cuzone][curproj][curpoly] = {}
142
142
  for curgroup, curarray in curval.items():
143
143
  locdict = self.parts[cuzone][curproj][curpoly][curgroup] = {}
144
-
144
+
145
145
  for cursim, curnparray in curarray.items():
146
146
  locdict[cursim] = np.array([np.array([ tuple(lst1), np.array(lst2, dtype= np.int32)], dtype=object ) for lst1, lst2 in curnparray], dtype=object)
147
-
147
+
148
148
  elif isinstance(tmp_linked, list):
149
149
  self.linked = [(curlink[0], Wolfresults_2D if curlink[1] == 'CPU' else wolfres2DGPU) for curlink in tmp_linked]
150
150
 
@@ -158,7 +158,7 @@ class Extracting_Zones(Zones):
158
158
  self.parts[cuzone][curpoly] = {}
159
159
  for curgroup, curarray in curval.items():
160
160
  locdict = self.parts[cuzone][curpoly][curgroup] = {}
161
-
161
+
162
162
  for cursim, curnparray in curarray.items():
163
163
  locdict[cursim] = np.array([np.array([ tuple(lst1), np.array(lst2, dtype= np.int32)], dtype=object ) for lst1, lst2 in curnparray], dtype=object)
164
164
 
@@ -192,8 +192,8 @@ class Extracting_Zones(Zones):
192
192
  locparts = self.parts[curzone.myname] = {}
193
193
  for curkey, curgroup in linked_arrays.items():
194
194
  locparts[curkey] = curzone.get_all_values_linked_polygon(curgroup, key_idx_names='name', getxy=True)
195
-
196
- elif isinstance(linked_arrays, list):
195
+
196
+ elif isinstance(linked_arrays, list):
197
197
  self.parts[curzone.myname] = curzone.get_all_values_linked_polygon(linked_arrays, key_idx_names='name', getxy=True)
198
198
 
199
199
  def _get_heads(self,
@@ -373,14 +373,18 @@ class Polygons_Analyze(Zones):
373
373
  Classe permettant de récupérer les valeurs à l'intérieur des polygones
374
374
  définis dans la dernière zone d'une fichier .vecz.
375
375
 
376
- Ce fichier est typiquement le résultat de la création de polygones
376
+ Ce fichier est typiquement le résultat de la création de polygones
377
377
  sur base de parallèles via l'interface graphique.
378
378
 
379
379
  Utile notamment dans l'analyse de modélisations 2D (CPU et/ou GPU).
380
380
 
381
381
  """
382
382
 
383
- def __init__(self, myfile='', ds:float=5., ox: float = 0, oy: float = 0, tx: float = 0, ty: float = 0, parent=None, is2D=True, wx_exists:bool = False):
383
+ def __init__(self, myfile='', ds:float=5.,
384
+ ox: float = 0, oy: float = 0,
385
+ tx: float = 0, ty: float = 0,
386
+ parent=None, is2D=True, wx_exists:bool = False):
387
+
384
388
  super().__init__(myfile, ox, oy, tx, ty, parent, is2D, wx_exists)
385
389
 
386
390
  self.myname = splitext(basename(myfile))[0]
@@ -393,7 +397,7 @@ class Polygons_Analyze(Zones):
393
397
 
394
398
  self.polygons_zone:zone
395
399
  self.polygons_zone = self.get_zone(-1)
396
-
400
+
397
401
  self.polygons_curvi = {}
398
402
  for curvert in self.polygons_zone.myvectors:
399
403
  self.polygons_curvi[curvert.myname] = curvert.myvertices[0].z
@@ -419,7 +423,7 @@ class Polygons_Analyze(Zones):
419
423
  """
420
424
  Serialize the values in a file
421
425
  """
422
-
426
+
423
427
  import json
424
428
  from codecs import getwriter
425
429
  from typing import IO
@@ -431,13 +435,13 @@ class Polygons_Analyze(Zones):
431
435
  elif isinstance(obj, np.floating):
432
436
  return float(obj)
433
437
  elif isinstance(obj, np.ndarray):
434
- return obj.tolist()
438
+ return obj.tolist()
435
439
  elif obj == Wolfresults_2D:
436
440
  return 'CPU'
437
441
  elif obj == wolfres2DGPU:
438
- return 'GPU'
439
-
440
- return json.JSONEncoder.default(self, obj)
442
+ return 'GPU'
443
+
444
+ return json.JSONEncoder.default(self, obj)
441
445
 
442
446
  def _json_dump_bytes(fp: IO, obj):
443
447
  StreamWriter = getwriter("utf-8")
@@ -458,7 +462,7 @@ class Polygons_Analyze(Zones):
458
462
  """
459
463
  Deserialize the values from a file
460
464
  """
461
-
465
+
462
466
  import json
463
467
  from codecs import getwriter
464
468
  from typing import IO
@@ -489,10 +493,10 @@ class Polygons_Analyze(Zones):
489
493
  self.river_values[curproj][curpoly] = {}
490
494
  for curgroup, curarray in curval.items():
491
495
  locdict = self.river_values[curproj][curpoly][curgroup] = {}
492
-
496
+
493
497
  for cursim, curnparray in curarray.items():
494
498
  locdict[cursim] = np.array([np.array([ tuple(lst1), np.array(lst2, dtype= np.int32)], dtype=object ) for lst1, lst2 in curnparray], dtype=object)
495
-
499
+
496
500
  elif isinstance(tmp_linked, list):
497
501
  self.linked = [(curlink[0], Wolfresults_2D if curlink[1] == 'CPU' else wolfres2DGPU) for curlink in tmp_linked]
498
502
 
@@ -502,21 +506,26 @@ class Polygons_Analyze(Zones):
502
506
  self.river_values[curpoly] = {}
503
507
  for curgroup, curarray in curval.items():
504
508
  locdict = self.river_values[curpoly][curgroup] = {}
505
-
509
+
506
510
  for cursim, curnparray in curarray.items():
507
511
  locdict[cursim] = np.array([np.array([ tuple(lst1), np.array(lst2, dtype= np.int32)], dtype=object ) for lst1, lst2 in curnparray], dtype=object)
508
512
 
509
513
 
510
- def compute_distance(self, poly:LineString):
514
+ def compute_distance(self, poly:LineString | vector):
511
515
  """
512
516
  Compute the curvilinear distance along a support polyline
517
+
518
+ :param poly: vector or LineString Shapely object
513
519
  """
514
520
 
521
+ if isinstance(poly, vector):
522
+ poly = poly.asshapely_ls()
523
+
515
524
  for curvert in self.polygons_zone.myvectors:
516
525
  # Centre du polygone
517
526
  centerx = np.sum(np.asarray([cur.x for cur in curvert.myvertices[:4]]))/4.
518
527
  centery = np.sum(np.asarray([cur.y for cur in curvert.myvertices[:4]]))/4.
519
-
528
+
520
529
  self.polygons_curvi[curvert.myname] = poly.project(Point([centerx,centery]))
521
530
 
522
531
  def find_values_inside_parts(self, linked_arrays:Union[dict,list]):
@@ -557,9 +566,11 @@ class Polygons_Analyze(Zones):
557
566
 
558
567
  self.river_values = curzone.get_all_values_linked_polygon(linked_arrays, key_idx_names='name')
559
568
 
560
- def _get_river_heads(self,
561
- which_group=None):
562
- """Compute Head"""
569
+ def _get_river_heads(self, which_group= None):
570
+ """Compute Head
571
+
572
+ :param which_group: group to get
573
+ """
563
574
 
564
575
  head = {}
565
576
 
@@ -580,10 +591,19 @@ class Polygons_Analyze(Zones):
580
591
  """
581
592
  Get values for the river polygons
582
593
 
583
- La donnée retournée est un dictionnaire --> dépend du typage de "self.linked" (cf "find_values_inside_parts)" pour plus d'infos)
594
+ La donnée retournée est un dictionnaire
595
+ --> dépend du typage de "self.linked" (cf "find_values_inside_parts)" pour plus d'infos)
584
596
 
585
- Soit il n'y a qu'un projet à traiter --> le dictionnaire contient une entrée pour chaque polygone et les différentes valeurs pour chaque matrice/simulation du projet dans chaque polygone
586
- Soit il y a plusiuers projets à traiter --> le dictionnaire contient autant d'entrées que de projet et chaque sous-dictionnaire reprend les différentes valeurs comme ci-dessus
597
+ Soit il n'y a qu'un projet à traiter
598
+ --> le dictionnaire contient une entrée pour chaque polygone et
599
+ les différentes valeurs pour chaque matrice/simulation du projet dans chaque polygone
600
+
601
+ Soit il y a plusiuers projets à traiter
602
+ --> le dictionnaire contient autant d'entrées que de projet et
603
+ chaque sous-dictionnaire reprend les différentes valeurs comme ci-dessus
604
+
605
+ :param which_value: value to get
606
+ :param which_group: group to get
587
607
  """
588
608
 
589
609
  if self.river_values is None:
@@ -653,10 +673,12 @@ class Polygons_Analyze(Zones):
653
673
  which_value:Union[stored_values_unk,stored_values_pos],
654
674
  which_group=None,
655
675
  operator:operators=operators.MEDIAN) -> dict:
656
- """
657
- Get values for the river polygons with an operator
658
-
659
- operator : MEDIAN, MIN, MAX, PERCENTILE95, PERCENTILE5, ALL
676
+ """
677
+ Get values for the river polygons with an operator
678
+
679
+ :param which_value: value to get
680
+ :param which_group: group to get
681
+ :param operator: MEDIAN, MIN, MAX, PERCENTILE95, PERCENTILE5, ALL
660
682
  """
661
683
 
662
684
  def extract_info(vals):
@@ -695,12 +717,41 @@ class Polygons_Analyze(Zones):
695
717
 
696
718
  return vals_ret
697
719
 
720
+ def list_groups(self):
721
+ """ List the groups of the river polygons """
722
+
723
+ return list(self.river_values.keys())
724
+
725
+ def list_sims(self, which_group=None):
726
+ """ List the sims for a specific group
727
+ or for all the groups of the river polygons """
728
+
729
+ if which_group is not None:
730
+ if which_group in self.river_values.keys():
731
+ return list(self.river_values[which_group].keys())
732
+ else:
733
+ logging.error(_('Group {0} not found').format(which_group))
734
+ return []
735
+ else:
736
+ ret = {}
737
+ for curgroup, curdict in self.river_values.items():
738
+ first_poly = curdict[list(curdict.keys())[0]]
739
+ values_dict = first_poly['values']
740
+ ret[curgroup] = list(values_dict.keys())
741
+ return ret
742
+
698
743
  def get_s_values(self,
699
744
  which_value:Union[stored_values_unk,stored_values_pos]=stored_values_unk.WATERLEVEL,
700
745
  which_group:str=None,
701
746
  which_sim:str=None,
702
747
  operator:operators=operators.MEDIAN):
703
- """ Get the values of the river polygons for a specific simulation """
748
+ """ Get the values of the river polygons for a specific simulation
749
+
750
+ :param which_value: value to get
751
+ :param which_group: group to get
752
+ :param which_sim: simulation to get
753
+ :param operator: operator to use
754
+ """
704
755
 
705
756
  s=[]
706
757
  val=[]
@@ -717,10 +768,10 @@ class Polygons_Analyze(Zones):
717
768
 
718
769
  # Séparation des listes triées
719
770
  s, val = zip(*ret)
720
-
771
+
721
772
  return s, val
722
773
 
723
-
774
+
724
775
  def plot_unk(self,
725
776
  figax = None,
726
777
  which_value:Union[stored_values_unk,stored_values_pos]=stored_values_unk.WATERLEVEL,
@@ -729,7 +780,16 @@ class Polygons_Analyze(Zones):
729
780
  options:dict=None,
730
781
  label=True,
731
782
  show=False):
732
- """ Plot the values of the river polygons """
783
+ """ Plot the values of the river polygons
784
+
785
+ :param figax: tuple (fig, ax) for the plot
786
+ :param which_value: value to plot
787
+ :param which_group: group to plot
788
+ :param operator: operator to use
789
+ :param options: options for the plot
790
+ :param label: show the labels or not
791
+ :param show: show the plot or not
792
+ """
733
793
 
734
794
  if figax is None:
735
795
  fig,ax = plt.subplots(1,1)
@@ -810,7 +870,13 @@ class Polygons_Analyze(Zones):
810
870
  which_group=None,
811
871
  operator:operators=operators.MEDIAN,
812
872
  show=False):
813
- """ Plot the waterline """
873
+ """ Plot the waterline
874
+
875
+ :param figax: tuple (fig, ax) for the plot
876
+ :param which_group: group to plot
877
+ :param operator: operator to use
878
+ :param show: show the plot or not
879
+ """
814
880
 
815
881
  fig,ax = self.plot_unk(figax, stored_values_unk.TOPOGRAPHY, which_group, operator, options={'color':'black', 'linewidth':2}, label=False, show=False)
816
882
  figax=(fig,ax)
@@ -830,7 +896,13 @@ class Polygons_Analyze(Zones):
830
896
  which_group=None,
831
897
  operator:operators=operators.MEDIAN,
832
898
  show=False):
833
- """ Plot the bed elevation """
899
+ """ Plot the bed elevation
900
+
901
+ :param figax: tuple (fig, ax) for the plot
902
+ :param which_group: group to plot
903
+ :param operator: operator to use
904
+ :param show: show the plot or not
905
+ """
834
906
 
835
907
  fig,ax = self.plot_unk(figax, stored_values_unk.TOPOGRAPHY, which_group, operator, options={'color':'black', 'linewidth':2}, label=False, show=False)
836
908
 
@@ -847,7 +919,13 @@ class Polygons_Analyze(Zones):
847
919
  which_group=None,
848
920
  operator:operators=operators.MEDIAN,
849
921
  show=False):
850
- """ Plot the water stage /water level """
922
+ """ Plot the water stage /water level
923
+
924
+ :param figax: tuple (fig, ax) for the plot
925
+ :param which_group: group to plot
926
+ :param operator: operator to use
927
+ :param show: show the plot or not
928
+ """
851
929
 
852
930
  fig,ax = self.plot_unk(figax, stored_values_unk.WATERLEVEL, which_group, operator, options={'color':'blue', 'linewidth':2}, show=False)
853
931
 
@@ -864,7 +942,13 @@ class Polygons_Analyze(Zones):
864
942
  which_group=None,
865
943
  operator:operators=operators.MEDIAN,
866
944
  show=False):
867
- """ Plot the water head """
945
+ """ Plot the water head
946
+
947
+ :param figax: tuple (fig, ax) for the plot
948
+ :param which_group: group to plot
949
+ :param operator: operator to use
950
+ :param show: show the plot or not
951
+ """
868
952
 
869
953
  fig,ax = self.plot_unk(figax, stored_values_unk.HEAD, which_group, operator, options={'color':'blue', 'linewidth':2}, show=False)
870
954
 
@@ -110,9 +110,18 @@ def import_files(module_files:Union[list[Path],list[str]]) -> list[types.ModuleT
110
110
  if isinstance(py_file, str):
111
111
  py_file = Path(py_file)
112
112
 
113
+ olddir = os.getcwd()
113
114
  sys.path.insert(0, str(py_file.parent.absolute()))
114
- module = importlib.import_module(str(py_file.name.replace('.py','')))
115
+ os.chdir(py_file.parent)
116
+
117
+ mod_name = py_file.name.replace('.py','')
118
+ if mod_name in sys.modules:
119
+ del sys.modules[mod_name]
120
+
121
+ module = importlib.import_module(mod_name)
122
+ # sys.modules.get('update_top_mann_scen')
115
123
  sys.path.pop(0)
124
+ os.chdir(olddir)
116
125
 
117
126
  modules.append(module)
118
127
 
@@ -788,26 +788,46 @@ class Config_Manager_2D_GPU:
788
788
  def _import_scripts_topo_manning(self, from_path:Path) -> list[types.ModuleType]:
789
789
  """ find all scripts from/up a path """
790
790
 
791
+ # tous les fichiers .py
792
+ # import des modules
793
+ imported_modules = import_files(from_path.glob('*.py'))
794
+
795
+ return imported_modules
796
+
797
+ def _list_modules(self, from_path:Path):
798
+ """ List all modules in structure """
799
+ import shutil
800
+
791
801
  curtree = self.get_tree(from_path)
792
802
  curdicts = self.get_dicts(curtree)
793
803
 
794
804
  # tous les fichiers .py -> list of lists
795
805
  all_py = [curpy for curdict in curdicts for curpy in curdict[GPU_2D_file_extensions.PY.value][WOLF_UPDATE]]
796
806
 
797
- # import des modules
798
- imported_modules = import_files(all_py)
807
+ # make a copy in the cache folder
808
+ cache_dir = from_path / '.cache_tmi'
809
+ cache_dir.mkdir(exist_ok=True)
799
810
 
800
- return imported_modules
811
+ # delete all file in the cache folder
812
+ for curfile in cache_dir.glob('*.py'):
813
+ curfile.unlink()
801
814
 
815
+ # make a copy of all files in the cache folder
816
+ for idx, cur_py in enumerate(all_py):
817
+ shutil.copy(cur_py, cache_dir / f'{idx}.py')
818
+
819
+ return self._import_scripts_topo_manning(cache_dir)
802
820
 
803
821
  def _apply_scripts_update_topo_maning_inf(self,
804
- modules:list[types.ModuleType],
822
+ dir_modules:Path,
805
823
  array_bat:WolfArray,
806
824
  array_mann:WolfArray,
807
825
  array_inf:WolfArray):
808
826
  """ Apply all scripts from a list of modules """
809
827
 
810
- for curmod in modules:
828
+ all_py = self._list_modules(dir_modules)
829
+
830
+ for curmod in all_py:
811
831
  instmod = curmod.Update_Sim_Scenario()
812
832
  instmod.update_topobathy(array_bat)
813
833
  instmod.update_manning(array_mann)
@@ -815,6 +835,7 @@ class Config_Manager_2D_GPU:
815
835
 
816
836
  def _import_scripts_bc(self, from_path:Path) -> list[types.ModuleType]:
817
837
  """ find all scripts from/up a path """
838
+ import shutil
818
839
 
819
840
  curtree = self.get_tree(from_path)
820
841
  curdicts = self.get_dicts(curtree)
@@ -822,8 +843,21 @@ class Config_Manager_2D_GPU:
822
843
  # tous les fichiers .py -> list of lists
823
844
  all_py = [curpy for curdict in curdicts for curpy in curdict[GPU_2D_file_extensions.PY.value][WOLF_BC]]
824
845
 
846
+ cache_dir = from_path / '.cache_bc'
847
+ cache_dir.mkdir(exist_ok=True)
848
+
849
+ # delete all file in the cache folder
850
+ for curfile in cache_dir.glob('*.py'):
851
+ curfile.unlink()
852
+
853
+ # make a copy of all files in the cache folder
854
+ cache_py = []
855
+ for idx, cur_py in enumerate(all_py):
856
+ shutil.copy(cur_py, cache_dir / f'{idx}.py')
857
+ cache_py.append(cache_dir / f'{idx}.py')
858
+
825
859
  # import des modules
826
- imported_modules = import_files(all_py)
860
+ imported_modules = import_files(cache_py)
827
861
 
828
862
  return imported_modules
829
863
 
@@ -1014,7 +1048,8 @@ class Config_Manager_2D_GPU:
1014
1048
  infiltration.array.data[:,:] = 0
1015
1049
 
1016
1050
  # applying Python scrpitps on ARRAYS
1017
- self._apply_scripts_update_topo_maning_inf(self._import_scripts_topo_manning(dir), bat, man, infiltration)
1051
+ # self._apply_scripts_update_topo_maning_inf(self._import_scripts_topo_manning(dir), bat, man, infiltration)
1052
+ self._apply_scripts_update_topo_maning_inf(dir, bat, man, infiltration)
1018
1053
 
1019
1054
  # save arrays on disk
1020
1055
  bat.write_all(str(dir / '__bathymetry_after_scripts.tif'))
@@ -3648,7 +3648,7 @@ class Wolfresults_2D(Element_To_Draw):
3648
3648
  #FIXME : rename 'x_or_y' to be more explicit
3649
3649
  def plot_q(self,
3650
3650
  vect:Union[vector, list[vector]],
3651
- x_or_y:Union[str, list[str]] = 'x',
3651
+ x_or_y:Union[str, list[str]] = 'border',
3652
3652
  toshow=False,
3653
3653
  absolute=True,
3654
3654
  figax = None):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wolfhece
3
- Version: 2.1.85
3
+ Version: 2.1.87
4
4
  Author-email: Pierre Archambeau <pierre.archambeau@uliege.be>
5
5
  License: Copyright (c) 2024 University of Liege. All rights reserved.
6
6
  Project-URL: Homepage, https://uee.uliege.be/hece
@@ -16,7 +16,7 @@ wolfhece/PyParams.py,sha256=LGt9uBFRVeS0F_kObJw8bPkWFqYSzf5pUTscxVU5Mxo,97725
16
16
  wolfhece/PyPictures.py,sha256=m1kY0saW6Y9Q0bDCo47lW6XxDkBrbQG-Fd8uVn8G5ic,2514
17
17
  wolfhece/PyTranslate.py,sha256=4appkmNeHHZLFmUtaA_k5_5QL-5ymxnbVN4R2OblmtE,622
18
18
  wolfhece/PyVertex.py,sha256=MtZVjIWIi62QX_oqNosb56xPgjhOGVeGz-XsD82tsNg,40614
19
- wolfhece/PyVertexvectors.py,sha256=CHeZZ7hYcPf-9ljJSQa8rlDvFB344ZTRCvXM00xoeQ0,238667
19
+ wolfhece/PyVertexvectors.py,sha256=mKwu_gMHMPTayfBNscbXEvi4cEVU3TUMz4ZBwfTSflo,249665
20
20
  wolfhece/PyWMS.py,sha256=fyyzm2HFwq8aRwVYHKiBatcZOeKnFi6DWhv4nfscySQ,4602
21
21
  wolfhece/RatingCurve.py,sha256=bUjIrQjvIjkD4V-z8bZmA6pe1ILtYNM0-3fT6YUY1RU,22498
22
22
  wolfhece/RatingCurveData.py,sha256=5UvnIm89BwqjnEbLCcY3CA8WoFd_xHJbooNy62fX5iY,57660
@@ -33,7 +33,7 @@ wolfhece/friction_law.py,sha256=MtZJLo-pTj3-Fw-w12z1LSgSIDrH-JGR0iD9wer_fpQ,5498
33
33
  wolfhece/gpuview.py,sha256=ggFoxBntUjHqsoxwTZQOE-UsbtC8YAIwZD1i3veAe-o,24204
34
34
  wolfhece/import_ascfiles.py,sha256=6Zl8qBR9c6VtyziookQ8YE9KC0GtW_J9WFt5ubyGp-s,4465
35
35
  wolfhece/ins.py,sha256=uUeLMS1n3GPnfJhxl0Z2l-UXpmPUgthuwct282OOEzk,36184
36
- wolfhece/irm_qdf.py,sha256=zGHKYJ2SHoerZiNQZ6yP8beSt3Gc4Es2waAi-xL0Xgg,16633
36
+ wolfhece/irm_qdf.py,sha256=KyrIk0Gu50Q702EWxRpwKTWI2KGjtHA1l8CL-Y469O0,26394
37
37
  wolfhece/ismember.py,sha256=fkLvaH9fhx-p0QrlEzqa6ySO-ios3ysjAgXVXzLgSpY,2482
38
38
  wolfhece/multiprojects.py,sha256=Sd6Bl6YP33jlR79A6rvSLu23vq8sqbFYL8lWuVPkEpE,21549
39
39
  wolfhece/picc.py,sha256=ueujnw03BQz-nPxKGzfDzZbtruTzvnqd6Gm8lOvBYzw,8802
@@ -41,7 +41,7 @@ wolfhece/pyGui1D.py,sha256=9g7OS3YiKsqy--6y0cBD7x2gaqTTYFXWkxImpgnTA20,121937
41
41
  wolfhece/pybridges.py,sha256=xbZPuX40c4EKqws4OKNbUVUBPKIzLTbSdYVyrNf_kIE,57418
42
42
  wolfhece/pydike.py,sha256=hPBQsmSTW4QAp1wcOzb-TL3L7eet2WT1sJx2q-WNQ-Q,2241
43
43
  wolfhece/pylogging.py,sha256=4TI8hgBB65z-zpvU5Rfa2jkPXPhJaqXjHVPwbcdzTNc,4528
44
- wolfhece/pypolygons_scen.py,sha256=x-tnYLNq3MPV51NbaU14trgRj8qyUyOrMdF1zDsUX3I,37444
44
+ wolfhece/pypolygons_scen.py,sha256=C0qxVUsBHWZVkurZV-DI1GMN1J1B-ul93n2fs16UjoI,39718
45
45
  wolfhece/pyshields.py,sha256=7k-qe2EJgr9fJE62jyPmlWQwRj8T0DK4iuMU844ZhYs,23281
46
46
  wolfhece/pyviews.py,sha256=5Hqqo9MRw1eiomYkmc7QywNu1KmEkytLJG-wH_aG38Y,13748
47
47
  wolfhece/pywalous.py,sha256=yRaWJjKckXef1d9D5devP0yFHC9uc6kRV4G5x9PNq9k,18972
@@ -54,7 +54,7 @@ wolfhece/wolf_texture.py,sha256=DS5eobLxrq9ljyebYfpMSQPn8shkUAZZVfqrOKN_QUU,1695
54
54
  wolfhece/wolf_tiles.py,sha256=2Ho2I20rHRY81KXxjgLOYISdF4OkJ2d6omeY4shDoGI,10386
55
55
  wolfhece/wolf_vrt.py,sha256=89XoDhCJMHiwPQUuOduxtTRKuIa8RDxgNqX65S4xp9M,10569
56
56
  wolfhece/wolf_zi_db.py,sha256=baE0niMCzybWGSvPJc5FNxo9ZxsGfU4p-FmfiavFHAs,12967
57
- wolfhece/wolfresults_2D.py,sha256=Iq_eOcQ_UkgfWN386oFt_VZysMt8uyYrqd36iAkkM2Q,168473
57
+ wolfhece/wolfresults_2D.py,sha256=5RAvOfO0ua-5hMEdtXKZWznh4NN_q-PLfZdANm7W33M,168478
58
58
  wolfhece/xyz_file.py,sha256=Se4nCPwYAYLSA5i0zsbnZUKoAMAD0mK1FJea5WSZUkk,5755
59
59
  wolfhece/acceptability/Parallels.py,sha256=h4tu3SpC_hR5Hqa68aruxhtAyhs8u666YuZ40_fR5zg,3979
60
60
  wolfhece/acceptability/__init__.py,sha256=hfgoPKLDpX7drN1Vpvux-_5Lfyc_7feT2C2zQr5v-Os,258
@@ -70,11 +70,12 @@ wolfhece/apps/WolfPython3.png,sha256=3G84zx14HnlB9YXMY4VUAO7IB3eu7JFvi4Kpmc_4zBE
70
70
  wolfhece/apps/__init__.py,sha256=OzzKItATWV0mDkz_LC2L3w5sgT2rt8ExXXCbR_FwvlY,24
71
71
  wolfhece/apps/acceptability.py,sha256=hMIxTRNQARTTWJJaakb6kEK9udNh-w64VDgxxezVk3k,790
72
72
  wolfhece/apps/check_install.py,sha256=Xoi_d8MzKzNAy2xqEpERdsqgRPu0hbBWukI0WkIYzD0,1701
73
+ wolfhece/apps/check_version.py,sha256=Zze7ltzcM2ZzIGMwkcASIjapCG8CEzzW9kwNscA3NhM,1768
73
74
  wolfhece/apps/curvedigitizer.py,sha256=Yps4bcayzbsz0AoVc_dkSk35dEhhn_esIBy1Ziefgmk,5334
74
75
  wolfhece/apps/hydrometry.py,sha256=lhhJsFeb4zGL4bNQTs0co85OQ_6ssL1Oy0OUJCzhfYE,656
75
76
  wolfhece/apps/isocurrent.py,sha256=dagmGR8ja9QQ1gwz_8fU-N052hIw-W0mWGVkzLu6C7I,4247
76
77
  wolfhece/apps/splashscreen.py,sha256=SrustmIQeXnsiD-92OzjdGhBi-S7c_j-cSvuX4T6rtg,2929
77
- wolfhece/apps/version.py,sha256=6GEtMwkg9navEd2849pVizv2EQxObddJdXJ4ySlqK3A,388
78
+ wolfhece/apps/version.py,sha256=W5dXUE8GFyOo5XU-puzJWyW83xPeYE1ki3o6TPwugMw,388
78
79
  wolfhece/apps/wolf.py,sha256=j_CgvsL8rwixbVvVD5Z0s7m7cHZ86gmFLojKGuetMls,729
79
80
  wolfhece/apps/wolf2D.py,sha256=4z_OPQ3IgaLtjexjMKX9ppvqEYyjFLt1hcfFABy3-jU,703
80
81
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -260,8 +261,8 @@ wolfhece/report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
260
261
  wolfhece/report/reporting.py,sha256=JUEXovx_S4jpYkJEBU0AC-1Qw2OkkWyV3VAp6iOfSHc,19494
261
262
  wolfhece/report/wolf_report.png,sha256=NoSV58LSwb-oxCcZScRiJno-kxDwRdm_bK-fiMsKJdA,592485
262
263
  wolfhece/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
263
- wolfhece/scenario/check_scenario.py,sha256=w7_SST4n_uec-MUBK36gbJzz2KC8qT_bVJ_VNyp7cMo,4917
264
- wolfhece/scenario/config_manager.py,sha256=aZLfOdKCGva2lXVDAVQrn4nd9ONXHQ_ZNDcUcEIbkCo,85621
264
+ wolfhece/scenario/check_scenario.py,sha256=VVjtxfcLAgq_Pf8VSqRq6BJ-y4Zi24CntJpZWxAv3n8,5162
265
+ wolfhece/scenario/config_manager.py,sha256=0B_ZtMkcbZRwzkXHwT6jSC3-Lq85P2oBiq1Qxjkfh2w,86869
265
266
  wolfhece/scenario/imposebc_void.py,sha256=PqA_99hKcaqK5zsK6IRIc5Exgg3WVpgWU8xpwNL49zQ,5571
266
267
  wolfhece/scenario/update_void.py,sha256=ay8C_FxfXN627Hx46waaAO6F3ovYmOCTxseUumKAY7c,7474
267
268
  wolfhece/shaders/fragment_shader_texture.glsl,sha256=w6h8d5mJqFaGbao0LGmjRcFFdcEQ3ICIl9JpuT71K5k,177
@@ -284,8 +285,8 @@ wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=8PlMYrb_8jI8h9F0_EagpM
284
285
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=ORy7fz4dcp691qKzaOZHrRLZ0uXNhL-LIHxmpDGL6BI,5007
285
286
  wolfhece/wintab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
286
287
  wolfhece/wintab/wintab.py,sha256=8A-JNONV6ujgsgG3lM5Uw-pVgglPATwKs86oBzzljoc,7179
287
- wolfhece-2.1.85.dist-info/METADATA,sha256=eG7jyc1MzhDuUTl8NSzIn1LZGnhzHh7qGU6r6QtbIfc,2570
288
- wolfhece-2.1.85.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
289
- wolfhece-2.1.85.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
290
- wolfhece-2.1.85.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
291
- wolfhece-2.1.85.dist-info/RECORD,,
288
+ wolfhece-2.1.87.dist-info/METADATA,sha256=0XES9NJJEV_c5J9SqwgKEn5iDnaVZZZk3jLNkIaqJTo,2570
289
+ wolfhece-2.1.87.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
290
+ wolfhece-2.1.87.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
291
+ wolfhece-2.1.87.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
292
+ wolfhece-2.1.87.dist-info/RECORD,,