Skip to content

Commit 6f0dc65

Browse files
authored
Merge pull request #3256 from blnicho/finalize-release-6.7.2
Finalize 6.7.2 release
2 parents c0fd062 + 28c158c commit 6f0dc65

28 files changed

+136
-58
lines changed

.coin-or/projDesc.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ Carl D. Laird, Chair, Pyomo Management Committee, claird at andrew dot cmu dot e
227227
Use explicit overrides to disable use of automated
228228
version reporting.
229229
-->
230-
<stableVersionNumber>6.7.1</stableVersionNumber>
231-
<releaseNumber>6.7.1</releaseNumber>
230+
<stableVersionNumber>6.7.2</stableVersionNumber>
231+
<releaseNumber>6.7.2</releaseNumber>
232232

233233
</developmentStatus>
234234

CHANGELOG.md

+75
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,81 @@ Pyomo CHANGELOG
22
===============
33

44

5+
-------------------------------------------------------------------------------
6+
Pyomo 6.7.2 (9 May 2024)
7+
-------------------------------------------------------------------------------
8+
9+
- General
10+
- Support config domains with either method or attribute domain_name (#3159)
11+
- Automate TPL callback registrations (#3167)
12+
- Fix type registrations for ExternalFunction arguments (#3168)
13+
- Only modify module path and spec for deferred import modules (#3176)
14+
- Add "mixed" standard form representation (#3201)
15+
- Support "default" dispatchers in `ExitNodeDispatcher` (#3194)
16+
- Redefine objective sense as a proper `IntEnum` (#3224)
17+
- Fix division-by-0 bug in linear walker (#3246)
18+
- Core
19+
- Allow `Var` objects in `LinearExpression.args` (#3189)
20+
- Add type hints to components (#3173)
21+
- Simplify expressions generated by `TemplateSumExpression` (#3196)
22+
- Make component data public classes (#3221, #3253)
23+
- Exploit repeated named expressions in `identify_variables` (#3190)
24+
- Documentation
25+
- NFC: Add link to the HOMOWP companion notebooks (#3195)
26+
- Update installation documentation to include Cython instructions (#3208)
27+
- Add links to the Pyomo Book Springer page (#3211)
28+
- Solver Interfaces
29+
- Fix division by zero error in linear presolve (#3161)
30+
- Subprocess timeout update (#3183)
31+
- Solver Refactor - Bug fixes for various components (#3181, #3214, #3228)
32+
- NLv2: handle presolved independent linear subsystems (#3193)
33+
- Update `LegacySolverWrapper` compatibility with the `pyomo` script (#3202)
34+
- Fix mosek_direct to use putqconk instead of putqcon (#3199)
35+
- Check _skip_trivial_constraints before the constraint body (#3226)
36+
- Fix AMPL solver duplicate funcadd (#3206)
37+
- Disable the use of universal newlines in the ipopt_v2 NL file (#3231)
38+
- NLv2: fix reporting numbers of nonlinear discrete variables (#3238)
39+
- Fix: Get SCIP solving time considering float number with some text (#3234)
40+
- Solver Refactor - Add `gurobi_direct` implementation (#3225)
41+
- Testing
42+
- Update TPL package list due to `contrib.solver` (#3164)
43+
- Set maxDiff=None on the base TestCase class (#3171)
44+
- Testing infrastructure updates (#3175)
45+
- Typos update for March 2024 (#3219)
46+
- Add openmpi to testing environment to resolve issue in mpi4py (#3236, #3239)
47+
- Skip black 24.4.1 due to a bug in the parser (#3247)
48+
- Skip tests on draft and WIP pull requests (#3223)
49+
- Update GHA to grab gurobipy from PyPI (#3254)
50+
- GDP
51+
- Use private_data for all original / transformed component mappings (#3166)
52+
- Fix a bug in gdp.bigm transformation for nested GDPs (#3213)
53+
- Contributed Packages
54+
- APPSI: cmodel: handle non-mutable params in var / constraint bounds (#3182)
55+
- APPSI: Allow APPSI FBBT to handle nested named Expressions (#3185)
56+
- APPSI: Add MAiNGO solver interface (#3165)
57+
- CP: Add SequenceVar and other logical expressions for scheduling (#3227)
58+
- DoE: Bug fixes (#3245)
59+
- iis: Add minimal intractable system infeasibility diagnostics (#3172)
60+
- incidence_analysis: Improve `solve_strongly_connected_components`
61+
performance for models with named expressions (#3186)
62+
- incidence_analysis: Add function to plot incidence graph in
63+
Dulmage-Mendelsohn order (#3207)
64+
- incidence_analysis: Require variables and constraints to be specified
65+
separately in `IncidenceGraphInterface.remove_nodes` (#3212)
66+
- latex_printer: bugfix for set operations / multidimensional sets (#3177)
67+
- MindtPy: Add HiGHS support (#2971)
68+
- MindtPy: Add call_before_subproblem_solve callback (#3251)
69+
- Parmest: New UI using experiment lists (#3160)
70+
- piecewise: Add piecewise linear transformations (#3036)
71+
- preprocessing: bugfix: intersect domains in variable aggregator (#3241)
72+
- PyNumero: Allow CyIpopt to solve problems without objectives (#3163)
73+
- PyNumero: Work around bug in CyIpopt 1.4.0 (#3222)
74+
- PyNumero: Include "inventory" in readme (#3248)
75+
- PyROS: Simplify custom domain validators (#3169)
76+
- PyROS: Fix iteration logging for edge case involving discrete sets (#3170)
77+
- PyROS: Update solver timing system (#3198)
78+
- simplification: expression simplification using GiNaC or SymPy (#3088)
79+
580
-------------------------------------------------------------------------------
681
Pyomo 6.7.1 (21 Feb 2024)
782
-------------------------------------------------------------------------------

RELEASE.md

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
We are pleased to announce the release of Pyomo 6.7.1.
1+
We are pleased to announce the release of Pyomo 6.7.2.
22

33
Pyomo is a collection of Python software packages that supports a
44
diverse set of optimization capabilities for formulating and analyzing
@@ -10,9 +10,14 @@ The following are highlights of the 6.7 release series:
1010
- Removed support for Python 3.7
1111
- New writer for converting linear models to matrix form
1212
- Improved handling of nested GDPs
13+
- Redesigned user API for parameter estimation
1314
- New packages:
14-
- latex_printer (print Pyomo models to a LaTeX compatible format)
15+
- iis: new capability for identifying minimal intractable systems
16+
- latex_printer: print Pyomo models to a LaTeX compatible format
1517
- contrib.solver: preview of redesigned solver interfaces
18+
- simplification: simplify Pyomo expressions
19+
- New solver interfaces
20+
- MAiNGO: Mixed-integer nonlinear global optimization
1621
- ...and of course numerous minor bug fixes and performance enhancements
1722

1823
A full list of updates and changes is available in the

pyomo/common/dependencies.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ def attempt_import(
611611
want to import/return the first one that is available.
612612
613613
defer_check: bool, optional
614-
DEPRECATED: renamed to ``defer_import`` (deprecated in version 6.7.2.dev0)
614+
DEPRECATED: renamed to ``defer_import`` (deprecated in version 6.7.2)
615615
616616
defer_import: bool, optional
617617
If True, then the attempted import is deferred until the first
@@ -674,7 +674,7 @@ def attempt_import(
674674
if defer_check is not None:
675675
deprecation_warning(
676676
'defer_check=%s is deprecated. Please use defer_import' % (defer_check,),
677-
version='6.7.2.dev0',
677+
version='6.7.2',
678678
)
679679
assert defer_import is None
680680
defer_import = defer_check
@@ -787,7 +787,7 @@ def _perform_import(
787787
@deprecated(
788788
"``declare_deferred_modules_as_importable()`` is deprecated. "
789789
"Use the :py:class:`declare_modules_as_importable` context manager.",
790-
version='6.7.2.dev0',
790+
version='6.7.2',
791791
)
792792
def declare_deferred_modules_as_importable(globals_dict):
793793
"""Make all :py:class:`DeferredImportModules` in ``globals_dict`` importable

pyomo/common/numeric_types.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
relocated_module_attribute(
6565
'pyomo_constant_types',
6666
'pyomo.common.numeric_types._pyomo_constant_types',
67-
version='6.7.2.dev0',
67+
version='6.7.2',
6868
msg="The pyomo_constant_types set will be removed in the future: the set "
6969
"contained only NumericConstant and _PythonCallbackFunctionID, and provided "
7070
"no meaningful value to clients or walkers. Users should likely handle "

pyomo/contrib/incidence_analysis/interface.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -891,9 +891,9 @@ def remove_nodes(self, variables=None, constraints=None):
891891
892892
.. note::
893893
894-
**Deprecation in Pyomo v6.7.2.dev0**
894+
**Deprecation in Pyomo v6.7.2**
895895
896-
The pre-6.7.2.dev0 implementation of ``remove_nodes`` allowed variables and
896+
The pre-6.7.2 implementation of ``remove_nodes`` allowed variables and
897897
constraints to remove to be specified in a single list. This made
898898
error checking difficult, and indeed, if invalid components were
899899
provided, we carried on silently instead of throwing an error or
@@ -923,7 +923,7 @@ def remove_nodes(self, variables=None, constraints=None):
923923
if any(var in self._con_index_map for var in variables) or any(
924924
con in self._var_index_map for con in constraints
925925
):
926-
deprecation_warning(depr_msg, version="6.7.2.dev0")
926+
deprecation_warning(depr_msg, version="6.7.2")
927927
# If we received variables/constraints in the same list, sort them.
928928
# Any unrecognized objects will be caught by _validate_input.
929929
for var in variables:

pyomo/contrib/parmest/parmest.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@
6868
from pyomo.common.deprecation import deprecated
6969
from pyomo.common.deprecation import deprecation_warning
7070

71-
DEPRECATION_VERSION = '6.7.2.dev0'
72-
7371
parmest_available = numpy_available & pandas_available & scipy_available
7472

7573
inverse_reduced_hessian, inverse_reduced_hessian_available = attempt_import(
@@ -338,7 +336,7 @@ def _deprecated_init(
338336
"You're using the deprecated parmest interface (model_function, "
339337
"data, theta_names). This interface will be removed in a future release, "
340338
"please update to the new parmest interface using experiment lists.",
341-
version=DEPRECATION_VERSION,
339+
version='6.7.2',
342340
)
343341
self.pest_deprecated = _DeprecatedEstimator(
344342
model_function,
@@ -1386,7 +1384,7 @@ def confidence_region_test(
13861384
################################
13871385

13881386

1389-
@deprecated(version=DEPRECATION_VERSION)
1387+
@deprecated(version='6.7.2')
13901388
def group_data(data, groupby_column_name, use_mean=None):
13911389
"""
13921390
Group data by scenario

pyomo/core/base/__init__.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,13 @@
163163
)
164164
# Historically, only a subset of "private" component data classes were imported here
165165
relocated_module_attribute(
166-
f'_GeneralVarData', f'pyomo.core.base.VarData', version='6.7.2.dev0'
166+
f'_GeneralVarData', f'pyomo.core.base.VarData', version='6.7.2'
167167
)
168168
relocated_module_attribute(
169-
f'_GeneralBooleanVarData', f'pyomo.core.base.BooleanVarData', version='6.7.2.dev0'
169+
f'_GeneralBooleanVarData', f'pyomo.core.base.BooleanVarData', version='6.7.2'
170170
)
171171
relocated_module_attribute(
172-
f'_ExpressionData', f'pyomo.core.base.NamedExpressionData', version='6.7.2.dev0'
172+
f'_ExpressionData', f'pyomo.core.base.NamedExpressionData', version='6.7.2'
173173
)
174174
for _cdata in (
175175
'ConstraintData',
@@ -179,7 +179,7 @@
179179
'ObjectiveData',
180180
):
181181
relocated_module_attribute(
182-
f'_{_cdata}', f'pyomo.core.base.{_cdata}', version='6.7.2.dev0'
182+
f'_{_cdata}', f'pyomo.core.base.{_cdata}', version='6.7.2'
183183
)
184184
del _cdata
185185
del relocated_module_attribute

pyomo/core/base/block.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1983,7 +1983,7 @@ def private_data(self, scope=None):
19831983

19841984
class _BlockData(metaclass=RenamedClass):
19851985
__renamed__new_class__ = BlockData
1986-
__renamed__version__ = '6.7.2.dev0'
1986+
__renamed__version__ = '6.7.2'
19871987

19881988

19891989
@ModelComponentFactory.register(

pyomo/core/base/boolean_var.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,12 @@ def free(self):
252252

253253
class _BooleanVarData(metaclass=RenamedClass):
254254
__renamed__new_class__ = BooleanVarData
255-
__renamed__version__ = '6.7.2.dev0'
255+
__renamed__version__ = '6.7.2'
256256

257257

258258
class _GeneralBooleanVarData(metaclass=RenamedClass):
259259
__renamed__new_class__ = BooleanVarData
260-
__renamed__version__ = '6.7.2.dev0'
260+
__renamed__version__ = '6.7.2'
261261

262262

263263
@ModelComponentFactory.register("Logical decision variables.")

pyomo/core/base/component.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ def _pprint_base_impl(
477477

478478
class _ComponentBase(metaclass=RenamedClass):
479479
__renamed__new_class__ = ComponentBase
480-
__renamed__version__ = '6.7.2.dev0'
480+
__renamed__version__ = '6.7.2'
481481

482482

483483
class Component(ComponentBase):
@@ -663,7 +663,7 @@ def getname(self, fully_qualified=False, name_buffer=None, relative_to=None):
663663
"use of this argument poses risks if the buffer contains "
664664
"names relative to different Blocks in the model hierarchy or "
665665
"a mixture of local and fully_qualified names.",
666-
version='TODO',
666+
version='6.4.1',
667667
)
668668
name_buffer[id(self)] = ans
669669
return ans
@@ -922,7 +922,7 @@ def getname(self, fully_qualified=False, name_buffer=None, relative_to=None):
922922
"use of this argument poses risks if the buffer contains "
923923
"names relative to different Blocks in the model hierarchy or "
924924
"a mixture of local and fully_qualified names.",
925-
version='TODO',
925+
version='6.4.1',
926926
)
927927
if id(self) in name_buffer:
928928
# Return the name if it is in the buffer

pyomo/core/base/connector.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def _iter_vars(self):
107107

108108
class _ConnectorData(metaclass=RenamedClass):
109109
__renamed__new_class__ = ConnectorData
110-
__renamed__version__ = '6.7.2.dev0'
110+
__renamed__version__ = '6.7.2'
111111

112112

113113
@ModelComponentFactory.register(

pyomo/core/base/constraint.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -577,12 +577,12 @@ def slack(self):
577577

578578
class _ConstraintData(metaclass=RenamedClass):
579579
__renamed__new_class__ = ConstraintData
580-
__renamed__version__ = '6.7.2.dev0'
580+
__renamed__version__ = '6.7.2'
581581

582582

583583
class _GeneralConstraintData(metaclass=RenamedClass):
584584
__renamed__new_class__ = ConstraintData
585-
__renamed__version__ = '6.7.2.dev0'
585+
__renamed__version__ = '6.7.2'
586586

587587

588588
@ModelComponentFactory.register("General constraint expressions.")

pyomo/core/base/expression.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,12 @@ def __ipow__(self, other):
198198

199199
class _ExpressionData(metaclass=RenamedClass):
200200
__renamed__new_class__ = NamedExpressionData
201-
__renamed__version__ = '6.7.2.dev0'
201+
__renamed__version__ = '6.7.2'
202202

203203

204204
class _GeneralExpressionDataImpl(metaclass=RenamedClass):
205205
__renamed__new_class__ = NamedExpressionData
206-
__renamed__version__ = '6.7.2.dev0'
206+
__renamed__version__ = '6.7.2'
207207

208208

209209
class ExpressionData(NamedExpressionData, ComponentData):
@@ -231,7 +231,7 @@ def __init__(self, expr=None, component=None):
231231

232232
class _GeneralExpressionData(metaclass=RenamedClass):
233233
__renamed__new_class__ = ExpressionData
234-
__renamed__version__ = '6.7.2.dev0'
234+
__renamed__version__ = '6.7.2'
235235

236236

237237
@ModelComponentFactory.register(

pyomo/core/base/logical_constraint.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,12 @@ def get_value(self):
124124

125125
class _LogicalConstraintData(metaclass=RenamedClass):
126126
__renamed__new_class__ = LogicalConstraintData
127-
__renamed__version__ = '6.7.2.dev0'
127+
__renamed__version__ = '6.7.2'
128128

129129

130130
class _GeneralLogicalConstraintData(metaclass=RenamedClass):
131131
__renamed__new_class__ = LogicalConstraintData
132-
__renamed__version__ = '6.7.2.dev0'
132+
__renamed__version__ = '6.7.2'
133133

134134

135135
@ModelComponentFactory.register("General logical constraints.")

pyomo/core/base/objective.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ def set_sense(self, sense):
145145

146146
class _ObjectiveData(metaclass=RenamedClass):
147147
__renamed__new_class__ = ObjectiveData
148-
__renamed__version__ = '6.7.2.dev0'
148+
__renamed__version__ = '6.7.2'
149149

150150

151151
class _GeneralObjectiveData(metaclass=RenamedClass):
152152
__renamed__new_class__ = ObjectiveData
153-
__renamed__version__ = '6.7.2.dev0'
153+
__renamed__version__ = '6.7.2'
154154

155155

156156
@ModelComponentFactory.register("Expressions that are minimized or maximized.")

pyomo/core/base/param.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ def _compute_polynomial_degree(self, result):
254254

255255
class _ParamData(metaclass=RenamedClass):
256256
__renamed__new_class__ = ParamData
257-
__renamed__version__ = '6.7.2.dev0'
257+
__renamed__version__ = '6.7.2'
258258

259259

260260
@ModelComponentFactory.register(

pyomo/core/base/piecewise.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ def __call__(self, x):
274274

275275
class _PiecewiseData(metaclass=RenamedClass):
276276
__renamed__new_class__ = PiecewiseData
277-
__renamed__version__ = '6.7.2.dev0'
277+
__renamed__version__ = '6.7.2'
278278

279279

280280
class _SimpleSinglePiecewise(object):

0 commit comments

Comments
 (0)