Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Weird ambiguity on 1.6 but not on 1.10 #100

Closed
gdalle opened this issue May 23, 2024 · 6 comments
Closed

Weird ambiguity on 1.6 but not on 1.10 #100

gdalle opened this issue May 23, 2024 · 6 comments

Comments

@gdalle
Copy link
Collaborator

gdalle commented May 23, 2024

From #83 testing (see the log):

MethodError: +(::SparseConnectivityTracer.Dual{HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}, ::SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}) is ambiguous. Candidates:
    +(x::Real, dy::D) where {P, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}} in SparseConnectivityTracer at /home/runner/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/src/overload_hessian.jl:132
    +(dx::D, y::Real) where {P, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}} in SparseConnectivityTracer at /home/runner/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/src/overload_hessian.jl:122
  Possible fix, define
    +(::Union{D, D, D, D}, ::Union{D, D, D, D}) where {P, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}, P, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}, D<:SparseConnectivityTracer.Dual{P, T}, D<:SparseConnectivityTracer.Dual{P, T}, T<:HessianTracer, D<:SparseConnectivityTracer.Dual{P, T}}
  Stacktrace:
    [1] add_sum(x::SparseConnectivityTracer.Dual{HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}, y::SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}})
      @ Base ./reduce.jl:27
    [2] _mapreduce(f::typeof(identity), op::typeof(Base.add_sum), #unused#::IndexLinear, A::Vector{SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}})
      @ Base ./reduce.jl:411
    [3] _mapreduce_dim
      @ ./reducedim.jl:318 [inlined]
    [4] #mapreduce#678
      @ ./reducedim.jl:310 [inlined]
    [5] mapreduce
      @ ./reducedim.jl:310 [inlined]
    [6] #_sum#688
      @ ./reducedim.jl:878 [inlined]
    [7] _sum
      @ ./reducedim.jl:878 [inlined]
    [8] #_sum#687
      @ ./reducedim.jl:877 [inlined]
    [9] _sum
      @ ./reducedim.jl:877 [inlined]
   [10] #sum#685
      @ ./reducedim.jl:873 [inlined]
   [11] sum
      @ ./reducedim.jl:873 [inlined]
   [12] (::var"#f#179"{ADNLPModel{Float64, Vector{Float64}, Vector{Int64}}})(x::Vector{SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}})
      @ Main ~/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/test/nlpmodels.jl:35
   [13] trace_function(#unused#::Type{SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}}, f::var"#f#179"{ADNLPModel{Float64, Vector{Float64}, Vector{Int64}}}, x::Vector{Float64})
      @ SparseConnectivityTracer ~/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/src/pattern.jl:32
   [14] local_hessian_pattern(f::Function, x::Vector{Float64}, ::Type{BitSet}, ::Type{Set{Tuple{Int64, Int64}}})
      @ SparseConnectivityTracer ~/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/src/pattern.jl:368
@adrhill
Copy link
Owner

adrhill commented May 23, 2024

Adding context: this happened on hs87 from OptimizationProblems.jl.

┌ Warning: Global Hessian sparsity failed
│   name = :hs87
│   typeof(e) = MissingPrimalError
└ @ Main ~/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/test/nlpmodels.jl:39
hs87: Error During Test at /home/runner/work/SparseConnectivityTracer.jl/SparseConnectivityTracer.jl/test/nlpmodels.jl:79

@adrhill
Copy link
Owner

adrhill commented May 23, 2024

If I had to take a wild guess, convert(eltype(x), Inf) does weird things on tracers and somehow put a HessianTracer in the primal?

@adrhill
Copy link
Owner

adrhill commented May 23, 2024

Here the primal type still looks good, being a Float64:

[2] _mapreduce(f::typeof(identity), op::typeof(Base.add_sum), #unused#::IndexLinear, A::Vector{SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}})

Here, something bad happened and the primal became a HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}:

[1] add_sum(x::SparseConnectivityTracer.Dual{HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}}, y::SparseConnectivityTracer.Dual{Float64, HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}})

@adrhill
Copy link
Owner

adrhill commented May 23, 2024

Here, something bad happened and the primal became a HessianTracer{BitSet, Set{Tuple{Int64, Int64}}}:

With #101, this should not be possible anymore, which should give us a more informative error. Could you rerun your test once #101 is merged?

@gdalle
Copy link
Collaborator Author

gdalle commented May 23, 2024

Sure

@gdalle
Copy link
Collaborator Author

gdalle commented May 24, 2024

It has disappeared from #83 in the latest run, closing

@gdalle gdalle closed this as completed May 24, 2024
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

No branches or pull requests

2 participants