1- function ChainRulesCore. rrule (:: typeof (getproperty), x:: ComponentArray , s:: Union{Symbol, Val} )
1+ function ChainRulesCore. rrule (:: typeof (getproperty), x:: ComponentArray , s:: Union{Symbol,Val} )
22 function getproperty_adjoint (Δ)
33 zero_x = zero (similar (x, eltype (Δ)))
44 setproperty! (zero_x, s, Δ)
@@ -8,6 +8,12 @@ function ChainRulesCore.rrule(::typeof(getproperty), x::ComponentArray, s::Union
88 return getproperty (x, s), getproperty_adjoint
99end
1010
11- ChainRulesCore. rrule (:: typeof (getdata), x:: ComponentArray ) = getdata (x), Δ-> (ChainRulesCore. NoTangent (), ComponentArray (Δ, getaxes (x)))
11+ ChainRulesCore. rrule (:: typeof (getdata), x:: ComponentArray ) = getdata (x), Δ -> (ChainRulesCore. NoTangent (), ComponentArray (Δ, getaxes (x)))
1212
13- ChainRulesCore. rrule (:: Type{ComponentArray} , data, axes) = ComponentArray (data, axes), Δ-> (ChainRulesCore. NoTangent (), getdata (Δ), ChainRulesCore. NoTangent ())
13+ ChainRulesCore. rrule (:: Type{ComponentArray} , data, axes) = ComponentArray (data, axes), Δ -> (ChainRulesCore. NoTangent (), getdata (Δ), ChainRulesCore. NoTangent ())
14+
15+ function ChainRulesCore. ProjectTo (ca:: ComponentArray )
16+ return ChainRulesCore. ProjectTo {ComponentArray} (; project= ChainRulesCore. ProjectTo (getdata (ca)), axes= getaxes (ca))
17+ end
18+
19+ (p:: ChainRulesCore.ProjectTo{ComponentArray} )(dx:: AbstractArray ) = ComponentArray (p. project (dx), p. axes)
0 commit comments