sdfr 1.2.1__py3-none-macosx_11_0_arm64.whl → 1.4.0__py3-none-macosx_11_0_arm64.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
@@ -377,6 +377,7 @@ class BlockList:
377
377
  block._blocklist = self
378
378
  blocktype = block.blocktype
379
379
  newblock = None
380
+ newblock_mid = None
380
381
  name = get_member_name(block.name)
381
382
  if blocktype == SdfBlockType.SDF_BLOCKTYPE_ARRAY:
382
383
  newblock = BlockArray(block)
@@ -413,8 +414,10 @@ class BlockList:
413
414
  elif blocktype == SdfBlockType.SDF_BLOCKTYPE_DATABLOCK:
414
415
  newblock = BlockData(block)
415
416
  elif blocktype == SdfBlockType.SDF_BLOCKTYPE_LAGRANGIAN_MESH:
416
- newblock = BlockLagrangianMesh(block)
417
- meshes.append(newblock)
417
+ if block.datatype_out != 0:
418
+ newblock = BlockLagrangianMesh(block)
419
+ newblock_mid = block
420
+ meshes.append(newblock)
418
421
  elif blocktype == SdfBlockType.SDF_BLOCKTYPE_NAMEVALUE:
419
422
  newblock = BlockNameValue(block)
420
423
  elif (
@@ -424,8 +427,10 @@ class BlockList:
424
427
  newblock = BlockPlainVariable(block)
425
428
  mesh_vars.append(newblock)
426
429
  elif blocktype == SdfBlockType.SDF_BLOCKTYPE_PLAIN_MESH:
427
- newblock = BlockPlainMesh(block)
428
- meshes.append(newblock)
430
+ if block.datatype_out != 0:
431
+ newblock = BlockPlainMesh(block)
432
+ newblock_mid = block
433
+ meshes.append(newblock)
429
434
  elif (
430
435
  blocktype == SdfBlockType.SDF_BLOCKTYPE_POINT_DERIVED
431
436
  or blocktype == SdfBlockType.SDF_BLOCKTYPE_POINT_VARIABLE
@@ -437,6 +442,11 @@ class BlockList:
437
442
  meshes.append(newblock)
438
443
  elif blocktype == SdfBlockType.SDF_BLOCKTYPE_RUN_INFO:
439
444
  self.Run_info = get_run_info(block)
445
+ elif blocktype == SdfBlockType.SDF_BLOCKTYPE_STATION:
446
+ sdict = BlockStation(block, name)
447
+ self.__dict__.update({"StationBlocks": sdict})
448
+ self._block_ids.update({block.id.decode(): sdict})
449
+ self._block_names.update({block.name.decode(): sdict})
440
450
  else:
441
451
  # Block not supported
442
452
  # print(name,SdfBlockType(blocktype).name)
@@ -447,6 +457,22 @@ class BlockList:
447
457
  self._block_names.update({block.name.decode(): newblock})
448
458
  block = block.next
449
459
 
460
+ if newblock_mid is not None:
461
+ block_mid = newblock_mid
462
+ block_mid._handle = h
463
+ block_mid._blocklist = self
464
+ blocktype = block_mid.blocktype
465
+ name = get_member_name(block_mid.name) + "_mid"
466
+ if blocktype == SdfBlockType.SDF_BLOCKTYPE_LAGRANGIAN_MESH:
467
+ newblock = BlockLagrangianMesh(block_mid, mid=True)
468
+ elif blocktype == SdfBlockType.SDF_BLOCKTYPE_PLAIN_MESH:
469
+ newblock = BlockPlainMesh(block_mid, mid=True)
470
+ self.__dict__[name] = newblock
471
+ nm = block_mid.id.decode() + "_mid"
472
+ self._block_ids.update({nm: newblock})
473
+ nm = block_mid.name.decode() + "_mid"
474
+ self._block_names.update({nm: newblock})
475
+
450
476
  for var in mesh_vars:
451
477
  gid = var.grid_id
452
478
  for mesh in meshes:
@@ -500,7 +526,7 @@ class Block:
500
526
  dtype = self._datatype
501
527
  if dtype == np.byte:
502
528
  dtype = np.dtype("|S1")
503
- totype = _ct_datatypes[self._contents.datatype]
529
+ totype = _ct_datatypes[self._contents.datatype_out]
504
530
  cast = ct.cast(data, ct.POINTER(totype))
505
531
  buf = buffer_from_memory(cast, blen)
506
532
  self._owndata = False
@@ -598,8 +624,9 @@ class BlockPlainVariable(Block):
598
624
  class BlockPlainMesh(Block):
599
625
  """Plain mesh block"""
600
626
 
601
- def __init__(self, block):
627
+ def __init__(self, block, mid=False):
602
628
  super().__init__(block)
629
+ self._mid = mid
603
630
  self._data = None
604
631
  self._units = tuple(
605
632
  [block.dim_units[i].decode() for i in range(block.ndims)]
@@ -608,6 +635,11 @@ class BlockPlainMesh(Block):
608
635
  [block.dim_labels[i].decode() for i in range(block.ndims)]
609
636
  )
610
637
  self._mult = None
638
+ self._bdims = self._dims
639
+ if mid:
640
+ self._id += "_mid"
641
+ self._name += "_mid"
642
+ self._dims = tuple([i - 1 for i in self._dims])
611
643
  if bool(block.dim_mults):
612
644
  self._mult = tuple(block.dim_mults[: block.ndims])
613
645
  if bool(block.extents):
@@ -620,9 +652,11 @@ class BlockPlainMesh(Block):
620
652
  clib = self._handle._clib
621
653
  clib.sdf_helper_read_data(self._handle, self._contents)
622
654
  grids = []
623
- for i, d in enumerate(self.dims):
655
+ for i, d in enumerate(self._bdims):
624
656
  blen = np.dtype(self._datatype).itemsize * d
625
657
  array = self._numpy_from_buffer(self._contents.grids[i], blen)
658
+ if self._mid:
659
+ array = 0.5 * (array[1:] + array[:-1])
626
660
  grids.append(array)
627
661
  self._data = tuple(grids)
628
662
  return self._data
@@ -663,12 +697,20 @@ class BlockLagrangianMesh(BlockPlainMesh):
663
697
  clib = self._handle._clib
664
698
  clib.sdf_helper_read_data(self._handle, self._contents)
665
699
  blen = np.dtype(self._datatype).itemsize
666
- for d in self.dims:
700
+ for d in self._bdims:
667
701
  blen *= d
668
702
  grids = []
669
- for i, d in enumerate(self.dims):
703
+ for i, d in enumerate(self._bdims):
670
704
  array = self._numpy_from_buffer(self._contents.grids[i], blen)
671
- array = array.reshape(self.dims, order="F")
705
+ array = array.reshape(self._bdims, order="F")
706
+ if self._mid:
707
+ nn = len(self._bdims)
708
+ for j in range(nn):
709
+ s1 = nn * [slice(None)]
710
+ s2 = nn * [slice(None)]
711
+ s1[j] = slice(1, None)
712
+ s2[j] = slice(None, -1)
713
+ array = 0.5 * (array[tuple(s1)] + array[tuple(s2)])
672
714
  grids.append(array)
673
715
  self._data = tuple(grids)
674
716
  return self._data
@@ -766,6 +808,35 @@ class BlockData(Block):
766
808
  return self._mimetype
767
809
 
768
810
 
811
+ def BlockStation(block, name):
812
+ """Station block"""
813
+ sdict = dict(
814
+ stations=None,
815
+ step=block.step,
816
+ step_increment=block.step_increment,
817
+ time=block.time,
818
+ time_increment=block.time_increment,
819
+ )
820
+
821
+ tdict = {}
822
+ for i in range(block.nstations):
823
+ varnames = []
824
+ for j in range(block.station_nvars[i]):
825
+ varnames.append(block.material_names[i + j + 1].decode())
826
+ stat = dict(variables=varnames)
827
+ stat.update({"station_move": bool(block.station_move[i])})
828
+ if block.ndims > 0:
829
+ stat.update({"station_x": block.station_x[i]})
830
+ if block.ndims > 1:
831
+ stat.update({"station_y": block.station_y[i]})
832
+ if block.ndims > 2:
833
+ stat.update({"station_z": block.station_z[i]})
834
+ tdict.update({block.station_names[i].decode(): stat})
835
+ sdict.update({"stations": tdict})
836
+
837
+ return {name: sdict}
838
+
839
+
769
840
  class BlockStitched(Block):
770
841
  """Stitched block"""
771
842
 
sdfr/_commit_info.py CHANGED
@@ -1,2 +1,2 @@
1
- __commit_date__ = "Thu May 1 13:59:33 2025 +0100"
2
- __commit_id__ = "6700eab92d2526d52b012861672b0b9e6ff57975"
1
+ __commit_date__ = "Tue May 20 13:50:42 2025 +0100"
2
+ __commit_id__ = "f5e130988f5c6f06f9fb34a23cefc953857a3908"
sdfr/libsdfc_shared.dylib CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sdfr
3
- Version: 1.2.1
3
+ Version: 1.4.0
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,11 @@
1
+ sdfr/_commit_info.py,sha256=xWby5pBHkz40Df4UMHZ9hAQrFZmEhUpY0EwLKSy5QyE,110
2
+ sdfr/sdf_helper.py,sha256=Fdod2nwFih-5h_Vpy2sq-sHPhAXOwKM-esfmQWGgbX4,61359
3
+ sdfr/__init__.py,sha256=BAmluKbA8UkwlUTWKxjNyaSfx9xgTUaXovnSHQvr0qo,1111
4
+ sdfr/SDF.py,sha256=-MbMqvOzQE3ifhN0gn_ulS2sXh3ijUT1GTIPgBI-hE0,30084
5
+ sdfr/loadlib.py,sha256=dr5jYKAjAhW0jKCzudphV0D4e3-6lxAufsTVJHKYcZ8,2262
6
+ sdfr/libsdfc_shared.dylib,sha256=cxT9NMCj3MC5rKEL8Irn_DAey4raec_wuKNg2NwdFw0,173176
7
+ sdfr-1.4.0.dist-info/RECORD,,
8
+ sdfr-1.4.0.dist-info/WHEEL,sha256=HTrPOApIPwPBm17ZPxRHsFBiLMv7HIyEx-CtG-rvYPM,111
9
+ sdfr-1.4.0.dist-info/METADATA,sha256=lkxSLGXDi0cJXyueMbl5CWZelo3inMyLBplq13u0Sco,370
10
+ sdfr-1.4.0.dist-info/licenses/LICENSE,sha256=Qu02Dqb67LYxdjaA0WVeZMwzcDFF_bSearhX7yzLCJQ,1621
11
+ sdfr-1.4.0.dist-info/licenses/LICENSE_README.txt,sha256=kU0OIq6O4_qqBwDWpJrPw2nNLWDCDI7oJGCe_JBF8j0,231
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: scikit-build-core 0.11.2
2
+ Generator: scikit-build-core 0.11.3
3
3
  Root-Is-Purelib: false
4
4
  Tag: py3-none-macosx_11_0_arm64
5
5
 
@@ -1,11 +0,0 @@
1
- sdfr-1.2.1.dist-info/RECORD,,
2
- sdfr-1.2.1.dist-info/WHEEL,sha256=IoXaaiGmdlaXKMxcV8qzyNxnbZ83Rlz8PkPkhmUIHwY,111
3
- sdfr-1.2.1.dist-info/METADATA,sha256=OJsufcYrnuBoRhFTlSGoxyCFyYWdyn5d-NvWUZU1Fis,370
4
- sdfr-1.2.1.dist-info/licenses/LICENSE,sha256=Qu02Dqb67LYxdjaA0WVeZMwzcDFF_bSearhX7yzLCJQ,1621
5
- sdfr-1.2.1.dist-info/licenses/LICENSE_README.txt,sha256=kU0OIq6O4_qqBwDWpJrPw2nNLWDCDI7oJGCe_JBF8j0,231
6
- sdfr/_commit_info.py,sha256=03ZVB4oAczRjnbBxfcM7X1THxQ11Vm3B8mDqC61pz7s,109
7
- sdfr/sdf_helper.py,sha256=Fdod2nwFih-5h_Vpy2sq-sHPhAXOwKM-esfmQWGgbX4,61359
8
- sdfr/__init__.py,sha256=BAmluKbA8UkwlUTWKxjNyaSfx9xgTUaXovnSHQvr0qo,1111
9
- sdfr/SDF.py,sha256=99DkI2imulUnLTGKXTbx1PKK_l_osdYYTv_cudipsjM,27100
10
- sdfr/loadlib.py,sha256=dr5jYKAjAhW0jKCzudphV0D4e3-6lxAufsTVJHKYcZ8,2262
11
- sdfr/libsdfc_shared.dylib,sha256=AcHbxFqDjnjgKSvWhFJ16nnGjQU7Q-o9Eq91ZOXDeoA,173176