@@ -6,7 +6,8 @@ using FillArrays: Eye, SquareEye
66using JLArrays: JLArray
77using KroneckerArrays: KroneckerArray, ⊗ , × , arg1, arg2
88using LinearAlgebra: norm
9- using MatrixAlgebraKit: svd_compact
9+ using MatrixAlgebraKit: svd_compact, svd_trunc
10+ using StableRNGs: StableRNG
1011using Test: @test , @test_broken , @testset
1112using TestExtras: @constinferred
1213
273274 # Broken operations
274275 @test_broken a[Block .(1 : 2 ), Block (2 )]
275276
277+ # svd_trunc
278+ dev = adapt (arrayt)
279+ r = @constinferred blockrange ([2 × 2 , 3 × 3 ])
280+ rng = StableRNG (1234 )
281+ d = Dict (
282+ Block (1 , 1 ) => Eye {elt} (2 , 2 ) ⊗ randn (rng, elt, 2 , 2 ),
283+ Block (2 , 2 ) => Eye {elt} (3 , 3 ) ⊗ randn (rng, elt, 3 , 3 ),
284+ )
285+ a = @constinferred dev (blocksparse (d, r, r))
286+ if arrayt === Array
287+ u, s, v = svd_trunc (a; trunc= (; maxrank= 6 ))
288+ u′, s′, v′ = svd_trunc (Matrix (a); trunc= (; maxrank= 5 ))
289+ @test Matrix (u * s * v) ≈ u′ * s′ * v′
290+ else
291+ @test_broken svd_trunc (a; trunc= (; maxrank= 6 ))
292+ end
293+
276294 @testset " Block deficient" begin
277295 da = Dict (Block (1 , 1 ) => Eye {elt} (2 , 2 ) ⊗ dev (randn (elt, 2 , 2 )))
278296 a = @constinferred dev (blocksparse (da, r, r))
0 commit comments