Skip to content

Commit fecc8ab

Browse files
authored
ArrowheadMatrix -> BBBArrowheadMatrix (#61)
1 parent 36e9cfa commit fecc8ab

File tree

5 files changed

+64
-64
lines changed

5 files changed

+64
-64
lines changed

src/arrowhead.jl

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,52 @@
11

22
"""
3-
ArrowheadMatrix
3+
BBBArrowheadMatrix
44
55
A B B
66
C D D D
77
… … … … …
88
C D D
99
"""
10-
struct ArrowheadMatrix{T, AA<:AbstractMatrix{T}, BB, CC, DD} <: AbstractBandedBlockBandedMatrix{T}
10+
struct BBBArrowheadMatrix{T, AA<:AbstractMatrix{T}, BB, CC, DD} <: AbstractBandedBlockBandedMatrix{T}
1111
A::AA
1212
B::BB # first row blocks
1313
C::CC # first col blocks
1414
D::DD # these are interlaces
1515

16-
ArrowheadMatrix{T, AA, BB, CC, DD}(A, B, C, D) where {T,AA,BB,CC,DD} = new{T,AA,BB,CC,DD}(A, B, C, D)
16+
BBBArrowheadMatrix{T, AA, BB, CC, DD}(A, B, C, D) where {T,AA,BB,CC,DD} = new{T,AA,BB,CC,DD}(A, B, C, D)
1717
end
1818

19-
ArrowheadMatrix{T}(A::AbstractMatrix{T}, B, C, D) where T = ArrowheadMatrix{T, typeof(A), typeof(B), typeof(C), typeof(D)}(A, B, C, D)
20-
ArrowheadMatrix{T}(A, B, C, D) where T = ArrowheadMatrix(convert(AbstractMatrix{T}, A), B, C, D)
19+
BBBArrowheadMatrix{T}(A::AbstractMatrix{T}, B, C, D) where T = BBBArrowheadMatrix{T, typeof(A), typeof(B), typeof(C), typeof(D)}(A, B, C, D)
20+
BBBArrowheadMatrix{T}(A, B, C, D) where T = BBBArrowheadMatrix(convert(AbstractMatrix{T}, A), B, C, D)
2121

22-
const ArrowheadMatrices = Union{ArrowheadMatrix,Symmetric{<:Any,<:ArrowheadMatrix},Hermitian{<:Any,<:ArrowheadMatrix},
23-
UpperOrLowerTriangular{<:Any,<:ArrowheadMatrix}}
22+
const ArrowheadMatrices = Union{BBBArrowheadMatrix,Symmetric{<:Any,<:BBBArrowheadMatrix},Hermitian{<:Any,<:BBBArrowheadMatrix},
23+
UpperOrLowerTriangular{<:Any,<:BBBArrowheadMatrix}}
2424

2525

2626

2727
subblockbandwidths(A::ArrowheadMatrices) = (1,1)
2828

29-
BlockArrays._show_typeof(io::IO, B::ArrowheadMatrix{T}) where T = print(io, "ArrowheadMatrix{$T}")
29+
BlockArrays._show_typeof(io::IO, B::BBBArrowheadMatrix{T}) where T = print(io, "BBBArrowheadMatrix{$T}")
3030

31-
function blockbandwidths(A::ArrowheadMatrix)
31+
function blockbandwidths(A::BBBArrowheadMatrix)
3232
l,u = bandwidths(A.D[1])
3333
max(l,length(A.C)),max(u,length(A.B))
3434
end
3535

36-
function axes(L::ArrowheadMatrix)
36+
function axes(L::BBBArrowheadMatrix)
3737
ξ,n = size(L.A)
3838
m = length(L.D)
3939
μ,ν = size(L.D[1])
4040
blockedrange(Vcat(ξ, Fill(m,μ))), blockedrange(Vcat(n, Fill(m,ν)))
4141
end
4242

43-
copy(A::ArrowheadMatrix) = ArrowheadMatrix(copy(A.A), map(copy, A.B), map(copy, A.C), map(copy, A.D))
43+
copy(A::BBBArrowheadMatrix) = BBBArrowheadMatrix(copy(A.A), map(copy, A.B), map(copy, A.C), map(copy, A.D))
4444

4545
for adj in (:adjoint, :transpose)
46-
@eval $adj(A::ArrowheadMatrix) = ArrowheadMatrix($adj(A.A), map($adj, A.C), map($adj, A.B), map($adj, A.D))
46+
@eval $adj(A::BBBArrowheadMatrix) = BBBArrowheadMatrix($adj(A.A), map($adj, A.C), map($adj, A.B), map($adj, A.D))
4747
end
4848

49-
function getindex(L::ArrowheadMatrix{T}, Kk::BlockIndex{1}, Jj::BlockIndex{1})::T where T
49+
function getindex(L::BBBArrowheadMatrix{T}, Kk::BlockIndex{1}, Jj::BlockIndex{1})::T where T
5050
K,k = block(Kk),blockindex(Kk)
5151
J,j = block(Jj),blockindex(Jj)
5252
J == K == Block(1) && return L.A[k,j]
@@ -60,12 +60,12 @@ function getindex(L::ArrowheadMatrix{T}, Kk::BlockIndex{1}, Jj::BlockIndex{1})::
6060
return L.D[k][Int(K)-1, Int(J)-1]
6161
end
6262

63-
function getindex(L::ArrowheadMatrix, k::Int, j::Int)
63+
function getindex(L::BBBArrowheadMatrix, k::Int, j::Int)
6464
ax,bx = axes(L)
6565
L[findblockindex(ax, k), findblockindex(bx, j)]
6666
end
6767

68-
function ArrowheadMatrix(A, B, C, D)
68+
function BBBArrowheadMatrix(A, B, C, D)
6969
ξ,n = size(A)
7070
m = length(D)
7171
μ,ν = size(D[1])
@@ -95,7 +95,7 @@ function ArrowheadMatrix(A, B, C, D)
9595
end
9696
T = promote_type(eltype(A), mapreduce(eltype, promote_type, B; init=eltype(A)),
9797
mapreduce(eltype, promote_type, C; init=eltype(A)), mapreduce(eltype, promote_type, D; init=eltype(A)))
98-
ArrowheadMatrix{T}(A, B, C, D)
98+
BBBArrowheadMatrix{T}(A, B, C, D)
9999
end
100100

101101

@@ -113,24 +113,24 @@ arrowheadlayout(::BandedLazyLayouts) = LazyArrowheadLayout()
113113
arrowheadlayout(::DiagonalLayout{<:AbstractLazyLayout}) = LazyArrowheadLayout()
114114
symmetriclayout(lay::ArrowheadLayouts) = SymmetricLayout{typeof(lay)}()
115115

116-
MemoryLayout(::Type{<:ArrowheadMatrix{<:Any,<:Any,<:Any,<:Any,<:AbstractVector{D}}}) where D = arrowheadlayout(MemoryLayout(D))
116+
MemoryLayout(::Type{<:BBBArrowheadMatrix{<:Any,<:Any,<:Any,<:Any,<:AbstractVector{D}}}) where D = arrowheadlayout(MemoryLayout(D))
117117
# Hack since ∞ diagonal fill is only DiagonalLayout{FillLayout}
118-
MemoryLayout(::Type{<:ArrowheadMatrix{<:Any,<:Any,<:Any,<:Any,<:AbstractVector{<:Diagonal{<:Any,<:AbstractFill{<:Any,1,<:Tuple{OneToInf}}}}}}) = LazyArrowheadLayout()
118+
MemoryLayout(::Type{<:BBBArrowheadMatrix{<:Any,<:Any,<:Any,<:Any,<:AbstractVector{<:Diagonal{<:Any,<:AbstractFill{<:Any,1,<:Tuple{OneToInf}}}}}}) = LazyArrowheadLayout()
119119

120120
sublayout(::ArrowheadLayouts,
121121
::Type{<:NTuple{2,BlockSlice{<:BlockRange{1, Tuple{OneTo{Int}}}}}}) = ArrowheadLayout()
122122
function sub_materialize(::ArrowheadLayout, V::AbstractMatrix)
123123
KR,JR = parentindices(V)
124124
P = parent(V)
125125
M,N = KR.block[end],JR.block[end]
126-
ArrowheadMatrix(P.A, P.B, P.C,
126+
BBBArrowheadMatrix(P.A, P.B, P.C,
127127
layout_getindex.(P.D, Ref(oneto(Int(M)-1)), Ref(oneto(Int(N)-1))))
128128
end
129129

130130
symmetric(A) = Symmetric(A)
131131
symmetric(A::Union{SymTridiagonal,Symmetric,Diagonal}) = A
132132

133-
function getproperty(F::Symmetric{<:Any,<:ArrowheadMatrix}, d::Symbol)
133+
function getproperty(F::Symmetric{<:Any,<:BBBArrowheadMatrix}, d::Symbol)
134134
P = getfield(F, :data)
135135
if d == :A
136136
return symmetric(P.A)
@@ -242,19 +242,19 @@ end
242242
# Cholesky
243243
####
244244

245-
function reversecholcopy(S::Symmetric{<:Any,<:ArrowheadMatrix})
245+
function reversecholcopy(S::Symmetric{<:Any,<:BBBArrowheadMatrix})
246246
T = LinearAlgebra.choltype(S)
247247
A = parent(S)
248-
Symmetric(ArrowheadMatrix(LinearAlgebra.copymutable_oftype(A.A, T),
248+
Symmetric(BBBArrowheadMatrix(LinearAlgebra.copymutable_oftype(A.A, T),
249249
LinearAlgebra.copymutable_oftype.(A.B, T), LinearAlgebra.copymutable_oftype.(A.C, T),
250250
LinearAlgebra.copymutable_oftype.(A.D, T)))
251251
end
252252

253253

254254

255-
function MatrixFactorizations._reverse_chol!(A::ArrowheadMatrix, ::Type{UpperTriangular})
256-
257-
for B in A.D
255+
function MatrixFactorizations._reverse_chol!(A::BBBArrowheadMatrix, ::Type{UpperTriangular})
256+
257+
Threads.@threads for B in A.D
258258
reversecholesky!(Symmetric(B))
259259
end
260260

@@ -384,16 +384,16 @@ tupleop(op, A::Tuple, B::Tuple) = (op(first(A), first(B)), tupleop(op, tail(A),
384384

385385

386386
for op in (:+, :-)
387-
@eval $op(A::ArrowheadMatrix, B::ArrowheadMatrix) = ArrowheadMatrix($op(A.A, B.A), tupleop($op, A.B, B.B), tupleop($op, A.C, B.C), $op(A.D, B.D))
387+
@eval $op(A::BBBArrowheadMatrix, B::BBBArrowheadMatrix) = BBBArrowheadMatrix($op(A.A, B.A), tupleop($op, A.B, B.B), tupleop($op, A.C, B.C), $op(A.D, B.D))
388388
end
389-
-(A::ArrowheadMatrix) = ArrowheadMatrix(-A.A, map(-, A.B), map(-, A.C), -A.D)
389+
-(A::BBBArrowheadMatrix) = BBBArrowheadMatrix(-A.A, map(-, A.B), map(-, A.C), -A.D)
390390

391391
for op in (:*, :\)
392-
@eval $op(c::Number, A::ArrowheadMatrix) = ArrowheadMatrix($op(c, A.A), broadcast($op, c, A.B), broadcast($op, c, A.C), broadcast($op, c, A.D))
392+
@eval $op(c::Number, A::BBBArrowheadMatrix) = BBBArrowheadMatrix($op(c, A.A), broadcast($op, c, A.B), broadcast($op, c, A.C), broadcast($op, c, A.D))
393393
end
394394

395395
for op in (:*, :/)
396-
@eval $op(A::ArrowheadMatrix, c::Number) = ArrowheadMatrix($op(A.A, c), broadcast($op, A.B, c), broadcast($op, A.C, c), broadcast($op, A.D, c))
396+
@eval $op(A::BBBArrowheadMatrix, c::Number) = BBBArrowheadMatrix($op(A.A, c), broadcast($op, A.B, c), broadcast($op, A.C, c), broadcast($op, A.D, c))
397397
end
398398

399399
###
@@ -416,7 +416,7 @@ for (UNIT, Tri) in (('U',UnitUpperTriangular), ('N', UpperTriangular))
416416
A,B,D = P.A,P.B,P.D
417417
m = length(D)
418418

419-
for k = 1:m
419+
Threads.@threads for k = 1:m
420420
ArrayLayouts.ldiv!($Tri(D[k]), view(dest, n+k:m:length(dest)))
421421
end
422422

@@ -467,7 +467,7 @@ end
467467

468468

469469
for Tri in (:UpperTriangular, :UnitUpperTriangular)
470-
@eval function getproperty(F::$Tri{<:Any,<:ArrowheadMatrix}, d::Symbol)
470+
@eval function getproperty(F::$Tri{<:Any,<:BBBArrowheadMatrix}, d::Symbol)
471471
P = getfield(F, :data)
472472
if d == :A
473473
return $Tri(P.A)
@@ -484,7 +484,7 @@ for Tri in (:UpperTriangular, :UnitUpperTriangular)
484484
end
485485

486486
for Tri in (:LowerTriangular, :UnitLowerTriangular)
487-
@eval function getproperty(F::$Tri{<:Any,<:ArrowheadMatrix}, d::Symbol)
487+
@eval function getproperty(F::$Tri{<:Any,<:BBBArrowheadMatrix}, d::Symbol)
488488
P = getfield(F, :data)
489489
if d == :A
490490
return $Tri(P.A)

src/continuouspolynomial.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ function \(P::ContinuousPolynomial{0}, C::ContinuousPolynomial{1})
228228
@assert P.points == C.points
229229
v = one(T) ./ (3:2:∞)
230230
N = length(P.points)
231-
ArrowheadMatrix(_BandedMatrix(Ones{T}(2, N)/2, oneto(N-1), 0, 1),
231+
BBBArrowheadMatrix(_BandedMatrix(Ones{T}(2, N)/2, oneto(N-1), 0, 1),
232232
(_BandedMatrix(Fill(v[1], 1, N-1), oneto(N-1), 0, 0),),
233233
(_BandedMatrix(Vcat(Ones{T}(1, N)/2, -Ones{T}(1, N)/2), oneto(N-1), 0, 1),),
234234
Fill(_BandedMatrix(Hcat(v, Zeros{T}(∞), -v)', axes(v,1), 1, 1), N-1))
@@ -243,7 +243,7 @@ end
243243

244244
# The basis for D is defined in each element a..b as diff(legendre(a..b)) with delta functions. But note that
245245
# the delta functions don't change! We need to kill off the deltas in conversion.
246-
ArrowheadMatrix(_BandedMatrix(Vcat(Fill(-one(T),1,N-1), Fill(one(T),1,N-1)), N-2, 0, 1),
246+
BBBArrowheadMatrix(_BandedMatrix(Vcat(Fill(-one(T),1,N-1), Fill(one(T),1,N-1)), N-2, 0, 1),
247247
(_BandedMatrix(Ones{T}(2,N-1), N-2, 0, 1),),
248248
(SquareEye{T}(N-1),),
249249
Fill(R[:,2:end], N-1))
@@ -261,7 +261,7 @@ function grammatrix(A::ContinuousPolynomial{0,T}) where T
261261
N = length(r) - 1
262262
hs = diff(r)
263263
M = grammatrix(Legendre{T}())
264-
ArrowheadMatrix{T}(Diagonal(hs), (), (), [Diagonal(M.diag[2:end] * h/2) for h in hs])
264+
BBBArrowheadMatrix{T}(Diagonal(hs), (), (), [Diagonal(M.diag[2:end] * h/2) for h in hs])
265265
end
266266

267267
function grammatrix(A::ContinuousPolynomial{0,T, <:AbstractRange}) where T
@@ -283,7 +283,7 @@ function grammatrix(C::ContinuousPolynomial{1, T, <:AbstractRange}) where T
283283
a21 = _BandedMatrix(Fill(h/6, 2, N), N+1, 1, 0)
284284
a31 = _BandedMatrix(Vcat(Fill(-h/30, 1, N), Fill(h/30, 1, N)), N+1, 1, 0)
285285

286-
Symmetric(ArrowheadMatrix(a11, (a21, a31), (),
286+
Symmetric(BBBArrowheadMatrix(a11, (a21, a31), (),
287287
Fill(_BandedMatrix(Vcat((h*a/2)',
288288
Zeros{T}(1,∞),
289289
(h*b/2)'), ∞, 0, 2), N)))
@@ -320,7 +320,7 @@ function diff(C::ContinuousPolynomial{1,T}; dims=1) where T
320320
r = C.points
321321
N = length(r)
322322
s = one(T) ./ (r[2:end]-r[1:end-1])
323-
ContinuousPolynomial{0}(r) * ArrowheadMatrix(_BandedMatrix(Vcat([0; s]', [-s; 0]'), length(s), 0, 1), (), (),
323+
ContinuousPolynomial{0}(r) * BBBArrowheadMatrix(_BandedMatrix(Vcat([0; s]', [-s; 0]'), length(s), 0, 1), (), (),
324324
(-2s) .* Ref(Eye{T}(∞)))
325325
end
326326

@@ -329,7 +329,7 @@ function diff(C::ContinuousPolynomial{1,T,<:AbstractRange}; dims=1) where T
329329
r = C.points
330330
N = length(r)
331331
s = 1 ./ step(r)
332-
ContinuousPolynomial{0}(r) * ArrowheadMatrix(_BandedMatrix(Vcat(Fill(s, 1, N), Fill(-s, 1, N)), N-1, 0, 1), (), (),
332+
ContinuousPolynomial{0}(r) * BBBArrowheadMatrix(_BandedMatrix(Vcat(Fill(s, 1, N), Fill(-s, 1, N)), N-1, 0, 1), (), (),
333333
Fill(-2s*Eye{T}(∞), N-1))
334334
end
335335

@@ -338,7 +338,7 @@ function diff(P::ContinuousPolynomial{0,T,<:AbstractRange}; dims=1) where T
338338
N = length(r)
339339
s = step(r)
340340

341-
ContinuousPolynomial{-1}(r) * ArrowheadMatrix(_BandedMatrix(Vcat(Fill(one(T),1,N-1), Fill(-one(T),1,N-1)), N-2, 0, 1),
341+
ContinuousPolynomial{-1}(r) * BBBArrowheadMatrix(_BandedMatrix(Vcat(Fill(one(T),1,N-1), Fill(-one(T),1,N-1)), N-2, 0, 1),
342342
(),
343343
(),
344344
Fill(Eye{T}(∞) * (2/s), N-1))
@@ -352,7 +352,7 @@ function weaklaplacian(C::ContinuousPolynomial{1,T,<:AbstractRange}) where T
352352
si = inv(s)
353353
t1 = Vcat(-si, Fill(-2si, N-2), -si)
354354
t2 = Fill(si, N-1)
355-
Symmetric(ArrowheadMatrix(LazyBandedMatrices.Bidiagonal(t1, t2, :U), (), (),
355+
Symmetric(BBBArrowheadMatrix(LazyBandedMatrices.Bidiagonal(t1, t2, :U), (), (),
356356
Fill(Diagonal(convert(T,-4) ./ (s*(convert(T,3):2:∞))), N-1)))
357357
end
358358

src/dirichlet.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ function \(C::ContinuousPolynomial{1}, Q::DirichletPolynomial)
3636
T = promote_type(eltype(Q), eltype(C))
3737
@assert C.points == Q.points
3838
m = length(C.points)
39-
ArrowheadMatrix(layout_getindex(Eye{T}(m), :, 2:m-1), (), (), Fill(Eye{T}(∞), m-1))
39+
BBBArrowheadMatrix(layout_getindex(Eye{T}(m), :, 2:m-1), (), (), Fill(Eye{T}(∞), m-1))
4040
end
4141

4242
# \ understood as pseudo invers
4343
function \(Q::DirichletPolynomial, C::ContinuousPolynomial{1})
4444
T = promote_type(eltype(Q), eltype(C))
4545
@assert C.points == Q.points
4646
m = length(C.points)
47-
ArrowheadMatrix(layout_getindex(Eye{T}(m), 2:m-1, :), (), (), Fill(Eye{T}(∞), m-1))
47+
BBBArrowheadMatrix(layout_getindex(Eye{T}(m), 2:m-1, :), (), (), Fill(Eye{T}(∞), m-1))
4848
end
4949

5050
function \(P::ContinuousPolynomial, Q::DirichletPolynomial)
@@ -173,7 +173,7 @@ function weaklaplacian(C::DirichletPolynomial{T,<:AbstractRange}) where T
173173
si = inv(s)
174174
t1 = Fill(-2si, N-2)
175175
t2 = Fill(si, N-3)
176-
Symmetric(ArrowheadMatrix(LazyBandedMatrices.Bidiagonal(t1, t2, :U), (), (),
176+
Symmetric(BBBArrowheadMatrix(LazyBandedMatrices.Bidiagonal(t1, t2, :U), (), (),
177177
Fill(Diagonal(convert(T, -4) ./ (s*(convert(T,3):2:∞))), N-1)))
178178
end
179179

@@ -189,7 +189,7 @@ function grammatrix(Q::DirichletPolynomial{T, <:AbstractRange}) where T
189189
a21 = _BandedMatrix(Fill(h/6, 2, N), N-1, 0, 1)
190190
a31 = _BandedMatrix(Vcat(Fill(-h/30, 1, N), Fill(h/30, 1, N)), N-1, 0, 1)
191191

192-
Symmetric(ArrowheadMatrix(a11, (a21, a31), (),
192+
Symmetric(BBBArrowheadMatrix(a11, (a21, a31), (),
193193
Fill(_BandedMatrix(Vcat((h*a/2)',
194194
Zeros{T}(1,∞),
195195
(h*b/2)'), ∞, 0, 2), N)))

0 commit comments

Comments
 (0)