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

Splatting arrays

Open mcabbott opened this issue 4 years ago • 1 comments

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

mcabbott avatar Aug 19 '21 04:08 mcabbott

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

mcabbott avatar Jan 10 '22 01:01 mcabbott