sip_qp

July 17, 2026 ยท View on GitHub

pip wheels

sip_qp is a quadratic-programming front-end to SIP. It equilibrates affine QPs, applies QP-oriented solver defaults, and uses SIP-QDLDL for sparse Newton-KKT solves.

Both dynamically allocated and caller-provided workspaces are supported. The solve path performs no dynamic memory allocation when Workspace::mem_assign is used; this property is covered by an allocation-guarded test.

The C++ API represents

minimize  objective_constant + q' x + 0.5 x' P x
subject to A x + equality_offsets = 0
           G x + inequality_offsets <= 0
           lower_bounds <= x <= upper_bounds.

P is supplied by its upper triangle. Constraint Jacobians are supplied transposed, as expected by SIP-QDLDL. Bound arrays are always present; infinite entries represent missing sides.

Input requires an inverse KKT permutation and its symbolic factor capacity. Callers may provide both directly. analyze_kkt_ordering validates a caller-defined inverse permutation and computes its factor capacity. Ordering policy remains entirely outside this library.

The sip_qp_python package exposes the same implementation through Solver and solve_qp. Python callers must pass kkt_inverse_permutation. Variable bounds remain native SIP bounds and are reported separately through Result.z_box.