wolfhece 2.1.99__py3-none-any.whl → 2.1.100__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.
wolfhece/wolf_vrt.py CHANGED
@@ -38,7 +38,24 @@ def create_vrt(wdir:str, fout:str='out.vrt', format:str='tif'):
38
38
  myvrt = None
39
39
 
40
40
  os.chdir(curdir)
41
-
41
+ def _get_diverged_relative_path(path: Path, base: Path) -> Path:
42
+ """
43
+ Get relative path from base to path, even if they only share part of their paths.
44
+ More general than the next function "_get_relative_path", especially for not "child/parents paths"
45
+ """
46
+
47
+ # Parts of the paths
48
+ relative_path_parts = path.parts
49
+ base_parts = base.parts
50
+ # Where do they diverge ?
51
+ i = 0
52
+ while i < min(len(relative_path_parts), len(base_parts)) and relative_path_parts[i] == base_parts[i]:
53
+ i += 1
54
+
55
+ # Building of the relative path, by adding ".." from the divergence point
56
+ return Path(*(['..'] * (len(base_parts) - i) + list(relative_path_parts[i:])))
57
+
58
+
42
59
  def _get_relative_path(path:Path, base:Path):
43
60
  """
44
61
  Get relative path from base to path
@@ -47,7 +64,6 @@ def _get_relative_path(path:Path, base:Path):
47
64
  :type path: Path
48
65
  :param base: base path
49
66
  :type base: Path
50
-
51
67
  """
52
68
 
53
69
  if base in path.parents:
@@ -79,7 +95,8 @@ def create_vrt_from_files(files:list[Path]=[], fout:Path='assembly.vrt'):
79
95
  # change working directory to the parent of the output file
80
96
  os.chdir(fout.parent)
81
97
  # work with relative paths
82
- myvrt = gdal.BuildVRT(str(fout.with_suffix('.vrt').name) , [str(_get_relative_path(file, fout.parent)) for file in files])
98
+
99
+ myvrt = gdal.BuildVRT(str(fout.with_suffix('.vrt').name) , [str(_get_diverged_relative_path(file, fout.parent)) for file in files])
83
100
  # close the dataset -- force to write on disk
84
101
  myvrt = None
85
102
  # restore working directory
