wolfhece 2.1.125__py3-none-any.whl → 2.1.127__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_array.py CHANGED
@@ -1576,6 +1576,14 @@ class CropDialog(wx.Dialog):
1576
1576
  self.ex.SetValue(str(header.origx + header.nbx * header.dx))
1577
1577
  self.ey.SetValue(str(header.origy + header.nby * header.dy))
1578
1578
 
1579
+ def get_crop(self):
1580
+ """ Return the crop values """
1581
+ try:
1582
+ return [[float(self.ox.Value), float(self.oy.Value)], [float(self.ex.Value), float(self.ey.Value)]]
1583
+ except:
1584
+ logging.error(_('Values must be numbers'))
1585
+ return None
1586
+
1579
1587
  import string
1580
1588
  class IntValidator(wx.Validator):
1581
1589
  ''' Validates data as it is entered into the text controls. '''
@@ -1912,6 +1920,8 @@ class Ops_Array(wx.Frame):
1912
1920
 
1913
1921
  self.labelling = wx.Button(self.tools, wx.ID_ANY, _("Labelling"), wx.DefaultPosition,wx.DefaultSize, 0)
1914
1922
 
1923
+ self.clean = wx.Button(self.tools, wx.ID_ANY, _("Clean"), wx.DefaultPosition,wx.DefaultSize, 0)
1924
+
1915
1925
  self.extract_selection = wx.Button(self.tools, wx.ID_ANY, _("Extract selection"), wx.DefaultPosition,wx.DefaultSize, 0)
1916
1926
 
1917
1927
  cont_sizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -1926,6 +1936,7 @@ class Ops_Array(wx.Frame):
1926
1936
  Toolssizer.Add(self.nullborder, 1, wx.EXPAND)
1927
1937
  Toolssizer.Add(self.filter_zone, 1, wx.EXPAND)
1928
1938
  Toolssizer.Add(self.labelling, 1, wx.EXPAND)
1939
+ Toolssizer.Add(self.clean, 1, wx.EXPAND)
1929
1940
  Toolssizer.Add(self.extract_selection, 1, wx.EXPAND)
1930
1941
  Toolssizer.Add(cont_sizer, 1, wx.EXPAND)
1931
1942
 
@@ -1933,6 +1944,7 @@ class Ops_Array(wx.Frame):
1933
1944
  self.nullborder.SetToolTip(_("Set null value on the border of the array\n\nYou will be asked for the width of the border (in cells)"))
1934
1945
  self.filter_zone.SetToolTip(_("Filter the array based on contiguous zones\n\nConservation of the ones which contain selected nodes"))
1935
1946
  self.labelling.SetToolTip(_("Labelling of contiguous zones using Scipy.label function\n\nReplacing the current values by the labels"))
1947
+ self.clean.SetToolTip(_("Clean the array\n\nRemove small isolated patches of data"))
1936
1948
  self.extract_selection.SetToolTip(_("Extract the current selection"))
1937
1949
 
1938
1950
  self.tools.SetSizer(Toolssizer)
@@ -2304,6 +2316,7 @@ class Ops_Array(wx.Frame):
2304
2316
  self.ApplyTools.Bind(wx.EVT_BUTTON, self.OnApplyNullvalue)
2305
2317
  self.nullborder.Bind(wx.EVT_BUTTON, self.OnNullBorder)
2306
2318
  self.filter_zone.Bind(wx.EVT_BUTTON, self.OnFilterZone)
2319
+ self.clean.Bind(wx.EVT_BUTTON, self.OnClean)
2307
2320
  self.labelling.Bind(wx.EVT_BUTTON, self.OnLabelling)
2308
2321
  self.extract_selection.Bind(wx.EVT_BUTTON, self.OnExtractSelection)
2309
2322
  self._contour_int.Bind(wx.EVT_BUTTON, self.OnContourInt)
@@ -2743,7 +2756,6 @@ class Ops_Array(wx.Frame):
2743
2756
  def OnFilterZone(self, event:wx.MouseEvent):
