1+ module  TestBlockArraysBandedMatrices
2+ 
3+ using  BlockArrays, LinearAlgebra, BandedMatrices, Test
4+ using  BlockArrays:  BlockDiagonal, BlockBidiagonal, BlockTridiagonal, blockcolsupport, blockrowsupport
5+ using  BandedMatrices:  _BandedMatrix
6+ 
7+ 
8+ @testset  " Block-Banded"   begin 
9+     @testset  " Block Diagonal"   begin 
10+         A =  BlockDiagonal (fill ([1  2 ],3 ))
11+         @test  A[Block (1 ,1 )] ==  [1  2 ]
12+         @test  @inferred (A[Block (1 ,2 )]) ==  [0  0 ]
13+         @test_throws  DimensionMismatch A+ I
14+         A =  BlockDiagonal (fill ([1  2 ; 1  2 ],3 ))
15+         @test  A+ I ==  I+ A ==  mortar (Diagonal (fill ([2  2 ; 1  3 ],3 ))) ==  Matrix (A) +  I
16+     end 
17+ 
18+     @testset  " Block Bidiagonal"   begin 
19+         Bu =  BlockBidiagonal (fill ([1  2 ],4 ), fill ([3  4 ],3 ), :U )
20+         Bl =  BlockBidiagonal (fill ([1  2 ],4 ), fill ([3  4 ],3 ), :L )
21+         @test  Bu[Block (1 ,1 )] ==  Bl[Block (1 ,1 )] ==  [1  2 ]
22+         @test  @inferred (Bu[Block (1 ,2 )]) ==  @inferred (Bl[Block (2 ,1 )]) ==  [3  4 ]
23+         @test  @inferred (view (Bu,Block (1 ,3 ))) ==  @inferred (Bu[Block (1 ,3 )]) ==  [0  0 ]
24+         @test_throws  DimensionMismatch Bu+ I
25+         Bu =  BlockBidiagonal (fill ([1  2 ; 1  2 ],4 ), fill ([3  4 ; 3  4 ],3 ), :U )
26+         Bl =  BlockBidiagonal (fill ([1  2 ; 1  2 ],4 ), fill ([3  4 ; 3  4 ],3 ), :L )
27+         @test  Bu+ I ==  I+ Bu ==  mortar (Bidiagonal (fill ([2  2 ; 1  3 ],4 ), fill ([3  4 ; 3  4 ],3 ), :U )) ==  Matrix (Bu) +  I
28+         @test  Bl+ I ==  I+ Bl ==  mortar (Bidiagonal (fill ([2  2 ; 1  3 ],4 ), fill ([3  4 ; 3  4 ],3 ), :L )) ==  Matrix (Bl) +  I
29+         @test  Bu- I ==  mortar (Bidiagonal (fill ([0  2 ; 1  1 ],4 ), fill ([3  4 ; 3  4 ],3 ), :U )) ==  Matrix (Bu) -  I
30+         @test  I- Bu ==  mortar (Bidiagonal (fill ([0  - 2 ; - 1  - 1 ],4 ), fill (- [3  4 ; 3  4 ],3 ), :U )) ==  I -  Matrix (Bu)
31+     end 
32+ 
33+     @testset  " Block Tridiagonal"   begin 
34+         A =  BlockTridiagonal (fill ([1  2 ],3 ), fill ([3  4 ],4 ), fill ([4  5 ],3 ))
35+         @test  A[Block (1 ,1 )] ==  [3  4 ]
36+         @test  @inferred (A[Block (1 ,2 )]) ==  [4  5 ]
37+         @test  @inferred (view (A,Block (1 ,3 ))) ==  @inferred (A[Block (1 ,3 )]) ==  [0  0 ]
38+         @test_throws  DimensionMismatch A+ I
39+         A =  BlockTridiagonal (fill ([1  2 ; 1  2 ],3 ), fill ([3  4 ; 3  4 ],4 ), fill ([4  5 ; 4  5 ],3 ))
40+         @test  A+ I ==  I+ A ==  mortar (Tridiagonal (fill ([1  2 ; 1  2 ],3 ), fill ([4  4 ; 3  5 ],4 ), fill ([4  5 ; 4  5 ],3 ))) ==  Matrix (A) +  I
41+         @test  A- I ==  mortar (Tridiagonal (fill ([1  2 ; 1  2 ],3 ), fill ([2  4 ; 3  3 ],4 ), fill ([4  5 ; 4  5 ],3 ))) ==  Matrix (A) -  I
42+         @test  I- A ==  mortar (Tridiagonal (fill (- [1  2 ; 1  2 ],3 ), fill ([- 2  - 4 ; - 3  - 3 ],4 ), fill (- [4  5 ; 4  5 ],3 ))) ==  I -  Matrix (A)
43+     end 
44+ 
45+ 
46+     @testset  " Block-BandedMatrix"   begin 
47+         a =  blockedrange (1 : 5 )
48+         B =  _BandedMatrix (PseudoBlockArray (randn (5 ,length (a)),(Base. OneTo (5 ),a)), a, 3 , 1 )
49+         @test  blockcolsupport (B,Block (1 )) ==  Block .(1 : 3 )
50+         @test  blockcolsupport (B,Block (3 )) ==  Block .(2 : 4 )
51+         @test  blockrowsupport (B,Block (1 )) ==  Block .(1 : 2 )
52+         @test  blockrowsupport (B,Block (4 )) ==  Block .(3 : 5 )
53+ 
54+         Q =  Eye ((a,))[:,Block (2 )]
55+         @test  Q isa  BandedMatrix
56+         @test  blockcolsupport (Q,Block (1 )) ==  Block .(2 : 2 )
57+ 
58+         Q =  Eye ((a,))[Block (2 ),:]
59+         @test  Q isa  BandedMatrix
60+         @test  blockrowsupport (Q,Block (1 )) ==  Block .(2 : 2 )
61+ 
62+         @testset  " constant blocks"   begin 
63+             a =  blockedrange (Fill (2 ,5 ))
64+             Q =  Eye ((a,))[:,Block (2 )]
65+             @test  Q isa  BandedMatrix
66+         end 
67+     end 
68+ 
69+     @testset  " Banded PseudoMatrix"   begin 
70+         A =  PseudoBlockArray (brand (5 ,4 ,1 ,2 ), [3 ,2 ], [2 ,2 ])
71+         @test  bandwidths (A) ==  (1 ,2 )
72+         @test  BandedMatrix (A) ==  A
73+     end 
74+ end 
75+ 
76+ end  #  module
0 commit comments