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

Missing frules for `copy`

Open fredrikekre opened this issue 2 years ago • 1 comments

Simple example of taking the jacobian of identity, but idently is implemeted as a copy:

julia> import Diffractor

julia> import AbstractDifferentiation as AD

julia> AD.jacobian(Diffractor.DiffractorForwardBackend(), copy, rand(2))
ERROR: Attempted to AD a foreigncall. Missing rule?
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] copy
    @ Diffractor ./array.jl:409 [inlined]
  [3] (::Diffractor.∂☆recurse{…})(::ZeroBundle{…}, ::Diffractor.TangentBundle{…})
    @ Diffractor ~/.julia/packages/Diffractor/QyO8B/src/stage1/recurse_fwd.jl:0
  [4] (::Diffractor.∂☆internal{1})(::ZeroBundle{1, typeof(copy)}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
    @ Diffractor ~/.julia/packages/Diffractor/QyO8B/src/stage1/forward.jl:121
  [5] (::Diffractor.∂☆{1})(::ZeroBundle{1, typeof(copy)}, ::Vararg{Diffractor.AbstractTangentBundle{1}})
    @ Diffractor ~/.julia/packages/Diffractor/QyO8B/src/stage1/forward.jl:160
  [6] (::Diffractor.var"#pushforward#359"{typeof(copy), Tuple{Vector{Float64}}})(vs::Tuple{Vector{Float64}})
    @ Diffractor ~/.julia/packages/Diffractor/QyO8B/src/AbstractDifferentiation.jl:13
  [7] (::Diffractor.var"#358#362"{Diffractor.var"#pushforward#359"{typeof(copy), Tuple{Vector{…}}}})(cols::Vector{Float64})
    @ Diffractor ~/.julia/packages/AbstractDifferentiation/eEkWP/src/AbstractDifferentiation.jl:526
  [8] mapslices(f::Diffractor.var"#358#362"{Diffractor.var"#pushforward#359"{…}}, A::Matrix{Float64}; dims::Int64)
    @ Base ./abstractarray.jl:3179
  [9] jacobian(b::Diffractor.DiffractorForwardBackend, f::Function, args::Vector{Float64})
    @ Diffractor ~/.julia/packages/AbstractDifferentiation/eEkWP/src/AbstractDifferentiation.jl:524

fredrikekre avatar Jul 27 '23 13:07 fredrikekre

the frule for copy is to copy both primal and derivative.

oxinabox avatar Jul 27 '23 15:07 oxinabox