|
1 | 1 | using MatrixAlgebraKit:
|
2 | 2 | MatrixAlgebraKit,
|
3 |
| - left_orth_polar!, |
4 |
| - left_orth_qr!, |
5 |
| - left_orth_svd!, |
| 3 | + left_orth!, |
6 | 4 | left_polar!,
|
7 | 5 | lq_compact!,
|
8 | 6 | qr_compact!,
|
9 |
| - right_orth_lq!, |
10 |
| - right_orth_polar!, |
11 |
| - right_orth_svd!, |
| 7 | + right_orth!, |
12 | 8 | right_polar!,
|
13 | 9 | select_algorithm,
|
14 | 10 | svd_compact!
|
15 | 11 |
|
16 |
| -function MatrixAlgebraKit.left_orth!( |
17 |
| - A::AbstractBlockSparseMatrix; |
18 |
| - trunc=nothing, |
19 |
| - kind=isnothing(trunc) ? :qr : :svd, |
20 |
| - alg_qr=(; positive=true), |
21 |
| - alg_polar=(;), |
22 |
| - alg_svd=(;), |
| 12 | +function MatrixAlgebraKit.initialize_output( |
| 13 | + ::typeof(left_orth!), A::AbstractBlockSparseMatrix |
23 | 14 | )
|
24 |
| - if !isnothing(trunc) && kind != :svd |
25 |
| - throw(ArgumentError("truncation not supported for `left_orth` with `kind=$kind`")) |
26 |
| - end |
27 |
| - if kind == :qr |
28 |
| - return left_orth_qr!(A, alg_qr) |
29 |
| - elseif kind == :polar |
30 |
| - return left_orth_polar!(A, alg_polar) |
31 |
| - elseif kind == :svd |
32 |
| - return left_orth_svd!(A, alg_svd, trunc) |
33 |
| - else |
34 |
| - throw(ArgumentError("`left_orth` received unknown value `kind = $kind`")) |
35 |
| - end |
| 15 | + return nothing |
36 | 16 | end
|
37 |
| -function MatrixAlgebraKit.left_orth_qr!(A::AbstractBlockSparseMatrix, alg) |
| 17 | +function MatrixAlgebraKit.check_input( |
| 18 | + ::typeof(left_orth!), A::AbstractBlockSparseMatrix, F::Nothing |
| 19 | +) |
| 20 | + return nothing |
| 21 | +end |
| 22 | + |
| 23 | +function MatrixAlgebraKit.left_orth_qr!(A::AbstractBlockSparseMatrix, F, alg) |
38 | 24 | alg′ = select_algorithm(qr_compact!, A, alg)
|
39 | 25 | return qr_compact!(A, alg′)
|
40 | 26 | end
|
41 |
| -function MatrixAlgebraKit.left_orth_polar!(A::AbstractBlockSparseMatrix, alg) |
| 27 | +function MatrixAlgebraKit.left_orth_polar!(A::AbstractBlockSparseMatrix, F, alg) |
42 | 28 | alg′ = select_algorithm(left_polar!, A, alg)
|
43 | 29 | return left_polar!(A, alg′)
|
44 | 30 | end
|
45 | 31 | function MatrixAlgebraKit.left_orth_svd!(
|
46 |
| - A::AbstractBlockSparseMatrix, alg, trunc::Nothing=nothing |
| 32 | + A::AbstractBlockSparseMatrix, F, alg, trunc::Nothing=nothing |
47 | 33 | )
|
48 | 34 | alg′ = select_algorithm(svd_compact!, A, alg)
|
49 | 35 | U, S, Vᴴ = svd_compact!(A, alg′)
|
50 | 36 | return U, S * Vᴴ
|
51 | 37 | end
|
52 | 38 |
|
53 |
| -function MatrixAlgebraKit.right_orth!( |
54 |
| - A::AbstractBlockSparseMatrix; |
55 |
| - trunc=nothing, |
56 |
| - kind=isnothing(trunc) ? :lq : :svd, |
57 |
| - alg_lq=(; positive=true), |
58 |
| - alg_polar=(;), |
59 |
| - alg_svd=(;), |
| 39 | +function MatrixAlgebraKit.initialize_output( |
| 40 | + ::typeof(right_orth!), A::AbstractBlockSparseMatrix |
60 | 41 | )
|
61 |
| - if !isnothing(trunc) && kind != :svd |
62 |
| - throw(ArgumentError("truncation not supported for `right_orth` with `kind=$kind`")) |
63 |
| - end |
64 |
| - if kind == :qr |
65 |
| - # TODO: Implement this. |
66 |
| - # return right_orth_lq!(A, alg_lq) |
67 |
| - return right_orth_svd!(A, alg_svd) |
68 |
| - elseif kind == :polar |
69 |
| - return right_orth_polar!(A, alg_polar) |
70 |
| - elseif kind == :svd |
71 |
| - return right_orth_svd!(A, alg_svd, trunc) |
72 |
| - else |
73 |
| - throw(ArgumentError("`right_orth` received unknown value `kind = $kind`")) |
74 |
| - end |
| 42 | + return nothing |
75 | 43 | end
|
76 |
| -function MatrixAlgebraKit.right_orth_lq!(A::AbstractBlockSparseMatrix, alg) |
77 |
| - alg′ = select_algorithm(lq_compact, A, alg) |
| 44 | +function MatrixAlgebraKit.check_input( |
| 45 | + ::typeof(right_orth!), A::AbstractBlockSparseMatrix, F::Nothing |
| 46 | +) |
| 47 | + return nothing |
| 48 | +end |
| 49 | + |
| 50 | +function MatrixAlgebraKit.right_orth_lq!(A::AbstractBlockSparseMatrix, F, alg) |
| 51 | + alg′ = select_algorithm(lq_compact!, A, alg) |
78 | 52 | return lq_compact!(A, alg′)
|
79 | 53 | end
|
80 |
| -function MatrixAlgebraKit.right_orth_polar!(A::AbstractBlockSparseMatrix, alg) |
| 54 | +function MatrixAlgebraKit.right_orth_polar!(A::AbstractBlockSparseMatrix, F, alg) |
81 | 55 | alg′ = select_algorithm(right_polar!, A, alg)
|
82 | 56 | return right_polar!(A, alg′)
|
83 | 57 | end
|
84 | 58 | function MatrixAlgebraKit.right_orth_svd!(
|
85 |
| - A::AbstractBlockSparseMatrix, alg, trunc::Nothing=nothing |
| 59 | + A::AbstractBlockSparseMatrix, F, alg, trunc::Nothing=nothing |
86 | 60 | )
|
87 | 61 | alg′ = select_algorithm(svd_compact!, A, alg)
|
88 | 62 | U, S, Vᴴ = svd_compact!(A, alg′)
|
89 | 63 | return U * S, Vᴴ
|
90 | 64 | end
|
91 |
| -function MatrixAlgebraKit.right_orth_svd!(A::AbstractBlockSparseMatrix, alg, trunc) |
| 65 | +function MatrixAlgebraKit.right_orth_svd!(A::AbstractBlockSparseMatrix, F, alg, trunc) |
92 | 66 | alg′ = select_algorithm(svd_compact!, A, alg)
|
93 | 67 | alg_trunc = select_algorithm(svd_trunc!, A, alg′; trunc)
|
94 | 68 | U, S, Vᴴ = svd_trunc!(A, alg_trunc)
|
|
0 commit comments