Skip to content

Second order ODE issue with adjoint sensitivity #492

@jgreener64

Description

@jgreener64

When I try adjoint sensitivity with a second order ODE I get an error:

using OrdinaryDiffEq
using DiffEqSensitivity
using Zygote

function acceleration!(dv,v,u,p,t)
    dv .= [1.0, 1.0] .* p[1]
end
initial_positions = [0.0,0.1]
initial_velocities = [0.5,0.0]
tspan = (0,100.)
params = [0.1]
prob = SecondOrderODEProblem(acceleration!,initial_velocities,initial_positions,tspan,params)
sol = solve(prob, KahanLi8(), dt=1/10)
# Works okay

function loss(p)
    prob = SecondOrderODEProblem(acceleration!,initial_velocities,initial_positions,tspan,p)
    sol = solve(prob, KahanLi8(), dt=1/10, sensealg=BacksolveAdjoint())
    return sol[end][3]
end
Zygote.gradient(loss,params)
ERROR: AssertionError: IndexStyle(value) === IndexLinear()
Stacktrace:
  [1] ReverseDiff.TrackedArray{Float64, Float64, 1, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}(value::RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, deriv::RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, tape::Vector{ReverseDiff.AbstractInstruction})
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/tracked.jl:77
  [2] ReverseDiff.TrackedArray(value::RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, deriv::RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, tape::Vector{ReverseDiff.AbstractInstruction})
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/tracked.jl:86
  [3] track(x::RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, ::Type{Float64}, tp::Vector{ReverseDiff.AbstractInstruction})
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/tracked.jl:452
  [4] (::ReverseDiff.var"#657#658"{Float64, Vector{ReverseDiff.AbstractInstruction}})(x::RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}})
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/api/Config.jl:46
  [5] map
    @ ./tuple.jl:223 [inlined]
  [6] ReverseDiff.GradientConfig(input::Tuple{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Vector{Float64}, Vector{Float64}}, ::Type{Float64}, tp::Vector{ReverseDiff.AbstractInstruction})
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/api/Config.jl:46
  [7] ReverseDiff.GradientConfig(input::Tuple{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Vector{Float64}, Vector{Float64}}, tp::Vector{ReverseDiff.AbstractInstruction}) (repeats 2 times)
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/api/Config.jl:37
  [8] ReverseDiff.GradientTape(f::Function, input::Tuple{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Vector{Float64}, Vector{Float64}})
    @ ReverseDiff ~/.julia/packages/ReverseDiff/E4Tzn/src/api/tape.jl:204
  [9] adjointdiffcache(g::DiffEqSensitivity.var"#df#217"{Vector{AbstractVector{Float64}}, Colon}, sensealg::BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, discrete::Bool, sol::ODESolution{Float64, 2, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, ODEProblem{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Tuple{Float64, Float64}, true, Vector{Float64}, DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SecondOrderODEProblem{true}}, KahanLi8, OrdinaryDiffEq.InterpolationData{DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, OrdinaryDiffEq.KahanLi8Cache{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, OrdinaryDiffEq.KahanLi8ConstantCache{Float64, Float64}}}, DiffEqBase.DEStats}, dg::Nothing, f::DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}; quad::Bool, noiseterm::Bool)
    @ DiffEqSensitivity ~/.julia/packages/DiffEqSensitivity/cLl5o/src/adjoint_common.jl:144
 [10] DiffEqSensitivity.ODEBacksolveSensitivityFunction(g::Function, sensealg::BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, discrete::Bool, sol::ODESolution{Float64, 2, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, ODEProblem{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Tuple{Float64, Float64}, true, Vector{Float64}, DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SecondOrderODEProblem{true}}, KahanLi8, OrdinaryDiffEq.InterpolationData{DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, OrdinaryDiffEq.KahanLi8Cache{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, OrdinaryDiffEq.KahanLi8ConstantCache{Float64, Float64}}}, DiffEqBase.DEStats}, dg::Nothing, f::Function; noiseterm::Bool)
    @ DiffEqSensitivity ~/.julia/packages/DiffEqSensitivity/cLl5o/src/backsolve_adjoint.jl:13
 [11] ODEBacksolveSensitivityFunction
    @ ~/.julia/packages/DiffEqSensitivity/cLl5o/src/backsolve_adjoint.jl:13 [inlined]
 [12] ODEAdjointProblem(sol::ODESolution{Float64, 2, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, ODEProblem{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Tuple{Float64, Float64}, true, Vector{Float64}, DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SecondOrderODEProblem{true}}, KahanLi8, OrdinaryDiffEq.InterpolationData{DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, OrdinaryDiffEq.KahanLi8Cache{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, OrdinaryDiffEq.KahanLi8ConstantCache{Float64, Float64}}}, DiffEqBase.DEStats}, sensealg::BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, g::Function, t::Vector{Float64}, dg::Nothing; checkpoints::Vector{Float64}, callback::Nothing, kwargs::Base.Pairs{Symbol, Float64, Tuple{Symbol, Symbol}, NamedTuple{(:abstol, :reltol), Tuple{Float64, Float64}}})
    @ DiffEqSensitivity ~/.julia/packages/DiffEqSensitivity/cLl5o/src/backsolve_adjoint.jl:124
 [13] _adjoint_sensitivities(sol::ODESolution{Float64, 2, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, ODEProblem{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Tuple{Float64, Float64}, true, Vector{Float64}, DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SecondOrderODEProblem{true}}, KahanLi8, OrdinaryDiffEq.InterpolationData{DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, OrdinaryDiffEq.KahanLi8Cache{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, OrdinaryDiffEq.KahanLi8ConstantCache{Float64, Float64}}}, DiffEqBase.DEStats}, sensealg::BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, alg::KahanLi8, g::DiffEqSensitivity.var"#df#217"{Vector{AbstractVector{Float64}}, Colon}, t::Vector{Float64}, dg::Nothing; abstol::Float64, reltol::Float64, checkpoints::Vector{Float64}, corfunc_analytical::Nothing, callback::Nothing, kwargs::Base.Pairs{Symbol, Float64, Tuple{Symbol}, NamedTuple{(:dt,), Tuple{Float64}}})
    @ DiffEqSensitivity ~/.julia/packages/DiffEqSensitivity/cLl5o/src/sensitivity_interface.jl:17
 [14] adjoint_sensitivities(::ODESolution{Float64, 2, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Nothing, Nothing, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, ODEProblem{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Tuple{Float64, Float64}, true, Vector{Float64}, DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, SecondOrderODEProblem{true}}, KahanLi8, OrdinaryDiffEq.InterpolationData{DynamicalODEFunction{true, ODEFunction{true, typeof(acceleration!), LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, ODEFunction{true, SciMLBase.var"#225#227", LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, typeof(SciMLBase.DEFAULT_OBSERVED), Nothing}, LinearAlgebra.UniformScaling{Bool}, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing}, Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}, Vector{Float64}, Vector{Vector{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}}}, OrdinaryDiffEq.KahanLi8Cache{RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, OrdinaryDiffEq.KahanLi8ConstantCache{Float64, Float64}}}, DiffEqBase.DEStats}, ::KahanLi8, ::Vararg{Any}; sensealg::BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, kwargs::Base.Pairs{Symbol, Union{Nothing, Float64}, Tuple{Symbol, Symbol}, NamedTuple{(:callback, :dt), Tuple{Nothing, Float64}}})
    @ DiffEqSensitivity ~/.julia/packages/DiffEqSensitivity/cLl5o/src/sensitivity_interface.jl:6
 [15] (::DiffEqSensitivity.var"#adjoint_sensitivity_backpass#216"{Base.Pairs{Symbol, Float64, Tuple{Symbol}, NamedTuple{(:dt,), Tuple{Float64}}}, KahanLi8, BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Vector{Float64}, Tuple{}, Colon, NamedTuple{(:dt,), Tuple{Float64}}})(Δ::Vector{AbstractVector{Float64}})
    @ DiffEqSensitivity ~/.julia/packages/DiffEqSensitivity/cLl5o/src/concrete_solve.jl:229
 [16] ZBack
    @ ~/.julia/packages/Zygote/TaBlo/src/compiler/chainrules.jl:91 [inlined]
 [17] (::Zygote.var"#kw_zpullback#42"{DiffEqSensitivity.var"#adjoint_sensitivity_backpass#216"{Base.Pairs{Symbol, Float64, Tuple{Symbol}, NamedTuple{(:dt,), Tuple{Float64}}}, KahanLi8, BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Vector{Float64}, Tuple{}, Colon, NamedTuple{(:dt,), Tuple{Float64}}}})(dy::Vector{AbstractVector{Float64}})
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/compiler/chainrules.jl:117
 [18] #215
    @ ~/.julia/packages/Zygote/TaBlo/src/lib/lib.jl:203 [inlined]
 [19] (::Zygote.var"#1760#back#217"{Zygote.var"#215#216"{Tuple{NTuple{6, Nothing}, Tuple{Nothing}}, Zygote.var"#kw_zpullback#42"{DiffEqSensitivity.var"#adjoint_sensitivity_backpass#216"{Base.Pairs{Symbol, Float64, Tuple{Symbol}, NamedTuple{(:dt,), Tuple{Float64}}}, KahanLi8, BacksolveAdjoint{0, true, Val{:central}, Bool, Bool}, RecursiveArrayTools.ArrayPartition{Float64, Tuple{Vector{Float64}, Vector{Float64}}}, Vector{Float64}, Tuple{}, Colon, NamedTuple{(:dt,), Tuple{Float64}}}}}})(Δ::Vector{AbstractVector{Float64}})
    @ Zygote ~/.julia/packages/ZygoteRules/OjfTt/src/adjoint.jl:59
 [20] Pullback
    @ ~/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:73 [inlined]
 [21] (::typeof(∂(#solve#43)))(Δ::Vector{AbstractVector{Float64}})
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/compiler/interface2.jl:0
 [22] (::Zygote.var"#215#216"{Tuple{NTuple{6, Nothing}, Tuple{Nothing}}, typeof(∂(#solve#43))})(Δ::Vector{AbstractVector{Float64}})
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/lib/lib.jl:203
 [23] (::Zygote.var"#1760#back#217"{Zygote.var"#215#216"{Tuple{NTuple{6, Nothing}, Tuple{Nothing}}, typeof(∂(#solve#43))}})(Δ::Vector{AbstractVector{Float64}})
    @ Zygote ~/.julia/packages/ZygoteRules/OjfTt/src/adjoint.jl:59
 [24] Pullback
    @ ~/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:68 [inlined]
 [25] (::typeof(∂(solve##kw)))(Δ::Vector{AbstractVector{Float64}})
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/compiler/interface2.jl:0
 [26] Pullback
    @ ./REPL[11]:5 [inlined]
 [27] (::typeof(∂(loss)))(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/compiler/interface2.jl:0
 [28] (::Zygote.var"#48#49"{typeof(∂(loss))})(Δ::Float64)
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/compiler/interface.jl:41
 [29] gradient(f::Function, args::Vector{Float64})
    @ Zygote ~/.julia/packages/Zygote/TaBlo/src/compiler/interface.jl:76
 [30] top-level scope
    @ REPL[12]:1

I get a similar error for most of the sensitivity algorithms at https://diffeq.sciml.ai/latest/analysis/sensitivity/#Sensitivity-Algorithms, apart from ForwardDiffSensitivity which works.

Versions:

  • Julia 1.7.0-beta4
  • OrdinaryDiffEq v5.64.0
  • DiffEqSensitivity v6.58.0
  • Zygote v0.6.17

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions