Skip to content

Keep the JET solver-path QA checks live on Julia 1.13 - #373

Merged
ChrisRackauckas merged 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:devin/jet-opt-113
Sep 13, 2026
Merged

ChrisRackauckas merged 2 commits into
SciML:masterfrom
ChrisRackauckas-Claude:devin/jet-opt-113

Conversation

@ChrisRackauckas-Claude

@ChrisRackauckas-Claude ChrisRackauckas-Claude commented Sep 12, 2026 •

Copy link
Copy Markdown
Member

Summary

The JET opt-mode solver paths testset in test/qa/qa.jl fails on Julia 1.13 for HCubatureJL (expects 0 reports, gets 7) and VEGAS (expects ≤2, gets more). Investigation shows this is a JET-on-1.13 analyzer bug, not an Integrals defect:

This PR keeps the checks live on every Julia version instead of marking them broken:

  • On Julia < 1.13: unchanged — the @report_opt bounds (0 reports for HCubatureJL, ≤2 for VEGAS) still run.
  • On Julia ≥ 1.13 (including prereleases, via VERSION < v"1.13.0-"): the same solver calls are checked with @report_call — JET's call analyzer over unoptimized IR, which is unaffected by the optimized-IR issue and catches method errors / undefined-variable defects through the whole path — plus a native-inference assertion that solve infers to SciMLBase.IntegralSolution{Float64}.

The four opt-mode testsets that still pass on 1.13 (QuadGKJL, SampledIntegralProblem ×2, scalar infinite bounds) are left strict on all versions.

Alternatives considered

  • broken = VERSION >= v"1.13": silences the only coverage on these paths for every 1.13.x release — a real method error or inference regression would go unnoticed until JET is fixed upstream. Rejected in favor of live checks.
  • Hard version-gate with no replacement: same hole, plus no signal when upstream JET recovers.
  • Rewriting substitute_u/substitute_v to dodge JET's widening: JET then reports deeper artifacts (it widens HCubature's integration point to Union{BitVector, Vector}, making the transformed-integrand closure Any internally). Not bounded or fixable package-side.

Test plan

  • JET opt-mode solver paths testset on Julia 1.13.0 + JET 0.11.6: 8/8 pass on the new branch (@report_call clean, return-type assertions hold)
  • Same testset on Julia 1.12.7 + JET 0.11.6: 6/6 pass on the JET opt-mode branch (unchanged behavior)
  • Base.code_typed on solve(prob, HCubatureJL()) is identical on 1.12.7 and 1.13.0 — the Union{Vector{Float64}, Vector{Int64}, Vector{Real}} JET reports is absent from Base IR
  • runic clean on test/qa/qa.jl
  • CI QA group

🤖 Generated with Devin (model: SWE-2 Max)
Session: local transcript — /home/crackauc/.local/share/devin/cli/summaries/history_049e4e367a5d4d70.md (no shareable URL for this harness)

On Julia 1.13, JET's opt-mode analyzer misinterprets the optimized IR
and reports runtime dispatch on code whose native inference is fully
concrete (verified via `Base.return_types` on `init`, `solve`, and the
`transformation_if_inf`/`substitute_u`/`remake` frames on both 1.12 and
1.13). JET 0.11.6 emits the false-positive RuntimeDispatchReports seen
in the QA job; JET 0.12+ crashes outright on `Base.BottomRF` nodes in
the same analysis (aviatesk/JET.jl#863).

Marking `broken = VERSION >= v"1.13"` keeps the assertions running and
reporting on 1.13 — an expected-broken that flips to unexpected-pass
once a fixed JET release lands — instead of silently dropping the
checks. The four opt-mode testsets that still pass on 1.13 remain
strict.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Devin <noreply@cognition.ai>
Agent-Harness: Devin CLI
Agent-Model: SWE-2 Max
Agent-Session: /home/crackauc/.local/share/devin/cli/summaries/history_d0e0e74010b34bc5.md
@ChrisRackauckas-Claude

Copy link
Copy Markdown
Member Author

CI note: the Build and Deploy Documentation failure (missing_docs for the parametric CommonSolve.init docstring) is pre-existing on master — the last several master docs builds fail identically — and is fixed by #372, whose docs job is green. The typos failure was a flagged word in this PR's comments and has been fixed.

Replace the `broken = VERSION >= v"1.13"` assertions with per-version
checks: the JET opt-mode bounds still run unchanged on Julia < 1.13,
while on 1.13+ the same solver paths are checked with JET's call
analyzer (unoptimized-IR method errors, unaffected by the 1.13 IR
change) plus a native `Base.return_types` assertion that the solve
inferred to `IntegralSolution{Float64}`.

Verified locally: the JET opt-mode testset passes 8/8 on Julia 1.13.0
and 6/6 on Julia 1.12.7.

Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
Co-Authored-By: Devin <noreply@cognition.ai>
Agent-Harness: Devin CLI
Agent-Model: SWE-2 Max
Agent-Session: /home/crackauc/.local/share/devin/cli/summaries/history_049e4e367a5d4d70.md
@ChrisRackauckas-Claude ChrisRackauckas-Claude changed the title QA: mark JET opt-mode bounds expected-broken on Julia 1.13 Keep the JET solver-path QA checks live on Julia 1.13 Sep 12, 2026
@ChrisRackauckas
ChrisRackauckas merged commit 01dc4d5 into SciML:master Sep 13, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants