diff mbox series

python3-h5py: upgrade to 3.11.0

Message ID 20240606171814.3117902-1-ross.burton@arm.com
State Accepted
Headers show
Series python3-h5py: upgrade to 3.11.0 | expand

Commit Message

Ross Burton June 6, 2024, 5:18 p.m. UTC
Notably, this release builds with Cython 3 and GCC 14.

Signed-off-by: Ross Burton <ross.burton@arm.com>
---
 .../0001-Fix-Cython-3-compatibility.patch     | 796 ------------------
 ...-h5py_3.10.0.bb => python3-h5py_3.11.0.bb} |   5 +-
 2 files changed, 2 insertions(+), 799 deletions(-)
 delete mode 100644 meta-python/recipes-devtools/python/python3-h5py/0001-Fix-Cython-3-compatibility.patch
 rename meta-python/recipes-devtools/python/{python3-h5py_3.10.0.bb => python3-h5py_3.11.0.bb} (86%)
diff mbox series

Patch

diff --git a/meta-python/recipes-devtools/python/python3-h5py/0001-Fix-Cython-3-compatibility.patch b/meta-python/recipes-devtools/python/python3-h5py/0001-Fix-Cython-3-compatibility.patch
deleted file mode 100644
index aba62ddf14..0000000000
--- a/meta-python/recipes-devtools/python/python3-h5py/0001-Fix-Cython-3-compatibility.patch
+++ /dev/null
@@ -1,796 +0,0 @@ 
-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
- 
diff --git a/meta-python/recipes-devtools/python/python3-h5py_3.10.0.bb b/meta-python/recipes-devtools/python/python3-h5py_3.11.0.bb
similarity index 86%
rename from meta-python/recipes-devtools/python/python3-h5py_3.10.0.bb
rename to meta-python/recipes-devtools/python/python3-h5py_3.11.0.bb
index 8a9158525e..1cf5f5638e 100644
--- a/meta-python/recipes-devtools/python/python3-h5py_3.10.0.bb
+++ b/meta-python/recipes-devtools/python/python3-h5py_3.11.0.bb
@@ -4,10 +4,9 @@  SECTION = "devel/python"
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=113251d71fb0384712c719b567261c5c"
 
-SRC_URI[sha256sum] = "d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049"
+SRC_URI[sha256sum] = "7b7e8f78072a2edec87c9836f25f34203fd492a4475709a18b417a33cfb21fa9"
 
-SRC_URI += "file://0001-setup_build.py-avoid-absolute-path.patch \
-            file://0001-Fix-Cython-3-compatibility.patch"
+SRC_URI += "file://0001-setup_build.py-avoid-absolute-path.patch"
 
 inherit pkgconfig pypi setuptools3