{"diffoscope-json-version": 1, "source1": "/srv/reproducible-results/rbuild-debian/r-b-build.zeA8hx4r/b1/fenics-dolfinx_0.8.0-9_armhf.changes", "source2": "/srv/reproducible-results/rbuild-debian/r-b-build.zeA8hx4r/b2/fenics-dolfinx_0.8.0-9_armhf.changes", "unified_diff": null, "details": [{"source1": "Files", "source2": "Files", "unified_diff": "@@ -1,9 +1,9 @@\n \n- 3ba335ba8eda4b3bbbe56f9760763a65 1197816 doc optional dolfinx-doc_0.8.0-9_all.deb\n+ 182e589ea98b720ef73e74db86bf5a8c 1197616 doc optional dolfinx-doc_0.8.0-9_all.deb\n 7101ea44cf0f00e7903a0c016171f7da 46520 libdevel optional libdolfinx-complex-dev_0.8.0-9_armhf.deb\n d072795257fa6dae9f3e66ad060bcc8e 10689580 debug optional libdolfinx-complex0.8-dbgsym_0.8.0-9_armhf.deb\n 70130e0a0484832e046e530fed0176be 489024 libs optional libdolfinx-complex0.8_0.8.0-9_armhf.deb\n 8f624de6d6f1b22c50267d1e2828b6bb 207636 libdevel optional libdolfinx-dev_0.8.0-9_armhf.deb\n c9ecdee093246a336563a64448768804 46528 libdevel optional libdolfinx-real-dev_0.8.0-9_armhf.deb\n 2fca109aaef89487381c6d0c3ddf9209 10688668 debug optional libdolfinx-real0.8-dbgsym_0.8.0-9_armhf.deb\n 88e5e3fd0062664540fb8d18469e5ee8 488764 libs optional libdolfinx-real0.8_0.8.0-9_armhf.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 21636 2024-06-05 09:00:14.000000 control.tar.xz\n--rw-r--r-- 0 0 0 1175988 2024-06-05 09:00:14.000000 data.tar.xz\n+-rw-r--r-- 0 0 0 1175788 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": "@@ -888,15 +888,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/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) 3870 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) 2606 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/9ed4657d08dda04de30e6463e2f58d75/demo_mixed-poisson.ipynb.gz\n+-rw-r--r-- 0 root (0) root (0) 2601 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 -rw-r--r-- 0 root (0) root (0) 11162 2024-06-05 09:00:14.000000 ./usr/share/doc/dolfinx-doc/python/_downloads/e8b180b39a27d7b04c2f666d14475ee3/demo_cahn-hilliard.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/f6f3cc4d9540871af057920d1ddb5561/\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': '6aed6bf9'}, 1: {'id': '09b20566'}, 2: {'id': '3e0b53cf'}, 3: {'id': \"", " \"'349e8e38'}, 4: {'id': '5ddce97e'}, 5: {'id': '2238c328'}, 6: {'id': 'd06dddfe'}, 7: \"", " \"{'id': 'a0c7fbce'}, 8: {'id': 'b27ff39a'}, 9: {'id': 'e71e6e47'}, 10: {'id': \"", " \"'a74840a9'}, 11: {'id': '6cd2dea2'}, 12: {'id': '7138b58d'}, 13: {'id': '062074e9'}, \"", " \"14: {'id': '9a395dc3'}, 15: {'id': '5deae743'}, 16: {'id': 'e604f7df'}, 17: {'id': \"", " \"'1116a01a'}, 1 [\u2026]"], "unified_diff": "@@ -1,12 +1,12 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"795a0907\",\n+ \"id\": \"6aed6bf9\",\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\": \"d5c0af21\",\n+ \"id\": \"09b20566\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"from mpi4py import MPI\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"543f01aa\",\n+ \"id\": \"3e0b53cf\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"import numpy as np\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"execution_count\": null,\n- \"id\": \"7547dc51\",\n+ \"id\": \"349e8e38\",\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\": \"8fbaab00\",\n+ \"id\": \"5ddce97e\",\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\": \"ea86aece\",\n+ \"id\": \"2238c328\",\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\": \"e9d92459\",\n+ \"id\": \"d06dddfe\",\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\": \"c4866470\",\n+ \"id\": \"a0c7fbce\",\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\": \"e2ec2691\",\n+ \"id\": \"b27ff39a\",\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\": \"ea6b0e3a\",\n+ \"id\": \"e71e6e47\",\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\": \"fd30286b\",\n+ \"id\": \"a74840a9\",\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\": \"8ef0cc48\",\n+ \"id\": \"6cd2dea2\",\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\": \"35a68eba\",\n+ \"id\": \"7138b58d\",\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\": \"2a37d0bf\",\n+ \"id\": \"062074e9\",\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\": \"757ba831\",\n+ \"id\": \"9a395dc3\",\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\": \"314aa11b\",\n+ \"id\": \"5deae743\",\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\": \"1f6e268f\",\n+ \"id\": \"e604f7df\",\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\": \"ca765fb1\",\n+ \"id\": \"1116a01a\",\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\": \"4aa151b4\",\n+ \"id\": \"84f1a38c\",\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\": \"529906a6\",\n+ \"id\": \"5b6c421a\",\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\": \"ba55b552\",\n+ \"id\": \"aff48eb7\",\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\": \"a243e7db\",\n+ \"id\": \"36fd9110\",\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\": \"1b6a50c5\",\n+ \"id\": \"3015eff6\",\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\": \"ed10bb8e\",\n+ \"id\": \"3bdd20bf\",\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\": \"90f463d7\",\n+ \"id\": \"658fb3e9\",\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\": \"ba6065da\",\n+ \"id\": \"5d7c6090\",\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\": \"2902fcdc\",\n+ \"id\": \"8dcfb535\",\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\": \"f61c84cb\",\n+ \"id\": \"53ad0181\",\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\": \"99acee41\",\n+ \"id\": \"65f02519\",\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': 'a39d5c1a'}, 1: {'id': '3fb5786c'}, 2: {'id': 'caa0551c'}, 3: {'id': \"", " \"'ae4eec0b'}}\"}"], "unified_diff": "@@ -1,32 +1,32 @@\n {\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"7d477c33\",\n+ \"id\": \"a39d5c1a\",\n \"metadata\": {},\n \"source\": [\n \"# Mixed formulation for the Poisson equation\"\n ]\n },\n {\n \"cell_type\": \"markdown\",\n- \"id\": \"253cca59\",\n+ \"id\": \"3fb5786c\",\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\": \"7e7458ca\",\n+ \"id\": \"caa0551c\",\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\": \"1f62a631\",\n+ \"id\": \"ae4eec0b\",\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n \"\\n\",\n \"from mpi4py import MPI\\n\",\n \"from petsc4py import PETSc\\n\",\n \"\\n\",\n"}]}]}]}]}]}]}