Skip to content

Commit 452a1b5

Browse files
committed
convert Tangent to Diagonal
1 parent 8218c2c commit 452a1b5

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/projection.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
312315
for (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
355361
end
356362

0 commit comments

Comments
 (0)