wolfhece 2.1.126__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.
@@ -472,13 +472,13 @@ class Config_Manager_2D_GPU:
472
472
 
473
473
  logging.info(_('Number of tif files : {}'.format(len(list_tif))))
474
474
 
475
- standard_files = ['bathymetry.tif',
476
- 'manning.tif',
477
- 'infiltration.tif',
478
- 'h.tif',
479
- 'qx.tif',
480
- 'qy.tif',
481
- 'roof.tif',
475
+ standard_files = ['bathymetry.tif',
476
+ 'manning.tif',
477
+ 'infiltration.tif',
478
+ 'h.tif',
479
+ 'qx.tif',
480
+ 'qy.tif',
481
+ 'roof.tif',
482
482
  'deck.tif']
483
483
 
484
484
  log = ''
@@ -1217,7 +1217,7 @@ class Config_Manager_2D_GPU:
1217
1217
  logging.error(_("No 'bathymetry.tif' file found in the root directory !"))
1218
1218
 
1219
1219
 
1220
- def combine_bath_roof_deck(self, bathymetry:WolfArray,
1220
+ def combine_bath_roof_deck(self, bathymetry:WolfArray,
1221
1221
  bridge_roof:WolfArray, bridge_deck:WolfArray,
1222
1222
  threshold:float = .05) -> str:
1223
1223
  """ Verify bathymetry, roof and deck """
@@ -1231,7 +1231,7 @@ class Config_Manager_2D_GPU:
1231
1231
  if ret != '':
1232
1232
  logging.error(ret)
1233
1233
  return ret
1234
-
1234
+
1235
1235
  # si la matrice de toit de pont est plus basse que la bathymétrie, on met à 99999
1236
1236
  # la bathymétrie et le toit de pont.
1237
1237
  # Ainsi, ces maille seront infranchissables.
@@ -1257,7 +1257,7 @@ class Config_Manager_2D_GPU:
1257
1257
  ret += _(' -- Bathymetry values will be set to max(bath, deck)\n')
1258
1258
  ret += _(' -- These cells will remain impassable until the water level rises above them\n')
1259
1259
  bridge_roof.array.data[mask] = 99999.
1260
- bathymetry.array.data[mask] = np.maximum(bridge_deck.array.data[mask], bathymetry.array.data[mask])
1260
+ bathymetry.array.data[mask] = np.maximum(bridge_deck.array.data[mask], bathymetry.array.data[mask])
1261
1261
 
1262
1262
  mask = np.where(bridge_roof.array.data - bathymetry.array.data < threshold)
1263
1263
  if mask[0].shape[0] > 0:
@@ -1273,7 +1273,7 @@ class Config_Manager_2D_GPU:
1273
1273
  logging.warning(ret)
1274
1274
 
1275
1275
  return ret
1276
-
1276
+
1277
1277
  def create_simulation(self,
1278
1278
  dir:Path,
1279
1279
  idx_hydros:list[int] = [-1],
@@ -1576,7 +1576,7 @@ class Config_Manager_2D_GPU:
1576
1576
  for cursim in allsims:
1577
1577
  cursim:Path
1578
1578
  batch += 'cd {}\n'.format(str(cursim.parent))
1579
- batch += str(cursim.name) + '\n'
1579
+ batch += 'call ' + str(cursim.name) + '\n'
1580
1580
 
1581
1581
  with open(path, 'w', encoding='utf-8') as f:
1582
1582
  f.write(batch)
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. '''
@@ -5122,7 +5130,7 @@ class WolfArray(Element_To_Draw, header_wolf):
5122
5130
  :param fname: filename/filepath - if provided, the file will be read on disk
5123
5131
  :param mold: initialize from a copy a the mold object --> must be a WolArray if not None
5124
5132
  :param masknull: mask data based on the nullvalue
5125
- :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]]
5126
5134
  :param whichtype: type of the numpy array (float32 as default)
5127
5135
  :param preload: True = load data during initialization ; False = waits for the display to be required
5128
5136
  :param create: True = create a new array from wxDialog
@@ -6073,12 +6081,16 @@ class WolfArray(Element_To_Draw, header_wolf):
6073
6081
 
6074
6082
  fn_crop = fn + '_crop.tif'
6075
6083
  if type(crop) is np.ndarray:
6076
- 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]]]
6077
6087
  elif type(crop) is list:
6078
- 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]]]
6079
6091
  else:
6080
6092
  if not self.wx_exists:
6081
- 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'))
6082
6094
  return
6083
6095
 
6084
6096
  raster_in:gdal.Dataset
@@ -6141,8 +6153,8 @@ class WolfArray(Element_To_Draw, header_wolf):
6141
6153
  newcrop.Destroy()
6142
6154
  return
6143
6155
  else:
6144
- crop = [float(newcrop.ox.Value), float(newcrop.ex.Value),
6145
- 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)]]
6146
6158
 
6147
6159
  tmpdx = float(newcrop.dx.Value)
6148
6160
  tmpdy = float(newcrop.dy.Value)
@@ -6153,7 +6165,7 @@ class WolfArray(Element_To_Draw, header_wolf):
6153
6165
 
6154
6166
  newcrop.Destroy()
6155
6167
 
6156
- xmin, xmax, ymin, ymax = crop
6168
+ [xmin, xmax], [ymin, ymax] = crop
6157
6169
 
6158
6170
  gdal.Translate(tmpfile, fn, projWin=[xmin, ymax, xmax, ymin])
6159
6171
  else:
@@ -9847,6 +9859,206 @@ class WolfArray(Element_To_Draw, header_wolf):
9847
9859
 
9848
9860
  return zones
9849
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
+
9850
10062
  class WolfArrayMB(WolfArray):
9851
10063
  """
9852
10064
  Matrice multiblocks
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: wolfhece
3
- Version: 2.1.126
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=CkNGIgPd5gSokggiJabVME1XzYDVDbBFuyMT_iJB9p0,568998
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=WeScyyq1USIOcMt2ew35QbJzk6ZDRXQRrGvwyPu3Tx8,441902
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=UIqgv5JPHoD2r7Ney7Go6P3kWMdWMylqgNdriVFXJKo,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=vq3IrGNnGPuBzIe4fg4mxjhWdGiBHu95Smvst5sdUmE,80822
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
@@ -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.126.dist-info/METADATA,sha256=hmEqfYiCm4H8SOEmJe1qoJbjBXFa1FTHc4xHjG7i9C8,2587
303
- wolfhece-2.1.126.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
304
- wolfhece-2.1.126.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
305
- wolfhece-2.1.126.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
306
- wolfhece-2.1.126.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,,