2744
2757
  """ Filter the array based on contiguous zones """
2745
2758
 
2746
- pass
2747
2759
  self.parentarray.filter_zone()
2748
2760
 
2749
2761
  dlg = wx.MessageDialog(None, _('Do you want to set null value in the masked data ?'), _('Masked data'), wx.YES_NO | wx.ICON_QUESTION)
@@ -2754,6 +2766,27 @@ class Ops_Array(wx.Frame):
2754
2766
 
2755
2767
  dlg.Destroy()
2756
2768
 
2769
+ def OnClean(self, event:wx.MouseEvent):
2770
+ """ Clean the array -- Remove the isolated cells """
2771
+
2772
+ dlg = wx.NumberEntryDialog(None, 'Minimum number of nodes for a patch to be kept', 'Minimum number of nodes', 'Minimum number of nodes', 10, 1, 1000)
2773
+ if dlg.ShowModal() != wx.ID_OK:
2774
+ dlg.Destroy()
2775
+ return
2776
+
2777
+ minnodes = dlg.GetValue()
2778
+ self.parentarray.clean_small_patches(minnodes)
2779
+
2780
+ dlg.Destroy()
2781
+
2782
+ dlg = wx.MessageDialog(None, _('Do you want to set null value in the masked data ?'), _('Masked data'), wx.YES_NO | wx.ICON_QUESTION)
2783
+ ret = dlg.ShowModal()
2784
+
2785
+ if ret == wx.ID_YES:
2786
+ self.parentarray.set_nullvalue_in_mask()
2787
+
2788
+ dlg.Destroy()
2789
+
2757
2790
  def OnLabelling(self, event:wx.MouseEvent):
2758
2791
  """ Labelling of contiguous zones """
2759
2792
 
@@ -5097,7 +5130,7 @@ class WolfArray(Element_To_Draw, header_wolf):
5097
5130
  :param fname: filename/filepath - if provided, the file will be read on disk
5098
5131
  :param mold: initialize from a copy a the mold object --> must be a WolArray if not None
5099
5132
  :param masknull: mask data based on the nullvalue
5100
- :param crop: crop data based on the spatial extent [[xmin, xmax],[ymin,ymax]]
5133
+ :param crop: crop data based on the spatial extent [[xmin, xmax], [ymin,ymax]]
5101
5134
  :param whichtype: type of the numpy array (float32 as default)
5102
5135
  :param preload: True = load data during initialization ; False = waits for the display to be required
5103
5136
  :param create: True = create a new array from wxDialog
@@ -5814,6 +5847,35 @@ class WolfArray(Element_To_Draw, header_wolf):
5814
5847
  if reset_plot:
5815
5848
  self.reset_plot()
5816
5849
 
5850
+ def clean_small_patches(self, min_size:int = 1, set_null:bool = False, reset_plot:bool = True):
5851
+ """ Clean small patches in the array """
5852
+
5853
+ if min_size < 1:
5854
+ logging.error(_('Minimum size must be greater than 1'))
5855
+ return
5856
+
5857
+ # labellisation
5858
+ labeled_array = self.array.data.copy()
5859
+ labeled_array[np.where(self.array.mask)] = 0
5860
+
5861
+ labeled_array, num_features = label(labeled_array,)
5862
+
5863
+ # count the number of elements in each patch
5864
+ patch_size = np.bincount(labeled_array.ravel())
5865
+
5866
+ # mask the small patches
5867
+ mask_small_patches = patch_size < min_size
5868
+ labeled_array[mask_small_patches[labeled_array]] = 0
5869
+
5870
+ # mask data in the array based on the labeled array
5871
+ self.array.mask[labeled_array == 0] = True
5872
+
5873
+ if set_null:
5874
+ self.set_nullvalue_in_mask()
5875
+
5876
+ if reset_plot:
5877
+ self.reset_plot()
5878
+
5817
5879
  def labelling(self, reset_plot:bool = True):
5818
5880
  """
5819
5881
  Labelling of the array using Scipy
@@ -6019,12 +6081,16 @@ class WolfArray(Element_To_Draw, header_wolf):
6019
6081
 
6020
6082
  fn_crop = fn + '_crop.tif'
6021
6083
  if type(crop) is np.ndarray:
6022
- pass
6084
+ if crop.shape == (4,):
6085
+ logging.error(_('Crop must be a list or a numpy array with 4 values - [[xmin, xmax], [ymin, ymax]]'))
6086
+ crop = [[crop[0], crop[1]], [crop[2], crop[3]]]
6023
6087
  elif type(crop) is list:
6024
- pass
6088
+ if len(crop) == 4:
6089
+ logging.error(_('Crop must be a list or a numpy array with 4 values - [[xmin, xmax], [ymin, ymax]]'))
6090
+ crop = [[crop[0], crop[1]], [crop[2], crop[3]]]
6025
6091
  else:
6026
6092
  if not self.wx_exists:
6027
- logging.error(_('Crop must be a list or a numpy array with 4 values - xmin, xmax, ymin, ymax'))
6093
+ logging.error(_('WX App is required to display the UI'))
6028
6094
  return
6029
6095
 
6030
6096
  raster_in:gdal.Dataset
@@ -6087,8 +6153,8 @@ class WolfArray(Element_To_Draw, header_wolf):
6087
6153
  newcrop.Destroy()
6088
6154
  return
6089
6155
  else:
6090
- crop = [float(newcrop.ox.Value), float(newcrop.ex.Value),
6091
- float(newcrop.oy.Value), float(newcrop.ey.Value)]
6156
+ crop = [[float(newcrop.ox.Value), float(newcrop.ex.Value)],
6157
+ [float(newcrop.oy.Value), float(newcrop.ey.Value)]]
6092
6158
 
6093
6159
  tmpdx = float(newcrop.dx.Value)
6094
6160
  tmpdy = float(newcrop.dy.Value)
@@ -6099,7 +6165,7 @@ class WolfArray(Element_To_Draw, header_wolf):
6099
6165
 
6100
6166
  newcrop.Destroy()
6101
6167
 
6102
- xmin, xmax, ymin, ymax = crop
6168
+ [xmin, xmax], [ymin, ymax] = crop
6103
6169
 
6104
6170
  gdal.Translate(tmpfile, fn, projWin=[xmin, ymax, xmax, ymin])
6105
6171
  else:
@@ -9793,6 +9859,206 @@ class WolfArray(Element_To_Draw, header_wolf):
9793
9859
 
9794
9860
  return zones
9795
9861
 
9862
+ def inpaint(self, mask_array:"WolfArray" = None, test_array:"WolfArray" = None, ignore_last:int = 1):
9863
+ """ InPaintaing holes in the array
9864
+
9865
+ :param mask_array: where computation is done
9866
+ :param test_array: used in test -- interpolation is accepted if new value is over test_array
9867
+ :param ignore_last: number of last patches to ignore
9868
+
9869
+ """
9870
+
9871
+ from .eikonal import inpaint_array
9872
+
9873
+ if mask_array is None:
9874
+ mask_array = self.array.mask
9875
+ elif isinstance(mask_array, WolfArray):
9876
+ mask_array = mask_array.array.data
9877
+
9878
+ if test_array is None:
9879
+ test_array = np.ones(self.array.data.shape) * self.array.data.min()
9880
+ elif isinstance(test_array, WolfArray):
9881
+ test_array = test_array.array.data
9882
+
9883
+ time, wl_np, wd_np = inpaint_array(self.array.data,
9884
+ mask_array,
9885
+ test_array,
9886
+ ignore_last_patches= ignore_last,
9887
+ dx = self.dx,
9888
+ dy = self.dy,
9889
+ NoDataValue = self.nullvalue,
9890
+ inplace=True,
9891
+ multiprocess= True)
9892
+
9893
+ wd = WolfArray(mold=self)
9894
+ wd.array[:,:] = wd_np[:,:]
9895
+ wd.mask_data(self.nullvalue)
9896
+
9897
+ wl = self
9898
+
9899
+ self.mask_data(self.nullvalue)
9900
+ self.reset_plot()
9901
+ return time, wl, wd
9902
+
9903
+ def _inpaint_waterlevel_dem_dtm(self, dem:"WolfArray", dtm:"WolfArray", ignore_last:int = 1, use_fortran:bool = False):
9904
+ """ InPaintaing waterlevel holes in the array.
9905
+
9906
+ We use DEM and DTM to mask and constraint the inpainting process.
9907
+
9908
+ :param dem: Digital Elevation Model (same as simulation model)
9909
+ :param dtm: Digital Terrain Model
9910
+ :param ignore_last: number of last patches to ignore
9911
+ :param use_fortran: use Fortran inpainting code
9912
+ """
9913
+
9914
+ if use_fortran:
9915
+ import shutil
9916
+ from tempfile import TemporaryDirectory
9917
+ # check if hoels.exe is available in PATH
9918
+ if shutil.which('holes.exe') is None:
9919
+ logging.error(_('holes.exe not found in PATH'))
9920
+ logging.info(_('We use the Python version of inpainting'))
9921
+ use_fortran = False
9922
+
9923
+ else:
9924
+ with TemporaryDirectory() as tmpdirname:
9925
+ # create mask from DEM, DTM and WL
9926
+
9927
+ mask = self._create_building_holes_dem_dtm(dem, dtm, ignore_last)
9928
+
9929
+ # save mask and dtm to temporary files
9930
+ locdir = Path(tmpdirname)
9931
+ wl_name = locdir / 'array.bin'
9932
+ mask_name = locdir / 'mask.bin'
9933
+ dtm_name = locdir / 'dtm.bin'
9934
+
9935
+ mask.write_all(mask_name)
9936
+ dtm.write_all(dtm_name)
9937
+
9938
+ oldname = self.filename
9939
+ self.write_all(wl_name)
9940
+ self.filename = oldname
9941
+
9942
+ # call holes.exe
9943
+ olddir = os.getcwd()
9944
+
9945
+ # change to temporary directory
9946
+ os.chdir(locdir)
9947
+ shell_command = f'holes.exe inpaint in={wl_name} mask={mask_name} dem={dtm_name} avoid_last={ignore_last} out=temp'
9948
+ logging.info(shell_command)
9949
+ logging.info('Inpainting holes using holes.exe')
9950
+ os.system(shell_command)
9951
+ logging.info('Done - reading inpainted array')
9952
+
9953
+ # read inpainted array
9954
+ wl = WolfArray(locdir / 'temp_combl.tif')
9955
+ wd = WolfArray(locdir / 'temp_h.tif')
9956
+
9957
+ wd.array[wd.array < 0.] = 0.
9958
+ wd.mask_data(0.)
9959
+
9960
+ os.chdir(olddir)
9961
+
9962
+ self.array.data[:,:] = wl.array.data[:,:]
9963
+
9964
+ time = None
9965
+
9966
+ if not use_fortran:
9967
+
9968
+ from .eikonal import inpaint_waterlevel
9969
+
9970
+ time, wl_np, wd_np = inpaint_waterlevel(self.array.data,
9971
+ dem.array.data,
9972
+ dtm.array.data,
9973
+ ignore_last_patches= ignore_last,
9974
+ dx = self.dx,
9975
+ dy = self.dy,
9976
+ NoDataValue = self.nullvalue,
9977
+ inplace=True,
9978
+ multiprocess= True)
9979
+
9980
+ wd = WolfArray(mold=self)
9981
+ wd.array[:,:] = wd_np[:,:]
9982
+ wd.mask_data(self.nullvalue)
9983
+
9984
+ wl = self
9985
+
9986
+ self.mask_data(self.nullvalue)
9987
+ self.reset_plot()
9988
+ return time, wl, wd
9989
+
9990
+ def count_holes(self, mask:"WolfArray" = None):
9991
+ """ Count holes in the array """
9992
+ from .eikonal import count_holes
9993
+
9994
+ if mask is None:
9995
+ mask = self.array.mask
9996
+ elif isinstance(mask, WolfArray):
9997
+ mask = mask.array.data
9998
+
9999
+ return count_holes(mask)
10000
+
10001
+ def select_holes(self, mask:"WolfArray" = None, ignore_last:int = 1):
10002
+ """ Select holes in the array """
10003
+
10004
+ if mask is None:
10005
+ mask = self.array.mask
10006
+ elif isinstance(mask, WolfArray):
10007
+ mask = mask.array.data
10008
+
10009
+ labels, numfeatures = label(mask)
10010
+
10011
+ # count cells in holes
10012
+ nb_cells = np.bincount(labels.ravel())
10013
+
10014
+ # sort by number of cells
10015
+ idx = np.argsort(nb_cells)
10016
+
10017
+ for i in range(ignore_last):
10018
+ labels[labels == idx[-1-i]] = 0
10019
+
10020
+ # select holes but ignoring last ones
10021
+ ij = np.argwhere(labels)
10022
+
10023
+ # Convert i,j to x,y
10024
+
10025
+ xy = self.ij2xy_np(ij)
10026
+
10027
+ self.SelectionData.myselection = list(xy)
10028
+ self.SelectionData.update_nb_nodes_selection()
10029
+
10030
+ def create_mask_holes(self, ignore_last:int = 1) -> "WolfArray":
10031
+ """ Select holes in the array and create a new aray """
10032
+
10033
+ labels, numfeatures = label(self.array.mask)
10034
+
10035
+ # count cells in holes
10036
+ nb_cells = np.bincount(labels.ravel())
10037
+
10038
+ # sort by number of cells
10039
+ idx = np.argsort(nb_cells)
10040
+
10041
+ for i in range(ignore_last):
10042
+ labels[labels == idx[-1-i]] = 0
10043
+
10044
+ newarray = WolfArray(mold=self)
10045
+ # newarray.allocate_ressources()
10046
+ newarray.array.data[:,:] = labels
10047
+ newarray.array.mask[:,:] = ~labels.astype(bool)
10048
+ newarray.set_nullvalue_in_mask()
10049
+
10050
+ return newarray
10051
+
10052
+ def _create_building_holes_dem_dtm(self, dem:"WolfArray", dtm:"WolfArray", ignore_last:int = 1) -> "WolfArray":
10053
+ """ Select holes in the array and create a new aray """
10054
+
10055
+ buildings = dem - dtm
10056
+ buildings.array[buildings.array < 0.] = 0.
10057
+ buildings.array[buildings.array > 0.] = dtm.array[buildings.array > 0.]
10058
+ buildings.array[buildings.array == 0.] = dem.array.max() + 1.
10059
+
10060
+ return buildings
10061
+
9796
10062
  class WolfArrayMB(WolfArray):
9797
10063
  """
