Tullio.jl icon indicating copy to clipboard operation
Tullio.jl copied to clipboard

Use with ReverseDiff

Open mcabbott opened this issue 5 years ago • 1 comments

I think this is still blocked by https://github.com/JuliaDiff/ReverseDiff.jl/issues/135, here's the error:

julia> Base.gensym(ex::Expr) = gensym(string(ex)); # without this, LoadError: MethodError: no method matching gensym(::Expr) instead

julia> using ReverseDiff, Tullio
┌ Warning: Error requiring ReverseDiff from Tullio:
│ LoadError: UndefVarError: ev not defined
│ Stacktrace:
│  [1] top-level scope at /Users/me/.julia/packages/ReverseDiff/Thhqg/src/macros.jl:190
│  [2] include(::Function, ::Module, ::String) at /Applications/Julia-1.5.app/Contents/Resources/julia/lib/julia/sys.dylib:?
│  [3] include at ./Base.jl:368 [inlined]
│  [4] include(::String) at /Users/me/.julia/packages/Tullio/HGzih/src/Tullio.jl:1
│  [5] top-level scope at none:1
│  [6] eval at ./boot.jl:331 [inlined]
│  [7] eval at /Users/me/.julia/packages/Tullio/HGzih/src/Tullio.jl:1 [inlined]
│  [8] (::Tullio.var"#150#154")() at /Users/me/.julia/packages/Requires/qy6zC/src/require.jl:85
...

julia> ReverseDiff.gradient(x -> sum(@tullio y[i] := x[i]), rand(3))
ERROR: MethodError: no method matching track(::Tullio.Eval{var"#ℳ𝒶𝓀ℯ#10"{var"#𝒜𝒸𝓉!#7"},var"#20#∇ℳ𝒶𝓀ℯ#9"{var"#∇𝒜𝒸𝓉!#8"}}, ::ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}})
Stacktrace:
 [1] (::Tullio.Eval{var"#ℳ𝒶𝓀ℯ#10"{var"#𝒜𝒸𝓉!#7"},var"#20#∇ℳ𝒶𝓀ℯ#9"{var"#∇𝒜𝒸𝓉!#8"}})(::ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}) at /Users/me/.julia/packages/Tullio/HGzih/src/grad/reverse.jl:4
 [2] (::var"#5#6")(::ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}) at ./REPL[4]:1
 [3] ReverseDiff.GradientTape(::var"#5#6", ::Array{Float64,1}, ::ReverseDiff.GradientConfig{ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}}) at /Users/me/.julia/packages/ReverseDiff/Thhqg/src/api/tape.jl:199
 [4] gradient(::Function, ::Array{Float64,1}, ::ReverseDiff.GradientConfig{ReverseDiff.TrackedArray{Float64,Float64,1,Array{Float64,1},Array{Float64,1}}}) at /Users/me/.julia/packages/ReverseDiff/Thhqg/src/api/gradients.jl:22 (repeats 2 times)

What the macro does:

using TensorCast, ReverseDiff
id(x) = x;
@pretty ReverseDiff.@grad function id(x)
           ReverseDiff.value(x), Δ -> (Δ,)
       end

mcabbott avatar Aug 06 '20 08:08 mcabbott

Note to self: https://github.com/JuliaDiff/ReverseDiff.jl/pull/180 should make this possible now

mcabbott avatar Oct 27 '21 19:10 mcabbott