Skip to content

Commit 92e76d8

Browse files
committed
Remove some pirated methods for the symmetric eigenvalue problem.
They don't seem to be needed anymore and avoid an ambiguity introduced by Julia 1.11. Also, sort the eigenvalues of the symmetric problem when nothing is passed.
1 parent d766949 commit 92e76d8

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

src/eigenSelfAdjoint.jl

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,10 @@ function eigvalsPWK!(S::SymTridiagonal{T}; tol = eps(T), sortby::Union{Function,
216216
end
217217
end
218218
end
219-
LinearAlgebra.sorteig!(d, sortby)
219+
220+
# LinearAlgebra.eigvals will pass sortby=nothing but LAPACK always sort the symmetric
221+
# eigenvalue problem so we'll will do the same here
222+
LinearAlgebra.sorteig!(d, sortby === nothing ? LinearAlgebra.eigsortby : sortby)
220223
end
221224

222225
function eigQL!(
@@ -639,30 +642,30 @@ else
639642
LinearAlgebra.copy_oftype
640643
end
641644

642-
function LinearAlgebra.eigvals(A::Hermitian{<:Real})
643-
T = typeof(sqrt(zero(eltype(A))))
644-
return eigvals!(_eigencopy_oftype(A, T))
645-
end
646-
function LinearAlgebra.eigvals(A::Hermitian{<:Complex})
647-
T = typeof(sqrt(zero(eltype(A))))
648-
return eigvals!(_eigencopy_oftype(A, T))
649-
end
650-
function LinearAlgebra.eigvals(A::Hermitian)
651-
T = typeof(sqrt(zero(eltype(A))))
652-
return eigvals!(_eigencopy_oftype(A, T))
653-
end
654-
function LinearAlgebra.eigen(A::Hermitian{<:Real})
655-
T = typeof(sqrt(zero(eltype(A))))
656-
return eigen!(_eigencopy_oftype(A, T))
657-
end
658-
function LinearAlgebra.eigen(A::Hermitian{<:Complex})
659-
T = typeof(sqrt(zero(eltype(A))))
660-
return eigen!(_eigencopy_oftype(A, T))
661-
end
662-
function LinearAlgebra.eigen(A::Hermitian)
663-
T = typeof(sqrt(zero(eltype(A))))
664-
return eigen!(_eigencopy_oftype(A, T))
665-
end
645+
# function LinearAlgebra.eigvals(A::Hermitian{<:Real})
646+
# T = typeof(sqrt(zero(eltype(A))))
647+
# return eigvals!(_eigencopy_oftype(A, T))
648+
# end
649+
# function LinearAlgebra.eigvals(A::Hermitian{<:Complex})
650+
# T = typeof(sqrt(zero(eltype(A))))
651+
# return eigvals!(_eigencopy_oftype(A, T))
652+
# end
653+
# function LinearAlgebra.eigvals(A::Hermitian)
654+
# T = typeof(sqrt(zero(eltype(A))))
655+
# return eigvals!(_eigencopy_oftype(A, T))
656+
# end
657+
# function LinearAlgebra.eigen(A::Hermitian{<:Real})
658+
# T = typeof(sqrt(zero(eltype(A))))
659+
# return eigen!(_eigencopy_oftype(A, T))
660+
# end
661+
# function LinearAlgebra.eigen(A::Hermitian{<:Complex})
662+
# T = typeof(sqrt(zero(eltype(A))))
663+
# return eigen!(_eigencopy_oftype(A, T))
664+
# end
665+
# function LinearAlgebra.eigen(A::Hermitian)
666+
# T = typeof(sqrt(zero(eltype(A))))
667+
# return eigen!(_eigencopy_oftype(A, T))
668+
# end
666669

667670
# Aux (should go somewhere else at some point)
668671
function LinearAlgebra.givensAlgorithm(f::Real, g::Real)

test/eigenselfadjoint.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,11 @@ using Test, GenericLinearAlgebra, LinearAlgebra, Quaternions
164164
@test eigen(A).values == diag(A)
165165
end
166166
end
167+
168+
if VERSION >= v"1.11"
169+
@testset "Method ambiguity in eigen with Julia 1.11 #141" begin
170+
M = Hermitian(Tridiagonal(ones(ComplexF64, 2), ones(ComplexF64, 3), ones(ComplexF64, 2)))
171+
@test eigen(M).values Float64.(eigen(big.(M)).values)
172+
end
173+
end
167174
end

0 commit comments

Comments
 (0)