1
1
using Test
2
2
using BlockSparseArrays
3
- using BlockSparseArrays:
4
- BlockSparseArray, svd, notrunc, truncbelow, truncdim, BlockDiagonal
3
+ using BlockSparseArrays: BlockSparseArray, svd, notrunc, truncbelow, truncdim, BlockDiagonal
5
4
using BlockArrays
6
5
using LinearAlgebra: LinearAlgebra, Diagonal, svdvals
6
+ using Random
7
7
8
8
function test_svd (a, usv)
9
- U, S, V = usv
9
+ U, S, V = usv
10
10
11
- @test U * Diagonal (S) * V' ≈ a
12
- @test U' * U ≈ LinearAlgebra. I
13
- @test V' * V ≈ LinearAlgebra. I
11
+ @test U * Diagonal (S) * V' ≈ a
12
+ @test U' * U ≈ LinearAlgebra. I
13
+ @test V' * V ≈ LinearAlgebra. I
14
14
end
15
15
16
16
# regular matrix
17
17
# --------------
18
18
sizes = ((3 , 3 ), (4 , 3 ), (3 , 4 ))
19
19
eltypes = (Float32, Float64, ComplexF64)
20
20
@testset " ($m , $n ) Matrix{$T }" for ((m, n), T) in Iterators. product (sizes, eltypes)
21
- a = rand (m, n)
22
- usv = @inferred svd (a)
23
- test_svd (a, usv)
21
+ a = rand (m, n)
22
+ usv = @inferred svd (a)
23
+ test_svd (a, usv)
24
24
end
25
25
26
26
# block matrix
27
27
# ------------
28
28
blockszs = (([2 , 2 ], [2 , 2 ]), ([2 , 2 ], [2 , 3 ]), ([2 , 2 , 1 ], [2 , 3 ]), ([2 , 3 ], [2 ]))
29
29
@testset " ($m , $n ) BlockMatrix{$T }" for ((m, n), T) in Iterators. product (blockszs, eltypes)
30
- a = mortar ([rand (T, i, j) for i in m, j in n])
31
- usv = svd (a)
32
- test_svd (a, usv)
33
- @test usv. U isa BlockedMatrix
34
- @test usv. Vt isa BlockedMatrix
35
- @test usv. S isa BlockedVector
30
+ a = mortar ([rand (T, i, j) for i in m, j in n])
31
+ usv = svd (a)
32
+ test_svd (a, usv)
33
+ @test usv. U isa BlockedMatrix
34
+ @test usv. Vt isa BlockedMatrix
35
+ @test usv. S isa BlockedVector
36
36
end
37
37
38
38
# Block-Diagonal matrices
39
39
# -----------------------
40
40
@testset " ($m , $n ) BlockDiagonal{$T }" for ((m, n), T) in
41
41
Iterators. product (blockszs, eltypes)
42
- a = BlockDiagonal ([rand (T, i, j) for (i, j) in zip (m, n)])
43
- usv = svd (a)
44
- # TODO : `BlockDiagonal * Adjoint` errors
45
- test_svd (a, usv)
46
- @test usv. U isa BlockDiagonal
47
- @test usv. Vt isa BlockDiagonal
48
- @test usv. S isa BlockVector
42
+ a = BlockDiagonal ([rand (T, i, j) for (i, j) in zip (m, n)])
43
+ usv = svd (a)
44
+ # TODO : `BlockDiagonal * Adjoint` errors
45
+ test_svd (a, usv)
46
+ @test usv. U isa BlockDiagonal
47
+ @test usv. Vt isa BlockDiagonal
48
+ @test usv. S isa BlockVector
49
49
end
50
50
51
51
a = mortar ([rand (2 , 2 ) for i in 1 : 2 , j in 1 : 3 ])
@@ -60,24 +60,24 @@ test_svd(a, usv)
60
60
# -----------
61
61
@testset " ($m , $n ) BlockDiagonal{$T }" for ((m, n), T) in
62
62
Iterators. product (blockszs, eltypes)
63
- a = BlockSparseArray {T} (m, n)
64
- for i in LinearAlgebra. diagind (blocks (a))
65
- I = CartesianIndices (blocks (a))[i]
66
- a[Block (I. I... )] = rand (T, size (blocks (a)[i]))
67
- end
68
- perm = Random. randperm (length (m))
69
- a = a[Block .(perm), Block .(1 : length (n))]
63
+ a = BlockSparseArray {T} (m, n)
64
+ for i in LinearAlgebra. diagind (blocks (a))
65
+ I = CartesianIndices (blocks (a))[i]
66
+ a[Block (I. I... )] = rand (T, size (blocks (a)[i]))
67
+ end
68
+ perm = Random. randperm (length (m))
69
+ a = a[Block .(perm), Block .(1 : length (n))]
70
70
71
- # errors because `blocks(a)[CartesianIndex.(...)]` is not implemented
72
- usv = svd (a)
73
- # TODO : `BlockDiagonal * Adjoint` errors
74
- test_svd (a, usv)
75
- @test usv. U isa BlockDiagonal
76
- @test usv. Vt isa BlockDiagonal
77
- @test usv. S isa BlockVector
71
+ # errors because `blocks(a)[CartesianIndex.(...)]` is not implemented
72
+ usv = svd (a)
73
+ # TODO : `BlockDiagonal * Adjoint` errors
74
+ test_svd (a, usv)
75
+ @test usv. U isa BlockDiagonal
76
+ @test usv. Vt isa BlockDiagonal
77
+ @test usv. S isa BlockVector
78
78
79
- test_svd (a, usv2)
80
- @test usv. U isa BlockDiagonal
81
- @test usv. Vt isa BlockDiagonal
82
- @test usv. S isa BlockVector
79
+ test_svd (a, usv2)
80
+ @test usv. U isa BlockDiagonal
81
+ @test usv. Vt isa BlockDiagonal
82
+ @test usv. S isa BlockVector
83
83
end
0 commit comments