From e4778f3cd49df8333b2572d9e2c54a33dcb6ca7b Mon Sep 17 00:00:00 2001 From: qbisi Date: Mon, 21 Apr 2025 00:47:10 +0800 Subject: [PATCH 1/6] python312Packages.fenics-basix: init at 0.9.0 --- .../python-modules/fenics-basix/default.nix | 81 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 83 insertions(+) create mode 100644 pkgs/development/python-modules/fenics-basix/default.nix diff --git a/pkgs/development/python-modules/fenics-basix/default.nix b/pkgs/development/python-modules/fenics-basix/default.nix new file mode 100644 index 000000000000..d48c7082805d --- /dev/null +++ b/pkgs/development/python-modules/fenics-basix/default.nix @@ -0,0 +1,81 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + scikit-build-core, + nanobind, + cmake, + ninja, + pkg-config, + blas, + lapack, + numpy, + sympy, + scipy, + matplotlib, + fenics-ufl, + pytest-xdist, + pytestCheckHook, +}: + +buildPythonPackage rec { + pname = "fenics-basix"; + version = "0.9.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "fenics"; + repo = "basix"; + tag = "v${version}"; + hash = "sha256-jLQMDt6zdl+oixd5Qevn4bvxBsXpTNcbH2Os6TC9sRQ="; + }; + + dontUseCmakeConfigure = true; + + build-system = [ + scikit-build-core + nanobind + ]; + + nativeBuildInputs = [ + cmake + ninja + pkg-config + ]; + + dependencies = [ + numpy + ]; + + buildInputs = [ + blas + lapack + ]; + + # Prefer finding BLAS and LAPACK via pkg-config. + # Avoid using the Accelerate.framework from the Darwin SDK. + # Also, avoid mistaking BLAS for LAPACK. + env.CMAKE_ARGS = lib.cmakeBool "BLA_PREFER_PKGCONFIG" true; + + pythonImportsCheck = [ + "basix" + ]; + + nativeCheckInputs = [ + sympy + scipy + matplotlib + fenics-ufl + pytest-xdist + pytestCheckHook + ]; + + meta = { + homepage = "https://fenicsproject.org"; + downloadPage = "https://github.com/fenics/basix"; + description = "Finite element definition and tabulation runtime library"; + changelog = "https://github.com/fenics/basix/releases/tag/${src.tag}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ qbisi ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index cb008fa244ec..17f2ac93399d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4859,6 +4859,8 @@ self: super: with self; { fenics = callPackage ../development/python-modules/fenics { hdf5 = pkgs.hdf5_1_10; }; + fenics-basix = callPackage ../development/python-modules/fenics-basix { }; + fenics-ufl = callPackage ../development/python-modules/fenics-ufl { }; ffcv = callPackage ../development/python-modules/ffcv { }; From 0c3ed24d1e7e9b625dcf980dcb133118ddfd787f Mon Sep 17 00:00:00 2001 From: qbisi Date: Mon, 21 Apr 2025 00:47:54 +0800 Subject: [PATCH 2/6] python312Packages.fenics-ffcx: init at 0.9.0 --- .../python-modules/fenics-ffcx/default.nix | 70 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 72 insertions(+) create mode 100644 pkgs/development/python-modules/fenics-ffcx/default.nix diff --git a/pkgs/development/python-modules/fenics-ffcx/default.nix b/pkgs/development/python-modules/fenics-ffcx/default.nix new file mode 100644 index 000000000000..c0b212d7b01d --- /dev/null +++ b/pkgs/development/python-modules/fenics-ffcx/default.nix @@ -0,0 +1,70 @@ +{ + lib, + stdenv, + buildPythonPackage, + fetchFromGitHub, + setuptools, + numpy, + cffi, + fenics-ufl, + fenics-basix, + sympy, + numba, + pytestCheckHook, + addBinToPathHook, +}: + +buildPythonPackage rec { + pname = "fenics-ffcx"; + version = "0.9.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "fenics"; + repo = "ffcx"; + tag = "v${version}"; + hash = "sha256-eAV//RLbrxyhqgbZ2DiR7qML7xfgPn0/Seh+2no0x8w="; + }; + + pythonRelaxDeps = [ + "fenics-ufl" + ]; + + build-system = [ + setuptools + ]; + + dependencies = [ + numpy + cffi + setuptools + fenics-ufl + fenics-basix + ]; + + pythonImportsCheck = [ + "ffcx" + ]; + + nativeCheckInputs = [ + sympy + numba + pytestCheckHook + addBinToPathHook + ]; + + env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=unused-command-line-argument"; + + meta = { + homepage = "https://fenicsproject.org"; + downloadPage = "https://github.com/fenics/ffcx"; + description = "FEniCSx Form Compiler"; + changelog = "https://github.com/fenics/ffcx/releases/tag/${src.tag}"; + mainProgram = "ffcx"; + license = with lib.licenses; [ + unlicense + lgpl3Plus + ]; + maintainers = with lib.maintainers; [ qbisi ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 17f2ac93399d..a34b96108028 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-ffcx = callPackage ../development/python-modules/fenics-ffcx { }; + fenics-ufl = callPackage ../development/python-modules/fenics-ufl { }; ffcv = callPackage ../development/python-modules/ffcv { }; From 77ce9519c32777831b7c8c82244727790a741029 Mon Sep 17 00:00:00 2001 From: qbisi Date: Tue, 6 May 2025 20:46:33 +0800 Subject: [PATCH 3/6] petsc: inherit python3/python3Packages in petscPackages --- pkgs/by-name/pe/petsc/package.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/by-name/pe/petsc/package.nix b/pkgs/by-name/pe/petsc/package.nix index e05d85d7f2a2..8f45a30a051a 100644 --- a/pkgs/by-name/pe/petsc/package.nix +++ b/pkgs/by-name/pe/petsc/package.nix @@ -78,6 +78,8 @@ let petscPackages = lib.makeScope newScope (self: { inherit mpi + python3 + python3Packages # global override options mpiSupport fortranSupport From 178cabec1a4d62eb19e409c622a9314f2f6d2354 Mon Sep 17 00:00:00 2001 From: qbisi Date: Tue, 6 May 2025 20:47:45 +0800 Subject: [PATCH 4/6] adiso2: override hdf5-mpi with mpi --- pkgs/by-name/ad/adios2/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/by-name/ad/adios2/package.nix b/pkgs/by-name/ad/adios2/package.nix index 08120d9f2a34..6dc9083f41dd 100644 --- a/pkgs/by-name/ad/adios2/package.nix +++ b/pkgs/by-name/ad/adios2/package.nix @@ -71,7 +71,7 @@ stdenv.mkDerivation (finalAttrs: { bzip2 lz4 c-blosc2 - hdf5-mpi + (hdf5-mpi.override { inherit mpi; }) libfabric libpng libsodium From f76bdc0af6d53336f8eca12f340b5fe430755c00 Mon Sep 17 00:00:00 2001 From: qbisi Date: Thu, 8 May 2025 19:57:33 +0800 Subject: [PATCH 5/6] dolfinx: init at 0.9.0.post1 --- pkgs/by-name/do/dolfinx/package.nix | 114 ++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 pkgs/by-name/do/dolfinx/package.nix diff --git a/pkgs/by-name/do/dolfinx/package.nix b/pkgs/by-name/do/dolfinx/package.nix new file mode 100644 index 000000000000..db7d0659601f --- /dev/null +++ b/pkgs/by-name/do/dolfinx/package.nix @@ -0,0 +1,114 @@ +{ + lib, + stdenv, + fetchFromGitHub, + cmake, + pkg-config, + spdlog, + pugixml, + boost, + petsc, + slepc, + kahip, + adios2, + python3Packages, + catch2_3, + withParmetis ? false, +}: +let + dolfinxPackages = petsc.petscPackages.overrideScope ( + final: prev: { + slepc = final.callPackage slepc.override { }; + adios2 = final.callPackage adios2.override { }; + kahip = final.callPackage kahip.override { }; + } + ); +in +stdenv.mkDerivation (finalAttrs: { + version = "0.9.0.post1"; + pname = "dolfinx"; + + src = fetchFromGitHub { + owner = "fenics"; + repo = "dolfinx"; + tag = "v${finalAttrs.version}"; + hash = "sha256-4IIx7vUZeDwOGVdyC2PBvfhVjrmGZeVQKAwgDYScbY0="; + }; + + preConfigure = '' + cd cpp + ''; + + nativeBuildInputs = [ + cmake + pkg-config + ]; + + buildInputs = [ + dolfinxPackages.kahip + dolfinxPackages.scotch + ] ++ lib.optional withParmetis dolfinxPackages.parmetis; + + propagatedBuildInputs = [ + spdlog + pugixml + boost + petsc + dolfinxPackages.hdf5 + dolfinxPackages.slepc + dolfinxPackages.adios2 + python3Packages.fenics-basix + python3Packages.fenics-ffcx + ]; + + cmakeFlags = [ + (lib.cmakeBool "DOLFINX_ENABLE_ADIOS2" true) + (lib.cmakeBool "DOLFINX_ENABLE_PETSC" true) + (lib.cmakeBool "DOLFIN_ENABLE_PARMETIS" withParmetis) + (lib.cmakeBool "DOLFINX_ENABLE_SCOTCH" true) + (lib.cmakeBool "DOLFINX_ENABLE_SLEPC" true) + (lib.cmakeBool "DOLFINX_ENABLE_KAHIP" true) + (lib.cmakeFeature "CMAKE_INSTALL_BINDIR" "bin") + (lib.cmakeFeature "CMAKE_INSTALL_LIBDIR" "lib") + (lib.cmakeFeature "CMAKE_INSTALL_INCLUDEDIR" "include") + ]; + + passthru.tests = { + unittests = stdenv.mkDerivation { + pname = "${finalAttrs.pname}-unittests"; + inherit (finalAttrs) version src; + + preConfigure = '' + cd cpp/test + ''; + + nativeBuildInputs = [ + cmake + pkg-config + ]; + + buildInputs = [ finalAttrs.finalPackage ]; + + nativeCheckInputs = [ catch2_3 ]; + + doCheck = true; + + installPhase = '' + touch $out + ''; + }; + }; + + 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/${finalAttrs.src.tag}"; + license = with lib.licenses; [ + bsd2 + lgpl3Plus + ]; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ qbisi ]; + }; +}) From 2bbc507c013b3c55028d88671bcbd336e57e5090 Mon Sep 17 00:00:00 2001 From: qbisi Date: Tue, 6 May 2025 17:42:52 +0800 Subject: [PATCH 6/6] 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 { };