1
1
using BlockArrays: Block, blocksizes
2
- using GradedArrays: U1, dual, flux, gradedrange
2
+ using GradedArrays: U1, dual, flux, gradedrange, trivial
3
3
using LinearAlgebra: I, diag, svdvals
4
- using MatrixAlgebraKit: svd_compact, svd_full, svd_trunc
4
+ using MatrixAlgebraKit: qr_compact, qr_full, svd_compact, svd_full, svd_trunc
5
5
using Test: @test , @testset
6
6
7
7
const elts = (Float32, Float64, ComplexF32, ComplexF64)
@@ -17,9 +17,9 @@ const elts = (Float32, Float64, ComplexF32, ComplexF64)
17
17
@test u * s * vᴴ ≈ a
18
18
@test Array (u' u) ≈ I
19
19
@test Array (vᴴ * vᴴ' ) ≈ I
20
- @test flux (u) == U1 ( 0 )
20
+ @test flux (u) == trivial ( flux (a) )
21
21
@test flux (s) == flux (a)
22
- @test flux (vᴴ) == U1 ( 0 )
22
+ @test flux (vᴴ) == trivial ( flux (a) )
23
23
24
24
r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
25
25
r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
@@ -31,9 +31,9 @@ const elts = (Float32, Float64, ComplexF32, ComplexF64)
31
31
@test u * s * vᴴ ≈ a
32
32
@test Array (u' u) ≈ I
33
33
@test Array (vᴴ * vᴴ' ) ≈ I
34
- @test flux (u) == U1 ( 0 )
34
+ @test flux (u) == trivial ( flux (a) )
35
35
@test flux (s) == flux (a)
36
- @test flux (vᴴ) == U1 ( 0 )
36
+ @test flux (vᴴ) == trivial ( flux (a) )
37
37
end
38
38
end
39
39
50
50
@test Array (u * u' ) ≈ I
51
51
@test Array (vᴴ * vᴴ' ) ≈ I
52
52
@test Array (vᴴ' vᴴ) ≈ I
53
- @test flux (u) == U1 ( 0 )
53
+ @test flux (u) == trivial ( flux (a) )
54
54
@test flux (s) == flux (a)
55
- @test flux (vᴴ) == U1 ( 0 )
55
+ @test flux (vᴴ) == trivial ( flux (a) )
56
56
57
57
r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
58
58
r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
65
65
@test Array (u * u' ) ≈ I
66
66
@test Array (vᴴ * vᴴ' ) ≈ I
67
67
@test Array (vᴴ' vᴴ) ≈ I
68
- @test flux (u) == U1 ( 0 )
68
+ @test flux (u) == trivial ( flux (a) )
69
69
@test flux (s) == flux (a)
70
- @test flux (vᴴ) == U1 ( 0 )
70
+ @test flux (vᴴ) == trivial ( flux (a) )
71
71
end
72
72
end
73
73
85
85
@test size (vᴴ) == (1 , size (a, 2 ))
86
86
@test Array (u' u) ≈ I
87
87
@test Array (vᴴ * vᴴ' ) ≈ I
88
- @test flux (u) == U1 ( 0 )
88
+ @test flux (u) == trivial ( flux (a) )
89
89
@test flux (s) == flux (a)
90
- @test flux (vᴴ) == U1 ( 0 )
90
+ @test flux (vᴴ) == trivial ( flux (a) )
91
91
92
92
r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
93
93
r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
101
101
@test size (vᴴ) == (1 , size (a, 2 ))
102
102
@test Array (u' u) ≈ I
103
103
@test Array (vᴴ * vᴴ' ) ≈ I
104
- @test flux (u) == U1 ( 0 )
104
+ @test flux (u) == trivial ( flux (a) )
105
105
@test flux (s) == flux (a)
106
- @test flux (vᴴ) == U1 (0 )
106
+ @test flux (vᴴ) == trivial (flux (a))
107
+ end
108
+ end
109
+
110
+ @testset " qr_compact (eltype=$elt )" for elt in elts
111
+ for i in [2 , 3 ], j in [2 , 3 ], k in [2 , 3 ], l in [2 , 3 ]
112
+ r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
113
+ r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
114
+ a = zeros (elt, r1, dual (r2))
115
+ a[Block (2 , 2 )] = randn (elt, blocksizes (a)[2 , 2 ])
116
+ @test flux (a) == U1 (0 )
117
+ q, r = qr_compact (a)
118
+ @test q * r ≈ a
119
+ @test Array (q' q) ≈ I
120
+ @test flux (q) == trivial (flux (a))
121
+ @test flux (r) == flux (a)
122
+
123
+ r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
124
+ r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
125
+ a = zeros (elt, r1, dual (r2))
126
+ a[Block (1 , 2 )] = randn (elt, blocksizes (a)[1 , 2 ])
127
+ @test flux (a) == U1 (- 1 )
128
+ q, r = qr_compact (a)
129
+ @test q * r ≈ a
130
+ @test Array (q' q) ≈ I
131
+ @test flux (q) == trivial (flux (a))
132
+ @test flux (r) == flux (a)
133
+ end
134
+ end
135
+
136
+ @testset " qr_full (eltype=$elt )" for elt in elts
137
+ for i in [2 , 3 ], j in [2 , 3 ], k in [2 , 3 ], l in [2 , 3 ]
138
+ r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
139
+ r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
140
+ a = zeros (elt, r1, dual (r2))
141
+ a[Block (2 , 2 )] = randn (elt, blocksizes (a)[2 , 2 ])
142
+ @test flux (a) == U1 (0 )
143
+ q, r = qr_full (a)
144
+ @test q * r ≈ a
145
+ @test Array (q' q) ≈ I
146
+ @test Array (q * q' ) ≈ I
147
+ @test flux (q) == trivial (flux (a))
148
+ @test flux (r) == flux (a)
149
+
150
+ r1 = gradedrange ([U1 (0 ) => i, U1 (1 ) => j])
151
+ r2 = gradedrange ([U1 (0 ) => k, U1 (1 ) => l])
152
+ a = zeros (elt, r1, dual (r2))
153
+ a[Block (1 , 2 )] = randn (elt, blocksizes (a)[1 , 2 ])
154
+ @test flux (a) == U1 (- 1 )
155
+ q, r = qr_full (a)
156
+ @test q * r ≈ a
157
+ @test Array (q' q) ≈ I
158
+ @test Array (q * q' ) ≈ I
159
+ @test flux (q) == trivial (flux (a))
160
+ @test flux (r) == flux (a)
107
161
end
108
162
end
0 commit comments