This actually seems to be a type instability issue in Base.eigs:
julia> @code_warntype eigs(A)
Variables:
A::SparseMatrixCSC{Float64,Int64}
Body:
begin
$(Expr(:line, 50, symbol("linalg/arnoldi.jl"), symbol("")))
GenSym(8) =
(top(ccall))(:jl_alloc_array_1d,(top(apply_type))(Base.Array,Any,1)::Type{Array{Any,1}},(top(svec))(Base.Any,Base.Int)::SimpleVector,Array{Any,1},0,0,0)::Array{Any,1}
GenSym(9) = GenSym(8)
return
(Base.LinAlg.__eigs#221__)(GenSym(9),A::SparseMatrixCSC{Float64,Int64})::Tuple
end::Tuple
julia> @code_warntype eigs(Symmetric(A))
Variables:
A::Symmetric{Float64,SparseMatrixCSC{Float64,Int64}}
Body:
begin
$(Expr(:line, 50, symbol("linalg/arnoldi.jl"), symbol("")))
GenSym(8) =
(top(ccall))(:jl_alloc_array_1d,(top(apply_type))(Base.Array,Any,1)::Type{Array{Any,1}},(top(svec))(Base.Any,Base.Int)::SimpleVector,Array{Any,1},0,0,0)::Array{Any,1}
GenSym(9) = GenSym(8)
return
(Base.LinAlg.__eigs#221__)(GenSym(9),A::Symmetric{Float64,SparseMatrixCSC{Float64,Int64}})::Tuple
end::Tuple
I can’t find anything on the issue tracker about it, so it might be a good
idea to file a new issue <https://github.com/JuliaLang/julia/issues/new>.
// t
On Saturday, November 7, 2015 at 5:25:30 PM UTC+1, David Gleich wrote:
I'm trying to get a type-stable output from a symmetric sparse eigenvalue
> problem.
>
> Any ideas why neither of these ideas work to give me a deterministic
> return of Array{Float64,1} ?
>
> n = 500; A = sparse(1:n-1,2:n,1.,n,n); A = A + A'
> @show issym(A)
> function myeig1(A::SparseMatrixCSC{Float64,Int64})
> d,V = eigs(A;tol=1e-4)
> return d
> end
>
> function myeig2(A::SparseMatrixCSC{Float64,Int64})
> d,V = eigs(Symmetric(A);tol=1e-4)
> return d
> end
>
> @code_warntype myeig1(A)
> @code_warntype myeig2(A)
>
> Thanks,
> David Gleich
>