@@ -308,6 +308,9 @@ ProjectTo(x::Diagonal) = ProjectTo{Diagonal}(; diag=ProjectTo(x.diag))
308308(project:: ProjectTo{Diagonal} )(dx:: AbstractMatrix ) = Diagonal (project. diag (diag (dx)))
309309(project:: ProjectTo{Diagonal} )(dx:: Diagonal ) = Diagonal (project. diag (dx. diag))
310310
311+ (project:: ProjectTo{Diagonal} )(dx:: Tangent{T} ) where T = (@show T; Diagonal (project. diag (dx. diag)))
312+ # (project::ProjectTo{Diagonal})(dx::Tangent{<:Diagonal, NamedTuple{(:diag,), <:Tuple{AbstractVector}}}) = Diagonal(project.diag(@show dx.diag))
313+
311314# Symmetric
312315for (SymHerm, chk, fun) in (
313316 (:Symmetric , :issymmetric , :transpose ),
@@ -344,13 +347,16 @@ for UL in (:UpperTriangular, :LowerTriangular, :UnitUpperTriangular, :UnitLowerT
344347 @eval begin
345348 ProjectTo (x:: $UL ) = ProjectTo {$UL} (; parent= ProjectTo (parent (x)))
346349 (project:: ProjectTo{$UL} )(dx:: AbstractArray ) = $ UL (project. parent (dx))
350+ # Another subspace which is not a subtype, like Diagonal inside Symmetric above, equally unsure
347351 function (project:: ProjectTo{$UL} )(dx:: Diagonal )
348352 sub = project. parent
349353 sub_one = ProjectTo {project_type(sub)} (;
350354 element= sub. element, axes= (sub. axes[1 ],)
351355 )
352356 return Diagonal (sub_one (dx. diag))
353357 end
358+ # Convert "structural" `Tangent`s to array-like "natural" tangents
359+ (project:: ProjectTo{$UL} )(dx:: Tangent{<:$UL, NamedTuple{(:data,), <:Tuple{AbstractMatrix}}} ) = $ UL (dx. data)
354360 end
355361end
356362
0 commit comments