wolfhece 2.1.50__py3-none-any.whl → 2.1.51__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/PyPalette.py CHANGED
@@ -515,9 +515,9 @@ class wolfpalette(wx.Frame, LinearSegmentedColormap):
515
515
  def defaultgray(self):
516
516
  """Palette grise par défaut dans WOLF"""
517
517
 
518
- self.nb = 2
519
- self.values = np.asarray([0., 1.], dtype=np.float64)
520
- self.colors = np.asarray([[0, 0, 0, 255], [255, 255, 255, 255]], dtype=np.int32)
518
+ self.nb = 3
519
+ self.values = np.asarray([0., 0.5, 1.], dtype=np.float64)
520
+ self.colors = np.asarray([[0, 0, 0, 255], [128, 128, 128, 255], [255, 255, 255, 255]], dtype=np.int32)
521
521
 
522
522
  # self.nb = 11
523
523
  # self.values = np.asarray([0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.], dtype=np.float64)
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 = 50
8
+ self.patch = 51
9
9
 
10
10
  def __str__(self):
11
11
 
Binary file
wolfhece/rem/REMMaker.py CHANGED
@@ -1,13 +1,3 @@
1
- """
2
- Author: HECE - University of Liege, Pierre Archambeau
3
- Date: 2024
4
-
5
- Copyright (c) 2024 University of Liege. All rights reserved.
6
-
7
- This script and its content are protected by copyright law. Unauthorized
8
- copying or distribution of this file, via any medium, is strictly prohibited.
9
- """
10
-
11
1
  #!/usr/bin/env python
12
2
  import os
13
3
  import sys
@@ -228,8 +218,8 @@ class REMMaker(object):
228
218
  if self.count is not None and self.centerline_shp is None:
229
219
  raise ValueError(f'Obligation de donner un shapefile pour en sélectionner une géométrie.')
230
220
  if self.pres is not None:
231
- gdal.Warp(f'{self.dem_name}_warp.tif', self.dem, xRes=self.pres, yRes=self.pres)
232
- r = gdal.Open(f'{self.dem_name}_warp.tif', gdal.GA_ReadOnly)
221
+ gdal.Warp(os.path.join(self.out_dir, f'{self.dem_name}_warp.tif'), self.dem, xRes=self.pres, yRes=self.pres)
222
+ r = gdal.Open(os.path.join(self.out_dir, f'{self.dem_name}_warp.tif'), gdal.GA_ReadOnly)
233
223
  if self.bounds is not None:
234
224
  band = r.GetRasterBand(1)
235
225
  self.dem_array = band.ReadAsArray()
@@ -240,19 +230,19 @@ class REMMaker(object):
240
230
  min_x, max_x = sorted([upper_left_x, upper_left_x + x_size * cols])
241
231
  min_y, max_y = sorted([upper_left_y, upper_left_y + y_size * rows])
242
232
  if self.bounds[0] > min_x and self.bounds[1] > min_y and self.bounds[2] < max_x and self.bounds[3] < max_y:
243
- gdal.Translate(f'{self.dem_name}_crop.tif', r, projWin=(self.bounds[0],self.bounds[3],self.bounds[2],self.bounds[1]))
244
- r = gdal.Open(f'{self.dem_name}_crop.tif', gdal.GA_ReadOnly)
233
+ gdal.Translate(os.path.join(self.out_dir, f'{self.dem_name}_crop.tif'), r, projWin=(self.bounds[0],self.bounds[3],self.bounds[2],self.bounds[1]))
234
+ r = gdal.Open(os.path.join(self.out_dir, f'{self.dem_name}_crop.tif'), gdal.GA_ReadOnly)
245
235
  else:
246
236
  raise ValueError(f"bounds choisi hors DEM. Redéfinir des limites contenues dans x={min_x,max_x:.3f} et y={min_y,max_y:.3f}")
247
237
  if self.count is not None:
248
238
  self.rivers:gpd.GeoDataFrame
249
239
  self.rivers = read_file(self.centerline_shp)
250
240
  upper_left_x, x_size, x_rot, upper_left_y, y_rot, y_size = r.GetGeoTransform()
