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