9798
10064
  Matrice multiblocks
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: wolfhece
3
- Version: 2.1.125
3
+ Version: 2.1.127
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
@@ -5,9 +5,9 @@ wolfhece/GraphProfile.py,sha256=OCgJo0YFFBI6H1z-5egJsOOoWF_iziiza0-bbPejNMc,6965
5
5
  wolfhece/Lidar2002.py,sha256=bX-nIzdpjD7rOfEgJpTeaW6rIdAXwDp_z4YTM9CgANY,6068
6
6
  wolfhece/ManageParams.py,sha256=EeuUI5Vvh9ixCvYf8YShMC1s1Yacc7OxOCN7q81gqiQ,517
7
7
  wolfhece/Model1D.py,sha256=SI4oNF_J3MdjiWZoizS8kuRXLMVyymX9dYfYJNVCQVI,476989
8
- wolfhece/PyConfig.py,sha256=gyl1MesSJZaVpC1XtvD78PpnE1VD3hGM3HPQXTJ3eJg,12963
8
+ wolfhece/PyConfig.py,sha256=Y0wtSIFpAMYa7IByh7hbW-WEOVjNsQEduq7vhIYdZQw,16716
9
9
  wolfhece/PyCrosssections.py,sha256=igU_ELrg5VrHU6RNbF5tHxPyVImpR3xdpfopJYc7haw,114711
