1
+ _BandedMatrix (data:: AbstractMatrix{T} , :: Infinity , l, u) where T = _BandedMatrix (data, ℵ₀, l, u)
2
+
1
3
# ##
2
4
# BandIndexing
3
5
# ##
@@ -52,10 +54,10 @@ _prepad(p, a::Zeros{T,1}) where T = Zeros{T}(length(a)+p)
52
54
_prepad (p, a:: Ones{T,1} ) where T = Ones {T} (length (a)+ p)
53
55
_prepad (p, a:: AbstractFill{T,1} ) where T = Fill {T} (getindex_value (a), length (a)+ p)
54
56
55
- banded_similar (T, (m,n):: Tuple{Int,Infinity } , (l,u):: Tuple{Int,Int} ) = BandedMatrix {T} (undef, (n,m), (u,l))'
57
+ banded_similar (T, (m,n):: Tuple{Int,PosInfinity } , (l,u):: Tuple{Int,Int} ) = BandedMatrix {T} (undef, (n,m), (u,l))'
56
58
57
59
function BandedMatrix {T} (kv:: Tuple{Vararg{Pair{<:Integer,<:AbstractVector}}} ,
58
- :: NTuple{2,Infinity } ,
60
+ :: NTuple{2,PosInfinity } ,
59
61
(l,u):: NTuple{2,Integer} ) where T
60
62
ks = getproperty .(kv, :first )
61
63
l,u = - minimum (ks),maximum (ks)
@@ -64,12 +66,12 @@ function BandedMatrix{T}(kv::Tuple{Vararg{Pair{<:Integer,<:AbstractVector}}},
64
66
for (k,j) in zip (u .- ks .+ 1 ,1 : length (ks))
65
67
c[k,j] = one (T)
66
68
end
67
- _BandedMatrix (ApplyArray (* ,c,rws), ∞ , l, u)
69
+ _BandedMatrix (ApplyArray (* ,c,rws), ℵ₀ , l, u)
68
70
end
69
71
70
72
# Construct InfToeplitz
71
73
function BandedMatrix {T} (kv:: Tuple {Vararg{Pair{<: Integer ,<: Fill{<:Any,1,Tuple{OneToInf{Int}}} }}},
72
- mn:: NTuple{2,Infinity } ,
74
+ mn:: NTuple{2,PosInfinity } ,
73
75
lu:: NTuple{2,Integer} ) where T
74
76
m,n = mn
75
77
@assert isinf (n)
@@ -80,11 +82,11 @@ function BandedMatrix{T}(kv::Tuple{Vararg{Pair{<:Integer,<:Fill{<:Any,1,Tuple{On
80
82
t[u- k+ 1 ] = v. value
81
83
end
82
84
83
- return _BandedMatrix (t * Ones {T} (1 ,∞), m , l, u)
85
+ return _BandedMatrix (t * Ones {T} (1 ,∞), Integer (m) , l, u)
84
86
end
85
87
86
88
function BandedMatrix {T} (kv:: Tuple {Vararg{Pair{<: Integer ,<: Vcat {<: Any ,1 ,<: Tuple {<: AbstractVector ,Fill{<: Any ,1 ,Tuple{OneToInf{Int}}}}}}}},
87
- mn:: NTuple{2,Infinity } ,
89
+ mn:: NTuple{2,PosInfinity } ,
88
90
lu:: NTuple{2,Integer} ) where T
89
91
m,n = mn
90
92
@assert isinf (n)
@@ -105,38 +107,38 @@ function BandedMatrix{T}(kv::Tuple{Vararg{Pair{<:Integer,<:Vcat{<:Any,1,<:Tuple{
105
107
end
106
108
end
107
109
108
- return _BandedMatrix (Hcat (data, t * Ones {T} (1 ,∞)), m , l, u)
110
+ return _BandedMatrix (Hcat (data, t * Ones {T} (1 ,∞)), Integer (m) , l, u)
109
111
end
110
112
111
113
112
114
function BandedMatrix (Ac:: Adjoint{T,<:InfToeplitz} ) where T
113
115
A = parent (Ac)
114
116
l,u = bandwidths (A)
115
117
a = A. data. args[1 ]
116
- _BandedMatrix (reverse (conj (a)) * Ones {T} (1 ,∞), ∞ , u, l)
118
+ _BandedMatrix (reverse (conj (a)) * Ones {T} (1 ,∞), ℵ₀ , u, l)
117
119
end
118
120
119
121
function BandedMatrix (Ac:: Transpose{T,<:InfToeplitz} ) where T
120
122
A = parent (Ac)
121
123
l,u = bandwidths (A)
122
124
a = A. data. args[1 ]
123
- _BandedMatrix (reverse (a) * Ones {T} (1 ,∞), ∞ , u, l)
125
+ _BandedMatrix (reverse (a) * Ones {T} (1 ,∞), ℵ₀ , u, l)
124
126
end
125
127
126
128
function BandedMatrix (Ac:: Adjoint{T,<:PertToeplitz} ) where T
127
129
A = parent (Ac)
128
130
l,u = bandwidths (A)
129
131
a,b = A. data. args
130
132
Ac_fd = BandedMatrix (_BandedMatrix (Hcat (a, b[:,1 : l+ 1 ]), size (a,2 )+ l, l, u)' )
131
- _BandedMatrix (Hcat (Ac_fd. data, reverse (conj (b. args[1 ])) * Ones {T} (1 ,∞)), ∞ , u, l)
133
+ _BandedMatrix (Hcat (Ac_fd. data, reverse (conj (b. args[1 ])) * Ones {T} (1 ,∞)), ℵ₀ , u, l)
132
134
end
133
135
134
136
function BandedMatrix (Ac:: Transpose{T,<:PertToeplitz} ) where T
135
137
A = parent (Ac)
136
138
l,u = bandwidths (A)
137
139
a,b = A. data. args
138
140
Ac_fd = BandedMatrix (transpose (_BandedMatrix (Hcat (a, b[:,1 : l+ 1 ]), size (a,2 )+ l, l, u)))
139
- _BandedMatrix (Hcat (Ac_fd. data, reverse (b. args[1 ]) * Ones {T} (1 ,∞)), ∞ , u, l)
141
+ _BandedMatrix (Hcat (Ac_fd. data, reverse (b. args[1 ]) * Ones {T} (1 ,∞)), ℵ₀ , u, l)
140
142
end
141
143
142
144
@@ -191,25 +193,25 @@ for op in (:-, :+)
191
193
TV = promote_type (eltype (λ),V)
192
194
a = convert (AbstractVector{TV}, $ op .(A. data. args[1 ]))
193
195
a[u+ 1 ] += λ. λ
194
- _BandedMatrix (a* Ones {TV} (1 ,∞), ∞ , l, u)
196
+ _BandedMatrix (a* Ones {TV} (1 ,∞), ℵ₀ , l, u)
195
197
end
196
198
197
199
function $op (A:: InfToeplitz{T} , λ:: UniformScaling ) where T
198
200
l,u = bandwidths (A)
199
201
TV = promote_type (T,eltype (λ))
200
202
a = TV[Zeros {TV} (max (- u,0 )); A. data. args[1 ]; Zeros {TV} (max (- l,0 ))]
201
203
a[max (0 ,u)+ 1 ] = $ op (a[max (u,0 )+ 1 ], λ. λ)
202
- _BandedMatrix (a* Ones {TV} (1 ,∞), ∞ , max (l,0 ), max (u,0 ))
204
+ _BandedMatrix (a* Ones {TV} (1 ,∞), ℵ₀ , max (l,0 ), max (u,0 ))
203
205
end
204
206
205
207
function $op (λ:: UniformScaling , A:: PertToeplitz{V} ) where V
206
208
l,u = bandwidths (A)
207
209
TV = promote_type (eltype (λ),V)
208
- a, t = convert .(AbstractVector {TV}, A. data. args)
210
+ a, t = map (AbstractArray {TV}, A. data. args)
209
211
b = $ op .(t. args[1 ])
210
- a[u+ 1 ,:] += λ. λ
212
+ a[u+ 1 ,:] . += λ. λ
211
213
b[u+ 1 ] += λ. λ
212
- _BandedMatrix (Hcat (a, b* Ones {TV} (1 ,∞)), ∞ , l, u)
214
+ _BandedMatrix (Hcat (a, b* Ones {TV} (1 ,∞)), ℵ₀ , l, u)
213
215
end
214
216
215
217
function $op (A:: PertToeplitz{T} , λ:: UniformScaling ) where T
@@ -220,7 +222,7 @@ for op in (:-, :+)
220
222
b = AbstractVector {TV} (t. args[1 ])
221
223
a[u+ 1 ,:] .= $ op .(a[u+ 1 ,:],λ. λ)
222
224
b[u+ 1 ] = $ op (b[u+ 1 ], λ. λ)
223
- _BandedMatrix (Hcat (a, b* Ones {TV} (1 ,∞)), ∞ , l, u)
225
+ _BandedMatrix (Hcat (a, b* Ones {TV} (1 ,∞)), ℵ₀ , l, u)
224
226
end
225
227
end
226
228
end
@@ -237,7 +239,7 @@ function BandedMatrix(A::PertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
237
239
t = b. args[1 ] # topelitz part
238
240
t_pad = vcat (t,Zeros (l- A. l))
239
241
data = Hcat ([vcat (a,Zeros {T} (l- A. l,size (a,2 ))) repeat (t_pad,1 ,l)], t_pad * Ones {T} (1 ,∞))
240
- _BandedMatrix (data, ∞ , l, u)
242
+ _BandedMatrix (data, ℵ₀ , l, u)
241
243
end
242
244
243
245
function BandedMatrix (A:: SymTriPertToeplitz{T} , (l,u):: Tuple{Int,Int} ) where T
@@ -251,7 +253,7 @@ function BandedMatrix(A::SymTriPertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
251
253
data[u+ 1 ,length (a)+ 1 : end ] .= a∞. value
252
254
data[u+ 2 ,1 : length (b)] .= b
253
255
data[u+ 2 ,length (b)+ 1 : end ] .= b∞. value
254
- _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; b∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ∞ , l, u)
256
+ _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; b∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ℵ₀ , l, u)
255
257
end
256
258
257
259
function BandedMatrix (A:: SymTridiagonal {T,Fill{T,1 ,Tuple{OneToInf{Int}}}}, (l,u):: Tuple{Int,Int} ) where T
@@ -262,7 +264,7 @@ function BandedMatrix(A::SymTridiagonal{T,Fill{T,1,Tuple{OneToInf{Int}}}}, (l,u)
262
264
data[u,2 : end ] .= b∞. value
263
265
data[u+ 1 ,1 : end ] .= a∞. value
264
266
data[u+ 2 ,1 : end ] .= b∞. value
265
- _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; b∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ∞ , l, u)
267
+ _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; b∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ℵ₀ , l, u)
266
268
end
267
269
268
270
function BandedMatrix (A:: TriPertToeplitz{T} , (l,u):: Tuple{Int,Int} ) where T
@@ -277,7 +279,7 @@ function BandedMatrix(A::TriPertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
277
279
data[u+ 1 ,length (a)+ 1 : end ] .= a∞. value
278
280
data[u+ 2 ,1 : length (c)] .= c
279
281
data[u+ 2 ,length (c)+ 1 : end ] .= c∞. value
280
- _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; c∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ∞ , l, u)
282
+ _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; c∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ℵ₀ , l, u)
281
283
end
282
284
283
285
function BandedMatrix (A:: Tridiagonal {T,Fill{T,1 ,Tuple{OneToInf{Int}}}}, (l,u):: Tuple{Int,Int} ) where T
@@ -289,14 +291,14 @@ function BandedMatrix(A::Tridiagonal{T,Fill{T,1,Tuple{OneToInf{Int}}}}, (l,u)::T
289
291
data[u,2 : end ] .= b∞. value
290
292
data[u+ 1 ,1 : end ] .= a∞. value
291
293
data[u+ 2 ,1 : end ] .= c∞. value
292
- _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; c∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ∞ , l, u)
294
+ _BandedMatrix (Hcat (data, [Zeros {T} (u- 1 ); b∞. value; a∞. value; c∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞)), ℵ₀ , l, u)
293
295
end
294
296
295
297
function InfToeplitz (A:: Tridiagonal {T,Fill{T,1 ,Tuple{OneToInf{Int}}}}, (l,u):: Tuple{Int,Int} ) where T
296
298
a∞ = A. d
297
299
b∞ = A. du
298
300
c∞ = A. dl
299
- _BandedMatrix ([Zeros {T} (u- 1 ); b∞. value; a∞. value; c∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞), ∞ , l, u)
301
+ _BandedMatrix ([Zeros {T} (u- 1 ); b∞. value; a∞. value; c∞. value; Zeros {T} (l- 1 )] * Ones {T} (1 ,∞), ℵ₀ , l, u)
300
302
end
301
303
302
304
InfToeplitz (A:: Tridiagonal {T,Fill{T,1 ,Tuple{OneToInf{Int}}}}) where T = InfToeplitz (A, bandwidths (A))
@@ -384,8 +386,8 @@ _BandedMatrix(::PertToeplitzLayout, A::AbstractMatrix) =
384
386
385
387
386
388
387
- ArrayLayouts. _apply (_, :: NTuple{2,Infinity } , op, Λ:: UniformScaling , A:: AbstractMatrix ) = op (Diagonal (Fill (Λ. λ,∞)), A)
388
- ArrayLayouts. _apply (_, :: NTuple{2,Infinity } , op, A:: AbstractMatrix , Λ:: UniformScaling ) = op (A, Diagonal (Fill (Λ. λ,∞)))
389
+ ArrayLayouts. _apply (_, :: NTuple{2,InfiniteCardinal{0} } , op, Λ:: UniformScaling , A:: AbstractMatrix ) = op (Diagonal (Fill (Λ. λ,∞)), A)
390
+ ArrayLayouts. _apply (_, :: NTuple{2,InfiniteCardinal{0} } , op, A:: AbstractMatrix , Λ:: UniformScaling ) = op (A, Diagonal (Fill (Λ. λ,∞)))
389
391
390
392
_default_banded_broadcast (bc:: Broadcasted , :: Tuple{<:OneToInf,<:Any} ) = copy (Broadcasted {LazyArrayStyle{2}} (bc. f, bc. args))
391
393
@@ -417,7 +419,7 @@ function _bandedfill_mul(M::MulAdd, ::Tuple{InfAxes,InfAxes}, ::Tuple{InfAxes,In
417
419
l,u = Al+ Bl,Au+ Bu
418
420
m = min (Au+ Al,Bl+ Bu)+ 1
419
421
λ = getindex_value (bandeddata (A))* getindex_value (bandeddata (B))
420
- ret = _BandedMatrix (Hcat (Array {typeof(λ)} (undef, l+ u+ 1 ,u), [1 : m- 1 ; Fill (m,l+ u- 2 m+ 3 ); m- 1 : - 1 : 1 ]* Fill (λ,1 ,∞)), ∞ , l, u)
422
+ ret = _BandedMatrix (Hcat (Array {typeof(λ)} (undef, l+ u+ 1 ,u), [1 : m- 1 ; Fill (m,l+ u- 2 m+ 3 ); m- 1 : - 1 : 1 ]* Fill (λ,1 ,∞)), ℵ₀ , l, u)
421
423
mul! (view (ret, 1 : l+ u,1 : u), view (A,1 : l+ u,1 : u+ Bl), view (B,1 : u+ Bl,1 : u))
422
424
ret
423
425
end
0 commit comments