1+ using InfiniteLinearAlgebra, InfiniteArrays, BandedMatrices, FillArrays, Test
2+ import BandedMatrices: _BandedMatrix
3+
4+ @testset " ∞-banded" begin
5+ @testset " Diagonal and BandedMatrix" begin
6+ D = Diagonal (Fill (2 ,∞))
7+
8+ B = D[1 : ∞,2 : ∞]
9+ @test B isa BandedMatrix
10+ @test B[1 : 10 ,1 : 10 ] == diagm (- 1 => Fill (2 ,9 ))
11+ @test B[1 : ∞,2 : ∞] isa BandedMatrix
12+
13+ A = BandedMatrix (0 => 1 : ∞, 1 => Fill (2.0 ,∞), - 1 => Fill (3.0 ,∞))
14+ x = [1 ; 2 ; zeros (∞)]
15+ @test A* x isa Vcat
16+ @test (A* x)[1 : 10 ] == A[1 : 10 ,1 : 10 ]* x[1 : 10 ]
17+
18+ @test InfBandCartesianIndices (0 )[1 : 5 ] == CartesianIndex .(1 : 5 ,1 : 5 )
19+ @test InfBandCartesianIndices (1 )[1 : 5 ] == CartesianIndex .(1 : 5 ,2 : 6 )
20+ @test InfBandCartesianIndices (- 1 )[1 : 5 ] == CartesianIndex .(2 : 6 ,1 : 5 )
21+
22+ @test A[band (0 )][2 : 10 ] == 2 : 10
23+ @test D[band (0 )] ≡ Fill (2 ,∞)
24+ @test D[band (1 )] ≡ Fill (0 ,∞)
25+
26+ @test B* A* x isa Vcat
27+ @test (B* A* x)[1 : 10 ] == [0 ; 10 ; 14 ; 12 ; zeros (6 )]
28+
29+ @test _BandedMatrix ((1 : ∞)' , ∞, - 1 , 1 ) isa BandedMatrix
30+ end
31+
32+ @testset " ∞-Toeplitz" begin
33+ A = BandedMatrix (1 => Fill (2im ,∞), 2 => Fill (- 1 ,∞), 3 => Fill (2 ,∞), - 2 => Fill (- 4 ,∞), - 3 => Fill (- 2im ,∞))
34+ @test A isa InfToeplitz
35+ @test MemoryLayout (typeof (A. data)) == ConstRows ()
36+ @test MemoryLayout (typeof (A)) == BandedToeplitzLayout ()
37+ V = view (A,:,3 : ∞)
38+ @test MemoryLayout (typeof (bandeddata (V))) == ConstRows ()
39+ @test MemoryLayout (typeof (V)) == BandedToeplitzLayout ()
40+ @test BandedMatrix (V) isa InfToeplitz
41+ @test A[:,3 : end ] isa InfToeplitz
42+
43+ @test (A + 2 I)[1 : 10 ,1 : 10 ] == (2 I + A)[1 : 10 ,1 : 10 ] == A[1 : 10 ,1 : 10 ] + 2 I
44+
45+ @test MemoryLayout (Tridiagonal (Fill (1 ,∞), Fill (2 ,∞), Fill (3 ,∞))) isa TridiagonalToeplitzLayout
46+ @test MemoryLayout (Bidiagonal (Fill (1 ,∞), Fill (2 ,∞), :U )) isa BidiagonalToeplitzLayout
47+ @test MemoryLayout (SymTridiagonal (Fill (1 ,∞), Fill (2 ,∞))) isa TridiagonalToeplitzLayout
48+ @test MemoryLayout (LazyBandedMatrices. Tridiagonal (Fill (1 ,∞), Zeros (∞), Fill (3 ,∞))) isa TridiagonalToeplitzLayout
49+ @test MemoryLayout (LazyBandedMatrices. Bidiagonal (Fill (1 ,∞), Zeros (∞), :U )) isa BidiagonalToeplitzLayout
50+ @test MemoryLayout (LazyBandedMatrices. SymTridiagonal (Fill (1 ,∞), Zeros (∞))) isa TridiagonalToeplitzLayout
51+
52+ T = LazyBandedMatrices. Tridiagonal (Fill (1 ,∞), Zeros (∞), Fill (3 ,∞))
53+ @test T[2 : ∞,3 : ∞] isa SubArray
54+ @test exp .(T) isa BroadcastMatrix
55+ @test exp .(T)[2 : ∞,3 : ∞] isa SubArray
56+
57+ B = LazyBandedMatrices. Bidiagonal (Fill (1 ,∞), Zeros (∞), :U )
58+ @test B[2 : ∞,3 : ∞] isa SubArray
59+ @test exp .(B) isa BroadcastMatrix
60+ @test exp .(B)[2 : ∞,3 : ∞] isa SubArray
61+
62+ @testset " algebra" begin
63+ T = Tridiagonal (Fill (1 ,∞), Fill (2 ,∞), Fill (3 ,∞))
64+ @test T isa InfiniteLinearAlgebra. TriToeplitz
65+ @test (T + 2 I)[1 : 10 ,1 : 10 ] == (2 I + T)[1 : 10 ,1 : 10 ] == T[1 : 10 ,1 : 10 ] + 2 I
66+ end
67+ end
68+
69+ @testset " Pert-Toeplitz" begin
70+ @testset " Inf Pert" begin
71+ A = BandedMatrix (- 2 => Vcat (Float64[], Fill (1 / 4 ,∞)), 0 => Vcat ([1.0 + im,2 ,3 ],Fill (0 ,∞)), 1 => Vcat (Float64[], Fill (1 ,∞)))
72+ @test A isa PertToeplitz
73+ @test MemoryLayout (typeof (A)) == PertToeplitzLayout ()
74+ V = view (A,2 : ∞,2 : ∞)
75+ @test MemoryLayout (typeof (V)) == PertToeplitzLayout ()
76+ @test BandedMatrix (V) isa PertToeplitz
77+ @test A[2 : ∞,2 : ∞] isa PertToeplitz
78+
79+ @test (A + 2 I)[1 : 10 ,1 : 10 ] == (2 I + A)[1 : 10 ,1 : 10 ] == A[1 : 10 ,1 : 10 ] + 2 I
80+ end
81+
82+ @testset " TriPert" begin
83+ A = SymTridiagonal (Vcat ([1 ,2. ], Fill (2. ,∞)), Vcat ([3. ,4. ], Fill .(0.5 ,∞)))
84+ @test A isa InfiniteLinearAlgebra. SymTriPertToeplitz
85+ @test (A + 2 I)[1 : 10 ,1 : 10 ] == (2 I + A)[1 : 10 ,1 : 10 ] == A[1 : 10 ,1 : 10 ] + 2 I
86+
87+ A = Tridiagonal (Vcat ([3. ,4. ], Fill .(0.5 ,∞)), Vcat ([1 ,2. ], Fill (2. ,∞)), Vcat ([3. ,4. ], Fill .(0.5 ,∞)))
88+ @test A isa InfiniteLinearAlgebra. TriPertToeplitz
89+ @test Adjoint (A) isa InfiniteLinearAlgebra. AdjTriPertToeplitz
90+ @test (A + 2 I)[1 : 10 ,1 : 10 ] == (2 I + A)[1 : 10 ,1 : 10 ] == A[1 : 10 ,1 : 10 ] + 2 I
91+ @test (Adjoint (A) + 2 I)[1 : 10 ,1 : 10 ] == (2 I + Adjoint (A))[1 : 10 ,1 : 10 ] == Adjoint (A)[1 : 10 ,1 : 10 ] + 2 I
92+ end
93+
94+
95+ @testset " InfBanded" begin
96+ A = _BandedMatrix (Fill (2 ,4 ,∞),ℵ₀,2 ,1 )
97+ B = _BandedMatrix (Fill (3 ,2 ,∞),ℵ₀,- 1 ,2 )
98+ @test mul (A,A) isa PertToeplitz
99+ @test A* A isa PertToeplitz
100+ @test (A* A)[1 : 20 ,1 : 20 ] == A[1 : 20 ,1 : 23 ]* A[1 : 23 ,1 : 20 ]
101+ @test (A* B)[1 : 20 ,1 : 20 ] == A[1 : 20 ,1 : 23 ]* B[1 : 23 ,1 : 20 ]
102+ end
103+ end
104+
105+ @testset " adjortrans" begin
106+ A = BandedMatrix (0 => 1 : ∞, 1 => Fill (2.0 + im,∞), - 1 => Fill (3.0 ,∞))
107+ @test copy (A' )[1 : 10 ,1 : 10 ] == (A' )[1 : 10 ,1 : 10 ]
108+ @test copy (transpose (A))[1 : 10 ,1 : 10 ] == transpose (A)[1 : 10 ,1 : 10 ]
109+ end
110+
111+ @testset " Eye subindex" begin
112+ @test Eye (∞)[:,1 : 3 ][1 : 5 ,:] == Eye (∞)[Base. Slice (oneto (∞)),1 : 3 ][1 : 5 ,:] == Eye (5 ,3 )
113+ @test Eye (∞)[1 : 3 ,:][:,1 : 5 ] == Eye (∞)[1 : 3 ,Base. Slice (oneto (∞))][:,1 : 5 ] == Eye (3 ,5 )
114+ @test Eye (∞)[:,:][1 : 5 ,1 : 3 ] == Eye (∞)[Base. Slice (oneto (∞)),Base. Slice (oneto (∞))][1 : 5 ,1 : 3 ] == Eye (5 ,3 )
115+ end
116+
117+ @testset " band(0) indexing" begin
118+ D = ApplyArray (* , Diagonal (1 : ∞), Diagonal (1 : ∞))
119+ @test D[band (0 )][1 : 10 ] == (1 : 10 ). ^ 2
120+ end
121+
122+ @testset " Fill * Banded" begin
123+ A = _BandedMatrix (Ones (1 ,∞), ∞, 1 ,- 1 )
124+ B = _BandedMatrix (Fill (1.0 π,1 ,∞), ∞, 0 ,0 )
125+ @test (A* B)[1 : 10 ,1 : 10 ] ≈ BandedMatrix (- 1 => Fill (1.0 π,9 ))
126+ end
127+ end
0 commit comments