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