3838
3939function rrule (:: typeof (value), t:: TaylorScalar{T, N} ) where {N, T}
4040 value_pullback (v̄:: NTuple{N, T} ) = NoTangent (), TaylorScalar (v̄)
41- value_pullback (v̄:: Tuple ) = NoTangent (), TaylorScalar (map (x -> convert (T, x), v̄))
4241 # for structural tangent, convert to tuple
4342 value_pullback (v̄) = NoTangent (), TaylorScalar (map (x -> convert (T, x), Tuple (v̄)))
4443 return value (t), value_pullback
@@ -62,28 +61,14 @@ function rrule(::typeof(*), A::Matrix{S},
6261 return A * t, gemv_pullback
6362end
6463
65- function rrule (:: typeof (+ ), v:: Vector{T} ,
66- t:: Vector{TaylorScalar{T, N}} ) where {N, T <: Number }
67- vadd_pullback (x̄) = NoTangent (), ProjectTo (v)(x̄), x̄
68- return v + t, vadd_pullback
69- end
70-
71- function rrule (:: typeof (+ ), t:: Vector{TaylorScalar{T, N}} ,
72- v:: Vector{T} ) where {N, T <: Number }
73- vadd_pullback (x̄) = NoTangent (), x̄, ProjectTo (v)(x̄)
74- return t + v, vadd_pullback
75- end
76-
7764@adjoint function + (t:: Vector{TaylorScalar{T, N}} , v:: Vector{T} ) where {N, T <: Number }
78- t + v, x̄ -> (x̄, map (primal, x̄))
65+ project_v = ProjectTo (v)
66+ t + v, x̄ -> (x̄, project_v (x̄))
7967end
8068
8169@adjoint function + (v:: Vector{T} , t:: Vector{TaylorScalar{T, N}} ) where {N, T <: Number }
82- v + t, x̄ -> (map (primal, x̄), x̄)
70+ project_v = ProjectTo (v)
71+ v + t, x̄ -> (project_v (x̄), x̄)
8372end
8473
8574(project:: ProjectTo{T} )(dx:: TaylorScalar{T, N} ) where {N, T <: Number } = primal (dx)
86-
87- function (project:: ProjectTo{S} )(dx:: TaylorScalar{T, N} ) where {N, T <: Number , S <: Real }
88- project (primal (dx))
89- end
0 commit comments