Skip to content

Commit 10a426d

Browse files
committed
Add skipzeros
1 parent e6982d4 commit 10a426d

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

src/build_function.jl

Lines changed: 19 additions & 7 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+
skipzeros = false, parallel=SerialForm())
171171

172172
if multithread isa Bool
173173
@warn("multithraded is deprecated for the parallel argument. See the documentation.")
@@ -207,37 +207,49 @@ function _build_function(target::JuliaTarget, rhss, args...;
207207
for (i, rhsel) enumerate(_rhss)
208208
for (j, rhsel2) enumerate(rhsel)
209209
for (k, rhs) enumerate(rhsel2.nzval)
210-
push!(ip_sys_exprs, :($X[$i][$j].nzval[$k] = $(conv(rhs))))
210+
rhs′ = conv(rhs)
211+
(skipzeros && rhs′ isa Number && iszero(rhs′)) && continue
212+
push!(ip_sys_exprs, :($X[$i][$j].nzval[$k] = $rhs′))
211213
end
212214
end
213215
end
214216
elseif is_array_array_matrix(rhss) # Array of arrays of arrays
215217
for (i, rhsel) enumerate(_rhss)
216218
for (j, rhsel2) enumerate(rhsel)
217219
for (k, rhs) enumerate(rhsel2)
218-
push!(ip_sys_exprs, :($X[$i][$j][$k] = $(conv(rhs))))
220+
rhs′ = conv(rhs)
221+
(skipzeros && rhs′ isa Number && iszero(rhs′)) && continue
222+
push!(ip_sys_exprs, :($X[$i][$j][$k] = $rhs′))
219223
end
220224
end
221225
end
222226
elseif is_array_sparse_matrix(rhss) # Array of sparse matrices
223227
for (i, rhsel) enumerate(_rhss)
224228
for (j, rhs) enumerate(rhsel.nzval)
225-
push!(ip_sys_exprs, :($X[$i].nzval[$j] = $(conv(rhs))))
229+
rhs′ = conv(rhs)
230+
(skipzeros && rhs′ isa Number && iszero(rhs′)) && continue
231+
push!(ip_sys_exprs, :($X[$i].nzval[$j] = $rhs′))
226232
end
227233
end
228234
elseif is_array_matrix(rhss) # Array of arrays
229235
for (i, rhsel) enumerate(_rhss)
230236
for (j, rhs) enumerate(rhsel)
231-
push!(ip_sys_exprs, :($X[$i][$j] = $(conv(rhs))))
237+
rhs′ = conv(rhs)
238+
(skipzeros && rhs′ isa Number && iszero(rhs′)) && continue
239+
push!(ip_sys_exprs, :($X[$i][$j] = $rhs′))
232240
end
233241
end
234242
elseif rhss isa SparseMatrixCSC
235243
for (i, rhs) enumerate(_rhss)
236-
push!(ip_sys_exprs, :($X.nzval[$i] = $(conv(rhs))))
244+
rhs′ = conv(rhs)
245+
(skipzeros && rhs′ isa Number && iszero(rhs′)) && continue
246+
push!(ip_sys_exprs, :($X.nzval[$i] = $rhs′))
237247
end
238248
else
239249
for (i, rhs) enumerate(_rhss)
240-
push!(ip_sys_exprs, :($X[$i] = $(conv(rhs))))
250+
rhs′ = conv(rhs)
251+
(skipzeros && rhs′ isa Number && iszero(rhs′)) && continue
252+
push!(ip_sys_exprs, :($X[$i] = $rhs′))
241253
end
242254
end
243255

src/utils.jl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,3 @@ end
133133
_substitute(expr, ks, vs) = substituter(ks, vs)(expr)
134134

135135
@deprecate substitute_expr!(expr,s) substitute(expr,s)
136-

0 commit comments

Comments
 (0)