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:
