Skip to content

Commit e224a87

Browse files
authored
Array layouts v0.6 (#70)
* Update Project.toml * ∞ Tri Toeplitz * support LazyBandedMatrices.*diagonal * Update Project.toml * Update Project.toml * Update infblocktridiagonal.jl * Increase coverage * fix TridiagonalTopelitzLayout * BidiagonalToeplitz should support A \ b * Make BidiagonalToeplitz fall back to Bidiagonal * Update runtests.jl * Update runtests.jl
1 parent 87739e2 commit e224a87

File tree

6 files changed

+146
-61
lines changed

6 files changed

+146
-61
lines changed

Project.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "InfiniteLinearAlgebra"
22
uuid = "cde9dba0-b1de-11e9-2c62-0bab9446c55c"
3-
version = "0.5.0"
3+
version = "0.5.1"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
@@ -16,16 +16,16 @@ MatrixFactorizations = "a3b82374-2e81-5b9e-98ce-41277c0e4c87"
1616
SemiseparableMatrices = "f8ebbe35-cbfb-4060-bf7f-b10e4670cf57"
1717

1818
[compat]
19-
ArrayLayouts = "0.5.1, 0.6"
19+
ArrayLayouts = "0.6"
2020
BandedMatrices = "0.16"
2121
BlockArrays = "0.14.5"
2222
BlockBandedMatrices = "0.10"
2323
FillArrays = "0.11"
2424
InfiniteArrays = "0.10"
2525
LazyArrays = "0.20.2"
26-
LazyBandedMatrices = "0.4.5"
27-
MatrixFactorizations = "0.7.1, 0.8"
28-
SemiseparableMatrices = "0.2.2"
26+
LazyBandedMatrices = "0.5"
27+
MatrixFactorizations = "0.8"
28+
SemiseparableMatrices = "0.2.3"
2929
julia = "1.5"
3030

3131
[extras]

src/InfiniteLinearAlgebra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ using BlockArrays, BlockBandedMatrices, BandedMatrices, LazyArrays, LazyBandedMa
44

55
import Base: +, -, *, /, \, ^, OneTo, getindex, promote_op, _unsafe_getindex, size, axes,
66
AbstractMatrix, AbstractArray, Matrix, Array, Vector, AbstractVector, Slice,
7-
show, getproperty, copy, map, require_one_based_indexing, similar, inv
7+
show, getproperty, copy, copyto!, map, require_one_based_indexing, similar, inv
88
import Base.Broadcast: BroadcastStyle, Broadcasted, broadcasted
99

1010
import ArrayLayouts: colsupport, rowsupport, triangularlayout, MatLdivVec, triangulardata, TriangularLayout, TridiagonalLayout,
@@ -27,7 +27,7 @@ import BlockArrays: AbstractBlockVecOrMat, sizes_from_blocks, _length, BlockedUn
2727

2828
import BandedMatrices: BandedMatrix, bandwidths, AbstractBandedLayout, _banded_qr!, _banded_qr, _BandedMatrix
2929

30-
import LazyBandedMatrices: ApplyBandedLayout, BroadcastBandedLayout, _krontrav_axes, _block_interlace_axes
30+
import LazyBandedMatrices: ApplyBandedLayout, BroadcastBandedLayout, _krontrav_axes, _block_interlace_axes, LazyBandedLayout,AbstractLazyBandedLayout
3131

3232
import BlockBandedMatrices: _BlockSkylineMatrix, _BandedMatrix, _BlockSkylineMatrix, blockstart, blockstride,
3333
BlockSkylineSizes, BlockSkylineMatrix, BlockBandedMatrix, _BlockBandedMatrix, BlockTridiagonal,

src/banded/infbanded.jl

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -144,47 +144,47 @@ end
144144

145145
for op in (:-, :+)
146146
@eval begin
147-
function $op(A::SymTriPertToeplitz{T}, λ::UniformScaling) where T
147+
function $op(A::SymTriPertToeplitz{T}, λ::UniformScaling) where T
148148
TV = promote_type(T,eltype(λ))
149149
dv = Vcat(convert.(AbstractVector{TV}, A.dv.args)...)
150150
ev = Vcat(convert.(AbstractVector{TV}, A.ev.args)...)
151151
SymTridiagonal(broadcast($op, dv, Ref.λ)), ev)
152152
end
153153
function $op::UniformScaling, A::SymTriPertToeplitz{V}) where V
154154
TV = promote_type(eltype(λ),V)
155-
SymTridiagonal(convert(AbstractVector{TV}, broadcast($op, Ref.λ), A.dv)),
155+
SymTridiagonal(convert(AbstractVector{TV}, broadcast($op, Ref.λ), A.dv)),
156156
convert(AbstractVector{TV}, broadcast($op, A.ev)))
157157
end
158-
function $op(A::SymTridiagonal{T,<:AbstractFill}, λ::UniformScaling) where T
158+
function $op(A::SymTridiagonal{T,<:AbstractFill}, λ::UniformScaling) where T
159159
TV = promote_type(T,eltype(λ))
160160
SymTridiagonal(convert(AbstractVector{TV}, broadcast($op, A.dv, Ref.λ))),
161161
convert(AbstractVector{TV}, A.ev))
162162
end
163163