10
- wolfhece/PyDraw.py,sha256=Pe9HJ8prakgeTbKZ1ESbXQ6qYCO7FeVzCeFfRFyFNJo,568879
10
+ wolfhece/PyDraw.py,sha256=hh_iBS9lNtJrNNwrLcL7mgFIvfzVFEt2XP7ekaFNU04,597283
11
11
  wolfhece/PyGui.py,sha256=5ANCUmsBwsx_h-GWqV9xwnSQyGJ16mSObOm-h3_7LIQ,144708
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=u_yGvrUqgLLkytZ7lGCIFi-7rQC0H2vRDw-MtmdvKPQ,99394
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=qFf8UPvkbwumRRfjpBcgZmqpHtcEtIEoUh30rWFF-lQ,45205
19
- wolfhece/PyVertexvectors.py,sha256=ZSaz6s9H4MmiTHiaZob9yDytgaObU7aoS53oNz5uNTg,305643
19
+ wolfhece/PyVertexvectors.py,sha256=-12nKF7OZxMbwzilr0thhZiCsq0xjgn2MfkVe2gXq0M,307022
20
20
  wolfhece/PyWMS.py,sha256=WmOzHP02wVcB5RGJAlENL_NzF9rYfvLxslRFyxaEt1Q,6615
21
21
  wolfhece/RatingCurve.py,sha256=bUjIrQjvIjkD4V-z8bZmA6pe1ILtYNM0-3fT6YUY1RU,22498
