Skip to content

Commit 13d440d

Browse files
authored
Backport "Fix tr for Symmetric/Hermitian block matrices #55522" to v1.11 (#55535)
1 parent 8467772 commit 13d440d

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

stdlib/LinearAlgebra/src/symmetric.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,8 +422,8 @@ Base.copy(A::Adjoint{<:Any,<:Symmetric}) =
422422
Base.copy(A::Transpose{<:Any,<:Hermitian}) =
423423
Hermitian(copy(transpose(A.parent.data)), ifelse(A.parent.uplo == 'U', :L, :U))
424424

425-
tr(A::Symmetric) = tr(A.data) # to avoid AbstractMatrix fallback (incl. allocations)
426-
tr(A::Hermitian) = real(tr(A.data))
425+
tr(A::Symmetric{<:Number}) = tr(A.data) # to avoid AbstractMatrix fallback (incl. allocations)
426+
tr(A::Hermitian{<:Number}) = real(tr(A.data))
427427

428428
Base.conj(A::Symmetric) = Symmetric(parentof_applytri(conj, A), sym_uplo(A.uplo))
429429
Base.conj(A::Hermitian) = Hermitian(parentof_applytri(conj, A), sym_uplo(A.uplo))

stdlib/LinearAlgebra/test/symmetric.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -978,4 +978,15 @@ end
978978
@test conj(H) == conj(Array(H))
979979
end
980980

981+
@testset "tr for block matrices" begin
982+
m = [1 2; 3 4]
983+
for b in (m, m * (1 + im))
984+
M = fill(b, 3, 3)
985+
for ST in (Symmetric, Hermitian)
986+
S = ST(M)
987+
@test tr(S) == sum(diag(S))
988+
end
989+
end
990+
end
991+
981992
end # module TestSymmetric

0 commit comments

Comments
 (0)