From 7c84e885ded90607a560569e23588c75264bcdad Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Sun, 22 Jan 2023 21:23:31 +0530 Subject: [PATCH 1/5] IteratorSize for infinite ranges --- src/infrange.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/infrange.jl b/src/infrange.jl index 92f0fd2..001ec8c 100644 --- a/src/infrange.jl +++ b/src/infrange.jl @@ -66,8 +66,12 @@ end InfStepRange(start::T, step::S) where {T,S} = InfStepRange{T,S}(start,step) InfStepRange{T,S}(start, step) where {T,S} = InfStepRange{T,S}(convert(T,start),convert(S,step)) +Base.IteratorSize(::Type{<:InfStepRange}) = Base.IsInfinite() + abstract type AbstractInfUnitRange{T<:Real} <: AbstractUnitRange{T} end +Base.IteratorSize(::Type{<:AbstractInfUnitRange}) = Base.IsInfinite() + done(r::AbstractInfUnitRange{T}, i) where {T} = false unitrange_last(start, stop::PosInfinity) = ∞ From a0515caedb069219279e1bb476ae53e0cff43d66 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 23 Jan 2023 09:17:32 +0400 Subject: [PATCH 2/5] Add tests --- src/infrange.jl | 7 ++----- test/runtests.jl | 8 ++++++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/infrange.jl b/src/infrange.jl index 001ec8c..beb113d 100644 --- a/src/infrange.jl +++ b/src/infrange.jl @@ -66,12 +66,8 @@ end InfStepRange(start::T, step::S) where {T,S} = InfStepRange{T,S}(start,step) InfStepRange{T,S}(start, step) where {T,S} = InfStepRange{T,S}(convert(T,start),convert(S,step)) -Base.IteratorSize(::Type{<:InfStepRange}) = Base.IsInfinite() - abstract type AbstractInfUnitRange{T<:Real} <: AbstractUnitRange{T} end -Base.IteratorSize(::Type{<:AbstractInfUnitRange}) = Base.IsInfinite() - done(r::AbstractInfUnitRange{T}, i) where {T} = false unitrange_last(start, stop::PosInfinity) = ∞ @@ -79,7 +75,6 @@ struct InfUnitRange{T<:Real} <: AbstractInfUnitRange{T} start::T end - InfUnitRange(a::InfUnitRange) = a InfUnitRange{T}(a::AbstractInfUnitRange) where T<:Real = InfUnitRange{T}(first(a)) InfUnitRange(a::AbstractInfUnitRange{T}) where T<:Real = InfUnitRange{T}(first(a)) @@ -93,6 +88,8 @@ AbstractVector{T}(a::InfStepRange) where T<:Real = InfStepRange(convert(T,a.star const InfRanges{T} = Union{InfStepRange{T},AbstractInfUnitRange{T}} const InfAxes = Union{InfRanges{<:Integer},Slice{<:AbstractInfUnitRange{<:Integer}},IdentityUnitRange{<:AbstractInfUnitRange{<:Integer}}} +Base.IteratorSize(::Type{<:InfAxes}) = Base.IsInfinite() + AbstractArray{T}(ac::Adjoint{<:Any,<:InfRanges}) where T<:Real = AbstractArray{T}(parent(ac))' AbstractMatrix{T}(ac::Adjoint{<:Any,<:InfRanges}) where T<:Real = AbstractVector{T}(parent(ac))' AbstractArray{T}(ac::Transpose{<:Any,<:InfRanges}) where T<:Real = transpose(AbstractArray{T}(parent(ac))) diff --git a/test/runtests.jl b/test/runtests.jl index f898b16..f04f89c 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -160,6 +160,14 @@ end @test length(1.:.2:∞) == ℵ₀ @test length(2:-.2:-∞) == ℵ₀ @test length(2.:-.2:-∞) == ℵ₀ + + @testset "IteratorSize" begin + @test Base.IteratorSize(1:2:∞) == Base.IsInfinite() + @test Base.IteratorSize(1:∞) == Base.IsInfinite() + s = Iterators.Stateful(2:∞) + @test first(s) == 2 + @test first(s) == 3 + end end @testset "intersect" begin From 4044cf3bc5dcbb83cb6150af796bffeb42b18430 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 23 Jan 2023 09:18:29 +0400 Subject: [PATCH 3/5] restore deleted line --- src/infrange.jl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/infrange.jl b/src/infrange.jl index beb113d..0b6ae22 100644 --- a/src/infrange.jl +++ b/src/infrange.jl @@ -75,6 +75,7 @@ struct InfUnitRange{T<:Real} <: AbstractInfUnitRange{T} start::T end + InfUnitRange(a::InfUnitRange) = a InfUnitRange{T}(a::AbstractInfUnitRange) where T<:Real = InfUnitRange{T}(first(a)) InfUnitRange(a::AbstractInfUnitRange{T}) where T<:Real = InfUnitRange{T}(first(a)) From 70f15af74bcbfba58aac273fd2e28a3bb7954e0f Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 23 Jan 2023 09:19:53 +0400 Subject: [PATCH 4/5] version bump to v0.12.9 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index b30d1ce..f05eabe 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "InfiniteArrays" uuid = "4858937d-0d70-526a-a4dd-2d5cb5dd786c" -version = "0.12.8" +version = "0.12.9" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" From 83d6f3971bfe1f1ac997c3a70f526402222fa9d6 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 23 Jan 2023 09:20:34 +0400 Subject: [PATCH 5/5] InfAxes -> InfRanges --- src/infrange.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/infrange.jl b/src/infrange.jl index 0b6ae22..ce4cf1e 100644 --- a/src/infrange.jl +++ b/src/infrange.jl @@ -89,7 +89,7 @@ AbstractVector{T}(a::InfStepRange) where T<:Real = InfStepRange(convert(T,a.star const InfRanges{T} = Union{InfStepRange{T},AbstractInfUnitRange{T}} const InfAxes = Union{InfRanges{<:Integer},Slice{<:AbstractInfUnitRange{<:Integer}},IdentityUnitRange{<:AbstractInfUnitRange{<:Integer}}} -Base.IteratorSize(::Type{<:InfAxes}) = Base.IsInfinite() +Base.IteratorSize(::Type{<:InfRanges}) = Base.IsInfinite() AbstractArray{T}(ac::Adjoint{<:Any,<:InfRanges}) where T<:Real = AbstractArray{T}(parent(ac))' AbstractMatrix{T}(ac::Adjoint{<:Any,<:InfRanges}) where T<:Real = AbstractVector{T}(parent(ac))'