251
- gdal.Translate(f'{self.dem_name}_crop.tif', r, projWin=(self.rivers.bounds.iloc[self.count].minx-50*x_size,
241
+ gdal.Translate(os.path.join(self.out_dir, f'{self.dem_name}_crop.tif'), r, projWin=(self.rivers.bounds.iloc[self.count].minx-50*x_size,
252
242
  self.rivers.bounds.iloc[self.count].maxy-50*y_size,
253
243
  self.rivers.bounds.iloc[self.count].maxx+50*x_size,
254
244
  self.rivers.bounds.iloc[self.count].miny+50*y_size))
255
- r = gdal.Open(f'{self.dem_name}_crop.tif', gdal.GA_ReadOnly)
245
+ r = gdal.Open(os.path.join(self.out_dir, f'{self.dem_name}_crop.tif'), gdal.GA_ReadOnly)
256
246
  self.proj = osr.SpatialReference(wkt=r.GetProjection())
257
247
  self.epsg_code = self.proj.GetAttrValue('AUTHORITY', 1)
258
248
  self.h_unit = self.proj.GetAttrValue('UNIT')
@@ -426,9 +416,9 @@ class REMMaker(object):
426
416
  self.river_coords = self.ix2coords(self.river_indices)
427
417
  self.river_wses = self.dem_array[self.river_indices]
428
418
  else:
429
- self.rivers = read_file(f'{self.dem_name}_river_pts.shp')
419
+ self.rivers = os.path.join(self.out_dir, f'{self.dem_name}_river_pts.shp')
430
420
  self.rivers['curvi'] = self.river_curvi
431
- self.rivers.to_file(f'{self.dem_name}_river_pts.shp', driver='ESRI Shapefile')
421
+ self.rivers.to_file(os.path.join(self.out_dir, f'{self.dem_name}_river_pts.shp'), driver='ESRI Shapefile')
432
422
  self.river_coords = np.array([curpt.xy for curpt in self.rivers.geometry])
433
423
  self.river_wses = np.array([curpt.z for curpt in self.rivers.geometry])
434
424
  return
@@ -463,9 +453,9 @@ class REMMaker(object):
463
453
  logging.info("Interpolating river elevation across DEM extent.")
464
454
  if not self.k:
465
455
  self.k = self.estimate_k()
466
- self.rivers = read_file(f'{self.dem_name}_river_pts.shp')
456
+ self.rivers = read_file(self.river_shp)
467
457
  self.rivers['curvi'] = self.river_curvi
468
- self.rivers.to_file(f'{self.dem_name}_river_pts.shp', driver='ESRI Shapefile')
458
+ self.rivers.to_file(self.river_shp, driver='ESRI Shapefile')
469
459
  logging.info(f"Using k = {self.k} nearest neighbors.")
470
460
  # coords to interpolate over (don't interpolate where DEM is null or on centerline where REM = 0)
471
461
  interp_indices = np.where(~(np.isnan(self.dem_array) | (self.centerline_array == 1)))
@@ -513,9 +503,9 @@ class REMMaker(object):
513
503
  if self.bounds is None and self.count is None:
514
504
  r = gdal.Open(self.dem, gdal.GA_ReadOnly)
515
505
  if self.bounds is not None or self.count is not None:
516
- r = gdal.Open(f'{self.dem_name}_crop.tif', gdal.GA_ReadOnly)
506
+ r = gdal.Open(os.path.join(self.out_dir, f'{self.dem_name}_crop.tif'), gdal.GA_ReadOnly)
517
507
  if self.pres is not None and self.bounds is None and self.count is None:
518
- r = gdal.Open(f'{self.dem_name}_warp.tif', gdal.GA_ReadOnly)
508
+ r = gdal.Open(os.path.join(self.out_dir, f'{self.dem_name}_warp.tif'), gdal.GA_ReadOnly)
519
509
  driver = gdal.GetDriverByName("GTiff")
520
510
  rem = driver.CreateCopy(self.rem_ras, r, strict=0)
521
511
  # fill with REM array
@@ -565,9 +555,9 @@ class REMMaker(object):
565
555
  if self.bounds is None and self.count is None:
566
556
  dem_viz = RasterViz(self.dem, out_dir=self.cache_dir, out_ext=".tif")
567
557
  if self.bounds is not None or self.count is not None:
568
- dem_viz = RasterViz(f'{self.dem_name}_crop.tif', out_dir=self.cache_dir, out_ext=".tif")
558
+ dem_viz = RasterViz(os.path.join(self.out_dir, f'{self.dem_name}_crop.tif'), out_dir=self.cache_dir, out_ext=".tif")
569
559
  if self.pres is not None and self.bounds is None and self.count is None:
570
- dem_viz = RasterViz(f'{self.dem_name}_warp.tif', out_dir=self.cache_dir, out_ext=".tif")
560
+ dem_viz = RasterViz(os.path.join(self.out_dir, f'{self.dem_name}_warp.tif'), out_dir=self.cache_dir, out_ext=".tif")
571
561
  dem_viz.make_hillshade(multidirectional=True, z=z)
572
562
  # make color-relief of REM in cache dir
573
563
  rem_viz = RasterViz(self.rem_ras, out_dir=self.cache_dir, out_ext=".tif", make_png=make_png, make_kmz=make_kmz, *args, **kwargs)
wolfhece/rem/RasterViz.py CHANGED
@@ -1,13 +1,3 @@
1
- """
2
- Author: HECE - University of Liege, Pierre Archambeau
3
- Date: 2024
4
-
5
- Copyright (c) 2024 University of Liege. All rights reserved.
6
-
7
- This script and its content are protected by copyright law. Unauthorized
8
- copying or distribution of this file, via any medium, is strictly prohibited.
9
- """
10
-
11
1
  #!/usr/bin/env python
12
2
  import os
13
3
  import sys
@@ -26,46 +16,46 @@ This script can be called from Python using its class/methods or as a CLI utilit
26
16
 
27
17
  CLI Usage:
28
18
 
29
- "python RasterViz.py viz_type [-z (default=1)] [-alt (default=45)] [-azim (default=315)] [-multidirectional]
30
- [-cmap (default=terrain)] [-out_ext tif | img (default=tif)] [-make_png] [-make_kmz] [-docker] [-shell]
19
+ "python RasterViz.py viz_type [-z (default=1)] [-alt (default=45)] [-azim (default=315)] [-multidirectional]
20
+ [-cmap (default=terrain)] [-out_ext tif | img (default=tif)] [-make_png] [-make_kmz] [-docker] [-shell]
31
21
  /path/to/dem"
32
22
 
33
23
  Options:
34
-
35
- viz_type: string corresponding to raster product to be produced, one of the following strings:
24
+
25
+ viz_type: string corresponding to raster product to be produced, one of the following strings:
36
26
  ["hillshade", "slope", "aspect", "roughness", "color-relief", "hillshade-color"]
37
-
27
+
38
28
  -z: only if using "hillshade" or "hillshade-color" viz_type,
39
29
  factor to scale/exaggerate vertical topographic differences. Default 1 (no rescale).
40
-
41
- -alt: only if using "hillshade" or "hillshade-color" viz_type,
30
+
31
+ -alt: only if using "hillshade" or "hillshade-color" viz_type,
42
32
  altitude of light source in degrees [0-90]. Default 45.
43
-
44
- -azim: only if using "hillshade" or "hillshade-color" viz_type,
33
+
34
+ -azim: only if using "hillshade" or "hillshade-color" viz_type,
45
35
  azimuth of light source in degrees [0-360]. Default 315.
46
-
47
- -multidirectional: only if using "hillshade" or "hillshade-color" viz_type.
36
+
37
+ -multidirectional: only if using "hillshade" or "hillshade-color" viz_type.
48
38
  Makes multidirectional hillshade, overriding alt and azim args.
49
-
39
+
50
40
  -cmap: only if using "color-relief" viz_type, name of a matplotlib or seaborn colormap. Default "terrain".
51
41
  (see https://matplotlib.org/stable/gallery/color/colormap_reference.html)
52
-
42
+
53
43
  -out_ext: the extension/file format to use for geodata outputs (tif or img). Default "tif".
54
-
44
+
55
45
  -make_png: output a png version (EPSG:3857) of the viz_type in addition to the viz raster in source projection.
56
-
46
+
57
47
  -make_kmz: output a kmz version of the viz_type in addition to the viz raster in source projection.
58
-
48
+
59
49
  -docker: run GDAL commands from within the osgeo/gdal docker container. This makes it run slightly slower but will
60
50
  be needed to run all features if gdal install is on a version <2.2. If using docker, input path must be
61
51
  within the working directory path or a subdirectory.
62
-
52
+
63
53
  -shell: call GDAL functions (gdaldem, gdal_translate, gdalwarp) as shell commands instead of using Python bindings.
64
54
  This may be faster than using pure Python but requires additional environment configuration.
65
55
 
66
56
  /path/to/dem.tif: path to input DEM, currently assumed to be in GeoTIFF format.
67
57
 
68
- Notes: Output file naming convention uses the DEM basename as a prefix, then viz_type and file extension.
58
+ Notes: Output file naming convention uses the DEM basename as a prefix, then viz_type and file extension.
69
59
  E.g. output.tin.tif --> output_hillshade.tif, output_hillshade.png, output_hillshade.kmz.
70
60
  Outputs are saved to the working directory.
71
61
 
wolfhece/wolf_array.py CHANGED
@@ -95,6 +95,39 @@ WOLF_ARRAY_MB = [WOLF_ARRAY_MB_SINGLE, WOLF_ARRAY_MB_INTEGER, WOLF_ARRAY_MNAP_IN
95
95
 
96
96
  VERSION_RGB = 2
97
97
 
98
+ from numba import jit
99
+
100
+ @jit(nopython=True)
101
+ def custom_gradient(array: np.ndarray):
102
+ """ Calculate the gradient manually """
103
+ grad_x = np.zeros_like(array)
104
+ grad_y = np.zeros_like(array)
105
+
106
+ for i in range(1, array.shape[0] - 1):
107
+ for j in range(1, array.shape[1] - 1):
108
+ grad_x[i, j] = (array[i + 1, j] - array[i - 1, j]) / 2.0
109
+ grad_y[i, j] = (array[i, j + 1] - array[i, j - 1]) / 2.0
110
+
111
+ return grad_x, grad_y
112
+
113
+ @jit(nopython=True)
114
+ def hillshade(array:np.ndarray, azimuth:float, angle_altitude:float) -> np.ndarray:
115
+ """ Create a hillshade array """
116
+
117
+ azimuth = 360.0 - azimuth
118
+
119
+ x, y = custom_gradient(array)
120
+ slope = np.pi / 2. - np.arctan(np.sqrt(x * x + y * y))
121
+ aspect = np.arctan2(-x, y)
122
+ azimuthrad = azimuth * np.pi / 180.
123
+ altituderad = angle_altitude * np.pi / 180.
124
+
125
+ shaded = np.sin(altituderad) * np.sin(slope) + np.cos(altituderad) * \
126
+ np.cos(slope) * np.cos((azimuthrad - np.pi / 2.) - aspect)
127
+ shaded += 1.
128
+ shaded *= .5
129
+
130
+ return shaded.astype(np.float32)
98
131
  class Rebin_Ops(Enum):
99
132
  MIN = 0
100
133
  MEAN = 1
@@ -5757,23 +5790,10 @@ class WolfArray(Element_To_Draw, header_wolf):
5757
5790
  return mytri, znull
5758
5791
 
5759
5792
  def hillshade(self, azimuth:float, angle_altitude:float):
5760
- """ Create a hillshade array """
5761
-
5762
- azimuth = 360.0 - azimuth
5763
-
5764
- x, y = np.gradient(self.array)
5765
- slope = np.pi / 2. - np.arctan(np.sqrt(x * x + y * y))
5766
- aspect = np.arctan2(-x, y)
5767
- azimuthrad = azimuth * np.pi / 180.
5768
- altituderad = angle_altitude * np.pi / 180.
5769
-
5770
- shaded = np.sin(altituderad) * np.sin(slope) + np.cos(altituderad) * np.cos(slope) * np.cos(
5771
- (azimuthrad - np.pi / 2.) - aspect)
5772
- shaded += 1.
5773
- shaded *= .5
5793
+ """ Create a hillshade array -- see "hillshade" function accelerated by JIT"""
5774
5794
 
5775
5795
  self.shaded.set_header(self.get_header())
5776
- self.shaded.array = shaded
5796
+ self.shaded.array = hillshade(self.array.data, azimuth, angle_altitude)
5777
5797
  self.shaded.delete_lists()
5778
5798
 
5779
5799
  def get_gradient_norm(self):
@@ -7616,20 +7636,22 @@ class WolfArray(Element_To_Draw, header_wolf):
7616
7636
  WOLF_ARRAY_FULL_INTEGER16,
7617
7637
  WOLF_ARRAY_FULL_INTEGER16_2,
7618
7638
  WOLF_ARRAY_FULL_INTEGER,
7619
- WOLF_ARRAY_FULL_DOUBLE]:
7639
+ WOLF_ARRAY_FULL_DOUBLE,
7640
+ WOLF_ARRAY_HILLSHAPE]:
7620
7641
  # FIXME: Currently, only some types are supported in Cython/OpenGL library
7621
7642
  self._tmp_float32 = self.array.astype(dtype=np.float32)
7622
7643
  else:
7623
7644
  self._tmp_float32 = None
7624
7645
 
7625
7646
 
7626
- # if self.shading:
7627
- # pond = (self.shaded.array-.5)*2.
7628
- # pmin = (1. - self.shaded.alpha) * self.rgb
7629
- # pmax = self.shaded.alpha * np.ones(self.rgb.shape) + (1. - self.shaded.alpha) * self.rgb
7630
- # for i in range(4):
7631
- # self.rgb[pond<0,i] = self.rgb[pond<0,i] * (1.+pond[pond<0]) - pmin[pond<0,i] * pond[pond<0]
7632
- # self.rgb[pond>0,i] = self.rgb[pond>0,i] * (1.-pond[pond>0]) + pmax[pond>0,i] * pond[pond>0]
7647
+ if VERSION_RGB==1 :
7648
+ if self.shading:
7649
+ pond = (self.shaded.array-.5)*2.
7650
+ pmin = (1. - self.shaded.alpha) * self.rgb
7651
+ pmax = self.shaded.alpha * np.ones(self.rgb.shape) + (1. - self.shaded.alpha) * self.rgb
7652
+ for i in range(4):
7653
+ self.rgb[pond<0,i] = self.rgb[pond<0,i] * (1.+pond[pond<0]) - pmin[pond<0,i] * pond[pond<0]
7654
+ self.rgb[pond>0,i] = self.rgb[pond>0,i] * (1.-pond[pond>0]) + pmax[pond>0,i] * pond[pond>0]
7633
7655
 
7634
7656
  if VERSION_RGB==1 : self.rgb[self.array.mask] = [1., 1., 1., 0.]
7635
7657
 
@@ -7719,11 +7741,15 @@ class WolfArray(Element_To_Draw, header_wolf):
7719
7741
 
7720
7742
  if self.wolftype != WOLF_ARRAY_HILLSHAPE and self.shading:
7721
7743
  self.hillshade(self.azimuthhill, self.altitudehill)
7722
- self.updatepalette(0)
7723
- self.shaded.updatepalette(0)
7744
+
7745
+ if VERSION_RGB==1 :
7746
+ self.updatepalette(0)
7747
+ self.shaded.updatepalette(0)
7748
+
7724
7749
  self.shading=False
7725
7750
  if self.mapviewer is not None:
7726
- if not self.idx + '_hillshade' in self.mapviewer.get_list_keys(self.mapviewer.ARRAYS, False) :# .added['arrays'].keys():
7751
+ from .PyDraw import draw_type
7752
+ if not self.idx + '_hillshade' in self.mapviewer.get_list_keys(drawing_type=draw_type.ARRAYS, checked_state= None) :# .added['arrays'].keys():
7727
7753
  self.mapviewer.add_object('array', newobj=self.shaded, ToCheck=True, id=self.idx + '_hillshade')
7728
7754
 
7729
7755
  try:
@@ -7739,12 +7765,14 @@ class WolfArray(Element_To_Draw, header_wolf):
7739
7765
  mylist = self.mygrid[cursize]['mylists'][i, j]
7740
7766
  if mylist > 0:
7741
7767
  glCallList(self.mygrid[cursize]['mylists'][i, j])
7742
- except:
7743
- pass
7768
+ except Exception as e:
7769
+ logging.error(_('OpenGL error in WolfArray.plot 1 -- Please report this case with the data file and the context in which the error occured'))
7770
+ logging.error(e)
7744
7771
 
7745
7772
  glDisable(GL_BLEND)
7746
- except:
7747
- logging.error(_('OpenGL error in WolfArray.plot -- Please report this case with the data file and the context in which the error occured'))
7773
+ except Exception as e:
7774
+ logging.error(_('OpenGL error in WolfArray.plot 2 -- Please report this case with the data file and the context in which the error occured'))
7775
+ logging.error(e)
7748
7776
 
7749
7777
  self.plotting = False
7750
7778
 
@@ -7793,9 +7821,7 @@ class WolfArray(Element_To_Draw, header_wolf):
7793
7821
  def fillonecellgrid(self, curscale, loci, locj, force=False):
7794
7822
  """ Fill one cell of the plotted grid """
7795
7823
 
7796
-
7797
-
7798
- cursize = curscale # 2**curscale
7824
+ cursize = curscale
7799
7825
 
7800
7826
  if not cursize in self.mygrid.keys():
7801
7827
  return
@@ -7875,22 +7901,28 @@ class WolfArray(Element_To_Draw, header_wolf):
7875
7901
  elif self.nbnotnull > 0:
7876
7902
  wolfogl.addmeall_double_pal(self.array, self.mypal.colorsflt, self.mypal.values, ox, oy, dx, dy, jstart,
7877
7903
  jend, istart, iend, cursize, self.nullvalue, self.alpha, int(self.mypal.interval_cst))
7878
- elif self.wolftype != WOLF_ARRAY_FULL_SINGLE:
7904
+ elif self.wolftype not in [WOLF_ARRAY_FULL_SINGLE, WOLF_ARRAY_HILLSHAPE]:
7879
7905
  if self.nbnotnull != self.nbx * self.nby:
7880
7906
  if self.nbnotnull > 0:
7881
7907
  wolfogl.addme_pal(self._tmp_float32, self.mypal.colorsflt, self.mypal.values, ox, oy, dx, dy, jstart,
7882
- jend, istart, iend, cursize, self.nullvalue, self.alpha, int(self.mypal.interval_cst))
7908
+ jend, istart, iend, cursize, self.nullvalue, self.alpha, int(self.mypal.interval_cst), -1.)
7883
7909
  elif self.nbnotnull > 0:
7884
7910
  wolfogl.addmeall_pal(self._tmp_float32, self.mypal.colorsflt, self.mypal.values, ox, oy, dx, dy, jstart,
7885
- jend, istart, iend, cursize, self.nullvalue, self.alpha, int(self.mypal.interval_cst))
7911
+ jend, istart, iend, cursize, self.nullvalue, self.alpha, int(self.mypal.interval_cst), -1.)
7886
7912
  else:
