CVXPY 1.8
This release is consistent with our semantic versioning guarantee. It comes packed with many new features, bug fixes, and performance improvements.
This version of CVXPY supports Python 3.11 through 3.14. We will support CVXPY 1.8 with bugfixes while developing the 1.9 release. CVXPY 1.7 and older are no longer supported.
Adoption of SPEC 0
In this release we decided to adopt the minimum supported dependencies SPEC (Scientific Python Ecosystem Coordination). Notably, this means that we have dropped support for Python 3.10 and NumPy < 2.0.
New canonicalization backend
This release introduces a new backend which can handle a very large number of parameters. To use the backend, please specify the argument canon_backend="COO" when solving a DPP problem.
New default MILP solver
CVXPY adds the open source solver HiGHS as its default mixed-integer linear programming (MILP) solver. HiGHS is a high performance serial and parallel solver for large scale sparse linear optimization problems developed by a team from the University of Edinburgh.
Power cone canonicalization
Four atoms, power, geo_mean, pnorm, and inv_prod now take a parameter approx that determines whether CVXPY canonicalizes the atom using many SOCs or one power cone. Feel free to set approx=False and report on whether it improves performance or accuracy!
Logical boolean operations
CVXPY now supports logical boolean operations on boolean expressions via the cp.logic module. The new atoms are cp.logic.AND, cp.logic.OR, cp.logic.NOT, and cp.logic.XOR.
New features
- DPP with complex expressions
- Support for ND matmul
- Support for ND cumsum
- Unification of QP interface into quadratic conic pathway
- Solving chain context
- New atom:
einsum - New atom:
stack - New solver interface: MOREAU
- New solver interface: KNITRO
- New solver interface: COSMO
- New solver interface: QPALM
- Add
num_itersto Gurobi conic solver solution info
Summary
This new release totaled 115 PRs from 35 contributors.
- @7astro7 | #2825, #2976
- @atx | #2947
- @benmanns | #2894
- @brunoml5 | #3025
- @ClayCampaigne | #2929, #2933, #2935, #2944, #2956
- @davidppineiro | #2985
- @eminyouskn | #2873, #2887
- @ghackebeil | #2888
- @govindchari | #2869, #2872, #2901, #2902, #2903, #2906, #2938, #2963, #3028, #3042, #3069, #3073
- @jonathanberthias | #3043
- @kjgoodrick | #2880
- @langestefan | #2886, #2908, #2914
- @maxschaller | #3019
- @mbataillou | #2940, #2945, #2948, #2957
- @MGPowerlytics | #3044
- @mlubin | #2892
- @NDevanathan | #2970
- @Ni2002ka | #2955, #2971, #2999, #3000
- @peterbarkley | #3071
- @polsinello | #3061
- @PTNobel | #2897, #2904, #2950, #2951, #2983, #3024, #3046, #3066, #3082, #3083, #3084, #3088
- @RyuGood0 | #2990
- @sfetzel | #2987
- @stephen-huan | #3021
- @SteveDiamond | #3005, #3010, #3012, #3015, #3016, #3017, #3020, #3027, #3031, #3032, #3033, #3034, #3040, #3048, #3049, #3050, #3051, #3052, #3053, #3055, #3062, #3063, #3065, #3075, #3077
- @thisisRMak | #2920, #2924, #2925
- @tmckayus | #2870, #2918, #2919, #2989
- @TobiaMarcucci | #3030
- @Transurgeon | #2801, #2857, #2862, #2864, #2878, #2882, #2899, #2960, #2974, #2988, #2993, #3013, #3038, #3076
- @tttapa | #2898
- @warwickmm | #2913
- @yasirroni | #3058