Skip to content

Commit

Permalink
Merge pull request Pyomo#1989 from Pyomo/finalize-release
Browse files Browse the repository at this point in the history
Finalize 6.0 release
  • Loading branch information
jsiirola authored May 20, 2021
2 parents 0f67521 + 7e37d72 commit be82bdc
Show file tree
Hide file tree
Showing 33 changed files with 218 additions and 85 deletions.
4 changes: 2 additions & 2 deletions .coin-or/projDesc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,8 @@ Carl D. Laird, Chair, Pyomo Management Committee, cdlaird at sandia dot gov
Use explicit overrides to disable use of automated
version reporting.
-->
<stableVersionNumber>5.7.3</stableVersionNumber>
<releaseNumber>5.7.3</releaseNumber>
<stableVersionNumber>6.0</stableVersionNumber>
<releaseNumber>6.0</releaseNumber>

</developmentStatus>

Expand Down
135 changes: 132 additions & 3 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,135 @@
Pyomo CHANGELOG
===============

-------------------------------------------------------------------------------
Pyomo 6.0 20 May 2021
-------------------------------------------------------------------------------

BACKWARDS COMPATIBILITY WARNINGS
- Moved PySP into a separate package available at
https://github.com/Pyomo/pysp
- Renamed "Simple" components to "Scalar" components
- Removed support for implicit ranged inequalities
- Removed support for component reconstruct method
- Removed support for casting relational expressions to bool
- Removed support for Python 2.7, 3.5, and pypy2

