Skip to content

Commit b77c57f

Browse files
committed
Remove over-templating
1 parent a5037f2 commit b77c57f

File tree

3 files changed

+49
-37
lines changed

3 files changed

+49
-37
lines changed

src/infcholesky.jl

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

2-
mutable struct AdaptiveCholeskyFactors{T,DM<:AbstractMatrix{T},M<:AbstractMatrix{T}} <: LazyMatrix{T}
3-
data::CachedMatrix{T,DM,M}
2+
mutable struct AdaptiveCholeskyFactors{T,DM<:AbstractMatrix{T}} <: LazyMatrix{T}
3+
data::CachedMatrix{T,DM}
44
ncols::Int
55
end
66

@@ -16,7 +16,19 @@ function AdaptiveCholeskyFactors(::SymmetricBandedLayouts, S::AbstractMatrix{T})
1616
AdaptiveCholeskyFactors(CachedArray(data,A), 0)
1717
end
1818
AdaptiveCholeskyFactors(A::AbstractMatrix{T}) where T = AdaptiveCholeskyFactors(MemoryLayout(A), A)
19-
MemoryLayout(::Type{AdaptiveCholeskyFactors{T,DM,M}}) where {T,DM,M} = AdaptiveLayout{typeof(MemoryLayout(DM))}()
19+
20+
struct AdaptiveCholeskyFactorsLayout <: AbstractLazyLayout end
21+
struct AdaptiveCholeskyFactorsBandedLayout <: AbstractLazyBandedLayout end
22+
struct AdaptiveCholeskyFactorsBlockBandedLayout <: AbstractLazyBlockBandedLayout end
23+
24+
const AdaptiveCholeskyFactorsLayouts = Union{AdaptiveCholeskyFactorsLayout,AdaptiveCholeskyFactorsBandedLayout,AdaptiveCholeskyFactorsBlockBandedLayout}
25+
26+
adaptivecholeskyfactorslayout(_) = AdaptiveCholeskyFactorsLayout()
27+
adaptivecholeskyfactorslayout(::BandedLayouts) = AdaptiveCholeskyFactorsBandedLayout()
28+
adaptivecholeskyfactorslayout(::BlockBandedLayouts) = AdaptiveCholeskyFactorsBlockBandedLayout()
29+
30+
31+
MemoryLayout(::Type{AdaptiveCholeskyFactors{T,DM}}) where {T,DM} = adaptivecholeskyfactorslayout(MemoryLayout(DM))
2032

2133
copy(A::AdaptiveCholeskyFactors) = AdaptiveCholeskyFactors(copy(A.data), copy(A.ncols))
2234
copy(A::Adjoint{T,<:AdaptiveCholeskyFactors}) where T = copy(parent(A))'
@@ -74,7 +86,7 @@ end
7486
colsupport(F::AdjOrTrans{<:Any,<:AdaptiveCholeskyFactors}, j) = rowsupport(parent(F), j)
7587
rowsupport(F::AdjOrTrans{<:Any,<:AdaptiveCholeskyFactors}, j) = colsupport(parent(F), j)
7688

77-
function materialize!(M::MatLdivVec{<:TriangularLayout{'L','N',<:AdaptiveLayout},<:AbstractPaddedLayout})
89+
function materialize!(M::MatLdivVec{<:TriangularLayout{'L','N',<:AdaptiveCholeskyFactorsLayouts},<:AbstractPaddedLayout})
7890
A,B = M.A,M.B
7991
T = eltype(M)
8092
COLGROWTH = 1000 # rate to grow columns

src/infqr.jl

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

2-
mutable struct AdaptiveQRData{T,DM<:AbstractMatrix{T},M<:AbstractMatrix{T}}
3-
data::CachedMatrix{T,DM,M}
2+
mutable struct AdaptiveQRData{T,DM<:AbstractMatrix{T}}
3+
data::CachedMatrix{T,DM}
44
τ::Vector{T}
55
ncols::Int
66
end
@@ -89,24 +89,24 @@ partialqr!(F::AdaptiveQRData{<:Any,<:BlockSkylineMatrix}, n::Int) =
8989
partialqr!(F, findblock(axes(F.data,2), n))
9090

9191

92-
struct AdaptiveQRFactors{T,DM<:AbstractMatrix{T},M<:AbstractMatrix{T}} <: LayoutMatrix{T}
93-
data::AdaptiveQRData{T,DM,M}
92+
struct AdaptiveQRFactors{T,DM<:AbstractMatrix{T}} <: LayoutMatrix{T}
93+
data::AdaptiveQRData{T,DM}
9494
end
9595

96-
struct AdaptiveLayout <: AbstractLazyLayout end
97-
struct AdaptiveBandedLayout <: AbstractLazyBandedLayout end
98-
struct AdaptiveBlockBandedLayout <: AbstractLazyBlockBandedLayout end
96+
struct AdaptiveQRFactorsLayout <: AbstractLazyLayout end
97+
struct AdaptiveQRFactorsBandedLayout <: AbstractLazyBandedLayout end
98+
struct AdaptiveQRFactorsBlockBandedLayout <: AbstractLazyBlockBandedLayout end
9999

100-
const AdaptiveLayouts = Union{AdaptiveLayout,AdaptiveBandedLayout,AdaptiveBlockBandedLayout}
100+
const AdaptiveQRFactorsLayouts = Union{AdaptiveQRFactorsLayout,AdaptiveQRFactorsBandedLayout,AdaptiveQRFactorsBlockBandedLayout}
101101

102-
adaptivelayout(_) = AdaptiveLayout()
103-
adaptivelayout(::BandedLayouts) = AdaptiveBandedLayout()
104-
adaptivelayout(::BlockBandedLayouts) = AdaptiveBlockBandedLayout()
102+
adaptiveqrfactorslayout(_) = AdaptiveQRFactorsLayout()
103+
adaptiveqrfactorslayout(::BandedLayouts) = AdaptiveQRFactorsBandedLayout()
104+
adaptiveqrfactorslayout(::BlockBandedLayouts) = AdaptiveQRFactorsBlockBandedLayout()
105105

106106

107-
MemoryLayout(::Type{AdaptiveQRFactors{T,DM,M}}) where {T,DM,M} =adaptivelayout(MemoryLayout(DM))
108-
triangularlayout(::Type{Tri}, ::ML) where {Tri, ML<:AdaptiveLayouts} = Tri{ML}()
109-
transposelayout(A::AdaptiveLayouts) = A
107+
MemoryLayout(::Type{AdaptiveQRFactors{T,DM}}) where {T,DM} =adaptiveqrfactorslayout(MemoryLayout(DM))
108+
triangularlayout(::Type{Tri}, ::ML) where {Tri, ML<:AdaptiveQRFactorsLayouts} = Tri{ML}()
109+
transposelayout(A::AdaptiveQRFactorsLayouts) = A
110110