164-
function $op(A::TriPertToeplitz{T}, λ::UniformScaling) where T
164+
function $op(A::TriPertToeplitz{T}, λ::UniformScaling) where T
165165
TV = promote_type(T,eltype(λ))
166-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.dl.args)...),
167-
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).args)...),
166+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.dl.args)...),
167+
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).args)...),
168168
Vcat(convert.(AbstractVector{TV}, A.du.args)...))
169169
end
170170
function $op::UniformScaling, A::TriPertToeplitz{V}) where V
171171
TV = promote_type(eltype(λ),V)
172-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...),
173-
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).args)...),
172+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...),
173+
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).args)...),
174174
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.args))...))
175175
end
176-
function $op(adjA::AdjTriPertToeplitz{T}, λ::UniformScaling) where T
176+
function $op(adjA::AdjTriPertToeplitz{T}, λ::UniformScaling) where T
177177
A = parent(adjA)
178178
TV = promote_type(T,eltype(λ))
179-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.du.args)...),
180-
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).args)...),
179+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.du.args)...),
180+
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).args)...),
181181
Vcat(convert.(AbstractVector{TV}, A.dl.args)...))
182182
end
183183
function $op::UniformScaling, adjA::AdjTriPertToeplitz{V}) where V
184184
A = parent(adjA)
185185
TV = promote_type(eltype(λ),V)
186-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.args))...),
187-
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).args)...),
186+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.args))...),
187+
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).args)...),
188188
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...))
189189
end
190190

@@ -231,7 +231,7 @@ end
231231

232232
####
233233
# Conversions to BandedMatrix
234-
####
234+
####
235235

