wolfhece 2.1.90__py3-none-any.whl → 2.1.92__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/PyDraw.py CHANGED
@@ -7441,6 +7441,13 @@ class WolfMapViewer(wx.Frame):
7441
7441
  if bc is not None:
7442
7442
  bc.Show()
7443
7443
 
7444
+ elif text == _('Contours'):
7445
+ if isinstance(self.selected_object, WolfArray):
7446
+ cont = self.selected_object.contour()
7447
+ cont.prep_listogl()
7448
+ self.add_object('vector', newobj= cont, id= cont.idx)
7449
+ self.Paint()
7450
+
7444
7451
  elif _('Convert to mono-block') in text:
7445
7452
 
7446
7453
  if isinstance(self.selected_object, WolfArrayMB):
@@ -9611,6 +9618,7 @@ class WolfMapViewer(wx.Frame):
9611
9618
 
9612
9619
  # Chaînes à supprimer
9613
9620
  tracks=[]
9621
+ tracks.append(_('Contours'))
9614
9622
  tracks.append(_('Boundary conditions'))
9615
9623
  tracks.append(_('Convert to mono-block'))
9616
9624
  tracks.append(_('Convert to mono-block (result)'))
@@ -9641,6 +9649,7 @@ class WolfMapViewer(wx.Frame):
9641
9649
  bc = self.get_boundary_manager(self.selected_object)
9642
9650
  if bc is not None:
9643
9651
  self.popupmenu.Append(wx.ID_ANY, _('Boundary conditions'), _('Boundary conditions'))
9652
+ self.popupmenu.Append(wx.ID_ANY, _('Contours'))
9644
9653
 
9645
9654
  # Add specific menu items for WolfArrayMB
9646
9655
  if isinstance(self.selected_object, WolfArrayMB):
wolfhece/apps/version.py CHANGED
@@ -5,7 +5,7 @@ class WolfVersion():
5
5
 
6
6
  self.major = 2
7
7
  self.minor = 1
8
- self.patch = 90
8
+ self.patch = 92
9
9
 
10
10
  def __str__(self):
11
11
 
