Skip to content

Commit fb56bbc

Browse files
authored
More verbosity (and other) fixes for v9 (#116)
* more verbosity fixes for v9 * prepare patch version update
1 parent 15988e1 commit fb56bbc

File tree

11 files changed

+105
-76
lines changed

11 files changed

+105
-76
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "KrylovKit"
22
uuid = "0b1a1467-8014-51b9-945f-bf0ae24f4b77"
33
authors = ["Jutho Haegeman"]
4-
version = "0.9.2"
4+
version = "0.9.3"
55

66
[deps]
77
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

src/eigsolve/arnoldi.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ function _schursolve(A, x₀, howmany::Int, which::Selector, alg::Arnoldi)
342342
numiter = 1
343343
# initialize arnoldi factorization
344344
iter = ArnoldiIterator(A, x₀, alg.orth)
345-
fact = initialize(iter; verbosity=alg.verbosity - EACHITERATION_LEVEL)
345+
fact = initialize(iter; verbosity=alg.verbosity)
346346
numops = 1
347347
sizehint!(fact, krylovdim)
348348
β = normres(fact)
@@ -398,7 +398,7 @@ function _schursolve(A, x₀, howmany::Int, which::Selector, alg::Arnoldi)
398398
end
399399

400400
if K < krylovdim # expand
401-
fact = expand!(iter, fact; verbosity=alg.verbosity - EACHITERATION_LEVEL)
401+
fact = expand!(iter, fact; verbosity=alg.verbosity)
402402
numops += 1
403403
else # shrink
404404
numiter == maxiter && break
@@ -430,7 +430,7 @@ function _schursolve(A, x₀, howmany::Int, which::Selector, alg::Arnoldi)
430430
B[keep + 1] = scale!!(r, 1 / normres(fact))
431431

432432
# Shrink Arnoldi factorization
433-
fact = shrink!(fact, keep; verbosity=alg.verbosity - EACHITERATION_LEVEL)
433+
fact = shrink!(fact, keep; verbosity=alg.verbosity)
434434
numiter += 1
435435
end
436436
end

src/eigsolve/golubye.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ function geneigsolve(f, x₀, howmany::Int, which::Selector, alg::GolubYe)
105105
resize!(normresiduals, 0)
106106
while converged < K
107107
z = view(Z, :, p[converged + 1])
108-
v = mul!(zerovector(vold), V, z)
108+
v = unproject!!(zerovector(vold), V, z)
109109
av, bv = genapply(f, v)
110110
numops += 1
111111
ρ = checkhermitian(inner(v, av)) / checkposdef(inner(v, bv))
@@ -129,7 +129,7 @@ function geneigsolve(f, x₀, howmany::Int, which::Selector, alg::GolubYe)
129129
elseif numiter == maxiter
130130
for k in (converged + 1):howmany
131131
z = view(Z, :, p[k])
132-
v = mul!(zerovector(vold), V, z)
132+
v = unproject!!(zerovector(vold), V, z)
133133
av, bv = genapply(f, v)
134134
numops += 1
135135
ρ = checkhermitian(inner(v, av)) / checkposdef(inner(v, bv))

src/eigsolve/lanczos.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ function eigsolve(A, x₀, howmany::Int, which::Selector, alg::Lanczos;
1313

1414
# Initialize Lanczos factorization
1515
iter = LanczosIterator(A, x₀, alg.orth)
16-
fact = initialize(iter; verbosity=alg.verbosity - EACHITERATION_LEVEL)
16+
fact = initialize(iter; verbosity=alg.verbosity)
1717
numops = 1
1818
numiter = 1
1919
sizehint!(fact, krylovdim)
@@ -72,7 +72,7 @@ function eigsolve(A, x₀, howmany::Int, which::Selector, alg::Lanczos;
7272
end
7373

7474
if K < krylovdim # expand Krylov factorization
75-
fact = expand!(iter, fact; verbosity=alg.verbosity - EACHITERATION_LEVEL)
75+
fact = expand!(iter, fact; verbosity=alg.verbosity)
7676
numops += 1
7777
else ## shrink and restart
7878
if numiter == maxiter
@@ -108,7 +108,7 @@ function eigsolve(A, x₀, howmany::Int, which::Selector, alg::Lanczos;
108108
B[keep + 1] = scale!!(r, 1 / β)
109109

110110
# Shrink Lanczos factorization
111-
fact = shrink!(fact, keep; verbosity=alg.verbosity - EACHITERATION_LEVEL)
111+
fact = shrink!(fact, keep; verbosity=alg.verbosity)
112112
numiter += 1
113113
end
114114
end

src/eigsolve/svdsolve.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ function svdsolve(A, x₀, howmany::Int, which::Symbol, alg::GKL;
157157
numiter = 1
158158
# initialize GKL factorization
159159
iter = GKLIterator(A, x₀, alg.orth)
160-
fact = initialize(iter; verbosity=alg.verbosity - EACHITERATION_LEVEL)
160+
fact = initialize(iter; verbosity=alg.verbosity)
161161
numops = 2
162162
sizehint!(fact, krylovdim)
163163
β = normres(fact)
@@ -214,7 +214,7 @@ function svdsolve(A, x₀, howmany::Int, which::Symbol, alg::GKL;
214214
end
215215

216216
if K < krylovdim # expand
217-
fact = expand!(iter, fact; verbosity=alg.verbosity - EACHITERATION_LEVEL)
217+
fact = expand!(iter, fact; verbosity=alg.verbosity)
218218
numops += 2
219219
else ## shrink and restart
220220
if numiter == maxiter
@@ -267,7 +267,7 @@ function svdsolve(A, x₀, howmany::Int, which::Symbol, alg::GKL;
267267
fact.βs[j] = H[j + 1, j]
268268
end
269269
# Shrink GKL factorization
270-
fact = shrink!(fact, keep; verbosity=alg.verbosity - EACHITERATION_LEVEL)
270+
fact = shrink!(fact, keep; verbosity=alg.verbosity)
271271
numiter += 1
272272
end
273273
end

src/factorizations/arnoldi.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ function Base.iterate(iter::ArnoldiIterator, state)
133133
end
134134
end
135135

136-
function initialize(iter::ArnoldiIterator; verbosity::Int=0)
136+
function initialize(iter::ArnoldiIterator; verbosity::Int=KrylovDefaults.verbosity[])
137137
# initialize without using eltype
138138
x₀ = iter.x₀
139139
β₀ = norm(x₀)
@@ -169,12 +169,13 @@ function initialize(iter::ArnoldiIterator; verbosity::Int=0)
169169
end
170170
V = OrthonormalBasis([v])
171171
H = T[α, β]
172-
if verbosity > 0
172+
if verbosity > EACHITERATION_LEVEL
173173
@info "Arnoldi initiation at dimension 1: subspace normres = $(normres2string(β))"
174174
end
175175
return state = ArnoldiFactorization(1, V, H, r)
176176
end
177-
function initialize!(iter::ArnoldiIterator, state::ArnoldiFactorization; verbosity::Int=0)
177+
function initialize!(iter::ArnoldiIterator, state::ArnoldiFactorization;
178+
verbosity::Int=KrylovDefaults.verbosity[])
178179
x₀ = iter.x₀
179180
V = state.V
180181
while length(V) > 1
@@ -189,12 +190,13 @@ function initialize!(iter::ArnoldiIterator, state::ArnoldiFactorization; verbosi
189190
state.k = 1
190191
push!(H, α, β)
191192
state.r = r
192-
if verbosity > 0
193+
if verbosity > EACHITERATION_LEVEL
193194
@info "Arnoldi initiation at dimension 1: subspace normres = $(normres2string(β))"
194195
end
195196
return state
196197
end
197-
function expand!(iter::ArnoldiIterator, state::ArnoldiFactorization; verbosity::Int=0)
198+
function expand!(iter::ArnoldiIterator, state::ArnoldiFactorization;
199+
verbosity::Int=KrylovDefaults.verbosity[])
198200
state.k += 1
199201
k = state.k
200202
V = state.V
@@ -207,12 +209,12 @@ function expand!(iter::ArnoldiIterator, state::ArnoldiFactorization; verbosity::
207209
r, β = arnoldirecurrence!!(iter.operator, V, view(H, (m + 1):(m + k)), iter.orth)
208210
H[m + k + 1] = β
209211
state.r = r
210-
if verbosity > 0
212+
if verbosity > EACHITERATION_LEVEL
211213
@info "Arnoldi expansion to dimension $k: subspace normres = $(normres2string(β))"
212214
end
213215
return state
214216
end
215-
function shrink!(state::ArnoldiFactorization, k; verbosity::Int=0)
217+
function shrink!(state::ArnoldiFactorization, k; verbosity::Int=KrylovDefaults.verbosity[])
216218
length(state) <= k && return state
217219
V = state.V
218220
H = state.H
@@ -223,7 +225,7 @@ function shrink!(state::ArnoldiFactorization, k; verbosity::Int=0)
223225
resize!(H, (k * k + 3 * k) >> 1)
224226
state.k = k
225227
β = normres(state)
226-
if verbosity > 0
228+
if verbosity > EACHITERATION_LEVEL
227229
@info "Arnoldi reduction to dimension $k: subspace normres = $(normres2string(β))"
228230
end
229231
state.r = scale!!(r, β)

src/factorizations/gkl.jl

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ function Base.iterate(iter::GKLIterator, state::GKLFactorization)
183183
end
184184
end
185185

186-
function initialize(iter::GKLIterator; verbosity::Int=0)
186+
function initialize(iter::GKLIterator; verbosity::Int=KrylovDefaults.verbosity[])
187187
# initialize without using eltype
188188
u₀ = iter.u₀
189189
β₀ = norm(u₀)
@@ -211,12 +211,13 @@ function initialize(iter::GKLIterator; verbosity::Int=0)
211211
S = real(T)
212212
αs = S[α]
213213
βs = S[β]
214-
if verbosity > 0
214+
if verbosity > EACHITERATION_LEVEL
215215
@info "GKL initiation at dimension 1: subspace normres = $(normres2string(β))"
216216
end
217217
return GKLFactorization(1, U, V, αs, βs, r)
218218
end
219-
function initialize!(iter::GKLIterator, state::GKLFactorization; verbosity::Int=0)
219+
function initialize!(iter::GKLIterator, state::GKLFactorization;
220+
verbosity::Int=KrylovDefaults.verbosity[])
220221
U = state.U
221222
while length(U) > 1
222223
pop!(U)
@@ -238,12 +239,13 @@ function initialize!(iter::GKLIterator, state::GKLFactorization; verbosity::Int=
238239
push!(αs, α)
239240
push!(βs, β)
240241
state.r = r
241-
if verbosity > 0
242+
if verbosity > EACHITERATION_LEVEL
242243
@info "GKL initiation at dimension 1: subspace normres = $(normres2string(β))"
243244
end
244245
return state
245246
end
246-
function expand!(iter::GKLIterator, state::GKLFactorization; verbosity::Int=0)
247+
function expand!(iter::GKLIterator, state::GKLFactorization;
248+
verbosity::Int=KrylovDefaults.verbosity[])
247249
βold = normres(state)
248250
U = state.U
249251
V = state.V
@@ -259,12 +261,12 @@ function expand!(iter::GKLIterator, state::GKLFactorization; verbosity::Int=0)
259261

260262
state.k += 1
261263
state.r = r
262-
if verbosity > 0
264+
if verbosity > EACHITERATION_LEVEL
263265
@info "GKL expension to dimension $(state.k): subspace normres = $(normres2string(β))"
264266
end
265267
return state
266268
end
267-
function shrink!(state::GKLFactorization, k; verbosity::Int=0)
269+
function shrink!(state::GKLFactorization, k; verbosity::Int=KrylovDefaults.verbosity[])
268270
length(state) == length(state.V) ||
269271
error("we cannot shrink GKLFactorization without keeping vectors")
270272
length(state) <= k && return state
@@ -280,7 +282,7 @@ function shrink!(state::GKLFactorization, k; verbosity::Int=0)
280282
resize!(state.βs, k)
281283
state.k = k
282284
β = normres(state)
283-
if verbosity > 0
285+
if verbosity > EACHITERATION_LEVEL
284286
@info "GKL reduction to dimension $k: subspace normres = $(normres2string(β))"
285287
end
286288
state.r = scale!!(r, β)

src/factorizations/lanczos.jl

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ function warn_nonhermitian(α, β₁, β₂)
172172
return nothing
173173
end
174174

175-
function initialize(iter::LanczosIterator; verbosity::Int=0)
175+
function initialize(iter::LanczosIterator; verbosity::Int=KrylovDefaults.verbosity[])
176176
# initialize without using eltype
177177
x₀ = iter.x₀
178178
β₀ = norm(x₀)
@@ -191,33 +191,32 @@ function initialize(iter::LanczosIterator; verbosity::Int=0)
191191
βold = norm(r)
192192
r = add!!(r, v, -α) # should we use real(α) here?
193193
β = norm(r)
194-
warn_nonhermitian(α, zero(β), β)
195194
# possibly reorthogonalize
196195
if iter.orth isa Union{ClassicalGramSchmidt2,ModifiedGramSchmidt2}
197196
= inner(v, r)
198197
α +=
199198
r = add!!(r, v, -dα) # should we use real(dα) here?
200199
β = norm(r)
201-
warn_nonhermitian(α, zero(β), β)
202200
elseif iter.orth isa Union{ClassicalGramSchmidtIR,ModifiedGramSchmidtIR}
203201
while eps(one(β)) < β < iter.orth.η * βold
204202
βold = β
205203
= inner(v, r)
206204
α +=
207205
r = add!!(r, v, -dα) # should we use real(dα) here?
208206
β = norm(r)
209-
warn_nonhermitian(α, zero(β), β)
210207
end
211208
end
209+
verbosity >= WARN_LEVEL && warn_nonhermitian(α, zero(β), β)
212210
V = OrthonormalBasis([v])
213211
αs = [real(α)]
214212
βs = [β]
215-
if verbosity > 0
213+
if verbosity > EACHITERATION_LEVEL
216214
@info "Lanczos initiation at dimension 1: subspace normres = $(normres2string(β))"
217215
end
218216
return LanczosFactorization(1, V, αs, βs, r)
219217
end
220-
function initialize!(iter::LanczosIterator, state::LanczosFactorization; verbosity::Int=0)
218+
function initialize!(iter::LanczosIterator, state::LanczosFactorization;
219+
verbosity::Int=KrylovDefaults.verbosity[])
221220
x₀ = iter.x₀
222221
V = state.V
223222
while length(V) > 1
@@ -230,24 +229,25 @@ function initialize!(iter::LanczosIterator, state::LanczosFactorization; verbosi
230229
w = apply(iter.operator, V[1])
231230
r, α = orthogonalize!!(w, V[1], iter.orth)
232231
β = norm(r)
233-
warn_nonhermitian(α, zero(β), β)
232+
verbosity >= WARN_LEVEL && warn_nonhermitian(α, zero(β), β)
234233

235234
state.k = 1
236235
push!(αs, real(α))
237236
push!(βs, β)
238237
state.r = r
239-
if verbosity > 0
238+
if verbosity > EACHITERATION_LEVEL
240239
@info "Lanczos initiation at dimension 1: subspace normres = $(normres2string(β))"
241240
end
242241
return state
243242
end
244-
function expand!(iter::LanczosIterator, state::LanczosFactorization; verbosity::Int=0)
243+
function expand!(iter::LanczosIterator, state::LanczosFactorization;
244+
verbosity::Int=KrylovDefaults.verbosity[])
245245
βold = normres(state)
246246
V = state.V
247247
r = state.r
248248
V = push!(V, scale!!(r, 1 / βold))
249249
r, α, β = lanczosrecurrence(iter.operator, V, βold, iter.orth)
250-
warn_nonhermitian(α, βold, β)
250+
verbosity >= WARN_LEVEL && warn_nonhermitian(α, βold, β)
251251

252252
αs = push!(state.αs, real(α))
253253
βs = push!(state.βs, β)
@@ -256,12 +256,12 @@ function expand!(iter::LanczosIterator, state::LanczosFactorization; verbosity::
256256

257257
state.k += 1
258258
state.r = r
259-
if verbosity > 0
259+
if verbosity > EACHITERATION_LEVEL
260260
@info "Lanczos expansion to dimension $(state.k): subspace normres = $(normres2string(β))"
261261
end
262262
return state
263263
end
264-
function shrink!(state::LanczosFactorization, k; verbosity::Int=0)
264+
function shrink!(state::LanczosFactorization, k; verbosity::Int=KrylovDefaults.verbosity[])
265265
length(state) == length(state.V) ||
266266
error("we cannot shrink LanczosFactorization without keeping Lanczos vectors")
267267
length(state) <= k && return state
@@ -274,7 +274,7 @@ function shrink!(state::LanczosFactorization, k; verbosity::Int=0)
274274
resize!(state.βs, k)
275275
state.k = k
276276
β = normres(state)
277-
if verbosity > 0
277+
if verbosity > EACHITERATION_LEVEL
278278
@info "Lanczos reduction to dimension $k: subspace normres = $(normres2string(β))"
279279
end
280280
state.r = scale!!(r, β)

src/linsolve/gmres.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ function linsolve(operator, b, x₀, alg::GMRES, a₀::Number=0, a₁::Number=1;
3737
numops = 1 # operator has been applied once to determine T and r
3838

3939
iter = ArnoldiIterator(operator, r, alg.orth)
40-
fact = initialize(iter)
40+
fact = initialize(iter; verbosity=0)
4141
sizehint!(fact, alg.krylovdim)
4242
numops += 1 # start applies operator once
4343

@@ -56,7 +56,7 @@ function linsolve(operator, b, x₀, alg::GMRES, a₀::Number=0, a₁::Number=1;
5656
if alg.verbosity >= EACHITERATION_LEVEL
5757
@info "GMRES linsolve in iteration $numiter; step $k: normres = $(normres2string(β))"
5858
end
59-
fact = expand!(iter, fact)
59+
fact = expand!(iter, fact; verbosity=0)
6060
numops += 1 # expand! applies the operator once
6161
k = length(fact)
6262
H = rayleighquotient(fact)
@@ -132,6 +132,6 @@ function linsolve(operator, b, x₀, alg::GMRES, a₀::Number=0, a₁::Number=1;
132132

133133
# Restart Arnoldi factorization with new r
134134
iter = ArnoldiIterator(operator, r, alg.orth)
135-
fact = initialize!(iter, fact)
135+
fact = initialize!(iter, fact; verbosity=0)
136136
end
137137
end

src/matrixfun/expintegrator.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ function expintegrator(A, t::Number, u::Tuple, alg::Union{Lanczos,Arnoldi})
172172
else
173173
iter = ArnoldiIterator(A, w[p + 1], alg.orth)
174174
end
175-
fact = initialize(iter; verbosity=alg.verbosity - 2)
175+
fact = initialize(iter; verbosity=alg.verbosity)
176176
numops += 1
177177
sizehint!(fact, krylovdim)
178178

@@ -283,7 +283,7 @@ function expintegrator(A, t::Number, u::Tuple, alg::Union{Lanczos,Arnoldi})
283283
end
284284
end
285285
if K < krylovdim
286-
fact = expand!(iter, fact; verbosity=alg.verbosity - EACHITERATION_LEVEL)
286+
fact = expand!(iter, fact; verbosity=alg.verbosity)
287287
numops += 1
288288
else
289289
for j in 1:p
@@ -314,7 +314,7 @@ function expintegrator(A, t::Number, u::Tuple, alg::Union{Lanczos,Arnoldi})
314314
else
315315
iter = ArnoldiIterator(A, w[p + 1], alg.orth)
316316
end
317-
fact = initialize!(iter, fact; verbosity=alg.verbosity - EACHITERATION_LEVEL)
317+
fact = initialize!(iter, fact; verbosity=alg.verbosity)
318318
numops += 1
319319
numiter += 1
320320
end

0 commit comments

Comments
 (0)