Skip to content

Commit 7404e73

Browse files
committed
add projections
1 parent 3edbd8e commit 7404e73

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

src/factorizations/matrixalgebrakit.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ for f in
55
:svd_compact, :svd_full, :svd_trunc, :svd_vals, :qr_compact, :qr_full, :qr_null,
66
:lq_compact, :lq_full, :lq_null, :eig_full, :eig_trunc, :eig_vals, :eigh_full,
77
:eigh_trunc, :eigh_vals, :left_polar, :right_polar,
8+
:project_hermitian, :project_antihermitian, :project_isometric,
89
]
910
f! = Symbol(f, :!)
1011
@eval function MAK.default_algorithm(::typeof($f!), ::Type{T}; kwargs...) where {T <: AbstractTensorMap}
@@ -655,3 +656,17 @@ for (f!, f_svd!) in zip((:left_null!, :right_null!), (:left_null_svd!, :right_nu
655656
return $f!(t, N; alg_svd = alg)
656657
end
657658
end
659+
660+
# Projections
661+
# -----------
662+
function MAK.check_input(::typeof(project_hermitian!), tsrc::AbstractTensorMap, tdst::AbstractTensorMap)
663+
domain(tsrc) == codomain(tsrc) || throw(ArgumentError("Hermitian projection requires square input tensor"))
664+
tsrc === tdst || @check_space(tdst, space(tsrc))
665+
return nothing
666+
end
667+
668+
MAK.check_input(::typeof(project_antihermitian!), tsrc::AbstractTensorMap, tdst::AbstractTensorMap) =
669+
MAK.check_input(project_hermitian!, tsrc, tdst)
670+
671+
MAK.initialize_output(::typeof(project_hermitian!), tsrc::AbstractTensorMap) = tsrc
672+
MAK.initialize_output(::typeof(project_antihermitian!), tsrc::AbstractTensorMap) = tsrc

0 commit comments

Comments
 (0)