diff --git a/Project.toml b/Project.toml index 1db7d5d..e5ef604 100644 --- a/Project.toml +++ b/Project.toml @@ -25,5 +25,5 @@ NLPModelsModifiers = "0.7" QPSReader = "0.2.1" SolverCore = "0.3" SparseArrays = "1.10" -SparseMatricesCOO = "0.2.3" +SparseMatricesCOO = "0.2.4" julia = "1.10" diff --git a/src/presolve/presolve.jl b/src/presolve/presolve.jl index 42e8567..a6f70c9 100644 --- a/src/presolve/presolve.jl +++ b/src/presolve/presolve.jl @@ -287,7 +287,9 @@ function presolve( if !isempty(operations) nconps, nvarps = update_vectors!(qmp) - remove_rowscols_A_H!(psdata.A, psdata.H, qmp, nvarps, nconps) + Anew, Hnew = remove_rowscols_A_H!(psdata.A, psdata.H, qmp, nvarps, nconps) + psdata.A = Anew + psdata.H = Hnew psdata.c0 = qmp.c0 end diff --git a/src/presolve/presolve_utils.jl b/src/presolve/presolve_utils.jl index b16f00a..3585265 100644 --- a/src/presolve/presolve_utils.jl +++ b/src/presolve/presolve_utils.jl @@ -54,7 +54,7 @@ end find_empty_rowscols(v_cnt::Vector{Int}) = findall(isequal(0), v_cnt) find_singleton_rowscols(v_cnt::Vector{Int}) = findall(isequal(1), v_cnt) -function remove_rowscols_A_H!(A, H, qmp::QuadraticModelPresolveData, nvarps, nconps) +function remove_rowscols_A_H!(A::SparseMatrixCOO, H::SparseMatrixCOO, qmp::QuadraticModelPresolveData, nvarps, nconps) Arows, Acols, Avals = A.rows, A.cols, A.vals Hrows, Hcols, Hvals = H.rows, H.cols, H.vals kept_rows, kept_cols = qmp.kept_rows, qmp.kept_cols @@ -118,8 +118,9 @@ function remove_rowscols_A_H!(A, H, qmp::QuadraticModelPresolveData, nvarps, nco resize!(Hcols, Hnnz) resize!(Hvals, Hnnz) end - A.m, A.n = nconps, nvarps - H.m, H.n = nvarps, nvarps + Anew = SparseMatrixCOO(nconps, nvarps, Arows, Acols, Avals) + Hnew = SparseMatrixCOO(nvarps, nvarps, Hrows, Hcols, Hvals) + return Anew, Hnew end function update_vectors!(qmp::QuadraticModelPresolveData)