111111
size(F::AdaptiveQRFactors) = size(F.data.data)
112112
axes(F::AdaptiveQRFactors) = axes(F.data.data)
@@ -146,8 +146,8 @@ rowsupport(F::QRPackedQ{<:Any,<:AdaptiveQRFactors}, j) = first(rowsupport(F.fact
146146
blockcolsupport(F::QRPackedQ{<:Any,<:AdaptiveQRFactors}, j) = blockcolsupport(F.factors, j)
147147

148148

149-
struct AdaptiveQRTau{T,DM<:AbstractMatrix{T},M<:AbstractMatrix{T}} <: LayoutVector{T}
150-
data::AdaptiveQRData{T,DM,M}
149+
struct AdaptiveQRTau{T,DM<:AbstractMatrix{T}} <: LayoutVector{T}
150+
data::AdaptiveQRData{T,DM}
151151
end
152152

153153
size(F::AdaptiveQRTau) = (size(F.data.data,1),)
@@ -174,7 +174,7 @@ factorize_layout(::BandedLayouts, ::NTuple{2,OneToInf{Int}}, A) = qr(A)
174174
factorize_layout(::AbstractBandedLayout, ::NTuple{2,OneToInf{Int}}, A) = qr(A)
175175

176176

177-
cache_layout(::TriangularLayout{UPLO, UNIT, <:AdaptiveLayouts}, A::AbstractMatrix) where {UPLO, UNIT} = A # already cached
177+
cache_layout(::TriangularLayout{UPLO, UNIT, <:AdaptiveQRFactorsLayouts}, A::AbstractMatrix) where {UPLO, UNIT} = A # already cached
178178

179179
partialqr!(F::QR, n) = partialqr!(F.factors, n)
180180
partialqr!(F::AdaptiveQRFactors, n) = partialqr!(F.data, n)
@@ -191,7 +191,7 @@ getindex(Q::QRPackedQ{<:Any,<:AdaptiveQRFactors,<:AdaptiveQRTau}, I::AbstractVec
191191
#########
192192

193193
_view_QRPackedQ(A, kr, jr) = QRPackedQ(view(A.factors.data.data.data,kr,jr), view(A.τ.data.τ,jr))
194-
function materialize!(M::MatLmulVec{<:QRPackedQLayout{<:AdaptiveLayouts},<:AbstractPaddedLayout})
194+
function materialize!(M::MatLmulVec{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts},<:AbstractPaddedLayout})
195195
A,B = M.A,M.B
196196
sB = size(paddeddata(B),1)
197197
partialqr!(A.factors.data,sB)
@@ -233,7 +233,7 @@ end
233233

234234
_norm(x::Number) = abs(x)
235235

236-
function materialize!(M::MatLmulVec{<:AdjQRPackedQLayout{<:AdaptiveLayouts},<:AbstractPaddedLayout}; tolerance=floatmin(real(eltype(M))))
236+
function materialize!(M::MatLmulVec{<:AdjQRPackedQLayout{<:AdaptiveQRFactorsLayouts},<:AbstractPaddedLayout}; tolerance=floatmin(real(eltype(M))))
237237
adjA,B = M.A,M.B
238238
COLGROWTH = 1000 # rate to grow columns
239239

@@ -284,7 +284,7 @@ function _view_QRPackedQ(A, KR::BlockRange, JR::BlockRange)
284284
QRPackedQ(view(A.factors.data.data.data,KR,JR), view(A.τ.data.τ,jr))
285285
end
286286

287-
function materialize!(M::MatLmulVec{QRPackedQLayout{AdaptiveBlockBandedLayout},<:AbstractPaddedLayout})
287+
function materialize!(M::MatLmulVec{QRPackedQLayout{AdaptiveQRFactorsBlockBandedLayout},<:AbstractPaddedLayout})
288288
A,B_in = M.A,M.B
289289
sB = length(paddeddata(B_in))
290290
ax1,ax2 = axes(A.factors.data.data)
@@ -300,7 +300,7 @@ function materialize!(M::MatLmulVec{QRPackedQLayout{AdaptiveBlockBandedLayout},<
300300
B
301301
end
302302

303-
function materialize!(M::MatLmulVec{<:AdjQRPackedQLayout{AdaptiveBlockBandedLayout},<:AbstractPaddedLayout}; tolerance=1E-30)
303+
function materialize!(M::MatLmulVec{<:AdjQRPackedQLayout{AdaptiveQRFactorsBlockBandedLayout},<:AbstractPaddedLayout}; tolerance=1E-30)
304304
adjA,B_in = M.A,M.B
305305
A = parent(adjA)
306306
T = eltype(M)
@@ -377,15 +377,15 @@ ldiv!(F::QR{<:Any,<:AdaptiveQRFactors}, b::LayoutVector; kwds...) = ldiv!(F.R, l
377377
factorize(A::BandedMatrix{<:Any,<:Any,<:OneToInf}) = qr(A)
378378
qr(A::SymTridiagonal{T,<:AbstractFill{T,1,Tuple{OneToInf{Int}}}}) where T = adaptiveqr(A)
379379

380-
simplifiable(M::Mul{<:QRPackedQLayout{<:AdaptiveLayouts}}) = Val(false)
381-
simplifiable(M::Mul{<:QRPackedQLayout{<:AdaptiveLayouts},<:QRPackedQLayout{<:AdaptiveLayouts}}) = Val(false)
382-
simplifiable(M::Mul{<:QRPackedQLayout{<:AdaptiveLayouts},<:LazyLayouts}) = Val(false)
383-
simplifiable(M::Mul{<:Any,<:QRPackedQLayout{<:AdaptiveLayouts}}) = Val(false)
384-
simplifiable(M::Mul{<:LazyLayouts,<:QRPackedQLayout{<:AdaptiveLayouts}}) = Val(false)
380+
simplifiable(M::Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = Val(false)
381+
simplifiable(M::Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts},<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = Val(false)
382+
simplifiable(M::Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts},<:LazyLayouts}) = Val(false)
383+
simplifiable(M::Mul{<:Any,<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = Val(false)
384+
simplifiable(M::Mul{<:LazyLayouts,<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = Val(false)
385385

386386

387-
copy(M::Mul{<:QRPackedQLayout{<:AdaptiveLayouts},<:QRPackedQLayout{<:AdaptiveLayouts}}) = simplify(M)
388-
copy(M::Mul{<:QRPackedQLayout{<:AdaptiveLayouts}}) = simplify(M)
389-
copy(M::Mul{<:QRPackedQLayout{<:AdaptiveLayouts},<:LazyLayouts}) = simplify(M)
390-
copy(M::Mul{<:Any,<:QRPackedQLayout{<:AdaptiveLayouts}}) = simplify(M)
391-
copy(M::Mul{<:LazyLayouts,<:QRPackedQLayout{<:AdaptiveLayouts}}) = simplify(M)
387+
copy(M::Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts},<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = simplify(M)
388+
copy(M::Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = simplify(M)
389+
copy(M::Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts},<:LazyLayouts}) = simplify(M)
390+
copy(M::Mul{<:Any,<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = simplify(M)
391+
copy(M::Mul{<:LazyLayouts,<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}}) = simplify(M)

test/test_infqr.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ using InfiniteLinearAlgebra, LinearAlgebra, BandedMatrices, InfiniteArrays, Matr
33
import LazyArrays: colsupport, rowsupport, MemoryLayout, DenseColumnMajor, TriangularLayout, resizedata!, arguments
44
import LazyBandedMatrices: BroadcastBandedLayout, InvDiagTrav, BroadcastBandedBlockBandedLayout
55
import BandedMatrices: _BandedMatrix, _banded_qr!, BandedColumns
6-
import InfiniteLinearAlgebra: partialqr!, AdaptiveQRData, AdaptiveLayout, AdaptiveBandedLayout, adaptiveqr
6+
import InfiniteLinearAlgebra: partialqr!, AdaptiveQRData, AdaptiveQRFactorsBandedLayout, adaptiveqr
77
import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
88

99

@@ -44,7 +44,7 @@ import SemiseparableMatrices: AlmostBandedLayout, VcatAlmostBandedLayout
4444
@testset "col/rowsupport" begin
4545
A = _BandedMatrix(Vcat(Ones(1,∞), (1:∞)', Ones(1,∞)), ℵ₀, 1, 1)
4646
F = qr(A)
47-
@test MemoryLayout(typeof(F.factors)) isa AdaptiveBandedLayout
47+
@test MemoryLayout(typeof(F.factors)) isa AdaptiveQRFactorsBandedLayout
4848
@test bandwidths(F.factors) == (1,2)
4949
@test colsupport(F.factors,1) == 1:2
5050
@test colsupport(F.factors,5) == 3:6

0 commit comments

Comments
 (0)