wolfhece/pyshields.py CHANGED
@@ -278,7 +278,7 @@ def get_Rouse(d:float, q:float, h:float, K:float, rhom:float=2650., rho:float=RH
278
278
  """
279
279
  # tau_cr = (q/K)**2 / h**(7/3) * rho * GRAVITY
280
280
  # shear_vel = math.sqrt(tau_cr/rho)
281
- shear_vel = q/K / h**(7/6)* math.sqrt(GRAVITY)
281
+ shear_vel = q/K / h**(7./6.)* math.sqrt(GRAVITY)
282
282
  ws = get_settling_vel(d,rhom,rho)
283
283
  # von Kármán constant
284
284
  k = 0.40
@@ -513,6 +513,39 @@ def shieldsdia_dim(figax=None) -> tuple[plt.Figure,plt.Axes]:
513
513
 
514
514
  return fig,ax
515
515
 
516
+ def get_friction_slope_2D_Manning(q:float, h:float, n:float) -> float:
517
+ """
518
+ Compute friction slope j for 2D flow with Manning/Strickler friction law
519
+
520
+ :param q : discharge [m3/s]
521
+ :param h : water depth [m]
522
+ :param n : Manning friction coefficient [m-1/3.s]
523
+ """
524
+
525
+ denom = h**(4./3.)
526
+ if denom > 0.:
527
+ j = (q/h * n)**2.0 / denom
528
+ else:
529
+ j = 0.
530
+
531
+ return j
532
+
533
+ def get_shear_velocity_2D_Manning(q:float, h:float, n:float) -> float:
534
+ """
535
+ Compute shear velocity u_* for 2D flow with Manning/Strickler friction law
536
+
537
+ :param j : friction slope [-]
538
+ :param h : water depth [m]
539
+ :param q : discharge [m3/s]
540
+ :param n : Manning friction coefficient [m-1/3.s]
541
+ """
542
+
543
+ j = get_friction_slope_2D_Manning(q,h,n)
544
+
545
+ ushear = (h*j*GRAVITY)**0.5
546
+
547
+ return ushear
548
+
516
549
  def get_Shields_2D_Manning(s:float, d:float, q:float, h:float, n:float) -> float:
517
550
  """
518
551
  Compute Shields dimensionless parameter for 2D flow with Manning/Strickler friction law
@@ -528,11 +561,7 @@ def get_Shields_2D_Manning(s:float, d:float, q:float, h:float, n:float) -> float
528
561
  # calcul de terme de pente de frottement
529
562
 
530
563
  # j = (q/h)**2.0 / K**2. / h**(4./3.)
531
- denom = h**(4./3.)
532
- if denom > 0.:
533
- j = (q/h * n)**2.0 / denom
534
- else:
535
- j = 0.
564
+ j = get_friction_slope_2D_Manning(q,h,n)
536
565
 
537
566
  shields = j*h / (d*(s-1))
538
567
 
wolfhece/rem/REMMaker.py CHANGED
@@ -10,13 +10,13 @@ from osgeo import ogr
10
10
  from shapely.geometry import box # for cropping centerlines to extent of DEM
11
11
  import geopandas as gpd
12
12
  from geopandas import clip, read_file
13
- import osmnx # for querying OpenStreetMaps data to get river centerlines
13
+ import logging
14
+
14
15
  import requests
15
16
  from scipy.spatial import KDTree as KDTree # for finding nearest neighbors/interpolating
16
17
  from itertools import combinations
17
18
  import time
18
19
  from .RasterViz import RasterViz
19
- import logging
20
20
 
21
21
  level = logging.INFO
22
22
  fmt = '[%(levelname)s] %(asctime)s - %(message)s'
@@ -281,6 +281,14 @@ class REMMaker(object):
281
281
 
282
282
  def get_river_centerline(self):
283
283
  """Find centerline of river(s) within DEM area using OSM Ways"""
284
+
285
+ try:
286
+ import osmnx # for querying OpenStreetMaps data to get river centerlines
287
+ except ImportError:
288
+ logging.error("osmnx not installed. Please install osmnx to use this script.")
289
+ logging.error("Install with: 'pip install osmnx' but beware of dependencies especially Shapely, which may be forced to an older version.")
290
+ raise ImportError("osmnx not installed. Please install osmnx to use this script.")
291
+
284
292
  logging.info("Finding river centerline.")
285
293
  # get OSM Ways within bbox of DEM (returns geopandas geodataframe)
286
294
  osmnx.settings.cache_folder = './.osm_cache'
wolfhece/wolf_array.py CHANGED
@@ -1484,6 +1484,8 @@ class Ops_Array(wx.Frame):
1484
1484
 
1485
1485
  self.myzones.mapviewer = mapviewer
1486
1486
 
1487
+ self._levels = []
1488
+
1487
1489
  if self.wx_exists:
1488
1490
  self.set_GUI()
1489
1491
 
@@ -1746,12 +1748,20 @@ class Ops_Array(wx.Frame):
1746
1748
 
1747
1749
  self.extract_selection = wx.Button(self.tools, wx.ID_ANY, _("Extract selection"), wx.DefaultPosition,wx.DefaultSize, 0)
1748
1750
 
1751
+ cont_sizer = wx.BoxSizer(wx.HORIZONTAL)
1752
+ self._contour_int = wx.Button(self.tools, wx.ID_ANY, _("Contour"), wx.DefaultPosition, wx.DefaultSize, 0)
1753
+ self._contour_list = wx.Button(self.tools, wx.ID_ANY, _("Contour specific"), wx.DefaultPosition, wx.DefaultSize, 0)
1754
+
1755
+ cont_sizer.Add(self._contour_int, 1, wx.EXPAND)
1756
+ cont_sizer.Add(self._contour_list, 1, wx.EXPAND)
1757
+
1749
1758
  Toolssizer.Add(hbox, 0, wx.EXPAND)
1750
1759
  Toolssizer.Add(self.ApplyTools, 1, wx.EXPAND)
1751
1760
  Toolssizer.Add(self.nullborder, 1, wx.EXPAND)
1752
1761
  Toolssizer.Add(self.filter_zone, 1, wx.EXPAND)
1753
1762
  Toolssizer.Add(self.labelling, 1, wx.EXPAND)
1754
1763
  Toolssizer.Add(self.extract_selection, 1, wx.EXPAND)
1764
+ Toolssizer.Add(cont_sizer, 1, wx.EXPAND)
1755
1765
 
1756
1766
  self.ApplyTools.SetToolTip(_("Apply Nullvalue into memory/object"))
1757
1767
  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)"))
