From 6af551fc9fbce8f68b3967184ece3b40fe2e55d6 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 11:49:36 +0100 Subject: [PATCH 1/7] use StepRangeLen to support 0 step size --- src/FillArrays.jl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/FillArrays.jl b/src/FillArrays.jl index 06c63636..bda98c75 100644 --- a/src/FillArrays.jl +++ b/src/FillArrays.jl @@ -496,8 +496,7 @@ sum(x::AbstractFill) = getindex_value(x)*length(x) sum(f, x::AbstractFill) = length(x) * f(getindex_value(x)) sum(x::Zeros) = getindex_value(x) -cumsum(x::AbstractFill{<:Any,1}) = range(getindex_value(x); step=getindex_value(x), - length=length(x)) +cumsum(x::AbstractFill{<:Any,1}) = StepRangeLen(getindex_value(x), getindex_value(x), length(x)) cumsum(x::ZerosVector) = x cumsum(x::ZerosVector{Bool}) = x From 8b368a4070167cbbf1256754d42158127d4e13ca Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 11:49:59 +0100 Subject: [PATCH 2/7] v0.13.11 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1ca89b29..0d75506b 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FillArrays" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.13.10" +version = "0.13.11" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" From 3e640af4db9eb9a667eddbc4f2391dd58cad981c Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 12:58:52 +0100 Subject: [PATCH 3/7] =?UTF-8?q?allow=20special=20casing=20on=20=E2=88=9E?= =?UTF-8?q?=20length?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/FillArrays.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/FillArrays.jl b/src/FillArrays.jl index 6a5b16df..c652cdba 100644 --- a/src/FillArrays.jl +++ b/src/FillArrays.jl @@ -496,7 +496,9 @@ sum(x::AbstractFill) = getindex_value(x)*length(x) sum(f, x::AbstractFill) = length(x) * f(getindex_value(x)) sum(x::Zeros) = getindex_value(x) -cumsum(x::AbstractFill{<:Any,1}) = StepRangeLen(getindex_value(x), getindex_value(x), length(x)) +# needed to support infinite case +steprangelen(st...) = StepRangeLen(st...) +cumsum(x::AbstractFill{<:Any,1}) = steprangelen(getindex_value(x), getindex_value(x), length(x)) cumsum(x::ZerosVector) = x cumsum(x::ZerosVector{Bool}) = x From 1d15e366d2083f14b5a08b5fe96a63eb1380b685 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 13:49:49 +0100 Subject: [PATCH 4/7] =?UTF-8?q?Restore=20=C2=B1=C2=A0special=20cases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Project.toml | 2 +- src/fillalgebra.jl | 5 +++++ test/runtests.jl | 8 ++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1ca89b29..0d75506b 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FillArrays" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.13.10" +version = "0.13.11" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" diff --git a/src/fillalgebra.jl b/src/fillalgebra.jl index 300e44d5..2dec1b61 100644 --- a/src/fillalgebra.jl +++ b/src/fillalgebra.jl @@ -212,6 +212,11 @@ function dot(u::AbstractVector{T}, D::Diagonal{U,<:Zeros}, v::AbstractVector{V}) end # Addition and Subtraction ++(a::AbstractFill) = a +-(a::Zeros) = a +-(a::AbstractFill) = Fill(-getindex_value(a), size(a)) + + function +(a::Zeros{T}, b::Zeros{V}) where {T, V} # for disambiguity promote_shape(a,b) return elconvert(promote_op(+,T,V),a) diff --git a/test/runtests.jl b/test/runtests.jl index 9b2cfb19..81ba61c5 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -613,6 +613,14 @@ end @test zero(Ones(10,10)) == Zeros(10,10) @test zero(Fill(0.5, 10, 10)) == Zeros(10,10) end + + @testset "Matrix ±" begin + x = Fill([1,2], 5) + z = Zeros{SVector{2,Int}}(5) + @test +(z) ≡ -(z) ≡ z + @test +(x) == x + @test -(x) == Fill(-[1,2], 5) + end end @testset "maximum/minimum/svd/sort" begin From 4a2018ba191c5d7e68725f91cc19483ab673ed86 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 14:56:15 +0100 Subject: [PATCH 5/7] Update runtests.jl --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index 81ba61c5..2a580cab 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -634,7 +634,7 @@ end @test sum(Fill(3,10)) ≡ 30 @test reduce(+, Fill(3,10)) ≡ 30 @test sum(x -> x + 1, Fill(3,10)) ≡ 40 - @test cumsum(Fill(3,10)) ≡ 3:3:30 + @test cumsum(Fill(3,10)) ≡ StepRangeLen(3.0,3,10) @test sum(Ones(10)) ≡ 10.0 @test sum(x -> x + 1, Ones(10)) ≡ 20.0 From 99c346f91746880882a4a6323da3775db484f86a Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 15:14:11 +0100 Subject: [PATCH 6/7] fix more tests --- src/FillArrays.jl | 1 - test/runtests.jl | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/FillArrays.jl b/src/FillArrays.jl index c652cdba..b6f43624 100644 --- a/src/FillArrays.jl +++ b/src/FillArrays.jl @@ -504,7 +504,6 @@ cumsum(x::ZerosVector) = x cumsum(x::ZerosVector{Bool}) = x cumsum(x::OnesVector{II}) where II<:Integer = convert(AbstractVector{II}, oneto(length(x))) cumsum(x::OnesVector{Bool}) = oneto(length(x)) -cumsum(x::AbstractFillVector{Bool}) = cumsum(AbstractFill{Int}(x)) ######### diff --git a/test/runtests.jl b/test/runtests.jl index 2a580cab..3e64dc09 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -634,11 +634,11 @@ end @test sum(Fill(3,10)) ≡ 30 @test reduce(+, Fill(3,10)) ≡ 30 @test sum(x -> x + 1, Fill(3,10)) ≡ 40 - @test cumsum(Fill(3,10)) ≡ StepRangeLen(3.0,3,10) + @test cumsum(Fill(3,10)) ≡ StepRangeLen(3,3,10) @test sum(Ones(10)) ≡ 10.0 @test sum(x -> x + 1, Ones(10)) ≡ 20.0 - @test cumsum(Ones(10)) ≡ 1.0:10.0 + @test cumsum(Ones(10)) ≡ StepRangeLen(1.0, 1.0, 10) @test sum(Ones{Int}(10)) ≡ 10 @test sum(x -> x + 1, Ones{Int}(10)) ≡ 20 @@ -654,7 +654,7 @@ end @test cumsum(Zeros{Bool}(10)) ≡ Zeros{Bool}(10) @test cumsum(Ones{Bool}(10)) ≡ Base.OneTo{Int}(10) - @test cumsum(Fill(true,10)) ≡ 1:1:10 + @test cumsum(Fill(true,10)) ≡ StepRangeLen(true, true, 10) @test diff(Fill(1,10)) ≡ Zeros{Int}(9) @test diff(Ones{Float64}(10)) ≡ Zeros{Float64}(9) From 3c5caf37cdda8d99a27b9e0bd29f2bf62a92a853 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Tue, 28 Mar 2023 15:32:24 +0100 Subject: [PATCH 7/7] Update runtests.jl --- test/runtests.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/runtests.jl b/test/runtests.jl index 3e64dc09..b6ec7924 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1338,6 +1338,8 @@ end @test stringmime("text/plain", Fill(7,2,3)) == "2×3 Fill{$Int}, with entries equal to 7" @test stringmime("text/plain", Fill(8.0,1)) == "1-element Fill{Float64}, with entry equal to 8.0" @test stringmime("text/plain", Eye(5)) == "5×5 Eye{Float64}" + # used downstream in LazyArrays.jl to deduce sparsity + @test Base.replace_in_print_matrix(Zeros(5,3), 1, 2, "0.0") == " ⋅ " # 2-arg show, compact printing @test repr(Zeros(3)) == "Zeros(3)"