11using Test
22using BlockSparseArrays
33using BlockSparseArrays:
4- BlockSparseArray, svd, tsvd, notrunc, truncbelow, truncdim, BlockDiagonal
4+ BlockSparseArray, svd, notrunc, truncbelow, truncdim, BlockDiagonal
55using BlockArrays
66using LinearAlgebra: LinearAlgebra, Diagonal, svdvals
77
@@ -21,21 +21,6 @@ eltypes = (Float32, Float64, ComplexF64)
2121 a = rand (m, n)
2222 usv = @inferred svd (a)
2323 test_svd (a, usv)
24-
25- # TODO : type unstable?
26- usv2 = tsvd (a)
27- test_svd (a, usv2)
28-
29- usv3 = tsvd (a; trunc= truncdim (2 ))
30- @test length (usv3. S) == 2
31- @test usv3. U' * usv3. U ≈ LinearAlgebra. I
32- @test usv3. Vt * usv3. V ≈ LinearAlgebra. I
33-
34- s = usv3. S[end ]
35- usv4 = tsvd (a; trunc= truncbelow (s))
36- @test length (usv4. S) == 2
37- @test usv4. U' * usv4. U ≈ LinearAlgebra. I
38- @test usv4. Vt * usv4. V ≈ LinearAlgebra. I
3924end
4025
4126# block matrix
@@ -48,29 +33,6 @@ blockszs = (([2, 2], [2, 2]), ([2, 2], [2, 3]), ([2, 2, 1], [2, 3]), ([2, 3], [2
4833 @test usv. U isa BlockedMatrix
4934 @test usv. Vt isa BlockedMatrix
5035 @test usv. S isa BlockedVector
51-
52- usv2 = tsvd (a)
53- test_svd (a, usv2)
54- @test usv. U isa BlockedMatrix
55- @test usv. Vt isa BlockedMatrix
56- @test usv. S isa BlockedVector
57-
58- usv3 = tsvd (a; trunc= truncdim (2 ))
59- @test length (usv3. S) == 2
60- @test usv3. U' * usv3. U ≈ LinearAlgebra. I
61- @test usv3. Vt * usv3. V ≈ LinearAlgebra. I
62- @test usv. U isa BlockedMatrix
63- @test usv. Vt isa BlockedMatrix
64- @test usv. S isa BlockedVector
65-
66- s = usv3. S[end ]
67- usv4 = tsvd (a; trunc= truncbelow (s))
68- @test length (usv4. S) == 2
69- @test usv4. U' * usv4. U ≈ LinearAlgebra. I
70- @test usv4. Vt * usv4. V ≈ LinearAlgebra. I
71- @test usv. U isa BlockedMatrix
72- @test usv. Vt isa BlockedMatrix
73- @test usv. S isa BlockedVector
7436end
7537
7638# Block-Diagonal matrices
8446 @test usv. U isa BlockDiagonal
8547 @test usv. Vt isa BlockDiagonal
8648 @test usv. S isa BlockVector
87-
88- usv2 = tsvd (a)
89- test_svd (a, usv2)
90- @test usv. U isa BlockDiagonal
91- @test usv. Vt isa BlockDiagonal
92- @test usv. S isa BlockVector
93-
94- # TODO : need to find a slicing fix to make this work
95- # usv3 = tsvd(a; trunc=truncdim(2))
96- # @test length(usv3.S) == 2
97- # @test usv3.U' * usv3.U ≈ LinearAlgebra.I
98- # @test usv3.Vt * usv3.V ≈ LinearAlgebra.I
99- # @test usv.U isa BlockDiagonal
100- # @test usv.Vt isa BlockDiagonal
101- # @test usv.S isa BlockVector
102-
103- # @show s = usv3.S[end]
104- # usv4 = tsvd(a; trunc=truncbelow(s))
105- # @test length(usv4.S) == 2
106- # @test usv4.U' * usv4.U ≈ LinearAlgebra.I
107- # @test usv4.Vt * usv4.V ≈ LinearAlgebra.I
108- # @test usv.U isa BlockDiagonal
109- # @test usv.Vt isa BlockDiagonal
110- # @test usv.S isa BlockVector
11149end
11250
11351a = mortar ([rand (2 , 2 ) for i in 1 : 2 , j in 1 : 3 ])
@@ -133,32 +71,13 @@ test_svd(a, usv)
13371 # errors because `blocks(a)[CartesianIndex.(...)]` is not implemented
13472 usv = svd (a)
13573 # TODO : `BlockDiagonal * Adjoint` errors
136- # test_svd(a, usv)
74+ test_svd (a, usv)
13775 @test usv. U isa BlockDiagonal
13876 @test usv. Vt isa BlockDiagonal
13977 @test usv. S isa BlockVector
14078
141- # usv2 = tsvd(a)
14279 test_svd (a, usv2)
14380 @test usv. U isa BlockDiagonal
14481 @test usv. Vt isa BlockDiagonal
14582 @test usv. S isa BlockVector
146-
147- # TODO : need to find a slicing fix to make this work
148- # usv3 = tsvd(a; trunc=truncdim(2))
149- # @test length(usv3.S) == 2
150- # @test usv3.U' * usv3.U ≈ LinearAlgebra.I
151- # @test usv3.Vt * usv3.V ≈ LinearAlgebra.I
152- # @test usv.U isa BlockDiagonal
153- # @test usv.Vt isa BlockDiagonal
154- # @test usv.S isa BlockVector
155-
156- # @show s = usv3.S[end]
157- # usv4 = tsvd(a; trunc=truncbelow(s))
158- # @test length(usv4.S) == 2
159- # @test usv4.U' * usv4.U ≈ LinearAlgebra.I
160- # @test usv4.Vt * usv4.V ≈ LinearAlgebra.I
161- # @test usv.U isa BlockDiagonal
162- # @test usv.Vt isa BlockDiagonal
163- # @test usv.S isa BlockVector
16483end
0 commit comments