Broken `eigen` in DoubleFloats?

I wanted to try some additional precision in julia and I found the DoubleFloats package.

I ran the small example but received an error when using the eigen function

#using LinearAlgebra #did not change the result
using DoubleFloats

P = rand(Double64,10,10)
B = P + P'
svd(B) #works!
eigen(B) #does not work!

The error message that I received was

julia> DoubleFloats.eigen(B)
ERROR: MethodError: no method matching eigen!(::Matrix{Double64}; permute=true, scale=true, sortby=LinearAlgebra.eigsortby)
Closest candidates are:
  eigen!(::StridedMatrix{T}; permute, scale, sortby) where T<:Union{Float32, Float64} at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/eigen.jl:148
  eigen!(::StridedMatrix{T}; permute, scale, sortby) where T<:Union{ComplexF32, ComplexF64} at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/eigen.jl:171
  eigen!(::StridedMatrix{T}, ::StridedMatrix{T}; sortby) where T<:Union{Float32, Float64} at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/eigen.jl:427 got unsupported keyword arguments "permute", "scale"
  ...
Stacktrace:
 [1] eigen(A::Matrix{Double64}; permute::Bool, scale::Bool, sortby::typeof(LinearAlgebra.eigsortby))
   @ LinearAlgebra /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/eigen.jl:237
 [2] eigen(A::Matrix{Double64})
   @ LinearAlgebra /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/eigen.jl:235
 [3] top-level scope
   @ REPL[5]:1

You can get this functionality by adding the GenericSchur package to your project. (It provides methods for eigen-analysis with generic floating point types.) It is not brought in automatically because of possible problems associated with type piracy.

2 Likes