@@ -239,7 +239,8 @@ function extract_function(
239239 continue
240240 end
241241 r = _shift (A. rowval[idx], _indexing (A), OneBasedIndexing ())
242- if r == row
242+ # `modify_coefficients` can create zeros
243+ if r == row && ! iszero (A. nzval[idx])
243244 push! (
244245 func. terms,
245246 MOI. ScalarAffineTerm (A. nzval[idx], MOI. VariableIndex (col)),
@@ -266,10 +267,14 @@ function _extract_column_as_function(
266267 func = MOI. ScalarAffineFunction (MOI. ScalarAffineTerm{T}[], constant)
267268 for i in SparseArrays. nzrange (A, col)
268269 row = _shift (A. rowval[i], _indexing (A), OneBasedIndexing ())
269- push! (
270- func. terms,
271- MOI. ScalarAffineTerm (value_map (A. nzval[i]), MOI. VariableIndex (row)),
272- )
270+ val = value_map (A. nzval[i])
271+ # `modify_coefficients` can create zeros
272+ if ! iszero (val)
273+ push! (
274+ func. terms,
275+ MOI. ScalarAffineTerm (val, MOI. VariableIndex (row)),
276+ )
277+ end
273278 end
274279 return func
275280end
@@ -293,16 +298,19 @@ function extract_function(
293298 if row != rows[output_index]
294299 continue
295300 end
296- push! (
297- func. terms,
298- MOI. VectorAffineTerm (
299- output_index,
300- MOI. ScalarAffineTerm (
301- A. nzval[idx[col]],
302- MOI. VariableIndex (col),
301+ # `modify_coefficients` can create zeros
302+ if ! iszero (A. nzval[idx[col]])
303+ push! (
304+ func. terms,
305+ MOI. VectorAffineTerm (
306+ output_index,
307+ MOI. ScalarAffineTerm (
308+ A. nzval[idx[col]],
309+ MOI. VariableIndex (col),
310+ ),
303311 ),
304- ),
305- )
312+ )
313+ end
306314 idx[col] += 1
307315 end
308316 end
0 commit comments