7913
+ clr_float = self.mypal.colorsflt.copy()
7914
+ clr_float[:,3] = self.alpha
7915
+ if '_hillshade' in self.idx:
7916
+ clr_float[1,3] = 0.
7917
+
7887
7918
  if self.nbnotnull != self.nbx * self.nby:
7888
7919
  if self.nbnotnull > 0:
7889
- wolfogl.addme_pal(self.array, self.mypal.colorsflt, self.mypal.values, ox, oy, dx, dy, jstart, jend, istart, iend, cursize,
7890
- self.nullvalue, self.alpha, int(self.mypal.interval_cst))
7920
+
7921
+ wolfogl.addme_pal(self.array, clr_float, self.mypal.values, ox, oy, dx, dy, jstart, jend, istart, iend, cursize,
7922
+ self.nullvalue, self.alpha, int(self.mypal.interval_cst), -1.)
7891
7923
  elif self.nbnotnull > 0:
7892
- wolfogl.addmeall_pal(self.array, self.mypal.colorsflt, self.mypal.values, ox, oy, dx, dy, jstart, jend, istart, iend, cursize,
7893
- self.nullvalue, self.alpha, int(self.mypal.interval_cst))
7924
+ wolfogl.addmeall_pal(self.array, clr_float, self.mypal.values, ox, oy, dx, dy, jstart, jend, istart, iend, cursize,
7925
+ self.nullvalue, self.alpha, int(self.mypal.interval_cst), -1.)
7894
7926
 
