Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SymTriPertToeplitz MemoryLayout #204

Merged
merged 3 commits into from
Dec 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name = "InfiniteArrays"
uuid = "4858937d-0d70-526a-a4dd-2d5cb5dd786c"
version = "0.15.0-dev"
version = "0.15.0"

[deps]
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
Expand Down
15 changes: 2 additions & 13 deletions ext/InfiniteArraysBandedMatricesExt.jl
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ using InfiniteArrays.LazyArrays, InfiniteArrays.ArrayLayouts, InfiniteArrays.Fil

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

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



###
# SymTriPertToeplitz
###

MemoryLayout(::Type{<:SymTriPertToeplitz}) = PertTridiagonalToeplitzLayout()


sublayout(::ApplyBandedLayout, ::Type{<:Tuple{KR,Integer}}) where {KR<:InfAxes} =
sublayout(PaddedColumns{UnknownLayout}(), Tuple{KR})

end # module
9 changes: 8 additions & 1 deletion src/inftoeplitz.jl
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,11 @@
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...))
end
end
end
end

MemoryLayout(::Type{<:SymTriPertToeplitz}) = PertTridiagonalToeplitzLayout()

Check warning on line 118 in src/inftoeplitz.jl

View check run for this annotation

Codecov / codecov/patch

src/inftoeplitz.jl#L118

Added line #L118 was not covered by tests

sublayout(::ApplyBandedLayout, ::Type{<:Tuple{KR,Integer}}) where {KR<:InfAxes} =

Check warning on line 120 in src/inftoeplitz.jl

View check run for this annotation

Codecov / codecov/patch

src/inftoeplitz.jl#L120

Added line #L120 was not covered by tests
sublayout(PaddedColumns{UnknownLayout}(), Tuple{KR})
sublayout(::ApplyBandedLayout, ::Type{<:Tuple{Integer,JR}}) where {JR<:InfAxes} =

Check warning on line 122 in src/inftoeplitz.jl

View check run for this annotation

Codecov / codecov/patch

src/inftoeplitz.jl#L122

Added line #L122 was not covered by tests
sublayout(PaddedColumns{UnknownLayout}(), Tuple{JR})
23 changes: 22 additions & 1 deletion test/test_infbanded.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using ArrayLayouts, InfiniteArrays, BandedMatrices, FillArrays, LazyArrays, Test
import BandedMatrices: _BandedMatrix, bandeddata
import InfiniteArrays: TridiagonalToeplitzLayout, BidiagonalToeplitzLayout, TriPertToeplitz, SymTriPertToeplitz, TriToeplitz, ConstRows, SymTriPertToeplitz, AdjTriPertToeplitz, subdiagonalconstant, diagonalconstant, supdiagonalconstant
import InfiniteArrays: TridiagonalToeplitzLayout, BidiagonalToeplitzLayout, TriPertToeplitz, SymTriPertToeplitz,
TriToeplitz, ConstRows, SymTriPertToeplitz, AdjTriPertToeplitz, subdiagonalconstant,
diagonalconstant, supdiagonalconstant, PertTridiagonalToeplitzLayout
using Base: oneto
using LazyArrays: simplifiable, ApplyLayout, BroadcastBandedLayout, islazy

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

Expand Down Expand Up @@ -350,4 +353,22 @@ const InfBandCartesianIndices = InfiniteArraysBandedMatricesExt.InfBandCartesian
U = UpperTriangular(Tridiagonal(Fill(1,∞), Fill(2,∞), Fill(3,∞)))
@test MemoryLayout(U) isa BidiagonalToeplitzLayout
end

@testset "padded column" begin
A = BandedMatrix(1 => Fill(2im,∞), 2 => Fill(-1,∞), 3 => Fill(2,∞), -2 => Fill(-4,∞), -3 => Fill(-2im,∞))
@test MemoryLayout(A[:,5]) isa LazyArrays.PaddedColumns
@test MemoryLayout(A[5,:]) isa LazyArrays.PaddedColumns

@test MemoryLayout((A*A)[:,5]) isa LazyArrays.PaddedColumns
@test MemoryLayout((A*A)[5,:]) isa LazyArrays.PaddedColumns

V = Vcat(Zeros(1,∞), A)
@test MemoryLayout(V[:,5]) isa LazyArrays.PaddedColumns
@test MemoryLayout(V[5,:]) isa LazyArrays.PaddedColumns
end

@testset "Default broadcasted" begin
A = BandedMatrix(1 => Fill(2im,∞), 2 => Fill(-1,∞), 3 => Fill(2,∞), -2 => Fill(-4,∞), -3 => Fill(-2im,∞))
@test copy(Base.broadcasted(BandedMatrices.BandedStyle(), exp,A))[1:10,1:10] == exp.(A[1:10,1:10])
end
end
Loading