@@ -6,7 +6,7 @@ import ArrayLayouts: MemoryLayout, DenseRowMajor, DenseColumnMajor, StridedLayou
6
6
UnitLowerTriangularLayout, ScalarLayout, UnknownLayout,
7
7
hermitiandata, symmetricdata, FillLayout, ZerosLayout,
8
8
DiagonalLayout, TridiagonalLayout, SymTridiagonalLayout, colsupport, rowsupport,
9
- diagonaldata, subdiagonaldata, supdiagonaldata
9
+ diagonaldata, subdiagonaldata, supdiagonaldata, BidiagonalLayout, bidiagonaluplo
10
10
11
11
struct FooBar end
12
12
struct FooNumber <: Number end
@@ -80,7 +80,45 @@ struct FooNumber <: Number end
80
80
@test MemoryLayout (view (randn (5 )' ,[1 ,3 ])) == UnknownLayout ()
81
81
end
82
82
83
- @testset " Symmetric/Hermitian MemoryLayout" begin
83
+ @testset " Bi/Tridiagonal" begin
84
+ T = Tridiagonal (randn (5 ),randn (6 ),randn (5 ))
85
+ S = SymTridiagonal (T. d, T. du)
86
+ Bl = Bidiagonal (T. d, T. dl, :L )
87
+ Bu = Bidiagonal (T. d, T. du, :U )
88
+
89
+ @test MemoryLayout (T) isa TridiagonalLayout
90
+ @test MemoryLayout (Adjoint (T)) isa TridiagonalLayout
91
+ @test MemoryLayout (Transpose (T)) isa TridiagonalLayout
92
+ @test MemoryLayout (S) isa SymTridiagonalLayout
93
+ @test MemoryLayout (Adjoint (S)) isa SymTridiagonalLayout
94
+ @test MemoryLayout (Transpose (S)) isa SymTridiagonalLayout
95
+ @test MemoryLayout (Bl) isa BidiagonalLayout
96
+ @test MemoryLayout (Adjoint (Bl)) isa BidiagonalLayout
97
+ @test MemoryLayout (Transpose (Bl)) isa BidiagonalLayout
98
+ @test MemoryLayout (Bu) isa BidiagonalLayout
99
+ @test MemoryLayout (Adjoint (Bu)) isa BidiagonalLayout
100
+ @test MemoryLayout (Transpose (Bu)) isa BidiagonalLayout
101
+
102
+ @test bidiagonaluplo (Bl) == bidiagonaluplo (Adjoint (Bu)) == ' L'
103
+ @test bidiagonaluplo (Bu) == bidiagonaluplo (Adjoint (Bl)) == ' U'
104
+
105
+ @test diagonaldata (T) == diagonaldata (T' ) == diagonaldata (S) == diagonaldata (Bl) == diagonaldata (Bu)
106
+ @test supdiagonaldata (T) == subdiagonaldata (Adjoint (T)) == subdiagonaldata (Transpose (T)) ==
107
+ supdiagonaldata (S) == subdiagonaldata (S) ==
108
+ supdiagonaldata (Bu) == subdiagonaldata (Adjoint (Bu)) == subdiagonaldata (Transpose (Bu))
109
+ @test subdiagonaldata (T) == supdiagonaldata (Adjoint (T)) == supdiagonaldata (Transpose (T)) ==
110
+ subdiagonaldata (Bl) == supdiagonaldata (Adjoint (Bl)) == supdiagonaldata (Transpose (Bl)) ==
111
+ T. dl
112
+
113
+ @test colsupport (T,3 ) == rowsupport (T,3 ) == colsupport (S,3 ) == rowsupport (S,3 ) == 2 : 4
114
+ @test colsupport (T,3 : 6 ) == rowsupport (T,3 : 6 ) == colsupport (S,3 : 6 ) == rowsupport (S,3 : 6 ) == 2 : 6
115
+ @test colsupport (Bl,3 ) == rowsupport (Bu,3 ) == rowsupport (Adjoint (Bl),3 ) == 3 : 4
116
+ @test rowsupport (Bl,3 ) == colsupport (Bu,3 ) == colsupport (Adjoint (Bl),3 ) == 2 : 3
117
+ @test colsupport (Bl,3 : 6 ) == rowsupport (Bu,3 : 6 ) == 3 : 6
118
+ @test colsupport (Bu,3 : 6 ) == rowsupport (Bl,3 : 6 ) == 2 : 6
119
+ end
120
+
121
+ @testset " Symmetric/Hermitian" begin
84
122
A = [1.0 2 ; 3 4 ]
85
123
@test MemoryLayout (Symmetric (A)) == SymmetricLayout {DenseColumnMajor} ()
86
124
@test MemoryLayout (Hermitian (A)) == SymmetricLayout {DenseColumnMajor} ()
@@ -108,6 +146,11 @@ struct FooNumber <: Number end
108
146
@test symmetricdata (Symmetric (transpose (A))) ≡ transpose (A)
109
147
@test symmetricdata (Hermitian (transpose (A))) ≡ transpose (A)
110
148
149
+ @test colsupport (Symmetric (A),2 ) ≡ colsupport (Symmetric (A),1 : 2 ) ≡
150
+ rowsupport (Symmetric (A),2 ) ≡ rowsupport (Symmetric (A),1 : 2 ) ≡ 1 : 2
151
+ @test colsupport (Hermitian (A),2 ) ≡ colsupport (Hermitian (A),1 : 2 ) ≡
152
+ rowsupport (Hermitian (A),2 ) ≡ rowsupport (Hermitian (A),1 : 2 ) ≡ 1 : 2
153
+
111
154
B = [1.0 + im 2 ; 3 4 ]
112
155
@test MemoryLayout (Symmetric (B)) == SymmetricLayout {DenseColumnMajor} ()
113
156
@test MemoryLayout (Hermitian (B)) == HermitianLayout {DenseColumnMajor} ()
@@ -132,6 +175,26 @@ struct FooNumber <: Number end
132
175
@test hermitiandata (Hermitian (B' )) ≡ B'
133
176
@test symmetricdata (Symmetric (transpose (B))) ≡ transpose (B)
134
177
@test hermitiandata (Hermitian (transpose (B))) ≡ transpose (B)
178
+
179
+ @testset " Bidiagonal" begin
180
+ B = Bidiagonal (randn (6 ),randn (5 ),:U )
181
+ Bc = Bidiagonal (randn (6 ) .+ 0im ,randn (5 ) .+ 1im ,:U )
182
+ S = Symmetric (B)
183
+ H = Hermitian (B)
184
+ Sc = Symmetric (Bc)
185
+ Hc = Hermitian (Bc)
186
+
187
+ @test MemoryLayout (S) isa SymTridiagonalLayout
188
+ @test MemoryLayout (H) isa SymTridiagonalLayout
189
+ @test MemoryLayout (Sc) isa SymTridiagonalLayout
190
+ @test MemoryLayout (Hc) isa HermitianLayout
191
+
192
+ @test diagonaldata (S) == diagonaldata (B)
193
+ @test subdiagonaldata (S) == supdiagonaldata (S) == supdiagonaldata (B)
194
+
195
+ @test colsupport (S,3 ) == colsupport (H,3 ) == colsupport (Sc,3 ) == colsupport (Hc,3 ) == 2 : 4
196
+ @test rowsupport (S,3 ) == rowsupport (H,3 ) == rowsupport (Sc,3 ) == rowsupport (Hc,3 ) == 2 : 4
197
+ end
135
198
end
136
199
137
200
@testset " triangular MemoryLayout" begin
@@ -233,19 +296,4 @@ struct FooNumber <: Number end
233
296
MemoryLayout (revD)
234
297
@test 0 == @allocated MemoryLayout (revD)
235
298
end
236
-
237
- @testset " Tridiagonal" begin
238
- T = Tridiagonal (randn (5 ),randn (6 ),randn (5 ))
239
- S = SymTridiagonal (T. d, T. du)
240
- @test MemoryLayout (T) isa TridiagonalLayout
241
- @test MemoryLayout (Adjoint (T)) isa TridiagonalLayout
242
- @test MemoryLayout (Transpose (T)) isa TridiagonalLayout
243
- @test MemoryLayout (S) isa SymTridiagonalLayout
244
- @test MemoryLayout (Adjoint (S)) isa SymTridiagonalLayout
245
- @test MemoryLayout (Transpose (S)) isa SymTridiagonalLayout
246
-
247
- @test diagonaldata (T) == diagonaldata (T' ) == diagonaldata (S)
248
- @test supdiagonaldata (T) == subdiagonaldata (Adjoint (T)) == subdiagonaldata (Transpose (T)) == supdiagonaldata (S) == subdiagonaldata (S)
249
- @test subdiagonaldata (T) == supdiagonaldata (Adjoint (T)) == supdiagonaldata (Transpose (T)) == T. dl
250
- end
251
299
end
0 commit comments