Skip to content

Commit ce43787

Browse files
committed
More in-place
1 parent 969b49e commit ce43787

File tree

1 file changed

+45
-35
lines changed

1 file changed

+45
-35
lines changed

src/factorizations/orthnull.jl

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
using MatrixAlgebraKit:
22
MatrixAlgebraKit,
3-
left_polar,
4-
lq_compact,
5-
qr_compact,
6-
right_polar,
3+
left_orth_polar!,
4+
left_orth_qr!,
5+
left_orth_svd!,
6+
left_polar!,
7+
lq_compact!,
8+
qr_compact!,
9+
right_orth_lq!,
10+
right_orth_polar!,
11+
right_orth_svd!,
12+
right_polar!,
713
select_algorithm,
8-
svd_compact
14+
svd_compact!
915

10-
function MatrixAlgebraKit.left_orth(
16+
function MatrixAlgebraKit.left_orth!(
1117
A::AbstractBlockSparseMatrix;
1218
trunc=nothing,
1319
kind=isnothing(trunc) ? :qr : :svd,
@@ -19,30 +25,32 @@ function MatrixAlgebraKit.left_orth(
1925
throw(ArgumentError("truncation not supported for `left_orth` with `kind=$kind`"))
2026
end
2127
if kind == :qr
22-
return left_orth_qr(A, alg_qr)
28+
return left_orth_qr!(A, alg_qr)
2329
elseif kind == :polar
24-
return left_orth_polar(A, alg_polar)
30+
return left_orth_polar!(A, alg_polar)
2531
elseif kind == :svd
26-
return left_orth_svd(A, alg_svd, trunc)
32+
return left_orth_svd!(A, alg_svd, trunc)
2733
else
2834
throw(ArgumentError("`left_orth` received unknown value `kind = $kind`"))
2935
end
3036
end
31-
function left_orth_qr(A, alg)
32-
alg′ = select_algorithm(qr_compact, A, alg)
33-
return qr_compact(A, alg′)
37+
function MatrixAlgebraKit.left_orth_qr!(A::AbstractBlockSparseMatrix, alg)
38+
alg′ = select_algorithm(qr_compact!, A, alg)
39+
return qr_compact!(A, alg′)
3440
end
35-
function left_orth_polar(A, alg)
36-
alg′ = select_algorithm(left_polar, A, alg)
37-
return left_polar(A, alg′)
41+
function MatrixAlgebraKit.left_orth_polar!(A::AbstractBlockSparseMatrix, alg)
42+
alg′ = select_algorithm(left_polar!, A, alg)
43+
return left_polar!(A, alg′)
3844
end
39-
function left_orth_svd(A, alg, trunc::Nothing=nothing)
40-
alg′ = select_algorithm(svd_compact, A, alg)
41-
U, S, Vᴴ = svd_compact(A, alg′)
45+
function MatrixAlgebraKit.left_orth_svd!(
46+
A::AbstractBlockSparseMatrix, alg, trunc::Nothing=nothing
47+
)
48+
alg′ = select_algorithm(svd_compact!, A, alg)
49+
U, S, Vᴴ = svd_compact!(A, alg′)
4250
return U, S * Vᴴ
4351
end
4452

45-
function MatrixAlgebraKit.right_orth(
53+
function MatrixAlgebraKit.right_orth!(
4654
A::AbstractBlockSparseMatrix;
4755
trunc=nothing,
4856
kind=isnothing(trunc) ? :lq : :svd,
@@ -55,32 +63,34 @@ function MatrixAlgebraKit.right_orth(
5563
end
5664
if kind == :qr
5765
# TODO: Implement this.
58-
# return right_orth_lq(A, alg_lq)
59-
return right_orth_svd(A, alg_svd)
66+
# return right_orth_lq!(A, alg_lq)
67+
return right_orth_svd!(A, alg_svd)
6068
elseif kind == :polar
61-
return right_orth_polar(A, alg_polar)
69+
return right_orth_polar!(A, alg_polar)
6270
elseif kind == :svd
63-
return right_orth_svd(A, alg_svd, trunc)
71+
return right_orth_svd!(A, alg_svd, trunc)
6472
else
6573
throw(ArgumentError("`right_orth` received unknown value `kind = $kind`"))
6674
end
6775
end
68-
function right_orth_lq(A, alg)
76+
function MatrixAlgebraKit.right_orth_lq!(A::AbstractBlockSparseMatrix, alg)
6977
alg′ = select_algorithm(lq_compact, A, alg)
70-
return lq_compact(A, alg′)
78+
return lq_compact!(A, alg′)
7179
end
72-
function right_orth_polar(A, alg)
73-
alg′ = select_algorithm(right_polar, A, alg)
74-
return right_polar(A, alg′)
80+
function MatrixAlgebraKit.right_orth_polar!(A::AbstractBlockSparseMatrix, alg)
81+
alg′ = select_algorithm(right_polar!, A, alg)
82+
return right_polar!(A, alg′)
7583
end
76-
function right_orth_svd(A, alg, trunc::Nothing=nothing)
77-
alg′ = select_algorithm(svd_compact, A, alg)
78-
U, S, Vᴴ = svd_compact(A, alg′)
84+
function MatrixAlgebraKit.right_orth_svd!(
85+
A::AbstractBlockSparseMatrix, alg, trunc::Nothing=nothing
86+
)
87+
alg′ = select_algorithm(svd_compact!, A, alg)
88+
U, S, Vᴴ = svd_compact!(A, alg′)
7989
return U * S, Vᴴ
8090
end
81-
function right_orth_svd(A, alg, trunc)
82-
alg′ = select_algorithm(svd_compact, A, alg)
83-
alg_trunc = select_algorithm(svd_trunc, A, alg′; trunc)
84-
U, S, Vᴴ = svd_trunc(A, alg_trunc)
91+
function MatrixAlgebraKit.right_orth_svd!(A::AbstractBlockSparseMatrix, alg, trunc)
92+
alg′ = select_algorithm(svd_compact!, A, alg)
93+
alg_trunc = select_algorithm(svd_trunc!, A, alg′; trunc)
94+
U, S, Vᴴ = svd_trunc!(A, alg_trunc)
8595
return U * S, Vᴴ
8696
end

0 commit comments

Comments
 (0)