@@ -57,9 +57,6 @@ function qltail(Z::Number, A::Number, B::Number)
57
57
end
58
58
59
59
60
- ql (A:: SymTriPertToeplitz{T} ; kwds... ) where T = ql_hessenberg! (BandedMatrix (A, (bandwidth (A,1 )+ bandwidth (A,2 ),bandwidth (A,2 ))); kwds... )
61
- ql (A:: SymTridiagonal{T} ; kwds... ) where T = ql_hessenberg! (BandedMatrix (A, (bandwidth (A,1 )+ bandwidth (A,2 ),bandwidth (A,2 ))); kwds... )
62
- ql (A:: TriPertToeplitz{T} ; kwds... ) where T = ql_hessenberg! (BandedMatrix (A, (bandwidth (A,1 )+ bandwidth (A,2 ),bandwidth (A,2 ))); kwds... )
63
60
ql_hessenberg (A:: InfBandedMatrix{T} ; kwds... ) where T = ql_hessenberg! (BandedMatrix (A, (bandwidth (A,1 )+ bandwidth (A,2 ),bandwidth (A,2 ))); kwds... )
64
61
65
62
toeptail (B:: BandedMatrix{T} ) where T =
@@ -308,9 +305,34 @@ _ql(layout, ::NTuple{2,OneToInf{Int}}, A, args...; kwds...) = error("Not impleme
308
305
_data_tail (:: PaddedLayout , a) = paddeddata (a), zero (eltype (a))
309
306
_data_tail (:: AbstractFillLayout , a) = Vector {eltype(a)} (), getindex_value (a)
310
307
_data_tail (:: CachedLayout , a) = cacheddata (a), getindex_value (a. array)
308
+ function _data_tail (:: ApplyLayout{typeof(vcat)} , a)
309
+ args = arguments (vcat, a)
310
+ dat,tl = _data_tail (last (args))
311
+ vcat (most (args)... , dat), tl
312
+ end
311
313
_data_tail (a) = _data_tail (MemoryLayout (a), a)
312
314
313
- _ql (:: SymTridiagonalLayout , :: NTuple{2,OneToInf{Int}} , A, args... ; kwds... ) = ql (LazyBandedMatrices. Tridiagonal (A), args... ; kwds... )
315
+ function _ql (:: SymTridiagonalLayout , :: NTuple{2,OneToInf{Int}} , A, args... ; kwds... )
316
+ T = eltype (A)
317
+ d,d∞ = _data_tail (A. dv)
318
+ ev,ev∞ = _data_tail (A. ev)
319
+
320
+ m = max (length (d), length (ev)+ 1 )
321
+ dat = zeros (T, 3 , m)
322
+ dat[1 ,2 : 1 + length (ev)] .= ev
323
+ dat[1 ,2 + length (ev): end ] .= ev∞
324
+ dat[2 ,1 : length (d)] .= d
325
+ dat[2 ,1 + length (d): end ] .= d∞
326
+ dat[3 ,1 : length (ev)] .= ev
327
+ dat[3 ,1 + length (ev): end ] .= ev∞
328
+
329
+ ql (_BandedMatrix (Hcat (dat, [ev∞,d∞,ev∞] * Ones {T} (1 ,∞)), ℵ₀, 1 , 1 ), args... ; kwds... )
330
+ end
331
+
332
+
333
+
334
+ # TODO : This should be redesigned as ql(BandedMatrix(A))
335
+ # But we need to support dispatch on axes
314
336
function _ql (:: TridiagonalLayout , :: NTuple{2,OneToInf{Int}} , A, args... ; kwds... )
315
337
T = eltype (A)
316
338
d,d∞ = _data_tail (A. d)
0 commit comments