@@ -2130,6 +2140,8 @@ class Ops_Array(wx.Frame):
2130
2140
  self.filter_zone.Bind(wx.EVT_BUTTON, self.OnFilterZone)
2131
2141
  self.labelling.Bind(wx.EVT_BUTTON, self.OnLabelling)
2132
2142
  self.extract_selection.Bind(wx.EVT_BUTTON, self.OnExtractSelection)
2143
+ self._contour_int.Bind(wx.EVT_BUTTON, self.OnContourInt)
2144
+ self._contour_list.Bind(wx.EVT_BUTTON, self.OnContourList)
2133
2145
 
2134
2146
  self.SelectOp.Bind(wx.EVT_BUTTON, self.OnApplyOpSelect)
2135
2147
  self.palapply.Bind(wx.EVT_BUTTON, self.Onupdatepal)
@@ -2586,6 +2598,70 @@ class Ops_Array(wx.Frame):
2586
2598
 
2587
2599
  self.parentarray.extract_selection()
2588
2600
 
2601
+ def OnContourInt(self, event:wx.MouseEvent):
2602
+ """ Create contour - number of contours """
2603
+
2604
+ with wx.NumberEntryDialog(None, 'Number of contours', 'Number of contours', 'Number of contours', 20, 1, 1000) as dlg:
2605
+ if dlg.ShowModal() == wx.ID_OK:
2606
+ nbcontours = dlg.GetValue()
2607
+
2608
+ logging.info(_('Baking contour'))
2609
+ cont = self.parentarray.contour(levels = nbcontours)
2610
+ logging.info(_('Add contour to viewer'))
2611
+ cont.prep_listogl()
2612
+ mapv = self.get_mapviewer()
2613
+ mapv.add_object('vector', newobj = cont, id = cont.idx)
2614
+ self.get_mapviewer().Paint()
2615
+ logging.info(_('Done !'))
2616
+
2617
+ def OnContourList(self, event:wx.MouseEvent):
2618
+ """ Create contour - list of values """
2619
+
2620
+ with wx.TextEntryDialog(None, 'List of specific values separated by comma or tuple (min;max;step)',
2621
+ 'List of values', f'{self.parentarray.array.min()}, {self.parentarray.array.max()}') as dlg:
2622
+
2623
+ if dlg.ShowModal() == wx.ID_OK:
2624
+ txt = dlg.GetValue()
2625
+
2626
+ self._levels = []
2627
+ if ',' in txt:
2628
+ for cur in txt.split(','):
2629
+ if '(' in cur:
2630
+ cur = cur.replace('(', '').replace(')', '')
2631
+ cur = cur.split(';')
2632
+ if len(cur) == 3:
2633
+ minval = float(cur[0])
2634
+ maxval = float(cur[1])
2635
+ step = float(cur[2])
2636
+ self._levels.extend(np.arange(minval, maxval, step))
2637
+ elif '(' in txt:
2638
+ cur = txt.replace('(', '').replace(')', '')
2639
+ cur = cur.split(';')
2640
+ if len(cur) == 3:
2641
+ minval = float(cur[0])
2642
+ maxval = float(cur[1])
2643
+ step = float(cur[2])
2644
+ self._levels.extend(np.arange(minval, maxval, step))
2645
+ else:
2646
+ try:
2647
+ self._levels = float(txt)
2648
+ except:
2649
+ logging.error('Error in chain text to float')
2650
+ return
2651
+
2652
+ if isinstance(self._levels, list):
2653
+ if len(self._levels) == 0:
2654
+ logging.error('Nothing to do !')
2655
+ return
2656
+
2657
+ logging.info(_('Baking contour'))
2658
+ cont = self.parentarray.contour(levels = self._levels)
2659
+ logging.info(_('Add contour to viewer'))
2660
+ cont.prep_listogl()
2661
+ self.get_mapviewer().add_object('vector', newobj = cont, id = cont.idx)
2662
+ self.get_mapviewer().Paint()
2663
+ logging.info(_('Done !'))
2664
+
2589
2665
  def OnApplyOpMath(self, event:wx.MouseEvent):
