1{
2 lib,
3 fetchFromGitHub,
4 buildPythonPackage,
5 unittestCheckHook,
6 flit-core,
7 numpy,
8 scipy,
9
10 # optional dependencies
11 clarabel,
12 cvxopt,
13 daqp,
14 ecos,
15 gurobipy,
16 jaxopt,
17 osqp,
18 quadprog,
19 scs,
20 highspy,
21 piqp,
22 proxsuite,
23}:
24buildPythonPackage rec {
25 pname = "qpsolvers";
26 version = "4.8.1";
27 pyproject = true;
28
29 src = fetchFromGitHub {
30 owner = "qpsolvers";
31 repo = "qpsolvers";
32 tag = "v${version}";
33 hash = "sha256-wiFDsTE+L0J+6GsDz27Xh20eXvtV6KDa2CLGQDYzIGM=";
34 };
35
36 build-system = [ flit-core ];
37
38 pythonImportsCheck = [ "qpsolvers" ];
39
40 dependencies = [
41 numpy
42 scipy
43 ];
44
45 optional-dependencies = {
46 # FIXME commented out solvers have not been packaged yet
47 clarabel = [ clarabel ];
48 cvxopt = [ cvxopt ];
49 daqp = [ daqp ];
50 ecos = [ ecos ];
51 gurobi = [ gurobipy ];
52 highs = [ highspy ];
53 jaxopt = [ jaxopt ];
54 # mosek = [ cvxopt mosek ];
55 osqp = [ osqp ];
56 piqp = [ piqp ];
57 proxqp = [ proxsuite ];
58 # qpalm = [ qpalm ];
59 quadprog = [ quadprog ];
60 scs = [ scs ];
61 open_source_solvers =
62 with optional-dependencies;
63 lib.flatten [
64 clarabel
65 cvxopt
66 daqp
67 ecos
68 highs
69 osqp
70 piqp
71 proxqp
72 # qpalm
73 quadprog
74 scs
75 ];
76 };
77
78 nativeCheckInputs = [ unittestCheckHook ] ++ optional-dependencies.open_source_solvers;
79
80 meta = with lib; {
81 changelog = "https://github.com/qpsolvers/qpsolvers/blob/${src.tag}/CHANGELOG.md";
82 description = "Quadratic programming solvers in Python with a unified API";
83 homepage = "https://github.com/qpsolvers/qpsolvers";
84 license = licenses.lgpl3Plus;
85 maintainers = with maintainers; [ renesat ];
86 };
87}