|
1 | 1 | using Adapt: adapt |
2 | 2 | using BlockArrays: Block, BlockRange, mortar |
3 | 3 | using BlockSparseArrays: |
4 | | - BlockSparseArray, BlockSparseMatrix, blockrange, blocksparse, blocktype |
| 4 | + BlockIndexVector, BlockSparseArray, BlockSparseMatrix, blockrange, blocksparse, blocktype |
5 | 5 | using FillArrays: Eye, SquareEye |
6 | 6 | using JLArrays: JLArray |
7 | | -using KroneckerArrays: KroneckerArray, ⊗, × |
| 7 | +using KroneckerArrays: KroneckerArray, ⊗, ×, arg1, arg2 |
8 | 8 | using LinearAlgebra: norm |
9 | 9 | using MatrixAlgebraKit: svd_compact |
10 | 10 | using Test: @test, @test_broken, @testset |
@@ -50,6 +50,16 @@ arrayts = (Array, JLArray) |
50 | 50 | @test a[Block(2, 2)[(:) × (2:3), (:) × (2:3)]] == a[Block(2, 2)][(:) × (2:3), (:) × (2:3)] |
51 | 51 | @test_broken a[Block(2, 2)][(1:2) × (2:3), (:) × (2:3)] |
52 | 52 |
|
| 53 | + # Blockwise slicing, shows up in truncated block sparse matrix factorizations. |
| 54 | + I1 = BlockIndexVector(Block(1), Base.Slice(Base.OneTo(2)) × [1]) |
| 55 | + I2 = BlockIndexVector(Block(2), Base.Slice(Base.OneTo(3)) × [1, 3]) |
| 56 | + I = [I1, I2] |
| 57 | + b = a[I, I] |
| 58 | + @test b[Block(1, 1)] == a[Block(1, 1)[(1:2) × [1], (1:2) × [1]]] |
| 59 | + @test iszero(b[Block(2, 1)]) |
| 60 | + @test iszero(b[Block(1, 2)]) |
| 61 | + @test b[Block(2, 2)] == a[Block(2, 2)[(1:3) × [1, 3], (1:3) × [1, 3]]] |
| 62 | + |
53 | 63 | # Slicing |
54 | 64 | r = blockrange([2 × 2, 3 × 3]) |
55 | 65 | d = Dict( |
|
161 | 171 | @test a[Block(2, 2)[(:) × (2:3), (:) × (2:3)]] == a[Block(2, 2)][(:) × (2:3), (:) × (2:3)] |
162 | 172 | @test_broken a[Block(2, 2)][(1:2) × (2:3), (:) × (2:3)] |
163 | 173 |
|
| 174 | + # Blockwise slicing, shows up in truncated block sparse matrix factorizations. |
| 175 | + I1 = BlockIndexVector(Block(1), Base.Slice(Base.OneTo(2)) × [1]) |
| 176 | + I2 = BlockIndexVector(Block(2), Base.Slice(Base.OneTo(3)) × [1, 3]) |
| 177 | + I = [I1, I2] |
| 178 | + b = a[I, I] |
| 179 | + @test b[Block(1, 1)] == a[Block(1, 1)[(1:2) × [1], (1:2) × [1]]] |
| 180 | + @test arg1(b[Block(1, 1)]) isa Eye |
| 181 | + @test iszero(b[Block(2, 1)]) |
| 182 | + @test arg1(b[Block(2, 1)]) isa Eye |
| 183 | + @test iszero(b[Block(1, 2)]) |
| 184 | + @test arg1(b[Block(1, 2)]) isa Eye |
| 185 | + @test b[Block(2, 2)] == a[Block(2, 2)[(1:3) × [1, 3], (1:3) × [1, 3]]] |
| 186 | + @test arg1(b[Block(2, 2)]) isa Eye |
| 187 | + |
164 | 188 | # Slicing |
165 | 189 | r = blockrange([2 × 2, 3 × 3]) |
166 | 190 | d = Dict( |
|
0 commit comments