Skip to content

QA: Aqua/JET findings marked @test_broken pending fix #187

Description

@ChrisRackauckas-Claude

The QA test group (test/qa/qa.jl, run via GROUP=QA) was finalized as ubuntu-only and made green. Aqua and ExplicitImports pass fully. However, the JET static-analysis subtests surface genuine findings, which are now marked @test_broken so CI is green. They should be fixed and the @test_broken reverted to @test.

Status of QA checks (Julia 1.11, DiffEqBase 6.218.0, SciMLBase 2.155.1)

  • Individual Aqua checks (find_persistent_tasks_deps, test_ambiguities recursive=false, test_deps_compat, test_piracies, test_project_extras, test_stale_deps, test_unbound_args, test_undefined_exports): all pass (10/10).
  • ExplicitImports (check_no_implicit_imports, check_no_stale_explicit_imports): both pass (2/2).
  • JET static analysis: 1 of 3 passes; the two below fail and are now @test_broken.

JET findings (now @test_broken in test/qa/qa.jl)

1. LinearStateSpaceProblem DirectIteration (qa.jl:36) — 2 reports (expected 0)

JET.report_call(solve, (typeof(prob), typeof(DirectIteration()))) where prob = LinearStateSpaceProblem(A, B, u0, tspan; noise):

no matching method found `get_concrete_noise(::LinearStateSpaceProblem{...}, ::Int64)`:
(DifferenceEquations.get_concrete_noise(prob, prob.noise::Nothing, B::Matrix{Float64}, 10)::Union{})

JET infers prob.noise::Nothing along a branch and the corresponding get_concrete_noise(prob, ::Nothing, ::Matrix{Float64}, ::Int64) dispatch has no matching method (result inferred as Union{}, i.e. provably erroring on that branch). The runtime test passes because the concrete value isn't Nothing here, but the inferred union makes the call non-total. Fix: add/clarify the get_concrete_noise method coverage (or tighten the field type) so the Nothing-noise branch is handled.

2. LinearStateSpaceProblem KalmanFilter (qa.jl:59) — 2 reports (expected 0)

JET.report_call(solve, (typeof(prob), typeof(KalmanFilter()))):

no matching method found `get_observable(::Matrix{Float64}, ::Int64)`:
obs_t = DifferenceEquations.get_observable(prob.observables::Matrix{Float64}, t::Int64)

get_observable has no method for (::Matrix{Float64}, ::Int64). Fix: add the missing get_observable(::AbstractMatrix, ::Integer) method (or adjust the observable-access path so the matrix case dispatches correctly).

3. LinearStateSpaceProblem with C, no noise (qa.jl:71)

Passes (0 reports).

Reproduction

GROUP=QA julia +1.11 --project=. -e 'using Pkg; Pkg.test()'

These two are marked @test_broken length(JET.get_reports(rep)) == 0 (not skipped/deleted) so CI is green and the findings stay visible until fixed. When fixed, revert the @test_broken lines in test/qa/qa.jl back to @test.

Ignore until reviewed by @ChrisRackauckas.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions