Skip to content

Commit 9ea56f1

Browse files
authored
Merge pull request #3792 from jsiirola/ipopt-sol-parser
Update Ipopt interface in `contrib.solver`
2 parents 571bf68 + 88931bf commit 9ea56f1

File tree

16 files changed

+3013
-1106
lines changed

16 files changed

+3013
-1106
lines changed

pyomo/common/tempfiles.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ def __enter__(self):
270270
def __exit__(self, exc_type, exc_val, exc_tb):
271271
self.release()
272272

273-
def mkstemp(self, suffix=None, prefix=None, dir=None, text=False):
273+
def mkstemp(self, suffix=None, prefix=None, dir=None, text=False, delete=True):
274274
"""Create a unique temporary file using :func:`tempfile.mkstemp`
275275
276276
Parameters are handled as in :func:`tempfile.mkstemp`, with
@@ -289,10 +289,11 @@ def mkstemp(self, suffix=None, prefix=None, dir=None, text=False):
289289
dir = self._resolve_tempdir(dir)
290290
# Note: ans == (fd, fname)
291291
ans = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir, text=text)
292-
self.tempfiles.append(ans)
292+
if delete:
293+
self.tempfiles.append(ans)
293294
return ans
294295

295-
def mkdtemp(self, suffix=None, prefix=None, dir=None):
296+
def mkdtemp(self, suffix=None, prefix=None, dir=None, delete=True):
296297
"""Create a unique temporary directory using :func:`tempfile.mkdtemp`
297298
298299
Parameters are handled as in :func:`tempfile.mkdtemp`, with
@@ -307,7 +308,8 @@ def mkdtemp(self, suffix=None, prefix=None, dir=None):
307308
"""
308309
dir = self._resolve_tempdir(dir)
309310
dname = tempfile.mkdtemp(suffix=suffix, prefix=prefix, dir=dir)
310-
self.tempfiles.append((None, dname))
311+
if delete:
312+
self.tempfiles.append((None, dname))
311313
return dname
312314

313315
def gettempdir(self):

pyomo/common/tests/test_tempfile.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,32 @@ def test_mkstemp(self):
284284
os.close(fd)
285285
context.release()
286286

287+
def test_mktemp_delete(self):
288+
with self.TM.new_context() as context:
289+
dname = context.mkdtemp()
290+
with self.TM.new_context() as subcontext:
291+
fd, fname1 = subcontext.mkstemp(dir=dname)
292+
fd, fname2 = subcontext.mkstemp(dir=dname, delete=False)
293+
# Note: because the context manager isn't going to
294+
# delete fname2, we need to explicitly close the file
295+
# here...
296+
os.close(fd)
297+
dname1 = subcontext.mkdtemp(dir=dname)
298+
dname2 = subcontext.mkdtemp(dir=dname, delete=False)
299+
300+
self.assertTrue(os.path.exists(fname1))
301+
self.assertTrue(os.path.exists(fname2))
302+
self.assertTrue(os.path.exists(dname1))
303+
self.assertTrue(os.path.exists(dname2))
304+
self.assertFalse(os.path.exists(fname1))
305+
self.assertTrue(os.path.exists(fname2))
306+
self.assertFalse(os.path.exists(dname1))
307+
self.assertTrue(os.path.exists(dname2))
308+
self.assertFalse(os.path.exists(fname1))
309+
self.assertFalse(os.path.exists(fname2))
310+
self.assertFalse(os.path.exists(dname1))
311+
self.assertFalse(os.path.exists(dname2))
312+
287313
def test_create_tempdir(self):
288314
context = self.TM.push()
289315
fname = self.TM.create_tempdir("suffix", "prefix")

pyomo/contrib/solver/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,10 @@
3737
version='6.9.2',
3838
)
3939

40+
moved_module(
41+
'pyomo.contrib.solver.solvers.sol_reader',
42+
'pyomo.contrib.solver.solvers.asl_sol_reader',
43+
version='6.10.0.dev0',
44+
)
45+
4046
del _module, moved_module

pyomo/contrib/solver/common/results.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ class SolutionStatus(enum.Enum):
112112
solutions was returned.
113113
"""
114114

115+
unknown = 5
116+
"Solution returned, but feasibility/optimality unknown."
117+
115118
infeasible = 10
116119
"Solution point does not satisfy some domains and/or constraints."
117120

pyomo/contrib/solver/common/util.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
from pyomo.core.base.objective import Objective
1616

1717

18+
class SolverError(PyomoException):
19+
"""General error raised by Pyomo solver interfaces when processing
20+
Solver results."""
21+
22+
1823
class NoFeasibleSolutionError(PyomoException):
1924
default_message = (
2025
'A feasible solution was not found, so no solution can be loaded. '

0 commit comments

Comments
 (0)