From 22ee3c76e9974960e156f567b332ddf6746c6021 Mon Sep 17 00:00:00 2001 From: Bethany Nicholson Date: Wed, 8 May 2024 10:57:24 -0600 Subject: [PATCH 1/8] Updating CHANGELOG in preparation for the 6.7.2 release --- CHANGELOG.md | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c06e0f71378..11a9f4a3020 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,78 @@ Pyomo CHANGELOG =============== +------------------------------------------------------------------------------- +Pyomo 6.7.2 (9 May 2024) +------------------------------------------------------------------------------- + +- General + - Support config domains with either method or attribute domain_name (#3159) + - Update TPL package list due to contrib.solver (#3164) + - 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 - Allow no objective (#3181) + - NLv2: handle presolved independent linear subsystems (#3193) + - Update `LegacySolverWrapper` to be compatible with the `pyomo` script (#3202) + - Fix mosek_direct to use putqconk instead of putqcon (#3199) + - Solver Refactor - Bug fixes for IDAES Integration (#3214) + - Check _skip_trivial_constraints before the constraint body (#3226) + - Fix AMPL solver duplicate funcadd (#3206) + - Solver Refactor - Fix bugs in setting `name` and `solutions` attributes (#3228) + - 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 + - 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 work around 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 mappings between original and transformed components (#3166) + - Fix a bug in gdp.bigm transformation for nested GDPs (#3213) +- Contributed Packages + - APPSI: Allow cmodel to handle non-mutable params in var and constraint bounds (#3182) + - APPSI: Allow APPSI FBBT to handle nested named Expressions (#3185) + - APPSI: Add MAiNGO solver interface (#3165) + - DoE: Bug fixes (#3245) + - incidence_analysis: Improve performance of `solve_strongly_connected_components` 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: Resolve errors 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) + - preprocessing: Fix bug where variable aggregator did not intersect domains (#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) + ------------------------------------------------------------------------------- Pyomo 6.7.1 (21 Feb 2024) ------------------------------------------------------------------------------- From 3bfa3bd1e8b1610217052fdf48cf4ff63a9b5f1f Mon Sep 17 00:00:00 2001 From: Bethany Nicholson Date: Wed, 8 May 2024 10:57:58 -0600 Subject: [PATCH 2/8] Pinning to numpy<2.0.0 for the release --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 70c1626a650..8817649ecc2 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 From 1d1f131b940e00a351fae66f8ad9260f9029084c Mon Sep 17 00:00:00 2001 From: Bethany Nicholson Date: Wed, 8 May 2024 11:01:22 -0600 Subject: [PATCH 3/8] More updates to the CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11a9f4a3020..683551ba03a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ Pyomo 6.7.2 (9 May 2024) - APPSI: Allow cmodel to handle non-mutable params in var and 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) - incidence_analysis: Improve performance of `solve_strongly_connected_components` for models with named expressions (#3186) From 38b966298ace3b1b06f73501a8e436f4031a51be Mon Sep 17 00:00:00 2001 From: Miranda Mundt <55767766+mrmundt@users.noreply.github.com> Date: Wed, 8 May 2024 11:13:38 -0600 Subject: [PATCH 4/8] Reorder and merge some items --- CHANGELOG.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 683551ba03a..d61758f7c1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,6 @@ Pyomo 6.7.2 (9 May 2024) - General - Support config domains with either method or attribute domain_name (#3159) - - Update TPL package list due to contrib.solver (#3164) - Automate TPL callback registrations (#3167) - Fix type registrations for ExternalFunction arguments (#3168) - Only modify module path and spec for deferred import modules (#3176) @@ -29,19 +28,18 @@ Pyomo 6.7.2 (9 May 2024) - Solver Interfaces - Fix division by zero error in linear presolve (#3161) - Subprocess timeout update (#3183) - - Solver Refactor - Allow no objective (#3181) + - Solver Refactor - Bug fixes for various components (#3181, #3214, #3228) - NLv2: handle presolved independent linear subsystems (#3193) - Update `LegacySolverWrapper` to be compatible with the `pyomo` script (#3202) - Fix mosek_direct to use putqconk instead of putqcon (#3199) - - Solver Refactor - Bug fixes for IDAES Integration (#3214) - Check _skip_trivial_constraints before the constraint body (#3226) - Fix AMPL solver duplicate funcadd (#3206) - - Solver Refactor - Fix bugs in setting `name` and `solutions` attributes (#3228) - 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) @@ -64,7 +62,7 @@ Pyomo 6.7.2 (9 May 2024) - incidence_analysis: Require variables and constraints to be specified separately in `IncidenceGraphInterface.remove_nodes` (#3212) - latex_printer: Resolve errors for set operations / multidimensional sets (#3177) - - MindtPy: Add Highs support (#2971) + - MindtPy: Add HiGHS support (#2971) - MindtPy: Add call_before_subproblem_solve callback (#3251) - Parmest: New UI using experiment lists (#3160) - preprocessing: Fix bug where variable aggregator did not intersect domains (#3241) From 3a33d89ff10707c707fc735285afcd8213868f94 Mon Sep 17 00:00:00 2001 From: Bethany Nicholson Date: Wed, 8 May 2024 16:49:53 -0600 Subject: [PATCH 5/8] More edits to the CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d61758f7c1c..954231f9f2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -65,6 +65,7 @@ Pyomo 6.7.2 (9 May 2024) - 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: Fix bug where variable aggregator did not intersect domains (#3241) - PyNumero: Allow CyIpopt to solve problems without objectives (#3163) - PyNumero: Work around bug in CyIpopt 1.4.0 (#3222) From f650f9645b27536e1ea45d36fc15af9b3fbc6f6e Mon Sep 17 00:00:00 2001 From: Bethany Nicholson Date: Thu, 9 May 2024 08:35:51 -0600 Subject: [PATCH 6/8] More edits to the CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 954231f9f2a..922e072250e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,7 @@ Pyomo 6.7.2 (9 May 2024) - PyROS: Simplify custom domain validators (#3169) - PyROS: Fix iteration logging for edge case involving discrete sets (#3170) - PyROS: Update solver timing system (#3198) + - simplification: New module for expression simplification using GiNaC or SymPy (#3088) ------------------------------------------------------------------------------- Pyomo 6.7.1 (21 Feb 2024) From 15b52dbabddcbc53a37ecc368d3a38d01e1482fa Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 9 May 2024 09:27:25 -0600 Subject: [PATCH 7/8] Setting final deprecation version strings --- pyomo/common/dependencies.py | 6 +++--- pyomo/common/numeric_types.py | 2 +- pyomo/contrib/incidence_analysis/interface.py | 6 +++--- pyomo/contrib/parmest/parmest.py | 6 ++---- pyomo/core/base/__init__.py | 8 ++++---- pyomo/core/base/block.py | 2 +- pyomo/core/base/boolean_var.py | 4 ++-- pyomo/core/base/component.py | 6 +++--- pyomo/core/base/connector.py | 2 +- pyomo/core/base/constraint.py | 4 ++-- pyomo/core/base/expression.py | 6 +++--- pyomo/core/base/logical_constraint.py | 4 ++-- pyomo/core/base/objective.py | 4 ++-- pyomo/core/base/param.py | 2 +- pyomo/core/base/piecewise.py | 2 +- pyomo/core/base/set.py | 16 ++++++++-------- pyomo/core/base/sos.py | 2 +- pyomo/core/base/var.py | 4 ++-- pyomo/core/expr/numvalue.py | 2 +- pyomo/gdp/disjunct.py | 4 ++-- pyomo/mpec/complementarity.py | 2 +- pyomo/network/arc.py | 2 +- pyomo/network/port.py | 2 +- 23 files changed, 48 insertions(+), 50 deletions(-) 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( From 28c158c9dbfce3928d8d14afbc8fab2bd9017d4a Mon Sep 17 00:00:00 2001 From: John Siirola Date: Thu, 9 May 2024 09:27:53 -0600 Subject: [PATCH 8/8] Finalizing release information --- .coin-or/projDesc.xml | 4 ++-- CHANGELOG.md | 26 ++++++++++++++------------ RELEASE.md | 9 +++++++-- pyomo/version/info.py | 4 ++-- 4 files changed, 25 insertions(+), 18 deletions(-) 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 922e072250e..11b4ecbf785 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,7 +30,7 @@ Pyomo 6.7.2 (9 May 2024) - Subprocess timeout update (#3183) - Solver Refactor - Bug fixes for various components (#3181, #3214, #3228) - NLv2: handle presolved independent linear subsystems (#3193) - - Update `LegacySolverWrapper` to be compatible with the `pyomo` script (#3202) + - 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) @@ -43,37 +43,39 @@ Pyomo 6.7.2 (9 May 2024) - 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 work around issue in mpi4py (#3236, #3239) + - 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 mappings between original and transformed components (#3166) + - Use private_data for all original / transformed component mappings (#3166) - Fix a bug in gdp.bigm transformation for nested GDPs (#3213) - Contributed Packages - - APPSI: Allow cmodel to handle non-mutable params in var and constraint bounds (#3182) + - 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) - - incidence_analysis: Improve performance of `solve_strongly_connected_components` 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: Resolve errors for set operations / multidimensional sets (#3177) + - 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: Fix bug where variable aggregator did not intersect domains (#3241) + - 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: New module for expression simplification using GiNaC or SymPy (#3088) + - 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/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':