Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-mpi4py for openSUSE:Factory 
checked in at 2026-06-28 21:10:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-mpi4py (Old)
 and      /work/SRC/openSUSE:Factory/.python-mpi4py.new.11887 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-mpi4py"

Sun Jun 28 21:10:25 2026 rev:26 rq:1362130 version:4.1.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-mpi4py/python-mpi4py.changes      
2025-12-22 22:52:14.388439962 +0100
+++ /work/SRC/openSUSE:Factory/.python-mpi4py.new.11887/python-mpi4py.changes   
2026-06-28 21:11:41.384518317 +0200
@@ -1,0 +2,8 @@
+Sun Jun 28 09:40:06 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 4.1.2:
+  * Fix build issues from breaking changes in setuptools 81.
+  * Support Windows builds with Meson and Intel MPI.
+  * PyPy wheels are no longer published.
+
+-------------------------------------------------------------------

Old:
----
  mpi4py-4.1.1.tar.gz

New:
----
  mpi4py-4.1.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-mpi4py.spec ++++++
--- /var/tmp/diff_new_pack.fqIw0p/_old  2026-06-28 21:11:42.492555784 +0200
+++ /var/tmp/diff_new_pack.fqIw0p/_new  2026-06-28 21:11:42.496555920 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-mpi4py
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define plainpython python
 Name:           python-mpi4py
-Version:        4.1.1
+Version:        4.1.2
 Release:        0
 Summary:        MPI for Python
 License:        BSD-3-Clause

++++++ mpi4py-4.1.1.tar.gz -> mpi4py-4.1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/CHANGES.rst new/mpi4py-4.1.2/CHANGES.rst
--- old/mpi4py-4.1.1/CHANGES.rst        2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/CHANGES.rst        2026-05-16 11:17:15.000000000 +0200
@@ -1,3 +1,13 @@
+Release 4.1.2 [2026-05-16]
+==========================
+
+* Fix build issues from breaking changes in setuptools 81.
+
+* Support Windows builds with Meson and Intel MPI.
+
+* PyPy wheels are no longer published.
+
+
 Release 4.1.1 [2025-10-10]
 ==========================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/LICENSE.rst new/mpi4py-4.1.2/LICENSE.rst
--- old/mpi4py-4.1.1/LICENSE.rst        2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/LICENSE.rst        2026-05-16 11:17:15.000000000 +0200
@@ -1,4 +1,4 @@
-Copyright (c) 2025, Lisandro Dalcin
+Copyright (c) 2026, Lisandro Dalcin
 
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/PKG-INFO new/mpi4py-4.1.2/PKG-INFO
--- old/mpi4py-4.1.1/PKG-INFO   2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/PKG-INFO   2026-05-16 11:17:15.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: mpi4py
-Version: 4.1.1
+Version: 4.1.2
 Summary: Python bindings for MPI
 Author: Lisandro Dalcin
 Author-email: [email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/conf/build-meson.sh 
new/mpi4py-4.1.2/conf/build-meson.sh
--- old/mpi4py-4.1.1/conf/build-meson.sh        2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/conf/build-meson.sh        2026-05-16 11:17:15.000000000 
+0200
@@ -4,7 +4,6 @@
 test -d src/mpi4py
 rm -rf build install
 set -- --python.bytecompile=-1 --python.platlibdir="" "$@"
-env CC=mpicc \
 meson setup build --prefix="$PWD"/install "$@"
 meson compile -C build
 meson install -C build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/conf/builder.py 
new/mpi4py-4.1.2/conf/builder.py
--- old/mpi4py-4.1.1/conf/builder.py    2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/conf/builder.py    2026-05-16 11:17:15.000000000 +0200
@@ -2,7 +2,6 @@
 import importlib
 import os
 import pathlib
-import shutil
 import sys
 
 # ---
@@ -204,15 +203,9 @@
 
 
 def setup_env_mpicc():
-    mpicc = shutil.which("mpicc")
-    mpicc = os.environ.get("MPICC", mpicc)
-    mpicc = os.environ.get("MPI4PY_BUILD_MPICC", mpicc)
-    if not mpicc:
-        return
-    if " " in mpicc:
-        mpicc = f'"{mpicc}"'
-    if "CC" not in os.environ:
-        os.environ["CC"] = mpicc
+    mpicc = os.environ.get("MPI4PY_BUILD_MPICC")
+    if mpicc is not None:
+        os.environ.setdefault("MPICC", mpicc)
 
 
 if get_build_backend_name() == "setuptools":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/conf/mpiapigen.py 
new/mpi4py-4.1.2/conf/mpiapigen.py
--- old/mpi4py-4.1.1/conf/mpiapigen.py  2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/conf/mpiapigen.py  2026-05-16 11:17:15.000000000 +0200
@@ -1105,6 +1105,15 @@
             #include <mpi-ext.h>
             """)
             )
+            fileobj.write(
+                dedent("""\
+            #if OMPI_MAJOR_VERSION <= 5
+            OMPI_DECLSPEC extern struct \\
+            ompi_predefined_datatype_t \\
+            ompi_mpi_logical16;
+            #endif
+            """)
+            )
             for node in handles:
                 code = abi_handle_openmpi(node)
                 fileobj.write(code)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/conf/mpidistutils.py 
new/mpi4py-4.1.2/conf/mpidistutils.py
--- old/mpi4py-4.1.1/conf/mpidistutils.py       2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/conf/mpidistutils.py       2026-05-16 11:17:15.000000000 
+0200
@@ -1274,7 +1274,7 @@
         #
         for source, target in self._get_pth_files(ext):
             log.info("writing %s", target)
-            copy_file(source, target, verbose=False, dry_run=self.dry_run)
+            copy_file(source, target, verbose=self.verbose)
 
     def get_outputs(self):
         outputs = cmd_build_ext.build_ext.get_outputs(self)
@@ -1440,7 +1440,7 @@
             src = self.get_exe_fullpath(exe)
             dest = self.get_exe_fullpath(exe, root_dir)
             self.mkpath(os.path.dirname(dest))
-            copy_file(src, dest, verbose=self.verbose, dry_run=self.dry_run)
+            copy_file(src, dest, verbose=self.verbose)
 
     def get_outputs(self):
         outputs = []
@@ -1603,7 +1603,7 @@
         # remove the build/temp.<plat> directory
         # (unless it's already gone)
         if os.path.exists(self.build_temp):
-            remove_tree(self.build_temp, dry_run=self.dry_run)
+            remove_tree(self.build_temp, verbose=self.verbose)
         else:
             log.debug("'%s' does not exist -- can't clean it", self.build_temp)
 
@@ -1616,7 +1616,7 @@
                 self.bdist_base,
             ):
                 if os.path.exists(directory):
-                    remove_tree(directory, dry_run=self.dry_run)
+                    remove_tree(directory, verbose=self.verbose)
                 else:
                     log.debug(
                         "'%s' does not exist -- can't clean it", directory
@@ -1624,19 +1624,18 @@
 
         # just for the heck of it, try to remove the base build directory:
         # we might have emptied it right now, but if not we don't care
-        if not self.dry_run:
-            try:
-                os.rmdir(self.build_base)
-                log.info("removing '%s'", self.build_base)
-            except OSError:
-                pass
+        try:
+            os.rmdir(self.build_base)
+            log.info("removing '%s'", self.build_base)
+        except OSError:
+            pass
 
         if self.all:
             # remove the <package>.egg_info directory
             try:
                 egg_info = self.get_finalized_command("egg_info").egg_info
                 if os.path.exists(egg_info):
-                    remove_tree(egg_info, dry_run=self.dry_run)
+                    remove_tree(egg_info, verbose=self.verbose)
                 else:
                     log.debug(
                         "'%s' does not exist -- can't clean it", egg_info
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/conf/requirements-build-mesonpy.txt 
new/mpi4py-4.1.2/conf/requirements-build-mesonpy.txt
--- old/mpi4py-4.1.1/conf/requirements-build-mesonpy.txt        2025-10-10 
10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/conf/requirements-build-mesonpy.txt        2026-05-16 
11:17:15.000000000 +0200
@@ -1 +1,2 @@
+meson >= 1.5.1
 meson-python
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/meson.build new/mpi4py-4.1.2/meson.build
--- old/mpi4py-4.1.1/meson.build        2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/meson.build        2026-05-16 11:17:15.000000000 +0200
@@ -10,7 +10,7 @@
     check: true,
   ).stdout().strip(),
   license: 'BSD-3-Clause',
-  meson_version: '>=1.1.0',
+  meson_version: '>=1.5.1',
 )
 
 # ---
@@ -23,47 +23,10 @@
 
 # ---
 
-if host_machine.system() == 'windows'
-  mpi = dependency('mpi', required: true)
-else
-  mpi = dependency('', required: false)
-endif
+mpi = dependency('mpi', required: true)
 pyembed = py.dependency(embed: true, disabler: true)
 compiler = meson.get_compiler('c')
 
-configtest_c = '''
-#include <mpi.h>
-int main(int argc, char *argv[])
-{
-  MPI_Init(&argc, &argv);
-  MPI_Finalize();
-  return 0;
-}
-'''
-advise = '''
-Set environment variable `CC=mpicc` and try again.'''
-if not compiler.has_header('mpi.h', dependencies: [mpi])
-  error('MPI C header file "mpi.h" not found.', advise)
-endif
-if not compiler.has_function('MPI_Init', dependencies: [mpi])
-  error('MPI C function MPI_Init not found.', advise)
-endif
-if not compiler.has_function('MPI_Finalize', dependencies: [mpi])
-  error('MPI C function MPI_Finalize not found.', advise)
-endif
-if not compiler.compiles(configtest_c, dependencies: [mpi])
-  error('Cannot compile basic MPI program.', advise)
-endif
-if not compiler.links(configtest_c, dependencies: [mpi])
-  error('Cannot link basic MPI program.', advise)
-endif
-
-
-# ---
-
-echo = [py, '-c', 'import sys; print(*sys.argv[1:], sep=chr(10))']
-copy = [py, '-c', 'import shutil, sys; shutil.copy(*sys.argv[1:])']
-
 # ---
 
 cython = [py, files('conf' / 'cythonize.py')]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/compat/mpich.h 
new/mpi4py-4.1.2/src/lib-mpi/compat/mpich.h
--- old/mpi4py-4.1.1/src/lib-mpi/compat/mpich.h 2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/src/lib-mpi/compat/mpich.h 2026-05-16 11:17:15.000000000 
+0200
@@ -7,6 +7,9 @@
 #define PyMPI_MPICH4_LT(NUMVERSION) \
   ((MPICH_NUMVERSION >= 40000000) && (MPICH_NUMVERSION < NUMVERSION))
 
+#define PyMPI_MPICH3_GE(NUMVERSION) \
+  ((MPICH_NUMVERSION >= NUMVERSION) && (MPICH_NUMVERSION < 40000000))
+
 /* -------------------------------------------------------------------------- 
*/
 
 /* https://github.com/pmodels/mpich/pull/5467 */
@@ -82,7 +85,7 @@
 /* https://github.com/pmodels/mpich/issues/6351 */
 /* https://github.com/pmodels/mpich/pull/6354   */
 
-#if PyMPI_MPICH4_LT(40100300) || PyMPI_LEGACY_ABI
+#if PyMPI_MPICH4_LT(40100300) || PyMPI_LEGACY_ABI || PyMPI_MPICH3_GE(30000000)
 static int PyMPI_MPICH_MPI_Reduce_c(void *sendbuf, void *recvbuf,
                                     MPI_Count count, MPI_Datatype datatype,
                                     MPI_Op op, int root, MPI_Comm comm)
@@ -90,6 +93,8 @@
   double dummy[1] = {0};
 #if PyMPI_LEGACY_ABI
   if (pympi_numversion() < 40)
+#endif
+#if PyMPI_LEGACY_ABI || PyMPI_MPICH3_GE(30000000)
   if (root == MPI_PROC_NULL) datatype = MPI_UNSIGNED_CHAR;
 #endif
 #if PyMPI_LEGACY_ABI
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/compat/mpich3.h 
new/mpi4py-4.1.2/src/lib-mpi/compat/mpich3.h
--- old/mpi4py-4.1.1/src/lib-mpi/compat/mpich3.h        2025-10-10 
10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/src/lib-mpi/compat/mpich3.h        2026-05-16 
11:17:15.000000000 +0200
@@ -6,15 +6,14 @@
 
 /* -------------------------------------------------------------------------- 
*/
 
-#define PyMPI_MPICH3_GE(NUMVERSION) \
-  ((MPICH_NUMVERSION >= NUMVERSION) && (MPICH_NUMVERSION < 40000000))
-
-/* -------------------------------------------------------------------------- 
*/
+#if PyMPI_MPICH3_GE(30000000) || !PyMPI_LEGACY_ABI
+#define pympi_numversion() (10 * MPI_VERSION + MPI_SUBVERSION)
+#endif
 
 #if PyMPI_MPICH3_GE(30000000) || PyMPI_LEGACY_ABI
-static int PyMPI_MPICH3_MPI_Type_get_extent_x(MPI_Datatype datatype,
-                                              MPI_Count   *lb,
-                                              MPI_Count   *extent)
+static int PyMPI_MPICH_MPI_Type_get_extent_x(MPI_Datatype datatype,
+                                             MPI_Count   *lb,
+                                             MPI_Count   *extent)
 {
   int ierr;
   MPI_Aint lb_a = MPI_UNDEFINED;
@@ -39,13 +38,13 @@
   return ierr;
 }
 #undef  MPI_Type_get_extent_x
-#define MPI_Type_get_extent_x PyMPI_MPICH3_MPI_Type_get_extent_x
+#define MPI_Type_get_extent_x PyMPI_MPICH_MPI_Type_get_extent_x
 #endif
 
-#if PyMPI_LEGACY_ABI
-static int PyMPI_MPICH3_MPI_Type_get_extent_c(MPI_Datatype datatype,
-                                              MPI_Count    *lb,
-                                              MPI_Count    *extent)
+#if PyMPI_MPICH3_GE(30000000) || PyMPI_LEGACY_ABI
+static int PyMPI_MPICH_MPI_Type_get_extent_c(MPI_Datatype datatype,
+                                             MPI_Count    *lb,
+                                             MPI_Count    *extent)
 {
   if (pympi_numversion() >= 40)
     return MPI_Type_get_extent_c(datatype, lb, extent);
@@ -53,13 +52,13 @@
     return MPI_Type_get_extent_x(datatype, lb, extent);
 }
 #undef  MPI_Type_get_extent_c
-#define MPI_Type_get_extent_c PyMPI_MPICH3_MPI_Type_get_extent_c
+#define MPI_Type_get_extent_c PyMPI_MPICH_MPI_Type_get_extent_c
 #endif
 
 #if PyMPI_MPICH3_GE(30000000) || PyMPI_LEGACY_ABI
-static int PyMPI_MPICH3_MPI_Type_get_true_extent_x(MPI_Datatype datatype,
-                                                   MPI_Count   *lb,
-                                                   MPI_Count   *extent)
+static int PyMPI_MPICH_MPI_Type_get_true_extent_x(MPI_Datatype datatype,
+                                                  MPI_Count   *lb,
+                                                  MPI_Count   *extent)
 {
   int ierr;
   MPI_Aint lb_a = MPI_UNDEFINED;
@@ -84,13 +83,13 @@
   return ierr;
 }
 #undef  MPI_Type_get_true_extent_x
-#define MPI_Type_get_true_extent_x PyMPI_MPICH3_MPI_Type_get_true_extent_x
+#define MPI_Type_get_true_extent_x PyMPI_MPICH_MPI_Type_get_true_extent_x
 #endif
 
-#if PyMPI_LEGACY_ABI
-static int PyMPI_MPICH3_MPI_Type_get_true_extent_c(MPI_Datatype datatype,
-                                                   MPI_Count   *lb,
-                                                   MPI_Count   *extent)
+#if PyMPI_MPICH3_GE(30000000) || PyMPI_LEGACY_ABI
+static int PyMPI_MPICH_MPI_Type_get_true_extent_c(MPI_Datatype datatype,
+                                                  MPI_Count   *lb,
+                                                  MPI_Count   *extent)
 {
   if (pympi_numversion() >= 40)
     return MPI_Type_get_true_extent_c(datatype, lb, extent);
@@ -98,12 +97,15 @@
     return MPI_Type_get_true_extent_x(datatype, lb, extent);
 }
 #undef  MPI_Type_get_true_extent_c
-#define MPI_Type_get_true_extent_c PyMPI_MPICH3_MPI_Type_get_true_extent_c
+#define MPI_Type_get_true_extent_c PyMPI_MPICH_MPI_Type_get_true_extent_c
 #endif
 
+#if PyMPI_MPICH3_GE(30000000) || !PyMPI_LEGACY_ABI
+#undef pympi_numversion
+#endif
 
 #if PyMPI_MPICH3_GE(30400000) || PyMPI_LEGACY_ABI
-static int PyMPI_MPICH3_MPI_Initialized(int *flag)
+static int PyMPI_MPICH_MPI_Initialized(int *flag)
 {
   int ierr;
   {ierr = MPI_Initialized(flag); if (ierr) return ierr;}
@@ -115,14 +117,14 @@
   return MPI_SUCCESS;
 }
 #undef  MPI_Initialized
-#define MPI_Initialized PyMPI_MPICH3_MPI_Initialized
+#define MPI_Initialized PyMPI_MPICH_MPI_Initialized
 #endif
 
 #if PyMPI_MPICH3_GE(30400000) || PyMPI_LEGACY_ABI
-static int PyMPI_MPICH3_MPI_Win_get_attr(MPI_Win win,
-                                         int keyval,
-                                         void *attrval,
-                                         int *flag)
+static int PyMPI_MPICH_MPI_Win_get_attr(MPI_Win win,
+                                        int keyval,
+                                        void *attrval,
+                                        int *flag)
 {
   int ierr;
   static MPI_Aint zero[1] = {0}; zero[0] = 0;
@@ -135,89 +137,89 @@
   return MPI_SUCCESS;
 }
 #undef  MPI_Win_get_attr
-#define MPI_Win_get_attr PyMPI_MPICH3_MPI_Win_get_attr
+#define MPI_Win_get_attr PyMPI_MPICH_MPI_Win_get_attr
 #endif
 
 /* -------------------------------------------------------------------------- 
*/
 
 #if (MPICH_NUMVERSION == 30101300)
 
-static int PyMPI_MPICH_MPI_Status_c2f(MPI_Status *c_status,
-                                      MPI_Fint *f_status)
+static int PyMPI_MPICH3_MPI_Status_c2f(MPI_Status *c_status,
+                                       MPI_Fint *f_status)
 {
   if (c_status == NULL || f_status == NULL) return MPI_ERR_ARG;
   *(MPI_Status *)(char *)f_status = *c_status;
   return MPI_SUCCESS;
 }
-#define MPI_Status_c2f PyMPI_MPICH_MPI_Status_c2f
+#define MPI_Status_c2f PyMPI_MPICH3_MPI_Status_c2f
 
 #endif
 
 #if (MPICH_NUMVERSION < 30100301)
 
-static int PyMPI_MPICH_MPI_Add_error_class(int *errorclass)
+static int PyMPI_MPICH3_MPI_Add_error_class(int *errorclass)
 {
   int ierr; char errstr[1] = {0};
   ierr = MPI_Add_error_class(errorclass); if (ierr) return ierr;
   return MPI_Add_error_string(*errorclass,errstr);
 }
 #undef  MPI_Add_error_class
-#define MPI_Add_error_class PyMPI_MPICH_MPI_Add_error_class
+#define MPI_Add_error_class PyMPI_MPICH3_MPI_Add_error_class
 
-static int PyMPI_MPICH_MPI_Add_error_code(int errorclass,
-                                          int *errorcode)
+static int PyMPI_MPICH3_MPI_Add_error_code(int errorclass,
+                                           int *errorcode)
 {
   int ierr; char errstr[1] = {0};
   ierr = MPI_Add_error_code(errorclass,errorcode); if (ierr) return ierr;
   return MPI_Add_error_string(*errorcode,errstr);
 }
 #undef  MPI_Add_error_code
-#define MPI_Add_error_code PyMPI_MPICH_MPI_Add_error_code
+#define MPI_Add_error_code PyMPI_MPICH3_MPI_Add_error_code
 
 #endif
 
 #if (MPICH_NUMVERSION < 30100000)
 
-static int PyMPI_MPICH_MPI_Type_size_x(MPI_Datatype datatype,
-                                       MPI_Count *size)
+static int PyMPI_MPICH3_MPI_Type_size_x(MPI_Datatype datatype,
+                                        MPI_Count *size)
 {
   int ierr = MPI_Type_commit(&datatype); if (ierr) return ierr;
   return MPI_Type_size_x(datatype,size);
 }
 #undef  MPI_Type_size_x
-#define MPI_Type_size_x PyMPI_MPICH_MPI_Type_size_x
+#define MPI_Type_size_x PyMPI_MPICH3_MPI_Type_size_x
 
-static int PyMPI_MPICH_MPI_Type_get_extent_x(MPI_Datatype datatype,
-                                             MPI_Count *lb,
-                                             MPI_Count *extent)
+static int PyMPI_MPICH3_MPI_Type_get_extent_x(MPI_Datatype datatype,
+                                              MPI_Count *lb,
+                                              MPI_Count *extent)
 {
   int ierr = MPI_Type_commit(&datatype); if (ierr) return ierr;
   return MPI_Type_get_extent_x(datatype,lb,extent);
 }
 #undef  MPI_Type_get_extent_x
-#define MPI_Type_get_extent_x PyMPI_MPICH_MPI_Type_get_extent_x
+#define MPI_Type_get_extent_x PyMPI_MPICH3_MPI_Type_get_extent_x
 
-static int PyMPI_MPICH_MPI_Type_get_true_extent_x(MPI_Datatype datatype,
-                                                  MPI_Count *lb,
-                                                  MPI_Count *extent)
+static int PyMPI_MPICH3_MPI_Type_get_true_extent_x(MPI_Datatype datatype,
+                                                   MPI_Count *lb,
+                                                   MPI_Count *extent)
 {
   int ierr = MPI_Type_commit(&datatype); if (ierr) return ierr;
   return MPI_Type_get_true_extent_x(datatype,lb,extent);
 }
 #undef  MPI_Type_get_true_extent_x
-#define MPI_Type_get_true_extent_x PyMPI_MPICH_MPI_Type_get_true_extent_x
+#define MPI_Type_get_true_extent_x PyMPI_MPICH3_MPI_Type_get_true_extent_x
 
-static int PyMPI_MPICH_MPI_Get_accumulate(void *origin_addr,
-                                          int origin_count,
-                                          MPI_Datatype origin_datatype,
-                                          void *result_addr,
-                                          int result_count,
-                                          MPI_Datatype result_datatype,
-                                          int target_rank,
-                                          MPI_Aint target_disp,
-                                          int target_count,
-                                          MPI_Datatype target_datatype,
-                                          MPI_Op op, MPI_Win win)
+static int PyMPI_MPICH3_MPI_Get_accumulate(void *origin_addr,
+                                           int origin_count,
+                                           MPI_Datatype origin_datatype,
+                                           void *result_addr,
+                                           int result_count,
+                                           MPI_Datatype result_datatype,
+                                           int target_rank,
+                                           MPI_Aint target_disp,
+                                           int target_count,
+                                           MPI_Datatype target_datatype,
+                                           MPI_Op op, MPI_Win win)
 {
   double origin_buf = 0, result_buf = 0;
   if (!origin_addr && !origin_count) origin_addr = (void *)&origin_buf;
@@ -229,20 +231,20 @@
                             op, win);
 }
 #undef  MPI_Get_accumulate
-#define MPI_Get_accumulate PyMPI_MPICH_MPI_Get_accumulate
+#define MPI_Get_accumulate PyMPI_MPICH3_MPI_Get_accumulate
 
-static int PyMPI_MPICH_MPI_Rget_accumulate(void *origin_addr,
-                                           int origin_count,
-                                           MPI_Datatype origin_datatype,
-                                           void *result_addr,
-                                           int result_count,
-                                           MPI_Datatype result_datatype,
-                                           int target_rank,
-                                           MPI_Aint target_disp,
-                                           int target_count,
-                                           MPI_Datatype target_datatype,
-                                           MPI_Op op, MPI_Win win,
-                                           MPI_Request *request)
+static int PyMPI_MPICH3_MPI_Rget_accumulate(void *origin_addr,
+                                            int origin_count,
+                                            MPI_Datatype origin_datatype,
+                                            void *result_addr,
+                                            int result_count,
+                                            MPI_Datatype result_datatype,
+                                            int target_rank,
+                                            MPI_Aint target_disp,
+                                            int target_count,
+                                            MPI_Datatype target_datatype,
+                                            MPI_Op op, MPI_Win win,
+                                            MPI_Request *request)
 {
   double origin_buf = 0, result_buf = 0;
   if (!origin_addr && !origin_count) origin_addr = (void *)&origin_buf;
@@ -254,7 +256,7 @@
                              op, win, request);
 }
 #undef  MPI_Rget_accumulate
-#define MPI_Rget_accumulate PyMPI_MPICH_MPI_Rget_accumulate
+#define MPI_Rget_accumulate PyMPI_MPICH3_MPI_Rget_accumulate
 
 #endif
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/config/impi.h 
new/mpi4py-4.1.2/src/lib-mpi/config/impi.h
--- old/mpi4py-4.1.1/src/lib-mpi/config/impi.h  2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/src/lib-mpi/config/impi.h  2026-05-16 11:17:15.000000000 
+0200
@@ -274,6 +274,44 @@
 
 #endif
 
+#if MPI_VERSION < 5
+
+#if I_MPI_NUMVERSION >= 20211700300
+#define PyMPI_HAVE_MPI_LOGICAL1 1
+#define PyMPI_HAVE_MPI_LOGICAL2 1
+#define PyMPI_HAVE_MPI_LOGICAL4 1
+#define PyMPI_HAVE_MPI_LOGICAL8 1
+#define PyMPI_HAVE_MPI_LOGICAL16 1
+#define PyMPI_HAVE_MPI_Comm_toint 1
+#define PyMPI_HAVE_MPI_Errhandler_toint 1
+#define PyMPI_HAVE_MPI_File_toint 1
+#define PyMPI_HAVE_MPI_Group_toint 1
+#define PyMPI_HAVE_MPI_Info_toint 1
+#define PyMPI_HAVE_MPI_Message_toint 1
+#define PyMPI_HAVE_MPI_Op_toint 1
+#define PyMPI_HAVE_MPI_Request_toint 1
+#define PyMPI_HAVE_MPI_Session_toint 1
+#define PyMPI_HAVE_MPI_Type_toint 1
+#define PyMPI_HAVE_MPI_Win_toint 1
+#define PyMPI_HAVE_MPI_Comm_fromint 1
+#define PyMPI_HAVE_MPI_Errhandler_fromint 1
+#define PyMPI_HAVE_MPI_File_fromint 1
+#define PyMPI_HAVE_MPI_Group_fromint 1
+#define PyMPI_HAVE_MPI_Info_fromint 1
+#define PyMPI_HAVE_MPI_Message_fromint 1
+#define PyMPI_HAVE_MPI_Op_fromint 1
+#define PyMPI_HAVE_MPI_Request_fromint 1
+#define PyMPI_HAVE_MPI_Session_fromint 1
+#define PyMPI_HAVE_MPI_Type_fromint 1
+#define PyMPI_HAVE_MPI_Win_fromint 1
+#define PyMPI_HAVE_MPI_ERR_ABI 1
+#define PyMPI_HAVE_MPI_Abi_get_version 1
+#define PyMPI_HAVE_MPI_Abi_get_info 1
+#define PyMPI_HAVE_MPI_Abi_get_fortran_info 1
+#endif
+
+#endif
+
 #if I_MPI_NUMVERSION < 20211700300 && defined (_WIN32)
 #undef PyMPI_HAVE_MPI_File_get_type_extent_c
 #undef PyMPI_HAVE_MPI_Register_datarep_c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/config/openmpi.h 
new/mpi4py-4.1.2/src/lib-mpi/config/openmpi.h
--- old/mpi4py-4.1.1/src/lib-mpi/config/openmpi.h       2025-10-10 
10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/src/lib-mpi/config/openmpi.h       2026-05-16 
11:17:15.000000000 +0200
@@ -18,52 +18,98 @@
 #ifndef OMPI_HAVE_FORTRAN_LOGICAL16
 #define OMPI_HAVE_FORTRAN_LOGICAL16 0
 #endif
+#ifndef OMPI_HAVE_FORTRAN_INTEGER1
+#define OMPI_HAVE_FORTRAN_INTEGER1 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_INTEGER2
+#define OMPI_HAVE_FORTRAN_INTEGER2 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_INTEGER4
+#define OMPI_HAVE_FORTRAN_INTEGER4 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_INTEGER8
+#define OMPI_HAVE_FORTRAN_INTEGER8 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_INTEGER16
+#define OMPI_HAVE_FORTRAN_INTEGER16 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_REAL2
+#define OMPI_HAVE_FORTRAN_REAL2 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_REAL4
+#define OMPI_HAVE_FORTRAN_REAL4 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_REAL8
+#define OMPI_HAVE_FORTRAN_REAL8 0
+#endif
+#ifndef OMPI_HAVE_FORTRAN_REAL16
+#define OMPI_HAVE_FORTRAN_REAL16 0
+#endif
 
-#if !OMPI_HAVE_FORTRAN_LOGICAL1
 #undef PyMPI_HAVE_MPI_LOGICAL1
-#endif
-#if !OMPI_HAVE_FORTRAN_LOGICAL2
 #undef PyMPI_HAVE_MPI_LOGICAL2
-#endif
-#if !OMPI_HAVE_FORTRAN_LOGICAL4
 #undef PyMPI_HAVE_MPI_LOGICAL4
-#endif
-#if !OMPI_HAVE_FORTRAN_LOGICAL8
 #undef PyMPI_HAVE_MPI_LOGICAL8
-#endif
-#if !OMPI_HAVE_FORTRAN_LOGICAL16
 #undef PyMPI_HAVE_MPI_LOGICAL16
-#endif
-#if !OMPI_HAVE_FORTRAN_INTEGER1
 #undef PyMPI_HAVE_MPI_INTEGER1
-#endif
-#if !OMPI_HAVE_FORTRAN_INTEGER2
 #undef PyMPI_HAVE_MPI_INTEGER2
-#endif
-#if !OMPI_HAVE_FORTRAN_INTEGER4
 #undef PyMPI_HAVE_MPI_INTEGER4
-#endif
-#if !OMPI_HAVE_FORTRAN_INTEGER8
 #undef PyMPI_HAVE_MPI_INTEGER8
-#endif
-#if !OMPI_HAVE_FORTRAN_INTEGER16
 #undef PyMPI_HAVE_MPI_INTEGER16
-#endif
-#if !OMPI_HAVE_FORTRAN_REAL2
 #undef PyMPI_HAVE_MPI_REAL2
-#undef PyMPI_HAVE_MPI_COMPLEX4
-#endif
-#if !OMPI_HAVE_FORTRAN_REAL4
 #undef PyMPI_HAVE_MPI_REAL4
-#undef PyMPI_HAVE_MPI_COMPLEX8
-#endif
-#if !OMPI_HAVE_FORTRAN_REAL8
 #undef PyMPI_HAVE_MPI_REAL8
-#undef PyMPI_HAVE_MPI_COMPLEX16
-#endif
-#if !OMPI_HAVE_FORTRAN_REAL16
 #undef PyMPI_HAVE_MPI_REAL16
+#undef PyMPI_HAVE_MPI_COMPLEX4
+#undef PyMPI_HAVE_MPI_COMPLEX8
+#undef PyMPI_HAVE_MPI_COMPLEX16
 #undef PyMPI_HAVE_MPI_COMPLEX32
+
+#if OMPI_HAVE_FORTRAN_LOGICAL1
+#define PyMPI_HAVE_MPI_LOGICAL1 1
+#endif
+#if OMPI_HAVE_FORTRAN_LOGICAL2
+#define PyMPI_HAVE_MPI_LOGICAL2 1
+#endif
+#if OMPI_HAVE_FORTRAN_LOGICAL4
+#define PyMPI_HAVE_MPI_LOGICAL4 1
+#endif
+#if OMPI_HAVE_FORTRAN_LOGICAL8
+#define PyMPI_HAVE_MPI_LOGICAL8 1
+#endif
+#if OMPI_HAVE_FORTRAN_LOGICAL16
+#define PyMPI_HAVE_MPI_LOGICAL16 1
+#endif
+#if OMPI_HAVE_FORTRAN_INTEGER1
+#define PyMPI_HAVE_MPI_INTEGER1 1
+#endif
+#if OMPI_HAVE_FORTRAN_INTEGER2
+#define PyMPI_HAVE_MPI_INTEGER2 1
+#endif
+#if OMPI_HAVE_FORTRAN_INTEGER4
+#define PyMPI_HAVE_MPI_INTEGER4 1
+#endif
+#if OMPI_HAVE_FORTRAN_INTEGER8
+#define PyMPI_HAVE_MPI_INTEGER8 1
+#endif
+#if OMPI_HAVE_FORTRAN_INTEGER16
+#define PyMPI_HAVE_MPI_INTEGER16 1
+#endif
+#if OMPI_HAVE_FORTRAN_REAL2
+#define PyMPI_HAVE_MPI_REAL2 1
+#define PyMPI_HAVE_MPI_COMPLEX4 1
+#endif
+#if OMPI_HAVE_FORTRAN_REAL4
+#define PyMPI_HAVE_MPI_REAL4 1
+#define PyMPI_HAVE_MPI_COMPLEX8 1
+#endif
+#if OMPI_HAVE_FORTRAN_REAL8
+#define PyMPI_HAVE_MPI_REAL8 1
+#define PyMPI_HAVE_MPI_COMPLEX16 1
+#endif
+#if OMPI_HAVE_FORTRAN_REAL16
+#define PyMPI_HAVE_MPI_REAL16 1
+#define PyMPI_HAVE_MPI_COMPLEX32 1
 #endif
 
 #ifdef OMPI_PROVIDE_MPI_FILE_INTERFACE
@@ -209,13 +255,72 @@
 #define PyMPI_HAVE_MPI_F_STATUS_SIZE 1
 #endif
 
-#if OMPI_NUMVERSION >= 50100
+#if OMPI_NUMVERSION >= 60000
 #define PyMPI_HAVE_MPI_ERR_ERRHANDLER 1
+#define PyMPI_HAVE_MPI_Remove_error_class 1
+#define PyMPI_HAVE_MPI_Remove_error_code 1
+#define PyMPI_HAVE_MPI_Remove_error_string 1
+#define PyMPI_HAVE_MPI_Status_get_source 1
+#define PyMPI_HAVE_MPI_Status_set_source 1
+#define PyMPI_HAVE_MPI_Status_get_tag 1
+#define PyMPI_HAVE_MPI_Status_set_tag 1
+#define PyMPI_HAVE_MPI_Status_get_error 1
+#define PyMPI_HAVE_MPI_Status_set_error 1
+#define PyMPI_HAVE_MPI_COMBINER_VALUE_INDEX 1
+#define PyMPI_HAVE_MPI_Type_get_value_index 1
+#define PyMPI_HAVE_MPI_Request_get_status_any 1
+#define PyMPI_HAVE_MPI_Request_get_status_all 1
+#define PyMPI_HAVE_MPI_Request_get_status_some 1
+#define PyMPI_HAVE_MPI_BUFFER_AUTOMATIC 1
+#define PyMPI_HAVE_MPI_Buffer_flush 1
+#define PyMPI_HAVE_MPI_Buffer_iflush 1
+#define PyMPI_HAVE_MPI_Comm_attach_buffer 1
+#define PyMPI_HAVE_MPI_Comm_detach_buffer 1
+#define PyMPI_HAVE_MPI_Comm_flush_buffer 1
+#define PyMPI_HAVE_MPI_Comm_iflush_buffer 1
+#define PyMPI_HAVE_MPI_Session_attach_buffer 1
+#define PyMPI_HAVE_MPI_Session_detach_buffer 1
+#define PyMPI_HAVE_MPI_Session_flush_buffer  1
+#define PyMPI_HAVE_MPI_Session_iflush_buffer 1
+#define PyMPI_HAVE_MPI_Comm_attach_buffer_c 1
+#define PyMPI_HAVE_MPI_Comm_detach_buffer_c 1
+#define PyMPI_HAVE_MPI_Session_attach_buffer_c 1
+#define PyMPI_HAVE_MPI_Session_detach_buffer_c 1
+#define PyMPI_HAVE_MPI_COMM_TYPE_RESOURCE_GUIDED 1
+#define PyMPI_HAVE_MPI_Get_hw_resource_info 1
+#endif
+
+#if OMPI_NUMVERSION >= 60100 && defined(MPI_ERR_ABI)
+#define PyMPI_HAVE_MPI_Comm_toint 1
+#define PyMPI_HAVE_MPI_Errhandler_toint 1
+#define PyMPI_HAVE_MPI_File_toint 1
+#define PyMPI_HAVE_MPI_Group_toint 1
+#define PyMPI_HAVE_MPI_Info_toint 1
+#define PyMPI_HAVE_MPI_Message_toint 1
+#define PyMPI_HAVE_MPI_Op_toint 1
+#define PyMPI_HAVE_MPI_Request_toint 1
+#define PyMPI_HAVE_MPI_Session_toint 1
+#define PyMPI_HAVE_MPI_Type_toint 1
+#define PyMPI_HAVE_MPI_Win_toint 1
+#define PyMPI_HAVE_MPI_Comm_fromint 1
+#define PyMPI_HAVE_MPI_Errhandler_fromint 1
+#define PyMPI_HAVE_MPI_File_fromint 1
+#define PyMPI_HAVE_MPI_Group_fromint 1
+#define PyMPI_HAVE_MPI_Info_fromint 1
+#define PyMPI_HAVE_MPI_Message_fromint 1
+#define PyMPI_HAVE_MPI_Op_fromint 1
+#define PyMPI_HAVE_MPI_Request_fromint 1
+#define PyMPI_HAVE_MPI_Session_fromint 1
+#define PyMPI_HAVE_MPI_Type_fromint 1
+#define PyMPI_HAVE_MPI_Win_fromint 1
+#define PyMPI_HAVE_MPI_ERR_ABI 1
+#define PyMPI_HAVE_MPI_Abi_get_version 1
+#define PyMPI_HAVE_MPI_Abi_get_info 1
+#define PyMPI_HAVE_MPI_Abi_get_fortran_info 1
 #endif
 
 #endif
 
-
 #if MPI_VERSION < 6
 
 #ifdef MPI_ERR_REVOKED
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/mpiabi.h 
new/mpi4py-4.1.2/src/lib-mpi/mpiabi.h
--- old/mpi4py-4.1.1/src/lib-mpi/mpiabi.h       2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/src/lib-mpi/mpiabi.h       2026-05-16 11:17:15.000000000 
+0200
@@ -45,7 +45,7 @@
   if (_pympi_fp_##fn) return (*_pympi_fp_##fn)(__VA_ARGS__); \
 } while (0)
 #endif /* Windows */
-#endif
+#endif /* PyMPI_STANDARD_ABI || PyMPI_LEGACY_ABI */
 
 #ifndef PyMPI_WEAK_LOAD
 #  define PyMPI_WEAK_LOAD(sym)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/mpiabi0.h 
new/mpi4py-4.1.2/src/lib-mpi/mpiabi0.h
--- old/mpi4py-4.1.1/src/lib-mpi/mpiabi0.h      2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/src/lib-mpi/mpiabi0.h      2026-05-16 11:17:15.000000000 
+0200
@@ -6,6 +6,11 @@
 
 #ifdef OPEN_MPI
 #include <mpi-ext.h>
+#if OMPI_MAJOR_VERSION <= 5
+OMPI_DECLSPEC extern struct \
+ompi_predefined_datatype_t \
+ompi_mpi_logical16;
+#endif
 PyMPI_WEAK_LOAD(ompi_mpi_datatype_null)
 PyMPI_WEAK_LOAD(ompi_mpi_packed)
 PyMPI_WEAK_LOAD(ompi_mpi_byte)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/lib-mpi/mpiapi50.h 
new/mpi4py-4.1.2/src/lib-mpi/mpiapi50.h
--- old/mpi4py-4.1.1/src/lib-mpi/mpiapi50.h     2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/src/lib-mpi/mpiapi50.h     2026-05-16 11:17:15.000000000 
+0200
@@ -46,8 +46,23 @@
     (void) MPI_Comm_call_errhandler(MPI_COMM_SELF, MPI_ERR_ARG);
     return MPI_ERR_ARG;
   }
+#if defined(MPICH_NAME) && PyMPI_LEGACY_ABI
+#define PyMPI_ABI_HAS_TYPE(type) \
+  ((pympi_numversion() < 50 &&   \
+    ((type) == MPI_LOGICAL1  ||  \
+     (type) == MPI_LOGICAL2  ||  \
+     (type) == MPI_LOGICAL4  ||  \
+     (type) == MPI_LOGICAL8  ||  \
+     (type) == MPI_LOGICAL16 ||  \
+     (type) == MPI_INTEGER16 ||  \
+     (type) == MPI_REAL2     ||  \
+     (type) == MPI_COMPLEX4      \
+     )) ? 0 : 1)
+#else
+#define PyMPI_ABI_HAS_TYPE(type) (1)
+#endif
 #define PyMPI_ABI_GET_TYPE_SIZE(type, typesize) do { \
-    if ((type) != MPI_DATATYPE_NULL) { \
+    if ((type) != MPI_DATATYPE_NULL && PyMPI_ABI_HAS_TYPE(type)) { \
       MPI_Count size = MPI_UNDEFINED; \
       ierr = MPI_Type_size_c((type), &size); \
       if (!ierr && size > 0) (typesize) = (int) size; \
@@ -99,6 +114,7 @@
     PyMPI_ABI_SET_TYPE_SUPP("mpi_complex32",        MPI_COMPLEX32);
     PyMPI_ABI_SET_TYPE_SUPP("mpi_double_complex",   MPI_DOUBLE_COMPLEX);
   }
+#undef PyMPI_ABI_HAS_TYPE
 #undef PyMPI_ABI_GET_TYPE_SIZE
 #undef PyMPI_ABI_SET_TYPE_SIZE
 #undef PyMPI_ABI_SET_TYPE_SUPP
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/mpi4py/__init__.py 
new/mpi4py-4.1.2/src/mpi4py/__init__.py
--- old/mpi4py-4.1.1/src/mpi4py/__init__.py     2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/src/mpi4py/__init__.py     2026-05-16 11:17:15.000000000 
+0200
@@ -17,7 +17,7 @@
 
 """
 
-__version__ = "4.1.1"
+__version__ = "4.1.2"
 __author__ = "Lisandro Dalcin"
 __credits__ = "MPI Forum, MPICH Team, Open MPI Team"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/src/mpi4py.egg-info/PKG-INFO 
new/mpi4py-4.1.2/src/mpi4py.egg-info/PKG-INFO
--- old/mpi4py-4.1.1/src/mpi4py.egg-info/PKG-INFO       2025-10-10 
10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/src/mpi4py.egg-info/PKG-INFO       2026-05-16 
11:17:15.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: mpi4py
-Version: 4.1.1
+Version: 4.1.2
 Summary: Python bindings for MPI
 Author: Lisandro Dalcin
 Author-email: [email protected]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/test/arrayimpl.py 
new/mpi4py-4.1.2/test/arrayimpl.py
--- old/mpi4py-4.1.1/test/arrayimpl.py  2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/test/arrayimpl.py  2026-05-16 11:17:15.000000000 +0200
@@ -1,4 +1,5 @@
 import itertools
+import platform
 import sys
 import warnings
 
@@ -95,6 +96,17 @@
     ("G", MPI.C_LONG_DOUBLE_COMPLEX),
 ])
 
+if (  # pmodels/mpich#7771
+    MPI.get_vendor() in (
+        ("MPICH", (5, 0, 0)),
+        ("MPICH", (5, 0, 1)),
+    )
+    and platform.system() == "Darwin"
+    and platform.machine() == "arm64"
+):
+    del TypeMap["g"]
+    del TypeMapFloat["g"]
+    del TypeMapComplex["G"]
 
 ArrayBackends = []
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/test/mpitestutil.py 
new/mpi4py-4.1.2/test/mpitestutil.py
--- old/mpi4py-4.1.1/test/mpitestutil.py        2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/test/mpitestutil.py        2026-05-16 11:17:15.000000000 
+0200
@@ -29,6 +29,25 @@
         return False
     if size in (0, MPI.UNDEFINED):
         return False
+    vendor_name, vendor_version = MPI.get_vendor()
+    mpich = vendor_name in ("MPICH", "MVAPICH")
+    impi = vendor_name == "Intel MPI"
+    mpi_version = MPI.Get_version()
+    if (mpich and mpi_version < (5, 0)) or (
+        impi and vendor_version < (2021, 17, 0)
+    ):
+        if datatype in (
+            MPI.LOGICAL1,
+            MPI.LOGICAL2,
+            MPI.LOGICAL4,
+            MPI.LOGICAL8,
+            MPI.LOGICAL16,
+            MPI.INTEGER16,
+            MPI.REAL2,
+            MPI.COMPLEX4,
+            MPI.BFLOAT16_T,
+        ):
+            return False
     return True
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/test/test_datatype.py 
new/mpi4py-4.1.2/test/test_datatype.py
--- old/mpi4py-4.1.1/test/test_datatype.py      2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/test/test_datatype.py      2026-05-16 11:17:15.000000000 
+0200
@@ -96,6 +96,7 @@
 
 combiner_map = {}
 
