[h5py] 23/455: h5s additions

Ghislain Vaillant ghisvail-guest at moszumanska.debian.org
Thu Jul 2 18:19:13 UTC 2015


This is an automated email from the git hooks/post-receive script.

ghisvail-guest pushed a commit to annotated tag 1.3.0
in repository h5py.

commit 488100893b270ed7a061eaca9189188952177f37
Author: andrewcollette <andrew.collette at gmail.com>
Date:   Thu May 22 18:32:10 2008 +0000

    h5s additions
---
 h5py/h5s.pxd | 54 +++++++++++++++++++++++++++++++++--------
 h5py/h5s.pyx | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 122 insertions(+), 11 deletions(-)

diff --git a/h5py/h5s.pxd b/h5py/h5s.pxd
index 27c3856..919d2fa 100644
--- a/h5py/h5s.pxd
+++ b/h5py/h5s.pxd
@@ -54,17 +54,51 @@ cdef extern from "hdf5.h":
     H5S_SEL_N		= 4	        #/*THIS MUST BE LAST		*/
 
 
-  # --- Dataspace operations --------------------------------------------------
-  hid_t H5Screate(H5S_class_t type)
-  hid_t H5Screate_simple(int rank, hsize_t dims[], hsize_t maxdims[])
-  int H5Sget_simple_extent_ndims(hid_t space_id)
-  int H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[],
-                                hsize_t maxdims[])
+  # --- Basic operations ------------------------------------------------------
+  hid_t     H5Screate(H5S_class_t type)
+  hid_t     H5Scopy(hid_t space_id  )
+  herr_t    H5Sclose(hid_t space_id)
+
+  # --- Simple dataspace operations -------------------------------------------
+  hid_t     H5Screate_simple(int rank, hsize_t dims[], hsize_t maxdims[])
+  htri_t    H5Sis_simple(hid_t space_id)
+  herr_t    H5Soffset_simple(hid_t space_id, hssize_t *offset  )
+
+  int       H5Sget_simple_extent_ndims(hid_t space_id)
+  int       H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[], hsize_t maxdims[])
+  hssize_t  H5Sget_simple_extent_npoints(hid_t space_id)
+  H5S_class_t H5Sget_simple_extent_type(hid_t space_id)
+
+  # --- Extents ---------------------------------------------------------------
+  herr_t    H5Sextent_copy(hid_t dest_space_id, hid_t source_space_id  )
+  herr_t    H5Sset_extent_simple(hid_t space_id, int rank, 
+                hsize_t *current_size, hsize_t *maximum_size  )
+  herr_t    H5Sset_extent_none(hid_t space_id)
+
+  # --- Dataspace selection ---------------------------------------------------
+  H5S_sel_type H5Sget_select_type(hid_t space_id)
+  hssize_t  H5Sget_select_npoints(hid_t space_id)
+  hssize_t  H5Sget_select_hyper_nblocks(hid_t space_id  )
+  herr_t    H5Sget_select_hyper_blocklist(hid_t space_id, 
+                hsize_t startblock, hsize_t numblocks, hsize_t *buf  )
+  hssize_t  H5Sget_select_elem_npoints(hid_t space_id  )
+  herr_t    H5Sget_select_elem_pointlist(hid_t space_id, hsize_t startpoint, 
+                hsize_t numpoints, hsize_t *buf)
+  herr_t    H5Sget_select_bounds(hid_t space_id, hsize_t *start, hsize_t *end)
+
+  herr_t    H5Sselect_elements(hid_t space_id, H5S_seloper_t op, 
+                size_t num_elements, hsize_t *coord[] )
+  herr_t    H5Sselect_all(hid_t space_id)
+  herr_t    H5Sselect_none(hid_t space_id)
+  htri_t    H5Sselect_valid(hid_t space_id)
+
   herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
                              hsize_t start[], hsize_t _stride[],
                              hsize_t count[], hsize_t _block[])
-  herr_t H5Sclose(hid_t space_id)
-  herr_t H5Sget_select_bounds(hid_t space_id, hsize_t *start, hsize_t *end)
-  herr_t H5Sselect_none(hid_t space_id)
-  H5S_class_t H5Sget_simple_extent_type(hid_t space_id)
+
+
+
+
+
+
 
