Area: Python routing facade (designed, not built)
State. dev-notes/lp-qp-routing.md specifies a ProblemClass-driven router,
and crates/pounce-cli/src/dispatch.rs already classifies/routes on the CLI
(solver_selection=auto). But the Python surface exposes parallel, hand-picked
entry points -- minimize, solve_qp, solve_socp, sos_minimize,
minimize_global -- with no unifying dispatch.
Debt.
- Python callers must know solver theory to choose; the CLI can auto-route from a
parsed .nl, Python cannot.
- Two divergent dispatch stories (CLI classifier vs. Python explicit) will drift.
minimize deliberately cannot route (opaque callable), so a router can't just
hide behind it -- it needs structured input. That design question is unresolved.
Recommendation. Decide explicitly: (a) build a Python router taking structured
problems and dispatching by ProblemClass (mirroring dispatch.rs), or (b)
commit to explicit entry points and make "Choosing a Solver" the documented front
door. Track this as the designed-but-unbuilt piece it is.
See dev-notes/multi-solver-tech-debt.md (area 2).
Area: Python routing facade (designed, not built)
State.
dev-notes/lp-qp-routing.mdspecifies aProblemClass-driven router,and
crates/pounce-cli/src/dispatch.rsalready classifies/routes on the CLI(
solver_selection=auto). But the Python surface exposes parallel, hand-pickedentry points --
minimize,solve_qp,solve_socp,sos_minimize,minimize_global-- with no unifying dispatch.Debt.
parsed
.nl, Python cannot.minimizedeliberately cannot route (opaque callable), so a router can't justhide behind it -- it needs structured input. That design question is unresolved.
Recommendation. Decide explicitly: (a) build a Python router taking structured
problems and dispatching by
ProblemClass(mirroringdispatch.rs), or (b)commit to explicit entry points and make "Choosing a Solver" the documented front
door. Track this as the designed-but-unbuilt piece it is.
See
dev-notes/multi-solver-tech-debt.md(area 2).