From c205797c10acaca2fd8d37869c5884b62cacde2d Mon Sep 17 00:00:00 2001 From: jishnub Date: Sat, 24 Apr 2021 18:25:02 +0400 Subject: [PATCH 1/2] Origin accepts Integer arguments --- src/origin.jl | 11 ++++++----- test/origin.jl | 11 ++++++++++- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/origin.jl b/src/origin.jl index cb3a4d2c..08da84f8 100644 --- a/src/origin.jl +++ b/src/origin.jl @@ -23,14 +23,15 @@ julia> OffsetArray(a, OffsetArrays.Origin(0)) # short notation for `Origin(0, 0) 3 4 ``` """ -struct Origin{T<:Union{Tuple, Int}} +struct Origin{T<:Union{Tuple{Vararg{Int}}, Int}} index::T end -Origin(I::NTuple{N, Int}) where N = Origin{typeof(I)}(I) -Origin(I::CartesianIndex) = Origin(I.I) -Origin(I1::Int, In::Int...) = Origin((I1, In...)) +Origin(I::Tuple{Vararg{Int}}) = Origin{typeof(I)}(I) +Origin(I::Tuple{Vararg{Integer}}) = Origin(map(Int, I)) +Origin(I::CartesianIndex) = Origin(Tuple(I)) +Origin(I::Integer...) = Origin(I) # Origin(0) != Origin((0, )) but they work the same with broadcasting -Origin(n::Int) = Origin{Int}(n) +Origin(n::Integer) = Origin{Int}(Int(n)) (o::Origin)(A::AbstractArray) = o.index .- first.(axes(A)) diff --git a/test/origin.jl b/test/origin.jl index f9b8d2fa..7203ace8 100644 --- a/test/origin.jl +++ b/test/origin.jl @@ -5,6 +5,15 @@ using OffsetArrays: Origin @test Origin(0) != Origin((0, )) @test Origin(CartesianIndex(1, 2)) === Origin((1, 2)) === Origin(1, 2) + @test Origin(Int32.((1,2))) == Origin(Int64.((1,2))) + @test Origin(Int32.((1,2))...) == Origin(Int64.((1,2))...) + @test Origin(Int32(1)) == Origin(Int64(1)) + + # 0d + A = OffsetArray(zeros()) + B = OffsetArray(zeros(), Origin()) + @test axes(A) == axes(B) + # 1d v = [1, 2] @test get_origin(OffsetArray(v, Origin(2))) == (2, ) @@ -27,7 +36,7 @@ using OffsetArrays: Origin oa = OffsetArray(a, -3, -3, -3) @test get_origin(OffsetArray(oa, Origin(0))) == (0, 0, 0) @test get_origin(OffsetArray(oa, Origin(1, 2, 3))) == (1, 2, 3) - + # Scalar broadcasting let a = [ [1,2,3], [4,5,6] ] From 35833ca7dbb7f03118c1d9e3726dff1eb552a70c Mon Sep 17 00:00:00 2001 From: jishnub Date: Sat, 24 Apr 2021 19:51:50 +0400 Subject: [PATCH 2/2] Origin accepts Numbers --- src/origin.jl | 6 +++--- test/origin.jl | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/origin.jl b/src/origin.jl index 08da84f8..fcd1c4f6 100644 --- a/src/origin.jl +++ b/src/origin.jl @@ -27,11 +27,11 @@ struct Origin{T<:Union{Tuple{Vararg{Int}}, Int}} index::T end Origin(I::Tuple{Vararg{Int}}) = Origin{typeof(I)}(I) -Origin(I::Tuple{Vararg{Integer}}) = Origin(map(Int, I)) +Origin(I::Tuple{Vararg{Number}}) = Origin(map(Int, I)) Origin(I::CartesianIndex) = Origin(Tuple(I)) -Origin(I::Integer...) = Origin(I) +Origin(I::Number...) = Origin(I) # Origin(0) != Origin((0, )) but they work the same with broadcasting -Origin(n::Integer) = Origin{Int}(Int(n)) +Origin(n::Number) = Origin{Int}(Int(n)) (o::Origin)(A::AbstractArray) = o.index .- first.(axes(A)) diff --git a/test/origin.jl b/test/origin.jl index 7203ace8..61361c22 100644 --- a/test/origin.jl +++ b/test/origin.jl @@ -6,8 +6,9 @@ using OffsetArrays: Origin @test Origin(CartesianIndex(1, 2)) === Origin((1, 2)) === Origin(1, 2) @test Origin(Int32.((1,2))) == Origin(Int64.((1,2))) - @test Origin(Int32.((1,2))...) == Origin(Int64.((1,2))...) - @test Origin(Int32(1)) == Origin(Int64(1)) + @test Origin(Int32.((1,2))...) == Origin(Int64.((1,2))...) == Origin((1.0, 2.0)) + @test Origin(Int32(1)) == Origin(Int64(1)) == Origin(1.0) + @test_throws Exception Origin(1.5) # 0d A = OffsetArray(zeros())