Skip to content

Commit ed04fda

Browse files
authored
Preserve offsets on broadcasting IdOffsetRange (#114)
1 parent a056588 commit ed04fda

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

src/axes.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,14 @@ end
158158
return IdOffsetRange(r.parent[s .- r.offset], r.offset)
159159
end
160160

161+
# offset-preserve broadcasting
162+
Broadcast.broadcasted(::Base.Broadcast.DefaultArrayStyle{1}, ::typeof(-), r::IdOffsetRange{T}, x::Integer) where T =
163+
IdOffsetRange{T}(r.parent .- x, r.offset)
164+
Broadcast.broadcasted(::Base.Broadcast.DefaultArrayStyle{1}, ::typeof(+), r::IdOffsetRange{T}, x::Integer) where T =
165+
IdOffsetRange{T}(r.parent .+ x, r.offset)
166+
Broadcast.broadcasted(::Base.Broadcast.DefaultArrayStyle{1}, ::typeof(+), x::Integer, r::IdOffsetRange{T}) where T =
167+
IdOffsetRange{T}(x .+ r.parent, r.offset)
168+
161169
Base.show(io::IO, r::IdOffsetRange) = print(io, first(r), ':', last(r))
162170

163171
# Optimizations

test/runtests.jl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ using CatIndices: BidirectionalVector
7373
@test @inferred(oftype(ro, 1:2)) === OffsetArrays.IdOffsetRange(Base.OneTo(2))
7474
@test_broken try oftype(ro, 3:4); false catch err true end
7575
# @test_throws ArgumentError oftype(ro, 3:4)
76+
77+
# broadcasting behavior with scalars (issue #104)
78+
r3 = (1 .+ OffsetArrays.IdOffsetRange(3:5, -1) .+ 1) .- 1
79+
@test same_value(r3, 3:5)
80+
check_indexed_by(r3, 0:2)
7681
end
7782

7883
@testset "Single-entry arrays in dims 0:5" begin

0 commit comments

Comments
 (0)