{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.8ZPOIFdb/b1/fenics-dolfinx_0.8.0-9_i386.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.8ZPOIFdb/b2/fenics-dolfinx_0.8.0-9_i386.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 2fbf3a97145460e2d53a69d9abb2c63f 1197592 doc optional dolfinx-doc_0.8.0-9_all.deb\n+ ebc254b1cc2bb47e6321f4ab22ad518a 1197528 doc optional dolfinx-doc_0.8.0-9_all.deb\n 85bba88803ae8894ee9a7816f92d3b57 46540 libdevel optional libdolfinx-complex-dev_0.8.0-9_i386.deb\n 39d4466a523426e7e96752833db37c34 11584892 debug optional libdolfinx-complex0.8-dbgsym_0.8.0-9_i386.deb\n da6c96f7d9947d4fc900c9097bb54142 641256 libs optional libdolfinx-complex0.8_0.8.0-9_i386.deb\n cc24316edb9efcd5d3310b3d2f197ea8 207620 libdevel optional libdolfinx-dev_0.8.0-9_i386.deb\n 1d7f087f7dd92a69de3fc3a39f311d7a 46512 libdevel optional libdolfinx-real-dev_0.8.0-9_i386.deb\n 0140a12ba8177754c49c06d2427a27c2 11582976 debug optional libdolfinx-real0.8-dbgsym_0.8.0-9_i386.deb\n 076745d48603672af118429c9fc5bb07 641156 libs optional libdolfinx-real0.8_0.8.0-9_i386.deb\n"}, {"source1": "dolfinx-doc_0.8.0-9_all.deb", "source2": "dolfinx-doc_0.8.0-9_all.deb", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -1,3 +1,3 @@\n -rw-r--r-- 0 0 0 4 2024-06-05 09:00:14.000000 debian-binary\n--rw-r--r-- 0 0 0 21616 2024-06-05 09:00:14.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1175784 2024-06-05 09:00:14.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 21612 2024-06-05 09:00:14.000000 control.tar.xz\n+-rw-r--r-- 0 0 0 1175724 2024-06-05 09:00:14.000000 data.tar.xz\n"}, {"source1": "control.tar.xz", "source2": "control.tar.xz", "unified_diff": null, "details": [{"source1": "control.tar", "source2": "control.tar", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "unified_diff": null, "details": [{"source1": "./md5sums", "source2": "./md5sums", "comments": ["Files differ"], "unified_diff": null}]}]}]}, {"source1": "data.tar.xz", "source2": "data.tar.xz", "unified_diff": null, "details": [{"source1": "data.tar", "source2": "data.tar", "unified_diff": null, "details": [{"source1": "file list", "source2": "file list", "unified_diff": "@@ -886,15 +886,15 @@\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/\n -rw-r--r-- 0 root (0) root (0) 19145 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/56ce7e71d8c71b4d8ef7c699176dd4fd/demo_stokes.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/\n -rw-r--r-- 0 root (0) root (0) 8030 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/67f8546536727bd5386a27073bd16e12/demo_elasticity.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/\n -rw-r--r-- 0 root (0) root (0) 7392 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/6ad57720b461988475bd5c9286e3f111/demo_types.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/\n--rw-r--r-- 0 root (0) root (0) 3875 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 3872 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/\n -rw-r--r-- 0 root (0) root (0) 2604 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/\n -rw-r--r-- 0 root (0) root (0) 5600 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/demo_poisson.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/\n -rw-r--r-- 0 root (0) root (0) 3877 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8140d02a100265518e126a3cfe79d8e/demo_interpolation-io.py\n drwxr-xr-x 0 root (0) root (0) 0 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/\n"}, {"source1": "./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz", "source2": "./usr/share/doc/dolfinx-doc/python/_downloads/9561cf6cd1a70079b986f4eb31580cbd/demo_poisson_matrix_free.ipynb.gz", "unified_diff": null, "details": [{"source1": "demo_poisson_matrix_free.ipynb", "source2": "demo_poisson_matrix_free.ipynb", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9876077586206897%", "Differences: {\"'cells'\": \"{0: {'id': '94fe61c1'}, 1: {'id': '2d3e8919'}, 2: {'id': '8b5daf2f'}, 3: {'id': \"", " \"'3b271609'}, 4: {'id': '86764449'}, 5: {'id': 'c914f48e'}, 6: {'id': 'ee4c8b23'}, 7: \"", " \"{'id': '19464862'}, 8: {'id': 'a3d2f7a6'}, 9: {'id': '003c7bed'}, 10: {'id': \"", " \"'4f5f3f15'}, 11: {'id': 'bedf2acf'}, 12: {'id': '3ab66119'}, 13: {'id': 'fdae3bd6'}, \"", " \"14: {'id': 'ded3f056'}, 15: {'id': '3eb40b6b'}, 16: {'id': '3bd1b7bd'}, 17: {'id': \"", " \"'a47d655c'}, 1 [\u2026]"], "unified_diff": "@@ -1,12 +1,12 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"a89d94ce\",\n+ \"id\": \"94fe61c1\",\n \"metadata\": {},\n \"source\": [\n \"# Matrix-free conjugate gradient solver for the Poisson equation\\n\",\n \"\\n\",\n \"This demo illustrates how to solve the Poisson equation using a\\n\",\n \"matrix-free conjugate gradient (CG) solver. In particular, it\\n\",\n \"illustrates how to\\n\",\n@@ -68,84 +68,84 @@\n \"\\n\",\n \"The modules that will be used are imported:\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"946a5ab1\",\n+ \"id\": \"2d3e8919\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"from mpi4py import MPI\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"d91b1365\",\n+ \"id\": \"8b5daf2f\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import numpy as np\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"fce7f169\",\n+ \"id\": \"3b271609\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import dolfinx\\n\",\n \"import ufl\\n\",\n \"from dolfinx import fem, la\\n\",\n \"from ufl import action, dx, grad, inner\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"c53d5680\",\n+ \"id\": \"86764449\",\n \"metadata\": {},\n \"source\": [\n \"We begin by using {py:func}`create_rectangle\\n\",\n \"` to create a rectangular\\n\",\n \"{py:class}`Mesh ` of the domain, and creating a\\n\",\n \"finite element {py:class}`FunctionSpace `\\n\",\n \"on the mesh.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"4124771d\",\n+ \"id\": \"c914f48e\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"dtype = dolfinx.default_scalar_type\\n\",\n \"real_type = np.real(dtype(0.0)).dtype\\n\",\n \"comm = MPI.COMM_WORLD\\n\",\n \"mesh = dolfinx.mesh.create_rectangle(comm, [[0.0, 0.0], [1.0, 1.0]], [10, 10], dtype=real_type)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"cb1e9ce4\",\n+ \"id\": \"ee4c8b23\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Create function space\\n\",\n \"degree = 2\\n\",\n \"V = fem.functionspace(mesh, (\\\"Lagrange\\\", degree))\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"f8e0c07b\",\n+ \"id\": \"19464862\",\n \"metadata\": {},\n \"source\": [\n \"The second argument to {py:class}`functionspace\\n\",\n \"` is a tuple consisting of `(family,\\n\",\n \"degree)`, where `family` is the finite element family, and `degree`\\n\",\n \"specifies the polynomial degree. In this case `V` consists of\\n\",\n \"third-order, continuous Lagrange finite element functions.\\n\",\n@@ -156,94 +156,94 @@\n \"and then retrieving all facets on the boundary using\\n\",\n \"{py:func}`exterior_facet_indices `.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"1f633cb1\",\n+ \"id\": \"a3d2f7a6\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"tdim = mesh.topology.dim\\n\",\n \"mesh.topology.create_connectivity(tdim - 1, tdim)\\n\",\n \"facets = dolfinx.mesh.exterior_facet_indices(mesh.topology)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"4824fd1b\",\n+ \"id\": \"003c7bed\",\n \"metadata\": {},\n \"source\": [\n \"We now find the degrees of freedom that are associated with the boundary\\n\",\n \"facets using\\n\",\n \"{py:func}`locate_dofs_topological `\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"a7cb0ad6\",\n+ \"id\": \"4f5f3f15\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"dofs = fem.locate_dofs_topological(V=V, entity_dim=tdim - 1, entities=facets)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"6cf307b6\",\n+ \"id\": \"bedf2acf\",\n \"metadata\": {},\n \"source\": [\n \"and use {py:func}`dirichletbc ` to define the\\n\",\n \"essential boundary condition. On the boundary we prescribe the\\n\",\n \"{py:class}`Function ` `uD`, which we create by\\n\",\n \"interpolating the expression $u_{\\\\rm D}$ in the finite element space\\n\",\n \"$V$.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"203267b9\",\n+ \"id\": \"3ab66119\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"uD = fem.Function(V, dtype=dtype)\\n\",\n \"uD.interpolate(lambda x: 1 + x[0] ** 2 + 2 * x[1] ** 2)\\n\",\n \"bc = fem.dirichletbc(value=uD, dofs=dofs)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"2a8222a0\",\n+ \"id\": \"fdae3bd6\",\n \"metadata\": {},\n \"source\": [\n \"Next, we express the variational problem using UFL.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"7ba0eea9\",\n+ \"id\": \"ded3f056\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"x = ufl.SpatialCoordinate(mesh)\\n\",\n \"u = ufl.TrialFunction(V)\\n\",\n \"v = ufl.TestFunction(V)\\n\",\n \"f = fem.Constant(mesh, dtype(-6.0))\\n\",\n \"a = inner(grad(u), grad(v)) * dx\\n\",\n \"L = inner(f, v) * dx\\n\",\n \"L_fem = fem.form(L, dtype=dtype)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"8bc2c61e\",\n+ \"id\": \"3eb40b6b\",\n \"metadata\": {},\n \"source\": [\n \"For the matrix-free solvers we also define a second linear form `M` as\\n\",\n \"the {py:class}`action ` of the bilinear form $a$ on an\\n\",\n \"arbitrary {py:class}`Function ` `ui`. This linear\\n\",\n \"form is defined as\\n\",\n \"\\n\",\n@@ -251,78 +251,78 @@\n \"M(v) = a(u_i, v) \\\\quad \\\\text{for} \\\\; \\\\ u_i \\\\in V.\\n\",\n \"$$\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"00492243\",\n+ \"id\": \"3bd1b7bd\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"ui = fem.Function(V, dtype=dtype)\\n\",\n \"M = action(a, ui)\\n\",\n \"M_fem = fem.form(M, dtype=dtype)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"19785910\",\n+ \"id\": \"a47d655c\",\n \"metadata\": {},\n \"source\": [\n \"### Matrix-free conjugate gradient solver\\n\",\n \"\\n\",\n \"The right hand side vector $b - A x_{\\\\rm bc}$ is the assembly of the linear\\n\",\n \"form $L$ where the essential Dirichlet boundary conditions are implemented\\n\",\n \"using lifting. Since we want to avoid assembling the matrix `A`, we compute\\n\",\n \"the necessary matrix-vector product using the linear form `M` explicitly.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"f3f244e8\",\n+ \"id\": \"dae30da8\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Apply lifting: b <- b - A * x_bc\\n\",\n \"b = fem.assemble_vector(L_fem)\\n\",\n \"ui.x.array[:] = 0.0\\n\",\n \"fem.set_bc(ui.x.array, [bc], scale=-1.0)\\n\",\n \"fem.assemble_vector(b.array, M_fem)\\n\",\n \"b.scatter_reverse(la.InsertMode.add)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"17045df6\",\n+ \"id\": \"d2600463\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Set BC dofs to zero on right hand side\\n\",\n \"fem.set_bc(b.array, [bc], scale=0.0)\\n\",\n \"b.scatter_forward()\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"b21bc595\",\n+ \"id\": \"7727f51c\",\n \"metadata\": {\n \"lines_to_next_cell\": 2\n },\n \"source\": [\n \"To implement the matrix-free CG solver using *DOLFINx* vectors, we define the\\n\",\n \"function `action_A` to compute the matrix-vector product $y = A x$.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"dfe74316\",\n+ \"id\": \"f52f4858\",\n \"metadata\": {\n \"lines_to_next_cell\": 2\n },\n \"outputs\": [],\n \"source\": [\n \"def action_A(x, y):\\n\",\n \" # Set coefficient vector of the linear form M and ensure it is updated\\n\",\n@@ -337,15 +337,15 @@\n \"\\n\",\n \" # Set BC dofs to zero\\n\",\n \" fem.set_bc(y.array, [bc], scale=0.0)\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"4a1f2488\",\n+ \"id\": \"ef58bbf8\",\n \"metadata\": {\n \"lines_to_next_cell\": 2\n },\n \"source\": [\n \"### Basic conjugate gradient solver\\n\",\n \"\\n\",\n \"Solves the problem `A x = b`, using the function `action_A` as the operator,\\n\",\n@@ -353,15 +353,15 @@\n \"vector. `comm` is the MPI Communicator, `max_iter` is the maximum number of\\n\",\n \"iterations, `rtol` is the relative tolerance.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"87613ca6\",\n+ \"id\": \"5a942993\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"def cg(comm, action_A, x: la.Vector, b: la.Vector, max_iter: int = 200, rtol: float = 1e-6):\\n\",\n \" rtol2 = rtol**2\\n\",\n \"\\n\",\n \" nr = b.index_map.size_local\\n\",\n@@ -399,61 +399,61 @@\n \" p.array[:] = beta * p.array + r\\n\",\n \"\\n\",\n \" raise RuntimeError(f\\\"Solver exceeded max iterations ({max_iter}).\\\")\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"03849b72\",\n+ \"id\": \"00346ce3\",\n \"metadata\": {},\n \"source\": [\n \"This matrix-free solver is now used to compute the finite element solution.\\n\",\n \"The finite element solution's approximation error as compared with the\\n\",\n \"exact solution is measured in the $L_2$-norm.\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"19f13715\",\n+ \"id\": \"b99755f0\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"rtol = 1e-6\\n\",\n \"u = fem.Function(V, dtype=dtype)\\n\",\n \"iter_cg1 = cg(mesh.comm, action_A, u.x, b, max_iter=200, rtol=rtol)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"35fa6c64\",\n+ \"id\": \"1c8ea8f4\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Set BC values in the solution vector\\n\",\n \"fem.set_bc(u.x.array, [bc], scale=1.0)\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"b0e32bef\",\n+ \"id\": \"d622567e\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"def L2Norm(u):\\n\",\n \" val = fem.assemble_scalar(fem.form(inner(u, u) * dx, dtype=dtype))\\n\",\n \" return np.sqrt(comm.allreduce(val, op=MPI.SUM))\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"408075dc\",\n+ \"id\": \"a27743b4\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"# Print CG iteration number and error\\n\",\n \"error_L2_cg1 = L2Norm(u - uD)\\n\",\n \"if mesh.comm.rank == 0:\\n\",\n \" print(\\\"Matrix-free CG solver using DOLFINx vectors:\\\")\\n\",\n"}]}]}, {"source1": "./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz", "source2": "./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz", "unified_diff": null, "details": [{"source1": "demo_mixed-poisson.ipynb", "source2": "demo_mixed-poisson.ipynb", "unified_diff": null, "details": [{"source1": "Pretty-printed", "source2": "Pretty-printed", "comments": ["Similarity: 0.9856770833333333%", "Differences: {\"'cells'\": \"{0: {'id': '582f3a1d'}, 1: {'id': 'c6b20fa6'}, 2: {'id': '63051f7a'}, 3: {'id': \"", " \"'6f872229'}}\"}"], "unified_diff": "@@ -1,32 +1,32 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"bbb66c30\",\n+ \"id\": \"582f3a1d\",\n \"metadata\": {},\n \"source\": [\n \"# Mixed formulation for the Poisson equation\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"58ffafd8\",\n+ \"id\": \"c6b20fa6\",\n \"metadata\": {},\n \"source\": [\n \"This demo illustrates how to solve Poisson equation using a mixed\\n\",\n \"(two-field) formulation. In particular, it illustrates how to\\n\",\n \"\\n\",\n \"* Use mixed and non-continuous finite element spaces.\\n\",\n \"* Set essential boundary conditions for subspaces and $H(\\\\mathrm{div})$ spaces.\\n\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"d0f0447e\",\n+ \"id\": \"63051f7a\",\n \"metadata\": {},\n \"source\": [\n \"```{admonition} Download sources\\n\",\n \":class: download\\n\",\n \"\\n\",\n \"* {download}`Python script <./demo_mixed-poisson.py>`\\n\",\n \"* {download}`Jupyter notebook <./demo_mixed-poisson.ipynb>`\\n\",\n@@ -99,15 +99,15 @@\n \"\\n\",\n \"## Implementation\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"6855511d\",\n+ \"id\": \"6f872229\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"\\n\",\n \"from mpi4py import MPI\\n\",\n \"from petsc4py import PETSc\\n\",\n \"\\n\",\n"}]}]}]}]}]}]}