Skip to content

Commit 4381348

Browse files
authored
SymTriPertToeplitz MemoryLayout (#204)
* SymTriPertToeplitz MemoryLayout * Update InfiniteArraysBandedMatricesExt.jl * increase coverage
1 parent 66441ec commit 4381348

File tree

4 files changed

+33
-16
lines changed

4 files changed

+33
-16
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "InfiniteArrays"
22
uuid = "4858937d-0d70-526a-a4dd-2d5cb5dd786c"
3-
version = "0.15.0-dev"
3+
version = "0.15.0"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

ext/InfiniteArraysBandedMatricesExt.jl

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ using InfiniteArrays.LazyArrays, InfiniteArrays.ArrayLayouts, InfiniteArrays.Fil
44

55
import Base: BroadcastStyle, size, getindex, similar, copy, *, +, -, /, \, materialize!, copyto!, OneTo
66
import Base.Broadcast: Broadcasted
7-
import InfiniteArrays: InfIndexRanges, Infinity, PosInfinity, OneToInf, InfAxes, AbstractInfUnitRange, InfRanges, InfBaseToeplitzLayouts, ConstRowMatrix, PertConstRowMatrix, SymTriPertToeplitz, TriPertToeplitz, ConstRows, PertConstRows
7+
import InfiniteArrays: InfIndexRanges, Infinity, PosInfinity, OneToInf, InfAxes, AbstractInfUnitRange, InfRanges, InfBaseToeplitzLayouts, ConstRowMatrix, PertConstRowMatrix, SymTriPertToeplitz, TriPertToeplitz, ConstRows, PertConstRows, PertTridiagonalToeplitzLayout
88
import ArrayLayouts: sub_materialize, MemoryLayout, sublayout, mulreduce, triangularlayout, MatLdivVec, subdiagonaldata, diagonaldata, supdiagonaldata
99
import LazyArrays: applybroadcaststyle, applylayout, islazy, islazy_layout, simplifiable, AbstractLazyLayout, PaddedColumns, LazyArrayStyle, ApplyLayout, AbstractLazyBandedLayout, ApplyBandedLayout, BroadcastBandedLayout
10-
import BandedMatrices: _BandedMatrix, AbstractBandedMatrix, banded_similar, BandedMatrix, bandedcolumns, BandedColumns, bandeddata
10+
import BandedMatrices: _BandedMatrix, AbstractBandedMatrix, banded_similar, BandedMatrix, bandedcolumns, BandedColumns, bandeddata, _default_banded_broadcast
1111
import FillArrays: AbstractFillMatrix, AbstractFill, getindex_value
1212

1313
BroadcastStyle(::Type{<:SubArray{<:Any,2,<:AbstractBandedMatrix,<:Tuple{<:InfIndexRanges,<:InfIndexRanges}}})= LazyArrayStyle{2}()
@@ -416,15 +416,4 @@ copy(A::Transpose{T,<:BandedMatrix{T,<:Any,OneToInf{Int}}}) where T = transpose(
416416
Base.typed_hcat(::Type{T}, A::BandedMatrix{<:Any,<:Any,OneToInf{Int}}, B::AbstractVecOrMat...) where T = Hcat{T}(A, B...)
417417

418418

419-
420-
###
421-
# SymTriPertToeplitz
422-
###
423-
424-
MemoryLayout(::Type{<:SymTriPertToeplitz}) = PertTridiagonalToeplitzLayout()
425-
426-
427-
sublayout(::ApplyBandedLayout, ::Type{<:Tuple{KR,Integer}}) where {KR<:InfAxes} =
428-
sublayout(PaddedColumns{UnknownLayout}(), Tuple{KR})
429-
430419
end # module

src/inftoeplitz.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,11 @@ for op in (:-, :+)
113113
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...))
114114
end
115115
end
116-
end
116+
end
117+
118+
MemoryLayout(::Type{<:SymTriPertToeplitz}) = PertTridiagonalToeplitzLayout()
119+
120+
sublayout(::ApplyBandedLayout, ::Type{<:Tuple{KR,Integer}}) where {KR<:InfAxes} =
121+
sublayout(PaddedColumns{UnknownLayout}(), Tuple{KR})
122+
sublayout(::ApplyBandedLayout, ::Type{<:Tuple{Integer,JR}}) where {JR<:InfAxes} =
123+
sublayout(PaddedColumns{UnknownLayout}(), Tuple{JR})

