Commit fbb9674
Rewrite linear constraint consolidation on numpy
Shape-preserving rewrite of the pandas based linear consolidation machinery:
- _consolidate_linear_constraints now works on a dense numpy weight matrix and
three aligned rhs arrays instead of weights/rhs DataFrames. Every pandas
helper has a 1:1 numpy replacement with identical semantics, including
first-occurrence order of deduplicated rows (the internal parametrization
depends on row order), lower/upper bound swaps under negative rescaling
factors, and grouping of rows that only differ in the sign of a zero.
- The right_hand_side DataFrame in the consolidated linear constraints is
replaced by the frozen LinearRightHandSide dataclass.
- _process_linear_weights is deleted: weights are aligned ndarrays since the
typed resolution stage, so the pd.Series wrapping had no remaining purpose.
- Linear constraints no longer get their index rewritten in
_plug_equality_constraints_into_selectors. The rewritten index was unused in
the pandas implementation (weights carried their own positions) but would
have corrupted the numpy weight scatter. Caught by the characterization
harness.
A differential test runs the rewrite against a verbatim copy of the pandas
implementation on 200 randomized scenarios (overlapping bundles, fixes,
equalities, bounds, negative and duplicate weights, conflicting fixed values)
and asserts numerically identical outputs and error parity. It is deleted at
the end of the refactoring.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>1 parent b1b0a75 commit fbb9674
3 files changed
Lines changed: 682 additions & 207 deletions
File tree
- src/optimagic/parameters
- tests/optimagic/parameters
0 commit comments