@@ -93,10 +93,20 @@ struct AdaptiveQRFactors{T,DM<:AbstractMatrix{T},M<:AbstractMatrix{T}} <: Layout
9393 data:: AdaptiveQRData{T,DM,M}
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 AdaptiveLayout <: AbstractLazyLayout end
97+ struct AdaptiveBandedLayout <: AbstractLazyBandedLayout end
98+ struct AdaptiveBlockBandedLayout <: AbstractLazyBlockBandedLayout end
99+
100+ const AdaptiveLayouts = Union{AdaptiveLayout,AdaptiveBandedLayout,AdaptiveBlockBandedLayout}
101+
102+ adaptivelayout (_) = AdaptiveLayout ()
103+ adaptivelayout (:: BandedLayouts ) = AdaptiveBandedLayout ()
104+ adaptivelayout (:: BlockBandedLayouts ) = AdaptiveBlockBandedLayout ()
105+
106+
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
100110
101111size (F:: AdaptiveQRFactors ) = size (F. data. data)
102112axes (F:: AdaptiveQRFactors ) = axes (F. data. data)
@@ -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{UPLO, UNIT, <:AdaptiveLayouts } , A:: AbstractMatrix ) where {UPLO, UNIT} = 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{<:AdaptiveLayouts },<: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{<:AdaptiveLayouts },<: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{AdaptiveBlockBandedLayout },<: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{AdaptiveBlockBandedLayout },<:AbstractPaddedLayout} ; tolerance= 1E-30 )
294304 adjA,B_in = M. A,M. B
295305 A = parent (adjA)
296306 T = eltype (M)
@@ -367,15 +377,15 @@ 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 )
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 )
375385
376386
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)
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)
0 commit comments