diff --git a/h5py/h5s.pyx b/h5py/h5s.pyx
index e1a5fe2..063908c 100644
--- a/h5py/h5s.pyx
+++ b/h5py/h5s.pyx
@@ -20,7 +20,7 @@
 
 # Pyrex compile-time imports
 from defs_c   cimport malloc, free
-from h5  cimport herr_t, hid_t, size_t, hsize_t
+from h5  cimport herr_t, htri_t, hid_t, size_t, hsize_t, hssize_t
 from utils cimport tuple_to_dims, dims_to_tuple
 
 # Runtime imports
@@ -83,6 +83,19 @@ def create(int class_code):
         raise DataspaceError("Failed to create dataspace of class %d" %d)
     return retval
 
+def copy(hid_t space_id):
+    """ (INT space_id) => INT new_space_id
+
+        Create a new copy of an existing dataspace.
+    """
+    cdef hid_t retval
+    retval = H5Scopy(space_id)
+    if retval < 0:
+        raise DataspaceError("Failed to copy dataspace %d" % space_id)
+    return retval
+
+# === Simple dataspaces =======================================================
+
 def create_simple(object dims_tpl, object max_dims_tpl=None):
     """ (TUPLE dims_tpl, TUPLE max_dims_tpl) => INT new_space_id
 
@@ -125,6 +138,59 @@ def create_simple(object dims_tpl, object max_dims_tpl=None):
 
     return space_id
 
+def is_simple(hid_t space_id):
+    """ (INT space_id) => BOOL is_simple
+
+        Determine if an existing dataspace is "simple".  This function is
+        rather silly, as all HDF5 dataspaces are (currently) simple.
+    """
+    cdef htri_t retval
+    retval = H5Sis_simple(space_id)
+    if retval < 0:
+        raise DataspaceError("Failed to determine simplicity of dataspace %d" % space_id)
+    return bool(retval)
+
+def offset_simple(hid_t space_id, object offset):
+    """ (INT space_id, TUPLE offset or None)
+
+        Set the offset of a dataspace.  The length of the given tuple must
+        match the rank of the dataspace; ValueError will be raised otherwise.
+        If None is provided instead of a tuple, the offsets on all axes 
+        will be set to 0.
+    """
+    cdef htri_t simple
+    cdef int rank
+    cdef hssize_t *dims
+    cdef herr_t retval
+    dims = NULL
+
+    try:
+        simple = H5Sis_simple(space_id)
+        if simple < 0:
+            raise DataspaceError("%d is not a simple dataspace" % space_id)
+
+        if offset is None:
+            dims = NULL
+        else:
+            rank = H5Sget_simple_extent_ndims(space_id)
+            if rank < 0:
+                raise DataspaceError("Can't determine rank of dataspace %d" % space_id)
+
+            if len(offset) != rank:
+                raise ValueError("Length of offset tuple must match dataspace rank %d (got %s)" % (rank, repr(offset)))
+
+            # why the hell are they using hssize_t?
+            dims = <hssize_t*>malloc(sizeof(hssize_t)*rank)
+            for i from 0<=i<rank:
+                dims[i] = offset[i]
+
+        retval = H5Soffset_simple(space_id, dims)
+        if retval < 0:
+            raise DataspaceError("Failed to set offset on dataspace %d" % space_id)
+    finally:
+        if dims != NULL:
+            free(dims)
+
 def get_simple_extent_ndims(hid_t space_id):
     """ (INT space_id) => INT rank
         
@@ -171,6 +237,17 @@ def get_simple_extent_dims(hid_t space_id, int maxdims=0):
 
     return dims_tpl
     
+def get_simple_extent_npoints(hid_t space_id):
+    """ (INT space_id) => LONG npoints
+
+        Determine the total number of elements in a dataspace.
+    """
+    cdef hssize_t retval
+    retval = H5Sget_simple_extent_npoints(space_id)
+    if retval < 0:
+        raise DataspaceError("Failed to determine number of points in dataspace %d" % space_id)
+    return retval
+
 def get_simple_extent_type(hid_t space_id):
     """ (INT space_id) => INT class_code
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/h5py.git



More information about the debian-science-commits mailing list