Skip to content

Commit

Permalink
Add info message to slow sparse diagonalization
Browse files Browse the repository at this point in the history
commit ba5ebec
Author: David Plankensteiner <david.plankensteiner@uibk.ac.at>
Date:   Mon Jul 9 17:15:00 2018 +0200

    Suppress info in tests

commit e36f652
Author: David Plankensteiner <david.plankensteiner@uibk.ac.at>
Date:   Mon Jul 9 17:13:44 2018 +0200

    Print info when sparse diagonalization is used
  • Loading branch information
david-pl committed Jul 9, 2018
1 parent 7f4f64d commit 946c39e
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 8 deletions.
8 changes: 6 additions & 2 deletions src/spectralanalysis.jl
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,14 @@ end
"""
For sparse operators by default it only returns the 6 lowest eigenvalues.
"""
function eigenstates(op::SparseOperator, n::Int=6; warning=true, kwargs...)
function eigenstates(op::SparseOperator, n::Int=6; warning::Bool=true,
info::Bool=true, kwargs...)
b = basis(op)
# TODO: Change to sparese-Hermitian specific algorithm if more efficient
ishermitian(op) || (warning && warn(nonhermitian_warning))
info && println("INFO: Defaulting to sparse diagonalization.
If storing the full operator is possible, it might be faster to do
eigenstates(full(op)). Set info=false to turn off this message.")
D, V = eigs(op.data; which=:SR, nev=n, kwargs...)
states = [Ket(b, V[:, k]) for k=1:length(D)]
D, states
Expand Down Expand Up @@ -84,7 +88,7 @@ end
"""
For sparse operators by default it only returns the 6 lowest eigenvalues.
"""
eigenenergies(op::SparseOperator, n::Int=6; warning=true) = eigenstates(op, n; warning=warning)[1]
eigenenergies(op::SparseOperator, n::Int=6; kwargs...) = eigenstates(op, n; kwargs...)[1]


arithmetic_unary_error = operators.arithmetic_unary_error
Expand Down
12 changes: 6 additions & 6 deletions test/test_spectralanalysis.jl
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,15 @@ d = [-3, -2.6, -0.1, 0.0, 0.6]
D = DenseOperator(b, diagm(d))
Dsp = sparse(D)
@test eigenenergies(D) d
@test eigenenergies(Dsp, 3) d[1:3]
@test eigenenergies(Dsp, 3, info=false) d[1:3]

R = U*D*dagger(U)
Rsp = sparse(R)
@test eigenenergies((R+dagger(R))/2) d
@test eigenenergies((Rsp+dagger(Rsp))/2, 3) d[1:3]
@test eigenenergies((Rsp+dagger(Rsp))/2, 3; info=false) d[1:3]

E, states = eigenstates((R+dagger(R))/2, 3)
Esp, states_sp = eigenstates((Rsp+dagger(Rsp))/2, 3)
Esp, states_sp = eigenstates((Rsp+dagger(Rsp))/2, 3, info=false)
for i=1:3
@test E[i] d[i]
@test Esp[i] d[i]
Expand All @@ -53,15 +53,15 @@ d = [-3+0.2im, -2.6-0.1im, -0.1+0.5im, 0.0, 0.6+0.3im]
D = DenseOperator(b, diagm(d))
Dsp = sparse(D)
@test eigenenergies(D; warning=false) d
@test eigenenergies(Dsp, 3; warning=false) d[1:3]
@test eigenenergies(Dsp, 3; warning=false, info=false) d[1:3]

R = U*D*dagger(U)
Rsp = sparse(R)
@test eigenenergies(R; warning=false) d
@test eigenenergies(Rsp, 3; warning=false) d[1:3]
@test eigenenergies(Rsp, 3; warning=false, info=false) d[1:3]

E, states = eigenstates(R, 3; warning=false)
Esp, states_sp = eigenstates(Rsp, 3; warning=false)
Esp, states_sp = eigenstates(Rsp, 3; warning=false, info=false)
for i=1:3
@test E[i] d[i]
@test Esp[i] d[i]
Expand Down

0 comments on commit 946c39e

Please sign in to comment.