Skip to content

Commit b6b3091

Browse files
Fix ambiguity in __solve with polyalgorithm due to dispatch on Val{N}
Noticed downstream ``` Candidates: kwcall(::NamedTuple, ::typeof(SciMLBase.__solve), prob::SciMLBase.AbstractNonlinearProblem, alg::NonlinearSolveBase.NonlinearSolvePolyAlgorithm{Val{N}}, args...) where N @ NonlinearSolveBase ~/.julia/packages/NonlinearSolveBase/54f3T/src/solve.jl:106 kwcall(::NamedTuple, ::typeof(SciMLBase.__solve), prob::Union{SciMLBase.NonlinearLeastSquaresProblem{<:Union{Number, var"#s15"} where var"#s15"<:AbstractArray, iip, <:Union{var"#s14", var"#s13"} where {var"#s14"<:ForwardDiff.Dual{T, V, P}, var"#s13"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}} where {iip, T, V, P}, SciMLBase.NonlinearProblem{<:Union{Number, var"#s15"} where var"#s15"<:AbstractArray, iip, <:Union{var"#s14", var"#s13"} where {var"#s14"<:ForwardDiff.Dual{T, V, P}, var"#s13"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}} where {iip, T, V, P}}, alg::NonlinearSolveBase.AbstractNonlinearSolveAlgorithm, args...) @ NonlinearSolve ~/.julia/packages/NonlinearSolve/LuVnf/src/forward_diff.jl:14 kwcall(::NamedTuple, ::typeof(SciMLBase.__solve), prob::Union{SciMLBase.NonlinearLeastSquaresProblem{<:Union{Number, var"#s15"} where var"#s15"<:AbstractArray, iip, <:Union{var"#s14", var"#s13"} where {var"#s14"<:ForwardDiff.Dual{T, V, P}, var"#s13"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}} where {iip, T, V, P}, SciMLBase.NonlinearProblem{<:Union{Number, var"#s15"} where var"#s15"<:AbstractArray, iip, <:Union{var"#s14", var"#s13"} where {var"#s14"<:ForwardDiff.Dual{T, V, P}, var"#s13"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}} where {iip, T, V, P}}, alg::NonlinearSolveBase.NonlinearSolvePolyAlgorithm, args...) @ NonlinearSolve ~/.julia/packages/NonlinearSolve/LuVnf/src/forward_diff.jl:14 Possible fix, define kwcall(::NamedTuple, ::typeof(SciMLBase.__solve), ::Union{SciMLBase.NonlinearLeastSquaresProblem{<:Union{Number, var"#s15"} where var"#s15"<:AbstractArray, iip, <:Union{var"#s14", var"#s13"} where {var"#s14"<:ForwardDiff.Dual{T, V, P}, var"#s13"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}} where {iip, T, V, P}, SciMLBase.NonlinearProblem{<:Union{Number, var"#s15"} where var"#s15"<:AbstractArray, iip, <:Union{var"#s14", var"#s13"} where {var"#s14"<:ForwardDiff.Dual{T, V, P}, var"#s13"<:(AbstractArray{<:ForwardDiff.Dual{T, V, P}})}} where {iip, T, V, P}}, ::NonlinearSolveBase.NonlinearSolvePolyAlgorithm{Val{N}}, ::Vararg{Any}) where N ``` https://github.com/SciML/OrdinaryDiffEq.jl/actions/runs/11786040241/job/32828542508?pr=2522 The issue is that the polyalgorithm code is dispatching on more details of the polyalgorithm than https://github.com/SciML/NonlinearSolve.jl/blob/master/src/forward_diff.jl#L13-L25 which leads to an ambiguity. But it only needs that information since it's a generated function. The easy fix is to just make the generated function be one step lower.
1 parent cbe4354 commit b6b3091

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

lib/NonlinearSolveBase/src/solve.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,12 @@ end
103103
return Expr(:block, calls...)
104104
end
105105

106-
@generated function SciMLBase.__solve(
106+
function SciMLBase.__solve(prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm,
107+
args...; kwargs...)
108+
SciMLBase.__generated_polysolve(prob, alg, args...; kwargs...)
109+
end
110+
111+
@generated function SciMLBase.__generated_polysolve(
107112
prob::AbstractNonlinearProblem, alg::NonlinearSolvePolyAlgorithm{Val{N}}, args...;
108113
stats = NLStats(0, 0, 0, 0, 0), alias_u0 = false, verbose = true, kwargs...
109114
) where {N}

0 commit comments

Comments
 (0)