11using 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
3036end
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′)
3440end
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′)
3844end
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ᴴ
4351end
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
6775end
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′)
7179end
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′)
7583end
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ᴴ
8090end
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ᴴ
8696end
0 commit comments