Skip to content

Commit e6982d4

Browse files
committed
Use loops
1 parent 8d8b6f9 commit e6982d4

File tree

1 file changed

+35
-10
lines changed

1 file changed

+35
-10
lines changed

src/build_function.jl

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ function _build_function(target::JuliaTarget, rhss, args...;
167167
checkbounds = false, constructor=nothing,
168168
linenumbers = false, multithread=nothing,
169169
headerfun=addheader, outputidxs=nothing,
170-
parallel=SerialForm())
170+
parallel=SerialForm())
171171

172172
if multithread isa Bool
173173
@warn("multithraded is deprecated for the parallel argument. See the documentation.")
@@ -202,18 +202,43 @@ function _build_function(target::JuliaTarget, rhss, args...;
202202
_rhss = rhss
203203
end
204204

205-
if is_array_array_sparse_matrix(rhss) # Array of arrays of sparse matrices
206-
ip_sys_exprs = reduce(vcat,[vec(reduce(vcat,[vec([:($X[$i][$j].nzval[$k] = $(conv(rhs))) for (k, rhs) enumerate(rhsel2.nzval)]) for (j, rhsel2) enumerate(rhsel)], init=Expr[])) for (i,rhsel) enumerate(_rhss)],init=Expr[])
207-
elseif is_array_array_matrix(rhss) # Array of arrays of arrays
208-
ip_sys_exprs = reduce(vcat,[vec(reduce(vcat,[vec([:($X[$i][$j][$k] = $(conv(rhs))) for (k, rhs) enumerate(rhsel2)]) for (j, rhsel2) enumerate(rhsel)], init=Expr[])) for (i,rhsel) enumerate(_rhss)], init=Expr[])
209-
elseif is_array_sparse_matrix(rhss) # Array of sparse matrices
210-
ip_sys_exprs = reduce(vcat,[vec([:($X[$i].nzval[$j] = $(conv(rhs))) for (j, rhs) enumerate(rhsel.nzval)]) for (i,rhsel) enumerate(_rhss)], init=Expr[])
205+
ip_sys_exprs = Expr[]
206+
if is_array_array_sparse_matrix(rhss) # Array of arrays of sparse matrices
207+
for (i, rhsel) enumerate(_rhss)
208+
for (j, rhsel2) enumerate(rhsel)
209+
for (k, rhs) enumerate(rhsel2.nzval)
210+
push!(ip_sys_exprs, :($X[$i][$j].nzval[$k] = $(conv(rhs))))
211+
end
212+
end
213+
end
214+
elseif is_array_array_matrix(rhss) # Array of arrays of arrays
215+
for (i, rhsel) enumerate(_rhss)
216+
for (j, rhsel2) enumerate(rhsel)
217+
for (k, rhs) enumerate(rhsel2)
218+
push!(ip_sys_exprs, :($X[$i][$j][$k] = $(conv(rhs))))
219+
end
220+
end
221+
end
222+
elseif is_array_sparse_matrix(rhss) # Array of sparse matrices
223+
for (i, rhsel) enumerate(_rhss)
224+
for (j, rhs) enumerate(rhsel.nzval)
225+
push!(ip_sys_exprs, :($X[$i].nzval[$j] = $(conv(rhs))))
226+
end
227+
end
211228
elseif is_array_matrix(rhss) # Array of arrays
212-
ip_sys_exprs = reduce(vcat,[vec([:($X[$i][$j] = $(conv(rhs))) for (j, rhs) enumerate(rhsel)]) for (i,rhsel) enumerate(_rhss)], init=Expr[])
229+
for (i, rhsel) enumerate(_rhss)
230+
for (j, rhs) enumerate(rhsel)
231+
push!(ip_sys_exprs, :($X[$i][$j] = $(conv(rhs))))
232+
end
233+
end
213234
elseif rhss isa SparseMatrixCSC
214-
ip_sys_exprs = [:($X.nzval[$i] = $(conv(rhs))) for (i, rhs) enumerate(_rhss)]
235+
for (i, rhs) enumerate(_rhss)
236+
push!(ip_sys_exprs, :($X.nzval[$i] = $(conv(rhs))))
237+
end
215238
else
216-
ip_sys_exprs = [:($X[$(oidx(i))] = $(conv(rhs))) for (i, rhs) enumerate(_rhss)]
239+
for (i, rhs) enumerate(_rhss)
240+
push!(ip_sys_exprs, :($X[$i] = $(conv(rhs))))
241+
end
217242
end
218243

219244
ip_let_expr = Expr(:let, var_eqs, build_expr(:block, ip_sys_exprs))

0 commit comments

Comments
 (0)