Skip to content

NonlinearSolve downstream IntegrationTest intermittently fails in dynamic optimization on Julia 1.12 #4712

Description

@ChrisRackauckas-Claude

NonlinearSolve.jl master downstream IntegrationTest has repeated ModelingToolkit failures on Julia 1.12 in the Optimization/dynamic optimization path. This was first noticed while checking SciML/NonlinearSolve.jl#1012, but it also occurs on the immediately preceding NonlinearSolve master commit, so it does not appear to be caused by that PR.

CI evidence:

Representative failures from the pre-#1012 master run logs:

  • InfiniteInterpolations extension precompile/load error:
    • ArgumentError: Package Interpolations [a98d9a8b-a2ab-59e6-89dd-64a1c18fca59] is required but does not seem to be installed
    • source path: ~/.julia/packages/InfiniteOpt/aM7Wg/ext/InfiniteInterpolations.jl:5
    • seen in InterfaceI, InterfaceII, and Initialization logs while running the ModelingToolkit downstream job.
  • Dynamic optimization CasADi error:
    • TypeError: non-boolean (CasADi.MX) used in boolean context
    • stack includes Base.isequal(x::CasADi.MX, y::Int64), SymbolicUtils ... hashconsing.jl, WeakCacheSets ... WeakCacheSets.jl, and ModelingToolkitBase/src/systems/optimal_control_interface.jl:471 in add_cost_function!.
    • failing test locations varied by shard, e.g. lib/ModelingToolkitBase/test/optimization/dynamic_optimization.jl:434, :607.

Resolved versions in the failing CI logs included:

  • Julia 1.12.6
  • ModelingToolkit v11.31.0 from checkout, ModelingToolkitBase v1.51.0 from lib/ModelingToolkitBase
  • SymbolicUtils v4.38.1
  • WeakCacheSets v0.1.0
  • CasADi v1.2.0
  • InfiniteOpt v0.6.3
  • DataInterpolations v8.10.0
  • Interpolations v0.16.3 was installed/precompiled earlier in the job, but the InfiniteOpt extension later reported it as missing.

Local reproduction attempt that did not reproduce:

# separate clean checkout, NonlinearSolve pre-#1012 master commit 978a718a
# ModelingToolkit checkout at 3239ad1184c38d26e62ce8f0e80b1c623e22574d
env JULIA_DEPOT_PATH=/home/crackauc/sandbox/tmp_20260708_073226_7642/julia-depot-repro \
    JULIA_PKG_SERVER_REGISTRY_PREFERENCE=eager \
    GROUP=Optimization \
    timeout 3600 \
    /home/crackauc/.julia/juliaup/julia-1.12.6+0.x64.linux.gnu/bin/julia \
    --color=yes --project=downstream \
    -e 'using Pkg; Pkg.develop(PackageSpec(path=".")); Pkg.update(); Pkg.test(coverage=false)'

Local result:

Test Summary: | Pass Broken Total Time
Optimization  | 156      1   157 19m31.8s
Testing ModelingToolkit tests passed

So this may be CI-environment/order/cache sensitive rather than a straightforward deterministic failure from the NonlinearSolve source tree. A plain NonlinearSolve commit bisect is not valid because the same NonlinearSolve commit can resolve/run against changing downstream package state, and the targeted local reproduction did not fail even with the versions listed above.

What would help next:

  • Check whether the downstream CI job is running a different group/order than GROUP=Optimization despite the dynamic optimization failure appearing under InterfaceI/InterfaceII labels.
  • Capture or preserve the exact temp test environment manifest from a failing CI job.
  • Investigate why InfiniteOpt's InfiniteInterpolations extension can be requested when Interpolations is not visible in the active environment.
  • Investigate whether SymbolicUtils/hashconsing should guard isequal on CasADi.MX values whose equality returns a symbolic MX rather than Bool.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    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