Skip to content

Commit a3a0f7d

Browse files
authored
Merge pull request #3555 from mrmundt/remove-legacy-warning
Remove loud deprecation warning in `contrib.solver`
2 parents d2dc334 + e247d90 commit a3a0f7d

File tree

3 files changed

+38
-22
lines changed

3 files changed

+38
-22
lines changed

Diff for: doc/OnlineDocs/explanation/experimental/solvers.rst

+34-5
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ be used with other Pyomo tools / capabilities.
8585
:skipif: not ipopt_available
8686
:hide:
8787

88-
...
8988
2 Var Declarations
9089
...
9190
3 Declarations: x y obj
@@ -117,7 +116,6 @@ future methods of specifying solver options are supported:
117116
:skipif: not ipopt_available
118117
:hide:
119118

120-
...
121119
2 Var Declarations
122120
...
123121
3 Declarations: x y obj
@@ -154,7 +152,7 @@ Here we use the new interface by importing it directly:
154152
:skipif: not ipopt_available
155153
:hide:
156154

157-
solution_loader: ...
155+
termination_condition: ...
158156
...
159157
3 Declarations: x y obj
160158

@@ -190,7 +188,7 @@ Here we use the new interface by retrieving it from the new ``SolverFactory``:
190188
:skipif: not ipopt_available
191189
:hide:
192190

193-
solution_loader: ...
191+
termination_condition: ...
194192
...
195193
3 Declarations: x y obj
196194

@@ -227,7 +225,7 @@ replace the existing (legacy) SolverFactory and utilities with the new
227225
:skipif: not ipopt_available
228226
:hide:
229227

230-
solution_loader: ...
228+
termination_condition: ...
231229
...
232230
3 Declarations: x y obj
233231

@@ -313,6 +311,37 @@ which can be manipulated similar to a standard ``dict`` in Python.
313311
:members:
314312
:undoc-members:
315313

314+
The new interface has condensed :py:class:`~pyomo.opt.results.solver.SolverStatus`,
315+
:py:class:`~pyomo.opt.results.solver.TerminationCondition`,
316+
and :py:class:`~pyomo.opt.results.solution.SolutionStatus` into
317+
:py:class:`~pyomo.contrib.solver.common.results.TerminationCondition`
318+
and :py:class:`~pyomo.contrib.solver.common.results.SolutionStatus` to
319+
reduce complexity. As a result, several legacy
320+
:py:class:`~pyomo.opt.results.solver.SolutionStatus` values are
321+
no longer achievable. These are detailed in the table below.
322+
323+
.. list-table:: Mapping from unachievable :py:class:`~pyomo.opt.results.solver.SolutionStatus`
324+
to future statuses
325+
:header-rows: 1
326+
327+
* - Legacy :py:class:`~pyomo.opt.results.solver.SolutionStatus`
328+
- :py:class:`~pyomo.contrib.solver.common.results.TerminationCondition`
329+
- :py:class:`~pyomo.contrib.solver.common.results.SolutionStatus`
330+
* - other
331+
- unknown
332+
- noSolution
333+
* - unsure
334+
- unknown
335+
- noSolution
336+
* - locallyOptimal
337+
- convergenceCriteriaSatisfied
338+
- optimal
339+
* - globallyOptimal
340+
- convergenceCriteriaSatisfied
341+
- optimal
342+
* - bestSoFar
343+
- convergenceCriteriaSatisfied
344+
- feasible
316345

317346
Termination Conditions
318347
^^^^^^^^^^^^^^^^^^^^^^

Diff for: pyomo/contrib/solver/common/results.py

+3-15
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
In,
2222
NonNegativeFloat,
2323
ADVANCED_OPTION,
24+
DEVELOPER_OPTION,
2425
)
25-
from pyomo.common.deprecation import deprecation_warning
2626
from pyomo.opt.results.solution import SolutionStatus as LegacySolutionStatus
2727
from pyomo.opt.results.solver import (
2828
TerminationCondition as LegacyTerminationCondition,
@@ -144,7 +144,8 @@ def __init__(
144144
self.solution_loader = self.declare(
145145
'solution_loader',
146146
ConfigValue(
147-
description="Object for loading the solution back into the model."
147+
description="Object for loading the solution back into the model.",
148+
visibility=DEVELOPER_OPTION,
148149
),
149150
)
150151
self.termination_condition: TerminationCondition = self.declare(
@@ -293,19 +294,6 @@ def legacy_solution_status_map(results):
293294
objects. Because we condensed results objects, some of the previous statuses
294295
are no longer clearly achievable.
295296
"""
296-
deprecation_warning(
297-
"""The new interface has condensed LegacySolverStatus,
298-
LegacyTerminationCondition, and LegacySolutionStatus into TerminationCondition
299-
and SolutionStatus to reduce complexity. As a result, several LegacySolutionStatus values
300-
are no longer achievable:
301-
- `LegacySolutionStatus.other` -> `TerminationCondition.unknown`, `SolutionStatus.noSolution`
302-
- `LegacySolutionStatus.unsure` -> `TerminationCondition.unknown`, `SolutionStatus.noSolution`
303-
- `LegacySolutionStatus.locallyOptimal` -> `TerminationCondition.convergenceCriteriaSatisfied`, `SolutionStatus.optimal`
304-
- `LegacySolutionStatus.globallyOptimal` -> `TerminationCondition.convergenceCriteriaSatisfied`, `SolutionStatus.optimal`
305-
- `LegacySolutionStatus.bestSoFar` -> `TerminationCondition.convergenceCriteriaSatisfied`, `SolutionStatus.feasible`
306-
""",
307-
version='6.9.1.dev0',
308-
)
309297
if results.termination_condition in set(
310298
[
311299
TerminationCondition.maxTimeLimit,

Diff for: pyomo/contrib/solver/tests/unit/test_results.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,7 @@ def test_display(self):
192192
res = results.Results()
193193
stream = StringIO()
194194
res.display(ostream=stream)
195-
expected_print = """solution_loader: None
196-
termination_condition: TerminationCondition.unknown
195+
expected_print = """termination_condition: TerminationCondition.unknown
197196
solution_status: SolutionStatus.noSolution
198197
incumbent_objective: None
199198
objective_bound: None

0 commit comments

Comments
 (0)