mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2025-07-19 15:29:08 +02:00

Signed-off-by: Alexander Kanavin <alex@linutronix.de> Signed-off-by: Khem Raj <raj.khem@gmail.com>
797 lines
35 KiB
Diff
797 lines
35 KiB
Diff
From 1e02dbe5533d679b9ef064078a303607a7d0542a Mon Sep 17 00:00:00 2001
|
|
From: Alexander Kanavin <alex@linutronix.de>
|
|
Date: Fri, 29 Dec 2023 14:33:38 +0100
|
|
Subject: [PATCH] Fix Cython 3 compatibility
|
|
|
|
Upstream-Status: Backport [https://github.com/h5py/h5py/pull/2345/commits]
|
|
Signed-off-by: Alexander Kanavin <alex@linutronix.de>
|
|
---
|
|
benchmarks/benchmark_slicing.py | 12 ++++----
|
|
docs/conf.py | 2 +-
|
|
docs/high/dataset.rst | 4 +--
|
|
docs/high/file.rst | 6 ++--
|
|
docs/requirements-rtd.txt | 5 ++--
|
|
docs/vds.rst | 2 +-
|
|
docs/whatsnew/3.0.rst | 2 +-
|
|
docs/whatsnew/3.7.rst | 4 +--
|
|
h5py/_errors.pxd | 10 +++----
|
|
h5py/_errors.pyx | 4 +--
|
|
h5py/_hl/base.py | 4 +--
|
|
h5py/_hl/dataset.py | 8 ++---
|
|
h5py/_hl/dims.py | 3 +-
|
|
h5py/_hl/files.py | 2 +-
|
|
h5py/_locks.pxi | 6 ++--
|
|
h5py/_proxy.pyx | 4 +--
|
|
h5py/_selector.pyx | 2 +-
|
|
h5py/api_compat.h | 13 ++++----
|
|
h5py/api_types_hdf5.pxd | 48 +++++++++++++++---------------
|
|
h5py/h5fd.pyx | 38 ++++++++++++++++-------
|
|
h5py/h5p.pyx | 4 +--
|
|
h5py/h5t.pyx | 2 +-
|
|
h5py/tests/test_attrs_data.py | 2 +-
|
|
h5py/tests/test_big_endian_file.py | 4 +--
|
|
h5py/tests/test_dataset.py | 4 +--
|
|
h5py/tests/test_file.py | 6 ++--
|
|
h5py/tests/test_file_alignment.py | 4 +--
|
|
h5py/tests/test_group.py | 4 +--
|
|
h5py/tests/test_selections.py | 2 +-
|
|
pylintrc | 2 +-
|
|
pyproject.toml | 2 +-
|
|
setup_configure.py | 2 +-
|
|
tox.ini | 2 +-
|
|
33 files changed, 116 insertions(+), 103 deletions(-)
|
|
|
|
diff --git a/benchmarks/benchmark_slicing.py b/benchmarks/benchmark_slicing.py
|
|
index e9a34dad..b833f012 100644
|
|
--- a/benchmarks/benchmark_slicing.py
|
|
+++ b/benchmarks/benchmark_slicing.py
|
|
@@ -7,7 +7,7 @@ import logging
|
|
logger = logging.getLogger(__name__)
|
|
import h5py
|
|
|
|
-#Needed for mutithreading:
|
|
+#Needed for multithreading:
|
|
from queue import Queue
|
|
from threading import Thread, Event
|
|
import multiprocessing
|
|
@@ -173,8 +173,8 @@ class SlicingBenchmark:
|
|
|
|
if __name__ == "__main__":
|
|
logging.basicConfig(level=logging.INFO)
|
|
- benckmark = SlicingBenchmark()
|
|
- benckmark.setup()
|
|
- benckmark.time_sequential_reads()
|
|
- benckmark.time_threaded_reads()
|
|
- benckmark.teardown()
|
|
+ benchmark = SlicingBenchmark()
|
|
+ benchmark.setup()
|
|
+ benchmark.time_sequential_reads()
|
|
+ benchmark.time_threaded_reads()
|
|
+ benchmark.teardown()
|
|
diff --git a/docs/conf.py b/docs/conf.py
|
|
index 93b23939..a0f6c1ac 100644
|
|
--- a/docs/conf.py
|
|
+++ b/docs/conf.py
|
|
@@ -109,7 +109,7 @@ pygments_style = 'sphinx'
|
|
|
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
# a list of builtin themes.
|
|
-html_theme = 'default'
|
|
+html_theme = 'sphinx_rtd_theme'
|
|
|
|
# Theme options are theme-specific and customize the look and feel of a theme
|
|
# further. For a list of options available for each theme, see the
|
|
diff --git a/docs/high/dataset.rst b/docs/high/dataset.rst
|
|
index 0f27284f..cb75fffe 100644
|
|
--- a/docs/high/dataset.rst
|
|
+++ b/docs/high/dataset.rst
|
|
@@ -58,7 +58,7 @@ the requested ``dtype``.
|
|
Reading & writing data
|
|
----------------------
|
|
|
|
-HDF5 datasets re-use the NumPy slicing syntax to read and write to the file.
|
|
+HDF5 datasets reuse the NumPy slicing syntax to read and write to the file.
|
|
Slice specifications are translated directly to HDF5 "hyperslab"
|
|
selections, and are a fast and efficient way to access data in the file. The
|
|
following slicing arguments are recognized:
|
|
@@ -464,7 +464,7 @@ Reference
|
|
>>> dset = f["MyDS"]
|
|
>>> f.close()
|
|
>>> if dset:
|
|
- ... print("datset accessible")
|
|
+ ... print("dataset accessible")
|
|
... else:
|
|
... print("dataset inaccessible")
|
|
dataset inaccessible
|
|
diff --git a/docs/high/file.rst b/docs/high/file.rst
|
|
index 484498ce..e757fe1a 100644
|
|
--- a/docs/high/file.rst
|
|
+++ b/docs/high/file.rst
|
|
@@ -392,7 +392,7 @@ Data alignment
|
|
When creating datasets within files, it may be advantageous to align the offset
|
|
within the file itself. This can help optimize read and write times if the data
|
|
become aligned with the underlying hardware, or may help with parallelism with
|
|
-MPI. Unfortunately, aligning small variables to large blocks can leave alot of
|
|
+MPI. Unfortunately, aligning small variables to large blocks can leave a lot of
|
|
empty space in a file. To this effect, application developers are left with two
|
|
options to tune the alignment of data within their file. The two variables
|
|
``alignment_threshold`` and ``alignment_interval`` in the :class:`File`
|
|
@@ -415,7 +415,7 @@ number of regions. Setting a small value can reduce the overall file size,
|
|
especially in combination with the ``libver`` option. This controls how the
|
|
overall data and metadata are laid out within the file.
|
|
|
|
-For more information, see the offical HDF5 documentation `H5P_SET_META_BLOCK_SIZE
|
|
+For more information, see the official HDF5 documentation `H5P_SET_META_BLOCK_SIZE
|
|
<https://portal.hdfgroup.org/display/HDF5/H5P_SET_META_BLOCK_SIZE>`_.
|
|
|
|
Reference
|
|
@@ -497,7 +497,7 @@ Reference
|
|
Only available with HDF5 >= 1.12.1 or 1.10.x >= 1.10.7.
|
|
:param alignment_threshold: Together with ``alignment_interval``, this
|
|
property ensures that any file object greater than or equal
|
|
- in size to the alignement threshold (in bytes) will be
|
|
+ in size to the alignment threshold (in bytes) will be
|
|
aligned on an address which is a multiple of alignment interval.
|
|
:param alignment_interval: This property should be used in conjunction with
|
|
``alignment_threshold``. See the description above. For more
|
|
diff --git a/docs/requirements-rtd.txt b/docs/requirements-rtd.txt
|
|
index e67a3eee..52096927 100644
|
|
--- a/docs/requirements-rtd.txt
|
|
+++ b/docs/requirements-rtd.txt
|
|
@@ -1,3 +1,2 @@
|
|
-sphinx==4.3.0
|
|
-sphinx_rtd_theme==1.0.0
|
|
-readthedocs-sphinx-search==0.1.1
|
|
+sphinx==7.2.6
|
|
+sphinx_rtd_theme==1.3.0
|
|
diff --git a/docs/vds.rst b/docs/vds.rst
|
|
index a9a7c7f6..bd47ad1c 100644
|
|
--- a/docs/vds.rst
|
|
+++ b/docs/vds.rst
|
|
@@ -124,7 +124,7 @@ Reference
|
|
slice it to indicate which regions should be used in the virtual dataset.
|
|
|
|
When `creating a virtual dataset <creating_vds_>`_, paths to sources present
|
|
- in the same file are changed to a ".", refering to the current file (see
|
|
+ in the same file are changed to a ".", referring to the current file (see
|
|
`H5Pset_virtual <https://portal.hdfgroup.org/display/HDF5/H5P_SET_VIRTUAL>`_).
|
|
This will keep such sources valid in case the file is renamed.
|
|
|
|
diff --git a/docs/whatsnew/3.0.rst b/docs/whatsnew/3.0.rst
|
|
index db30ad66..ff3c2bef 100644
|
|
--- a/docs/whatsnew/3.0.rst
|
|
+++ b/docs/whatsnew/3.0.rst
|
|
@@ -44,7 +44,7 @@ New features
|
|
See also the deprecation related to the ``external`` argument.
|
|
* Support for setting file space strategy at file creation. Includes option to
|
|
persist empty space tracking between sessions. See :class:`.File` for details.
|
|
-* More efficient writing when assiging a scalar to a chunked dataset, when the
|
|
+* More efficient writing when assigning a scalar to a chunked dataset, when the
|
|
number of elements to write is no more than the size of one chunk.
|
|
* Introduced support for the split :ref:`file driver <file_driver>`
|
|
(:pr:`1468`).
|
|
diff --git a/docs/whatsnew/3.7.rst b/docs/whatsnew/3.7.rst
|
|
index 27790254..2e822d68 100644
|
|
--- a/docs/whatsnew/3.7.rst
|
|
+++ b/docs/whatsnew/3.7.rst
|
|
@@ -19,7 +19,7 @@ New features
|
|
include it. Alternatively, you can :ref:`build h5py from source <source_install>`
|
|
against an HDF5 build with the direct driver enabled.
|
|
* The :class:`.File` constructor contains two new parameters ``alignment_threshold``,
|
|
- and ``alignment_interval`` controling the data alignment within the HDF5
|
|
+ and ``alignment_interval`` controlling the data alignment within the HDF5
|
|
file (:pr:`2040`).
|
|
* :meth:`~.Group.create_dataset` and :meth:`~.Group.require_dataset` now accept
|
|
parameters ``efile_prefix`` and ``virtual_prefix`` to set a filesystem path
|
|
@@ -40,7 +40,7 @@ Bug fixes
|
|
attributes with ``track_order=True``.
|
|
* Fix for building with mpi4py on Python 3.10 (:pr:`2101`).
|
|
* Fixed fancy indexing with a boolean array for a single dimension (:pr:`2079`).
|
|
-* Avoid returning unitialised memory when reading from a chunked dataset with
|
|
+* Avoid returning uninitialised memory when reading from a chunked dataset with
|
|
missing chunks and no fill value (:pr:`2076`).
|
|
* Enable setting of fillvalue for datasets with variable length string dtype
|
|
(:pr:`2044`).
|
|
diff --git a/h5py/_errors.pxd b/h5py/_errors.pxd
|
|
index df9c1bbe..3cba6307 100644
|
|
--- a/h5py/_errors.pxd
|
|
+++ b/h5py/_errors.pxd
|
|
@@ -23,7 +23,7 @@ cdef extern from "hdf5.h":
|
|
H5E_ARGS, # invalid arguments to routine
|
|
H5E_RESOURCE, # resource unavailable
|
|
H5E_INTERNAL, # Internal error (too specific to document)
|
|
- H5E_FILE, # file Accessability
|
|
+ H5E_FILE, # file Accessibility
|
|
H5E_IO, # Low-level I/O
|
|
H5E_FUNC, # function Entry/Exit
|
|
H5E_ATOM, # object Atom
|
|
@@ -121,7 +121,7 @@ cdef extern from "hdf5.h":
|
|
# No error
|
|
H5E_NONE_MINOR # No error
|
|
|
|
- # File accessability errors
|
|
+ # File accessibility errors
|
|
H5E_FILEEXISTS # File already exists
|
|
H5E_FILEOPEN # File already open
|
|
H5E_CANTCREATE # Unable to create file
|
|
@@ -207,7 +207,7 @@ cdef extern from "hdf5.h":
|
|
H5E_ARGS, # invalid arguments to routine
|
|
H5E_RESOURCE, # resource unavailable
|
|
H5E_INTERNAL, # Internal error (too specific to document)
|
|
- H5E_FILE, # file Accessability
|
|
+ H5E_FILE, # file Accessibility
|
|
H5E_IO, # Low-level I/O
|
|
H5E_FUNC, # function Entry/Exit
|
|
H5E_ID, # object ID
|
|
@@ -305,7 +305,7 @@ cdef extern from "hdf5.h":
|
|
# No error
|
|
H5E_NONE_MINOR # No error
|
|
|
|
- # File accessability errors
|
|
+ # File accessibility errors
|
|
H5E_FILEEXISTS # File already exists
|
|
H5E_FILEOPEN # File already open
|
|
H5E_CANTCREATE # Unable to create file
|
|
@@ -425,4 +425,4 @@ ctypedef struct err_cookie:
|
|
cdef err_cookie set_error_handler(err_cookie handler)
|
|
|
|
# Set the default error handler set by silence_errors/unsilence_errors
|
|
-cdef void set_default_error_handler() nogil
|
|
+cdef void set_default_error_handler() noexcept nogil
|
|
diff --git a/h5py/_errors.pyx b/h5py/_errors.pyx
|
|
index c3bd184e..2a7524b2 100644
|
|
--- a/h5py/_errors.pyx
|
|
+++ b/h5py/_errors.pyx
|
|
@@ -94,7 +94,7 @@ cdef struct err_data_t:
|
|
H5E_error_t err
|
|
int n
|
|
|
|
-cdef herr_t walk_cb(unsigned int n, const H5E_error_t *desc, void *e) nogil noexcept:
|
|
+cdef herr_t walk_cb(unsigned int n, const H5E_error_t *desc, void *e) noexcept nogil:
|
|
|
|
cdef err_data_t *ee = <err_data_t*>e
|
|
|
|
@@ -168,7 +168,7 @@ cdef err_cookie _error_handler # Store error handler used by h5py
|
|
_error_handler.func = NULL
|
|
_error_handler.data = NULL
|
|
|
|
-cdef void set_default_error_handler() nogil:
|
|
+cdef void set_default_error_handler() noexcept nogil:
|
|
"""Set h5py's current default error handler"""
|
|
H5Eset_auto(<hid_t>H5E_DEFAULT, _error_handler.func, _error_handler.data)
|
|
|
|
diff --git a/h5py/_hl/base.py b/h5py/_hl/base.py
|
|
index cad37053..9d261c90 100644
|
|
--- a/h5py/_hl/base.py
|
|
+++ b/h5py/_hl/base.py
|
|
@@ -20,7 +20,7 @@ import posixpath
|
|
import numpy as np
|
|
|
|
# The high-level interface is serialized; every public API function & method
|
|
-# is wrapped in a lock. We re-use the low-level lock because (1) it's fast,
|
|
+# is wrapped in a lock. We reuse the low-level lock because (1) it's fast,
|
|
# and (2) it eliminates the possibility of deadlocks due to out-of-order
|
|
# lock acquisition.
|
|
from .._objects import phil, with_phil
|
|
@@ -524,7 +524,7 @@ def product(nums):
|
|
# Daniel Greenfeld, BSD license), where it is attributed to bottle (Copyright
|
|
# (c) 2009-2022, Marcel Hellkamp, MIT license).
|
|
|
|
-class cached_property(object):
|
|
+class cached_property:
|
|
def __init__(self, func):
|
|
self.__doc__ = getattr(func, "__doc__")
|
|
self.func = func
|
|
diff --git a/h5py/_hl/dataset.py b/h5py/_hl/dataset.py
|
|
index b69aba48..77b202d2 100644
|
|
--- a/h5py/_hl/dataset.py
|
|
+++ b/h5py/_hl/dataset.py
|
|
@@ -334,10 +334,10 @@ class ChunkIterator:
|
|
self._layout = dset.chunks
|
|
if source_sel is None:
|
|
# select over entire dataset
|
|
- slices = []
|
|
- for dim in range(rank):
|
|
- slices.append(slice(0, self._shape[dim]))
|
|
- self._sel = tuple(slices)
|
|
+ self._sel = tuple(
|
|
+ slice(0, self._shape[dim])
|
|
+ for dim in range(rank)
|
|
+ )
|
|
else:
|
|
if isinstance(source_sel, slice):
|
|
self._sel = (source_sel,)
|
|
diff --git a/h5py/_hl/dims.py b/h5py/_hl/dims.py
|
|
index d3c9206b..0cf4c9f3 100644
|
|
--- a/h5py/_hl/dims.py
|
|
+++ b/h5py/_hl/dims.py
|
|
@@ -53,8 +53,7 @@ class DimensionProxy(base.CommonStateObject):
|
|
|
|
@with_phil
|
|
def __iter__(self):
|
|
- for k in self.keys():
|
|
- yield k
|
|
+ yield from self.keys()
|
|
|
|
@with_phil
|
|
def __len__(self):
|
|
diff --git a/h5py/_hl/files.py b/h5py/_hl/files.py
|
|
index aa4fb78d..bfcf3098 100644
|
|
--- a/h5py/_hl/files.py
|
|
+++ b/h5py/_hl/files.py
|
|
@@ -480,7 +480,7 @@ class File(Group):
|
|
|
|
alignment_threshold
|
|
Together with ``alignment_interval``, this property ensures that
|
|
- any file object greater than or equal in size to the alignement
|
|
+ any file object greater than or equal in size to the alignment
|
|
threshold (in bytes) will be aligned on an address which is a
|
|
multiple of alignment interval.
|
|
|
|
diff --git a/h5py/_locks.pxi b/h5py/_locks.pxi
|
|
index bc8b2dd9..1ec4e2fc 100644
|
|
--- a/h5py/_locks.pxi
|
|
+++ b/h5py/_locks.pxi
|
|
@@ -63,7 +63,7 @@ cdef class FastRLock:
|
|
return self._owner == pythread.PyThread_get_thread_ident()
|
|
|
|
|
|
-cdef inline bint lock_lock(FastRLock lock, long current_thread, bint blocking) nogil:
|
|
+cdef inline bint lock_lock(FastRLock lock, long current_thread, bint blocking) noexcept nogil:
|
|
# Note that this function *must* hold the GIL when being called.
|
|
# We just use 'nogil' in the signature to make sure that no Python
|
|
# code execution slips in that might free the GIL
|
|
@@ -83,7 +83,7 @@ cdef inline bint lock_lock(FastRLock lock, long current_thread, bint blocking) n
|
|
lock, current_thread,
|
|
pythread.WAIT_LOCK if blocking else pythread.NOWAIT_LOCK)
|
|
|
|
-cdef bint _acquire_lock(FastRLock lock, long current_thread, int wait) nogil:
|
|
+cdef bint _acquire_lock(FastRLock lock, long current_thread, int wait) noexcept nogil:
|
|
# Note that this function *must* hold the GIL when being called.
|
|
# We just use 'nogil' in the signature to make sure that no Python
|
|
# code execution slips in that might free the GIL
|
|
@@ -111,7 +111,7 @@ cdef bint _acquire_lock(FastRLock lock, long current_thread, int wait) nogil:
|
|
lock._count = 1
|
|
return 1
|
|
|
|
-cdef inline void unlock_lock(FastRLock lock) nogil:
|
|
+cdef inline void unlock_lock(FastRLock lock) noexcept nogil:
|
|
# Note that this function *must* hold the GIL when being called.
|
|
# We just use 'nogil' in the signature to make sure that no Python
|
|
# code execution slips in that might free the GIL
|
|
diff --git a/h5py/_proxy.pyx b/h5py/_proxy.pyx
|
|
index 46b4fe0d..e40504f5 100644
|
|
--- a/h5py/_proxy.pyx
|
|
+++ b/h5py/_proxy.pyx
|
|
@@ -241,7 +241,7 @@ ctypedef struct h5py_scatter_t:
|
|
void* buf
|
|
|
|
cdef herr_t h5py_scatter_cb(void* elem, hid_t type_id, unsigned ndim,
|
|
- const hsize_t *point, void *operator_data) nogil except -1:
|
|
+ const hsize_t *point, void *operator_data) except -1 nogil:
|
|
cdef h5py_scatter_t* info = <h5py_scatter_t*>operator_data
|
|
|
|
memcpy(elem, (<char*>info[0].buf)+((info[0].i)*(info[0].elsize)),
|
|
@@ -252,7 +252,7 @@ cdef herr_t h5py_scatter_cb(void* elem, hid_t type_id, unsigned ndim,
|
|
return 0
|
|
|
|
cdef herr_t h5py_gather_cb(void* elem, hid_t type_id, unsigned ndim,
|
|
- const hsize_t *point, void *operator_data) nogil except -1:
|
|
+ const hsize_t *point, void *operator_data) except -1 nogil:
|
|
cdef h5py_scatter_t* info = <h5py_scatter_t*>operator_data
|
|
|
|
memcpy((<char*>info[0].buf)+((info[0].i)*(info[0].elsize)), elem,
|
|
diff --git a/h5py/_selector.pyx b/h5py/_selector.pyx
|
|
index 8b858c82..69970176 100644
|
|
--- a/h5py/_selector.pyx
|
|
+++ b/h5py/_selector.pyx
|
|
@@ -341,7 +341,7 @@ cdef class Reader:
|
|
|
|
arr = PyArray_ZEROS(arr_rank, arr_shape, self.np_typenum, 0)
|
|
if not self.native_byteorder:
|
|
- arr = arr.newbyteorder()
|
|
+ arr = arr.view(arr.dtype.newbyteorder())
|
|
finally:
|
|
efree(arr_shape)
|
|
|
|
diff --git a/h5py/api_compat.h b/h5py/api_compat.h
|
|
index 52917f4d..a359e827 100644
|
|
--- a/h5py/api_compat.h
|
|
+++ b/h5py/api_compat.h
|
|
@@ -24,7 +24,6 @@ typedef void *PyMPI_MPI_Message;
|
|
#include <stddef.h>
|
|
#include "Python.h"
|
|
#include "numpy/arrayobject.h"
|
|
-#include "hdf5.h"
|
|
|
|
/* The HOFFSET macro can't be used from Cython. */
|
|
|
|
@@ -35,14 +34,14 @@ typedef void *PyMPI_MPI_Message;
|
|
#define h5py_size_n256 (sizeof(npy_complex256))
|
|
#endif
|
|
|
|
-#define h5py_offset_n64_real (HOFFSET(npy_complex64, real))
|
|
-#define h5py_offset_n64_imag (HOFFSET(npy_complex64, imag))
|
|
-#define h5py_offset_n128_real (HOFFSET(npy_complex128, real))
|
|
-#define h5py_offset_n128_imag (HOFFSET(npy_complex128, imag))
|
|
+#define h5py_offset_n64_real (0)
|
|
+#define h5py_offset_n64_imag (sizeof(float))
|
|
+#define h5py_offset_n128_real (0)
|
|
+#define h5py_offset_n128_imag (sizeof(double))
|
|
|
|
#ifdef NPY_COMPLEX256
|
|
-#define h5py_offset_n256_real (HOFFSET(npy_complex256, real))
|
|
-#define h5py_offset_n256_imag (HOFFSET(npy_complex256, imag))
|
|
+#define h5py_offset_n256_real (0)
|
|
+#define h5py_offset_n256_imag (sizeof(long double))
|
|
#endif
|
|
|
|
#endif
|
|
diff --git a/h5py/api_types_hdf5.pxd b/h5py/api_types_hdf5.pxd
|
|
index a198f105..099e0f58 100644
|
|
--- a/h5py/api_types_hdf5.pxd
|
|
+++ b/h5py/api_types_hdf5.pxd
|
|
@@ -257,27 +257,27 @@ cdef extern from "hdf5.h":
|
|
herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p)
|
|
herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p)
|
|
size_t fapl_size
|
|
- void * (*fapl_get)(H5FD_t *file)
|
|
- void * (*fapl_copy)(const void *fapl)
|
|
- herr_t (*fapl_free)(void *fapl)
|
|
+ void * (*fapl_get)(H5FD_t *file) except *
|
|
+ void * (*fapl_copy)(const void *fapl) except *
|
|
+ herr_t (*fapl_free)(void *fapl) except -1
|
|
size_t dxpl_size
|
|
void * (*dxpl_copy)(const void *dxpl)
|
|
herr_t (*dxpl_free)(void *dxpl)
|
|
- H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)
|
|
- herr_t (*close)(H5FD_t *file)
|
|
+ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr) except *
|
|
+ herr_t (*close)(H5FD_t *file) except -1
|
|
int (*cmp)(const H5FD_t *f1, const H5FD_t *f2)
|
|
herr_t (*query)(const H5FD_t *f1, unsigned long *flags)
|
|
herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map)
|
|
haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
|
|
herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
|
|
- haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type)
|
|
- herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr)
|
|
- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type)
|
|
+ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) noexcept
|
|
+ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) noexcept
|
|
+ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) except -1
|
|
herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle)
|
|
- herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer)
|
|
- herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer)
|
|
- herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
|
- herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
|
+ herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer) except *
|
|
+ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) except *
|
|
+ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1
|
|
+ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1
|
|
herr_t (*lock)(H5FD_t *file, hbool_t rw)
|
|
herr_t (*unlock)(H5FD_t *file)
|
|
H5FD_mem_t fl_map[<int>H5FD_MEM_NTYPES]
|
|
@@ -295,27 +295,27 @@ cdef extern from "hdf5.h":
|
|
herr_t (*sb_encode)(H5FD_t *file, char *name, unsigned char *p)
|
|
herr_t (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p)
|
|
size_t fapl_size
|
|
- void * (*fapl_get)(H5FD_t *file)
|
|
- void * (*fapl_copy)(const void *fapl)
|
|
- herr_t (*fapl_free)(void *fapl)
|
|
+ void * (*fapl_get)(H5FD_t *file) except *
|
|
+ void * (*fapl_copy)(const void *fapl) except *
|
|
+ herr_t (*fapl_free)(void *fapl) except -1
|
|
size_t dxpl_size
|
|
void * (*dxpl_copy)(const void *dxpl)
|
|
herr_t (*dxpl_free)(void *dxpl)
|
|
- H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)
|
|
- herr_t (*close)(H5FD_t *file)
|
|
+ H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr) except *
|
|
+ herr_t (*close)(H5FD_t *file) except -1
|
|
int (*cmp)(const H5FD_t *f1, const H5FD_t *f2)
|
|
herr_t (*query)(const H5FD_t *f1, unsigned long *flags)
|
|
herr_t (*get_type_map)(const H5FD_t *file, H5FD_mem_t *type_map)
|
|
haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
|
|
herr_t (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
|
|
- haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type)
|
|
- herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr)
|
|
- haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type)
|
|
+ haddr_t (*get_eoa)(const H5FD_t *file, H5FD_mem_t type) noexcept
|
|
+ herr_t (*set_eoa)(H5FD_t *file, H5FD_mem_t type, haddr_t addr) noexcept
|
|
+ haddr_t (*get_eof)(const H5FD_t *file, H5FD_mem_t type) except -1
|
|
herr_t (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle)
|
|
- herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer)
|
|
- herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer)
|
|
- herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
|
- herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
|
|
+ herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, void *buffer) except *
|
|
+ herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, size_t size, const void *buffer) except *
|
|
+ herr_t (*flush)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1
|
|
+ herr_t (*truncate)(H5FD_t *file, hid_t dxpl_id, hbool_t closing) except -1
|
|
herr_t (*lock)(H5FD_t *file, hbool_t rw)
|
|
herr_t (*unlock)(H5FD_t *file)
|
|
H5FD_mem_t fl_map[<int>H5FD_MEM_NTYPES]
|
|
diff --git a/h5py/h5fd.pyx b/h5py/h5fd.pyx
|
|
index e9746057..d39cf68f 100644
|
|
--- a/h5py/h5fd.pyx
|
|
+++ b/h5py/h5fd.pyx
|
|
@@ -144,10 +144,10 @@ cdef herr_t H5FD_fileobj_close(H5FD_fileobj_t *f) except -1 with gil:
|
|
stdlib_free(f)
|
|
return 0
|
|
|
|
-cdef haddr_t H5FD_fileobj_get_eoa(const H5FD_fileobj_t *f, H5FD_mem_t type):
|
|
+cdef haddr_t H5FD_fileobj_get_eoa(const H5FD_fileobj_t *f, H5FD_mem_t type) noexcept nogil:
|
|
return f.eoa
|
|
|
|
-cdef herr_t H5FD_fileobj_set_eoa(H5FD_fileobj_t *f, H5FD_mem_t type, haddr_t addr):
|
|
+cdef herr_t H5FD_fileobj_set_eoa(H5FD_fileobj_t *f, H5FD_mem_t type, haddr_t addr) noexcept nogil:
|
|
f.eoa = addr
|
|
return 0
|
|
|
|
@@ -191,22 +191,38 @@ cdef herr_t H5FD_fileobj_flush(H5FD_fileobj_t *f, hid_t dxpl, hbool_t closing) e
|
|
cdef H5FD_class_t info
|
|
memset(&info, 0, sizeof(info))
|
|
|
|
+# Cython doesn't support "except X" in casting definition currently
|
|
+ctypedef herr_t (*file_free_func_ptr)(void *) except -1
|
|
+
|
|
+ctypedef herr_t (*file_close_func_ptr)(H5FD_t *) except -1
|
|
+ctypedef haddr_t (*file_get_eoa_func_ptr)(const H5FD_t *, H5FD_mem_t) noexcept
|
|
+ctypedef herr_t (*file_set_eof_func_ptr)(H5FD_t *, H5FD_mem_t, haddr_t) noexcept
|
|
+ctypedef haddr_t (*file_get_eof_func_ptr)(const H5FD_t *, H5FD_mem_t) except -1
|
|
+ctypedef herr_t (*file_read_func_ptr)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, void*) except -1
|
|
+ctypedef herr_t (*file_write_func_ptr)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, const void*) except -1
|
|
+ctypedef herr_t (*file_truncate_func_ptr)(H5FD_t *, hid_t, hbool_t) except -1
|
|
+ctypedef herr_t (*file_flush_func_ptr)(H5FD_t *, hid_t, hbool_t) except -1
|
|
+
|
|
+
|
|
info.name = 'fileobj'
|
|
info.maxaddr = libc.stdint.SIZE_MAX - 1
|
|
info.fc_degree = H5F_CLOSE_WEAK
|
|
info.fapl_size = sizeof(PyObject *)
|
|
info.fapl_get = <void *(*)(H5FD_t *)>H5FD_fileobj_fapl_get
|
|
info.fapl_copy = <void *(*)(const void *)>H5FD_fileobj_fapl_copy
|
|
-info.fapl_free = <herr_t (*)(void *)>H5FD_fileobj_fapl_free
|
|
+
|
|
+info.fapl_free = <file_free_func_ptr>H5FD_fileobj_fapl_free
|
|
+
|
|
info.open = <H5FD_t *(*)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)>H5FD_fileobj_open
|
|
-info.close = <herr_t (*)(H5FD_t *)>H5FD_fileobj_close
|
|
-info.get_eoa = <haddr_t (*)(const H5FD_t *, H5FD_mem_t)>H5FD_fileobj_get_eoa
|
|
-info.set_eoa = <herr_t (*)(H5FD_t *, H5FD_mem_t, haddr_t)>H5FD_fileobj_set_eoa
|
|
-info.get_eof = <haddr_t (*)(const H5FD_t *, H5FD_mem_t)>H5FD_fileobj_get_eof
|
|
-info.read = <herr_t (*)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, void *)>H5FD_fileobj_read
|
|
-info.write = <herr_t (*)(H5FD_t *, H5FD_mem_t, hid_t, haddr_t, size_t, const void *)>H5FD_fileobj_write
|
|
-info.truncate = <herr_t (*)(H5FD_t *, hid_t, hbool_t)>H5FD_fileobj_truncate
|
|
-info.flush = <herr_t (*)(H5FD_t *, hid_t, hbool_t)>H5FD_fileobj_flush
|
|
+
|
|
+info.close = <file_close_func_ptr>H5FD_fileobj_close
|
|
+info.get_eoa = <file_get_eoa_func_ptr>H5FD_fileobj_get_eoa
|
|
+info.set_eoa = <file_set_eof_func_ptr>H5FD_fileobj_set_eoa
|
|
+info.get_eof = <file_get_eof_func_ptr>H5FD_fileobj_get_eof
|
|
+info.read = <file_read_func_ptr>H5FD_fileobj_read
|
|
+info.write = <file_write_func_ptr>H5FD_fileobj_write
|
|
+info.truncate = <file_truncate_func_ptr>H5FD_fileobj_truncate
|
|
+info.flush = <file_flush_func_ptr>H5FD_fileobj_flush
|
|
# H5FD_FLMAP_DICHOTOMY
|
|
info.fl_map = [H5FD_MEM_SUPER, # default
|
|
H5FD_MEM_SUPER, # super
|
|
diff --git a/h5py/h5p.pyx b/h5py/h5p.pyx
|
|
index 779ea1b5..dc8bf65a 100644
|
|
--- a/h5py/h5p.pyx
|
|
+++ b/h5py/h5p.pyx
|
|
@@ -1177,7 +1177,7 @@ cdef class PropFAID(PropInstanceID):
|
|
size_t block_size IN: File system block size
|
|
size_t cbuf_size IN: Copy buffer size
|
|
|
|
- Properites with value of 0 indicate that the HDF5 library should
|
|
+ Properties with value of 0 indicate that the HDF5 library should
|
|
choose the value.
|
|
"""
|
|
H5Pset_fapl_direct(self.id, alignment, block_size, cbuf_size)
|
|
@@ -1761,7 +1761,7 @@ cdef class PropOCID(PropCreateID):
|
|
|
|
max_compact -- maximum number of attributes to be stored in compact storage(default:8)
|
|
must be greater than or equal to min_dense
|
|
- min_dense -- minmum number of attributes to be stored in dense storage(default:6)
|
|
+ min_dense -- minimum number of attributes to be stored in dense storage(default:6)
|
|
|
|
"""
|
|
H5Pset_attr_phase_change(self.id, max_compact, min_dense)
|
|
diff --git a/h5py/h5t.pyx b/h5py/h5t.pyx
|
|
index e7aae14f..b9d7e74d 100644
|
|
--- a/h5py/h5t.pyx
|
|
+++ b/h5py/h5t.pyx
|
|
@@ -1938,7 +1938,7 @@ def check_dtype(**kwds):
|
|
|
|
vlen = dtype
|
|
If the dtype represents an HDF5 vlen, returns the Python base class.
|
|
- Currently only builting string vlens (str) are supported. Returns
|
|
+ Currently only built-in string vlens (str) are supported. Returns
|
|
None if the dtype does not represent an HDF5 vlen.
|
|
|
|
enum = dtype
|
|
diff --git a/h5py/tests/test_attrs_data.py b/h5py/tests/test_attrs_data.py
|
|
index 56481ca0..5083a1aa 100644
|
|
--- a/h5py/tests/test_attrs_data.py
|
|
+++ b/h5py/tests/test_attrs_data.py
|
|
@@ -262,7 +262,7 @@ class TestEmpty(BaseAttrs):
|
|
self.assertTrue(is_empty_dataspace(h5a.open(self.f.id, b'y')))
|
|
|
|
def test_modify(self):
|
|
- with self.assertRaises(IOError):
|
|
+ with self.assertRaises(OSError):
|
|
self.f.attrs.modify('x', 1)
|
|
|
|
def test_values(self):
|
|
diff --git a/h5py/tests/test_big_endian_file.py b/h5py/tests/test_big_endian_file.py
|
|
index 4d81de01..170b5bcc 100644
|
|
--- a/h5py/tests/test_big_endian_file.py
|
|
+++ b/h5py/tests/test_big_endian_file.py
|
|
@@ -24,14 +24,14 @@ def test_vlen_big_endian():
|
|
assert dset[4] == 1.2
|
|
assert dset.dtype == "<f8"
|
|
|
|
- # Same float values with big endianess
|
|
+ # Same float values with big endianness
|
|
assert f["DSBEfloat"][0] == 3.14
|
|
assert f["DSBEfloat"].dtype == ">f8"
|
|
|
|
assert f["DSLEint"][0] == 1
|
|
assert f["DSLEint"].dtype == "<u8"
|
|
|
|
- # Same int values with big endianess
|
|
+ # Same int values with big endianness
|
|
assert f["DSBEint"][0] == 1
|
|
assert f["DSBEint"].dtype == ">i8"
|
|
|
|
diff --git a/h5py/tests/test_dataset.py b/h5py/tests/test_dataset.py
|
|
index e104dd53..0ffa5c80 100644
|
|
--- a/h5py/tests/test_dataset.py
|
|
+++ b/h5py/tests/test_dataset.py
|
|
@@ -1939,9 +1939,9 @@ class TestCommutative(BaseDataset):
|
|
dset = self.f.create_dataset("test", shape, dtype=float,
|
|
data=np.random.rand(*shape))
|
|
|
|
- # grab a value from the elements, ie dset[0]
|
|
+ # grab a value from the elements, ie dset[0, 0]
|
|
# check that mask arrays are commutative wrt ==, !=
|
|
- val = np.float64(dset[0])
|
|
+ val = np.float64(dset[0, 0])
|
|
|
|
assert np.all((val == dset) == (dset == val))
|
|
assert np.all((val != dset) == (dset != val))
|
|
diff --git a/h5py/tests/test_file.py b/h5py/tests/test_file.py
|
|
index b47d408e..1aa38731 100644
|
|
--- a/h5py/tests/test_file.py
|
|
+++ b/h5py/tests/test_file.py
|
|
@@ -326,7 +326,7 @@ class TestDrivers(TestCase):
|
|
# could be an integer multiple of 512
|
|
#
|
|
# To allow HDF5 to do the heavy lifting for different platform,
|
|
- # We didn't provide any argumnets to the first call
|
|
+ # We didn't provide any arguments to the first call
|
|
# and obtained HDF5's default values there.
|
|
|
|
# Testing creation with a few different property lists
|
|
@@ -639,9 +639,9 @@ class TestUnicode(TestCase):
|
|
Modes 'r' and 'r+' do not create files even when given unicode names
|
|
"""
|
|
fname = self.mktemp(prefix=chr(0x201a))
|
|
- with self.assertRaises(IOError):
|
|
+ with self.assertRaises(OSError):
|
|
File(fname, 'r')
|
|
- with self.assertRaises(IOError):
|
|
+ with self.assertRaises(OSError):
|
|
File(fname, 'r+')
|
|
|
|
|
|
diff --git a/h5py/tests/test_file_alignment.py b/h5py/tests/test_file_alignment.py
|
|
index c280bb76..da13ee04 100644
|
|
--- a/h5py/tests/test_file_alignment.py
|
|
+++ b/h5py/tests/test_file_alignment.py
|
|
@@ -50,7 +50,7 @@ class TestFileAlignment(TestCase):
|
|
alignment_interval = 4096
|
|
|
|
for shape in [
|
|
- (1033,), # A prime number above the thresold
|
|
+ (1033,), # A prime number above the threshold
|
|
(1000,), # Exactly equal to the threshold
|
|
(1001,), # one above the threshold
|
|
]:
|
|
@@ -75,7 +75,7 @@ class TestFileAlignment(TestCase):
|
|
alignment_interval = 1024
|
|
|
|
for shape in [
|
|
- (881,), # A prime number below the thresold
|
|
+ (881,), # A prime number below the threshold
|
|
(999,), # Exactly one below the threshold
|
|
]:
|
|
fname = self.mktemp()
|
|
diff --git a/h5py/tests/test_group.py b/h5py/tests/test_group.py
|
|
index 328c352a..4af1fb1f 100644
|
|
--- a/h5py/tests/test_group.py
|
|
+++ b/h5py/tests/test_group.py
|
|
@@ -771,7 +771,7 @@ class TestExternalLinks(TestCase):
|
|
with self.assertRaises(KeyError):
|
|
self.f['ext']
|
|
|
|
- # I would prefer IOError but there's no way to fix this as the exception
|
|
+ # I would prefer OSError but there's no way to fix this as the exception
|
|
# class is determined by HDF5.
|
|
def test_exc_missingfile(self):
|
|
""" KeyError raised when attempting to open missing file """
|
|
@@ -844,7 +844,7 @@ class TestExtLinkBugs(TestCase):
|
|
try:
|
|
if x:
|
|
x.close()
|
|
- except IOError:
|
|
+ except OSError:
|
|
pass
|
|
return w
|
|
orig_name = self.mktemp()
|
|
diff --git a/h5py/tests/test_selections.py b/h5py/tests/test_selections.py
|
|
index 0b1722d7..01f6dcb7 100644
|
|
--- a/h5py/tests/test_selections.py
|
|
+++ b/h5py/tests/test_selections.py
|
|
@@ -65,7 +65,7 @@ class TestTypeGeneration(BaseSelection):
|
|
self.assertEqual(out, np.dtype('i'))
|
|
self.assertEqual(format, np.dtype( [('a','i')] ))
|
|
|
|
- # Field does not apear in named typed
|
|
+ # Field does not appear in named typed
|
|
with self.assertRaises(ValueError):
|
|
out, format = sel2.read_dtypes(dt, ('j', 'k'))
|
|
|
|
diff --git a/pylintrc b/pylintrc
|
|
index 045df2f7..2401d3b0 100644
|
|
--- a/pylintrc
|
|
+++ b/pylintrc
|
|
@@ -44,7 +44,7 @@ confidence=
|
|
# can either give multiple identifiers separated by comma (,) or put this
|
|
# option multiple times (only on the command line, not in the configuration
|
|
# file where it should appear only once).You can also use "--disable=all" to
|
|
-# disable everything first and then reenable specific checks. For example, if
|
|
+# disable everything first and then re-enable specific checks. For example, if
|
|
# you want to run only the similarities checker, you can use "--disable=all
|
|
# --enable=similarities". If you want to run only the classes checker, but have
|
|
# no Warning level messages displayed, use"--disable=all --enable=classes
|
|
diff --git a/pyproject.toml b/pyproject.toml
|
|
index ee573d2f..717200ef 100644
|
|
--- a/pyproject.toml
|
|
+++ b/pyproject.toml
|
|
@@ -1,6 +1,6 @@
|
|
[build-system]
|
|
requires = [
|
|
- "Cython >=0.29.31,<1",
|
|
+ "Cython >=0.29.31,<4",
|
|
"oldest-supported-numpy",
|
|
"pkgconfig",
|
|
"setuptools >=61",
|
|
diff --git a/setup_configure.py b/setup_configure.py
|
|
index 0fba53ba..c3b86a64 100644
|
|
--- a/setup_configure.py
|
|
+++ b/setup_configure.py
|
|
@@ -165,7 +165,7 @@ class BuildConfig:
|
|
try:
|
|
if pkgconfig.exists(pc_name):
|
|
pc = pkgconfig.parse(pc_name)
|
|
- except EnvironmentError:
|
|
+ except OSError:
|
|
if os.name != 'nt':
|
|
print(
|
|
"Building h5py requires pkg-config unless the HDF5 path "
|
|
diff --git a/tox.ini b/tox.ini
|
|
index 0efb88a6..86a176dd 100644
|
|
--- a/tox.ini
|
|
+++ b/tox.ini
|
|
@@ -65,7 +65,7 @@ skip_install=True
|
|
package_env = DUMMY NON-EXISTENT ENV NAME
|
|
changedir=docs
|
|
deps=
|
|
- sphinx
|
|
+ -r docs/requirements-rtd.txt
|
|
commands=
|
|
sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
|
|
|