7895
7927
  except Exception as e:
7896
7928
  logging.error(repr(e))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wolfhece
3
- Version: 2.1.50
3
+ Version: 2.1.51
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
@@ -13,14 +13,14 @@ Classifier: Topic :: Scientific/Engineering :: Physics
13
13
  Requires-Python: <3.11,>=3.10
14
14
  Description-Content-Type: text/markdown
15
15
  Requires-Dist: wxpython
16
- Requires-Dist: colorlog ==6.7.*
16
+ Requires-Dist: colorlog==6.7.*
17
17
  Requires-Dist: intel-fortran-rt
18
18
  Requires-Dist: scikit-learn
19
19
  Requires-Dist: cryptography
20
- Requires-Dist: jax ==0.4.30
20
+ Requires-Dist: jax==0.4.30
21
21
  Requires-Dist: triangle
22
- Requires-Dist: numpy ==1.23.*
23
- Requires-Dist: pyopengl ==3.1.*
22
+ Requires-Dist: numpy==1.23.*
23
+ Requires-Dist: pyopengl==3.1.*
24
24
  Requires-Dist: pandas
25
25
  Requires-Dist: geopandas
26
26
  Requires-Dist: scipy
@@ -33,7 +33,7 @@ Requires-Dist: graphviz
33
33
  Requires-Dist: beautifulsoup4
