Diffractor.jl
Diffractor.jl copied to clipboard
Splatting arrays
Diffractor doesn't seem to like array splats:
julia> gradient(x -> max(x...), (1,2,3))[1]
(0.0, 0.0, 1.0)
julia> gradient(x -> max(x...), [1,2,3])[1]
ERROR: MethodError: no method matching (::Diffractor.∂⃖recurse{1})(::typeof(Core._apply_iterate), ::typeof(iterate), ::typeof(max), ::Vector{Int64})
Closest candidates are:
(::Diffractor.∂⃖recurse)(::Any...) at /Users/me/.julia/packages/Diffractor/2Ott3/src/stage1/generated.jl:398
Stacktrace:
[1] macro expansion
@ ~/.julia/packages/Diffractor/2Ott3/src/stage1/generated.jl:0 [inlined]
[2] (::Diffractor.∂⃖recurse{1})(::typeof(Core._apply_iterate), ::typeof(iterate), ::typeof(max), ::Vector{Int64})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/stage1/generated.jl:407
[3] (::∂⃖{1})(::typeof(Core._apply_iterate), ::Function, ::Vararg{Any})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/stage1/generated.jl:214
[4] #9
@ ./REPL[6]:1 [inlined]
[5] (::Diffractor.∂⃖recurse{1})(::var"#9#10", ::Vector{Int64})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/stage1/generated.jl:0
[6] (::∂⃖{1})(f::var"#9#10", args::Vector{Int64})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/stage1/generated.jl:214
[7] ∂⃖(::Function, ::Vararg{Any})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/interface.jl:25
[8] (::Diffractor.∇{var"#9#10"})(args::Vector{Int64})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/interface.jl:121
[9] Diffractor.∇(::Function, ::Vector{Int64})
@ Diffractor ~/.julia/packages/Diffractor/2Ott3/src/interface.jl:128
Zygote also gets this wrong: https://github.com/FluxML/Zygote.jl/issues/599
Note BTW that splats of matrices still cause a similar error:
julia> gradient(x -> max(x...), [1 2; 3 4])[1]
ERROR: MethodError: no method matching (::Diffractor.∂⃖recurse{1})(::typeof(Core._apply_iterate), ::typeof(iterate), ::typeof(max), ::Matrix{Int64})
Closest candidates are:
(::Diffractor.∂⃖recurse)(::Any...) at ~/.julia/packages/Diffractor/HYuxt/src/stage1/generated.jl:405
Stacktrace:
[1] macro expansion
@ ~/.julia/packages/Diffractor/HYuxt/src/stage1/generated.jl:0 [inlined]
[2] (::Diffractor.∂⃖recurse{1})(::typeof(Core._apply_iterate), ::typeof(iterate), ::typeof(max), ::Matrix{Int64})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/stage1/generated.jl:414
[3] (::∂⃖{1})(::typeof(Core._apply_iterate), ::Function, ::Vararg{Any})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/stage1/generated.jl:215
[4] #15
@ ./REPL[40]:1 [inlined]
[5] (::Diffractor.∂⃖recurse{1})(::var"#15#16", ::Matrix{Int64})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/stage1/generated.jl:0
[6] (::∂⃖{1})(f::var"#15#16", args::Matrix{Int64})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/stage1/generated.jl:215
[7] ∂⃖(::Function, ::Vararg{Any})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/interface.jl:25
[8] (::Diffractor.∇{var"#15#16"})(args::Matrix{Int64})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/interface.jl:121
[9] Diffractor.∇(::Function, ::Matrix{Int64})
@ Diffractor ~/.julia/packages/Diffractor/HYuxt/src/interface.jl:128