sdfr 1.4.3__py3-none-win32.whl → 1.4.5__py3-none-win32.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.
sdfr/SDF.py CHANGED
@@ -340,6 +340,7 @@ class BlockList:
340
340
  """Contains all the blocks"""
341
341
 
342
342
  def __init__(self, filename, convert=False, derived=True):
343
+ self._handle = None
343
344
  clib = sdf_lib
344
345
  self._clib = clib
345
346
  clib.sdf_open.restype = ct.POINTER(SdfFile)
@@ -369,8 +370,8 @@ class BlockList:
369
370
  self.Header = get_header(h.contents)
370
371
  mesh_id_map = {}
371
372
  mesh_vars = []
372
- self._block_ids = {}
373
- self._block_names = {}
373
+ self._block_ids = {"Header": self.Header}
374
+ self._block_names = {"Header": self.Header}
374
375
  for n in range(h.contents.nblocks):
375
376
  block = block.contents
376
377
  block._handle = h
@@ -417,6 +418,7 @@ class BlockList:
417
418
  if block.datatype_out != 0:
418
419
  newblock = BlockLagrangianMesh(block)
419
420
  newblock_mid = block
421
+ newblock_mid._grid_block = newblock
420
422
  mesh_id_map[newblock.id] = newblock
421
423
  elif blocktype == SdfBlockType.SDF_BLOCKTYPE_NAMEVALUE:
422
424
  newblock = BlockNameValue(block)
@@ -430,6 +432,7 @@ class BlockList:
430
432
  if block.datatype_out != 0:
431
433
  newblock = BlockPlainMesh(block)
432
434
  newblock_mid = block
435
+ newblock_mid._grid_block = newblock
433
436
  mesh_id_map[newblock.id] = newblock