34
34
  Requires-Dist: requests
35
35
  Requires-Dist: notebook
36
- Requires-Dist: matplotlib ==3.6.*
36
+ Requires-Dist: matplotlib==3.6.*
37
37
  Requires-Dist: mkl
38
38
  Requires-Dist: python-gettext
39
39
  Requires-Dist: shapely
@@ -49,10 +49,10 @@ Requires-Dist: python-docx
49
49
  Requires-Dist: pygltflib
50
50
  Requires-Dist: ezdxf
51
51
  Requires-Dist: pyvista
52
- Requires-Dist: tqdm ==4.64.*
52
+ Requires-Dist: tqdm==4.64.*
53
53
  Requires-Dist: osmnx
54
54
  Requires-Dist: tifffile
55
- Requires-Dist: numba ==0.58.*
55
+ Requires-Dist: numba==0.58.*
56
56
  Requires-Dist: xmltodict
57
57
  Requires-Dist: opencv-python
58
58
  Requires-Dist: xarray
@@ -11,7 +11,7 @@ wolfhece/PyDraw.py,sha256=_Rfx59LMopR0Cx00d1RRF5Gb-WNxfA2v2RjkOfm84Yo,390847
11
11
  wolfhece/PyGui.py,sha256=aRWv9tBpRl7sKEd2gHWj8Bss0ZOKbGlUYIehWHFm8WY,105008
