diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml index 632b627..e335897 100644 --- a/.github/workflows/build_docs.yml +++ b/.github/workflows/build_docs.yml @@ -35,7 +35,7 @@ jobs: cmake --install build-dir - name: Install DOLFINx-MPC (Python) - run: python3 -m pip -v install --break-system-packages --config-settings=cmake.build-type="Release" --no-build-isolation ./python/[docs] + run: python3 -m pip -v install --config-settings=cmake.build-type="Release" --no-build-isolation ./python/[docs] - name: Build docs run: jupyter book build . diff --git a/.github/workflows/test_mpc.yml b/.github/workflows/test_mpc.yml index 6ab7d16..a733a03 100644 --- a/.github/workflows/test_mpc.yml +++ b/.github/workflows/test_mpc.yml @@ -69,23 +69,23 @@ jobs: apt-get install -y clang - name: upgrade pip - run: python3 -m pip install --break-system-packages --upgrade setuptools pip + run: python3 -m pip install --upgrade setuptools pip - name: Check formatting run: | - python3 -m pip install --break-system-packages ruff + python3 -m pip install ruff ruff check ruff format - name: Check typing run: | - python3 -m pip install --break-system-packages mypy + python3 -m pip install mypy cd python python3 -m mypy . --exclude=build - name: Install h5py run: | - python3 -m pip install --no-build-isolation --break-system-packages --no-cache-dir --no-binary=h5py h5py + python3 -m pip install --no-build-isolation --no-cache-dir --no-binary=h5py h5py - name: Install DOLFINx uses: jorgensd/actions/install-dolfinx@v0.3 @@ -103,7 +103,7 @@ jobs: cmake --install build-dir - name: Install DOLFINx-MPC (Python) - run: python3 -m pip -v install --break-system-packages --config-settings=cmake.build-type=${MPC_BUILD_MODE} --no-build-isolation -e python/[test] + run: python3 -m pip -v install --config-settings=cmake.build-type=${MPC_BUILD_MODE} --no-build-isolation -e python/[test] - name: Run tests (serial) run: coverage run --rcfile=.coveragerc -m mpi4py -m pytest python/tests/ -vs diff --git a/docker/Dockerfile b/docker/Dockerfile index 7f30d70..0fcef72 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -9,11 +9,11 @@ ARG PYTHON_VERSION=3.12 ENV HDF5_MPI="ON" \ HDF5_DIR="/usr/local" -RUN python3 -m pip install --break-system-packages -U pip setuptools +RUN python3 -m pip install -U pip setuptools # Install h5py https://github.com/h5py/h5py/issues/2222 -RUN python3 -m pip install --break-system-packages --no-cache-dir --no-binary=h5py git+https://github.com/h5py/h5py.git -RUN python3 -m pip install --break-system-packages meshio +RUN python3 -m pip install --no-cache-dir --no-binary=h5py git+https://github.com/h5py/h5py.git +RUN python3 -m pip install meshio # Copy DOLFINX_MPC source dir COPY . dolfinx_mpc @@ -21,9 +21,9 @@ COPY . dolfinx_mpc # Install real mode RUN . /usr/local/bin/dolfinx-real-mode && \ . /usr/local/dolfinx-real/lib/dolfinx/dolfinx.conf && \ - cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local/dolfinx-real -DCMAKE_BUILD_TYPE=Developer -B build-dir-real dolfinx_mpc/cpp/ && \ - ninja install -j4 -C build-dir-real && \ - python3 -m pip install -v --break-system-packages --no-build-isolation --check-build-dependencies \ + cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local/dolfinx-real -DCMAKE_BUILD_TYPE=Developer -B build-dir-real dolfinx_mpc/cpp/ && \ + ninja install -j4 -C build-dir-real && \ + python3 -m pip install -v --no-build-isolation --check-build-dependencies \ --target /usr/local/dolfinx-real/lib/python${PYTHON_VERSION}/dist-packages --no-dependencies --no-cache-dir ./dolfinx_mpc/python # Clean repo to remove build dir from pip @@ -32,9 +32,9 @@ RUN rm -rf dolfinx_mpc/python/build # Install complex mode RUN . /usr/local/bin/dolfinx-complex-mode && \ . /usr/local/dolfinx-complex/lib/dolfinx/dolfinx.conf && \ - cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local/dolfinx-complex -DCMAKE_BUILD_TYPE=Developer -B build-dir-complex dolfinx_mpc/cpp/ && \ - ninja install -j4 -C build-dir-complex && \ - python3 -m pip install --break-system-packages -v --no-build-isolation --check-build-dependencies \ + cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local/dolfinx-complex -DCMAKE_BUILD_TYPE=Developer -B build-dir-complex dolfinx_mpc/cpp/ && \ + ninja install -j4 -C build-dir-complex && \ + python3 -m pip install -v --no-build-isolation --check-build-dependencies \ --target /usr/local/dolfinx-complex/lib/python${PYTHON_VERSION}/dist-packages --no-dependencies --no-cache-dir ./dolfinx_mpc/python WORKDIR /root diff --git a/python/benchmarks/bench_elasticity.py b/python/benchmarks/bench_elasticity.py index 5dc2068..f0d3a86 100644 --- a/python/benchmarks/bench_elasticity.py +++ b/python/benchmarks/bench_elasticity.py @@ -216,7 +216,7 @@ def l2b(li): h5f.create_dataset("num_dofs", (N,), dtype=np.int32) sd = h5f.create_dataset("solve_time", (N, MPI.COMM_WORLD.size), dtype=np.float64) solver = "BoomerAMG" if args.boomeramg else "GAMG" - sd.attrs["solver"] = np.string_(solver) + sd.attrs["solver"] = np.bytes_(solver) # Loop over refinement levels for i in range(N): diff --git a/python/benchmarks/bench_elasticity_edge.py b/python/benchmarks/bench_elasticity_edge.py index bc51394..9f12ead 100644 --- a/python/benchmarks/bench_elasticity_edge.py +++ b/python/benchmarks/bench_elasticity_edge.py @@ -260,9 +260,9 @@ def sigma(v): sd = h5f.create_dataset("solve_time", (N, MPI.COMM_WORLD.size), dtype=np.float64) solver = "BoomerAMG" if args.boomeramg else "GAMG" ct = "Tet" if args.tetra else "Hex" - sd.attrs["solver"] = np.string_(solver) - sd.attrs["degree"] = np.string_(str(int(args.degree))) - sd.attrs["ct"] = np.string_(ct) + sd.attrs["solver"] = np.bytes_(solver) + sd.attrs["degree"] = np.bytes_(str(int(args.degree))) + sd.attrs["ct"] = np.bytes_(ct) for i in range(N): log_info(f"Run {i} in progress") diff --git a/python/benchmarks/bench_periodic.py b/python/benchmarks/bench_periodic.py index 7362a2b..4179f6c 100644 --- a/python/benchmarks/bench_periodic.py +++ b/python/benchmarks/bench_periodic.py @@ -222,9 +222,9 @@ def periodic_relation(x): sd = h5f.create_dataset("solve_time", (N, MPI.COMM_WORLD.size), dtype=np.float64) solver = "BoomerAMG" if args.boomeramg else "GAMG" ct = "Tet" if args.tetra else "Hex" - sd.attrs["solver"] = np.string_(solver) - sd.attrs["degree"] = np.string_(str(int(args.degree))) - sd.attrs["ct"] = np.string_(ct) + sd.attrs["solver"] = np.bytes_(solver) + sd.attrs["degree"] = np.bytes_(str(int(args.degree))) + sd.attrs["ct"] = np.bytes_(ct) # Loop over refinements for i in range(N): diff --git a/python/benchmarks/ref_elasticity.py b/python/benchmarks/ref_elasticity.py index ad8825e..b3e69b7 100644 --- a/python/benchmarks/ref_elasticity.py +++ b/python/benchmarks/ref_elasticity.py @@ -237,9 +237,9 @@ def sigma(v): sd = h5f.create_dataset("solve_time", (N, MPI.COMM_WORLD.size), dtype=np.float64) solver = "BoomerAMG" if args.boomeramg else "GAMG" ct = "Tet" if args.tetra else "Hex" - sd.attrs["solver"] = np.string_(solver) - sd.attrs["degree"] = np.string_(str(int(args.degree))) - sd.attrs["ct"] = np.string_(ct) + sd.attrs["solver"] = np.bytes_(solver) + sd.attrs["degree"] = np.bytes_(str(int(args.degree))) + sd.attrs["ct"] = np.bytes_(ct) # Loop over refinement levels for i in range(N): diff --git a/python/benchmarks/ref_periodic.py b/python/benchmarks/ref_periodic.py index 1193d51..049d9a3 100644 --- a/python/benchmarks/ref_periodic.py +++ b/python/benchmarks/ref_periodic.py @@ -199,9 +199,9 @@ def dirichletboundary(x): sd = h5f.create_dataset("solve_time", (N, MPI.COMM_WORLD.size), dtype=np.float64) solver = "BoomerAMG" if args.boomeramg else "GAMG" ct = "Tet" if args.tetra else "Hex" - sd.attrs["solver"] = np.string_(solver) - sd.attrs["degree"] = np.string_(str(int(args.degree))) - sd.attrs["ct"] = np.string_(ct) + sd.attrs["solver"] = np.bytes_(solver) + sd.attrs["degree"] = np.bytes_(str(int(args.degree))) + sd.attrs["ct"] = np.bytes_(ct) for i in range(N): if MPI.COMM_WORLD.rank == 0: set_log_level(LogLevel.INFO) diff --git a/python/demos/demo_elasticity_disconnect_2D.py b/python/demos/demo_elasticity_disconnect_2D.py index 5723149..6a1a234 100644 --- a/python/demos/demo_elasticity_disconnect_2D.py +++ b/python/demos/demo_elasticity_disconnect_2D.py @@ -133,12 +133,12 @@ def gather_dof_coordinates(V: FunctionSpace, dofs: np.ndarray): coords = x[local_dofs] num_nodes = len(coords) glob_num_nodes = MPI.COMM_WORLD.allreduce(num_nodes, op=MPI.SUM) - recvbuf = None + recvbuf = np.empty(0, dtype=V.mesh.geometry.x.dtype) if MPI.COMM_WORLD.rank == 0: recvbuf = np.zeros(3 * glob_num_nodes, dtype=V.mesh.geometry.x.dtype) sendbuf = coords.reshape(-1) sendcounts = np.array(MPI.COMM_WORLD.gather(len(sendbuf), 0)) - MPI.COMM_WORLD.Gatherv(sendbuf, (recvbuf, sendcounts), root=0) + MPI.COMM_WORLD.Gatherv(sendbuf, (recvbuf, sendcounts), root=0) # type: ignore glob_coords = MPI.COMM_WORLD.bcast(recvbuf, root=0).reshape((-1, 3)) return glob_coords diff --git a/python/dolfinx_mpc/utils/mpc_utils.py b/python/dolfinx_mpc/utils/mpc_utils.py index f43f022..5a0b7e6 100644 --- a/python/dolfinx_mpc/utils/mpc_utils.py +++ b/python/dolfinx_mpc/utils/mpc_utils.py @@ -204,7 +204,7 @@ def rigid_motions_nullspace(V: _fem.FunctionSpace): b.scatter_forward() _la.orthonormalize(nullspace_basis) - assert _la.is_orthonormal(nullspace_basis, np.finfo(_x.x.array.dtype).eps) + assert _la.is_orthonormal(nullspace_basis, float(np.finfo(_x.x.array.dtype).eps)) local_size = V.dofmap.index_map.size_local * V.dofmap.index_map_bs basis_petsc = [ PETSc.Vec().createWithArray(x[:local_size], bsize=gdim, comm=V.mesh.comm) # type: ignore