Skip to content

Use MOI.Nonlinear.ModelWithQuad instead of QPBlockData - #549

Merged
blegat merged 7 commits into
bl/qp_block_datafrom
bl/model_with_quad
Aug 21, 2026
Merged

Use MOI.Nonlinear.ModelWithQuad instead of QPBlockData#549
blegat merged 7 commits into
bl/qp_block_datafrom
bl/model_with_quad

Conversation

@blegat

@blegat blegat commented Aug 15, 2026

Copy link
Copy Markdown
Member

blegat added 2 commits August 15, 2026 14:21
Store the affine and quadratic objective and constraints in a
MOI.Nonlinear.ModelWithQuad whose inner model is the nonlinear model
(nlp_model now aliases quad_data.inner), and evaluate everything through a
MOI.Nonlinear.EvaluatorWithQuad built in _setup_model. The evaluator owns
the QP block entry counts, so the qp_nnzj/qp_nnzh fields are removed. The
inner evaluator is a new _OracleNLPEvaluator that stacks the
VectorNonlinearOracle rows before the NLPBlock rows; it extends the private
MOI.Nonlinear._constraint_bounds so that the constraint bounds of the whole
stack are assembled by the evaluator.
@codecov

codecov Bot commented Aug 15, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 97.01493% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 99.55%. Comparing base (dfc5efb) to head (c093b00).

Files with missing lines Patch % Lines
ext/IpoptMathOptInterfaceExt/MOI_wrapper.jl 97.01% 4 Missing ⚠️
Additional details and impacted files
@@                 Coverage Diff                  @@
##           bl/qp_block_data     #549      +/-   ##
====================================================
- Coverage            100.00%   99.55%   -0.45%     
====================================================
  Files                     4        4              
  Lines                   948      899      -49     
====================================================
- Hits                    948      895      -53     
- Misses                    0        4       +4     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

blegat added 5 commits August 15, 2026 15:26
MOI.Nonlinear.ModelWithQuad no longer implements MOI.set for the objective;
Nonlinear.set_objective is the single way to set it.
MOI.Nonlinear.ModelWithQuad now owns the variables (with indices guaranteed
to be 1:n) and the parameters of the model, so the variables, parameters,
quad_data and nlp_model fields collapse into a single model field that most
of the MOI API forwards to. The parameter convention is back to the simple
_PARAMETER_OFFSET test, now defined in MOI.Nonlinear, and the parameter
values are stored once, in the inner nonlinear model, aliased by the QP
block: the per-solve parameter sync is gone. A uses_nlp_block flag replaces
the nlp_model !== nothing test to tell the legacy MOI.NLPBlock API apart,
because optimize! overwrites nlp_data; the NLPBlock is rebuilt on every
setup unless that flag is set, so that a stale objective cannot survive an
objective switch.
Defining the term methods on a local alias of the function pirated it; the
term methods are in MOI.Nonlinear now.
Comment thread .github/workflows/ci.yml
using Pkg
Pkg.add([
PackageSpec(name="MathOptInterface", rev="bl/qp_block_data"),
PackageSpec(name="MathOptInterface", rev="bl/model_with_quad"),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use [sources] in Project.toml instead

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't work on Julia v1.10

@blegat
blegat marked this pull request as ready for review August 21, 2026 05:17
@blegat
blegat merged commit 019732d into bl/qp_block_data Aug 21, 2026
12 of 34 checks passed
@blegat
blegat deleted the bl/model_with_quad branch August 21, 2026 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants