@@ -28,7 +28,7 @@ _range(a::AbstractFloat, ::Nothing, ::Nothing, len::Infinity) = _range(a
2828_rangestyle (:: Ordered , :: ArithmeticWraps , a:: T , step:: S , len:: Infinity ) where {T,S} =
2929 InfStepRange {T,S} (a, step)
3030_rangestyle (:: Ordered , :: ArithmeticUnknown , a:: T , step:: S , len:: Infinity ) where {T,S} =
31- InfStepRange {T,S} (a, step)
31+ InfStepRange {T,S} (a, step)
3232_range (a:: T , st:: T , :: Nothing , :: Infinity ) where T<: Union{Float16,Float32,Float64} =
3333 InfStepRange {T,T} (a, st)
3434_range (a:: T , st:: T , :: Nothing , :: Infinity ) where T<: AbstractFloat =
@@ -395,7 +395,19 @@ broadcast(f, r::Adjoint{<:Any,<:InfRanges}, a::Number) = broadcast(f,parent(r),a
395395broadcast (f, r:: Transpose{<:Any,<:InfRanges} , a:: Number ) = transpose (broadcast (f,parent (r),a))
396396
397397
398- cumsum (r:: InfRanges ) = OneToInf () .* (first (r) .+ r) .÷ 2
398+ # cumsum(r::InfRanges) = OneToInf() .* (first(r) .+ r) .÷ 2
399+
400+ cumsum (r:: InfRanges ) = Cumsum (r)
401+ function getindex (c:: Cumsum{<:Integer,1,<:InfStepRange} , k:: Integer )
402+ r = c. v
403+ k * (first (r) + r[k]) ÷ 2
404+ end
405+ function getindex (c:: Cumsum{<:Integer,1,<:AbstractInfUnitRange} , k:: Integer )
406+ r = c. v
407+ k * (2 first (r) + k - 1 ) ÷ 2
408+ end
409+ getindex (c:: Cumsum{<:Integer,1,<:OneToInf} , k:: Integer ) = k * (k+ 1 ) ÷ 2
410+
399411
400412diff (r:: InfRanges ) = Fill (step (r),∞)
401413diff (r:: OneToInf{T} ) where T = Ones {T} (∞)
@@ -418,22 +430,22 @@ conv(::Ones{Bool,1,<:Tuple{<:OneToInf}}, ::Ones{Bool,1,<:Tuple{<:OneToInf}}) =
418430conv (:: Ones{T,1,<:Tuple{<:OneToInf}} , :: Ones{V,1,<:Tuple{<:OneToInf}} ) where {T,V} =
419431 one (promote_type (T,V)): ∞
420432
421- function conv (:: Ones{T,1,<:Tuple{<:OneToInf}} , a:: AbstractVector{V} ) where {T,V}
433+ function conv (:: Ones{T,1,<:Tuple{<:OneToInf}} , a:: AbstractVector{V} ) where {T,V}
422434 cs = cumsum (convert (AbstractVector{promote_type (T,V)}, a))
423435 Vcat (cs, Fill (last (cs), ∞))
424436end
425437
426- function conv (:: Ones{T,1,<:Tuple{<:OneToInf}} , a:: Vector{V} ) where {T,V}
438+ function conv (:: Ones{T,1,<:Tuple{<:OneToInf}} , a:: Vector{V} ) where {T,V}
427439 cs = cumsum (convert (AbstractVector{promote_type (T,V)}, a))
428440 Vcat (cs, Fill (last (cs), ∞))
429441end
430442
431- function conv (a:: AbstractVector{V} , :: Ones{T,1,<:Tuple{<:OneToInf}} ) where {T,V}
443+ function conv (a:: AbstractVector{V} , :: Ones{T,1,<:Tuple{<:OneToInf}} ) where {T,V}
432444 cs = cumsum (convert (AbstractVector{promote_type (T,V)}, a))
433445 Vcat (cs, Fill (last (cs), ∞))
434446end
435447
436- function conv (a:: Vector{V} , :: Ones{T,1,<:Tuple{<:OneToInf}} ) where {T,V}
448+ function conv (a:: Vector{V} , :: Ones{T,1,<:Tuple{<:OneToInf}} ) where {T,V}
437449 cs = cumsum (convert (AbstractVector{promote_type (T,V)}, a))
438450 Vcat (cs, Fill (last (cs), ∞))
439451end
@@ -493,16 +505,16 @@ function _step_findfirst(p, r::InfStepRange{T,S}) where {T,S}
493505end
494506
495507for op in (:isequal , :(== ))
496- @eval begin
508+ @eval begin
497509 findfirst (p:: Fix2{typeof($op),T} , r:: InfStepRange{T,S} ) where {T,S} =
498510 _step_findfirst (p, r)
499511
500- findfirst (p:: Fix2{typeof($op),T} , r:: InfStepRange{T,<:Integer} ) where {T<: Integer } =
512+ findfirst (p:: Fix2{typeof($op),T} , r:: InfStepRange{T,<:Integer} ) where {T<: Integer } =
513+ _step_findfirst (p, r)
514+
515+ findfirst (p:: Fix2{typeof($op),<:Integer} , r:: InfStepRange{<:Integer,<:Integer} ) =
501516 _step_findfirst (p, r)
502517
503- findfirst (p:: Fix2{typeof($op),<:Integer} , r:: InfStepRange{<:Integer,<:Integer} ) =
504- _step_findfirst (p, r)
505-
506518 function findfirst (p:: Fix2{typeof($op),<:Integer} , r:: AbstractInfUnitRange{<:Integer} )
507519 first (r) <= p. x || return nothing
508520 p. x - first (r) + 1
@@ -511,6 +523,6 @@ for op in (:isequal, :(==))
511523 findfirst (p:: Fix2{typeof($op),<:Number} , r:: AbstractInfUnitRange{<:Integer} ) =
512524 isinteger (p. x) ? findfirst ($ op (convert (Integer, p. x)), r) : nothing
513525 findfirst (p:: Fix2{typeof($op),<:Number} , r:: InfStepRange{<:Integer,<:Integer} ) =
514- isinteger (p. x) ? findfirst ($ op (convert (V, p. x)), r) : nothing
526+ isinteger (p. x) ? findfirst ($ op (convert (V, p. x)), r) : nothing
515527 end
516528end
0 commit comments