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