12
12
  wolfhece/PyGuiHydrology.py,sha256=f60E8K9eGTnRq5RDF6yvt-ahf2AYegwQ9t25zZ2Mk1A,14946
13
13
  wolfhece/PyHydrographs.py,sha256=jwtSNMMACwarxrtN1UeQYth99UNrhwPx1IGgUwcooHA,3774
14
- wolfhece/PyPalette.py,sha256=5TvXF5wWDxP4e70zO9B0UMgVP9c0oAzerM28aoJ1CTg,27982
14
+ wolfhece/PyPalette.py,sha256=3ehK6H2PvqSe0zICR1HyNs6KQokR1DmnAh4LwYnLIcU,28009
15
15
  wolfhece/PyParams.py,sha256=wwgmP-_7wiiPLTcyX8a5jR6FyC1D2c4oBPc1VWQqtSA,97383
16
16
  wolfhece/PyPictures.py,sha256=m1kY0saW6Y9Q0bDCo47lW6XxDkBrbQG-Fd8uVn8G5ic,2514
17
17
  wolfhece/PyTranslate.py,sha256=4appkmNeHHZLFmUtaA_k5_5QL-5ymxnbVN4R2OblmtE,622
@@ -48,7 +48,7 @@ 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=HnrviXNSps9LFDERXyeZmI0L2ovFYY4rBHInPBZLRGw,368994
51
+ wolfhece/wolf_array.py,sha256=-8D5YtLIC79-mk7LcRsOQ6fFRMBoUAc_p3ulrxxaiEc,370408
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
@@ -72,7 +72,7 @@ wolfhece/apps/check_install.py,sha256=SG024u18G7VRLKynbp7DKD1jImtHwuWwN4bJWHm-YH
72
72
  wolfhece/apps/curvedigitizer.py,sha256=_hRR2PWow7PU7rTHIbc6ykZ08tCXcK9uy7RFrb4EKkE,5196
