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/PyConfig.py +77 -4
- wolfhece/PyDraw.py +717 -11
- wolfhece/PyVertexvectors.py +33 -1
- wolfhece/apps/version.py +1 -1
- wolfhece/eikonal.py +495 -0
- wolfhece/lazviewer/laz_viewer.py +133 -23
- wolfhece/math_parser/calculator.py +1 -1
- wolfhece/scenario/config_manager.py +12 -12
- wolfhece/wolf_array.py +274 -8
- {wolfhece-2.1.125.dist-info → wolfhece-2.1.127.dist-info}/METADATA +1 -1
- {wolfhece-2.1.125.dist-info → wolfhece-2.1.127.dist-info}/RECORD +14 -13
- {wolfhece-2.1.125.dist-info → wolfhece-2.1.127.dist-info}/WHEEL +0 -0
- {wolfhece-2.1.125.dist-info → wolfhece-2.1.127.dist-info}/entry_points.txt +0 -0
- {wolfhece-2.1.125.dist-info → wolfhece-2.1.127.dist-info}/top_level.txt +0 -0
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
|
-
|
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
|
-
|
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(_('
|
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
|
@@ -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=
|
8
|
+
wolfhece/PyConfig.py,sha256=Y0wtSIFpAMYa7IByh7hbW-WEOVjNsQEduq7vhIYdZQw,16716
|
9
9
|
wolfhece/PyCrosssections.py,sha256=igU_ELrg5VrHU6RNbF5tHxPyVImpR3xdpfopJYc7haw,114711
|
10
|
-
wolfhece/PyDraw.py,sha256=
|
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
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
303
|
-
wolfhece-2.1.
|
304
|
-
wolfhece-2.1.
|
305
|
-
wolfhece-2.1.
|
306
|
-
wolfhece-2.1.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|