@@ -105,30 +105,15 @@ scalar_getindex(x::Tuple{<: Any}) = x[1]
105
105
end
106
106
end
107
107
108
- exprs = Array {Expr} (undef, newsize)
109
- more = prod (newsize) > 0
110
- current_ind = ones (Int, length (newsize))
111
108
sizes = [sz. parameters[1 ] for sz ∈ s. parameters]
112
-
113
- while more
114
- exprs_vals = [(! (a[i] <: AbstractArray ) ? :(scalar_getindex (a[$ i])) : :(a[$ i][$ (broadcasted_index (sizes[i], current_ind))])) for i = 1 : length (sizes)]
115
- exprs[current_ind... ] = :(f ($ (exprs_vals... )))
116
-
117
- # increment current_ind (maybe use CartesianIndices?)
118
- current_ind[1 ] += 1
119
- for i ∈ 1 : length (newsize)
120
- if current_ind[i] > newsize[i]
121
- if i == length (newsize)
122
- more = false
123
- break
124
- else
125
- current_ind[i] = 1
126
- current_ind[i+ 1 ] += 1
127
- end
128
- else
129
- break
130
- end
131
- end
109
+ indices = CartesianIndices (newsize)
110
+ exprs = similar (indices, Expr)
111
+ for (j, current_ind) ∈ enumerate (indices)
112
+ exprs_vals = [
113
+ (! (a[i] <: AbstractArray ) ? :(scalar_getindex (a[$ i])) : :(a[$ i][$ (broadcasted_index (sizes[i], current_ind))]))
114
+ for i = 1 : length (sizes)
115
+ ]
116
+ exprs[j] = :(f ($ (exprs_vals... )))
132
117
end
133
118
134
119
return quote
@@ -150,39 +135,14 @@ end
150
135
sizematch (Size {newsize} (), Size (dest)) ||
151
136
throw (DimensionMismatch (" Tried to broadcast to destination sized $newsize from inputs sized $sizes " ))
152
137
153
- ndims = 0
154
- for i = 1 : length (sizes)
155
- ndims = max (ndims, length (sizes[i]))
156
- end
157
-
158
- exprs = Array {Expr} (undef, newsize)
159
- j = 1
160
- more = prod (newsize) > 0
161
- current_ind = ones (Int, max (length (newsize), length .(sizes)... ))
162
- while more
163
- exprs_vals = [(! (as[i] <: AbstractArray ) ? :(as[$ i][]) : :(as[$ i][$ (broadcasted_index (sizes[i], current_ind))])) for i = 1 : length (sizes)]
164
- exprs[current_ind... ] = :(dest[$ j] = f ($ (exprs_vals... )))
165
-
166
- # increment current_ind (maybe use CartesianIndices?)
167
- if length (current_ind) >= 1
168
- current_ind[1 ] += 1
169
- for i ∈ 1 : length (newsize)
170
- if current_ind[i] > newsize[i]
171
- if i == length (newsize)
172
- more = false
173
- break
174
- else
175
- current_ind[i] = 1
176
- current_ind[i+ 1 ] += 1
177
- end
178
- else
179
- break
180
- end
181
- end
182
- else
183
- break
184
- end
185
- j += 1
138
+ indices = CartesianIndices (newsize)
139
+ exprs = similar (indices, Expr)
140
+ for (j, current_ind) ∈ enumerate (indices)
141
+ exprs_vals = [
142
+ (! (as[i] <: AbstractArray ) ? :(as[$ i][]) : :(as[$ i][$ (broadcasted_index (sizes[i], current_ind))]))
143
+ for i = 1 : length (sizes)
144
+ ]
145
+ exprs[j] = :(dest[$ j] = f ($ (exprs_vals... )))
186
146
end
187
147
188
148
return quote
0 commit comments