Comments (4)
Thank you for bringing this up 👍 I hadn't realized how compiling quadprog was a problem for some users.
I hope the quadprog maintainers can find some time to review quadprog/quadprog#31, as they seem open to the idea of distributing wheels.
In the meantime, no problem to guide users from qpsolvers' side as well:
Would it be possible for qpsolvers to provide the ability to (optionally?) install quadprog-wheel instead of quadprog?
Sure, we can add:
[project.optional-dependencies]
quadprog_wheel = [
"quadprog-wheel >=0.1.11",
]
Then users could install qpsolvers and quadprog-wheel at once by pip3 install "qpsolvers[quadprog_wheel]"
.
But then...
I guess the main issue lies with the default dependencies, which have been so far:
[project]
dependencies = [
"quadprog >=0.1.8",
"scipy >=1.2.0",
]
The goal was to have qpsolvers come "batteries included" with at least one solver, so that newcomers can call solve_qp
without wondering what solver to use at first. Now this choice bites back as a change of default solver is a breaking change.
Enumerating out loud the options I see from there:
- Switch the default solver to osqp or scs, which come with pre-compiled wheels
- Pro: easier behavior for new users
- Con: silently changes performance (potentially drastically) of existing code
- Have no default solver
- Pro: no ambiguity as to what solver is used
- Con: API-breaking change (would take us to qpsolvers 2.0.0)
- Con: one more step for beginners
- Keep the
solver="quadprog"
default, switch default dependency to quadprog-wheel:- Pro: non-breaking change for qpsolvers
- Con: potential confusion arising from the two PyPI packages, hopefully the split is resolved with the quadprog project getting pre-compiled wheels (separate from this issue, I'll also loop in there)
Chime in if you see others options!
I feel option 2 (no default solver, change API) is the best one, as we can guide both beginners and existing users through the change with a proper exception message.
from qpsolvers.
For my PR to the quadprog project, I have no hope anymore after having pinged them so many times since last year ... to no avail.
Unfortunately it seems to me that if quadprog
remains a mandatory dependency, its package will fail to be built even though the optional quadprog-wheel
is asked for.
from qpsolvers.
I've prepared #63, @AntoineD would you agree to review it so that it gets a second pair of 👀?
from qpsolvers.
Awesome! I'll look at it by the end of the week.
from qpsolvers.
Related Issues (20)
- MOSEK is unsusable due to the amount of debug traces HOT 9
- Adding MOSEK to supported solvers
- MOSEK does not to solve LS problem (n=15_000) from the CI HOT 5
- what is the model_predictive_control module in benchmark_model_predictive_control.py? HOT 1
- Condition number of a Problem HOT 4
- qpsolvers.available_solvers HOT 2
- MOSEK regression in CI with version 10.1.8 HOT 2
- Unit tests for the condition number of a problem
- Quadratic Equality Constraint? HOT 1
- Checking the speed of algorithms HOT 1
- Suggested solvers: CPLEX, Octeract, SHOT, APOPT and BPOPT
- How to make qpsolvers detect MOSEK HOT 1
- Clarabel missing from docs HOT 1
- Incorrect "Note" section regarding symmetric R in least squares doc
- Least squares example in docs do not match the claimed result HOT 2
- osqp unit test fails sometimes HOT 1
- Installation error on a Macbook with Homebrew HOT 1
- Add QP solvers using JAX HOT 1
- Installation error on Apple Silicon macOS HOT 5
- MOSEK license for continuous integration has expired HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from qpsolvers.