diff --git a/src/rulesets/LinearAlgebra/structured.jl b/src/rulesets/LinearAlgebra/structured.jl index 1a5a4bcd0..b50ec08eb 100644 --- a/src/rulesets/LinearAlgebra/structured.jl +++ b/src/rulesets/LinearAlgebra/structured.jl @@ -208,15 +208,17 @@ end ##### function rrule(::Type{<:UpperTriangular}, A::AbstractMatrix) + project = ProjectTo(A) function UpperTriangular_pullback(ȳ) - return (NoTangent(), Matrix(ȳ)) + return (NoTangent(), project(ȳ)) end return UpperTriangular(A), UpperTriangular_pullback end function rrule(::Type{<:LowerTriangular}, A::AbstractMatrix) + project = ProjectTo(A) function LowerTriangular_pullback(ȳ) - return (NoTangent(), Matrix(ȳ)) + return (NoTangent(), project(ȳ)) end return LowerTriangular(A), LowerTriangular_pullback end