2590
2666
  """ Apply math operator to the array """
2591
2667
 
@@ -8978,6 +9054,28 @@ class WolfArray(Element_To_Draw, header_wolf):
8978
9054
  Array3 = WolfArray(output_raster_path, nullvalue=-9999)
8979
9055
  return Array3
8980
9056
 
9057
+ def contour(self, levels:Union[int, list[float]] = 10) -> Zones:
9058
+ """ Compute contour lines """
9059
+
9060
+ if isinstance(levels, int):
9061
+ levels = np.linspace(self.array.min(), self.array.max(), levels)
9062
+
9063
+ x, y = self.meshgrid()
9064
+ cs = plt.contour(x, y, self.array, levels=levels)
9065
+
9066
+ zones = Zones(idx = self.idx + '_contour', mapviewer = self.get_mapviewer())
9067
+ for collection, level in zip(cs.collections, cs.levels):
9068
+ zone_level = zone(name=f'Contour {level}')
9069
+ for idx, path in enumerate(collection.get_paths()):
9070
+ vector_level = vector(name=f'Contour {level} - {idx}')
9071
+ for vertices in path.to_polygons(closed_only=False):
9072
+ for vertex in vertices:
9073
+ vector_level.add_vertex(wolfvertex(vertex[0], vertex[1]))
9074
+ zone_level.add_vector(vector_level, forceparent=True)
9075
+ zones.add_zone(zone_level, forceparent=True)
9076
+
9077
+ return zones
9078
+
8981
9079
  class WolfArrayMB(WolfArray):
