Skip to content

Commit 2cf5f98

Browse files
author
Jeffrey Lin
authored
LinearAlgebra: ignore S.ev[length(S.dv)] in ishermitian(S:SymTridiagonal) (#41089)
1 parent 443a1b6 commit 2cf5f98

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

stdlib/LinearAlgebra/src/tridiag.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ adjoint(S::SymTridiagonal) = Adjoint(S)
170170
Base.copy(S::Adjoint{<:Any,<:SymTridiagonal}) = SymTridiagonal(map(x -> copy.(adjoint.(x)), (S.parent.dv, S.parent.ev))...)
171171
Base.copy(S::Transpose{<:Any,<:SymTridiagonal}) = SymTridiagonal(map(x -> copy.(transpose.(x)), (S.parent.dv, S.parent.ev))...)
172172

173-
ishermitian(S::SymTridiagonal) = isreal(S.dv) && isreal(S.ev)
173+
ishermitian(S::SymTridiagonal) = isreal(S.dv) && isreal(@view S.ev[begin:length(S.dv) - 1])
174174
issymmetric(S::SymTridiagonal) = true
175175

176176
function diag(M::SymTridiagonal{<:Number}, n::Integer=0)

stdlib/LinearAlgebra/test/tridiag.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,12 @@ end
632632
@test !ishermitian(A)
633633

634634
# complex
635+
# https://github.com/JuliaLang/julia/pull/41037#discussion_r645524081
636+
S = SymTridiagonal(randn(5) .+ 0im, randn(5) .+ 0im)
637+
S.ev[end] = im
638+
@test issymmetric(S)
639+
@test ishermitian(S)
640+
635641
S = SymTridiagonal(randn(5) .+ 1im, randn(4) .+ 1im)
636642
@test issymmetric(S)
637643
@test !ishermitian(S)

0 commit comments

Comments
 (0)