[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