diff --git a/.coin-or/projDesc.xml b/.coin-or/projDesc.xml
index da977677d1f..073efd968a7 100644
--- a/.coin-or/projDesc.xml
+++ b/.coin-or/projDesc.xml
@@ -227,8 +227,8 @@ Carl D. Laird, Chair, Pyomo Management Committee, claird at andrew dot cmu dot e
Use explicit overrides to disable use of automated
version reporting.
-->
- 6.7.1
- 6.7.1
+ 6.7.2
+ 6.7.2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c06e0f71378..11b4ecbf785 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,81 @@ Pyomo CHANGELOG
===============
+-------------------------------------------------------------------------------
+Pyomo 6.7.2 (9 May 2024)
+-------------------------------------------------------------------------------
+
+- General
+ - Support config domains with either method or attribute domain_name (#3159)
+ - Automate TPL callback registrations (#3167)
+ - Fix type registrations for ExternalFunction arguments (#3168)
+ - Only modify module path and spec for deferred import modules (#3176)
+ - Add "mixed" standard form representation (#3201)
+ - Support "default" dispatchers in `ExitNodeDispatcher` (#3194)
+ - Redefine objective sense as a proper `IntEnum` (#3224)
+ - Fix division-by-0 bug in linear walker (#3246)
+- Core
+ - Allow `Var` objects in `LinearExpression.args` (#3189)
+ - Add type hints to components (#3173)
+ - Simplify expressions generated by `TemplateSumExpression` (#3196)
+ - Make component data public classes (#3221, #3253)
+ - Exploit repeated named expressions in `identify_variables` (#3190)
+- Documentation
+ - NFC: Add link to the HOMOWP companion notebooks (#3195)
+ - Update installation documentation to include Cython instructions (#3208)
+ - Add links to the Pyomo Book Springer page (#3211)
+- Solver Interfaces
+ - Fix division by zero error in linear presolve (#3161)
+ - Subprocess timeout update (#3183)
+ - Solver Refactor - Bug fixes for various components (#3181, #3214, #3228)
+ - NLv2: handle presolved independent linear subsystems (#3193)
+ - Update `LegacySolverWrapper` compatibility with the `pyomo` script (#3202)
+ - Fix mosek_direct to use putqconk instead of putqcon (#3199)
+ - Check _skip_trivial_constraints before the constraint body (#3226)
+ - Fix AMPL solver duplicate funcadd (#3206)
+ - Disable the use of universal newlines in the ipopt_v2 NL file (#3231)
+ - NLv2: fix reporting numbers of nonlinear discrete variables (#3238)
+ - Fix: Get SCIP solving time considering float number with some text (#3234)
+ - Solver Refactor - Add `gurobi_direct` implementation (#3225)
+- Testing
+ - Update TPL package list due to `contrib.solver` (#3164)
+ - Set maxDiff=None on the base TestCase class (#3171)
+ - Testing infrastructure updates (#3175)
+ - Typos update for March 2024 (#3219)
+ - Add openmpi to testing environment to resolve issue in mpi4py (#3236, #3239)
+ - Skip black 24.4.1 due to a bug in the parser (#3247)
+ - Skip tests on draft and WIP pull requests (#3223)
+ - Update GHA to grab gurobipy from PyPI (#3254)
+- GDP
+ - Use private_data for all original / transformed component mappings (#3166)
+ - Fix a bug in gdp.bigm transformation for nested GDPs (#3213)
+- Contributed Packages
+ - APPSI: cmodel: handle non-mutable params in var / constraint bounds (#3182)
+ - APPSI: Allow APPSI FBBT to handle nested named Expressions (#3185)
+ - APPSI: Add MAiNGO solver interface (#3165)
+ - CP: Add SequenceVar and other logical expressions for scheduling (#3227)
+ - DoE: Bug fixes (#3245)
+ - iis: Add minimal intractable system infeasibility diagnostics (#3172)
+ - incidence_analysis: Improve `solve_strongly_connected_components`
+ performance for models with named expressions (#3186)
+ - incidence_analysis: Add function to plot incidence graph in
+ Dulmage-Mendelsohn order (#3207)
+ - incidence_analysis: Require variables and constraints to be specified
+ separately in `IncidenceGraphInterface.remove_nodes` (#3212)
+ - latex_printer: bugfix for set operations / multidimensional sets (#3177)
+ - MindtPy: Add HiGHS support (#2971)
+ - MindtPy: Add call_before_subproblem_solve callback (#3251)
+ - Parmest: New UI using experiment lists (#3160)
+ - piecewise: Add piecewise linear transformations (#3036)
+ - preprocessing: bugfix: intersect domains in variable aggregator (#3241)
+ - PyNumero: Allow CyIpopt to solve problems without objectives (#3163)
+ - PyNumero: Work around bug in CyIpopt 1.4.0 (#3222)
+ - PyNumero: Include "inventory" in readme (#3248)
+ - PyROS: Simplify custom domain validators (#3169)
+ - PyROS: Fix iteration logging for edge case involving discrete sets (#3170)
+ - PyROS: Update solver timing system (#3198)
+ - simplification: expression simplification using GiNaC or SymPy (#3088)
+
-------------------------------------------------------------------------------
Pyomo 6.7.1 (21 Feb 2024)
-------------------------------------------------------------------------------
diff --git a/RELEASE.md b/RELEASE.md
index 9b101e0999a..b0228e53944 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -1,4 +1,4 @@
-We are pleased to announce the release of Pyomo 6.7.1.
+We are pleased to announce the release of Pyomo 6.7.2.
Pyomo is a collection of Python software packages that supports a
diverse set of optimization capabilities for formulating and analyzing
@@ -10,9 +10,14 @@ The following are highlights of the 6.7 release series:
- Removed support for Python 3.7
- New writer for converting linear models to matrix form
- Improved handling of nested GDPs
+ - Redesigned user API for parameter estimation
- New packages:
- - latex_printer (print Pyomo models to a LaTeX compatible format)
+ - iis: new capability for identifying minimal intractable systems
+ - latex_printer: print Pyomo models to a LaTeX compatible format
- contrib.solver: preview of redesigned solver interfaces
+ - simplification: simplify Pyomo expressions
+ - New solver interfaces
+ - MAiNGO: Mixed-integer nonlinear global optimization
- ...and of course numerous minor bug fixes and performance enhancements
A full list of updates and changes is available in the
diff --git a/pyomo/common/dependencies.py b/pyomo/common/dependencies.py
index ea9efe370f7..4c9e43002ef 100644
--- a/pyomo/common/dependencies.py
+++ b/pyomo/common/dependencies.py
@@ -611,7 +611,7 @@ def attempt_import(
want to import/return the first one that is available.
defer_check: bool, optional
- DEPRECATED: renamed to ``defer_import`` (deprecated in version 6.7.2.dev0)
+ DEPRECATED: renamed to ``defer_import`` (deprecated in version 6.7.2)
defer_import: bool, optional
If True, then the attempted import is deferred until the first
@@ -674,7 +674,7 @@ def attempt_import(
if defer_check is not None:
deprecation_warning(
'defer_check=%s is deprecated. Please use defer_import' % (defer_check,),
- version='6.7.2.dev0',
+ version='6.7.2',
)
assert defer_import is None
defer_import = defer_check
@@ -787,7 +787,7 @@ def _perform_import(
@deprecated(
"``declare_deferred_modules_as_importable()`` is deprecated. "
"Use the :py:class:`declare_modules_as_importable` context manager.",
- version='6.7.2.dev0',
+ version='6.7.2',
)
def declare_deferred_modules_as_importable(globals_dict):
"""Make all :py:class:`DeferredImportModules` in ``globals_dict`` importable
diff --git a/pyomo/common/numeric_types.py b/pyomo/common/numeric_types.py
index 8b48c77b5b2..2b63038e125 100644
--- a/pyomo/common/numeric_types.py
+++ b/pyomo/common/numeric_types.py
@@ -64,7 +64,7 @@
relocated_module_attribute(
'pyomo_constant_types',
'pyomo.common.numeric_types._pyomo_constant_types',
- version='6.7.2.dev0',
+ version='6.7.2',
msg="The pyomo_constant_types set will be removed in the future: the set "
"contained only NumericConstant and _PythonCallbackFunctionID, and provided "
"no meaningful value to clients or walkers. Users should likely handle "
diff --git a/pyomo/contrib/incidence_analysis/interface.py b/pyomo/contrib/incidence_analysis/interface.py
index b73ec17f36c..73d9722eb7e 100644
--- a/pyomo/contrib/incidence_analysis/interface.py
+++ b/pyomo/contrib/incidence_analysis/interface.py
@@ -891,9 +891,9 @@ def remove_nodes(self, variables=None, constraints=None):
.. note::
- **Deprecation in Pyomo v6.7.2.dev0**
+ **Deprecation in Pyomo v6.7.2**
- The pre-6.7.2.dev0 implementation of ``remove_nodes`` allowed variables and
+ The pre-6.7.2 implementation of ``remove_nodes`` allowed variables and
constraints to remove to be specified in a single list. This made
error checking difficult, and indeed, if invalid components were
provided, we carried on silently instead of throwing an error or
@@ -923,7 +923,7 @@ def remove_nodes(self, variables=None, constraints=None):
if any(var in self._con_index_map for var in variables) or any(
con in self._var_index_map for con in constraints
):
- deprecation_warning(depr_msg, version="6.7.2.dev0")
+ deprecation_warning(depr_msg, version="6.7.2")
# If we received variables/constraints in the same list, sort them.
# Any unrecognized objects will be caught by _validate_input.
for var in variables:
diff --git a/pyomo/contrib/parmest/parmest.py b/pyomo/contrib/parmest/parmest.py
index 70f9de8b84c..41e7792570b 100644
--- a/pyomo/contrib/parmest/parmest.py
+++ b/pyomo/contrib/parmest/parmest.py
@@ -68,8 +68,6 @@
from pyomo.common.deprecation import deprecated
from pyomo.common.deprecation import deprecation_warning
-DEPRECATION_VERSION = '6.7.2.dev0'
-
parmest_available = numpy_available & pandas_available & scipy_available
inverse_reduced_hessian, inverse_reduced_hessian_available = attempt_import(
@@ -338,7 +336,7 @@ def _deprecated_init(
"You're using the deprecated parmest interface (model_function, "
"data, theta_names). This interface will be removed in a future release, "
"please update to the new parmest interface using experiment lists.",
- version=DEPRECATION_VERSION,
+ version='6.7.2',
)
self.pest_deprecated = _DeprecatedEstimator(
model_function,
@@ -1386,7 +1384,7 @@ def confidence_region_test(
################################
-@deprecated(version=DEPRECATION_VERSION)
+@deprecated(version='6.7.2')
def group_data(data, groupby_column_name, use_mean=None):
"""
Group data by scenario
diff --git a/pyomo/core/base/__init__.py b/pyomo/core/base/__init__.py
index 2b21725d82f..6b295196864 100644
--- a/pyomo/core/base/__init__.py
+++ b/pyomo/core/base/__init__.py
@@ -163,13 +163,13 @@
)
# Historically, only a subset of "private" component data classes were imported here
relocated_module_attribute(
- f'_GeneralVarData', f'pyomo.core.base.VarData', version='6.7.2.dev0'
+ f'_GeneralVarData', f'pyomo.core.base.VarData', version='6.7.2'
)
relocated_module_attribute(
- f'_GeneralBooleanVarData', f'pyomo.core.base.BooleanVarData', version='6.7.2.dev0'
+ f'_GeneralBooleanVarData', f'pyomo.core.base.BooleanVarData', version='6.7.2'
)
relocated_module_attribute(
- f'_ExpressionData', f'pyomo.core.base.NamedExpressionData', version='6.7.2.dev0'
+ f'_ExpressionData', f'pyomo.core.base.NamedExpressionData', version='6.7.2'
)
for _cdata in (
'ConstraintData',
@@ -179,7 +179,7 @@
'ObjectiveData',
):
relocated_module_attribute(
- f'_{_cdata}', f'pyomo.core.base.{_cdata}', version='6.7.2.dev0'
+ f'_{_cdata}', f'pyomo.core.base.{_cdata}', version='6.7.2'
)
del _cdata
del relocated_module_attribute
diff --git a/pyomo/core/base/block.py b/pyomo/core/base/block.py
index 2f5bdf85f6a..653809e0419 100644
--- a/pyomo/core/base/block.py
+++ b/pyomo/core/base/block.py
@@ -1983,7 +1983,7 @@ def private_data(self, scope=None):
class _BlockData(metaclass=RenamedClass):
__renamed__new_class__ = BlockData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register(
diff --git a/pyomo/core/base/boolean_var.py b/pyomo/core/base/boolean_var.py
index 67c06bdacce..db9a41fceda 100644
--- a/pyomo/core/base/boolean_var.py
+++ b/pyomo/core/base/boolean_var.py
@@ -252,12 +252,12 @@ def free(self):
class _BooleanVarData(metaclass=RenamedClass):
__renamed__new_class__ = BooleanVarData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _GeneralBooleanVarData(metaclass=RenamedClass):
__renamed__new_class__ = BooleanVarData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Logical decision variables.")
diff --git a/pyomo/core/base/component.py b/pyomo/core/base/component.py
index d06b85dcdd4..966ce8c0737 100644
--- a/pyomo/core/base/component.py
+++ b/pyomo/core/base/component.py
@@ -477,7 +477,7 @@ def _pprint_base_impl(
class _ComponentBase(metaclass=RenamedClass):
__renamed__new_class__ = ComponentBase
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class Component(ComponentBase):
@@ -663,7 +663,7 @@ def getname(self, fully_qualified=False, name_buffer=None, relative_to=None):
"use of this argument poses risks if the buffer contains "
"names relative to different Blocks in the model hierarchy or "
"a mixture of local and fully_qualified names.",
- version='TODO',
+ version='6.4.1',
)
name_buffer[id(self)] = ans
return ans
@@ -922,7 +922,7 @@ def getname(self, fully_qualified=False, name_buffer=None, relative_to=None):
"use of this argument poses risks if the buffer contains "
"names relative to different Blocks in the model hierarchy or "
"a mixture of local and fully_qualified names.",
- version='TODO',
+ version='6.4.1',
)
if id(self) in name_buffer:
# Return the name if it is in the buffer
diff --git a/pyomo/core/base/connector.py b/pyomo/core/base/connector.py
index e383b52fc11..1363f5abd65 100644
--- a/pyomo/core/base/connector.py
+++ b/pyomo/core/base/connector.py
@@ -107,7 +107,7 @@ def _iter_vars(self):
class _ConnectorData(metaclass=RenamedClass):
__renamed__new_class__ = ConnectorData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register(
diff --git a/pyomo/core/base/constraint.py b/pyomo/core/base/constraint.py
index eb4af76fdc1..e12860991c2 100644
--- a/pyomo/core/base/constraint.py
+++ b/pyomo/core/base/constraint.py
@@ -577,12 +577,12 @@ def slack(self):
class _ConstraintData(metaclass=RenamedClass):
__renamed__new_class__ = ConstraintData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _GeneralConstraintData(metaclass=RenamedClass):
__renamed__new_class__ = ConstraintData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("General constraint expressions.")
diff --git a/pyomo/core/base/expression.py b/pyomo/core/base/expression.py
index 013c388e6e5..a5120759236 100644
--- a/pyomo/core/base/expression.py
+++ b/pyomo/core/base/expression.py
@@ -198,12 +198,12 @@ def __ipow__(self, other):
class _ExpressionData(metaclass=RenamedClass):
__renamed__new_class__ = NamedExpressionData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _GeneralExpressionDataImpl(metaclass=RenamedClass):
__renamed__new_class__ = NamedExpressionData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class ExpressionData(NamedExpressionData, ComponentData):
@@ -231,7 +231,7 @@ def __init__(self, expr=None, component=None):
class _GeneralExpressionData(metaclass=RenamedClass):
__renamed__new_class__ = ExpressionData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register(
diff --git a/pyomo/core/base/logical_constraint.py b/pyomo/core/base/logical_constraint.py
index 9584078307d..cc0780fd9bd 100644
--- a/pyomo/core/base/logical_constraint.py
+++ b/pyomo/core/base/logical_constraint.py
@@ -124,12 +124,12 @@ def get_value(self):
class _LogicalConstraintData(metaclass=RenamedClass):
__renamed__new_class__ = LogicalConstraintData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _GeneralLogicalConstraintData(metaclass=RenamedClass):
__renamed__new_class__ = LogicalConstraintData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("General logical constraints.")
diff --git a/pyomo/core/base/objective.py b/pyomo/core/base/objective.py
index e388d25aab4..f1204f2a09c 100644
--- a/pyomo/core/base/objective.py
+++ b/pyomo/core/base/objective.py
@@ -145,12 +145,12 @@ def set_sense(self, sense):
class _ObjectiveData(metaclass=RenamedClass):
__renamed__new_class__ = ObjectiveData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _GeneralObjectiveData(metaclass=RenamedClass):
__renamed__new_class__ = ObjectiveData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Expressions that are minimized or maximized.")
diff --git a/pyomo/core/base/param.py b/pyomo/core/base/param.py
index 9af6a37de45..45de3286589 100644
--- a/pyomo/core/base/param.py
+++ b/pyomo/core/base/param.py
@@ -254,7 +254,7 @@ def _compute_polynomial_degree(self, result):
class _ParamData(metaclass=RenamedClass):
__renamed__new_class__ = ParamData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register(
diff --git a/pyomo/core/base/piecewise.py b/pyomo/core/base/piecewise.py
index efe500dbfb1..8c5f34d2b53 100644
--- a/pyomo/core/base/piecewise.py
+++ b/pyomo/core/base/piecewise.py
@@ -274,7 +274,7 @@ def __call__(self, x):
class _PiecewiseData(metaclass=RenamedClass):
__renamed__new_class__ = PiecewiseData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _SimpleSinglePiecewise(object):
diff --git a/pyomo/core/base/set.py b/pyomo/core/base/set.py
index b9a2fe72e1d..8b7c2a246d6 100644
--- a/pyomo/core/base/set.py
+++ b/pyomo/core/base/set.py
@@ -1179,12 +1179,12 @@ def __gt__(self, other):
class _SetData(metaclass=RenamedClass):
__renamed__new_class__ = SetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _SetDataBase(metaclass=RenamedClass):
__renamed__new_class__ = SetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _FiniteSetMixin(object):
@@ -1471,7 +1471,7 @@ def pop(self):
class _FiniteSetData(metaclass=RenamedClass):
__renamed__new_class__ = FiniteSetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _ScalarOrderedSetMixin(object):
@@ -1736,7 +1736,7 @@ def ord(self, item):
class _OrderedSetData(metaclass=RenamedClass):
__renamed__new_class__ = OrderedSetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class InsertionOrderSetData(OrderedSetData):
@@ -1775,7 +1775,7 @@ def update(self, values):
class _InsertionOrderSetData(metaclass=RenamedClass):
__renamed__new_class__ = InsertionOrderSetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _SortedSetMixin(object):
@@ -1871,7 +1871,7 @@ def _sort(self):
class _SortedSetData(metaclass=RenamedClass):
__renamed__new_class__ = SortedSetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
############################################################################
@@ -2669,7 +2669,7 @@ def ranges(self):
class _InfiniteRangeSetData(metaclass=RenamedClass):
__renamed__new_class__ = InfiniteRangeSetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class FiniteRangeSetData(
@@ -2782,7 +2782,7 @@ def ord(self, item):
class _FiniteRangeSetData(metaclass=RenamedClass):
__renamed__new_class__ = FiniteRangeSetData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register(
diff --git a/pyomo/core/base/sos.py b/pyomo/core/base/sos.py
index 4a8afb05d71..afd52c111bc 100644
--- a/pyomo/core/base/sos.py
+++ b/pyomo/core/base/sos.py
@@ -103,7 +103,7 @@ def set_items(self, variables, weights):
class _SOSConstraintData(metaclass=RenamedClass):
__renamed__new_class__ = SOSConstraintData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("SOS constraint expressions.")
diff --git a/pyomo/core/base/var.py b/pyomo/core/base/var.py
index 8870fc5b09c..38d1d38a864 100644
--- a/pyomo/core/base/var.py
+++ b/pyomo/core/base/var.py
@@ -572,12 +572,12 @@ def _process_bound(self, val, bound_type):
class _VarData(metaclass=RenamedClass):
__renamed__new_class__ = VarData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
class _GeneralVarData(metaclass=RenamedClass):
__renamed__new_class__ = VarData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Decision variables.")
diff --git a/pyomo/core/expr/numvalue.py b/pyomo/core/expr/numvalue.py
index 3b335bd5fc4..96e2f50b3f8 100644
--- a/pyomo/core/expr/numvalue.py
+++ b/pyomo/core/expr/numvalue.py
@@ -47,7 +47,7 @@
relocated_module_attribute(
'pyomo_constant_types',
'pyomo.common.numeric_types._pyomo_constant_types',
- version='6.7.2.dev0',
+ version='6.7.2',
f_globals=globals(),
msg="The pyomo_constant_types set will be removed in the future: the set "
"contained only NumericConstant and _PythonCallbackFunctionID, and provided "
diff --git a/pyomo/gdp/disjunct.py b/pyomo/gdp/disjunct.py
index 658ead27783..637f55cbed1 100644
--- a/pyomo/gdp/disjunct.py
+++ b/pyomo/gdp/disjunct.py
@@ -450,7 +450,7 @@ def _activate_without_unfixing_indicator(self):
class _DisjunctData(metaclass=RenamedClass):
__renamed__new_class__ = DisjunctData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Disjunctive blocks.")
@@ -627,7 +627,7 @@ def set_value(self, expr):
class _DisjunctionData(metaclass=RenamedClass):
__renamed__new_class__ = DisjunctionData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Disjunction expressions.")
diff --git a/pyomo/mpec/complementarity.py b/pyomo/mpec/complementarity.py
index aa8db922145..26968ef9fca 100644
--- a/pyomo/mpec/complementarity.py
+++ b/pyomo/mpec/complementarity.py
@@ -181,7 +181,7 @@ def set_value(self, cc):
class _ComplementarityData(metaclass=RenamedClass):
__renamed__new_class__ = ComplementarityData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Complementarity conditions.")
diff --git a/pyomo/network/arc.py b/pyomo/network/arc.py
index 5e68f181a38..f2597b4c1bd 100644
--- a/pyomo/network/arc.py
+++ b/pyomo/network/arc.py
@@ -248,7 +248,7 @@ def _validate_ports(self, source, destination, ports):
class _ArcData(metaclass=RenamedClass):
__renamed__new_class__ = ArcData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register("Component used for connecting two Ports.")
diff --git a/pyomo/network/port.py b/pyomo/network/port.py
index ee5c915d8db..f6706dce644 100644
--- a/pyomo/network/port.py
+++ b/pyomo/network/port.py
@@ -287,7 +287,7 @@ def get_split_fraction(self, arc):
class _PortData(metaclass=RenamedClass):
__renamed__new_class__ = PortData
- __renamed__version__ = '6.7.2.dev0'
+ __renamed__version__ = '6.7.2'
@ModelComponentFactory.register(
diff --git a/pyomo/version/info.py b/pyomo/version/info.py
index de2efe83fb6..b3538ad5868 100644
--- a/pyomo/version/info.py
+++ b/pyomo/version/info.py
@@ -27,8 +27,8 @@
major = 6
minor = 7
micro = 2
-releaselevel = 'invalid'
-# releaselevel = 'final'
+# releaselevel = 'invalid'
+releaselevel = 'final'
serial = 0
if releaselevel == 'final':
diff --git a/setup.py b/setup.py
index a125b02b2fe..2e8cf1d5095 100644
--- a/setup.py
+++ b/setup.py
@@ -256,7 +256,7 @@ def __ne__(self, other):
'sphinx-toolbox>=2.16.0',
'sphinx-jinja2-compat>=0.1.1',
'enum_tools',
- 'numpy', # Needed by autodoc for pynumero
+ 'numpy<2.0.0', # Needed by autodoc for pynumero
'scipy', # Needed by autodoc for pynumero
],
'optional': [
@@ -271,7 +271,7 @@ def __ne__(self, other):
# installed on python 3.8
'networkx<3.2; python_version<"3.9"',
'networkx; python_version>="3.9"',
- 'numpy',
+ 'numpy<2.0.0',
'openpyxl', # dataportals
#'pathos', # requested for #963, but PR currently closed
'pint', # units