-
Notifications
You must be signed in to change notification settings - Fork 64
Closed
Description
id(x) = x
function ChainRules.rrule(::typeof(id), x)
y = x
function back(dy)
dx = ProjectTo(x)(@show dy)
(NoTangent(), @show dx)
end
y, back
end
test_rrule(id, 3.4) # fine
test_rrule(id, Ref(3.4))
#=
dy = Tangent{Base.RefValue{Float64}}(x = 4.35,)
test_rrule: id on Base.RefValue{Float64}: Error During Test at /Users/me/.julia/packages/ChainRulesTestUtils/8380y/src/testers.jl:191
Got exception outside of a @test
ArgumentError: type does not have a definite number of fields
Stacktrace:
[1] fieldcount(t::Any)
@ Base ./reflection.jl:764
[2] construct(#unused#::Type{Ref}, fields::NamedTuple{(:x,), Tuple{Float64}})
@ ChainRulesCore ~/.julia/packages/ChainRulesCore/Voykb/src/differentials/composite.jl:213
[3] ProjectTo
@ ~/.julia/packages/ChainRulesCore/Voykb/src/projection.jl:78 [inlined]
[4] (::var"#back#9"{Base.RefValue{Float64}})(dy::Tangent{Base.RefValue{Float64}, NamedTuple{(:x,), Tuple{Float64}}})
=#Maybe the short version is something like this:
x = 1:3.0
dx = Tangent{typeof(x)}(ref=NoTangent(),step=0.1,len=NoTangent(),offset=NoTangent())
ProjectTo(x)(dx)
#=
ERROR: ArgumentError: Named tuple names do not match.
Stacktrace:
[1] map(f::Function, nt::NamedTuple{(:element, :axes), Tuple{ProjectTo{Float64, NamedTuple{(), Tuple{}}}, Tuple{Base.OneTo{Int64}}}}, nts::NamedTuple{(:ref, :step, :len, :offset), Tuple{NoTangent, Float64, NoTangent, NoTangent}})
=#
y = 1.0+im;
dy = Tangent{typeof(y)}(; re=NoTangent(), im=0.1)
ProjectTo(y)(dy)
#=
ERROR: ArgumentError: Named tuple names do not match.
Stacktrace:
[1] map(f::Function, nt::NamedTuple{(), Tuple{}}, nts::NamedTuple{(:re, :im), Tuple{NoTangent, Float64}})
=#Metadata
Metadata
Assignees
Labels
No labels