From 9ae537ffbdf41d9d08c35fe779a00426531ee20a Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Mon, 17 Jun 2024 14:24:24 +0100 Subject: [PATCH] ConstRows and PertConstRows should be lazy (#184) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ConstRows and PertConstRows should be lazy * Any ∞-banded is lazy --- Project.toml | 2 +- src/InfiniteLinearAlgebra.jl | 2 +- src/banded/infbanded.jl | 9 +++++++-- test/test_infbanded.jl | 7 +++++-- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Project.toml b/Project.toml index 030395a..ba6bdac 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "InfiniteLinearAlgebra" uuid = "cde9dba0-b1de-11e9-2c62-0bab9446c55c" -version = "0.8.3" +version = "0.8.4" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" diff --git a/src/InfiniteLinearAlgebra.jl b/src/InfiniteLinearAlgebra.jl index 80c5912..19203f3 100644 --- a/src/InfiniteLinearAlgebra.jl +++ b/src/InfiniteLinearAlgebra.jl @@ -40,7 +40,7 @@ import LazyArrays: AbstractCachedMatrix, AbstractCachedVector, AbstractLazyLayou CachedArray, CachedLayout, CachedMatrix, CachedVector, LazyArrayStyle, LazyLayout, LazyLayouts, LazyMatrix, AbstractPaddedLayout, PaddedColumns, _broadcast_sub_arguments, applybroadcaststyle, applylayout, arguments, cacheddata, paddeddata, resizedata!, simplifiable, - simplify + simplify, islazy, islazy_layout import LazyBandedMatrices: AbstractLazyBandedBlockBandedLayout, AbstractLazyBandedLayout, ApplyBandedLayout, BlockVec, BroadcastBandedLayout, KronTravBandedBlockBandedLayout, LazyBandedLayout, diff --git a/src/banded/infbanded.jl b/src/banded/infbanded.jl index 4956dfd..215104a 100644 --- a/src/banded/infbanded.jl +++ b/src/banded/infbanded.jl @@ -323,8 +323,8 @@ ConstRowMatrix(A::AbstractMatrix{T}) where T = ApplyMatrix(*, A[:,1], Ones{T}(1, PertConstRowMatrix(A::AbstractMatrix{T}) where T = Hcat(_pertdata(A), ApplyMatrix(*, _constrows(A), Ones{T}(1,size(A,2)))) -struct ConstRows <: MemoryLayout end -struct PertConstRows <: MemoryLayout end +struct ConstRows <: AbstractLazyLayout end +struct PertConstRows <: AbstractLazyLayout end MemoryLayout(::Type{<:ConstRowMatrix}) = ConstRows() MemoryLayout(::Type{<:PertConstRowMatrix}) = PertConstRows() bandedcolumns(::ConstRows) = BandedToeplitzLayout() @@ -361,6 +361,11 @@ diagonalconstant(A) = getindex_value(diagonaldata(A)) supdiagonalconstant(A) = getindex_value(supdiagonaldata(A)) +islazy_layout(::InfToeplitzLayouts) = Val(true) +islazy(::BandedMatrix{<:Any,<:Any,OneToInf{Int}}) = Val(true) + + + _BandedMatrix(::BandedToeplitzLayout, A::AbstractMatrix) = _BandedMatrix(ConstRowMatrix(bandeddata(A)), size(A,1), bandwidths(A)...) _BandedMatrix(::PertToeplitzLayout, A::AbstractMatrix) = diff --git a/test/test_infbanded.jl b/test/test_infbanded.jl index f2db878..804e17e 100644 --- a/test/test_infbanded.jl +++ b/test/test_infbanded.jl @@ -34,8 +34,10 @@ using Base: oneto @testset "∞-Toeplitz" begin A = BandedMatrix(1 => Fill(2im,∞), 2 => Fill(-1,∞), 3 => Fill(2,∞), -2 => Fill(-4,∞), -3 => Fill(-2im,∞)) @test A isa InfToeplitz - @test MemoryLayout(typeof(A.data)) == ConstRows() - @test MemoryLayout(typeof(A)) == BandedToeplitzLayout() + @test MemoryLayout(A.data) == ConstRows() + @test MemoryLayout(A) == BandedToeplitzLayout() + @test LazyArrays.islazy(A) == Val(true) + V = view(A,:,3:∞) @test MemoryLayout(typeof(bandeddata(V))) == ConstRows() @test MemoryLayout(typeof(V)) == BandedToeplitzLayout() @@ -166,6 +168,7 @@ using Base: oneto @testset "Banded * PaddedMatrix" begin A = Eye(∞)[2:∞,:] + @test LazyArrays.islazy(A) == Val(true) B = PaddedArray(randn(3,3),ℵ₀,ℵ₀) @test (A*B)[1:10,1:10] ≈ A[1:10,1:10] * B[1:10,1:10] end