- Drop PyUtilib Dependency
- Replace pyutilib.misc.import_file with pyomo.common.fileutils (#1815)
- Replace pyutilib.math with Python math package (#1809)
- Remove or replaced pyutilib.misc items (#1814, #1822)
- Replace pyutilib.subprocess with Python subprocess (#1812)
- Replace pyutilib.th with unittest and pyomo.common.unittest (#1859, #1898)
- Remove pyutilib.pyro (#1869)
- Remove pyutilib dependencies from Pyomo script (#1976)
- Remove hard pyutilib dependency (#1980)

- General
- Drop support and testing for Python 2.7, 3.5, and pypy2 (#1763, #1818)
- Remove PySP (#1819)
- Clean up code for Python 2/3 cross-compatibility, remove use of six
(#1829, #1833, #1901, #1908, #1910, #1911, #1876, #1915, #1919,
#1931, #1938, #1937)
- Standardize usage of string type comparison (#1826)
- Switch default branch of Pyomo from master to main (#1843)
- Cleanup console scripts (#1830)
- Update import_file to recognize module context (#1871)
- Remove 2nd edition Pyomo Book examples (#1883)
- Move Container/Options/Bunch into just Bunch (#1838)
- Improve handling of enum.Enum domains in ConfigValue (#1893)
- Add MANIFEST.in file to include cpp files in PyPI package (#1851)
- Add GitHub issue templates for bug reports and feature requests (#1920)
- Fix identification of Pyomo root dir in unittest.runtests (#1922)
- Update the Config system (#1916)
- Resolve numerous deprecation warnings (#1935)
- Timing and timing test improvements (#1939, #1894, #1945)
- Overhaul @deprecated decorator to work better with class, enum, and
sphinx (#1906)
- Improve attempt_import mechanism (#1940, #1948)
- Stop caching the picklability of function types (#1959)
- Support explicit constants in ExternalFunction arguments (#1967)
- Add RenameClass metaclass (#1973)
- Add 3rd edition Pyomo Book examples and tests (#1914)
- Promote assertStructuredAlmostEqual to a module function (#1979)
- Core
- Improve sorted_robust for (nested) tuple items (#1842)
- Update _component_data_iter to use sorted_robust (#1852)
- Disable implicit ranged inequalities (#1840)
- Improve error message when constructing a RangeSet with external
data (#1875)
- Fix bug in scaling transformation (#1854)
- Fix bug in identify_mutable_parameters (#1878)
- Fix inequality function to work with floats (#1841)
- Update test_model to skip tests if GLPK is not available (#1917)
- Rename param._NotValid to param.Param.NoValue (#1927)
- Improve error message for disabled methods on Abstract components (#1896)
- Propagate exception flag to _EvaluationVisitor (#1946)
- Define pprint() for ExternalFunction components (#1965)
- Support setting Var and Param values with unit expressions (#1966)
- Allow assigning None to a unitted variable (#1977)
- Update to only allow constant expressions to be cast to bool (#1954)
- Rename "Simple" components to "Scalar" components (#1971)
- Add utility for comparing expressions (#1981)
- Improve quoting in component names and indices (#1982, #1985)
- Remove component.reconstruct() (#1983)
- Documentation
- Add documentation and doctests for pyomo.common.timing (#1924)
- Update the ReadTheDocs configuration (#1929)
- Improve robustness of doctest tests (#1942)
- Solver Interfaces
- Track changes in NEOS/RAPOSa expected behavior (#1816)
- Fix quadratic term handling for QCQO problems in mosek_direct (#1835)
- Remove pyomo.opt.blackbox and the COLIN solver interface (#1872)
- Add support for SHOT solver to GAMS interface (#1889)
- Fix sign convention in CBC for maximization problems (#1848)
- Update gurobi available() checks (#1921)
- Update CBC interface to handle infinite gap (#1907)
- Preserve CWD when xpress import fails (#1958)
- Update baron interface to prevent infinite loop when no solution is
found (#1963)
- Remove pyomo.solvers.tests.core (#1897)
- Testing
- Clean up Jenkins test driver (#1813)
- Update unittest.timeout to work on Windows (#1825)
- Manually add commit HASH to codecov upload on GitHub Actions (#1824)
- Relax tee/timeout test timing to improve robustness (#1831)
- Update Mosek tests (#1844)
- Add Casadi to GitHub Actions test environment (#1849)
- Disable codecov uploads from forks (#1863)
- Update IDAES-ext version used in our GitHub Actions jobs workflows (#1882)
- Rewrite test driver script (#1870, #1902)
- Rebuild GitHub Actions caches (#1934)
- Update expected CBC test failures (#1943)
- Update merged reader test to reduce failures in OSX (#1953)
- Add non-fatal timeout for nightly NEOS test (#1964)
- Do not download/build extensions for slim builds (#1988)
- DAE Updates
- Split get_index_set_except into two functions (#1879)
- GDP Updates
- Fix multiple References to local variables in nested disjuncts (#1968)
- Fix GDP error when using a disjunction with nested disjunctions as a
target (#1969)
- Convert Disjunct.indicator_var from binary to boolean variable (#1960)
- Network Updates
- Fix bug in cloning Ports (#1899)
- Updates to improve interoperability with pyomo.gdp (#1961)
- Contributed Packages
- PyNumero: add Hessian support for grey box models, support multiple
grey box models in a single Pyomo model, add callback functionality
to cyipopt interface, track changes in cyipopt API, expose nl file
options in PyomoNLP, add documentation and doctests (#1810, #1832,
#1873, #1913, #1930, #1936)
- Update contrib.viewer tests (#1820)
- Add new Auto-Persistent Pyomo Solver Interfaces (APPSI) package (#1793)
- GDPopt: add option to solve a relaxation with integer cuts, remove default
strategy (#1837)
- Benders: rename master problem to root problem (#1828)
- FBBT: Improve interval arithmetic for some special cases (#1949)
- Parmest: remove dependency on PySP and add interface to mpi-sppy (#1778)
- Add new incidence_analysis package for maximum matching and block
triangularization (#1888)
- MindtPy: general improvements and add feasibility pump (#1847)

-------------------------------------------------------------------------------
Pyomo 5.7.3 29 Jan 2021
-------------------------------------------------------------------------------
Expand Down Expand Up @@ -43,9 +172,9 @@ ADVANCE CHANGE NOTICE:
- Testing
- Fix Jenkins test script (#1771)
- Fix GHA tests to work with PyMySQL 1.0.0 (#1777)
- Contrib
- PyNumero: resolve portability issue with Cyipopt exception handling,
add PyomoNLP methods for accessing equality/inequality constraints (#1781,
- Contributed Packages
- PyNumero: resolve portability issue with Cyipopt exception handling,
add PyomoNLP methods for accessing equality/inequality constraints (#1781,
#1791)
- Parmest: update pairwise plot to use the covariance matrix (#1774)

Expand Down
2 changes: 0 additions & 2 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
include README.md
include LICENSE.txt
include pyomo/contrib/mcpp/*.cpp
include pyomo/contrib/pynumero/src/*.cpp
31 changes: 16 additions & 15 deletions RELEASE.txt
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
We are pleased to announce the release of Pyomo 5.7.3.
We are pleased to announce the release of Pyomo 6.0.

Pyomo is a collection of Python software packages that supports a
diverse set of optimization capabilities for formulating and analyzing
optimization models.


The following are highlights of the 5.7 release series:
The following are highlights of the 6.0 release series:

- Adding a logical expression system
- Standardizing component initialization
- Distribution of Cythonized wheels
- Reimplementation of the core Set component
- Improved direct and persistent interfaces to Xpress & MOSEK
- Adding support for Python 3.9
- Deprecating pyomo-extras
- Numerous bug fixes
- Improved stability and robustness of core Pyomo code and solver interfaces
- Integration of Boolean variables into GDP
- New packages: APPSI, structural model analysis, external grey box models

A full list of updates and changes is available in the CHANGELOG.txt
Note: As a major release, Pyomo 6.0 has certain backwards
incompatibilities with the 5.x series and the 2nd Edition of the Pyomo
Book. Most notably:

- Removed support for Python 2.7 or 3.5
- Moved PySP into a separate package at https://github.com/Pyomo/pysp
- Renamed "Simple" components to "Scalar" components
- Removed support for implicit ranged inequalities (a <= m.x <= b)
- Removed support for component reconstruct method
- Removed support for casting relational expressions to bool

ADVANCE CHANGE NOTICE:
- This is the last Pyomo release to support Python 2.7, 3.4, and 3.5
- This is the last Pyomo release to bundle PySP
- This is the last Pyomo release that will have a strict PyUtilib dependency
A full list of updates and changes is available in the CHANGELOG.txt

Enjoy!

Expand Down
8 changes: 4 additions & 4 deletions pyomo/common/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ class ConfigEnum(enum.Enum):
"Directly inherit from enum.Enum and then use "
"In() or InEnum() as the ConfigValue 'domain' for "
"validation and int/string type conversions.",
version='TBD')
version='6.0')
def __new__(cls, value, *args):
member = object.__new__(cls)
member._value_ = value
Expand Down Expand Up @@ -1874,17 +1874,17 @@ def items(self):
yield (self._data[key]._name, self[key])

@deprecated('The iterkeys method is deprecated. Use dict.keys().',
version='TBD')
version='6.0')
def iterkeys(self):
return self.keys()

@deprecated('The itervalues method is deprecated. Use dict.keys().',
version='TBD')
version='6.0')
def itervalues(self):
return self.values()

@deprecated('The iteritems method is deprecated. Use dict.keys().',
version='TBD')
version='6.0')
def iteritems(self):
return self.items()

Expand Down
6 changes: 3 additions & 3 deletions pyomo/common/dependencies.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ def log_import_warning(self, logger='pyomo', msg=None):
"""
logging.getLogger(logger).warning(self._moduleunavailable_message(msg))

@deprecated("use :py:class:`log_import_warning()`", version='TBD')
@deprecated("use :py:class:`log_import_warning()`", version='6.0')
def generate_import_warning(self, logger='pyomo.common'):
self.log_import_warning(logger)

Expand Down Expand Up @@ -405,7 +405,7 @@ def attempt_import(name, error_message=None, only_catch_importerror=None,
"""
if alt_names is not None:
deprecation_warning('alt_names=%s no longer needs to be specified '
'and is ignored' % (alt_names,), version='TBD')
'and is ignored' % (alt_names,), version='6.0')

if only_catch_importerror is not None:
deprecation_warning(
Expand All @@ -429,7 +429,7 @@ def attempt_import(name, error_message=None, only_catch_importerror=None,
deprecation_warning(
'attempt_import(): deferred_submodules takes an iterable '
'and not a mapping (the alt_names supplied by the mapping '
'are no longer needed and are ignored).', version='TBD')
'are no longer needed and are ignored).', version='6.0')
deferred_submodules = list(deferred_submodules)

# Ensures all names begin with '.'
Expand Down
10 changes: 5 additions & 5 deletions pyomo/common/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,21 @@ class PluginGlobals(object):
@staticmethod
@deprecated("The PluginGlobals environment manager is deprecated: "
"Pyomo only supports a single global environment",
version='TBD')
version='6.0')
def add_env(name):
pass

@staticmethod
@deprecated("The PluginGlobals environment manager is deprecated: "
"Pyomo only supports a single global environment",
version='TBD')
version='6.0')
def pop_env():
pass

@staticmethod
@deprecated("The PluginGlobals environment manager is deprecated: "
"Pyomo only supports a single global environment",
version='TBD')
version='6.0')
def clear():
pass

Expand All @@ -61,7 +61,7 @@ def alias(name, doc=None, subclass=None):
if subclass is not None:
deprecation_warning(
"The Pyomo plugin infrastructure alias() function does "
"not support the subclass flag.", version='TBD')
"not support the subclass flag.", version='6.0')
calling_frame = inspect.currentframe().f_back
locals_ = calling_frame.f_locals
#
Expand All @@ -77,7 +77,7 @@ def implements(interface, inherit=None, namespace=None, service=False):
if namespace is not None:
deprecation_warning(
"The Pyomo plugin infrastructure only supports a "
"single global namespace.", version='TBD')
"single global namespace.", version='6.0')
calling_frame = inspect.currentframe().f_back
locals_ = calling_frame.f_locals
#
Expand Down
10 changes: 5 additions & 5 deletions pyomo/common/tests/test_deprecated.py
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ class NewClassSubclass(NewClass):
with LoggingIntercept(out):
class DeprecatedClass(metaclass=RenamedClass):
__renamed__new_class__ = NewClass
__renamed__version__ = 'TBD'
__renamed__version__ = 'X.y'
self.assertEqual(out.getvalue(), "")

# Inheriting from the deprecated class generates the warning
Expand All @@ -411,7 +411,7 @@ class DeprecatedClassSubclass(DeprecatedClass):
r"^DEPRECATED: Declaring class 'DeprecatedClassSubclass' "
r"derived from 'DeprecatedClass'. "
r"The class 'DeprecatedClass' has been renamed to 'NewClass' "
r"\(deprecated in TBD\) \(called from [^\)]*\)$",
r"\(deprecated in X.y\) \(called from [^\)]*\)$",
)

# Inheriting from a class derived from the deprecated class does
Expand Down Expand Up @@ -439,7 +439,7 @@ class DeprecatedClassSubSubclass(DeprecatedClassSubclass):
out.getvalue().replace("\n", " ").strip(),
r"^DEPRECATED: Instantiating class 'DeprecatedClass'. "
r"The class 'DeprecatedClass' has been renamed to 'NewClass' "
r"\(deprecated in TBD\) \(called from [^\)]*\)$",
r"\(deprecated in X.y\) \(called from [^\)]*\)$",
)

# Instantiating a class derived from the deprecaed class does
Expand Down Expand Up @@ -469,7 +469,7 @@ class DeprecatedClassSubSubclass(DeprecatedClassSubclass):
out.getvalue().replace("\n", " ").strip(),
r"^DEPRECATED: Checking type relative to 'DeprecatedClass'. "
r"The class 'DeprecatedClass' has been renamed to 'NewClass' "
r"\(deprecated in TBD\) \(called from [^\)]*\)$",
r"\(deprecated in X.y\) \(called from [^\)]*\)$",
)

#
Expand All @@ -492,7 +492,7 @@ class DeprecatedClassSubSubclass(DeprecatedClassSubclass):
out.getvalue().replace("\n", " ").strip(),
r"^DEPRECATED: Checking type relative to 'DeprecatedClass'. "
r"The class 'DeprecatedClass' has been renamed to 'NewClass' "
r"\(deprecated in TBD\) \(called from [^\)]*\)$",
r"\(deprecated in X.y\) \(called from [^\)]*\)$",
)

#
Expand Down
2 changes: 1 addition & 1 deletion pyomo/contrib/pynumero/interfaces/external_grey_box.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,7 @@ def __init__(self, *args, **kwds):

class SimpleExternalGreyBoxBlock(metaclass=RenamedClass):
__renamed__new_class__ = ScalarExternalGreyBoxBlock
__renamed__version__ = 'TBD'
__renamed__version__ = '6.0'


class IndexedExternalGreyBoxBlock(Block):
Expand Down
2 changes: 1 addition & 1 deletion pyomo/core/base/PyomoModel.py
Original file line number Diff line number Diff line change
Expand Up @@ -723,7 +723,7 @@ def create_instance( self, filename=None, data=None, name=None,


@deprecated("The Model.preprocess() method is deprecated and no "
"longer performs any actions", version='TBD')
"longer performs any actions", version='6.0')
def preprocess(self, preprocessor=None):
return

Expand Down
Loading

0 comments on commit be82bdc

Please sign in to comment.