Skip to content
This repository was archived by the owner on May 4, 2019. It is now read-only.

Commit 5756902

Browse files
committed
Make broadcast work for scalar Strings
1 parent ed30192 commit 5756902

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

src/broadcast.jl

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,11 @@ Base.map!{F}(f::F, B::Union{DataArray, PooledDataArray}, A0, As...) =
116116
As[k] <: DataArray ? quote
117117
$(Symbol("state_$(k)_")){d-1} = $(Symbol("state_$(k)_d"));
118118
$(Symbol("j_$(k)_d")) = $(Symbol("skip_$(k)_d")) ? 1 : i_d
119-
end : quote
119+
end : (As[k] <: AbstractArray ? quote
120120
$(Symbol("j_$(k)_d")) = size($(Symbol("A_$(k)")), d) == 1 ? 1 : i_d
121-
end
121+
end : quote
122+
$(Symbol("j_$(k)_d")) = 1
123+
end)
122124
for k = 1:N]...))),
123125

124126
# post
@@ -138,10 +140,16 @@ Base.map!{F}(f::F, B::Union{DataArray, PooledDataArray}, A0, As...) =
138140
end : nothing
139141
for k = 1:N]...))
140142

141-
# Extract values for ordinary AbstractArrays
143+
# Extract values for other type
142144
$(Expr(:block, [
143-
:(@inbounds $(Symbol("v_$(k)")) = @nref $nd $(Symbol("A_$(k)")) d->$(Symbol("j_$(k)_d")))
144-
for k = find(t -> !(t <: DataArray || t <: PooledDataArray), As)]...))
145+
As[k] <: AbstractArray && !(As[k] <: Union{DataArray, PooledDataArray}) ? quote
146+
# ordinary AbstractArrays
147+
@inbounds $(Symbol("v_$(k)")) = @nref $nd $(Symbol("A_$(k)")) d->$(Symbol("j_$(k)_d"))
148+
end : quote
149+
# non AbstractArrays (e.g. Strings and Numbers)
150+
@inbounds $(Symbol("v_$(k)")) = $(Symbol("A_$(k)"))
151+
end
152+
for k = 1:N]...))
145153

146154
# Compute and store return value
147155
$(gen_na_conds(F, nd, As, B))

test/broadcast.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ rt = Base.return_types(broadcast, (typeof(+), Array{Float64, 3}, DataArray{Int,
113113
rt = Base.return_types(broadcast!, (typeof(+), DataArray{Float64, 3}, Array{Float64, 3}, Array{Int, 1}))
114114
@test length(rt) == 1 && rt[1] == DataArray{Float64, 3}
115115

116+
# Test String broadcast
117+
@test broadcast(==, @data(["a", "b", "c", "d"]), "a") == @data([true,false,false,false])
118+
116119
# Test broadcasting of functions that do something besides propagate NA
117120
@test isequal(broadcast(isequal, @data([NA, 1]), @data([NA 1])), @data([true false; false true]))
118121
@test isequal(broadcast(isequal, @pdata([NA, 1]), @data([NA 1])), @data([true false; false true]))

0 commit comments

Comments
 (0)