Hello, I'm attaching a patch that applies cleanly. I'm testing the build
G. On Wed, 29 May 2024 23:31:23 +0200 =?utf-8?q?Timo_R=C3=B6hling?= <roehl...@debian.org> wrote:
Source: fenics-dolfinx Version: 1:0.8.0-6 Severity: serious Tags: patch Dear maintainer,upgrading to nanobind 2.0 made your package FTBFS. I am sorry that I did not check this before uploading to unstable, that is on me. I have seen that Francesco has already fixed the issue upstream [1]. Depending on how far away the next upstream release is, maybe you can backport that fix?Cheers Timo[1] https://github.com/FEniCS/dolfinx/commit/42c43485e81ada306f0b3f1dc735d95539174cbc
diff -Nru fenics-dolfinx-0.8.0/debian/changelog fenics-dolfinx-0.8.0/debian/changelog --- fenics-dolfinx-0.8.0/debian/changelog 2024-05-12 11:17:08.000000000 +0200 +++ fenics-dolfinx-0.8.0/debian/changelog 2024-05-30 11:05:39.000000000 +0200 @@ -1,3 +1,10 @@ +fenics-dolfinx (1:0.8.0-6ubuntu1) oracular; urgency=medium + + * debian/patches/42c43485e81ada306f0b3f1dc735d95539174cbc.patch: + - upstream fix for newer nanobind 2.0 (Closes: #1072183) + + -- Gianfranco Costamagna <locutusofb...@debian.org> Thu, 30 May 2024 11:05:39 +0200 + fenics-dolfinx (1:0.8.0-6) unstable; urgency=medium * debian patch Newton_KSP_ref_counter_PR3190.patch applies upstream diff -Nru fenics-dolfinx-0.8.0/debian/control fenics-dolfinx-0.8.0/debian/control --- fenics-dolfinx-0.8.0/debian/control 2024-05-12 11:17:08.000000000 +0200 +++ fenics-dolfinx-0.8.0/debian/control 2024-05-30 11:05:39.000000000 +0200 @@ -1,7 +1,8 @@ Source: fenics-dolfinx Section: math Priority: optional -Maintainer: Debian Science Team <debian-science-maintain...@lists.alioth.debian.org> +Maintainer: Ubuntu Developers <ubuntu-devel-disc...@lists.ubuntu.com> +XSBC-Original-Maintainer: Debian Science Team <debian-science-maintain...@lists.alioth.debian.org> Uploaders: Drew Parsons <dpars...@debian.org>, Francesco Ballarin <francesco.balla...@unicatt.it> diff -Nru fenics-dolfinx-0.8.0/debian/patches/42c43485e81ada306f0b3f1dc735d95539174cbc.patch fenics-dolfinx-0.8.0/debian/patches/42c43485e81ada306f0b3f1dc735d95539174cbc.patch --- fenics-dolfinx-0.8.0/debian/patches/42c43485e81ada306f0b3f1dc735d95539174cbc.patch 1970-01-01 01:00:00.000000000 +0100 +++ fenics-dolfinx-0.8.0/debian/patches/42c43485e81ada306f0b3f1dc735d95539174cbc.patch 2024-05-30 11:05:39.000000000 +0200 @@ -0,0 +1,495 @@ +From 42c43485e81ada306f0b3f1dc735d95539174cbc Mon Sep 17 00:00:00 2001 +From: Francesco Ballarin <francesco.balla...@unicatt.it> +Date: Fri, 24 May 2024 09:02:41 +0200 +Subject: [PATCH] Replace `nb::any` with -1 and add argument to `nb::ndarray` + in preparation of next nanobind release (#3105) + +* Replace nb::any with -1 in preparation of next nanobind release + +* nb::ndarray now requires to pass in the owner argument, which used to have a default value. Assign the former defaul value everywhere in nb wrappers + +* DROP BEFORE MERGE: install nanobind from source in workflows + +* CI update + +* Bump min nanobind version + +* CI udpates + +* System install + +* pip install system + +* Remove CI change + +* More updates + +* cmake update + +* Run clang-format + +--------- + +Co-authored-by: Garth N. Wells <gn...@cam.ac.uk> +--- + .github/workflows/ccpp.yml | 14 ++++++++-- + .github/workflows/conda.yml | 1 - + .github/workflows/oneapi.yml | 6 +++- + .github/workflows/redhat.yml | 7 +++-- + cpp/cmake/templates/DOLFINXConfig.cmake.in | 2 +- + docker/Dockerfile.test-env | 2 +- + python/build-requirements.txt | 2 +- + python/dolfinx/wrappers/assemble.cpp | 13 +++++---- + python/dolfinx/wrappers/common.cpp | 6 ++-- + python/dolfinx/wrappers/fem.cpp | 30 ++++++++++---------- + python/dolfinx/wrappers/geometry.cpp | 17 +++++++----- + python/dolfinx/wrappers/graph.cpp | 9 +++--- + python/dolfinx/wrappers/la.cpp | 17 ++++++------ + python/dolfinx/wrappers/log.cpp | 5 ++-- + python/dolfinx/wrappers/mesh.cpp | 32 ++++++++++++---------- + python/pyproject.toml | 2 +- + 16 files changed, 94 insertions(+), 71 deletions(-) + +diff --git a/cpp/cmake/templates/DOLFINXConfig.cmake.in b/cpp/cmake/templates/DOLFINXConfig.cmake.in +index 5e22232d333..dfcf1eaa81d 100644 +--- a/cpp/cmake/templates/DOLFINXConfig.cmake.in ++++ b/cpp/cmake/templates/DOLFINXConfig.cmake.in +@@ -18,7 +18,7 @@ if(DEFINED ENV{BOOST_ROOT} OR DEFINED BOOST_ROOT) + endif() + set(Boost_USE_MULTITHREADED $ENV{BOOST_USE_MULTITHREADED}) + set(Boost_VERBOSE TRUE) +-find_dependency(Boost 1.70 REQUIRED COMPONENTS timer filesystem) ++find_dependency(Boost 1.70 REQUIRED COMPONENTS timer) + + if(@ufcx_FOUND@) + find_dependency(ufcx) +diff --git a/python/dolfinx/wrappers/assemble.cpp b/python/dolfinx/wrappers/assemble.cpp +index fb4460b49aa..7dc07803e07 100644 +--- a/python/dolfinx/wrappers/assemble.cpp ++++ b/python/dolfinx/wrappers/assemble.cpp +@@ -362,12 +362,13 @@ void declare_assembly_functions(nb::module_& m) + std::span<const std::int32_t> cols, + std::span<const T> data) + { +- return fin(nb::ndarray<const std::int32_t, nb::ndim<1>, nb::c_contig, +- nb::numpy>(rows.data(), {rows.size()}), +- nb::ndarray<const std::int32_t, nb::ndim<1>, nb::c_contig, +- nb::numpy>(cols.data(), {cols.size()}), +- nb::ndarray<const T, nb::ndim<2>, nb::c_contig, nb::numpy>( +- data.data(), {data.size()})); ++ return fin( ++ nb::ndarray<const std::int32_t, nb::ndim<1>, nb::c_contig, ++ nb::numpy>(rows.data(), {rows.size()}, nb::handle()), ++ nb::ndarray<const std::int32_t, nb::ndim<1>, nb::c_contig, ++ nb::numpy>(cols.data(), {cols.size()}, nb::handle()), ++ nb::ndarray<const T, nb::ndim<2>, nb::c_contig, nb::numpy>( ++ data.data(), {data.size()}, nb::handle())); + }; + dolfinx::fem::assemble_matrix(f, form, bcs); + }, +diff --git a/python/dolfinx/wrappers/common.cpp b/python/dolfinx/wrappers/common.cpp +index 66bbe921e2a..d2bec947a07 100644 +--- a/python/dolfinx/wrappers/common.cpp ++++ b/python/dolfinx/wrappers/common.cpp +@@ -108,8 +108,8 @@ void common(nb::module_& m) + [](const dolfinx::common::IndexMap& self) + { + std::span ghosts = self.ghosts(); +- return nb::ndarray<const std::int64_t, nb::numpy>(ghosts.data(), +- {ghosts.size()}); ++ return nb::ndarray<const std::int64_t, nb::numpy>( ++ ghosts.data(), {ghosts.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal, "Return list of ghost indices") + .def_prop_ro( +@@ -118,7 +118,7 @@ void common(nb::module_& m) + { + std::span owners = self.owners(); + return nb::ndarray<nb::numpy, const int, nb::ndim<1>>( +- owners.data(), {owners.size()}); ++ owners.data(), {owners.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def( +diff --git a/python/dolfinx/wrappers/fem.cpp b/python/dolfinx/wrappers/fem.cpp +index ed057a2aa55..b7b00d728a0 100644 +--- a/python/dolfinx/wrappers/fem.cpp ++++ b/python/dolfinx/wrappers/fem.cpp +@@ -86,8 +86,8 @@ void declare_function_space(nb::module_& m, std::string type) + [](const dolfinx::fem::FunctionSpace<T>& self) + { + std::span<const std::size_t> vshape = self.value_shape(); +- return nb::ndarray<const std::size_t, nb::numpy>(vshape.data(), +- {vshape.size()}); ++ return nb::ndarray<const std::size_t, nb::numpy>( ++ vshape.data(), {vshape.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def("sub", &dolfinx::fem::FunctionSpace<T>::sub, nb::arg("component")) +@@ -360,7 +360,7 @@ void declare_objects(nb::module_& m, const std::string& type) + { + auto [dofs, owned] = self.dof_indices(); + return std::pair(nb::ndarray<const std::int32_t, nb::numpy>( +- dofs.data(), {dofs.size()}), ++ dofs.data(), {dofs.size()}, nb::handle()), + owned); + }) + .def_prop_ro("function_space", +@@ -512,8 +512,9 @@ void declare_objects(nb::module_& m, const std::string& type) + "value", + [](dolfinx::fem::Constant<T>& self) + { +- return nb::ndarray<T, nb::numpy>( +- self.value.data(), self.shape.size(), self.shape.data()); ++ return nb::ndarray<T, nb::numpy>(self.value.data(), ++ self.shape.size(), ++ self.shape.data(), nb::handle()); + }, + nb::rv_policy::reference_internal); + +@@ -718,17 +719,17 @@ void declare_form(nb::module_& m, std::string type) + switch (type) + { + case dolfinx::fem::IntegralType::cell: +- return nb::ndarray<const std::int32_t, nb::numpy>(_d.data(), +- {_d.size()}); ++ return nb::ndarray<const std::int32_t, nb::numpy>( ++ _d.data(), {_d.size()}, nb::handle()); + case dolfinx::fem::IntegralType::exterior_facet: + { + return nb::ndarray<const std::int32_t, nb::numpy>( +- _d.data(), {_d.size() / 2, 2}); ++ _d.data(), {_d.size() / 2, 2}, nb::handle()); + } + case dolfinx::fem::IntegralType::interior_facet: + { + return nb::ndarray<const std::int32_t, nb::numpy>( +- _d.data(), {_d.size() / 4, 2, 2}); ++ _d.data(), {_d.size() / 4, 2, 2}, nb::handle()); + } + default: + throw ::std::runtime_error("Integral type unsupported."); +@@ -1000,7 +1001,7 @@ void declare_real_functions(nb::module_& m) + auto _marker = [&marker](auto x) + { + nb::ndarray<const T, nb::ndim<2>, nb::numpy> x_view( +- x.data_handle(), {x.extent(0), x.extent(1)}); ++ x.data_handle(), {x.extent(0), x.extent(1)}, nb::handle()); + auto marked = marker(x_view); + return std::vector<std::int8_t>(marked.data(), + marked.data() + marked.size()); +@@ -1023,7 +1024,7 @@ void declare_real_functions(nb::module_& m) + auto _marker = [&marker](auto x) + { + nb::ndarray<const T, nb::ndim<2>, nb::numpy> x_view( +- x.data_handle(), {x.extent(0), x.extent(1)}); ++ x.data_handle(), {x.extent(0), x.extent(1)}, nb::handle()); + auto marked = marker(x_view); + return std::vector<std::int8_t>(marked.data(), + marked.data() + marked.size()); +@@ -1167,8 +1168,8 @@ void fem(nb::module_& m) + [](const dolfinx::fem::DofMap& self, int cell) + { + std::span<const std::int32_t> dofs = self.cell_dofs(cell); +- return nb::ndarray<const std::int32_t, nb::numpy>(dofs.data(), +- {dofs.size()}); ++ return nb::ndarray<const std::int32_t, nb::numpy>( ++ dofs.data(), {dofs.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal, nb::arg("cell")) + .def_prop_ro("bs", &dolfinx::fem::DofMap::bs) +@@ -1178,7 +1179,8 @@ void fem(nb::module_& m) + { + auto dofs = self.map(); + return nb::ndarray<const std::int32_t, nb::numpy>( +- dofs.data_handle(), {dofs.extent(0), dofs.extent(1)}); ++ dofs.data_handle(), {dofs.extent(0), dofs.extent(1)}, ++ nb::handle()); + }, + nb::rv_policy::reference_internal); + +diff --git a/python/dolfinx/wrappers/geometry.cpp b/python/dolfinx/wrappers/geometry.cpp +index 8bf5524dff9..d64e70cb584 100644 +--- a/python/dolfinx/wrappers/geometry.cpp ++++ b/python/dolfinx/wrappers/geometry.cpp +@@ -75,7 +75,7 @@ void declare_bbtree(nb::module_& m, std::string type) + m.def( + "compute_collisions_points", + [](const dolfinx::geometry::BoundingBoxTree<T>& tree, +- nb::ndarray<const T, nb::shape<nb::any, 3>, nb::c_contig> points) ++ nb::ndarray<const T, nb::shape<-1, 3>, nb::c_contig> points) + { + return dolfinx::geometry::compute_collisions<T>( + tree, std::span(points.data(), points.size())); +@@ -111,7 +111,7 @@ void declare_bbtree(nb::module_& m, std::string type) + [](const dolfinx::geometry::BoundingBoxTree<T>& tree, + const dolfinx::geometry::BoundingBoxTree<T>& midpoint_tree, + const dolfinx::mesh::Mesh<T>& mesh, +- nb::ndarray<const T, nb::shape<nb::any, 3>, nb::c_contig> points) ++ nb::ndarray<const T, nb::shape<-1, 3>, nb::c_contig> points) + { + return dolfinx_wrappers::as_nbarray( + dolfinx::geometry::compute_closest_entity<T>( +@@ -144,7 +144,7 @@ void declare_bbtree(nb::module_& m, std::string type) + "compute_colliding_cells", + [](const dolfinx::mesh::Mesh<T>& mesh, + const dolfinx::graph::AdjacencyList<int>& candidate_cells, +- nb::ndarray<const T, nb::shape<nb::any, 3>, nb::c_contig> points) ++ nb::ndarray<const T, nb::shape<-1, 3>, nb::c_contig> points) + { + return dolfinx::geometry::compute_colliding_cells<T>( + mesh, candidate_cells, std::span(points.data(), points.size())); +#@@ -220,26 +220,29 @@ void declare_bbtree(nb::module_& m, std::string type) +# [](const dolfinx::geometry::PointOwnershipData<T>& self) +# { +# return nb::ndarray<const int, nb::numpy>( +#- self.src_owner.data(), {self.src_owner.size()}); +#+ self.src_owner.data(), {self.src_owner.size()}, +#+ nb::handle()); +# }) +# .def_prop_ro("dest_owners", +# [](const dolfinx::geometry::PointOwnershipData<T>& self) +# { +# return nb::ndarray<const int, nb::numpy>( +#- self.dest_owners.data(), {self.dest_owners.size()}); +#+ self.dest_owners.data(), {self.dest_owners.size()}, +#+ nb::handle()); +# }) +# .def_prop_ro("dest_points", +# [](const dolfinx::geometry::PointOwnershipData<T>& self) +# { +# return nb::ndarray<const T, nb::numpy>( +# self.dest_points.data(), +#- {self.dest_points.size() / 3, 3}); +#+ {self.dest_points.size() / 3, 3}, nb::handle()); +# }) +# .def_prop_ro("dest_cells", +# [](const dolfinx::geometry::PointOwnershipData<T>& self) +# { +# return nb::ndarray<const std::int32_t, nb::numpy>( +#- self.dest_cells.data(), {self.dest_cells.size()}); +#+ self.dest_cells.data(), {self.dest_cells.size()}, +#+ nb::handle()); +# }); +# } +# } // namespace +diff --git a/python/dolfinx/wrappers/graph.cpp b/python/dolfinx/wrappers/graph.cpp +index fa07807c9ae..d20900e908f 100644 +--- a/python/dolfinx/wrappers/graph.cpp ++++ b/python/dolfinx/wrappers/graph.cpp +@@ -82,7 +82,8 @@ void declare_adjacency_list(nb::module_& m, std::string type) + [](const dolfinx::graph::AdjacencyList<T>& self, int i) + { + std::span<const T> link = self.links(i); +- return nb::ndarray<const T, nb::numpy>(link.data(), {link.size()}); ++ return nb::ndarray<const T, nb::numpy>(link.data(), {link.size()}, ++ nb::handle()); + }, + nb::rv_policy::reference_internal, nb::arg("i"), + "Links (edges) of a node") +@@ -90,8 +91,8 @@ void declare_adjacency_list(nb::module_& m, std::string type) + "array", + [](const dolfinx::graph::AdjacencyList<T>& self) + { +- return nb::ndarray<const T, nb::numpy>(self.array().data(), +- {self.array().size()}); ++ return nb::ndarray<const T, nb::numpy>( ++ self.array().data(), {self.array().size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro( +@@ -99,7 +100,7 @@ void declare_adjacency_list(nb::module_& m, std::string type) + [](const dolfinx::graph::AdjacencyList<T>& self) + { + return nb::ndarray<const std::int32_t, nb::numpy>( +- self.offsets().data(), {self.offsets().size()}); ++ self.offsets().data(), {self.offsets().size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro("num_nodes", &dolfinx::graph::AdjacencyList<T>::num_nodes) +diff --git a/python/dolfinx/wrappers/la.cpp b/python/dolfinx/wrappers/la.cpp +index 7ae8880d0fc..e84590e31d1 100644 +--- a/python/dolfinx/wrappers/la.cpp ++++ b/python/dolfinx/wrappers/la.cpp +@@ -55,7 +55,8 @@ void declare_objects(nb::module_& m, const std::string& type) + [](dolfinx::la::Vector<T>& self) + { + return nb::ndarray<T, nb::numpy>(self.mutable_array().data(), +- {self.array().size()}); ++ {self.array().size()}, ++ nb::handle()); + }, + nb::rv_policy::reference_internal) + .def("scatter_forward", &dolfinx::la::Vector<T>::scatter_fwd) +@@ -144,8 +145,8 @@ void declare_objects(nb::module_& m, const std::string& type) + "data", + [](dolfinx::la::MatrixCSR<T>& self) + { +- return nb::ndarray<T, nb::numpy>(self.values().data(), +- {self.values().size()}); ++ return nb::ndarray<T, nb::numpy>( ++ self.values().data(), {self.values().size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro( +@@ -153,7 +154,7 @@ void declare_objects(nb::module_& m, const std::string& type) + [](dolfinx::la::MatrixCSR<T>& self) + { + return nb::ndarray<const std::int32_t, nb::numpy>( +- self.cols().data(), {self.cols().size()}); ++ self.cols().data(), {self.cols().size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro( +@@ -161,8 +162,8 @@ void declare_objects(nb::module_& m, const std::string& type) + [](dolfinx::la::MatrixCSR<T>& self) + { + std::span<const std::int64_t> array = self.row_ptr(); +- return nb::ndarray<const std::int64_t, nb::numpy>(array.data(), +- {array.size()}); ++ return nb::ndarray<const std::int64_t, nb::numpy>( ++ array.data(), {array.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def("scatter_rev_begin", &dolfinx::la::MatrixCSR<T>::scatter_rev_begin) +@@ -276,9 +277,9 @@ void la(nb::module_& m) + { + auto [edges, ptr] = self.graph(); + return std::pair(nb::ndarray<const std::int32_t, nb::numpy>( +- edges.data(), {edges.size()}), ++ edges.data(), {edges.size()}, nb::handle()), + nb::ndarray<const std::int64_t, nb::numpy>( +- ptr.data(), {ptr.size()})); ++ ptr.data(), {ptr.size()}, nb::handle())); + }, + nb::rv_policy::reference_internal); + +#diff --git a/python/dolfinx/wrappers/log.cpp b/python/dolfinx/wrappers/log.cpp +#index 1946df053d9..bb87b8d5d56 100644 +#--- a/python/dolfinx/wrappers/log.cpp +#+++ b/python/dolfinx/wrappers/log.cpp +#@@ -54,9 +54,8 @@ void log(nb::module_& m) +# nb::arg("thread_name")); +# +# m.def( +#- "set_log_level", +#- [](spdlog::level::level_enum level) { spdlog::set_level(level); }, +#- nb::arg("level")); +#+ "set_log_level", [](spdlog::level::level_enum level) +#+ { spdlog::set_level(level); }, nb::arg("level")); +# m.def("get_log_level", []() { return spdlog::get_level(); }); +# m.def( +# "log", +diff --git a/python/dolfinx/wrappers/mesh.cpp b/python/dolfinx/wrappers/mesh.cpp +index 03f5cf8fcef..8ebdd38029e 100644 +--- a/python/dolfinx/wrappers/mesh.cpp ++++ b/python/dolfinx/wrappers/mesh.cpp +@@ -122,8 +122,8 @@ void declare_meshtags(nb::module_& m, std::string type) + "values", + [](dolfinx::mesh::MeshTags<T>& self) + { +- return nb::ndarray<const T, nb::numpy>(self.values().data(), +- {self.values().size()}); ++ return nb::ndarray<const T, nb::numpy>( ++ self.values().data(), {self.values().size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro( +@@ -131,7 +131,7 @@ void declare_meshtags(nb::module_& m, std::string type) + [](dolfinx::mesh::MeshTags<T>& self) + { + return nb::ndarray<const std::int32_t, nb::numpy>( +- self.indices().data(), {self.indices().size()}); ++ self.indices().data(), {self.indices().size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def("find", [](dolfinx::mesh::MeshTags<T>& self, T value) +@@ -161,7 +161,8 @@ void declare_mesh(nb::module_& m, std::string type) + { + auto dofs = self.dofmap(); + return nb::ndarray<const std::int32_t, nb::numpy>( +- dofs.data_handle(), {dofs.extent(0), dofs.extent(1)}); ++ dofs.data_handle(), {dofs.extent(0), dofs.extent(1)}, ++ nb::handle()); + }, + nb::rv_policy::reference_internal) + .def( +@@ -170,7 +171,8 @@ void declare_mesh(nb::module_& m, std::string type) + { + auto dofs = self.dofmap(i); + return nb::ndarray<const std::int32_t, nb::numpy>( +- dofs.data_handle(), {dofs.extent(0), dofs.extent(1)}); ++ dofs.data_handle(), {dofs.extent(0), dofs.extent(1)}, ++ nb::handle()); + }, + nb::rv_policy::reference_internal, nb::arg("i"), + "Get the geometry dofmap associated with coordinate element i (mixed " +@@ -180,8 +182,8 @@ void declare_mesh(nb::module_& m, std::string type) + "x", + [](dolfinx::mesh::Geometry<T>& self) + { +- return nb::ndarray<T, nb::numpy>(self.x().data(), +- {self.x().size() / 3, 3}); ++ return nb::ndarray<T, nb::numpy>( ++ self.x().data(), {self.x().size() / 3, 3}, nb::handle()); + }, + nb::rv_policy::reference_internal, + "Return coordinates of all geometry points. Each row is the " +@@ -196,7 +198,7 @@ void declare_mesh(nb::module_& m, std::string type) + const std::vector<std::int64_t>& id_to_global + = self.input_global_indices(); + return nb::ndarray<const std::int64_t, nb::numpy>( +- id_to_global.data(), {id_to_global.size()}); ++ id_to_global.data(), {id_to_global.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal); + +@@ -350,7 +352,7 @@ void declare_mesh(nb::module_& m, std::string type) + auto cpp_marker = [&marker](auto x) + { + nb::ndarray<const T, nb::ndim<2>, nb::numpy> x_view( +- x.data_handle(), {x.extent(0), x.extent(1)}); ++ x.data_handle(), {x.extent(0), x.extent(1)}, nb::handle()); + auto marked = marker(x_view); + return std::vector<std::int8_t>(marked.data(), + marked.data() + marked.size()); +@@ -371,7 +373,7 @@ void declare_mesh(nb::module_& m, std::string type) + auto cpp_marker = [&marker](auto x) + { + nb::ndarray<const T, nb::ndim<2>, nb::numpy> x_view( +- x.data_handle(), {x.extent(0), x.extent(1)}); ++ x.data_handle(), {x.extent(0), x.extent(1)}, nb::handle()); + auto marked = marker(x_view); + return std::vector<std::int8_t>(marked.data(), + marked.data() + marked.size()); +@@ -507,8 +509,8 @@ void mesh(nb::module_& m) + [](const dolfinx::mesh::Topology& self) + { + const std::vector<std::uint8_t>& p = self.get_facet_permutations(); +- return nb::ndarray<const std::uint8_t, nb::numpy>(p.data(), +- {p.size()}); ++ return nb::ndarray<const std::uint8_t, nb::numpy>( ++ p.data(), {p.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def( +@@ -517,8 +519,8 @@ void mesh(nb::module_& m) + { + const std::vector<std::uint32_t>& p + = self.get_cell_permutation_info(); +- return nb::ndarray<const std::uint32_t, nb::numpy>(p.data(), +- {p.size()}); ++ return nb::ndarray<const std::uint32_t, nb::numpy>( ++ p.data(), {p.size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def_prop_ro("dim", &dolfinx::mesh::Topology::dim, +@@ -531,7 +533,7 @@ void mesh(nb::module_& m) + throw std::runtime_error("Mixed topology unsupported"); + return nb::ndarray<const std::int64_t, nb::numpy>( + self.original_cell_index[0].data(), +- {self.original_cell_index[0].size()}); ++ {self.original_cell_index[0].size()}, nb::handle()); + }, + nb::rv_policy::reference_internal) + .def("connectivity", diff -Nru fenics-dolfinx-0.8.0/debian/patches/series fenics-dolfinx-0.8.0/debian/patches/series --- fenics-dolfinx-0.8.0/debian/patches/series 2024-05-12 11:17:08.000000000 +0200 +++ fenics-dolfinx-0.8.0/debian/patches/series 2024-05-30 11:05:39.000000000 +0200 @@ -12,3 +12,4 @@ test_adios2_MPI.patch pusimp.patch Newton_KSP_ref_counter_PR3190.patch +42c43485e81ada306f0b3f1dc735d95539174cbc.patch
OpenPGP_signature.asc
Description: OpenPGP digital signature