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
66end
77
8- function AdaptiveQRData (:: Union{SymmetricLayout{<:AbstractBandedLayout},AbstractBandedLayout} , A:: AbstractMatrix{T} ) where T
8+ function AdaptiveQRData (:: BandedLayouts , A:: AbstractMatrix{T} ) where T
99 l,u = bandwidths (A)
1010 FT = float (T)
1111 data = BandedMatrix {FT} (undef,(2 l+ u+ 1 ,0 ),(l,l+ u)) # pad super
@@ -89,14 +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}
9494end
9595
96- struct AdaptiveLayout{M} <: AbstractLazyLayout end
97- MemoryLayout (:: Type{AdaptiveQRFactors{T,DM,M}} ) where {T,DM,M} = AdaptiveLayout {typeof(MemoryLayout(DM))} ()
98- triangularlayout (:: Type{Tri} , :: ML ) where {Tri, ML<: AdaptiveLayout } = Tri {ML} ()
99- transposelayout (A:: AdaptiveLayout{ML} ) where ML = AdaptiveLayout {typeof(transposelayout(ML()))} ()
96+ struct AdaptiveQRFactorsLayout <: AbstractLazyLayout end
97+ struct AdaptiveQRFactorsBandedLayout <: AbstractLazyBandedLayout end
98+ struct AdaptiveQRFactorsBlockBandedLayout <: AbstractLazyBlockBandedLayout end
99+
100+ const AdaptiveQRFactorsLayouts = Union{AdaptiveQRFactorsLayout,AdaptiveQRFactorsBandedLayout,AdaptiveQRFactorsBlockBandedLayout}
101+
102+ adaptiveqrfactorslayout (_) = AdaptiveQRFactorsLayout ()
103+ adaptiveqrfactorslayout (:: BandedLayouts ) = AdaptiveQRFactorsBandedLayout ()
104+ adaptiveqrfactorslayout (:: BlockBandedLayouts ) = AdaptiveQRFactorsBlockBandedLayout ()
105+
106+
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
100110
101111size (F:: AdaptiveQRFactors ) = size (F. data. data)
102112axes (F:: AdaptiveQRFactors ) = axes (F. data. data)
@@ -136,8 +146,8 @@ rowsupport(F::QRPackedQ{<:Any,<:AdaptiveQRFactors}, j) = first(rowsupport(F.fact
136146blockcolsupport (F:: QRPackedQ{<:Any,<:AdaptiveQRFactors} , j) = blockcolsupport (F. factors, j)
137147
138148
139- struct AdaptiveQRTau{T,DM<: AbstractMatrix{T} ,M <: AbstractMatrix{T} } <: LayoutVector{T}
140- data:: AdaptiveQRData{T,DM,M }
149+ struct AdaptiveQRTau{T,DM<: AbstractMatrix{T} } <: LayoutVector{T}
150+ data:: AdaptiveQRData{T,DM}
141151end
142152
143153size (F:: AdaptiveQRTau ) = (size (F. data. data,1 ),)
@@ -164,7 +174,7 @@ factorize_layout(::BandedLayouts, ::NTuple{2,OneToInf{Int}}, A) = qr(A)
164174factorize_layout (:: AbstractBandedLayout , :: NTuple{2,OneToInf{Int}} , A) = qr (A)
165175
166176
167- cache_layout (:: TriangularLayout{UPLO, UNIT, <:AdaptiveLayout } , A:: AbstractMatrix ) where {UPLO, UNIT} = A # already cached
177+ cache_layout (:: TriangularLayout{'U', 'N', AdaptiveQRFactorsBandedLayout } , A:: AbstractMatrix ) = A # already cached
168178
169179partialqr! (F:: QR , n) = partialqr! (F. factors, n)
170180partialqr! (F:: AdaptiveQRFactors , n) = partialqr! (F. data, n)
@@ -181,7 +191,7 @@ getindex(Q::QRPackedQ{<:Any,<:AdaptiveQRFactors,<:AdaptiveQRTau}, I::AbstractVec
181191# ########
182192
183193_view_QRPackedQ (A, kr, jr) = QRPackedQ (view (A. factors. data. data. data,kr,jr), view (A. τ. data. τ,jr))
184- function materialize! (M:: MatLmulVec{<:QRPackedQLayout{<:AdaptiveLayout },<:AbstractPaddedLayout} )
194+ function materialize! (M:: MatLmulVec{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts },<:AbstractPaddedLayout} )
185195 A,B = M. A,M. B
186196 sB = size (paddeddata (B),1 )
187197 partialqr! (A. factors. data,sB)
223233
224234_norm (x:: Number ) = abs (x)
225235
226- function materialize! (M:: MatLmulVec{<:AdjQRPackedQLayout{<:AdaptiveLayout },<:AbstractPaddedLayout} ; tolerance= floatmin (real (eltype (M))))
236+ function materialize! (M:: MatLmulVec{<:AdjQRPackedQLayout{<:AdaptiveQRFactorsLayouts },<:AbstractPaddedLayout} ; tolerance= floatmin (real (eltype (M))))
227237 adjA,B = M. A,M. B
228238 COLGROWTH = 1000 # rate to grow columns
229239
@@ -274,7 +284,7 @@ function _view_QRPackedQ(A, KR::BlockRange, JR::BlockRange)
274284 QRPackedQ (view (A. factors. data. data. data,KR,JR), view (A. τ. data. τ,jr))
275285end
276286
277- function materialize! (M:: MatLmulVec{<: QRPackedQLayout{<:AdaptiveLayout{<:AbstractBlockBandedLayout} },<:AbstractPaddedLayout} )
287+ function materialize! (M:: MatLmulVec{QRPackedQLayout{AdaptiveQRFactorsBlockBandedLayout },<:AbstractPaddedLayout} )
278288 A,B_in = M. A,M. B
279289 sB = length (paddeddata (B_in))
280290 ax1,ax2 = axes (A. factors. data. data)
@@ -290,7 +300,7 @@ function materialize!(M::MatLmulVec{<:QRPackedQLayout{<:AdaptiveLayout{<:Abstrac
290300 B
291301end
292302
293- function materialize! (M:: MatLmulVec{<:AdjQRPackedQLayout{<:AdaptiveLayout{<:AbstractBlockBandedLayout} },<:AbstractPaddedLayout} ; tolerance= 1E-30 )
303+ function materialize! (M:: MatLmulVec{<:AdjQRPackedQLayout{AdaptiveQRFactorsBlockBandedLayout },<:AbstractPaddedLayout} ; tolerance= 1E-30 )
294304 adjA,B_in = M. A,M. B
295305 A = parent (adjA)
296306 T = eltype (M)
@@ -367,15 +377,19 @@ ldiv!(F::QR{<:Any,<:AdaptiveQRFactors}, b::LayoutVector; kwds...) = ldiv!(F.R, l
367377factorize (A:: BandedMatrix{<:Any,<:Any,<:OneToInf} ) = qr (A)
368378qr (A:: SymTridiagonal {T,<: AbstractFill{T,1,Tuple{OneToInf{Int}}} }) where T = adaptiveqr (A)
369379
370- simplifiable (M:: Mul{<:QRPackedQLayout{<:AdaptiveLayout}} ) = Val (false )
371- simplifiable (M:: Mul{<:QRPackedQLayout{<:AdaptiveLayout},<:QRPackedQLayout{<:AdaptiveLayout}} ) = Val (false )
372- simplifiable (M:: Mul{<:QRPackedQLayout{<:AdaptiveLayout},<:LazyLayouts} ) = Val (false )
373- simplifiable (M:: Mul{<:Any,<:QRPackedQLayout{<:AdaptiveLayout}} ) = Val (false )
374- simplifiable (M:: Mul{<:LazyLayouts,<:QRPackedQLayout{<:AdaptiveLayout}} ) = Val (false )
375-
376-
377- copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveLayout},<:QRPackedQLayout{<:AdaptiveLayout}} ) = simplify (M)
378- copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveLayout}} ) = simplify (M)
379- copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveLayout},<:LazyLayouts} ) = simplify (M)
380- copy (M:: Mul{<:Any,<:QRPackedQLayout{<:AdaptiveLayout}} ) = simplify (M)
381- copy (M:: Mul{<:LazyLayouts,<:QRPackedQLayout{<:AdaptiveLayout}} ) = simplify (M)
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 )
385+ simplifiable (M:: Mul{<:AbstractInvLayout,<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}} ) = Val (false )
386+
387+
388+ copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}, <:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}} ) = simplify (M)
389+ copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}} ) = simplify (M)
390+ copy (M:: Mul{<:AdaptiveQRFactorsLayouts, <:BandedLazyLayouts} ) = simplify (M)
391+ copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}, <:BandedLazyLayouts} ) = simplify (M)
392+ copy (M:: Mul{<:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}, <:LazyLayouts} ) = simplify (M)
393+ copy (M:: Mul{<:Any, <:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}} ) = simplify (M)
394+ copy (M:: Mul{<:LazyLayouts, <:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}} ) = simplify (M)
395+ copy (M:: Mul{<:BandedLazyLayouts, <:QRPackedQLayout{<:AdaptiveQRFactorsLayouts}} ) = simplify (M)
0 commit comments