diff -pruN 4.0.3-3/debian/changelog 4.0.3-3ubuntu3/debian/changelog
--- 4.0.3-3/debian/changelog	2025-03-11 22:03:55.000000000 +0000
+++ 4.0.3-3ubuntu3/debian/changelog	2025-10-20 14:15:49.000000000 +0000
@@ -1,3 +1,22 @@
+mpi4py (4.0.3-3ubuntu3) resolute; urgency=medium
+
+  * No-change rebuild with Python 3.14 as supported version
+
+ -- Graham Inggs <ginggs@ubuntu.com>  Mon, 20 Oct 2025 14:15:49 +0000
+
+mpi4py (4.0.3-3ubuntu2) questing; urgency=medium
+
+  * Backport upstream patch to fix build with Sphinx 8.2 (LP: #2113468).
+
+ -- Dmitry Shachnev <mitya57@ubuntu.com>  Sun, 08 Jun 2025 22:54:55 +0300
+
+mpi4py (4.0.3-3ubuntu1) plucky; urgency=medium
+
+  * Merge with Debian; remaining chamges:
+    - Restore test_pack skipping in skip_failing_tests_32bit_mpich.patch
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat, 15 Mar 2025 13:07:02 +0100
+
 mpi4py (4.0.3-3) unstable; urgency=medium
 
   * skip spawn tests with OpenMPI. See Bug#1100120
@@ -29,6 +48,19 @@ mpi4py (4.0.3-2) unstable; urgency=mediu
 
  -- Drew Parsons <dparsons@debian.org>  Tue, 11 Mar 2025 14:57:09 +0100
 
+mpi4py (4.0.3-1ubuntu2) plucky; urgency=medium
+
+  * No-change rebuild with Python 3.13 only
+
+ -- Graham Inggs <ginggs@ubuntu.com>  Tue, 04 Mar 2025 17:39:25 +0000
+
+mpi4py (4.0.3-1ubuntu1) plucky; urgency=medium
+
+  * Merge with Debian Unstable. Remaining changes:
+    - Restore test_pack skipping in skip_failing_tests_32bit_mpich.patch
+
+ -- Simon Quigley <tsimonq2@ubuntu.com>  Wed, 19 Feb 2025 20:16:10 -0600
+
 mpi4py (4.0.3-1) unstable; urgency=medium
 
   * New upstream release
@@ -42,6 +74,13 @@ mpi4py (4.0.1-7) unstable; urgency=mediu
 
  -- Drew Parsons <dparsons@debian.org>  Fri, 03 Jan 2025 23:18:53 +0100
 
+mpi4py (4.0.1-6ubuntu1) plucky; urgency=medium
+
+  * Merge with Debian; remaining changes:
+    - Restore test_pack skipping in skip_failing_tests_32bit_mpich.patch
+
+ -- Adrien Nader <adrien.nader@canonical.com>  Fri, 29 Nov 2024 17:44:01 +0100
+
 mpi4py (4.0.1-6) unstable; urgency=medium
 
   * mips64el is in trouble. Reinstate version restriction. Test
@@ -73,6 +112,20 @@ mpi4py (4.0.1-4) unstable; urgency=mediu
 
  -- Drew Parsons <dparsons@debian.org>  Mon, 18 Nov 2024 23:37:00 +0100
 
+mpi4py (4.0.1-3ubuntu2) plucky; urgency=medium
+
+  * No-change rebuild for openmpi soname change.
+
+ -- Matthias Klose <doko@ubuntu.com>  Sat, 30 Nov 2024 07:13:34 +0100
+
+mpi4py (4.0.1-3ubuntu1) plucky; urgency=medium
+
+  * Merge with Debian; remaining changes:
+    - Restore test_pack skipping in skip_failing_tests_32bit_mpich.patch
+  * Add armhf and s390x to the list of architectures to ignore test results.
+
+ -- Matthias Klose <doko@ubuntu.com>  Mon, 18 Nov 2024 09:22:46 +0100
+
 mpi4py (4.0.1-3) unstable; urgency=medium
 
   * s390x ppc64: skip testConnectAccept too
@@ -189,6 +242,12 @@ mpi4py (4.0.0-1exp1) experimental; urgen
 
  -- Drew Parsons <dparsons@debian.org>  Mon, 29 Jul 2024 23:49:55 +0200
 
+mpi4py (3.1.6-9ubuntu1) oracular; urgency=medium
+
+  * Restore test_pack skipping in skip_failing_tests_32bit_mpich.patch
+
+ -- Graham Inggs <ginggs@ubuntu.com>  Thu, 05 Sep 2024 10:51:28 +0000
+
 mpi4py (3.1.6-9) unstable; urgency=medium
 
   * debian patch mpich_32bit_13e8af6.patch applies upstream commit
@@ -895,3 +954,4 @@ mpi4py (1.2.2-1) unstable; urgency=low
   * Initial release (Closes: #604161)
 
  -- Yaroslav Halchenko <debian@onerussian.com>  Wed, 06 Apr 2011 15:09:51 -0400
+
diff -pruN 4.0.3-3/debian/control 4.0.3-3ubuntu3/debian/control
--- 4.0.3-3/debian/control	2025-03-11 22:03:55.000000000 +0000
+++ 4.0.3-3ubuntu3/debian/control	2025-03-15 12:07:02.000000000 +0000
@@ -1,5 +1,6 @@
 Source: mpi4py
-Maintainer: Debian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org>
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+XSBC-Original-Maintainer: Debian Science Maintainers <debian-science-maintainers@lists.alioth.debian.org>
 Uploaders: Drew Parsons <dparsons@debian.org>,
            Yaroslav Halchenko <debian@onerussian.com>,
            Michael Hanke <michael.hanke@gmail.com>,
diff -pruN 4.0.3-3/debian/patches/series 4.0.3-3ubuntu3/debian/patches/series
--- 4.0.3-3/debian/patches/series	2025-03-11 22:03:55.000000000 +0000
+++ 4.0.3-3ubuntu3/debian/patches/series	2025-06-08 19:52:46.000000000 +0000
@@ -2,3 +2,5 @@ intersphinx_use_local_inventory.patch
 skip_ppc_failing_tests.patch
 skip_s390x_failing_tests.patch
 skip_testPackUnpackExternal_sparc64.patch
+skip_failing_tests_32bit_mpich.patch
+sphinx_8.2.patch
diff -pruN 4.0.3-3/debian/patches/skip_failing_tests_32bit_mpich.patch 4.0.3-3ubuntu3/debian/patches/skip_failing_tests_32bit_mpich.patch
--- 4.0.3-3/debian/patches/skip_failing_tests_32bit_mpich.patch	1970-01-01 00:00:00.000000000 +0000
+++ 4.0.3-3ubuntu3/debian/patches/skip_failing_tests_32bit_mpich.patch	2025-03-15 12:07:02.000000000 +0000
@@ -0,0 +1,28 @@
+--- a/test/test_pack.py
++++ b/test/test_pack.py
+@@ -90,6 +90,7 @@ class BaseTestPackExternal:
+                         self.assertGreaterEqual(real_size, 0)
+ 
+     @unittest.skipMPI("openmpi(<5.0)", platform.machine() == 'sparc64')
++    @unittest.skipMPI("mpich", platform.architecture()[0] == '32bit')
+     def testPackUnpackExternal(self):
+         for array, typecode1 in arrayimpl.loop():
+             with arrayimpl.test(self):
+--- a/test/test_spawn.py
++++ b/test/test_spawn.py
+@@ -1,6 +1,7 @@
+ from mpi4py import MPI
+ import mpiunittest as unittest
+ import sys, os, mpi4py
++import platform
+ 
+ import platform
+ 
+@@ -94,6 +95,7 @@ def skip_spawn():
+ @unittest.skipMPI('openmpi(>=5.0.0,<5.0.7)', skip_spawn())
+ @unittest.skipMPI('mpich(<4.1.0)', appnum() is None)
+ @unittest.skipMPI('mpich(<4.3.0)', badport())
++@unittest.skipMPI("mpich", platform.architecture()[0] == '32bit')
+ @unittest.skipMPI('msmpi(<8.1.0)')
+ @unittest.skipMPI('msmpi', skip_spawn())
+ @unittest.skipMPI('msmpi', appnum() is None)
diff -pruN 4.0.3-3/debian/patches/sphinx_8.2.patch 4.0.3-3ubuntu3/debian/patches/sphinx_8.2.patch
--- 4.0.3-3/debian/patches/sphinx_8.2.patch	1970-01-01 00:00:00.000000000 +0000
+++ 4.0.3-3ubuntu3/debian/patches/sphinx_8.2.patch	2025-06-08 19:54:53.000000000 +0000
@@ -0,0 +1,61 @@
+Description: update docs/source/conf.py for compatibility with Sphinx 8.2
+Origin: upstream, https://github.com/mpi4py/mpi4py/commit/19b10f153ccb21d1
+Last-Update: 2025-06-08
+
+--- a/docs/source/conf.py
++++ b/docs/source/conf.py
+@@ -163,11 +163,14 @@ def _patch_domain_python():
+     from sphinx.domains.python import PythonDomain
+     PythonDomain.object_types['data'].roles += ('class',)
+ 
++    from sphinx.util.inspect import TypeAliasForwardRef
++    TypeAliasForwardRef.__repr__ = lambda self: self.name
++
+ 
+ def _setup_autodoc(app):
+     from sphinx.ext import autodoc
+     from sphinx.ext import autosummary
+-    from sphinx.util import typing
++    from sphinx.util.typing import restify
+     from sphinx.locale import _
+ 
+     #
+@@ -246,7 +249,7 @@ def _setup_autodoc(app):
+                 more_content.append(content, '')
+                 more_content.append('', '')
+             if istypealias(obj, self.name):
+-                content = _('alias of %s') % typing.restify(obj)
++                content = _('alias of %s') % restify(obj)
+                 more_content.append(content, '')
+                 more_content.append('', '')
+             super().update_content(more_content)
+@@ -265,17 +268,26 @@ def _setup_autodoc(app):
+     class ExceptionDocumenterCustom(ExceptionDocumenter):
+         objtype = 'class'
+ 
+-    def get_documenter(app, obj, parent):
++    def get_documenter(*args, **kwargs):
++        if hasattr(autosummary, '_get_documenter'):
++            obj, args = args[0], args[1:]
++            get_documenter = autosummary._get_documenter
++        else:
++            obj, args = args[1], (args[0], *args[2:])
++            get_documenter = autosummary.get_documenter
+         if isinstance(obj, type) and issubclass(obj, BaseException):
+             caller = sys._getframe().f_back.f_code.co_name
+             if caller == 'generate_autosummary_content':
+                 if obj.__module__ == 'mpi4py.MPI':
+                     if obj.__name__ == 'Exception':
+                         return ExceptionDocumenterCustom
+-        return autosummary.get_documenter(app, obj, parent)
++        return get_documenter(obj, *args, **kwargs)
+ 
+     from sphinx.ext.autosummary import generate
+-    generate.get_documenter = get_documenter
++    if hasattr(generate, '_get_documenter'):
++        generate._get_documenter = get_documenter
++    else:
++        generate.get_documenter = get_documenter
+ 
+ 
+ def setup(app):