73
73
  wolfhece/apps/isocurrent.py,sha256=MuwTodHxdc6PrqNpphR2ntYf1NLL2n9klTPndGrOHDQ,4109
74
74
  wolfhece/apps/splashscreen.py,sha256=SrustmIQeXnsiD-92OzjdGhBi-S7c_j-cSvuX4T6rtg,2929
75
- wolfhece/apps/version.py,sha256=3OLK8XkmHW4Hi1ttOxzIDZZILVtXKvYakGuhqG-0N4U,388
75
+ wolfhece/apps/version.py,sha256=v7Yu3aHd9cB-wNpcJSWRz8Ru3iyXgqym6gfyLAymfjE,388
76
76
  wolfhece/apps/wolf.py,sha256=mM6Tyi4DlKQILmO49cDUCip9fYVy-hLXkY3YhZgIeUQ,591
77
77
  wolfhece/apps/wolf2D.py,sha256=yPQGee7fsegoQ8GfWKrWEjX1Az_ApL-UWlBiqPvaIyY,565
78
78
  wolfhece/apps/wolf_logo.bmp,sha256=ruJ4MA51CpGO_AYUp_dB4SWKHelvhOvd7Q8NrVOjDJk,3126
@@ -191,7 +191,7 @@ wolfhece/libs/vcomp100.dll,sha256=NKvXc8hc4MrFa9k8ErALA6OmldGfR3zidaZPCZhMVJI,57
191
191
  wolfhece/libs/vcruntime140.dll,sha256=gPBsB0DzEBn3b7E5ihESs-AtG4Cu59OnONR1QI17TGA,98720
192
192
  wolfhece/libs/vcruntime140_1.dll,sha256=KZJoe26L6i76Krqne_OribgfhN6LxJQEcs0Xn_01hP8,38304
193
193
  wolfhece/libs/verify_wolf.cp310-win_amd64.pyd,sha256=Cej6r7o8cOF58sXs97kjPN4ddd-ZjDyYZ_WkR0Nmivo,128512
194
- wolfhece/libs/wolfogl.cp310-win_amd64.pyd,sha256=e27Epa44wBSrXiwzeUpl2ud8oCPJpFbfWd_5P5l6sAo,294912
194
+ wolfhece/libs/wolfogl.cp310-win_amd64.pyd,sha256=l2ZpPh_dGLWcvYxM0BdLHhfSYrLhQI5rT59rRwyQjCY,296448
195
195
  wolfhece/libs/wolfpy.cp310-win_amd64.pyd,sha256=6omqEaxmQll-Gg24e90wVomAB9rO_tyyOES2FewXn58,36457472
196
196
  wolfhece/libs/zlib1.dll,sha256=E9a0e62VgmG1A8ohZzhVCmmfGtbyXxXu4aFeADTNJ30,77824
197
197
  wolfhece/libs/GL/gl.h,sha256=IhsS_fOLa8GW9MpiLZebe9QYRy6uIB_qK_uQMWMOoeg,46345
@@ -247,8 +247,8 @@ wolfhece/pythonfortran/example_numpy_memory.py,sha256=o3hzJDw7YtE4v0FXI3-l2VzupC
247
247
  wolfhece/pythonfortran/tools.py,sha256=oYh9MguRYEGNGKVbHqQW2V9okZJLs3n4Qs-vLWPmBe4,2462
248
248
  wolfhece/radar/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
249
  wolfhece/radar/wolfradar.py,sha256=mvsVf6-4KCqVF6kWsKfPuM7KPqRdYHuIZAbb8kzXAZU,10032
250
- wolfhece/rem/REMMaker.py,sha256=xPEnjOJCDzAjf2k1SzQI1oSj4mbrcCD9PTOV3HlXCoM,31088
251
- wolfhece/rem/RasterViz.py,sha256=JaAdbJHjvrNpJ5kuMNY-JPDTSRWm0Pw6k3JNGoWp5HQ,29426
250
+ wolfhece/rem/REMMaker.py,sha256=k1kOb_69kNw00HRPbTc_E2XTypiyV0mADDbW5etkBAs,31079
251
+ wolfhece/rem/RasterViz.py,sha256=fnyMfAJZDoS-rjagsNRGLndS-UYNUzMY4DgenjD3Y_4,29068
252
252
  wolfhece/rem/__init__.py,sha256=S2-J5uEGK_VaMFjRUYFIdSScJjZyuXH4RmMmnG3OG7I,19
253
253
  wolfhece/report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
254
  wolfhece/report/reporting.py,sha256=JUEXovx_S4jpYkJEBU0AC-1Qw2OkkWyV3VAp6iOfSHc,19494
@@ -278,8 +278,8 @@ wolfhece/ui/wolf_multiselection_collapsiblepane.py,sha256=8PlMYrb_8jI8h9F0_EagpM
278
278
  wolfhece/ui/wolf_times_selection_comparison_models.py,sha256=ORy7fz4dcp691qKzaOZHrRLZ0uXNhL-LIHxmpDGL6BI,5007
279
279
  wolfhece/wintab/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
280
280
  wolfhece/wintab/wintab.py,sha256=8A-JNONV6ujgsgG3lM5Uw-pVgglPATwKs86oBzzljoc,7179
281
- wolfhece-2.1.50.dist-info/METADATA,sha256=hDyP3-DlayT9vmBCHDj-deR_EczWlyXfofxjPknApok,2548
282
- wolfhece-2.1.50.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
283
- wolfhece-2.1.50.dist-info/entry_points.txt,sha256=Q5JuIWV4odeIJI3qc6fV9MwRoz0ezqPVlFC1Ppm_vdQ,395
284
- wolfhece-2.1.50.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
285
- wolfhece-2.1.50.dist-info/RECORD,,
281
+ wolfhece-2.1.51.dist-info/METADATA,sha256=QE7DXFrJsneMtWd4s8LYYAPYtycGTAGsF3RYO8exoSo,2541
282
+ wolfhece-2.1.51.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
283
+ wolfhece-2.1.51.dist-info/entry_points.txt,sha256=Q5JuIWV4odeIJI3qc6fV9MwRoz0ezqPVlFC1Ppm_vdQ,395
284
+ wolfhece-2.1.51.dist-info/top_level.txt,sha256=EfqZXMVCn7eILUzx9xsEu2oBbSo9liWPFWjIHik0iCI,9
285
+ wolfhece-2.1.51.dist-info/RECORD,,