ERROR: MethodError: Cannot `convert` an object of type
MooncakeFunctionWrappersExt.FunctionWrapperTangent{Core.OpaqueClosure{Tuple{Mooncake.CoDual{Array{Complex{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag,Complex{Float64}},Complex{Float64},1}},1},Array{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}},Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}}}}},1}},Mooncake.CoDual{Array{Complex{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag,Complex{Float64}},Complex{Float64},1}},1},Array{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}},Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}}}}},1}},Mooncake.CoDual{Array{Complex{Float64},1},Array{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},1}},Mooncake.CoDual{Float64,Mooncake.NoFData}},Union{}}} to an object of type
MooncakeFunctionWrappersExt.FunctionWrapperTangent{Core.OpaqueClosure{Tuple{Mooncake.CoDual{Array{Complex{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag,Complex{Float64}},Complex{Float64},1}},1},Array{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}},Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}}}}},1}},Mooncake.CoDual{Array{Complex{ForwardDiff.Dual{ForwardDiff.Tag{DiffEqBase.OrdinaryDiffEqTag,Complex{Float64}},Complex{Float64},1}},1},Array{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}},Mooncake.Tangent{NamedTuple{(:value, :partials),Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},Mooncake.Tangent{NamedTuple{(:values,),Tuple{Tuple{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}}}}}}}}}}}},1}},Mooncake.CoDual{Array{Complex{Float64},1},Array{Mooncake.Tangent{NamedTuple{(:re, :im),Tuple{Float64,Float64}}},1}},Mooncake.CoDual{Float64,Mooncake.NoFData}},Tuple{Mooncake.CoDual{Nothing, Mooncake.NoFData}, Core.OpaqueClosure{Tuple{Mooncake.NoRData}, Tuple{Mooncake.NoRData, Mooncake.NoRData, Mooncake.NoRData, Mooncake.NoRData, Float64}}}}}
The function `convert` exists, but no method is defined for this combination of argument types.
Closest candidates are:
(::Type{MooncakeFunctionWrappersExt.FunctionWrapperTangent{Tfwds_oc}} where Tfwds_oc)(::Any, ::Any)
@ MooncakeFunctionWrappersExt ~/.julia/packages/Mooncake/pjlQh/ext/MooncakeFunctionWrappersExt.jl:44
convert(::Type{T}, ::T) where T
@ Base Base.jl:126
Stacktrace:
[1] cvt1
@ ./essentials.jl:612 [inlined]
[2] macro expansion
@ ./ntuple.jl:72 [inlined]
[3] ntuple
@ ./ntuple.jl:69 [inlined]
[4] convert(::Type{…}, x::Tuple{…})
@ Base ./essentials.jl:614
[5] cvt1
@ ./essentials.jl:612 [inlined]
[6] ntuple
@ ./ntuple.jl:48 [inlined]
[7] convert(::Type{Tuple{…}}, x::Tuple{Tuple{…}})
@ Base ./essentials.jl:614
[8] Tuple{Tuple{…}}(x::Tuple{Tuple{…}})
@ Base ./tuple.jl:450
[9] @NamedTuple{fw::Tuple{…}}(args::Tuple{Tuple{…}})
@ Base ./namedtuple.jl:121
[10] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:592 [inlined]
[11] macro expansion
@ ./none:0 [inlined]
[12] zero_tangent_internal(x::FunctionWrappersWrappers.FunctionWrappersWrapper{Tuple{…}, false}, d::IdDict{Any, Any})
@ Mooncake ./none:0
[13] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:592 [inlined]
[14] macro expansion
@ ./none:0 [inlined]
[15] zero_tangent_internal(x::SciMLBase.Void{FunctionWrappersWrappers.FunctionWrappersWrapper{…}}, d::IdDict{Any, Any})
@ Mooncake ./none:0
[16] zero_tangent_internal(p::FunctionWrappers.FunctionWrapper{Nothing, Tuple{…}}, dict::IdDict{Any, Any})
@ MooncakeFunctionWrappersExt ~/.julia/packages/Mooncake/pjlQh/ext/MooncakeFunctionWrappersExt.jl:138
[17] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:544 [inlined]
[18] zero_tangent_internal
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:540 [inlined]
[19] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:592 [inlined]
[20] macro expansion
@ ./none:0 [inlined]
[21] zero_tangent_internal(x::FunctionWrappersWrappers.FunctionWrappersWrapper{Tuple{…}, false}, d::IdDict{Any, Any})
@ Mooncake ./none:0
[22] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:592 [inlined]
[23] macro expansion
@ ./none:0 [inlined]
[24] zero_tangent_internal
@ ./none:0 [inlined]
[25] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:592 [inlined]
[26] macro expansion
@ ./none:0 [inlined]
[27] zero_tangent_internal(x::ODEProblem{…}, d::IdDict{…})
@ Mooncake ./none:0
[28] macro expansion
@ ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:592 [inlined]
[29] macro expansion
@ ./none:0 [inlined]
[30] zero_tangent_internal(x::ODESolution{…}, d::IdDict{…})
@ Mooncake ./none:0
[31] zero_tangent(x::ODESolution{…})
@ Mooncake ~/.julia/packages/Mooncake/pjlQh/src/tangents/tangents.jl:516
[32] rrule_wrapper(::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…})
@ Mooncake ~/.julia/packages/Mooncake/pjlQh/src/tools_for_rules.jl:484
[33] rrule!!
@ ./array.jl:0 [inlined]
[34] #solve#37
@ ~/.julia/packages/DiffEqBase/kizyx/src/solve.jl:575 [inlined]
[35] (::Tuple{…})(_2::Mooncake.CoDual{…}, _3::Mooncake.CoDual{…}, _4::Mooncake.CoDual{…}, _5::Mooncake.CoDual{…}, _6::Mooncake.CoDual{…}, _7::Mooncake.CoDual{…}, _8::Mooncake.CoDual{…}, _9::Mooncake.CoDual{…}, _10::Mooncake.CoDual{…})
@ Base.Experimental ./<missing>:0
[36] (::MistyClosures.MistyClosure{…})(::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…}, ::Mooncake.CoDual{…})
@ MistyClosures ~/.julia/packages/MistyClosures/2vtLL/src/MistyClosures.jl:22
[37] DerivedRule
@ ~/.julia/packages/Mooncake/pjlQh/src/interpreter/reverse_mode.jl:990 [inlined]
[38] _build_rule!(rule::Mooncake.LazyDerivedRule{…}, args::Tuple{…})
@ Mooncake ~/.julia/packages/Mooncake/pjlQh/src/interpreter/reverse_mode.jl:1893
[39] LazyDerivedRule
@ ~/.julia/packages/Mooncake/pjlQh/src/interpreter/reverse_mode.jl:1887 [inlined]
[40] my_fun2
@ ~/GitHub/Research/Undef/Autodiff QuantumToolbox/issue_example.jl:27 [inlined]
[41] (::Tuple{…})(_2::Mooncake.CoDual{…}, _3::Mooncake.CoDual{…})
@ Base.Experimental ./<missing>:0
[42] (::MistyClosures.MistyClosure{…})(::Mooncake.CoDual{…}, ::Mooncake.CoDual{…})
@ MistyClosures ~/.julia/packages/MistyClosures/2vtLL/src/MistyClosures.jl:22
[43] (::Mooncake.DerivedRule{…})(::Mooncake.CoDual{…}, ::Mooncake.CoDual{…})
@ Mooncake ~/.julia/packages/Mooncake/pjlQh/src/interpreter/reverse_mode.jl:990
[44] prepare_gradient_cache(::Function, ::Vararg{…}; friendly_tangents::Bool, kwargs::@Kwargs{…})
@ Mooncake ~/.julia/packages/Mooncake/pjlQh/src/interface.jl:584
[45] prepare_gradient_cache
@ ~/.julia/packages/Mooncake/pjlQh/src/interface.jl:581 [inlined]
[46] prepare_gradient_nokwarg(::Val{true}, ::typeof(my_fun2), ::AutoMooncake{Nothing}, ::Vector{Float64})
@ DifferentiationInterfaceMooncakeExt ~/.julia/packages/DifferentiationInterface/6H4dc/ext/DifferentiationInterfaceMooncakeExt/onearg.jl:124
[47] #prepare_gradient#68
@ ~/.julia/packages/DifferentiationInterface/6H4dc/src/first_order/gradient.jl:11 [inlined]
[48] prepare_gradient(::typeof(my_fun2), ::AutoMooncake{Nothing}, ::Vector{Float64})
@ DifferentiationInterface ~/.julia/packages/DifferentiationInterface/6H4dc/src/first_order/gradient.jl:8
[49] top-level scope
@ ~/GitHub/Research/Undef/Autodiff QuantumToolbox/issue_example.jl:43
Some type information was truncated. Use `show(err)` to see complete types.
Describe the bug 🐞
I get an error when differentiating a complex-valued ODE using either
MooncakeVJPorMooncakeAdjoint.Expected behavior
Minimal Reproducible Example 👇
Error & Stacktrace⚠️
Details
It works if I use
T = Float64.Moreover, if I use a sparse matrix version of the RHS
I get a different error
Error & Stacktrace⚠️
Details
Differentiating just the RHS works, so I think this is a question related more to SciMLSensitivity
Environment (please complete the following information):
using Pkg; Pkg.status()versioninfo()