Skip to content

Commit ce0d5f3

Browse files
committed
broadcasting with tuples (fixes #485)
1 parent ae78e52 commit ce0d5f3

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/broadcast.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ broadcast_indices(A::StaticArray) = indices(A)
5555
@inline broadcast_sizes() = ()
5656
@inline broadcast_size(a) = Size()
5757
@inline broadcast_size(a::AbstractArray) = Size(a)
58+
@inline broadcast_size(a::NTuple{N}) where N = Size(N)
5859

5960
function broadcasted_index(oldsize, newindex)
6061
index = ones(Int, length(oldsize))
@@ -110,7 +111,7 @@ scalar_getindex(x::Tuple{<: Any}) = x[1]
110111
exprs = similar(indices, Expr)
111112
for (j, current_ind) enumerate(indices)
112113
exprs_vals = [
113-
(!(a[i] <: AbstractArray) ? :(scalar_getindex(a[$i])) : :(a[$i][$(broadcasted_index(sizes[i], current_ind))]))
114+
(!(a[i] <: AbstractArray || a[i] <: Tuple) ? :(scalar_getindex(a[$i])) : :(a[$i][$(broadcasted_index(sizes[i], current_ind))]))
114115
for i = 1:length(sizes)
115116
]
116117
exprs[j] = :(f($(exprs_vals...)))
@@ -139,7 +140,7 @@ end
139140
exprs = similar(indices, Expr)
140141
for (j, current_ind) enumerate(indices)
141142
exprs_vals = [
142-
(!(as[i] <: AbstractArray) ? :(as[$i][]) : :(as[$i][$(broadcasted_index(sizes[i], current_ind))]))
143+
(!(as[i] <: AbstractArray || as[i] <: Tuple) ? :(as[$i][]) : :(as[$i][$(broadcasted_index(sizes[i], current_ind))]))
143144
for i = 1:length(sizes)
144145
]
145146
exprs[j] = :(dest[$j] = f($(exprs_vals...)))

test/broadcast.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,18 @@ end
213213
foo493(X) = normalize.(X)
214214
@test foo493(X) isa Core.Compiler.return_type(foo493, Tuple{typeof(X)})
215215
end
216+
217+
@testset "broadcasting with tuples" begin
218+
# issue 485
219+
v = SVector(1,2,3)
220+
@test v .+ (10, 20, 30) == SVector(11, 22, 33)
221+
vm = MVector(1,2,3)
222+
vm .+= (10, 20, 30)
223+
@test vm == SVector(11, 22, 33)
224+
@test (1,2) .+ (@SMatrix [10 20; 30 40]) == @SMatrix [11 21; 32 42]
225+
@test (@SMatrix [10 20; 30 40]) .+ (1,2) == @SMatrix [11 21; 32 42]
226+
mm = @MMatrix [10 20; 30 40]
227+
mm .+= (1,2)
228+
@test mm == @SMatrix [11 21; 32 42]
229+
end
216230
end

0 commit comments

Comments
 (0)