h5py/1065.patch
2019-02-05 21:27:26 +01:00

593 lines
15 KiB
Diff

diff --git a/h5py/h5t.pyx b/h5py/h5t.pyx
index ff53509..e05cd74 100644
--- a/h5py/h5t.pyx
+++ b/h5py/h5t.pyx
@@ -253,9 +253,11 @@ def _get_available_ftypes():
available_ftypes[np.dtype(ftype).itemsize].append(ftype)
sorted_ftypes = []
+ seen_ftypes = set()
for size, ftypes in sorted(available_ftypes.items()):
for ftype in sorted(ftypes, key=cmp_ftype):
- if ftype not in sorted_ftypes:
+ if ftype not in seen_ftypes:
+ seen_ftypes.add(ftype)
sorted_ftypes.append((ftype, np.finfo(ftype), size))
return tuple(sorted_ftypes)
@@ -297,8 +299,8 @@ available_ftypes = _DeprecatedMapping(available_ftypes,
@with_phil
def create(int classtype, size_t size):
"""(INT classtype, UINT size) => TypeID
-
- Create a new HDF5 type object. Legal class values are
+
+ Create a new HDF5 type object. Legal class values are
COMPOUND and OPAQUE. Use enum_create for enums.
"""
@@ -323,7 +325,7 @@ def array_create(TypeID base not None, object dims_tpl):
"""(TypeID base, TUPLE dimensions) => TypeArrayID
Create a new array datatype, using and HDF5 parent type and
- dimensions given via a tuple of positive integers. "Unlimited"
+ dimensions given via a tuple of positive integers. "Unlimited"
dimensions are not allowed.
"""
cdef hsize_t rank
@@ -360,7 +362,7 @@ def vlen_create(TypeID base not None):
"""
return typewrap(H5Tvlen_create(base.id))
-
+
@with_phil
def decode(char* buf):
"""(STRING buf) => TypeID
@@ -405,7 +407,7 @@ cdef class TypeID(ObjectID):
return NotImplemented
if isinstance(other, TypeID):
truthval = self.equal(other)
-
+
if how == 2:
return truthval
return not truthval
@@ -439,7 +441,7 @@ cdef class TypeID(ObjectID):
"""
H5Tcommit2(group.id, name, self.id, pdefault(lcpl),
H5P_DEFAULT, H5P_DEFAULT)
-
+
@with_phil
def committed(self):
@@ -458,7 +460,7 @@ cdef class TypeID(ObjectID):
"""
return typewrap(H5Tcopy(self.id))
-
+
@with_phil
def equal(self, TypeID typeid):
"""(TypeID typeid) => BOOL
@@ -468,7 +470,7 @@ cdef class TypeID(ObjectID):
"""
return <bint>(H5Tequal(self.id, typeid.id))
-
+
@with_phil
def lock(self):
"""()
@@ -479,7 +481,7 @@ cdef class TypeID(ObjectID):
H5Tlock(self.id)
self.locked = 1
-
+
@with_phil
def get_class(self):
"""() => INT classcode
@@ -489,7 +491,7 @@ cdef class TypeID(ObjectID):
return <int>H5Tget_class(self.id)
- @with_phil
+ @with_phil
def set_size(self, size_t size):
"""(UINT size)
@@ -497,7 +499,7 @@ cdef class TypeID(ObjectID):
"""
H5Tset_size(self.id, size)
-
+
@with_phil
def get_size(self):
""" () => INT size
@@ -506,7 +508,7 @@ cdef class TypeID(ObjectID):
"""
return H5Tget_size(self.id)
-
+
@with_phil
def get_super(self):
"""() => TypeID
@@ -516,7 +518,7 @@ cdef class TypeID(ObjectID):
return typewrap(H5Tget_super(self.id))
- @with_phil
+ @with_phil
def detect_class(self, int classtype):
"""(INT classtype) => BOOL class_is_present
@@ -552,7 +554,7 @@ cdef class TypeID(ObjectID):
with phil:
return (type(self), (-1,), self.encode())
-
+
def __setstate__(self, char* state):
with phil:
self.id = H5Tdecode(<unsigned char*>state)
@@ -566,7 +568,7 @@ cdef class TypeArrayID(TypeID):
Represents an array datatype
"""
-
+
@with_phil
def get_array_ndims(self):
"""() => INT rank
@@ -575,7 +577,7 @@ cdef class TypeArrayID(TypeID):
"""
return H5Tget_array_ndims(self.id)
-
+
@with_phil
def get_array_dims(self):
"""() => TUPLE dimensions
@@ -583,7 +585,7 @@ cdef class TypeArrayID(TypeID):
Get the dimensions of the given array datatype as
a tuple of integers.
"""
- cdef hsize_t rank
+ cdef hsize_t rank
cdef hsize_t* dims = NULL
rank = H5Tget_array_dims(self.id, NULL, NULL)
@@ -611,7 +613,7 @@ cdef class TypeOpaqueID(TypeID):
Represents an opaque type
"""
-
+
@with_phil
def set_tag(self, char* tag):
"""(STRING tag)
@@ -621,7 +623,7 @@ cdef class TypeOpaqueID(TypeID):
"""
H5Tset_tag(self.id, tag)
-
+
@with_phil
def get_tag(self):
"""() => STRING tag
@@ -649,7 +651,7 @@ cdef class TypeStringID(TypeID):
String datatypes, both fixed and vlen.
"""
-
+
@with_phil
def is_variable_str(self):
"""() => BOOL is_variable
@@ -658,7 +660,7 @@ cdef class TypeStringID(TypeID):
"""
return <bint>(H5Tis_variable_str(self.id))
-
+
@with_phil
def get_cset(self):
"""() => INT character_set
@@ -667,7 +669,7 @@ cdef class TypeStringID(TypeID):
"""
return <int>H5Tget_cset(self.id)
-
+
@with_phil
def set_cset(self, int cset):
"""(INT character_set)
@@ -676,7 +678,7 @@ cdef class TypeStringID(TypeID):
"""
H5Tset_cset(self.id, <H5T_cset_t>cset)
-
+
@with_phil
def get_strpad(self):
"""() => INT padding_type
@@ -694,7 +696,7 @@ cdef class TypeStringID(TypeID):
"""
return <int>H5Tget_strpad(self.id)
-
+
@with_phil
def set_strpad(self, int pad):
"""(INT pad)
@@ -730,13 +732,13 @@ cdef class TypeVlenID(TypeID):
"""
Non-string vlen datatypes.
"""
-
+
cdef object py_dtype(self):
-
+
# get base type id
cdef TypeID base_type
base_type = self.get_super()
-
+
return special_dtype(vlen=base_type.dtype)
cdef class TypeTimeID(TypeID):
@@ -758,7 +760,7 @@ cdef class TypeReferenceID(TypeID):
"""
HDF5 object or region reference
"""
-
+
cdef object py_dtype(self):
if H5Tequal(self.id, H5T_STD_REF_OBJ):
return special_dtype(ref=Reference)
@@ -776,7 +778,7 @@ cdef class TypeAtomicID(TypeID):
Base class for atomic datatypes (float or integer)
"""
-
+
@with_phil
def get_order(self):
"""() => INT order
@@ -788,7 +790,7 @@ cdef class TypeAtomicID(TypeID):
"""
return <int>H5Tget_order(self.id)
-
+
@with_phil
def set_order(self, int order):
"""(INT order)
@@ -800,7 +802,7 @@ cdef class TypeAtomicID(TypeID):
"""
H5Tset_order(self.id, <H5T_order_t>order)
-
+
@with_phil
def get_precision(self):
"""() => UINT precision
@@ -809,16 +811,16 @@ cdef class TypeAtomicID(TypeID):
"""
return H5Tget_precision(self.id)
-
+
@with_phil
def set_precision(self, size_t precision):
"""(UINT precision)
-
+
Set the number of significant bits (excludes padding).
"""
H5Tset_precision(self.id, precision)
-
+
@with_phil
def get_offset(self):
"""() => INT offset
@@ -827,7 +829,7 @@ cdef class TypeAtomicID(TypeID):
"""
return H5Tget_offset(self.id)
-
+
@with_phil
def set_offset(self, size_t offset):
"""(UINT offset)
@@ -836,7 +838,7 @@ cdef class TypeAtomicID(TypeID):
"""
H5Tset_offset(self.id, offset)
-
+
@with_phil
def get_pad(self):
"""() => (INT lsb_pad_code, INT msb_pad_code)
@@ -852,7 +854,7 @@ cdef class TypeAtomicID(TypeID):
H5Tget_pad(self.id, &lsb, &msb)
return (<int>lsb, <int>msb)
-
+
@with_phil
def set_pad(self, int lsb, int msb):
"""(INT lsb_pad_code, INT msb_pad_code)
@@ -872,7 +874,7 @@ cdef class TypeIntegerID(TypeAtomicID):
Integer atomic datatypes
"""
-
+
@with_phil
def get_sign(self):
"""() => INT sign
@@ -887,7 +889,7 @@ cdef class TypeIntegerID(TypeAtomicID):
"""
return <int>H5Tget_sign(self.id)
-
+
@with_phil
def set_sign(self, int sign):
"""(INT sign)
@@ -904,7 +906,7 @@ cdef class TypeIntegerID(TypeAtomicID):
cdef object py_dtype(self):
# Translation function for integer types
- return dtype( _order_map[self.get_order()] +
+ return dtype( _order_map[self.get_order()] +
_sign_map[self.get_sign()] + str(self.get_size()) )
@@ -914,7 +916,7 @@ cdef class TypeFloatID(TypeAtomicID):
Floating-point atomic datatypes
"""
-
+
@with_phil
def get_fields(self):
"""() => TUPLE field_info
@@ -932,9 +934,9 @@ cdef class TypeFloatID(TypeAtomicID):
H5Tget_fields(self.id, &spos, &epos, &esize, &mpos, &msize)
return (spos, epos, esize, mpos, msize)
-
+
@with_phil
- def set_fields(self, size_t spos, size_t epos, size_t esize,
+ def set_fields(self, size_t spos, size_t epos, size_t esize,
size_t mpos, size_t msize):
"""(UINT spos, UINT epos, UINT esize, UINT mpos, UINT msize)
@@ -943,7 +945,7 @@ cdef class TypeFloatID(TypeAtomicID):
"""
H5Tset_fields(self.id, spos, epos, esize, mpos, msize)
-
+
@with_phil
def get_ebias(self):
"""() => UINT ebias
@@ -952,7 +954,7 @@ cdef class TypeFloatID(TypeAtomicID):
"""
return H5Tget_ebias(self.id)
-
+
@with_phil
def set_ebias(self, size_t ebias):
"""(UINT ebias)
@@ -961,7 +963,7 @@ cdef class TypeFloatID(TypeAtomicID):
"""
H5Tset_ebias(self.id, ebias)
-
+
@with_phil
def get_norm(self):
"""() => INT normalization_code
@@ -974,7 +976,7 @@ cdef class TypeFloatID(TypeAtomicID):
"""
return <int>H5Tget_norm(self.id)
-
+
@with_phil
def set_norm(self, int norm):
"""(INT normalization_code)
@@ -987,7 +989,7 @@ cdef class TypeFloatID(TypeAtomicID):
"""
H5Tset_norm(self.id, <H5T_norm_t>norm)
-
+
@with_phil
def get_inpad(self):
"""() => INT pad_code
@@ -1000,7 +1002,7 @@ cdef class TypeFloatID(TypeAtomicID):
"""
return <int>H5Tget_inpad(self.id)
-
+
@with_phil
def set_inpad(self, int pad_code):
"""(INT pad_code)
@@ -1059,7 +1061,7 @@ cdef class TypeCompositeID(TypeID):
Base class for enumerated and compound types.
"""
-
+
@with_phil
def get_nmembers(self):
"""() => INT number_of_members
@@ -1068,11 +1070,11 @@ cdef class TypeCompositeID(TypeID):
"""
return H5Tget_nmembers(self.id)
-
+
@with_phil
def get_member_name(self, int member):
"""(INT member) => STRING name
-
+
Determine the name of a member of a compound or enumerated type,
identified by its index (0 <= member < nmembers).
"""
@@ -1091,7 +1093,7 @@ cdef class TypeCompositeID(TypeID):
return pyname
-
+
@with_phil
def get_member_index(self, char* name):
"""(STRING name) => INT index
@@ -1143,7 +1145,7 @@ cdef class TypeCompoundID(TypeCompositeID):
raise ValueError("Member index must be non-negative.")
return typewrap(H5Tget_member_type(self.id, member))
-
+
@with_phil
def insert(self, char* name, size_t offset, TypeID field not None):
"""(STRING name, UINT offset, TypeID field)
@@ -1154,7 +1156,7 @@ cdef class TypeCompoundID(TypeCompositeID):
"""
H5Tinsert(self.id, name, offset, field.id)
-
+
@with_phil
def pack(self):
"""()
@@ -1175,7 +1177,7 @@ cdef class TypeCompoundID(TypeCompositeID):
field_offsets = []
nfields = self.get_nmembers()
- # First step: read field names and their Numpy dtypes into
+ # First step: read field names and their Numpy dtypes into
# two separate arrays.
for i from 0 <= i < nfields:
tmp_type = self.get_member_type(i)
@@ -1245,7 +1247,7 @@ cdef class TypeEnumID(TypeCompositeID):
Define a new member of an enumerated type. The value will be
automatically converted to the base type defined for this enum. If
- the conversion results in overflow, the value will be silently
+ the conversion results in overflow, the value will be silently
clipped.
"""
cdef long long buf
@@ -1254,7 +1256,7 @@ cdef class TypeEnumID(TypeCompositeID):
self.enum_convert(&buf, 0)
H5Tenum_insert(self.id, name, &buf)
-
+
@with_phil
def enum_nameof(self, long long value):
"""(LONG value) => STRING name
@@ -1274,7 +1276,7 @@ cdef class TypeEnumID(TypeCompositeID):
retstring = name
return retstring
-
+
@with_phil
def enum_valueof(self, char* name):
"""(STRING name) => LONG value
@@ -1287,7 +1289,7 @@ cdef class TypeEnumID(TypeCompositeID):
self.enum_convert(&buf, 1)
return buf
-
+
@with_phil
def get_member_value(self, int idx):
"""(UINT index) => LONG value
@@ -1316,7 +1318,7 @@ cdef class TypeEnumID(TypeCompositeID):
for idx in xrange(nmembers):
name = self.get_member_name(idx)
- val = self.get_member_value(idx)
+ val = self.get_member_value(idx)
members[name] = val
ref = {cfg._f_name: 0, cfg._t_name: 1}
@@ -1324,7 +1326,7 @@ cdef class TypeEnumID(TypeCompositeID):
# Boolean types have priority over standard enums
if members == ref:
return dtype('bool')
-
+
# Convert strings to appropriate representation
members_conv = {}
for name, val in members.iteritems():
@@ -1599,7 +1601,7 @@ cdef TypeStringID _c_vlen_unicode():
H5Tset_size(tid, H5T_VARIABLE)
H5Tset_cset(tid, H5T_CSET_UTF8)
return TypeStringID(tid)
-
+
cdef TypeReferenceID _c_ref(object refclass):
if refclass is Reference:
return STD_REF_OBJ
@@ -1634,7 +1636,7 @@ cpdef TypeID py_create(object dtype_in, bint logical=0, bint aligned=0):
# Float
if kind == c'f':
return _c_float(dt)
-
+
# Integer
elif kind == c'u' or kind == c'i':
@@ -1714,7 +1716,7 @@ def special_dtype(**kwds):
Create a NumPy representation of an HDF5 object or region reference
type.
"""
-
+
if len(kwds) != 1:
raise TypeError("Exactly one keyword may be provided")
@@ -1745,7 +1747,7 @@ def special_dtype(**kwds):
return dtype('O', metadata={'ref': val})
raise TypeError('Unknown special type "%s"' % name)
-
+
@with_phil
def check_dtype(**kwds):
@@ -1819,7 +1821,7 @@ def find(TypeID src not None, TypeID dst not None):
"""
cdef H5T_cdata_t *data
cdef H5T_conv_t result = NULL
-
+
try:
result = H5Tfind(src.id, dst.id, &data)
if result == NULL:
@@ -1867,5 +1869,3 @@ cpdef object py_get_vlen(object dt_in):
warn("Deprecated; use check_dtype(vlen=dtype) instead",
H5pyDeprecationWarning)
return check_dtype(vlen=dt_in)
-
-