From a793932e0b753bdd7af7696288d5d15314987d35 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Thu, 18 Apr 2024 09:32:26 +0100 Subject: [PATCH 1/3] similar with non-zero fills --- src/infarrays.jl | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/infarrays.jl b/src/infarrays.jl index 373ef2e..71fdd14 100644 --- a/src/infarrays.jl +++ b/src/infarrays.jl @@ -19,12 +19,15 @@ Matrix{T}(::UndefInitializer, ::Integer, ::PosInfinity) where T = throw(Argument Vector{T}(::UndefInitializer, ::Tuple{PosInfinity}) where T = throw(ArgumentError("Cannot create infinite Array")) Vector{T}(::UndefInitializer, ::PosInfinity) where T = throw(ArgumentError("Cannot create infinite Array")) -similar(A::AbstractArray, ::Type{T}, axes::Tuple{OneToInf{Int}}) where T = cache(Zeros{T}(axes)) -similar(A::AbstractArray, ::Type{T}, axes::Tuple{OneToInf{Int},OneToInf{Int}}) where T = cache(Zeros{T}(axes)) -similar(A::AbstractArray, ::Type{T}, dims::Tuple{PosInfinity}) where T = cache(Zeros{T}(dims)) -similar(A::AbstractArray, ::Type{T}, dims::Tuple{PosInfinity,PosInfinity}) where T = cache(Zeros{T}(dims)) -similar(A::AbstractArray, ::Type{T}, dims::Tuple{Integer,PosInfinity}) where T = cache(Zeros{T}(dims)) -similar(A::AbstractArray, ::Type{T}, dims::Tuple{PosInfinity,Integer}) where T = cache(Zeros{T}(dims)) +filltype(_, ::Type{T}, axes) where T = Zeros{T}(axes) +filltype(F::AbstractFill, ::Type{T}, axes) where T = Fill{T}(getindex_value(F), axes) + +similar(A::AbstractArray, ::Type{T}, axes::Tuple{OneToInf{Int}}) where T = cache(filltype(A, T, axes)) +similar(A::AbstractArray, ::Type{T}, axes::Tuple{OneToInf{Int},OneToInf{Int}}) where T = cache(filltype(A, T, axes)) +similar(A::AbstractArray, ::Type{T}, dims::Tuple{PosInfinity}) where T = cache(filltype(A, T, dims)) +similar(A::AbstractArray, ::Type{T}, dims::Tuple{PosInfinity,PosInfinity}) where T = cache(filltype(A, T, dims)) +similar(A::AbstractArray, ::Type{T}, dims::Tuple{Integer,PosInfinity}) where T = cache(filltype(A, T, dims)) +similar(A::AbstractArray, ::Type{T}, dims::Tuple{PosInfinity,Integer}) where T = cache(filltype(A, T, dims)) similar(::Type{<:AbstractArray{T}}, axes::Tuple{OneToInf{Int}}) where T = cache(Zeros{T}(axes)) similar(::Type{<:AbstractArray{T}}, axes::Tuple{OneToInf{Int},OneToInf{Int}}) where T = cache(Zeros{T}(axes)) @@ -35,6 +38,7 @@ similar(::Type{<:AbstractArray{T}}, dims::Tuple{PosInfinity,PosInfinity}) where similar(::Type{<:AbstractArray{T}}, dims::Tuple{Integer,PosInfinity}) where T = cache(Zeros{T}(dims)) similar(::Type{<:AbstractArray{T}}, dims::Tuple{PosInfinity,Integer}) where T = cache(Zeros{T}(dims)) + similar(arr::AbstractArray{T}, sz::Union{Infinity,Integer,AbstractUnitRange}...) where T = similar(arr, Base.to_shape(sz)...) similar(arr::AbstractArray, ::Type{T}, sz::Union{Infinity,Integer,AbstractUnitRange}...) where T = similar(arr, T, Base.to_shape(sz)...) From c053067cf7c5c0c1a2c2317f446428df0bff62c0 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Thu, 18 Apr 2024 10:07:19 +0100 Subject: [PATCH 2/3] test fill --- src/infarrays.jl | 1 + test/runtests.jl | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/infarrays.jl b/src/infarrays.jl index 71fdd14..4d0208b 100644 --- a/src/infarrays.jl +++ b/src/infarrays.jl @@ -21,6 +21,7 @@ Vector{T}(::UndefInitializer, ::PosInfinity) where T = throw(ArgumentError("Cann filltype(_, ::Type{T}, axes) where T = Zeros{T}(axes) filltype(F::AbstractFill, ::Type{T}, axes) where T = Fill{T}(getindex_value(F), axes) +filltype(F::Vcat, ::Type{T}, axes) where T = filltype(F.args[end], T, axes) similar(A::AbstractArray, ::Type{T}, axes::Tuple{OneToInf{Int}}) where T = cache(filltype(A, T, axes)) similar(A::AbstractArray, ::Type{T}, axes::Tuple{OneToInf{Int},OneToInf{Int}}) where T = cache(filltype(A, T, axes)) diff --git a/test/runtests.jl b/test/runtests.jl index 2eb85df..fc338c9 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -750,6 +750,9 @@ end @test [randn(2,2); Zeros(∞,2)] isa Vcat{<:Any,2,<:Tuple{Array,Zeros}} + x = [[1, 3]; Fill(2,∞)] + @test similar(x)[1:10] == fill(2,10) + a = [[1,2,3]; zeros(Int,∞)] @test a[3:∞][1:5] == a[3:7] @test cache(1:∞)[2:∞][1:5] == 2:6 From fcf9410f9db8666b394f216f5ec21a30fd4369f6 Mon Sep 17 00:00:00 2001 From: Sheehan Olver Date: Thu, 18 Apr 2024 10:35:11 +0100 Subject: [PATCH 3/3] v0.13.8 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index da6648c..59c022c 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "InfiniteArrays" uuid = "4858937d-0d70-526a-a4dd-2d5cb5dd786c" -version = "0.13.7" +version = "0.13.8" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"