1
1
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}
4
4
τ:: Vector{T}
5
5
ncols:: Int
6
6
end
7
7
8
- function AdaptiveQRData (:: Union{SymmetricLayout{<:AbstractBandedLayout},AbstractBandedLayout} , A:: AbstractMatrix{T} ) where T
8
+ function AdaptiveQRData (:: BandedLayouts , A:: AbstractMatrix{T} ) where T
9
9
l,u = bandwidths (A)
10
10
FT = float (T)
11
11
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) =
89
89
partialqr! (F, findblock (axes (F. data,2 ), n))
90
90
91
91
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}
94
94
end
95
95
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
100
110
101
111
size (F:: AdaptiveQRFactors ) = size (F. data. data)
102
112
axes (F:: AdaptiveQRFactors ) = axes (F. data. data)
@@ -136,8 +146,8 @@ rowsupport(F::QRPackedQ{<:Any,<:AdaptiveQRFactors}, j) = first(rowsupport(F.fact
136
146
blockcolsupport (F:: QRPackedQ{<:Any,<:AdaptiveQRFactors} , j) = blockcolsupport (F. factors, j)
137
147
138
148
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}
141
151
end
142
152
143
153
size (F:: AdaptiveQRTau ) = (size (F. data. data,1 ),)
@@ -164,7 +174,7 @@ factorize_layout(::BandedLayouts, ::NTuple{2,OneToInf{Int}}, A) = qr(A)
164
174
factorize_layout (:: AbstractBandedLayout , :: NTuple{2,OneToInf{Int}} , A) = qr (A)
165
175
166
176
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
168
178
169
179
partialqr! (F:: QR , n) = partialqr! (F. factors, n)
170
180
partialqr! (F:: AdaptiveQRFactors , n) = partialqr! (F. data, n)
@@ -181,7 +191,7 @@ getindex(Q::QRPackedQ{<:Any,<:AdaptiveQRFactors,<:AdaptiveQRTau}, I::AbstractVec
181
191
# ########
182
192
183
193
_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} )
185
195
A,B = M. A,M. B
186
196
sB = size (paddeddata (B),1 )
187
197
partialqr! (A. factors. data,sB)
223
233
224
234
_norm (x:: Number ) = abs (x)
225
235
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))))
227
237
adjA,B = M. A,M. B
228
238
COLGROWTH = 1000 # rate to grow columns
229
239
@@ -274,7 +284,7 @@ function _view_QRPackedQ(A, KR::BlockRange, JR::BlockRange)
274
284
QRPackedQ (view (A. factors. data. data. data,KR,JR), view (A. τ. data. τ,jr))
275
285
end
276
286
277
- function materialize! (M:: MatLmulVec{<: QRPackedQLayout{<:AdaptiveLayout{<:AbstractBlockBandedLayout} },<:AbstractPaddedLayout} )
287
+ function materialize! (M:: MatLmulVec{QRPackedQLayout{AdaptiveQRFactorsBlockBandedLayout },<:AbstractPaddedLayout} )
278
288
A,B_in = M. A,M. B
279
289
sB = length (paddeddata (B_in))
280
290
ax1,ax2 = axes (A. factors. data. data)
@@ -290,7 +300,7 @@ function materialize!(M::MatLmulVec{<:QRPackedQLayout{<:AdaptiveLayout{<:Abstrac
290
300
B
291
301
end
292
302
293
- function materialize! (M:: MatLmulVec{<:AdjQRPackedQLayout{<:AdaptiveLayout{<:AbstractBlockBandedLayout} },<:AbstractPaddedLayout} ; tolerance= 1E-30 )
303
+ function materialize! (M:: MatLmulVec{<:AdjQRPackedQLayout{AdaptiveQRFactorsBlockBandedLayout },<:AbstractPaddedLayout} ; tolerance= 1E-30 )
294
304
adjA,B_in = M. A,M. B
295
305
A = parent (adjA)
296
306
T = eltype (M)
@@ -367,15 +377,19 @@ ldiv!(F::QR{<:Any,<:AdaptiveQRFactors}, b::LayoutVector; kwds...) = ldiv!(F.R, l
367
377
factorize (A:: BandedMatrix{<:Any,<:Any,<:OneToInf} ) = qr (A)
368
378
qr (A:: SymTridiagonal {T,<: AbstractFill{T,1,Tuple{OneToInf{Int}}} }) where T = adaptiveqr (A)
369
379
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