22
22
  wolfhece/RatingCurveData.py,sha256=5UvnIm89BwqjnEbLCcY3CA8WoFd_xHJbooNy62fX5iY,57660
@@ -29,6 +29,7 @@ wolfhece/analyze_vect.py,sha256=3lkMwaQ4KRddBVRvlP9PcM66wZwwC0eCmypP91AW-os,6015
29
29
  wolfhece/cli.py,sha256=U8D7e_OezfrRfgMsa4TyQ7rI4voLKSY3RK-c8fb6rrw,3156
30
30
  wolfhece/color_constants.py,sha256=Snc5RX11Ydi756EkBp_83C7DiAQ_Z1aHD9jFIBsosAU,37121
31
31
  wolfhece/drawing_obj.py,sha256=7vY04B6r08nurTTFmBXHyR5tVIF1YzAEw_uz4pqTDIw,4233
32
+ wolfhece/eikonal.py,sha256=5UuCtzcLb3oIhBzuTYxQ6z2qo8iL8xMG1m2J-r-PukI,22891
32
33
  wolfhece/flow_SPWMI.py,sha256=XDAelwAY-3rYOR0WKW3fgYJ_r8DU4IP6Y5xULW421tk,20956
33
34
  wolfhece/friction_law.py,sha256=MtZJLo-pTj3-Fw-w12z1LSgSIDrH-JGR0iD9wer_fpQ,5498
34
35
  wolfhece/gpuview.py,sha256=Jql8pLZ0PpvZ_ScT-U4jsXANZ9j4-m_RWhsLA2HISuQ,24544
@@ -52,7 +53,7 @@ wolfhece/pywalous.py,sha256=mWB7UxlYMIbPxNUDlONQEjcOOy9VSaRU9aYWZ5IFLu8,19164
52
53
  wolfhece/rain_SPWMI.py,sha256=qCfcmF7LajloOaCwnTrrSMzyME03YyilmRUOqrPrv3U,13846
53
54
  wolfhece/textpillow.py,sha256=map7HsGYML_o5NHRdFg2s_TVQed_lDnpYNDv27MM0Vw,14130
54
55
  wolfhece/tools_mpl.py,sha256=gQ3Jg1iuZiecmMqa5Eli2ZLSkttu68VXL8YmMDBaEYU,564
