Skip to content

Commit 2c5bd94

Browse files
committed
Specialize copy and fix conj
1 parent b736a90 commit 2c5bd94

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

stdlib/LinearAlgebra/src/symmetric.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,8 @@ Hermitian{T,S}(A::Hermitian) where {T,S<:AbstractMatrix{T}} = Hermitian{T,S}(con
335335
AbstractMatrix{T}(A::Hermitian) where {T} = Hermitian(convert(AbstractMatrix{T}, A.data), sym_uplo(A.uplo))
336336
AbstractMatrix{T}(A::Hermitian{T}) where {T} = copy(A)
337337

338-
copy(A::Symmetric{T,S}) where {T,S} = (B = copy(A.data); Symmetric{T,typeof(B)}(B,A.uplo))
339-
copy(A::Hermitian{T,S}) where {T,S} = (B = copy(A.data); Hermitian{T,typeof(B)}(B,A.uplo))
338+
copy(A::Symmetric) = (Symmetric(parentof_applytri(copy, B), sym_uplo(A.uplo)))
339+
copy(A::Hermitian) = (Hermitian(parentof_applytri(copy, B), sym_uplo(A.uplo)))
340340

341341
function copyto!(dest::Symmetric, src::Symmetric)
342342
if src.uplo == dest.uplo
@@ -422,7 +422,8 @@ Base.copy(A::Transpose{<:Any,<:Hermitian}) =
422422
tr(A::Symmetric) = tr(A.data) # to avoid AbstractMatrix fallback (incl. allocations)
423423
tr(A::Hermitian) = real(tr(A.data))
424424

425-
Base.conj(A::HermOrSym) = typeof(A)(parentof_applytri(conj, A), A.uplo)
425+
Base.conj(A::Symmetric) = Symmetric(parentof_applytri(conj, A), sym_uplo(A.uplo))
426+
Base.conj(A::Hermitian) = Hermitian(parentof_applytri(conj, A), sym_uplo(A.uplo))
426427
Base.conj!(A::HermOrSym) = typeof(A)(parentof_applytri(conj!, A), A.uplo)
427428

428429
# tril/triu

stdlib/LinearAlgebra/test/symmetric.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -968,4 +968,11 @@ end
968968
end
969969
end
970970

971+
@testset "conj for immutable" begin
972+
S = Symmetric(reshape((1:16)*im, 4, 4))
973+
@test conj(S) == conj(Array(S))
974+
H = Hermitian(reshape((1:16)*im, 4, 4))
975+
@test conj(H) == conj(Array(H))
976+
end
977+
971978
end # module TestSymmetric

0 commit comments

Comments
 (0)