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 osqp,
17 quadprog,
18 scs,
19 highspy,
20 piqp,
21}:
22buildPythonPackage rec {
23 pname = "qpsolvers";
24 version = "4.4.0";
25 pyproject = true;
26
27 src = fetchFromGitHub {
28 owner = "qpsolvers";
29 repo = "qpsolvers";
30 rev = "refs/tags/v${version}";
31 hash = "sha256-/yIFLxy2gjEFg/J9A5pcbrVmq4A3Tz2efEAntH0Twk8=";
32 };
33
34 nativeBuildInputs = [ flit-core ];
35
36 pythonImportsCheck = [ "qpsolvers" ];
37
38 propagatedBuildInputs = [
39 numpy
40 scipy
41 ];
42
43 optional-dependencies = {
44 # FIXME commented out solvers have not been packaged yet
45 clarabel = [ clarabel ];
46 cvxopt = [ cvxopt ];
47 daqp = [ daqp ];
48 ecos = [ ecos ];
49 gurobi = [ gurobipy ];
50 highs = [ highspy ];
51 # mosek = [ cvxopt mosek ];
52 osqp = [ osqp ];
53 piqp = [ piqp ];
54 # proxqp = [ proxsuite ];
55 # qpalm = [ qpalm ];
56 quadprog = [ quadprog ];
57 scs = [ scs ];
58 open_source_solvers =
59 with optional-dependencies;
60 lib.flatten [
61 clarabel
62 cvxopt
63 daqp
64 ecos
65 highs
66 osqp
67 piqp # proxqp qpalm
68 quadprog
69 scs
70 ];
71 };
72
73 nativeCheckInputs = [ unittestCheckHook ] ++ optional-dependencies.open_source_solvers;
74
75 meta = with lib; {
76 changelog = "https://github.com/qpsolvers/qpsolvers/blob/${src.rev}/CHANGELOG.md";
77 description = "Quadratic programming solvers in Python with a unified API";
78 homepage = "https://github.com/qpsolvers/qpsolvers";
79 license = licenses.lgpl3Plus;
80 maintainers = with maintainers; [ renesat ];
81 };
82}