CVXPY 1.9
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.9 with bugfixes while developing the 1.10 release. CVXPY 1.8 and older are no longer supported.
Disciplined Nonlinear Programming (DNLP)
This release introduces Disciplined Nonlinear Programming (DNLP), a ruleset that extends CVXPY beyond convex optimization to a broad class of nonlinear problems. DNLP canonicalizes nonsmooth functions in the same way as DCP, but allows for general smooth functions to be used otherwise.
To use DNLP, pass nlp=True to problem.solve(...). Supported NLP solvers include IPOPT, KNITRO, UNO, and COPT. See the DNLP tutorial for more details and examples.
Variable bounds
Variable bounds can now be specified with expressions involving parameters, and also support sparse bound arrays (when the variable itself is sparse). Many solvers now natively use variable bounds when they are provided.
DPP for parametric quadratic objectives
quad_form(x, P) with a parametric PSD matrix P is now DPP-compliant on solvers that natively support quadratic objectives, allowing efficient re-solves when only P's value changes.
New features
- New solver interface: PDCS
- New tutorial: Performance tips
- New page: Solver benchmarks
a ** xnow works for positive constanta(canonicalized viaexp(x * log(a)))axisargument support forsum_largestandsum_smallest- N-D and tuple-
axissupport generalized acrossAxisAtomcanonicalizers (max,norm_inf,log_sum_exp,cummax, ...) - Support for zero-sized expressions
Parametervalues may now be±inf- Sparse Cholesky now uses QDLDL
Summary
This new release totaled 124 PRs from 25 contributors.
- @armorbreak001 | #3289
- @curious7-web | #3176, #3186, #3225, #3277, #3324
- @dependabot[bot] | #3081, #3211, #3231, #3271, #3322
- @dhru189 | #3204, #3266
- @eminyouskn | #3094
- @govindchari | #3219, #3296
- @goyalpalak18 | #3150, #3159, #3162, #3164, #3165, #3167, #3169, #3174, #3196, #3214, #3220, #3246, #3247, #3252, #3263, #3279
- @Iroy30 | #3148
- @jberg5 | #3207
- @jgvabo | #3258
- @lukebrody | #3251
- @maxschaller | #3149, #3314, #3315, #3316, #3318, #3319, #3323
- @Nikitaa104 | #3192, #3193, #3194, #3222
- @PTNobel | #3079, #3080, #3085, #3086, #3087, #3089, #3090, #3091, #3097, #3099, #3103, #3105, #3106, #3113, #3114, #3115, #3116, #3119, #3125, #3126, #3127, #3129, #3136, #3142, #3146, #3147, #3154, #3158, #3163, #3166, #3172, #3173, #3177, #3178, #3179, #3180, #3215, #3223, #3243, #3249, #3250, #3264, #3265, #3267, #3268, #3290, #3297, #3298, #3299, #3313
- @raphaelsaavedra | #3302
- @rgsl888prabhu | #3295, #3300
- @sbarratt | #3111, #3112
- @smachen42 | #3197, #3228
- @SteveDiamond | #3093, #3098, #3139, #3141, #3143, #3161, #3209, #3232, #3254, #3326
- @swastim01 | #3133
- @Transurgeon | #3070, #3108, #3217, #3309
- @Vivaan-Atharva | #3210, #3269
- @warwickmm | #3327
- @YichengYang-Ethan | #3256
- @zhenweilin | #3104