1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
{
lib,
stdenv,
toPythonModule,
fetchFromGitHub,
buildPythonPackage,
# build-system
scikit-build-core,
nanobind,
# nativeBuildInputs
cmake,
ninja,
pkg-config,
# buildInputs
dolfinx,
darwinMinVersionHook,
# dependency
numpy,
cffi,
mpi4py,
petsc4py,
slepc4py,
adios2,
kahip,
fenics-ffcx,
fenics-basix,
fenics-ufl,
# nativeCheckInputs
scipy,
matplotlib,
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 (finalAttrs: {
inherit (dolfinx)
version
src
;
pname = "fenics-dolfinx";
pyproject = true;
pythonRelaxDeps = [
"fenics-ufl"
];
preConfigure = ''
cd python
'';
dontUseCmakeConfigure = true;
build-system = [
scikit-build-core
nanobind
];
nativeBuildInputs = [
cmake
ninja
pkg-config
fenicsPackages.mpi
];
buildInputs = [
fenicsPackages.dolfinx
]
++ lib.optional stdenv.hostPlatform.isDarwin (darwinMinVersionHook "13.3");
dependencies = [
numpy
cffi
fenics-basix
fenics-ffcx
fenics-ufl
petsc4py
fenicsPackages.slepc
fenicsPackages.adios2
fenicsPackages.kahip
(mpi4py.override { inherit (fenicsPackages) mpi; })
];
nativeCheckInputs = [
scipy
matplotlib
pytestCheckHook
writableTmpDirAsHomeHook
mpiCheckPhaseHook
];
preCheck = ''
cd test
'';
pythonImportsCheck = [
"dolfinx"
];
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/v${finalAttrs.version}";
license = with lib.licenses; [
bsd2
lgpl3Plus
];
platforms = lib.platforms.unix;
maintainers = with lib.maintainers; [ qbisi ];
};
})
|