55
- wolfhece/wolf_array.py,sha256=gmuF101KybiAu-FG40AlW69LY3pPUJsk8XYA2fPLV5U,439885
56
+ wolfhece/wolf_array.py,sha256=_Bim7x1c9kg9MBVuabCCYfq2azduJ3DNeYt5iaJRnGQ,449995
56
57
  wolfhece/wolf_hist.py,sha256=7jeVrgSkM3ErJO6SRMH_PGzfLjIdw8vTy87kesldggk,3582
57
58
  wolfhece/wolf_texture.py,sha256=ecoXXmmcLuyG1oPqU2dB_k03qMTCLTVQoSq1xi1EalU,17359
58
59
  wolfhece/wolf_tiles.py,sha256=v-HohqaWuMYdn75XLnA22dlloAG90iwnIqrgnB0ASQ4,10488
@@ -80,7 +81,7 @@ wolfhece/apps/curvedigitizer.py,sha256=lEJJwgAfulrrWQc-U6ij6sj59hWN3SZl4Yu1kQxVz
80
81
  wolfhece/apps/hydrometry.py,sha256=lhhJsFeb4zGL4bNQTs0co85OQ_6ssL1Oy0OUJCzhfYE,656
81
82
  wolfhece/apps/isocurrent.py,sha256=dagmGR8ja9QQ1gwz_8fU-N052hIw-W0mWGVkzLu6C7I,4247
82
83
  wolfhece/apps/splashscreen.py,sha256=SrustmIQeXnsiD-92OzjdGhBi-S7c_j-cSvuX4T6rtg,2929
83
- wolfhece/apps/version.py,sha256=AY3qhP7RQqVUbOl7Gl9Au7LHdhP91U01IYylqr2uTc8,389
84
+ wolfhece/apps/version.py,sha256=TteRO85B5WMJKYbXiSKkK2SnPGY1celHFBzcAcXnb-A,389
84
85
  wolfhece/apps/wolf.py,sha256=j_CgvsL8rwixbVvVD5Z0s7m7cHZ86gmFLojKGuetMls,729
85
86
  wolfhece/apps/wolf2D.py,sha256=4z_OPQ3IgaLtjexjMKX9ppvqEYyjFLt1hcfFABy3-jU,703
86
87
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -154,7 +155,7 @@ wolfhece/lagrangian/particles.py,sha256=S52_-3rzgVhift6l4Gznvsf_RTggzvNaD1dPvQUr
154
155
  wolfhece/lagrangian/velocity_field.py,sha256=oGVjNm98gEpawreFIrC1lDyC5bEhkk2CsyYAlF1Kq50,10574
155
156
  wolfhece/lazviewer/__init__.py,sha256=lz60EpQOBZ-zjvYzff6Y11jzAmC7mjOaxRYAfoqizQs,473
156
157
  wolfhece/lazviewer/_add_path.py,sha256=XgMEXRhFhx9-B1hUsP7Zr199zNljYwT5dGMYSB9jRa4,639
157
- wolfhece/lazviewer/laz_viewer.py,sha256=QZbQLX0Kz0VdqGvdpCwA6-9_Q1kGi0DJ4u9ygA9luEY,77339
158
+ wolfhece/lazviewer/laz_viewer.py,sha256=IZpNW-rvzn6__YOvhPCJmObQEJsOqgDobUwrX82lmlk,81614
158
159
  wolfhece/lazviewer/libs/Qt5Core.dll,sha256=sTJ_ctYFY9KHMNytF-lzH_078zIvnKTjN-71FDkOWPw,4924928
159
160
  wolfhece/lazviewer/libs/Qt5Gui.dll,sha256=07BeaOeYByraGkKYeDiSDYLawHM8tyd55pVJlKbZ4Y0,5436416
160
161
  wolfhece/lazviewer/libs/Qt5Network.dll,sha256=U-9FiLE9LUKru8r8EQxTnwwlMpwS8JzUtenhkKTCox0,1038336