8982
9080
  """
8983
9081
  Matrice multiblocks
@@ -35,7 +35,7 @@ from .drawing_obj import Element_To_Draw
35
35
  from .PyPalette import wolfpalette
36
36
  from .PyTranslate import _
37
37
  from .gpuview import GRID_N, Rectangle, VectorField
38
- from .pyshields import get_d_cr, get_d_cr_susp, izbach_d_cr, get_Shields_2D_Manning
38
+ from .pyshields import get_d_cr, get_d_cr_susp, izbach_d_cr, get_Shields_2D_Manning, get_friction_slope_2D_Manning, get_shear_velocity_2D_Manning
39
39
  from .pyviews import WolfViews
40
40
  from .mesh2d.wolf2dprev import prev_parameters_simul, blocks_file
41
41
  from .GraphNotebook import PlotPanel
@@ -1414,6 +1414,7 @@ class views_2D(Enum):
1414
1414
  TURB_VISC_3D = _('Turbulent viscosity 3D')
1415
1415
  VECTOR_FIELD_Q = _('Discharge vector field')
1416
1416
  VECTOR_FIELD_U = _('Velocity vector field')
1417
+ U_SHEAR = _('Shear velocity [ms-1]')
1417
1418
  SHIELDS_NUMBER = _('Shields number - Manning-Strickler')
1418
1419
  CRITICAL_DIAMETER_SHIELDS = _('Critical grain diameter - Shields')
1419
1420
  CRITICAL_DIAMETER_IZBACH = _('Critical grain diameter - Izbach')
@@ -1726,6 +1727,13 @@ class OneWolfResult:
1726
1727
 
1727
1728
  nullvalue = self.waterdepth.nullvalue
1728
1729
 
1730
+ elif which==views_2D.U_SHEAR:
1731
+ self.U_Shear = self.get_u_shear()
1732
+ self._current = self.U_Shear
1733
+ self._view = WolfViews()
1734
+
1735
+ nullvalue = self.waterdepth.nullvalue
1736
+
1729
1737
  elif which==views_2D.SHIELDS_NUMBER:
1730
1738
  if self.ShieldsNumber is None or self._force_update_shields:
1731
1739
  self.ShieldsNumber = self.get_shieldsnumber()
@@ -1891,6 +1899,33 @@ class OneWolfResult:
1891
1899
  logging.info(_('End of computing critical diameters'))
1892
1900
 
1893
1901
  return diamcrit
1902
+
1903
+ def get_u_shear(self) -> WolfArray:
1904
+ """
1905
+ Calcul de la vitesse de cisaillement
1906
+ """
1907
+
1908
+ def compute() -> WolfArray:
1909
+
1910
+ ij = np.argwhere(self.waterdepth.array>0.)
1911
+
1912
+ u_shear = WolfArray(mold=self.waterdepth)
1913
+ qnorm = (self.qx**2.+self.qy**2.)**.5
1914
+ qnorm.array.mask=self.waterdepth.array.mask
1915
+
1916
+ _u_shear = np.asarray([get_shear_velocity_2D_Manning(qnorm.array[i,j],
1917
+ self.waterdepth.array[i,j],
1918
+ self.rough_n.array.data[i,j]) for i,j in ij])
1919
+
1920
+ u_shear.array[ij[:,0],ij[:,1]] = _u_shear
1921
+
1922
+ return u_shear
1923
+
1924
+ logging.info(_('Computing shear velocity'))
1925
+ u_shear = compute()
1926
+ logging.info(_('End of computing shear velocity'))
1927
+
1928
+ return u_shear
1894
1929
 
1895
1930
  def get_shieldsnumber(self) -> WolfArray:
1896
1931
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wolfhece
3
- Version: 2.1.90
3
+ Version: 2.1.92
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
@@ -51,7 +51,6 @@ Requires-Dist: pygltflib
51
51
  Requires-Dist: ezdxf
52
52
  Requires-Dist: pyvista
53
53
  Requires-Dist: tqdm==4.64.*
54
- Requires-Dist: osmnx
55
54
  Requires-Dist: tifffile
56
55
  Requires-Dist: numba==0.58.*
57
56
  Requires-Dist: xmltodict
@@ -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=UNtl5UzZ399JqjJT67-4DWaIkv76sc1FiEsSDJpXlL0,10458
9
9
  wolfhece/PyCrosssections.py,sha256=FnmM9DWY_SAF2EDH9Gu2PojXNtSTRF4-aYQuAAJXBh4,112771
10
- wolfhece/PyDraw.py,sha256=CvnaK7NgeB25hlzlF-BxU38LT7-3ffuPnana6Mm9PDE,427447
10
+ wolfhece/PyDraw.py,sha256=-WHY2_slvEwaK2FilmI8oLRcXZGTk2pkBwDt1qd66zY,427847
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
@@ -42,19 +42,19 @@ wolfhece/pybridges.py,sha256=xbZPuX40c4EKqws4OKNbUVUBPKIzLTbSdYVyrNf_kIE,57418
42
42
  wolfhece/pydike.py,sha256=hPBQsmSTW4QAp1wcOzb-TL3L7eet2WT1sJx2q-WNQ-Q,2241
43
43
  wolfhece/pylogging.py,sha256=4TI8hgBB65z-zpvU5Rfa2jkPXPhJaqXjHVPwbcdzTNc,4528
44
44
  wolfhece/pypolygons_scen.py,sha256=C0qxVUsBHWZVkurZV-DI1GMN1J1B-ul93n2fs16UjoI,39718
45
- wolfhece/pyshields.py,sha256=7k-qe2EJgr9fJE62jyPmlWQwRj8T0DK4iuMU844ZhYs,23281
45
+ wolfhece/pyshields.py,sha256=6YncgmcA6QvbyIl4jbFRf24uJVjhiSplQKWtZH42lXI,24108
46
46
  wolfhece/pyviews.py,sha256=5Hqqo9MRw1eiomYkmc7QywNu1KmEkytLJG-wH_aG38Y,13748
47
47
  wolfhece/pywalous.py,sha256=yRaWJjKckXef1d9D5devP0yFHC9uc6kRV4G5x9PNq9k,18972
48
48
  wolfhece/rain_SPWMI.py,sha256=qCfcmF7LajloOaCwnTrrSMzyME03YyilmRUOqrPrv3U,13846
49
49
  wolfhece/textpillow.py,sha256=map7HsGYML_o5NHRdFg2s_TVQed_lDnpYNDv27MM0Vw,14130
50
50
  wolfhece/tools_mpl.py,sha256=gQ3Jg1iuZiecmMqa5Eli2ZLSkttu68VXL8YmMDBaEYU,564
51
- wolfhece/wolf_array.py,sha256=L6OV70nFSmzfO_beNbPRQ_VoklC_cx6fyhoslI3AMXg,401812
51
+ wolfhece/wolf_array.py,sha256=HasKFOCiFzM55YSXPvpWJ7O4tOoxyTm_LHytE2ZQq8o,406444
52
52
  wolfhece/wolf_hist.py,sha256=7jeVrgSkM3ErJO6SRMH_PGzfLjIdw8vTy87kesldggk,3582
53
53
  wolfhece/wolf_texture.py,sha256=DS5eobLxrq9ljyebYfpMSQPn8shkUAZZVfqrOKN_QUU,16951
54
54
  wolfhece/wolf_tiles.py,sha256=2Ho2I20rHRY81KXxjgLOYISdF4OkJ2d6omeY4shDoGI,10386
55
55
  wolfhece/wolf_vrt.py,sha256=89XoDhCJMHiwPQUuOduxtTRKuIa8RDxgNqX65S4xp9M,10569
56
56
  wolfhece/wolf_zi_db.py,sha256=baE0niMCzybWGSvPJc5FNxo9ZxsGfU4p-FmfiavFHAs,12967
57
- wolfhece/wolfresults_2D.py,sha256=5RAvOfO0ua-5hMEdtXKZWznh4NN_q-PLfZdANm7W33M,168478
57
+ wolfhece/wolfresults_2D.py,sha256=p0v3FT6CAzf6aP4AEEXNkuHG01c2Eqbio_a8ghJIt7k,169709
58
58
  wolfhece/xyz_file.py,sha256=Se4nCPwYAYLSA5i0zsbnZUKoAMAD0mK1FJea5WSZUkk,5755
59
59
  wolfhece/acceptability/Parallels.py,sha256=h4tu3SpC_hR5Hqa68aruxhtAyhs8u666YuZ40_fR5zg,3979
60
60
  wolfhece/acceptability/__init__.py,sha256=hfgoPKLDpX7drN1Vpvux-_5Lfyc_7feT2C2zQr5v-Os,258
@@ -75,7 +75,7 @@ wolfhece/apps/curvedigitizer.py,sha256=Yps4bcayzbsz0AoVc_dkSk35dEhhn_esIBy1Ziefg
75
75
  wolfhece/apps/hydrometry.py,sha256=lhhJsFeb4zGL4bNQTs0co85OQ_6ssL1Oy0OUJCzhfYE,656
76
76
  wolfhece/apps/isocurrent.py,sha256=dagmGR8ja9QQ1gwz_8fU-N052hIw-W0mWGVkzLu6C7I,4247
77
77
  wolfhece/apps/splashscreen.py,sha256=SrustmIQeXnsiD-92OzjdGhBi-S7c_j-cSvuX4T6rtg,2929
78
- wolfhece/apps/version.py,sha256=0ewKEdaYlj_bYhGOPsIk1mktB1LQK_EnKtWL-Vk3Dl8,388
78
+ wolfhece/apps/version.py,sha256=_TUgNtGFMedLigBPzswBYH6ZQUUs5BrsfxgN7xUDxWI,388
79
79
  wolfhece/apps/wolf.py,sha256=j_CgvsL8rwixbVvVD5Z0s7m7cHZ86gmFLojKGuetMls,729
80
80
  wolfhece/apps/wolf2D.py,sha256=4z_OPQ3IgaLtjexjMKX9ppvqEYyjFLt1hcfFABy3-jU,703
81
81
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -254,7 +254,7 @@ wolfhece/pythonfortran/example_numpy_memory.py,sha256=o3hzJDw7YtE4v0FXI3-l2VzupC
254
254
  wolfhece/pythonfortran/tools.py,sha256=oYh9MguRYEGNGKVbHqQW2V9okZJLs3n4Qs-vLWPmBe4,2462
255
255
  wolfhece/radar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
256
256
  wolfhece/radar/wolfradar.py,sha256=mvsVf6-4KCqVF6kWsKfPuM7KPqRdYHuIZAbb8kzXAZU,10032
257
- wolfhece/rem/REMMaker.py,sha256=k1kOb_69kNw00HRPbTc_E2XTypiyV0mADDbW5etkBAs,31079
257
+ wolfhece/rem/REMMaker.py,sha256=zkiAo36MmusPhgv1qJmpDgtoTWbh_eJ6qJqtCfeC1M8,31480
258
258
  wolfhece/rem/RasterViz.py,sha256=fnyMfAJZDoS-rjagsNRGLndS-UYNUzMY4DgenjD3Y_4,29068
259
259
  wolfhece/rem/__init__.py,sha256=S2-J5uEGK_VaMFjRUYFIdSScJjZyuXH4RmMmnG3OG7I,19
260
260
  wolfhece/report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -285,8 +285,8 @@ wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=8PlMYrb_8jI8h9F0_EagpM
285
285
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=ORy7fz4dcp691qKzaOZHrRLZ0uXNhL-LIHxmpDGL6BI,5007
286
286
  wolfhece/wintab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
287
287
  wolfhece/wintab/wintab.py,sha256=8A-JNONV6ujgsgG3lM5Uw-pVgglPATwKs86oBzzljoc,7179
288
- wolfhece-2.1.90.dist-info/METADATA,sha256=Nf-U-idNQhjOSifNKkIGDY8shuwNX8TV1B3AyAZcXlA,2570
289
- wolfhece-2.1.90.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
290
- wolfhece-2.1.90.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
291
- wolfhece-2.1.90.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
292
- wolfhece-2.1.90.dist-info/RECORD,,
288
+ wolfhece-2.1.92.dist-info/METADATA,sha256=B4LcZnRdMaSUQCv2aRIMVjVyH07wlmRL60l-8kWXXck,2548
289
+ wolfhece-2.1.92.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
290
+ wolfhece-2.1.92.dist-info/entry_points.txt,sha256=ZZ-aSfbpdcmo-wo84lRFzBN7LaSnD1XRGSaAKVX-Gpc,522
291
+ wolfhece-2.1.92.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
292
+ wolfhece-2.1.92.dist-info/RECORD,,