434
437
  elif (
435
438
  blocktype == SdfBlockType.SDF_BLOCKTYPE_POINT_DERIVED
@@ -474,6 +477,7 @@ class BlockList:
474
477
  self._block_ids.update({nm: newblock})
475
478
  nm = block_mid.name.decode() + "_mid"
476
479
  self._block_names.update({nm: newblock})
480
+ newblock_mid._grid_block._grid_mid = newblock
477
481
 
478
482
  for var in mesh_vars:
479
483
  gid = var.grid_id
@@ -481,10 +485,12 @@ class BlockList:
481
485
  var._grid = mesh_id_map[gid]
482
486
 
483
487
  def __del__(self):
484
- self._clib.sdf_stack_destroy.argtypes = [ct.c_void_p]
485
- self._clib.sdf_close.argtypes = [ct.c_void_p]
486
- self._clib.sdf_stack_destroy(self._handle)
487
- self._clib.sdf_close(self._handle)
488
+ if self._handle:
489
+ self._clib.sdf_stack_destroy.argtypes = [ct.c_void_p]
490
+ self._clib.sdf_close.argtypes = [ct.c_void_p]
491
+ self._clib.sdf_stack_destroy(self._handle)
492
+ self._clib.sdf_close(self._handle)
493
+ self._handle = None
488
494
 
489
495
  @property
490
496
  def name_dict(self):
@@ -600,6 +606,11 @@ class BlockPlainVariable(Block):
600
606
  """Associated mesh"""
601
607
  return self._grid
602
608
 
609
+ @property
610
+ def grid_mid(self):
611
+ """Associated median mesh"""
612
+ return self._grid._grid_mid
613
+
603
614
  @property
604
615
  def grid_id(self):
605
616
  """Associated mesh id"""
@@ -901,7 +912,10 @@ def get_header(h):
901
912
 
902
913
 
903
914
  def get_run_info(block):
904
- from datetime import datetime
915
+ import datetime
916
+ from datetime import datetime as dtm
917
+
918
+ utc = datetime.timezone.utc
905
919
 
906
920
  h = ct.cast(block.data, ct.POINTER(RunInfo)).contents
907
921
  d = {}
@@ -910,9 +924,9 @@ def get_run_info(block):
910
924
  d["sha1sum"] = h.sha1sum.decode()
911
925
  d["compile_machine"] = h.compile_machine.decode()
912
926
  d["compile_flags"] = h.compile_flags.decode()
913
- d["compile_date"] = datetime.utcfromtimestamp(h.compile_date).strftime("%c")
914
- d["run_date"] = datetime.utcfromtimestamp(h.run_date).strftime("%c")
915
- d["io_data"] = datetime.utcfromtimestamp(h.io_date).strftime("%c")
927
+ d["compile_date"] = dtm.fromtimestamp(h.compile_date, utc).strftime("%c")
928
+ d["run_date"] = dtm.fromtimestamp(h.run_date, utc).strftime("%c")
929
+ d["io_data"] = dtm.fromtimestamp(h.io_date, utc).strftime("%c")
916
930
  return d
917
931
 
918
932
 
sdfr/_commit_info.py CHANGED
@@ -1,2 +1,2 @@
1
- __commit_date__ = "Tue Jun 10 10:08:15 2025 +0100"
2
- __commit_id__ = "78518bb920d66415e43857a26b0e7f914bd05da1"
1
+ __commit_date__ = "Fri Jun 20 12:58:42 2025 +0100"
2
+ __commit_id__ = "64516dfe112baa107ced7cda226188b3db02ea7d"
sdfr/sdf_helper.py CHANGED
@@ -888,7 +888,7 @@ def plot1d(
888
888
  if title:
889
889
  subplot.set_title(get_title(var), fontsize="large", y=1.03)
890
890
 
891
- figure.set_tight_layout(True)
891
+ figure.set_layout_engine("tight")
892
892
  figure.canvas.draw()
893
893
 
894
894
 
@@ -997,7 +997,7 @@ def plot_path(
997
997
  elif figure is None:
998
998
  figure = subplot.figure
999
999
  subplot.axis(plot_path.axis)
1000
- figure.set_tight_layout(True)
1000
+ figure.set_layout_engine("tight")
1001
1001
  figure.canvas.draw()
1002
1002
  return
1003
1003
 
@@ -1251,7 +1251,7 @@ def plot_path(
1251
1251
  subplot.axis(lim)
1252
1252
 
1253
1253
  if update:
1254
- figure.set_tight_layout(True)
1254
+ figure.set_layout_engine("tight")
1255
1255
  figure.canvas.draw()
1256
1256
 
1257
1257
 
@@ -1300,6 +1300,11 @@ def plot_rays(var, skip=1, rays=None, **kwargs):
1300
1300
  kwargs["hold"] = True
1301
1301
  return
1302
1302
 
1303
+ if rays:
1304
+ ray_list = [var.data[i] for i in rays]
1305
+ else:
1306
+ ray_list = var.data[ray_slice]
1307
+
1303
1308
  if not isinstance(v, sdf.BlockLagrangianMesh):
1304
1309
  k = "cbar_label"
1305
1310
  if k not in kwargs or (
@@ -1311,30 +1316,26 @@ def plot_rays(var, skip=1, rays=None, **kwargs):
1311
1316
  k0 = "vmin"
1312
1317
  k1 = "vmax"
1313
1318
  k = "vrange"
1314
- if k not in kwargs and not (k0 in kwargs and k1 in kwargs):
1315
- v = var.data[0]
1316
- vmin = v.data.min()
1317
- vmax = v.data.max()
1318
- if rays:
1319
- ray_list = [var.data[i] for i in rays]
1320
- else:
1321
- ray_list = var.data[ray_slice]
1319
+ vmin, vmax = 1e99, -1e99
1320
+ if (
1321
+ k not in kwargs
1322
+ and not (k0 in kwargs and k1 in kwargs)
1323
+ and len(ray_list) > 0
1324
+ ):
1322
1325
  for v in ray_list:
1323
- vmin = min(vmin, v.data.min())
1324
- vmax = max(vmax, v.data.max())
1325
- if k0 not in kwargs:
1326
- kwargs[k0] = vmin
1327
- if k1 not in kwargs:
1328
- kwargs[k1] = vmax
1326
+ if len(v.data) > 0:
1327
+ vmin = min(vmin, v.data.min())
1328
+ vmax = max(vmax, v.data.max())
1329
1329
 
1330
- if rays:
1331
- ray_list = [var.data[i] for i in rays]
1332
- else:
1333
- ray_list = var.data[ray_slice]
1330
+ if k0 not in kwargs:
1331
+ kwargs[k0] = vmin
1332
+ if k1 not in kwargs:
1333
+ kwargs[k1] = vmax
1334
1334
 
1335
1335
  for v in ray_list:
1336
- plot_auto(v, update=False, **kwargs)
1337
- kwargs["hold"] = True
1336
+ if len(v.data) > 0:
1337
+ plot_auto(v, update=False, **kwargs)
1338
+ kwargs["hold"] = True
1338
1339
 
1339
1340
  plot_auto(var.data[0], axis_only=True, **kwargs)
1340
1341
  kwargs["hold"] = True
@@ -1635,7 +1636,7 @@ def plot2d_array(
1635
1636
  cbar.set_label(var_label, fontsize="large", x=1.2)
1636
1637
  figure.canvas.draw()
1637
1638
 
1638
- figure.set_tight_layout(True)
1639
+ figure.set_layout_engine("tight")
1639
1640
  figure.canvas.draw()
1640
1641
 
1641
1642
 
@@ -1959,7 +1960,7 @@ def plot_levels(
1959
1960
  # gs.update(right=1-tw/fw)
1960
1961
  # ax.set_position([box.x0, box.y0, box.width + bw, box.height])
1961
1962
  else:
1962
- fig.set_tight_layout(True)
1963
+ fig.set_layout_engine("tight")
1963
1964
  plt.draw()
1964
1965
 
1965
1966
 
@@ -2036,14 +2037,8 @@ def getdata(fname, wkd=None, verbose=True, squeeze=False):
2036
2037
  except:
2037
2038
  pass
2038
2039
 
2039
- sdfdict = {}
2040
- for key, value in data.__dict__.items():
2041
- if hasattr(value, "id"):
2042
- sdfdict[value.id] = value
2043
- else:
2044
- sdfdict[key] = value
2040
+ sdfdict = data._block_ids
2045
2041
 
2046
- fdict = {}
2047
2042
  table = {"time": "t"}
2048
2043
  k = "Header"
2049
2044
  if k in sdfdict:
@@ -2054,7 +2049,6 @@ def getdata(fname, wkd=None, verbose=True, squeeze=False):
2054
2049
  var = h[k]
2055
2050
  if verbose:
2056
2051
  print(key + str(np.shape(var)) + " = " + k)
2057
- fdict[key] = var
2058
2052
  globals()[key] = var
2059
2053
  builtins.__dict__[key] = var
2060
2054
 
@@ -2109,39 +2103,10 @@ def getdata(fname, wkd=None, verbose=True, squeeze=False):
2109
2103
  dims = str(tuple(int(i) for i in sdfdict[k].dims))
2110
2104
  if verbose:
2111
2105
  print(key + dims + " = " + k)
2112
- fdict[key] = var
2113
- globals()[key] = var
2114
- builtins.__dict__[key] = var
2115
-
2116
- k = "grid"
2117
- if k in sdfdict:
2118
- vargrid = sdfdict[k]
2119
- grid = vargrid
2120
- keys = "x", "y", "z"
2121
- for n in range(np.size(vargrid.dims)):
2122
- key = keys[n]
2123
- var = vargrid.data[n]
2124
- dims = str(tuple(int(i) for i in sdfdict[k].dims))
2125
- if verbose:
2126
- print(key + dims + " = " + k)
2127
- fdict[key] = var
2128
2106
  globals()[key] = var
2129
2107
  builtins.__dict__[key] = var
2130
2108
 
2131
- k = "grid_mid"
2132
- if k in sdfdict:
2133
- vargrid = sdfdict[k]
2134
- grid_mid = vargrid
2135
- keys = "xc", "yc", "zc"
2136
- for n in range(np.size(vargrid.dims)):
2137
- key = keys[n]
2138
- var = vargrid.data[n]
2139
- dims = str(tuple(int(i) for i in sdfdict[k].dims))
2140
- if verbose:
2141
- print(key + dims + " = " + k)
2142
- fdict[key] = var
2143
- globals()[key] = var
2144
- builtins.__dict__[key] = var
2109
+ _get_grid(data)
2145
2110
 
2146
2111
  # Export particle arrays
2147
2112
  for k, value in data.__dict__.items():
@@ -2158,7 +2123,6 @@ def getdata(fname, wkd=None, verbose=True, squeeze=False):
2158
2123
  if isinstance(value, sdf.BlockPointVariable):
2159
2124
  if verbose:
2160
2125
  print(key + dims + " = " + value.name)
2161
- fdict[key] = var
2162
2126
  globals()[key] = var
2163
2127
  builtins.__dict__[key] = var
2164
2128
  else:
@@ -2171,7 +2135,6 @@ def getdata(fname, wkd=None, verbose=True, squeeze=False):
2171
2135
  dims = str(tuple(int(i) for i in value.dims))
2172
2136
  if verbose:
2173
2137
  print(gkey + dims + " = " + k + " " + keys[n])
2174
- fdict[gkey] = var
2175
2138
  globals()[gkey] = var
2176
2139
  builtins.__dict__[gkey] = var
2177
2140
 
@@ -2179,6 +2142,33 @@ def getdata(fname, wkd=None, verbose=True, squeeze=False):
2179
2142
  return data
2180
2143
 
2181
2144
 
2145
+ def _get_grid(data, verbose=False):
2146
+ sdfdict = {}
2147
+ if hasattr(data, "_block_ids"):
2148
+ sdfdict = data._block_ids
2149
+
2150
+ grids = "grid", "grid_mid"
2151
+ grid_keys = ["x", "y", "z"], ["xc", "yc", "zc"]
2152
+
2153
+ for key, gkeys in zip(grids, grid_keys):
2154
+ vargrid = None
2155
+ if hasattr(data, key):
2156
+ vargrid = data.grid
2157
+ elif key in sdfdict:
2158
+ vargrid = sdfdict[key]
2159
+
2160
+ if vargrid:
2161
+ globals()[key] = vargrid
2162
+ for n in range(np.size(vargrid.dims)):
2163
+ key = gkeys[n]
2164
+ var = vargrid.data[n]
2165
+ dims = str(tuple(int(i) for i in vargrid.dims))
2166
+ if verbose:
2167
+ print(key + dims + " = " + k)
2168
+ globals()[key] = var
2169
+ builtins.__dict__[key] = var
2170
+
2171
+
2182
2172
  def ogrid(skip=None, **kwargs):
2183
2173
  global x, y, mult_x, mult_y
2184
2174
  if np.ndim(x) == 1:
@@ -2200,8 +2190,15 @@ def ogrid(skip=None, **kwargs):
2200
2190
 
2201
2191
 
2202
2192
  def plotgrid(fname=None, iso=None, title=True):
2203
- if isinstance(fname, sdf.BlockList) or isinstance(fname, dict):
2193
+ global grid
2194
+ if (
2195
+ isinstance(fname, sdf.BlockList)
2196
+ or isinstance(fname, dict)
2197
+ or hasattr(fname, "grid")
2198
+ ):
2204
2199
  dat = fname
2200
+ _get_grid(dat)
2201
+ title = False
2205
2202
  elif fname is not None:
2206
2203
  dat = getdata(fname, verbose=verbose)
2207
2204
 
@@ -2225,7 +2222,7 @@ def plotgrid(fname=None, iso=None, title=True):
2225
2222
  plt.draw()
2226
2223
 
2227
2224
  fig = plt.gcf()
2228
- fig.set_tight_layout(True)
2225
+ fig.set_layout_engine("tight")
2229
2226
  plt.draw()
2230
2227
 
2231
2228
 
sdfr/sdfc_shared.dll CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sdfr
3
- Version: 1.4.3
3
+ Version: 1.4.5
4
4
  Summary: Python module for processing SDF files
5
5
  Author-Email: Keith Bennett <k.bennett@warwick.ac.uk>
6
6
  Requires-Dist: numpy
@@ -0,0 +1,12 @@
1
+ sdfr/__init__.py,sha256=OxcJAJ0ADoE54vgqMQqxhoFWyU2ldb3fb-_LFyeZZfQ,1209
2
+ sdfr/_commit_info.py,sha256=9HQrcuM5QHd6sjf7BoxBdHycFer6VVwNvPkFa5hpc5c,112
3
+ sdfr/loadlib.py,sha256=xxp5MX-u7ZHIc12mcvN-y8L5UEjY-aEgINj2r-1swWk,2358
4
+ sdfr/SDF.py,sha256=Dm1Mf5Sr8Cf-J9H5wdPCAW5ywlqQFi9_nbmBSS86CV0,31638
5
+ sdfr/sdf_helper.py,sha256=EnwHKG0cHHkplE9wKAIdBb-XAhqvVbsG0aDea_6S3zU,63439
6
+ sdfr/sdfc_shared.dll,sha256=WPq5yRz8w3HqNwgWCeGjMCDZbmmePeRFeAmdDB9gnd8,102400
7
+ sdfr/sdfc_shared.lib,sha256=3tq7FEdM0AIZ5XN6oilKzMfrbTk29r7JWvPq5UQpJw0,3652
8
+ sdfr-1.4.5.dist-info/METADATA,sha256=mL1lsi_LnAljuFXLuP04YNi21rx8kuxnn4zWOKYHOaM,370
9
+ sdfr-1.4.5.dist-info/WHEEL,sha256=2gMiQ9URLdcVSVn--wWLd3wXucnRxZtbu4ekGokbEAk,99
10
+ sdfr-1.4.5.dist-info/licenses/LICENSE,sha256=gpLeavs1KxgJFrpL_uVDh0MoDvPfJoZ89A5dSCl4P5U,1652
11
+ sdfr-1.4.5.dist-info/licenses/LICENSE_README.txt,sha256=KlBSoHArwoXbiygx3IJTjtgM7hLNO9o8ZMlZV77nrXs,235
12
+ sdfr-1.4.5.dist-info/RECORD,,
@@ -1,12 +0,0 @@
1
- sdfr/__init__.py,sha256=OxcJAJ0ADoE54vgqMQqxhoFWyU2ldb3fb-_LFyeZZfQ,1209
2
- sdfr/_commit_info.py,sha256=m_JZRhDwnK9FYuMipiiKsSYgntEAJH7hyVCQZetAD-c,112
3
- sdfr/loadlib.py,sha256=xxp5MX-u7ZHIc12mcvN-y8L5UEjY-aEgINj2r-1swWk,2358
4
- sdfr/SDF.py,sha256=bt4DOuOTmbc_lvtTBz7khVtbaFStiO6RKN2FAq3DjrI,31144
5
- sdfr/sdf_helper.py,sha256=cI6F9531e7hbp6oe_hnjPi9pdl6QddsTbohqlNdyg6c,63755
6
- sdfr/sdfc_shared.dll,sha256=Ruh6tS3GlTuhk3GO-lFOja7mKAFjqe9emE7962nL3Vg,102400
7
- sdfr/sdfc_shared.lib,sha256=3tq7FEdM0AIZ5XN6oilKzMfrbTk29r7JWvPq5UQpJw0,3652
8
- sdfr-1.4.3.dist-info/METADATA,sha256=GTu3uSmFPTzK-K8j6cSPzDZHP7XzslpP6v1KnVi6cZU,370
9
- sdfr-1.4.3.dist-info/WHEEL,sha256=2gMiQ9URLdcVSVn--wWLd3wXucnRxZtbu4ekGokbEAk,99
10
- sdfr-1.4.3.dist-info/licenses/LICENSE,sha256=gpLeavs1KxgJFrpL_uVDh0MoDvPfJoZ89A5dSCl4P5U,1652
11
- sdfr-1.4.3.dist-info/licenses/LICENSE_README.txt,sha256=KlBSoHArwoXbiygx3IJTjtgM7hLNO9o8ZMlZV77nrXs,235
12
- sdfr-1.4.3.dist-info/RECORD,,
File without changes