pub fn split_bound_multipliers(
nlp: &Rc<RefCell<dyn IpoptNlp>>,
lambda_x: &[Number],
) -> (Vec<Number>, Vec<Number>)Expand description
Inverse of pack_bound_multipliers: split a packed per-variable λ_x
back into the IPM’s compressed (z_l, z_u).
The split is by sign — positive mass to the lower bound, negative to the
upper — which is the only choice consistent with the sign restrictions
z_l ≥ 0, z_u ≥ 0 and with complementarity: away from a degenerate
fixed variable at most one of the two can be nonzero, so the packing loses
nothing to recover. A variable fixed by equal bounds is the one case
where λ_x genuinely does not determine the pair; sign choice is the
established convention there and the two are interchangeable in every
downstream identity, since only their difference is ever used.
Mass that lands on a variable with no bound on the corresponding side has nowhere to go and is dropped — that can only happen if a caller hands in a multiplier violating the sign restrictions, and silently keeping it would corrupt the stationarity residual the user is shown.