Skip to content

Commit 2a89924

Browse files
committed
add tests
1 parent a42f827 commit 2a89924

File tree

3 files changed

+36
-5
lines changed

3 files changed

+36
-5
lines changed

src/InfiniteLinearAlgebra.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import FillArrays: AbstractFill, getindex_value, axes_print_matrix_row
1717
import InfiniteArrays: OneToInf, InfUnitRange, Infinity, PosInfinity, InfiniteCardinal, InfStepRange, AbstractInfUnitRange, InfAxes, InfRanges
1818
import LinearAlgebra: matprod, qr, AbstractTriangular, AbstractQ, adjoint, transpose, AdjOrTrans
1919
import LazyArrays: applybroadcaststyle, CachedArray, CachedMatrix, CachedVector, DenseColumnMajor, FillLayout, ApplyMatrix, check_mul_axes, LazyArrayStyle,
20-
resizedata!, MemoryLayout,
20+
resizedata!, MemoryLayout, most,
2121
factorize, sub_materialize, LazyLayout, LazyArrayStyle, layout_getindex,
2222
applylayout, ApplyLayout, PaddedLayout, CachedLayout, cacheddata, zero!, MulAddStyle,
2323
LazyArray, LazyMatrix, LazyVector, paddeddata, arguments

src/infql.jl

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ function qltail(Z::Number, A::Number, B::Number)
5757
end
5858

5959

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...)
6360
ql_hessenberg(A::InfBandedMatrix{T}; kwds...) where T = ql_hessenberg!(BandedMatrix(A, (bandwidth(A,1)+bandwidth(A,2),bandwidth(A,2))); kwds...)
6461

6562
toeptail(B::BandedMatrix{T}) where T =
@@ -308,9 +305,34 @@ _ql(layout, ::NTuple{2,OneToInf{Int}}, A, args...; kwds...) = error("Not impleme
308305
_data_tail(::PaddedLayout, a) = paddeddata(a), zero(eltype(a))
309306
_data_tail(::AbstractFillLayout, a) = Vector{eltype(a)}(), getindex_value(a)
310307
_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
311313
_data_tail(a) = _data_tail(MemoryLayout(a), a)
312314

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
314336
function _ql(::TridiagonalLayout, ::NTuple{2,OneToInf{Int}}, A, args...; kwds...)
315337
T = eltype(A)
316338
d,d∞ = _data_tail(A.d)

test/test_infql.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,13 @@ import BandedMatrices: _BandedMatrix
179179
@test Q[1:10,1:10] Qn[1:10,1:10] * diagm(0 => [1; -Ones(9)] )
180180
@test (Q'A)[1:10,1:10] diagm(0 => [1; -Ones(9)] ) * Ln[1:10,1:10] L[1:10,1:10]
181181
end
182+
183+
@testset "Tridiagonal QL" begin
184+
for A in (SymTridiagonal([[1,2]; Fill(3,∞)], [[1, 2]; Fill(1,∞)]),
185+
Tridiagonal([[1, 2]; Fill(1,∞)], [[1,2]; Fill(3,∞)], [[1, 2]; Fill(1,∞)]),
186+
LazyBandedMatrices.SymTridiagonal([[1,2]; Fill(3,∞)], [[1, 2]; Zeros(∞)]),
187+
LazyBandedMatrices.SymTridiagonal([[1,2]; Fill(3,∞)], [[1, 2]; zeros(∞)]))
188+
@test abs.(ql(A).L[1:10,1:10]) abs.(ql(A[1:1000,1:1000]).L[1:10,1:10])
189+
end
190+
end
182191
end

0 commit comments

Comments
 (0)