JuliaSmoothOptimizers / ADNLPModels.jl

Other
29 stars 12 forks source link

Unit tests fail on QuadraticModels with ADNLPModels 0.8 #255

Open tmigot opened 4 days ago

tmigot commented 4 days ago
using LinearAlgebra, ADNLPModels, NLPModels, NLPModelsTest
nlp = BROWNDEN()
x = nlp.meta.x0
fx, gx, Hx = obj(nlp, x), grad(nlp, x), Symmetric(hess(nlp, x), :L)
ADNLPModel(
  s -> fx + dot(gx, s) + dot(s, Hx * s) / 2,
  zeros(nlp.meta.nvar),
  nlp.meta.lvar - x,
  nlp.meta.uvar - x,
)

and the error is

ERROR: MethodError: no method matching !(::SparseConnectivityTracer.HessianTracer{BitSet, Set{Tuple{Int64, Int64}}})

Closest candidates are:
  !(::Missing)
   @ Base missing.jl:101
  !(::Bool)
   @ Base bool.jl:35
  !(::ComposedFunction{typeof(!)})
   @ Base operators.jl:1099
  ...

Stacktrace:
  [1] !=(x::SparseConnectivityTracer.HessianTracer{BitSet, Set{…}}, y::SparseConnectivityTracer.HessianTracer{BitSet, Set{…}})
    @ Base .\operators.jl:276
  [2] _mul!(nzrang::typeof(SparseArrays.nzrangelo), diagop::typeof(identity), odiagop::typeof(transpose), C::Vector{…}, A::SparseArrays.SparseMatrixCSC{…}, B::Vector{…}, α::SparseConnectivityTracer.HessianTracer{…}, β::SparseConnectivityTracer.HessianTracer{…})
    @ SparseArrays \AppData\Local\Programs\julia-1.10.2\share\julia\stdlib\v1.10\SparseArrays\src\linalg.jl:881
  [3] spdensemul!(C::Vector{…}, tA::Char, tB::Char, A::SparseArrays.SparseMatrixCSC{…}, B::Vector{…}, _add::LinearAlgebra.MulAddMul{…})
    @ SparseArrays \AppData\Local\Programs\julia-1.10.2\share\julia\stdlib\v1.10\SparseArrays\src\linalg.jl:50
  [4] generic_matvecmul!
    @ \AppData\Local\Programs\julia-1.10.2\share\julia\stdlib\v1.10\SparseArrays\src\linalg.jl:35 [inlined]
  [5] mul!
    @ \AppData\Local\Programs\julia-1.10.2\share\julia\stdlib\v1.10\LinearAlgebra\src\matmul.jl:66 [inlined]
  [6] mul!
    @ \AppData\Local\Programs\julia-1.10.2\share\julia\stdlib\v1.10\LinearAlgebra\src\matmul.jl:237 [inlined]
  [7] *(A::Symmetric{Float64, SparseArrays.SparseMatrixCSC{…}}, x::Vector{SparseConnectivityTracer.HessianTracer{…}})
    @ LinearAlgebra \AppData\Local\Programs\julia-1.10.2\share\julia\stdlib\v1.10\LinearAlgebra\src\matmul.jl:57
  [8] (::var"#5#6")(s::Vector{SparseConnectivityTracer.HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}})   
    @ Main .\REPL[19]:2
  [9] (::ADNLPModels.var"#lagrangian#55"{…})(x::Vector{…})
    @ ADNLPModels \.julia\packages\ADNLPModels\ZWqLN\src\sparsity_pattern.jl:42
 [10] trace_function(::Type{…}, f::ADNLPModels.var"#lagrangian#55"{…}, x::Vector{…})
    @ SparseConnectivityTracer \.julia\packages\SparseConnectivityTracer\QlV0S\src\pattern.jl:32
 [11] hessian_pattern(f::Function, x::Vector{Float64}, ::Type{BitSet}, ::Type{Set{Tuple{Int64, Int64}}})   
    @ SparseConnectivityTracer \.julia\packages\SparseConnectivityTracer\QlV0S\src\pattern.jl:326
 [12] hessian_sparsity
    @ \.julia\packages\SparseConnectivityTracer\QlV0S\src\adtypes.jl:50 [inlined]
 [13] compute_hessian_sparsity(f::var"#5#6", nvar::Int64, c!::ADNLPModels.var"#2#3", ncon::Int64; detector::SparseConnectivityTracer.TracerSparsityDetector{…})
    @ ADNLPModels \.julia\packages\ADNLPModels\ZWqLN\src\sparsity_pattern.jl:51
 [14] ADNLPModels.SparseADHessian(nvar::Int64, f::Function, ncon::Int64, c!::ADNLPModels.var"#2#3"; x0::Vector{…}, coloring::SparseMatrixColorings.GreedyColoringAlgorithm{…}, detector::SparseConnectivityTracer.TracerSparsityDetector{…}, kwargs::@Kwargs{})
    @ ADNLPModels \.julia\packages\ADNLPModels\ZWqLN\src\sparse_hessian.jl:28
 [15] macro expansion
    @ \.julia\packages\ADNLPModels\ZWqLN\src\ad.jl:90 [inlined]
 [16] macro expansion
    @ .\timing.jl:395 [inlined]
 [17] ADNLPModels.ADModelBackend(nvar::Int64, f::var"#5#6"; backend::Symbol, matrix_free::Bool, show_time::Bool, gradient_backend::Type, hprod_backend::Type, hessian_backend::Type, kwargs::@Kwargs{…})
    @ ADNLPModels \.julia\packages\ADNLPModels\ZWqLN\src\ad.jl:86
 [18] ADNLPModel(f::Function, x0::Vector{…}, lvar::Vector{…}, uvar::Vector{…}; name::String, minimize::Bool, kwargs::@Kwargs{})
    @ ADNLPModels \.julia\packages\ADNLPModels\ZWqLN\src\nlp.jl:146
 [19] ADNLPModel(f::Function, x0::Vector{Float64}, lvar::Vector{Float64}, uvar::Vector{Float64})
    @ ADNLPModels \.julia\packages\ADNLPModels\ZWqLN\src\nlp.jl:133
amontoison commented 4 days ago

I will add QuadraticModels.jl in the breakage tests of ADNLPModels.jl. Update: We already have it here :thinking: