Skip to content

Commit

Permalink
convert Tangent to Diagonal
Browse files Browse the repository at this point in the history
  • Loading branch information
mcabbott committed Aug 22, 2021
1 parent 8218c2c commit 452a1b5
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/projection.jl
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,9 @@ ProjectTo(x::Diagonal) = ProjectTo{Diagonal}(; diag=ProjectTo(x.diag))
(project::ProjectTo{Diagonal})(dx::AbstractMatrix) = Diagonal(project.diag(diag(dx)))
(project::ProjectTo{Diagonal})(dx::Diagonal) = Diagonal(project.diag(dx.diag))

(project::ProjectTo{Diagonal})(dx::Tangent{T}) where T = (@show T; Diagonal(project.diag(dx.diag)))
# (project::ProjectTo{Diagonal})(dx::Tangent{<:Diagonal, NamedTuple{(:diag,), <:Tuple{AbstractVector}}}) = Diagonal(project.diag(@show dx.diag))

# Symmetric
for (SymHerm, chk, fun) in (
(:Symmetric, :issymmetric, :transpose),
Expand Down Expand Up @@ -344,13 +347,16 @@ for UL in (:UpperTriangular, :LowerTriangular, :UnitUpperTriangular, :UnitLowerT
@eval begin
ProjectTo(x::$UL) = ProjectTo{$UL}(; parent=ProjectTo(parent(x)))
(project::ProjectTo{$UL})(dx::AbstractArray) = $UL(project.parent(dx))
# Another subspace which is not a subtype, like Diagonal inside Symmetric above, equally unsure
function (project::ProjectTo{$UL})(dx::Diagonal)
sub = project.parent
sub_one = ProjectTo{project_type(sub)}(;
element=sub.element, axes=(sub.axes[1],)
)
return Diagonal(sub_one(dx.diag))
end
# Convert "structural" `Tangent`s to array-like "natural" tangents
(project::ProjectTo{$UL})(dx::Tangent{<:$UL, NamedTuple{(:data,), <:Tuple{AbstractMatrix}}}) = $UL(dx.data)
end
end

Expand Down

0 comments on commit 452a1b5

Please sign in to comment.