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.8 through 3.12, and is our first release that supports Python 3.12. While working on the next release, we continue to officially support CVXPY 1.3 and 1.4.
New features
- New atom: `convolve`
- New atom: `mean`
- New atom: `outer`
- New atom: `ptp`
- New atom: `std`
- New atom: `var`
- New atom: `vec_to_upper_tri`
- Adds methods to CVXPY expressions that are found on NumPy ndarrays such as `.sum()`, `.max()`, and `.mean()`
- New solver interface: `PIQP`
- Adds SDP support to the Clarabel interface
- Added support for OR-Tools 9.7
- Removed support for OR-Tools 9.4
- `PowerConeND` now supports extracting its dual variables
- `reshape` now supports using `-1` as a dimension, with the same meaning it has in NumPy
- Indexing CVXPY expressions with floats now raises an appropriate error
- Clearer error messages for a number of common errors
- The `perspective` atom now supports `s=0`
- Performance improvements in the SCIPY backend
- Performance improvements in canonicalizing parameterized QPs
- Performance improvements for quadratic forms with sparse matrices
- Greater support for static typing
ECOS deprecation
CVXPY has used ECOS as the default solver for many years; however, it has known issues with performance and numerical stability in edge cases. Recently, a new solver, Clarabel, that improves the algorithm and implementation of ECOS has been under development.
In 1.5, CVXPY plans to start using Clarabel instead of ECOS by default for some categories of problems. In 1.6, we plan to no longer install ECOS as a CVXPY dependency. We have no plans to remove support for calling ECOS as a solver. As part of this transition, in 1.4 CVXPY will raise a warning whenever ECOS is called by default. We encourage you to try and use Clarabel instead, but if you're dependent on ECOS's exact behavior please explicitly specify it as a solver.
`conv` deprecation
The CVXPY atom `conv` is inconsistent with NumPy's `convolve` functions. We are deprecating it, but have no plans to remove it in the short term. We encourage all users to use the CVXPY atom `convolve` instead.
`NonPos` deprecation
The `NonPos` cone uses the opposite dual variable sign convention as the rest of the CVXPY cones and a constraint of `NonPos(expr)` is the same as a constraint on `NonNeg(-expr)`. We are deprecating `NonPos`, but have no plans to remove it in the short term. We encourage users to switch to using `NonNeg`.
Contributors
This release would not have been possible without the contributions of many CVXPY users and developers. Across 29 contributors and 116 PRs, we would like to thank the following people for their contributions to this release (in alphabetical order):
- akshayka | 2105
- allenlawrence94 | 2080, 2103
- alxhslm | 2046
- aryamanjeendgar | 2171, 2192, 2204, 2241
- aszekMosek | 2017, 2029
- bkurtz | 1821
- carlosgmartin | 2246, 2250
- cbonet | 2173, 2175
- dcajasn | 2131, 2152
- goulart-paul | 2108
- h-vetinari | 1998
- jlchen0 | 2028
- michaels0m | 2085
- mkoeppe | 2118
- mlubin | 2169, 2251
- Paulnkk | 2069, 2073, 2078, 2084, 2086, 2096, 2117, 2119, 2137, 2144, 2179
- phschiele | 2008, 2009, 2049, 2053, 2054, 2061, 2063, 2088, 2094, 2113, 2120, 2127, 2141, 2146, 2156, 2161, 2164, 2185, 2196, 2206, 2219, 2220, 2221, 2245, 2247, 2249, 2253
- pragmaticTNT | 2057
- PTNobel | 2058, 2081, 2172, 2188, 2207, 2238, 2248, 2254, 2255
- r-barnes | 1697
- rileyjmurray | 2001, 2123, 2125, 2139, 2155
- RSchwan | 2190
- samuel-adekunle | 2016
- sdementen | 2056
- SteveDiamond | 2007, 2022, 2041, 2043, 2047, 2060, 2067, 2071, 2079, 2110, 2111, 2126, 2130, 2159, 2160, 2183, 2225, 2226, 2232, 2233, 2244
- Transurgeon | 2044, 2091, 2186, 2213, 2215, 2223, 2224, 2230, 2239
- usamamuneeb | 2097, 2116, 2147
- wfan19 | 2157
- wujianjack | 2134
Special shoutout to our Google Summer of Code interns aryamanjeendgar and Transurgeon!