From 2bbc507c013b3c55028d88671bcbd336e57e5090 Mon Sep 17 00:00:00 2001 From: qbisi Date: Tue, 6 May 2025 17:42:52 +0800 Subject: [PATCH] python312Packages.fenics-dolfinx: init at 0.9.0.post1 --- .../python-modules/fenics-dolfinx/default.nix | 157 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 159 insertions(+) create mode 100644 pkgs/development/python-modules/fenics-dolfinx/default.nix diff --git a/pkgs/development/python-modules/fenics-dolfinx/default.nix b/pkgs/development/python-modules/fenics-dolfinx/default.nix new file mode 100644 index 000000000000..ffb5ead74482 --- /dev/null +++ b/pkgs/development/python-modules/fenics-dolfinx/default.nix @@ -0,0 +1,157 @@ +{ + lib, + stdenv, + toPythonModule, + fetchFromGitHub, + buildPythonPackage, + + # build-system + scikit-build-core, + nanobind, + + # nativeBuildInputs + cmake, + ninja, + pkg-config, + + # buildInputs + dolfinx, + + # dependency + numpy, + cffi, + mpi4py, + petsc4py, + slepc4py, + adios2, + kahip, + fenics-ffcx, + fenics-basix, + fenics-ufl, + + # nativeCheckInputs + scipy, + matplotlib, + pytest-xdist, + pytestCheckHook, + writableTmpDirAsHomeHook, + mpiCheckPhaseHook, + + # custom options + withParmetis ? false, + + # passthru.tests + fenics-dolfinx, + mpich, +}: + +let + fenicsPackages = petsc4py.petscPackages.overrideScope ( + final: prev: { + slepc = final.callPackage slepc4py.override { }; + adios2 = final.callPackage adios2.override { }; + kahip = final.callPackage kahip.override { }; + dolfinx = final.callPackage dolfinx.override { inherit withParmetis; }; + } + ); +in +buildPythonPackage rec { + inherit (dolfinx) + version + src + ; + pname = "fenics-dolfinx"; + pyproject = true; + + pythonRelaxDeps = [ + "cffi" + "fenics-ufl" + ]; + + preConfigure = '' + cd python + ''; + + dontUseCmakeConfigure = true; + + build-system = [ + scikit-build-core + nanobind + ]; + + nativeBuildInputs = [ + cmake + ninja + pkg-config + fenicsPackages.mpi + ]; + + buildInputs = [ + fenicsPackages.dolfinx + ]; + + dependencies = [ + numpy + cffi + fenics-basix + fenics-ffcx + fenics-ufl + petsc4py + fenicsPackages.slepc + fenicsPackages.adios2 + fenicsPackages.kahip + (mpi4py.override { inherit (fenicsPackages) mpi; }) + ]; + + doCheck = true; + + nativeCheckInputs = [ + scipy + matplotlib + pytest-xdist + pytestCheckHook + writableTmpDirAsHomeHook + mpiCheckPhaseHook + ]; + + preCheck = '' + rm -rf dolfinx + ''; + + pythonImportsCheck = [ + "dolfinx" + ]; + + disabledTests = [ + # require cffi<1.17 + "test_cffi_expression" + "test_hexahedron_mesh" + ]; + + passthru = { + tests = + { + complex = fenics-dolfinx.override { + petsc4py = petsc4py.override { scalarType = "complex"; }; + }; + } + // lib.optionalAttrs stdenv.hostPlatform.isLinux { + mpich = fenics-dolfinx.override { + petsc4py = petsc4py.override { mpi = mpich; }; + }; + }; + }; + + meta = { + homepage = "https://fenicsproject.org"; + downloadPage = "https://github.com/fenics/dolfinx"; + description = "Computational environment of FEniCSx and implements the FEniCS Problem Solving Environment in C++ and Python"; + changelog = "https://github.com/fenics/dolfinx/releases/tag/${src.tag}"; + license = with lib.licenses; [ + bsd2 + lgpl3Plus + ]; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ qbisi ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index a34b96108028..1df25bc30548 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4861,6 +4861,8 @@ self: super: with self; { fenics-basix = callPackage ../development/python-modules/fenics-basix { }; + fenics-dolfinx = callPackage ../development/python-modules/fenics-dolfinx { }; + fenics-ffcx = callPackage ../development/python-modules/fenics-ffcx { }; fenics-ufl = callPackage ../development/python-modules/fenics-ufl { };