+system = platform.system()
 machine = platform.machine()
 
 
@@ -174,6 +175,9 @@
 
     def testGetValueIndex(self):
         typenames = ("SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "LONG_DOUBLE")
+        if unittest.is_mpi("mpich(<5.0.0)"):
+            if system == "Darwin" and machine == "arm64":
+                typenames = typenames[:-1]
         value_types = [getattr(MPI, f"{attr}") for attr in typenames]
         pair_types = [getattr(MPI, f"{attr}_INT") for attr in typenames]
         for value, pair in zip(value_types, pair_types):
@@ -700,6 +704,12 @@
     if MPI.FLOAT16_T != MPI.DATATYPE_NULL:
         if MPI.FLOAT16_T.Get_name() == "":
             MPI.FLOAT16_T.Set_name("MPIX_C_FLOAT16")
+    if MPI.REAL16 != MPI.DATATYPE_NULL:
+        if MPI.REAL16.Get_name() == "":
+            MPI.REAL16.Set_name("MPI_REAL16")
+    if MPI.COMPLEX32 != MPI.DATATYPE_NULL:
+        if MPI.COMPLEX32.Get_name() == "":
+            MPI.COMPLEX32.Set_name("MPI_COMPLEX32")
 
 
 if __name__ == "__main__":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/test/test_mpiabi.py 
new/mpi4py-4.1.2/test/test_mpiabi.py
--- old/mpi4py-4.1.1/test/test_mpiabi.py        2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/test/test_mpiabi.py        2026-05-16 11:17:15.000000000 
+0200
@@ -54,6 +54,10 @@
             for typesize in typesizes:
                 typename = f"{typeclass}{typesize}"
                 datatype = getattr(MPI, typename.upper())
+                if unittest.is_mpi("impi"):
+                    if typename in {"real2", "complex4"}:
+                        if datatype == MPI.DATATYPE_NULL:
+                            continue
                 with self.subTest(typename=typename):
                     key = f"mpi_{typename}_supported"
                     supported = info.Get(key)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/test/test_pack.py 
new/mpi4py-4.1.2/test/test_pack.py
--- old/mpi4py-4.1.1/test/test_pack.py  2025-10-10 10:49:11.000000000 +0200
+++ new/mpi4py-4.1.2/test/test_pack.py  2026-05-16 11:17:15.000000000 +0200
@@ -186,7 +186,10 @@
 
 
 name, version = MPI.get_vendor()
+system_machine = (platform.system(), platform.machine())
 if name == "MPICH":
+    if version == (5, 0, 1) and system_machine == ("Darwin", "arm64"):
+        BaseTestPackExternal.skipdtype += "gG"
     if version < (4, 0, 0):
         BaseTestPackExternal.skipdtype += "ldgLFDG"
     if platform.architecture(None)[0] == "32bit":
@@ -194,7 +197,7 @@
 elif name == "Open MPI":
     if version < (5, 0, 0):
         BaseTestPackExternal.skipdtype += "gG"
-    if (platform.system(), platform.machine()) == ("Darwin", "arm64"):
+    if system_machine == ("Darwin", "arm64"):
         BaseTestPackExternal.skipdtype += "G"
 elif name == "Intel MPI":
     BaseTestPackExternal.skipdtype += "lgLG"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mpi4py-4.1.1/test/test_util_dtlib.py 
new/mpi4py-4.1.2/test/test_util_dtlib.py
--- old/mpi4py-4.1.1/test/test_util_dtlib.py    2025-10-10 10:49:11.000000000 
+0200
+++ new/mpi4py-4.1.2/test/test_util_dtlib.py    2026-05-16 11:17:15.000000000 
+0200
@@ -1,6 +1,7 @@
 import itertools
 import os
 import pathlib
+import platform
 import sys
 
 from mpi4py import MPI
@@ -55,6 +56,15 @@
         if tc in typecodes:
             typecodes.remove(tc)
 
+if (
+    unittest.is_mpi("mpich(<5.0.0)")
+    and platform.system() == "Darwin"
+    and platform.machine() == "arm64"
+):
+    for tc in "gG":
+        if tc in typecodes:
+            typecodes.remove(tc)
+
 if unittest.is_mpi("impi(>=2021.12.0)") and os.name == "nt":
     for tc in (*"lLg", "i4", "u4"):
         if tc in typecodes:

Reply via email to