test/test_infbanded.jl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using ArrayLayouts, InfiniteArrays, BandedMatrices, FillArrays, LazyArrays, Test
22
import BandedMatrices: _BandedMatrix, bandeddata
3-
import InfiniteArrays: TridiagonalToeplitzLayout, BidiagonalToeplitzLayout, TriPertToeplitz, SymTriPertToeplitz, TriToeplitz, ConstRows, SymTriPertToeplitz, AdjTriPertToeplitz, subdiagonalconstant, diagonalconstant, supdiagonalconstant
3+
import InfiniteArrays: TridiagonalToeplitzLayout, BidiagonalToeplitzLayout, TriPertToeplitz, SymTriPertToeplitz,
4+
TriToeplitz, ConstRows, SymTriPertToeplitz, AdjTriPertToeplitz, subdiagonalconstant,
5+
diagonalconstant, supdiagonalconstant, PertTridiagonalToeplitzLayout
46
using Base: oneto
57
using LazyArrays: simplifiable, ApplyLayout, BroadcastBandedLayout, islazy
68

@@ -138,6 +140,7 @@ const InfBandCartesianIndices = InfiniteArraysBandedMatricesExt.InfBandCartesian
138140
@testset "TriPert" begin
139141
A = SymTridiagonal(Vcat([1,2.], Fill(2.,∞)), Vcat([3.,4.], Fill.(0.5,∞)))
140142
@test A isa SymTriPertToeplitz
143+
@test MemoryLayout(A) isa PertTridiagonalToeplitzLayout
141144
@test (A + 2I)[1:10,1:10] == (2I + A)[1:10,1:10] == A[1:10,1:10] + 2I
142145
@test BandedMatrix(A, (2,3))[1:10,1:10] == A[1:10,1:10]
143146

@@ -350,4 +353,22 @@ const InfBandCartesianIndices = InfiniteArraysBandedMatricesExt.InfBandCartesian
350353
U = UpperTriangular(Tridiagonal(Fill(1,∞), Fill(2,∞), Fill(3,∞)))
351354
@test MemoryLayout(U) isa BidiagonalToeplitzLayout
352355
end
356+
357+
@testset "padded column" begin
358+
A = BandedMatrix(1 => Fill(2im,∞), 2 => Fill(-1,∞), 3 => Fill(2,∞), -2 => Fill(-4,∞), -3 => Fill(-2im,∞))
359+
@test MemoryLayout(A[:,5]) isa LazyArrays.PaddedColumns
360+
@test MemoryLayout(A[5,:]) isa LazyArrays.PaddedColumns
361+
362+
@test MemoryLayout((A*A)[:,5]) isa LazyArrays.PaddedColumns
363+
@test MemoryLayout((A*A)[5,:]) isa LazyArrays.PaddedColumns
364+
365+
V = Vcat(Zeros(1,∞), A)
366+
@test MemoryLayout(V[:,5]) isa LazyArrays.PaddedColumns
367+
@test MemoryLayout(V[5,:]) isa LazyArrays.PaddedColumns
368+
end
369+
370+
@testset "Default broadcasted" begin
371+
A = BandedMatrix(1 => Fill(2im,∞), 2 => Fill(-1,∞), 3 => Fill(2,∞), -2 => Fill(-4,∞), -3 => Fill(-2im,∞))
372+
@test copy(Base.broadcasted(BandedMatrices.BandedStyle(), exp,A))[1:10,1:10] == exp.(A[1:10,1:10])
373+
end
353374
end

0 commit comments

Comments
 (0)