236236
function BandedMatrix(A::PertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
237237
@assert A.u == u # Not implemented
@@ -323,7 +323,7 @@ _constrows(A::PertConstRowMatrix) = _constrows(A.args[2])
323323
_constrows(A::SubArray) = _constrows(parent(A))[parentindices(A)[1]]
324324

325325
ConstRowMatrix(A::AbstractMatrix{T}) where T = ApplyMatrix(*, A[:,1], Ones{T}(1,size(A,2)))
326-
PertConstRowMatrix(A::AbstractMatrix{T}) where T =
326+
PertConstRowMatrix(A::AbstractMatrix{T}) where T =
327327
Hcat(_pertdata(A), ApplyMatrix(*, _constrows(A), Ones{T}(1,size(A,2))))
328328

329329
struct ConstRows <: MemoryLayout end
@@ -342,40 +342,40 @@ for Typ in (:ConstRows, :PertConstRows)
342342
end
343343
end
344344

345-
const TridiagonalToeplitzLayout = Union{SymTridiagonalLayout{FillLayout},TridiagonalLayout{FillLayout}}
345+
struct TridiagonalToeplitzLayout <: AbstractLazyBandedLayout end
346346
const BandedToeplitzLayout = BandedColumns{ConstRows}
347347
const PertToeplitzLayout = BandedColumns{PertConstRows}
348348
const PertTriangularToeplitzLayout{UPLO,UNIT} = TriangularLayout{UPLO,UNIT,BandedColumns{PertConstRows}}
349349

350350

351-
_BandedMatrix(::BandedToeplitzLayout, A::AbstractMatrix) =
351+
_BandedMatrix(::BandedToeplitzLayout, A::AbstractMatrix) =
352352
_BandedMatrix(ConstRowMatrix(bandeddata(A)), size(A,1), bandwidths(A)...)
353-
_BandedMatrix(::PertToeplitzLayout, A::AbstractMatrix) =
354-
_BandedMatrix(PertConstRowMatrix(bandeddata(A)), size(A,1), bandwidths(A)...)
353+
_BandedMatrix(::PertToeplitzLayout, A::AbstractMatrix) =
354+
_BandedMatrix(PertConstRowMatrix(bandeddata(A)), size(A,1), bandwidths(A)...)
355355

356356
# for Lay in (:BandedToeplitzLayout, :PertToeplitzLayout)
357-
# @eval begin
357+
# @eval begin
358358
# sublayout(::$Lay, ::Type{<:Tuple{AbstractInfUnitRange{Int},AbstractInfUnitRange{Int}}}) = $Lay()
359359
# sublayout(::$Lay, ::Type{<:Tuple{Slice,AbstractInfUnitRange{Int}}}) = $Lay()
360360
# sublayout(::$Lay, ::Type{<:Tuple{AbstractInfUnitRange{Int},Slice}}) = $Lay()
361361
# sublayout(::$Lay, ::Type{<:Tuple{Slice,Slice}}) = $Lay()
362362

363-
# sub_materialize(::$Lay, V) = BandedMatrix(V)
363+
# sub_materialize(::$Lay, V) = BandedMatrix(V)
364364
# end
365365
# end
366366

367367

368368
@inline sub_materialize(::ApplyBandedLayout{typeof(*)}, V, ::Tuple{InfAxes,InfAxes}) = V
369369
@inline sub_materialize(::BroadcastBandedLayout, V, ::Tuple{InfAxes,InfAxes}) = V
370-
@inline sub_materialize(::AbstractBandedLayout, V, ::Tuple{InfAxes,InfAxes}) = BandedMatrix(V)
370+
@inline sub_materialize(::AbstractBandedLayout, V, ::Tuple{InfAxes,InfAxes}) = V
371371
@inline sub_materialize(::BandedColumns, V, ::Tuple{InfAxes,InfAxes}) = BandedMatrix(V)
372372

373373

374374
##
375375
# UniformScaling
376376
##
377377

378-
# for op in (:+, :-), Typ in (:(BandedMatrix{<:Any,<:Any,OneToInf{Int}}),
378+
# for op in (:+, :-), Typ in (:(BandedMatrix{<:Any,<:Any,OneToInf{Int}}),
379379
# :(Adjoint{<:Any,<:BandedMatrix{<:Any,<:Any,OneToInf{Int}}}),
380380
# :(Transpose{<:Any,<:BandedMatrix{<:Any,<:Any,OneToInf{Int}}}))
381381
# @eval begin
@@ -395,7 +395,7 @@ _default_banded_broadcast(bc::Broadcasted, ::Tuple{<:OneToInf,<:Any}) = copy(Bro
395395
# Banded * Banded
396396
###
397397

398-
BandedMatrix{T}(::UndefInitializer, axes::Tuple{OneToInf{Int},OneTo{Int}}, lu::NTuple{2,Integer}) where T =
398+
BandedMatrix{T}(::UndefInitializer, axes::Tuple{OneToInf{Int},OneTo{Int}}, lu::NTuple{2,Integer}) where T =
399399
BandedMatrix{T}(undef, map(length,axes), lu)
400400

401401
similar(M::MulAdd{<:AbstractBandedLayout,<:AbstractBandedLayout}, ::Type{T}, axes::Tuple{OneTo{Int},OneToInf{Int}}) where T =
@@ -471,3 +471,34 @@ function _bidiag_forwardsub!(M::Ldiv{<:Any,<:PaddedLayout})
471471
b_in
472472
end
473473

474+
###
475+
# Inf-Toeplitz layout
476+
# this could possibly be avoided via an InfFillLayout
477+
###
478+
479+
const InfFill = AbstractFill{<:Any,1,<:Tuple{OneToInf}}
480+
481+
for Typ in (:(LinearAlgebra.Tridiagonal{<:Any,<:InfFill}),
482+
:(LinearAlgebra.SymTridiagonal{<:Any,<:InfFill}),
483+
:(LazyBandedMatrices.Tridiagonal{<:Any,<:InfFill,<:InfFill,<:InfFill}),
484+
:(LazyBandedMatrices.SymTridiagonal{<:Any,<:InfFill,<:InfFill}))
485+
@eval begin
486+
MemoryLayout(::Type{<:$Typ}) = TridiagonalToeplitzLayout()
487+
Base.BroadcastStyle(::Type{<:$Typ}) = LazyArrayStyle{2}()
488+
end
489+
end
490+
491+
struct BidiagonalToeplitzLayout <: AbstractLazyBandedLayout end
492+
493+
for Typ in (:(LinearAlgebra.Bidiagonal{<:Any,<:InfFill}),
494+
:(LazyBandedMatrices.Bidiagonal{<:Any,<:InfFill,<:InfFill}))
495+
@eval begin
496+
MemoryLayout(::Type{<:$Typ}) = BidiagonalToeplitzLayout()
497+
Base.BroadcastStyle(::Type{<:$Typ}) = LazyArrayStyle{2}()
498+
end
499+
end
500+
501+
# fall back for Ldiv
502+
triangularlayout(::Type{<:TriangularLayout{UPLO,'N'}}, ::TridiagonalToeplitzLayout) where UPLO = BidiagonalToeplitzLayout()
503+
materialize!(L::MatLdivVec{BidiagonalToeplitzLayout,Lay}) where Lay = materialize!(Ldiv{BidiagonalLayout{FillLayout,FillLayout},Lay}(L.A, L.B))
504+
copyto!(dest::AbstractArray, L::Ldiv{BidiagonalToeplitzLayout,Lay}) where Lay = copyto!(dest, Ldiv{BidiagonalLayout{FillLayout,FillLayout},Lay}(L.A, L.B))

src/blockbanded/infblocktridiagonal.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const BlockTriPertToeplitz{T} = BlockMatrix{T,Tridiagonal{Matrix{T},Vcat{Matrix{T},1,Tuple{Vector{Matrix{T}},Fill{Matrix{T},1,Tuple{OneToInf{Int}}}}}},
22
NTuple{2,BlockedUnitRange{Vcat{Int,1,Tuple{Vector{Int},InfStepRange{Int,Int}}}}}}
33

4-
const BlockTridiagonalToeplitzLayout = BlockLayout{TridiagonalLayout{FillLayout},DenseColumnMajor}
4+
const BlockTridiagonalToeplitzLayout = BlockLayout{TridiagonalToeplitzLayout,DenseColumnMajor}
55

66
function BlockTridiagonal(adjA::Adjoint{T,BlockTriPertToeplitz{T}}) where T
77
A = parent(adjA)
@@ -33,7 +33,9 @@ end
3333

3434
sizes_from_blocks(A::Diagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.diag, 1), size.(A.diag,2)
3535
sizes_from_blocks(A::Tridiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.d, 1), size.(A.d,2)
36+
sizes_from_blocks(A::LazyBandedMatrices.Tridiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.d, 1), size.(A.d,2)
3637
sizes_from_blocks(A::Bidiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.dv, 1), size.(A.dv,2)
38+
sizes_from_blocks(A::LazyBandedMatrices.Bidiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.dv, 1), size.(A.dv,2)
3739

3840
axes_print_matrix_row(_, io, X, A, i, ::AbstractVector{<:PosInfinity}, sep) = nothing
3941
axes_print_matrix_row(::NTuple{2,BlockedUnitRange}, io, X, A, i, ::AbstractVector{<:PosInfinity}, sep) = nothing

test/runtests.jl

Lines changed: 80 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,45 @@ using InfiniteLinearAlgebra, BlockBandedMatrices, BlockArrays, BandedMatrices, I
22
MatrixFactorizations, ArrayLayouts, LinearAlgebra, Random, LazyBandedMatrices, StaticArrays
33
import InfiniteLinearAlgebra: qltail, toeptail, tailiterate , tailiterate!, tail_de, ql_X!,
44
InfToeplitz, PertToeplitz, TriToeplitz, InfBandedMatrix, InfBandCartesianIndices,
5-
rightasymptotics, QLHessenberg, ConstRows, PertConstRows, BandedToeplitzLayout, PertToeplitzLayout
5+
rightasymptotics, QLHessenberg, ConstRows, PertConstRows,
6+
BandedToeplitzLayout, PertToeplitzLayout, TridiagonalToeplitzLayout, BidiagonalToeplitzLayout
67
import Base: BroadcastStyle
78
import BlockArrays: _BlockArray
89
import BlockBandedMatrices: isblockbanded, _BlockBandedMatrix
910
import MatrixFactorizations: QLPackedQ
1011
import BandedMatrices: bandeddata, _BandedMatrix, BandedStyle
1112
import LazyArrays: colsupport, ApplyStyle, MemoryLayout, ApplyLayout, LazyArrayStyle, arguments
1213
import InfiniteArrays: OneToInf, oneto
13-
import LazyBandedMatrices: BroadcastBandedBlockBandedLayout, BroadcastBandedLayout
14+
import LazyBandedMatrices: BroadcastBandedBlockBandedLayout, BroadcastBandedLayout, LazyBandedLayout
1415

1516

1617
@testset "∞-banded" begin
17-
D = Diagonal(Fill(2,∞))
18+
@testset "Diagonal and BandedMatrix" begin
19+
D = Diagonal(Fill(2,∞))
1820

19-
B = D[1:∞,2:∞]
20-
@test B isa BandedMatrix
21-
@test B[1:10,1:10] == diagm(-1 => Fill(2,9))
22-
@test B[1:∞,2:∞] isa BandedMatrix
21+
B = D[1:∞,2:∞]
22+
@test B isa BandedMatrix
23+
@test B[1:10,1:10] == diagm(-1 => Fill(2,9))
24+
@test B[1:∞,2:∞] isa BandedMatrix
2325

24-
A = BandedMatrix(0 => 1:∞, 1=> Fill(2.0,∞), -1 => Fill(3.0,∞))
25-
x = [1; 2; zeros(∞)]
26-
@test A*x isa Vcat
27-
@test (A*x)[1:10] == A[1:10,1:10]*x[1:10]
26+
A = BandedMatrix(0 => 1:∞, 1=> Fill(2.0,∞), -1 => Fill(3.0,∞))
27+
x = [1; 2; zeros(∞)]
28+
@test A*x isa Vcat
29+
@test (A*x)[1:10] == A[1:10,1:10]*x[1:10]
2830

29-
@test InfBandCartesianIndices(0)[1:5] == CartesianIndex.(1:5,1:5)
30-
@test InfBandCartesianIndices(1)[1:5] == CartesianIndex.(1:5,2:6)
31-
@test InfBandCartesianIndices(-1)[1:5] == CartesianIndex.(2:6,1:5)
31+
@test InfBandCartesianIndices(0)[1:5] == CartesianIndex.(1:5,1:5)
32+
@test InfBandCartesianIndices(1)[1:5] == CartesianIndex.(1:5,2:6)
33+
@test InfBandCartesianIndices(-1)[1:5] == CartesianIndex.(2:6,1:5)
3234

33-
@test D[band(0)] Fill(2,∞)
34-
@test D[band(1)] Fill(0,∞)
35-
@test A[band(0)][2:10] == 2:10
35+
@test A[band(0)][2:10] == 2:10
36+
@test D[band(0)] Fill(2,∞)
37+
@test D[band(1)] Fill(0,∞)
3638

37-
@test B*A*x isa Vcat
38-
@test (B*A*x)[1:10] == [0; 10; 14; 12; zeros(6)]
39+
@test B*A*x isa Vcat
40+
@test (B*A*x)[1:10] == [0; 10; 14; 12; zeros(6)]
3941

40-
@test _BandedMatrix((1:∞)', ∞, -1, 1) isa BandedMatrix
42+
@test _BandedMatrix((1:∞)', ∞, -1, 1) isa BandedMatrix
43+
end
4144

4245
@testset "∞-Toeplitz" begin
4346
A = BandedMatrix(1 => Fill(2im,∞), 2 => Fill(-1,∞), 3 => Fill(2,∞), -2 => Fill(-4,∞), -3 => Fill(-2im,∞))
@@ -51,19 +54,56 @@ import LazyBandedMatrices: BroadcastBandedBlockBandedLayout, BroadcastBandedLayo
5154
@test A[:,3:end] isa InfToeplitz
5255

5356
@test (A + 2I)[1:10,1:10] == (2I + A)[1:10,1:10] == A[1:10,1:10] + 2I
57+
58+
@test MemoryLayout(Tridiagonal(Fill(1,∞), Fill(2,∞), Fill(3,∞))) isa TridiagonalToeplitzLayout
59+
@test MemoryLayout(Bidiagonal(Fill(1,∞), Fill(2,∞), :U)) isa BidiagonalToeplitzLayout
60+
@test MemoryLayout(SymTridiagonal(Fill(1,∞), Fill(2,∞))) isa TridiagonalToeplitzLayout
61+
@test MemoryLayout(LazyBandedMatrices.Tridiagonal(Fill(1,∞), Zeros(∞), Fill(3,∞))) isa TridiagonalToeplitzLayout
62+
@test MemoryLayout(LazyBandedMatrices.Bidiagonal(Fill(1,∞), Zeros(∞), :U)) isa BidiagonalToeplitzLayout
63+
@test MemoryLayout(LazyBandedMatrices.SymTridiagonal(Fill(1,∞), Zeros(∞))) isa TridiagonalToeplitzLayout
64+
65+
T = LazyBandedMatrices.Tridiagonal(Fill(1,∞), Zeros(∞), Fill(3,∞))
66+
@test T[2:∞,3:∞] isa SubArray
67+
@test exp.(T) isa BroadcastMatrix
68+
@test exp.(T)[2:∞,3:∞] isa SubArray
69+
70+
B = LazyBandedMatrices.Bidiagonal(Fill(1,∞), Zeros(∞), :U)
71+
@test B[2:∞,3:∞] isa SubArray
72+
@test exp.(B) isa BroadcastMatrix
73+
@test exp.(B)[2:∞,3:∞] isa SubArray
74+
75+
@testset "algebra" begin
76+
T = Tridiagonal(Fill(1,∞), Fill(2,∞), Fill(3,∞))
77+
@test T isa InfiniteLinearAlgebra.TriToeplitz
78+
@test (T + 2I)[1:10,1:10] == (2I + T)[1:10,1:10] == T[1:10,1:10] + 2I
79+
end
5480
end
5581

5682
@testset "Pert-Toeplitz" begin
57-
A = BandedMatrix(-2 => Vcat(Float64[], Fill(1/4,∞)), 0 => Vcat([1.0+im,2,3],Fill(0,∞)), 1 => Vcat(Float64[], Fill(1,∞)))
58-
@test A isa PertToeplitz
59-
@test MemoryLayout(typeof(A)) == PertToeplitzLayout()
60-
V = view(A,2:∞,2:∞)
61-
@test MemoryLayout(typeof(V)) == PertToeplitzLayout()
62-
@test BandedMatrix(V) isa PertToeplitz
63-
@test A[2:∞,2:∞] isa PertToeplitz
83+
@testset "Inf Pert" begin
84+
A = BandedMatrix(-2 => Vcat(Float64[], Fill(1/4,∞)), 0 => Vcat([1.0+im,2,3],Fill(0,∞)), 1 => Vcat(Float64[], Fill(1,∞)))
85+
@test A isa PertToeplitz
86+
@test MemoryLayout(typeof(A)) == PertToeplitzLayout()
87+
V = view(A,2:∞,2:∞)
88+
@test MemoryLayout(typeof(V)) == PertToeplitzLayout()
89+
@test BandedMatrix(V) isa PertToeplitz
90+
@test A[2:∞,2:∞] isa PertToeplitz
91+
92+
@test (A + 2I)[1:10,1:10] == (2I + A)[1:10,1:10] == A[1:10,1:10] + 2I
93+
end
6494

65-
@test (A + 2I)[1:10,1:10] == (2I + A)[1:10,1:10] == A[1:10,1:10] + 2I
95+
@testset "TriPert" begin
96+
A = SymTridiagonal(Vcat([1,2.], Fill(2.,∞)), Vcat([3.,4.], Fill.(0.5,∞)))
97+
@test A isa InfiniteLinearAlgebra.SymTriPertToeplitz
98+
@test (A + 2I)[1:10,1:10] == (2I + A)[1:10,1:10] == A[1:10,1:10] + 2I
6699

100+
A = Tridiagonal(Vcat([3.,4.], Fill.(0.5,∞)), Vcat([1,2.], Fill(2.,∞)), Vcat([3.,4.], Fill.(0.5,∞)))
101+
@test A isa InfiniteLinearAlgebra.TriPertToeplitz
102+
@test Adjoint(A) isa InfiniteLinearAlgebra.AdjTriPertToeplitz
103+
@test (A + 2I)[1:10,1:10] == (2I + A)[1:10,1:10] == A[1:10,1:10] + 2I
104+
@test (Adjoint(A) + 2I)[1:10,1:10] == (2I + Adjoint(A))[1:10,1:10] == Adjoint(A)[1:10,1:10] + 2I
105+
end
106+
67107

68108
@testset "InfBanded" begin
69109
A = _BandedMatrix(Fill(2,4,∞),ℵ₀,2,1)
@@ -296,6 +336,18 @@ end
296336
@test (A + im*I)[1:100,1:100] == A[1:100,1:100]+im*I
297337
@test (im*I + A)[1:100,1:100] == im*I+A[1:100,1:100]
298338
@test (im*I - A)[1:100,1:100] == im*I-A[1:100,1:100]
339+
340+
T = mortar(LazyBandedMatrices.Tridiagonal(Fill([1 2; 3 4], ∞), Fill([1 2; 3 4], ∞), Fill([1 2; 3 4], ∞)))
341+
#TODO: copy BlockBidiagonal code from BlockBandedMatrices to LazyBandedMatrices
342+
@test T[Block(2,2)] == [1 2; 3 4]
343+
@test_broken T[Block(1,3)] == Zeros(2,2)
344+
end
345+
346+
@testset "BlockBidiagonal" begin
347+
B = mortar(LazyBandedMatrices.Bidiagonal(Fill([1 2; 3 4], ∞), Fill([1 2; 3 4], ∞), :U))
348+
#TODO: copy BlockBidiagonal code from BlockBandedMatrices to LazyBandedMatrices
349+
@test B[Block(2,3)] == [1 2; 3 4]
350+
@test_broken B[Block(1,3)] == Zeros(2,2)
299351
end
300352

301353
@testset "Fill" begin

test/test_inful.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using InfiniteLinearAlgebra, BlockArrays, ArrayLayouts, Test
22
import InfiniteLinearAlgebra: BlockTridiagonalToeplitzLayout, ul, adaptiveqr
33

4-
@testset "Block Toeplitz UL" begin
4+
@testset "∞-UL" begin
55
@testset "Toeplitz" begin
66
Δ = SymTridiagonal(Fill(-2,∞), Fill(1,∞))
77
h = 0.01

0 commit comments

Comments
 (0)