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}