11using Adapt: adapt
22using BlockArrays: Block
33using BlockSparseArrays: BlockSparseMatrix, blockstoredlength
4+ using GPUArraysCore: allowscalar
45using JLArrays: JLArray
56using LinearAlgebra: hermitianpart, norm
67using MatrixAlgebraKit: eig_full, eig_trunc, eig_vals, eigh_full, eigh_trunc, eigh_vals,
@@ -14,6 +15,7 @@ arrayts = (Array, JLArray)
1415@testset " Abstract block type (arraytype=$arrayt , eltype=$elt )" for arrayt in arrayts,
1516 elt in elts
1617
18+ arrayt === Array || allowscalar (false )
1719 dev = adapt (arrayt)
1820
1921 a = BlockSparseMatrix {elt, AbstractMatrix{elt}} (undef, [2 , 3 ], [2 , 3 ])
@@ -56,22 +58,30 @@ arrayts = (Array, JLArray)
5658 a = BlockSparseMatrix {elt, AbstractMatrix{elt}} (undef, [2 , 3 ], [2 , 3 ])
5759 a[Block (1 , 1 )] = dev (randn (elt, 2 , 2 ))
5860 for f in (eig_full, eig_trunc)
59- res = f (a)
60- d, v = res[1 : 2 ]
61- @test a * v ≈ v * d
61+ @test begin
62+ res = f (a)
63+ d, v = res[1 : 2 ]
64+ a * v ≈ v * d
65+ end broken = arrayt ≠ Array
6266 end
63- d = eig_vals (a)
64- @test sort (Vector (d); by = abs) ≈ sort (eig_vals (Matrix (a)); by = abs)
67+ @test begin
68+ d = eig_vals (a)
69+ sort (Vector (d); by = abs) ≈ sort (eig_vals (Matrix (a)); by = abs)
70+ end broken = arrayt ≠ Array
6571
6672 a = BlockSparseMatrix {elt, AbstractMatrix{elt}} (undef, [2 , 3 ], [2 , 3 ])
6773 a[Block (1 , 1 )] = dev (parent (hermitianpart (randn (elt, 2 , 2 ))))
6874 for f in (eigh_full, eigh_trunc)
69- res = f (a)
70- d, v = res[1 : 2 ]
71- @test a * v ≈ v * d
75+ @test begin
76+ res = f (a)
77+ d, v = res[1 : 2 ]
78+ a * v ≈ v * d
79+ end broken = arrayt ≠ Array
7280 end
73- d = eigh_vals (a)
74- @test sort (Vector (d); by = abs) ≈ sort (eig_vals (Matrix (a)); by = abs)
81+ @test begin
82+ d = eigh_vals (a)
83+ sort (Vector (d); by = abs) ≈ sort (eig_vals (Matrix (a)); by = abs)
84+ end broken = arrayt ≠ Array
7585
7686 a = BlockSparseMatrix {elt, AbstractMatrix{elt}} (undef, [2 , 3 ], [2 , 3 ])
7787 a[Block (1 , 1 )] = dev (randn (elt, 2 , 2 ))
0 commit comments