Skip to main content

Module schur_data

Module schur_data 

Source
Expand description

SchurData trait surface and the IndexSchurData flavor.

Direct port of upstream SensSchurData.hpp (interface) and SensIndexSchurData.{hpp,cpp} (the index-only specialization).

§What SchurData represents

SchurData is the matrix B in the augmented system

⎡ K   A ⎤
⎣ B   0 ⎦

used by the sIPOPT step calculation (Pirnay, López-Negrete & Biegler 2012, §2, eq. 4). K is the converged KKT matrix from the original IPM solve; A and B carry the parameter-perturbation rows. The trait is the minimum surface every backend needs to expose so the PCalculator / SchurDriver family can stay matrix-shape-agnostic (SensSchurData.hpp:17-25).

§IndexSchurData

Specialization for parameter rows whose only non-zero entries are ±1 (SensIndexSchurData.hpp:15-19). Most parametric / reduced-Hessian use cases fit this shape — the parameter just picks out a subset of primal/dual variables — so the ±1 sparsification is what production sIPOPT runs on. Pounce’s port stores parallel Vec<i32> arrays of indices and signs, same as upstream’s idx_ / val_ (SensIndexSchurData.hpp:127-128).

Structs§

IndexSchurData
Specialization for B matrices whose non-zero entries are ±1 (the parametric / reduced-Hessian common case). Storage is two parallel arrays mirroring upstream’s idx_ and val_ (SensIndexSchurData.hpp:127-128).

Enums§

SchurDataError
Failure modes returned by SchurData read/write entry points. Pounce returns these as Err(_) where upstream’s debug asserts would DBG_ASSERT.

Traits§

SchurData
Minimum surface for any matrix that lives in the augmented sIPOPT system’s A / B slots. The numerical drivers in this crate (PCalculator, SchurDriver, SensStepCalc) consume SchurData objects and never touch the storage shape directly.