@@ -91,7 +108,7 @@ def create_vrt_from_files_first_based(files:list[Path]=[], fout:Path='assembly.v
91
108
 
92
109
  Restreint l'emprise et force la résolution sur le premier fichier listé
93
110
  """
94
-
111
+
95
112
  if isinstance(fout, str):
96
113
  fout = Path(fout)
97
114
 
@@ -119,6 +136,7 @@ def create_vrt_from_files_first_based(files:list[Path]=[], fout:Path='assembly.v
119
136
 
120
137
  locNoData = raster.GetRasterBand(1).GetNoDataValue()
121
138
 
139
+ # options of BuildVRT defined on properties of "files[0]"
122
140
  options = gdal.BuildVRTOptions(resolution='user',
123
141
  xRes=abs(geotr[1]),
124
142
  yRes=abs(geotr[5]),
@@ -128,11 +146,94 @@ def create_vrt_from_files_first_based(files:list[Path]=[], fout:Path='assembly.v
128
146
 
129
147
  # retain current working directory
130
148
  oldcwd = os.getcwd()
131
- # change working directory to the parent of the output file
132
- os.chdir(fout.parent.absolute())
149
+ # change working directory to the parent of the output file
150
+ os.chdir(fout.parent.absolute())
151
+ # work with relative paths
152
+ myvrt = gdal.BuildVRT(str(fout.with_suffix('.vrt').name),[str(_get_diverged_relative_path(file, fout.parent)) for file in files], options=options) #str(_get_diverged_relative_path(file, fout.parent)) for file in files
153
+
154
+ # close the dataset -- force to write on disk
155
+ myvrt = None
156
+ # restore working directory
157
+ os.chdir(oldcwd)
158
+
159
+
160
+ def create_vrt_from_diverged_files(files:list[Path]=[], fout:Path='assembly.vrt'):
161
+ """
162
+ Agglomération de tous les fichiers énumérés dans files dans un layer virtuel .vrt
133
163
 
164
+ :param files: list of files to process
165
+ :type files: list[Path]
166
+ :param fout: output file
167
+ :type fout: Path
168
+ """
169
+
170
+ if isinstance(fout, str):
171
+ fout = Path(fout)
172
+
173
+ if isinstance(files[0], str):
174
+ files = [Path(file) for file in files]
175
+
176
+ # retain current working directory
177
+ oldcwd = os.getcwd()
178
+ # change working directory to the parent of the output file
179
+ os.chdir(fout.parent)
134
180
  # work with relative paths
135
- myvrt = gdal.BuildVRT(str(fout.with_suffix('.vrt').name) , [str(_get_relative_path(file, fout.parent)) for file in files], options=options)
181
+
182
+ myvrt = gdal.BuildVRT(str(fout.with_suffix('.vrt').name) , [str(_get_diverged_relative_path(file, fout.parent)) for file in files])
183
+ # close the dataset -- force to write on disk
184
+ myvrt = None
185
+ # restore working directory
186
+ os.chdir(oldcwd)
187
+
188
+ def create_vrt_from_diverged_files_first_based(files:list[Path]=[], fout:Path='assembly.vrt', Nodata:float=99999.):
189
+ """
190
+ Agglomération de tous les fichiers énumérés dans files dans un layer virtuel .vrt
191
+
192
+ Restreint l'emprise et force la résolution sur le premier fichier listé
193
+ """
194
+
195
+ if isinstance(fout, str):
196
+ fout = Path(fout)
197
+
198
+ if isinstance(files[0], str):
199
+ files = [Path(file) for file in files]
200
+
201
+ first = files[0]
202
+ raster:gdal.Dataset
203
+ raster = gdal.Open(str(first))
204
+ geotr = raster.GetGeoTransform()
205
+
206
+ # Dimensions
207
+ nbx = raster.RasterXSize
208
+ nby = raster.RasterYSize
209
+
210
+ xmin = geotr[0]
211
+ xmax = geotr[0]+geotr[1]*float(nbx)
212
+
213
+ if geotr[5]>0:
214
+ ymin = geotr[3]
215
+ ymax = geotr[3]+geotr[5]*float(nby)
216
+ else:
217
+ ymin = geotr[3]+geotr[5]*float(nby)
218
+ ymax = geotr[3]
219
+
220
+ locNoData = raster.GetRasterBand(1).GetNoDataValue()
221
+
222
+ # options of BuildVRT defined on properties of "files[0]"
223
+ options = gdal.BuildVRTOptions(resolution='user',
224
+ xRes=abs(geotr[1]),
225
+ yRes=abs(geotr[5]),
226
+ outputBounds=[xmin,ymin,xmax,ymax],
227
+ resampleAlg='bilinear',
228
+ srcNodata=Nodata)
229
+
230
+ # retain current working directory
231
+ oldcwd = os.getcwd()
232
+ # change working directory to the parent of the output file
233
+ os.chdir(fout.parent.absolute())
234
+ # work with relative paths
235
+ myvrt = gdal.BuildVRT(str(fout.with_suffix('.vrt').name),[str(_get_diverged_relative_path(file, fout.parent)) for file in files], options=options) #str(_get_diverged_relative_path(file, fout.parent)) for file in files
236
+
136
237
  # close the dataset -- force to write on disk
137
238
  myvrt = None
138
239
  # restore working directory
@@ -3709,6 +3709,80 @@ class Wolfresults_2D(Element_To_Draw):
3709
3709
  """
3710
3710
  self._cache = None
3711
3711
 
3712
+ def get_hydrographs(self, vect:Union[vector, list[vector], zone]):
3713
+ """ Get hydrograph accross a vector
3714
+
3715
+ :param vect: wolf polyline or list of wolf polylines or zone
3716
+ """
3717
+
3718
+ assert isinstance(vect, vector | list | zone), 'Expected a vector'
3719
+
3720
+ if isinstance(vect, zone):
3721
+ vect = vect.myvectors
3722
+
3723
+ nb = self.get_nbresults()
3724
+ times, steps = self.times, self.timesteps
3725
+
3726
+ if isinstance(vect, vector):
3727
+ q=[]
3728
+ for i in tqdm(range(nb)):
3729
+ if i==0:
3730
+ myhead = self.get_header_block(1)
3731
+ vect_raster = myhead.rasterize_vector(vect)
3732
+ self.read_oneresult(i)
3733
+ q.append(self._plot_one_q_raster_splitting(vect_raster, True, to_rasterize = False))
3734
+
3735
+ elif isinstance(vect, list):
3736
+ q={str:list}
3737
+ vect_raster = []
3738
+ myhead = self.get_header_block(1)
3739
+
3740
+ for i in range(len(vect)):
3741
+ q[vect[i].myname]= []
3742
+ vect_raster.append(myhead.rasterize_vector(vect[i]))
3743
+
3744
+ for i in tqdm(range(nb)):
3745
+ self.read_oneresult(i)
3746
+
3747
+ for curvec, cur_vect_raster in zip(vect, vect_raster):
3748
+ q[curvec.myname].append(self._plot_one_q_raster_splitting(cur_vect_raster, True, to_rasterize = False))
3749
+
3750
+ return times, q
3751
+
3752
+ def export_hydrographs(self, vect:Union[vector, list[vector], zone], filename:str|Path):
3753
+ """ Export hydrograph accross a vector as CSV file
3754
+
3755
+ :param vect: wolf polyline or list of wolf polylines or zone
3756
+ :param filename: output filename
3757
+ """
3758
+
3759
+ assert isinstance(vect, vector | list | zone), 'Expected a vector'
3760
+
3761
+ filename = Path(filename)
3762
+ filename = filename.with_suffix('.csv')
3763
+
3764
+ if isinstance(vect, zone):
3765
+ vect = vect.myvectors
3766
+
3767
+ times, q = self.get_hydrographs(vect)
3768
+
3769
+ with open(filename, 'w') as f:
3770
+ f.write('Time [s],')
3771
+ if isinstance(vect, vector):
3772
+ f.write(vect.myname)
3773
+ elif isinstance(vect, list):
3774
+ f.write(','.join([cur.myname for cur in vect]))
3775
+ f.write('\n')
3776
+
3777
+ for i in range(len(times)):
3778
+ f.write(f'{times[i]},')
3779
+ if isinstance(vect, vector):
3780
+ f.write(f'{q[i]}')
3781
+ elif isinstance(vect, list):
3782
+ f.write(','.join([str(q[cur.myname][i]) for cur in vect]))
3783
+ f.write('\n')
3784
+
3785
+
3712
3786
  #FIXME : rename 'x_or_y' to be more explicit
3713
3787
  def plot_q(self,
3714
3788
  vect:Union[vector, list[vector]],
wolfhece/xyz_file.py CHANGED
@@ -13,106 +13,130 @@ import numpy as np
13
13
  import matplotlib.pyplot as plt
14
14
  from os.path import normpath,exists,join,basename
15
15
  from os import listdir,scandir
16
+ import logging
16
17
 
17
18
  from .PyTranslate import _
18
19
 
19
20
  class XYZFile:
20
21
  """ Classe pour la gestion des fichiers xyz """
21
- nblines:int
22
22
  x:np.array
23
23
  y:np.array
24
24
  z:np.array
25
25
  filename:str
26
26
 
27
- def __init__(self, fname,toread=True):
27
+ def __init__(self, fname:str, toread:bool= True,
28
+ folder:str= None, bounds:list= None,
29
+ delimiter:str=','):
28
30
  """ Initialisation du nom du fichier """
31
+
29
32
  self.filename = fname
30
- self.nblines=0
31
-
33
+
32
34
  self.x = None
33
35
  self.y = None
34
36
  self.z = None
35
37
  self.xyz = None
36
-
38
+
37
39
  if toread:
38
- self.read_from_file()
40
+ self.read_from_file(folder=folder, bounds=bounds, delimiter=delimiter)
41
+
42
+ @property
43
+ def nblines(self):
44
+ if self.x is None:
45
+ return 0
46
+ else:
47
+ return len(self.x)
48
+
49
+ def reset(self):
50
+ """ Reset des données """
51
+ self.x = None
52
+ self.y = None
53
+ self.z = None
54
+ self.xyz = None
39
55
 
40
56
  def test_bounds(self,bounds):
41
-
57
+
42
58
  if bounds is None:
43
59
  return True
44
-
60
+
45
61
  x1=bounds[0][0]
46
62
  x2=bounds[0][1]
47
63
  y1=bounds[1][0]
48
64
  y2=bounds[1][1]
49
-
65
+
50
66
  mybounds = self.get_extent()
51
67
 
52
68
  test = not(x2 < mybounds[0][0] or x1 > mybounds[0][1] or y2 < mybounds[1][0] or y1 > mybounds[1][1])
53
-
69
+
54
70
  return test
55
71
 
56
- def read_from_file(self):
72
+ def read_from_file(self, folder:str=None, bounds:list=None, delimiter=','):
57
73
  """ Lecture d'un fichier xyz et remplissage de l'objet """
58
-
59
- self.xyz = np.genfromtxt(self.filename, delimiter=',',dtype=np.float32)
74
+
75
+ try:
76
+ if folder is None:
77
+ self.xyz = np.genfromtxt(self.filename, delimiter=delimiter, dtype=np.float32)
78
+ else:
79
+ if bounds is None:
80
+ self.reset()
81
+ logging.error(_('Bounds must be defined when reading a directory'))
82
+ return
83
+
84
+ self.xyz = xyz_scandir(folder,bounds=bounds,delimiter=delimiter)
85
+ # check if self.xyz is an empty array
86
+ if len(self.xyz) == 0:
87
+ self.xyz = None
88
+ return
89
+ except:
90
+ self.reset()
91
+ logging.error(_('Error reading file: {self.filename}'))
92
+ return
93
+
60
94
  self.x = self.xyz[:,0]
61
95
  self.y = self.xyz[:,1]
62
96
  self.z = self.xyz[:,2]
63
- self.nblines = len(self.xyz)
64
-
65
- # with open(self.filename, 'r') as f:
66
- # self.nblines = sum(1 for line in f)
67
- # self.x = np.zeros(self.nblines)
68
- # self.y = np.zeros(self.nblines)
69
- # self.z = np.zeros(self.nblines)
70
- # f.seek(0)
71
- # self.nblines = 0
72
- # for line in f:
73
- # tmp = line.split()
74
- # if tmp:
75
- # if is_float(tmp[0]):
76
- # self.x[self.nblines] = float(tmp[0])
77
- # self.y[self.nblines] = float(tmp[1])
78
- # self.z[self.nblines] = float(tmp[2])
79
- # self.nblines += 1
80
97
 
81
98
  def fill_from_wolf_array(self, myarray,nullvalue=0.):
82
99
  """ Création d'un fichier xyz depuis les données d'un WOLF array """
83
- self.nblines = myarray.nbx * myarray.nby
84
- self.x = np.zeros(self.nblines)
85
- self.y = np.zeros(self.nblines)
86
- self.z = np.zeros(self.nblines)
87
- self.nblines = 0
100
+
101
+ nbmaxlines = myarray.nbx * myarray.nby
102
+ self.x = np.zeros(nbmaxlines)
103
+ self.y = np.zeros(nbmaxlines)
104
+ self.z = np.zeros(nbmaxlines)
105
+
106
+ k=0
88
107
  for cury in range(myarray.nby):
89
108
  y = cury * myarray.dy + 0.5 * myarray.dy + myarray.origy + myarray.transly
90
109
  for curx in range(myarray.nbx):
91
110
  z = myarray.array[curx, cury]
92
111
  if z != nullvalue:
93
112
  x = curx * myarray.dx + 0.5 * myarray.dx + myarray.origx + myarray.translx
94
- self.x[self.nblines] = x
95
- self.y[self.nblines] = y
96
- self.z[self.nblines] = z
97
- self.nblines += 1
113
+ self.x[k] = x
114
+ self.y[k] = y
115
+ self.z[k] = z
116
+ k+=1
117
+
118
+ # crop the arrays
119
+ self.x = self.x[:k]
120
+ self.y = self.y[:k]
121
+ self.z = self.z[:k]
98
122
 
99
123
  def write_to_file(self):
100
124
  """ Ecriture des informations dans un fichier """
125
+
101
126
  with open(self.filename, 'w') as f:
102
127
  for i in range(self.nblines):
103
128
  f.write('{:.3f},{:.3f},{:.3f}\n'.format(self.x[i], self.y[i], self.z[i]))
104
129
 
105
130
  def get_extent(self):
106
131
  """ Retourne les limites du rectangle qui encadre le nuage de points """
132
+
107
133
  xlim = [np.min(self.x), np.max(self.x)]
108
134
  ylim = [np.min(self.y), np.max(self.y)]
109
135
  return (xlim, ylim)
110
136
 
111
- def merge(self, xyz_list):
137
+ def merge(self, xyz_list:list["XYZFile"]):
112
138
  """ Merge des fichiers xyz en 1 seul """
113
- for cur_xyz in xyz_list:
114
- self.nblines += cur_xyz.nblines
115
-
139
+
116
140
  newxyz = np.concatenate([cur.xyz for cur in xyz_list])
117
141
 
118
142
  if self.xyz is not None:
@@ -126,6 +150,7 @@ class XYZFile:
126
150
 
127
151
  def plot(self):
128
152
  """ Représentation graphique des points """
153
+
129
154
  plt.scatter(self.x, self.y, c=self.z, marker='.', cmap='viridis', edgecolors='none')
130
155
  plt.xlabel('x [m]')
131
156
  plt.ylabel('y [m]')
@@ -137,16 +162,17 @@ class XYZFile:
137
162
  plt.pause(0.1)
138
163
 
139
164
  def find_points(self,bounds):
140
-
165
+
141
166
  if bounds is None:
142
167
  return self.xyz
143
-
168
+
144
169
  xb=bounds[0]
145
170
  yb=bounds[1]
171
+
146
172
  # Get arrays which indicate invalid X, Y, or Z values.
147
173
  X_valid = (xb[0] <= self.x) & (xb[1] > self.x)
148
174
  Y_valid = (yb[0] <= self.y) & (yb[1] > self.y)
149
- good_indices = np.where(X_valid & Y_valid)[0]
175
+ good_indices = np.where(X_valid & Y_valid)[0]
150
176
  return self.xyz[good_indices]
151
177
 
152
178
  def is_float(s):
@@ -156,19 +182,33 @@ def is_float(s):
156
182
  except ValueError:
157
183
  return False
158
184
 
159
- def xyz_scandir(mydir,bounds):
160
-
185
+ def xyz_scandir(mydir:str, bounds:list, delimiter:str=',') -> np.ndarray:
186
+ """
187
+ Function that reads all the xyz files in a directory and its subdirectories
188
+
189
+ :param mydir: directory to scan
190
+ :dtype mydir: str
191
+ :param bounds: bounds of the area to consider [[x1,x2],[y1,y2]]
192
+ :dtype bounds: list
193
+ :return: list of points
194
+ """
195
+
161
196
  first=[]
162
197
  for curfile in listdir(mydir):
163
198
  if curfile.endswith('.xyz'):
164
- mydata = XYZFile(join(mydir,curfile))
199
+ mydata = XYZFile(join(mydir,curfile), delimiter=delimiter)
165
200
  if mydata.test_bounds(bounds):
166
- print(curfile)
201
+ if isinstance(mydir,str):
202
+ logging.info(mydir)
203
+ else:
204
+ logging.info(mydir.path)
205
+ logging.info(curfile)
167
206
  first.append(mydata.find_points(bounds))
168
207
 
208
+ # if there is a subdirectory, we go deeper
169
209
  for entry in scandir(mydir):
170
210
  if entry.is_dir():
171
- locf=xyz_scandir(entry,bounds)
211
+ locf=xyz_scandir(entry, bounds, delimiter)
172
212
  if len(locf)>0:
173
213
  first.append(locf)
174
214
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wolfhece
3
- Version: 2.1.99
3
+ Version: 2.1.100
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
@@ -7,7 +7,7 @@ wolfhece/ManageParams.py,sha256=EeuUI5Vvh9ixCvYf8YShMC1s1Yacc7OxOCN7q81gqiQ,517
7
7
  wolfhece/Model1D.py,sha256=SI4oNF_J3MdjiWZoizS8kuRXLMVyymX9dYfYJNVCQVI,476989
8
8
  wolfhece/PyConfig.py,sha256=Bb1T8qjgKMChadJYDrHO9uo6CwItiAXScZpYkDXqZF8,11387
9
9
  wolfhece/PyCrosssections.py,sha256=FnmM9DWY_SAF2EDH9Gu2PojXNtSTRF4-aYQuAAJXBh4,112771
10
- wolfhece/PyDraw.py,sha256=kpxiFIddRJyXcXZraZ1pZnQ3kn95_Oyl-XyZsSvsitg,468509
10
+ wolfhece/PyDraw.py,sha256=MbAHjB9rYWq4IoCD8cYJph3NKlqwUVE5faauv-5YXCk,468676
11
11
  wolfhece/PyGui.py,sha256=HY0beOMSp1JEyq8-vfVynzVrmKxvaO_sJSMwlNqCNrg,105289
12
12
  wolfhece/PyGuiHydrology.py,sha256=f60E8K9eGTnRq5RDF6yvt-ahf2AYegwQ9t25zZ2Mk1A,14946
13
13
  wolfhece/PyHydrographs.py,sha256=jwtSNMMACwarxrtN1UeQYth99UNrhwPx1IGgUwcooHA,3774
@@ -16,7 +16,7 @@ wolfhece/PyParams.py,sha256=GRp1zZDUJIjs8PtjwScDdov-E9orr1JWOntDazN5AOw,98577
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=3-1zV8-U8bcf9wUL0mJao54Sf3Ew-wmzxhRWUajnGXM,42210
19
- wolfhece/PyVertexvectors.py,sha256=qoIbjd-mvxmE-w9FWBlwcI1ewk8crSHTYYCUX8JIIWM,253858
19
+ wolfhece/PyVertexvectors.py,sha256=bwXWtZ9qjrrf94G8n_Ne5qETExB9p4oUR6GDDuCBVH0,253864
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
@@ -39,6 +39,7 @@ wolfhece/ismember.py,sha256=fkLvaH9fhx-p0QrlEzqa6ySO-ios3ysjAgXVXzLgSpY,2482
39
39
  wolfhece/matplotlib_fig.py,sha256=JM3wmURaBCWXu-pRKzmjCBm05MPYtFqdUdkU3njiLfY,67812
40
40
  wolfhece/multiprojects.py,sha256=Sd6Bl6YP33jlR79A6rvSLu23vq8sqbFYL8lWuVPkEpE,21549
41
41
  wolfhece/picc.py,sha256=oATEiPmj_om7TIOWucNZszIu8K18yq8yKU_GwpGJEMs,8531
42
+ wolfhece/pidcontroller.py,sha256=PHYenOdzfyPK2pXAhyRolCxMSMRd2AFza0eVMafpPHk,5205
42
43
  wolfhece/pyGui1D.py,sha256=9g7OS3YiKsqy--6y0cBD7x2gaqTTYFXWkxImpgnTA20,121937
43
44
  wolfhece/pybridges.py,sha256=EU_r6yRYDf5zKmwwXEBsGYvTKFbSfE3iTxPwusKR-1I,57398
44
45
  wolfhece/pydike.py,sha256=hPBQsmSTW4QAp1wcOzb-TL3L7eet2WT1sJx2q-WNQ-Q,2241
@@ -46,24 +47,25 @@ wolfhece/pylogging.py,sha256=4TI8hgBB65z-zpvU5Rfa2jkPXPhJaqXjHVPwbcdzTNc,4528
46
47
  wolfhece/pypolygons_scen.py,sha256=vMfAKXKrW6vKR7l9Fl2hEt-jihLwIiMur7qNTNfwRg4,46101
47
48
  wolfhece/pyshields.py,sha256=6YncgmcA6QvbyIl4jbFRf24uJVjhiSplQKWtZH42lXI,24108
48
49
  wolfhece/pyviews.py,sha256=5Hqqo9MRw1eiomYkmc7QywNu1KmEkytLJG-wH_aG38Y,13748
49
- wolfhece/pywalous.py,sha256=yRaWJjKckXef1d9D5devP0yFHC9uc6kRV4G5x9PNq9k,18972
50
+ wolfhece/pywalous.py,sha256=mWB7UxlYMIbPxNUDlONQEjcOOy9VSaRU9aYWZ5IFLu8,19164
50
51
  wolfhece/rain_SPWMI.py,sha256=qCfcmF7LajloOaCwnTrrSMzyME03YyilmRUOqrPrv3U,13846
51
52
  wolfhece/textpillow.py,sha256=map7HsGYML_o5NHRdFg2s_TVQed_lDnpYNDv27MM0Vw,14130
52
53
  wolfhece/tools_mpl.py,sha256=gQ3Jg1iuZiecmMqa5Eli2ZLSkttu68VXL8YmMDBaEYU,564
53
- wolfhece/wolf_array.py,sha256=va5Guu8utEFmFbEYZbJdLR2GRGIj8URKpxj1EX_ZA4Q,407883
54
+ wolfhece/wolf_array.py,sha256=H-ol0OtoZKr2I8hyQlEPa5OKWEYVJNKHj3B3HG8WtUk,410054
54
55
  wolfhece/wolf_hist.py,sha256=7jeVrgSkM3ErJO6SRMH_PGzfLjIdw8vTy87kesldggk,3582
55
56
  wolfhece/wolf_texture.py,sha256=DS5eobLxrq9ljyebYfpMSQPn8shkUAZZVfqrOKN_QUU,16951
56
57
  wolfhece/wolf_tiles.py,sha256=2Ho2I20rHRY81KXxjgLOYISdF4OkJ2d6omeY4shDoGI,10386
57
- wolfhece/wolf_vrt.py,sha256=89XoDhCJMHiwPQUuOduxtTRKuIa8RDxgNqX65S4xp9M,10569
58
+ wolfhece/wolf_vrt.py,sha256=NcPZYW4bu06IpqQuiutoAhCvDkeZ3TzOVb8z4wTQ1h8,14319
58
59
  wolfhece/wolf_zi_db.py,sha256=baE0niMCzybWGSvPJc5FNxo9ZxsGfU4p-FmfiavFHAs,12967
59
- wolfhece/wolfresults_2D.py,sha256=7mWWPnKK1HeupkLpSmxd4W6jmzGMTJJSwyMHAESscTc,180803
60
- wolfhece/xyz_file.py,sha256=Se4nCPwYAYLSA5i0zsbnZUKoAMAD0mK1FJea5WSZUkk,5755
61
- wolfhece/acceptability/Parallels.py,sha256=h4tu3SpC_hR5Hqa68aruxhtAyhs8u666YuZ40_fR5zg,3979
60
+ wolfhece/wolfresults_2D.py,sha256=yssZzi5TN_KSvlqQ8sL5FjMqelfiAVCuPhzLTwWsDQQ,183420
61
+ wolfhece/xyz_file.py,sha256=1pzLFmmdHca4yBVR9Jitic6N82rY28mRytGC1zMbY28,6615
62
+ wolfhece/acceptability/Parallels.py,sha256=njrJFH_tTdQUg2px-QqQR6VdhImP1TEujLhpM3JEKNo,4001
62
63
  wolfhece/acceptability/__init__.py,sha256=hfgoPKLDpX7drN1Vpvux-_5Lfyc_7feT2C2zQr5v-Os,258
63
- wolfhece/acceptability/acceptability.py,sha256=9hKkzHG6_eB_IQz4aT5mfd2E0manvpH5LBScaL_3NzA,24038
64
- wolfhece/acceptability/acceptability_gui.py,sha256=OvJIovypnvWTewESvVxBxskDNNat6kvUiD_UwKSvk4s,12106
65
- wolfhece/acceptability/cli.py,sha256=WVyEtse0vh6PSCBNhT7x6wwdJI9D5iy5H-AkWov-vxs,7386
66
- wolfhece/acceptability/func.py,sha256=XxBDs1Gs61ijxVzP-etYU0YFi2rhpWI3_UJdyZp2imU,57984
64
+ wolfhece/acceptability/_add_path.py,sha256=nudniS-lsgHwXXq5o626XRDzIeYj76GoGKYt6lcu2Nc,616
65
+ wolfhece/acceptability/acceptability.py,sha256=TlpvP7EITcRhtDMtQAe32BD-vWdHURf8r9tIF_PZmnc,26668
66
+ wolfhece/acceptability/acceptability_gui.py,sha256=S4tcCfjKlqWph9mukBVx4kPxcs1T07l4Pj9N_sHPaSc,23887
67
+ wolfhece/acceptability/cli.py,sha256=ul_GmDnSgKSgA7z5ZIzeA_MlS2uqo-Xi48bqmWUS-Qk,19141
68
+ wolfhece/acceptability/func.py,sha256=J7EyZXelpJFrOpamsuw9XxYaMC5koyA3f2tA77l4viI,66553
67
69
  wolfhece/apps/ManageParams.py,sha256=9okXHGHKEayA9iKTnv8jsVYCP2up5kr6hDaKO_fMCaQ,748
68
70
  wolfhece/apps/Optimisation_hydro.py,sha256=ySIaVsFNEx4PaHFLlT2QW9BiwChVcTNd2TBnW1aICsI,810
69
71
  wolfhece/apps/WolfPython.png,sha256=K3dcbeZUiJCFNwOAAlGMaRGLJ56yM8WD2I_0bk0xT1g,104622
@@ -77,7 +79,7 @@ wolfhece/apps/curvedigitizer.py,sha256=Yps4bcayzbsz0AoVc_dkSk35dEhhn_esIBy1Ziefg
77
79
  wolfhece/apps/hydrometry.py,sha256=lhhJsFeb4zGL4bNQTs0co85OQ_6ssL1Oy0OUJCzhfYE,656
78
80
  wolfhece/apps/isocurrent.py,sha256=dagmGR8ja9QQ1gwz_8fU-N052hIw-W0mWGVkzLu6C7I,4247
79
81
  wolfhece/apps/splashscreen.py,sha256=SrustmIQeXnsiD-92OzjdGhBi-S7c_j-cSvuX4T6rtg,2929
80
- wolfhece/apps/version.py,sha256=wOy9EfI2RhpTGw2wYMvqiIf3c4_g2ZhHSnZMHxyyBPo,388
82
+ wolfhece/apps/version.py,sha256=dbPO_X23JyL0yY0CRsgYL2MFlhZ_fYFqTzYKHZORaEw,389
81
83
  wolfhece/apps/wolf.py,sha256=j_CgvsL8rwixbVvVD5Z0s7m7cHZ86gmFLojKGuetMls,729
82
84
  wolfhece/apps/wolf2D.py,sha256=4z_OPQ3IgaLtjexjMKX9ppvqEYyjFLt1hcfFABy3-jU,703
83
85
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -89,9 +91,10 @@ wolfhece/apps/wolfhydro.py,sha256=EsXTtXhnsQV1j-tiFYcyfMrJpjFv1MrWiftwODdi_8I,81
89
91
  wolfhece/bernoulli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
92
  wolfhece/bernoulli/chamber.py,sha256=ZWNjTAmTaH8u8J00n8uEib7dy84mUfHWN43805W_Qsw,2354
91
93
  wolfhece/bernoulli/fluids.py,sha256=-mPv3EtCcIEfvTI7oSELtOjUFiKhKANu8w96NnUnrvU,464
92
- wolfhece/bernoulli/losses.py,sha256=6kXsAspn1Ofqu-kOviMr7dhOplLgishrKOd_cdWgsAc,3656
94
+ wolfhece/bernoulli/losses.py,sha256=dH8iDXkQ4EX990wjz3TnNUAOIbfJ13iF6Qbx-CuXFkA,5277
95
+ wolfhece/bernoulli/losses_jax.py,sha256=Tv1Rem2D--ViyPT7noStXvc9YsZJVkAiSmHwGa7sn9Q,5438
93
96
  wolfhece/bernoulli/network.py,sha256=wSiVpPfcXr-KaOx_ZIsPK1DYxklFGShPvX431-Gpdsg,3339
94
- wolfhece/bernoulli/pipe.py,sha256=f4PPJ_zWwJz2zkuzrUwd3JudO5kFMqVVftD6qpnlFfk,4944
97
+ wolfhece/bernoulli/pipe.py,sha256=_Fq66XC8-BLbZdIjnYf_p7DZdLTS1XPPPGmwif3DdOk,5092
95
98
  wolfhece/blender/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
99
  wolfhece/blender/array2polygons.py,sha256=UxsVHXqEJexaPXSAm_jEylMiJuvk9dd5RI6rvEPzgvg,8857
97
100
  wolfhece/blender/ply.py,sha256=USF3_aaTQNNS90YciQL5LJN3ThKrxtWRyVf21P536F0,853
@@ -216,14 +219,15 @@ wolfhece/mar/Interface_MAR_WOLF_objet.py,sha256=_PNOrZDr-7CR19x_XHqLB5Si2hk8e469
216
219
  wolfhece/mar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
217
220
  wolfhece/mar/commontools.py,sha256=vCmoNI2sMOco6Y4KPpKb7WORq45qFU_lSxbKGV9oZ8A,53824
218
221
  wolfhece/mar/interface_MAR_WOLF.py,sha256=MWeXaHLDT4Eo9jZOAvz013lmpgGYT1v9VUYGAgBgSRU,21454
219
- wolfhece/math_parser/__init__.py,sha256=mrD_uFDDZzvyxQkY8ESqcy1bvM7e3__Gi2b_vijvoo8,27977
220
- wolfhece/math_parser/calculator.py,sha256=VCXCT5zhyMSgkO5O8dwIhRht9NNBqA0h1QPliOD4N28,6046
222
+ wolfhece/math_parser/__init__.py,sha256=Mi7YTrlJtcflyrRdZHHgE-uNPUFfOWmsf8FsOwKBRPI,27961
223
+ wolfhece/math_parser/calculator.py,sha256=NhyxiQkicuJC2LlekXCiDh-CeWC4t7xsfeNXUDoqSng,7392
221
224
  wolfhece/mesh2d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
225
  wolfhece/mesh2d/bc_manager.py,sha256=QTGkb5TR8Y5xVnGUXPXzscGyTEQ6PA8CZPkVNwrlR1Y,53265
223
226
  wolfhece/mesh2d/cell_tracker.py,sha256=mPmnD5lEf3gLPuLqtAIo-Gp-ipAwQdPxzjWOGt0b7jM,8958
224
227
  wolfhece/mesh2d/config_manager.py,sha256=DcdxCIIs_dyC6ayJOBULeY364LONogL9PBaqBtC9eQ4,14736
225
228
  wolfhece/mesh2d/cst_2D_boundary_conditions.py,sha256=Y4DF68uAklF3fXJgf05nb_JvJk2pvzcu_wu5nFXpWJo,5008
226
- wolfhece/mesh2d/wolf2dprev.py,sha256=CvCsutTwLr-BIxzYpzbg3YxIASJtMMtJpuZ77gxCue8,491460
229
+ wolfhece/mesh2d/simple_2d.py,sha256=WbDGScu2PwmhLI-qRv-nEsr7NYc-i1Jgeh-jI0JBKjM,93424
230
+ wolfhece/mesh2d/wolf2dprev.py,sha256=ji34vpE3RUZDyWo0WV-bedofa8J-RY0JCEj2sRyVKZE,491483
227
231
  wolfhece/models/5_coul.pal,sha256=OI1UqcNIDBpJn2k_VDel__r-hKjjvdob0eqinGCI3QY,160
228
232
  wolfhece/models/6_coul.pal,sha256=z7NK2dg0tAQBUweRQV54dIwJbPM1U5y1AR2LLw19Idw,148
229
233
  wolfhece/models/7_coul.pal,sha256=XTnnUyCE8ONokScB2YzYDnSTft7E6sppmr7P-XwMsCE,205
@@ -264,7 +268,7 @@ wolfhece/report/reporting.py,sha256=JUEXovx_S4jpYkJEBU0AC-1Qw2OkkWyV3VAp6iOfSHc,
264
268
  wolfhece/report/wolf_report.png,sha256=NoSV58LSwb-oxCcZScRiJno-kxDwRdm_bK-fiMsKJdA,592485
265
269
  wolfhece/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
266
270
  wolfhece/scenario/check_scenario.py,sha256=VVjtxfcLAgq_Pf8VSqRq6BJ-y4Zi24CntJpZWxAv3n8,5162
267
- wolfhece/scenario/config_manager.py,sha256=nLUcfkStqMlNJDiYXmgDkES04AIdTJEzANbVdzEUXlk,96088
271
+ wolfhece/scenario/config_manager.py,sha256=DjDbioxANiMGyC4keIXovTWywNrXavYRh_nhg0yB0kY,96088
268
272
  wolfhece/scenario/imposebc_void.py,sha256=PqA_99hKcaqK5zsK6IRIc5Exgg3WVpgWU8xpwNL49zQ,5571
269
273
  wolfhece/scenario/update_void.py,sha256=ay8C_FxfXN627Hx46waaAO6F3ovYmOCTxseUumKAY7c,7474
270
274
  wolfhece/shaders/fragment_shader_texture.glsl,sha256=w6h8d5mJqFaGbao0LGmjRcFFdcEQ3ICIl9JpuT71K5k,177
@@ -287,8 +291,8 @@ wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=8PlMYrb_8jI8h9F0_EagpM
287
291
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=ORy7fz4dcp691qKzaOZHrRLZ0uXNhL-LIHxmpDGL6BI,5007
288
292
  wolfhece/wintab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
289
293
  wolfhece/wintab/wintab.py,sha256=8A-JNONV6ujgsgG3lM5Uw-pVgglPATwKs86oBzzljoc,7179
290
- wolfhece-2.1.99.dist-info/METADATA,sha256=Han8pt5GK3ZFy6AxC2GmKM9045RZ4GTnHCJGlh0GcjM,2570
291
- wolfhece-2.1.99.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
292
- wolfhece-2.1.99.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
293
- wolfhece-2.1.99.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
294
- wolfhece-2.1.99.dist-info/RECORD,,
294
+ wolfhece-2.1.100.dist-info/METADATA,sha256=z6WVxL_W6QsldMdki33X3NOKxmsa4MsGdJsLLjb6aJw,2571
295
+ wolfhece-2.1.100.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
296
+ wolfhece-2.1.100.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
297
+ wolfhece-2.1.100.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
298
+ wolfhece-2.1.100.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.5.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5