diff --git a/src/eigenSelfAdjoint.jl b/src/eigenSelfAdjoint.jl index d8008d3..fb683ca 100644 --- a/src/eigenSelfAdjoint.jl +++ b/src/eigenSelfAdjoint.jl @@ -633,29 +633,35 @@ eigen2(A::Hermitian, tol = eps(float(real(one(eltype(A)))))) = eigen2!(copy(A), # First method of each type here is identical to the method defined in # LinearAlgebra but is needed for disambiguation +const _eigencopy_oftype = if VERSION >= v"1.9" + LinearAlgebra.eigencopy_oftype +else + LinearAlgebra.copy_oftype +end + function LinearAlgebra.eigvals(A::Hermitian{<:Real}) T = typeof(sqrt(zero(eltype(A)))) - return eigvals!(LinearAlgebra.copy_oftype(A, T)) + return eigvals!(_eigencopy_oftype(A, T)) end function LinearAlgebra.eigvals(A::Hermitian{<:Complex}) T = typeof(sqrt(zero(eltype(A)))) - return eigvals!(LinearAlgebra.copy_oftype(A, T)) + return eigvals!(_eigencopy_oftype(A, T)) end function LinearAlgebra.eigvals(A::Hermitian) T = typeof(sqrt(zero(eltype(A)))) - return eigvals!(LinearAlgebra.copy_oftype(A, T)) + return eigvals!(_eigencopy_oftype(A, T)) end function LinearAlgebra.eigen(A::Hermitian{<:Real}) T = typeof(sqrt(zero(eltype(A)))) - return eigen!(LinearAlgebra.copy_oftype(A, T)) + return eigen!(_eigencopy_oftype(A, T)) end function LinearAlgebra.eigen(A::Hermitian{<:Complex}) T = typeof(sqrt(zero(eltype(A)))) - return eigen!(LinearAlgebra.copy_oftype(A, T)) + return eigen!(_eigencopy_oftype(A, T)) end function LinearAlgebra.eigen(A::Hermitian) T = typeof(sqrt(zero(eltype(A)))) - return eigen!(LinearAlgebra.copy_oftype(A, T)) + return eigen!(_eigencopy_oftype(A, T)) end # Aux (should go somewhere else at some point) diff --git a/test/eigenselfadjoint.jl b/test/eigenselfadjoint.jl index e6f6c4f..9565647 100644 --- a/test/eigenselfadjoint.jl +++ b/test/eigenselfadjoint.jl @@ -156,4 +156,12 @@ using Test, GenericLinearAlgebra, LinearAlgebra, Quaternions @test abs.(eigen(A).vectors) == abs.(eigen(T).vectors) == abs.(eigen(A; sortby=LinearAlgebra.eigsortby).vectors) == abs.(eigen(T; sortby=LinearAlgebra.eigsortby).vectors) end end + + if VERSION >= v"1.9" + @testset "#139" begin + A = Hermitian(Diagonal([1.0, 2.0])) + @test eigvals(A) == diag(A) + @test eigen(A).values == diag(A) + end + end end