1{ lib
2, stdenv
3, pythonOlder
4, buildPythonPackage
5, fetchPypi
6, cvxopt
7, ecos
8, numpy
9, osqp
10, scipy
11, scs
12, useOpenmp ? (!stdenv.isDarwin)
13 # Check inputs
14, pytestCheckHook
15}:
16
17buildPythonPackage rec {
18 pname = "cvxpy";
19 version = "1.1.17";
20 format = "pyproject";
21
22 disabled = pythonOlder "3.5";
23
24 src = fetchPypi {
25 inherit pname version;
26 sha256 = "sha256-M5fTuJ13Dqnw/DWbHJs6/t5qDTvqHP8g4mU7E0Uc24o=";
27 };
28
29 propagatedBuildInputs = [
30 cvxopt
31 ecos
32 numpy
33 osqp
34 scipy
35 scs
36 ];
37
38 # Required flags from https://github.com/cvxgrp/cvxpy/releases/tag/v1.1.11
39 preBuild = lib.optionalString useOpenmp ''
40 export CFLAGS="-fopenmp"
41 export LDFLAGS="-lgomp"
42 '';
43
44 checkInputs = [ pytestCheckHook ];
45
46 pytestFlagsArray = [ "./cvxpy" ];
47
48 # Disable the slowest benchmarking tests, cuts test time in half
49 disabledTests = [
50 "test_tv_inpainting"
51 "test_diffcp_sdp_example"
52 ] ++ lib.optionals stdenv.isAarch64 [
53 "test_ecos_bb_mi_lp_2" # https://github.com/cvxgrp/cvxpy/issues/1241#issuecomment-780912155
54 ];
55
56 pythonImportsCheck = [ "cvxpy" ];
57
58 meta = with lib; {
59 description = "A domain-specific language for modeling convex optimization problems in Python";
60 homepage = "https://www.cvxpy.org/";
61 downloadPage = "https://github.com/cvxgrp/cvxpy/releases";
62 changelog = "https://github.com/cvxgrp/cvxpy/releases/tag/v${version}";
63 license = licenses.asl20;
64 maintainers = with maintainers; [ drewrisinger ];
65 };
66}