pounce-linalg
Linear algebra primitives for POUNCE. Port of Ipopt's src/LinAlg/.
Internal crate. Like upstream, POUNCE uses an object-oriented vector / matrix layer over concrete dense and structured types, so the algorithm-side code can talk to compound iterates without knowing the underlying storage.
What's in it
- Traits —
Vector,Matrix,SymMatrix: the abstract surface every concrete type implements (IpVector.hpp,IpMatrix.hpp,IpSymMatrix.hpp). - Dense —
DenseVector,DenseGenMatrix,DenseSymMatrixwith companion*Spacefactories. - Compound —
CompoundVector,CompoundMatrix,CompoundSymMatrix: block-structured iterates, used heavily by the IPM (x, s, λ, ν, z_L, z_U live in a singleCompoundVector). - Structured —
DiagMatrix,ExpansionMatrix,IdentityMatrix,ZeroMatrix,SumMatrix,ScaledMatrix,TransposeMatrix,LowRankUpdateSymMatrix,MultiVectorMatrix. - Sparse triplets —
GenTMatrix,SymTMatrix(COO storage),TripletToCsrConverterfor handing matrices to sparse linear solvers. - BLAS-1 —
blas1module with hand-rolled inner loops; no system BLAS dependency.
Why an OO layer?
The IPM never instantiates a raw 𝐱 ∈ ℝⁿ — it operates on a compound
iterate with substructure that downstream operators (e.g. the augmented
KKT system, line-search expansion, scaling) need to know about. The
Vector / Matrix traits, with VectorCache / MatrixCache keyed on
the upstream Tag machinery (see pounce-common),
let strategies operate on iterates without touching storage details.
License
EPL-2.0.