Skip to content

Commit 0c73bef

Browse files
Preserve blocked unit range in more broadcasting operations (#464)
Fixes #334. Co-authored-by: Sheehan Olver <[email protected]>
1 parent a1c89dc commit 0c73bef

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/blockbroadcast.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,3 +276,13 @@ for op in (:*, :\)
276276
broadcasted(::AbstractBlockStyle, ::typeof($op), a::AbstractArray{T}, b::Ones{V}) where {T,V} = LinearAlgebra.copy_oftype(a, Base.promote_op(*, T, V))
277277
end
278278
end
279+
280+
281+
282+
###
283+
# Ranges
284+
###
285+
286+
broadcasted(::DefaultArrayStyle{1}, ::typeof(+), r::AbstractBlockedUnitRange, x::Integer) = _BlockedUnitRange(first(r) + x, blocklasts(r) .+ x)
287+
broadcasted(::DefaultArrayStyle{1}, ::typeof(+), x::Integer, r::AbstractBlockedUnitRange) = _BlockedUnitRange(x + first(r), x .+ blocklasts(r))
288+
broadcasted(::DefaultArrayStyle{1}, ::typeof(-), r::AbstractBlockedUnitRange, x::Integer) = _BlockedUnitRange(first(r) - x, blocklasts(r) .- x)

test/test_blockbroadcast.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,24 @@ using StaticArrays
193193
@test blockisequal(axes(A .* Ones(axes(A))), axes(Ones(axes(A)) .* A), axes(A .* ones(6)))
194194
end
195195

196+
@testset "Blocked unit range broadcast" begin
197+
r = blockedrange([2,3])
198+
@test r .+ 3 == blockedrange(4, [2,3])
199+
@test blocklengths(r .+ 3) == [2,3]
200+
@test 3 .+ r == blockedrange(4, [2,3])
201+
@test blocklengths(3 .+ r .+ 3) == [2,3]
202+
@test r .- 3 == blockedrange(-2, [2,3])
203+
@test blocklengths(r .- 3) == [2,3]
204+
205+
r = blockedrange(2, [2,3])
206+
@test r .+ 3 == blockedrange(5, [2,3])
207+
@test blocklengths(r .+ 3) == [2,3]
208+
@test 3 .+ r == blockedrange(5, [2,3])
209+
@test blocklengths(3 .+ r .+ 3) == [2,3]
210+
@test r .- 3 == blockedrange(-1, [2,3])
211+
@test blocklengths(r .- 3) == [2,3]
212+
end
213+
196214
@testset "type inference" begin
197215
u = BlockArray(randn(5), [2,3]);
198216
A = zeros(size(u))

0 commit comments

Comments
 (0)