From 358a0b94c3242614b8ba25e286d9307384e7ae08 Mon Sep 17 00:00:00 2001 From: Igor Banfi Date: Fri, 24 Nov 2023 15:51:23 +0100 Subject: [PATCH 1/3] freeTransform recreates _modelvars --- src/pyscipopt/scip.pxi | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/pyscipopt/scip.pxi b/src/pyscipopt/scip.pxi index 874b2c9e3..8b6fc259f 100644 --- a/src/pyscipopt/scip.pxi +++ b/src/pyscipopt/scip.pxi @@ -1072,6 +1072,8 @@ cdef class Model: def freeTransform(self): """Frees all solution process data including presolving and transformed problem, only original problem is kept""" PY_SCIP_CALL(SCIPfreeTransform(self._scip)) + self._modelvars = {} + self.getVars() def version(self): """Retrieve SCIP version""" From 54a72c700026a70817101a1e460545146deb0d6d Mon Sep 17 00:00:00 2001 From: Igor Banfi Date: Mon, 27 Nov 2023 08:51:15 +0100 Subject: [PATCH 2/3] Removing non-original variables from _modelvars before freeTransform --- src/pyscipopt/scip.pxi | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pyscipopt/scip.pxi b/src/pyscipopt/scip.pxi index 8b6fc259f..b28f498bd 100644 --- a/src/pyscipopt/scip.pxi +++ b/src/pyscipopt/scip.pxi @@ -1071,9 +1071,12 @@ cdef class Model: def freeTransform(self): """Frees all solution process data including presolving and transformed problem, only original problem is kept""" + self._modelvars = { + var: value + for var, value in self._modelvars.items() + if value.isOriginal() + } PY_SCIP_CALL(SCIPfreeTransform(self._scip)) - self._modelvars = {} - self.getVars() def version(self): """Retrieve SCIP version""" From c9c780c92c6f4d12caef1c77b77eafe9778c9dd9 Mon Sep 17 00:00:00 2001 From: Igor Banfi Date: Mon, 27 Nov 2023 16:14:51 +0100 Subject: [PATCH 3/3] Added freeTransform check into test_cuttingstock --- tests/test_pricer.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/test_pricer.py b/tests/test_pricer.py index 1b8fd1184..abc5599a2 100644 --- a/tests/test_pricer.py +++ b/tests/test_pricer.py @@ -158,6 +158,11 @@ def test_cuttingstock(): assert type(s.getNSols()) == int assert s.getNSols() == s.data["nSols"] + # Testing freeTransform + s.freeTransform() + for i in range(10): + s.addVar() + def test_incomplete_pricer(): class IncompletePricer(Pricer): pass