Skip to content

Commit 1c7e84f

Browse files
committed
more cleanup and incorporate safe_svd
1 parent c0c501d commit 1c7e84f

2 files changed

Lines changed: 21 additions & 27 deletions

File tree

src/implementations/svd.jl

Lines changed: 20 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -155,46 +155,40 @@ for (f, f_lapack!, Alg) in (
155155
$f_svd_vals!(driver, A, S; kwargs...)
156156
@inline $f_svd!(::DefaultDriver, A, U, S, Vᴴ; kwargs...) =
157157
$f_svd!($(Symbol(:default_, f, :_driver))(A), A, U, S, Vᴴ; kwargs...)
158-
@inline $f_svd_full!(::DefaultDriver, A, S; kwargs...) =
159-
$f_svd_full!($(Symbol(:default_, f, :_driver)), A, S; kwargs...)
158+
@inline $f_svd_full!(::DefaultDriver, A, U, S, Vᴴ; kwargs...) =
159+
$f_svd_full!($(Symbol(:default_, f, :_driver))(A), A, U, S, Vᴴ; kwargs...)
160160
@inline $f_svd_vals!(::DefaultDriver, A, S; kwargs...) =
161-
$f_svd_vals!($(Symbol(:default_, f, :_driver)), A, S; kwargs...)
161+
$f_svd_vals!($(Symbol(:default_, f, :_driver))(A), A, S; kwargs...)
162162
end
163163

164164
# Implementation
165165
@eval begin
166-
function $f_svd!(
167-
driver::Driver, A::AbstractMatrix, U::AbstractMatrix, S::AbstractMatrix, Vᴴ::AbstractMatrix;
168-
fixgauge::Bool = true, kwargs...
169-
)
170-
supports_svd(driver, $(QuoteNode(f))) || throw(ArgumentError(lazy"$driver does not provide $f"))
166+
function $f_svd!(driver::Driver, A, U, S, Vᴴ; fixgauge::Bool = true, kwargs...)
167+
supports_svd(driver, $(QuoteNode(f))) ||
168+
throw(ArgumentError(LazyString("driver ", driver, " does not provide `$($(QuoteNode(f_lapack!)))`")))
171169
isempty(A) && return one!(U), zero!(S), one!(Vᴴ)
172-
$f_lapack!(driver, A, view(S, 1:minmn, 1), U, Vᴴ; kwargs...)
170+
$f_lapack!(driver, A, diagview(S), U, Vᴴ; kwargs...)
173171
fixgauge && gaugefix!(svd_compact!, U, Vᴴ)
174172
return U, S, Vᴴ
175173
end
176-
function $f_svd_full!(
177-
driver::Driver, A::AbstractMatrix, U::AbstractMatrix, S::AbstractMatrix, Vᴴ::AbstractMatrix;
178-
fixgauge::Bool = true, kwargs...
179-
)
180-
supports_svd_full(driver, $(QuoteNode(f))) || throw(ArgumentError(lazy"$driver does not provide $f"))
174+
function $f_svd_full!(driver::Driver, A, U, S, Vᴴ; fixgauge::Bool = true, kwargs...)
175+
supports_svd_full(driver, $(QuoteNode(f))) ||
176+
throw(ArgumentError(LazyString("driver ", driver, " does not provide `$($(QuoteNode(f_lapack!)))`")))
181177
isempty(A) && return one!(U), zero!(S), one!(Vᴴ)
182178
zero!(S)
183179
minmn = min(size(A)...)
184180
$f_lapack!(driver, A, view(S, 1:minmn, 1), U, Vᴴ; kwargs...)
185181
diagview(S) .= view(S, 1:minmn, 1)
186-
view(S, 2:minmn, 1) .= zero(eltype(S))
182+
zero!(view(S, 2:minmn, 1))
187183
fixgauge && gaugefix!(svd_full!, U, Vᴴ)
188184
return U, S, Vᴴ
189185
end
190-
function $f_svd_vals!(
191-
driver::Driver, A::AbstractMatrix, S::AbstractVector;
192-
fixgauge::Bool = true, kwargs...
193-
)
194-
supports_svd(driver, $(QuoteNode(f))) || throw(ArgumentError(lazy"$driver does not provide $f"))
186+
function $f_svd_vals!(driver::Driver, A, S; fixgauge::Bool = true, kwargs...)
187+
supports_svd(driver, $(QuoteNode(f))) ||
188+
throw(ArgumentError(LazyString("driver ", driver, " does not provide `$($(QuoteNode(f_lapack!)))`")))
195189
isempty(A) && return zero!(S)
196190
U, Vᴴ = similar(A, (0, 0)), similar(A, (0, 0))
197-
$f_lapack!(driver, A, view(S, 1:minmn, 1), U, Vᴴ; kwargs...)
191+
$f_lapack!(driver, A, S, U, Vᴴ; kwargs...)
198192
return S
199193
end
200194
end
@@ -461,19 +455,19 @@ end
461455

462456
# Deprecations
463457
# ------------
464-
for algtype in (:DivideAndConquer, :QRIteration, :Jacobi, :Bisection)
465-
algtype = Symbol(:LAPACK_, algtype)
458+
for algtype in (:SafeDivideAndConquer, :DivideAndConquer, :QRIteration, :Jacobi, :Bisection)
459+
lapack_algtype = Symbol(:LAPACK_, algtype)
466460
@eval begin
467461
Base.@deprecate(
468-
svd_compact!(A, USVᴴ, alg::$algtype),
462+
svd_compact!(A, USVᴴ, alg::$lapack_algtype),
469463
svd_compact!(A, USVᴴ, $algtype(; driver = LAPACK(), alg.kwargs...))
470464
)
471465
Base.@deprecate(
472-
svd_full!(A, USVᴴ, alg::$algtype),
466+
svd_full!(A, USVᴴ, alg::$lapack_algtype),
473467
svd_full!(A, USVᴴ, $algtype(; driver = LAPACK(), alg.kwargs...))
474468
)
475469
Base.@deprecate(
476-
svd_vals!(A, S, alg::$algtype),
470+
svd_vals!(A, S, alg::$lapack_algtype),
477471
svd_vals!(A, S, $algtype(; driver = LAPACK(), alg.kwargs...))
478472
)
479473
end

src/interface/decompositions.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ The `fixgauge` keyword can be used to toggle whether or not to fix the gauge of
139139
@algdef Bisection
140140
@algdef Jacobi
141141

142-
for f in (:divide_and_conquer, :qr_iteration, :bisection, :jacobi)
142+
for f in (:safe_divide_and_conquer, :divide_and_conquer, :qr_iteration, :bisection, :jacobi)
143143
default_f_driver = Symbol(:default_, f, :_driver)
144144
@eval begin
145145
$default_f_driver(A) = $default_f_driver(typeof(A))

0 commit comments

Comments
 (0)