@@ -223,7 +224,7 @@ wolfhece/mar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
224
  wolfhece/mar/commontools.py,sha256=SiSxpv5BFYEBCEydsE4ZmBuot3KTy0UYMx2aa-4fbuQ,52549
224
225
  wolfhece/mar/interface_MAR_WOLF.py,sha256=MWeXaHLDT4Eo9jZOAvz013lmpgGYT1v9VUYGAgBgSRU,21454
225
226
  wolfhece/math_parser/__init__.py,sha256=Mi7YTrlJtcflyrRdZHHgE-uNPUFfOWmsf8FsOwKBRPI,27961
226
- wolfhece/math_parser/calculator.py,sha256=DgRJ5OgEK11Tb24zGvYZXiT3PpCTaXX_0IXxrZkyNIg,7449
227
+ wolfhece/math_parser/calculator.py,sha256=e9KVemvVqYofWYEwu_wgMhu4EhmcL6dY790DOwDdxTs,7448
227
228
  wolfhece/mesh2d/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
228
229
  wolfhece/mesh2d/bc_manager.py,sha256=fKED0RhUjCmd0xd0lcOeZqiga5Glqs1ag1boYhXlq0k,54232
229
230
  wolfhece/mesh2d/cell_tracker.py,sha256=mPmnD5lEf3gLPuLqtAIo-Gp-ipAwQdPxzjWOGt0b7jM,8958
@@ -272,7 +273,7 @@ wolfhece/report/reporting.py,sha256=JUEXovx_S4jpYkJEBU0AC-1Qw2OkkWyV3VAp6iOfSHc,
272
273
  wolfhece/report/wolf_report.png,sha256=NoSV58LSwb-oxCcZScRiJno-kxDwRdm_bK-fiMsKJdA,592485
273
274
  wolfhece/scenario/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
274
275
  wolfhece/scenario/check_scenario.py,sha256=d-LWa_FxmPxTSc_H1lDHwqLB6TCqj1IUrRJhatfPMMA,5623
275
- wolfhece/scenario/config_manager.py,sha256=HlMjAbyK9im0UrvVQIxc_MS7bakqO4OSV1c7JZrL5uk,113847
276
+ wolfhece/scenario/config_manager.py,sha256=uJvMry-ApxSDnrlDANkF_8a67VH5tOCbRIQQCtPu9SI,113836
276
277
  wolfhece/scenario/imposebc_void.py,sha256=PqA_99hKcaqK5zsK6IRIc5Exgg3WVpgWU8xpwNL49zQ,5571
277
278
  wolfhece/scenario/update_void.py,sha256=Yb7TMIUx9Gzm9_6qRMJnF39Uqi17dIkMmscSXo2WaTs,10033
278
279
  wolfhece/shaders/fragment_shader_texture.glsl,sha256=w6h8d5mJqFaGbao0LGmjRcFFdcEQ3ICIl9JpuT71K5k,177
@@ -299,8 +300,8 @@ wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=8PlMYrb_8jI8h9F0_EagpM
299
300
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=ORy7fz4dcp691qKzaOZHrRLZ0uXNhL-LIHxmpDGL6BI,5007
300
301
  wolfhece/wintab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
301
302
  wolfhece/wintab/wintab.py,sha256=8A-JNONV6ujgsgG3lM5Uw-pVgglPATwKs86oBzzljoc,7179
302
- wolfhece-2.1.125.dist-info/METADATA,sha256=gil4SetxFBa_q0FQMurYbdGGZc93DtijADnN4Uw0WPU,2587
303
- wolfhece-2.1.125.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
304
- wolfhece-2.1.125.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
305
- wolfhece-2.1.125.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
306
- wolfhece-2.1.125.dist-info/RECORD,,
303
+ wolfhece-2.1.127.dist-info/METADATA,sha256=-Jot_0JOTpm62mVxzR7ly0uucGGknPoR5CfbEF1DfOQ,2587
304
+ wolfhece-2.1.127.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
305
+ wolfhece-2.1.127.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
306
+ wolfhece-2.1.127.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
307
+ wolfhece-2.1.127.dist-info/RECORD,,