Skip to content

Commit e2927ed

Browse files
committed
Merge branch 'main' into feas-infeas
2 parents 1c99111 + 457f436 commit e2927ed

File tree

309 files changed

+14666
-5608
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

309 files changed

+14666
-5608
lines changed

.coin-or/projDesc.xml

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

233233
</developmentStatus>
234234

.github/workflows/test_branches.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -484,33 +484,38 @@ jobs:
484484
IPOPT_DIR=$TPL_DIR/ipopt
485485
echo "$IPOPT_DIR" >> $GITHUB_PATH
486486
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$IPOPT_DIR" >> $GITHUB_ENV
487+
echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$IPOPT_DIR" >> $GITHUB_ENV
487488
NEW_PYOMO_PATH="$IPOPT_DIR:$PYOMO_PATH"
488489
echo "PYOMO_PATH=$NEW_PYOMO_PATH" >> $GITHUB_ENV
489490
mkdir -p $IPOPT_DIR
490491
IPOPT_TAR=${DOWNLOAD_DIR}/ipopt.tar.gz
491492
if test ! -e $IPOPT_TAR; then
492493
echo "...downloading Ipopt"
493-
if test "${{matrix.TARGET}}" == osx; then
494-
echo "IDAES Ipopt not available on OSX"
495-
exit 0
496-
fi
497494
URL=https://github.com/IDAES/idaes-ext
498495
RELEASE=$(curl --max-time 150 --retry 8 \
499496
-L -s -H 'Accept: application/json' ${URL}/releases/latest)
500497
VER=$(echo $RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
501498
URL=${URL}/releases/download/$VER
502499
if test "${{matrix.TARGET}}" == linux; then
503500
curl --max-time 150 --retry 8 \
504-
-L $URL/idaes-solvers-ubuntu2004-x86_64.tar.gz \
505-
> $IPOPT_TAR
501+
-L $URL/idaes-solvers-ubuntu2204-x86_64.tar.gz \
502+
-o $IPOPT_TAR
503+
elif test "${{matrix.TARGET}}" == osx; then
504+
curl --max-time 150 --retry 8 \
505+
-L $URL/idaes-solvers-darwin-aarch64.tar.gz \
506+
-o $IPOPT_TAR
506507
else
507508
curl --max-time 150 --retry 8 \
508509
-L $URL/idaes-solvers-windows-x86_64.tar.gz \
509510
$URL/idaes-lib-windows-x86_64.tar.gz > $IPOPT_TAR
510511
fi
511512
fi
512513
cd $IPOPT_DIR
513-
tar -xzi < $IPOPT_TAR
514+
if test "${{matrix.TARGET}}" == win; then
515+
tar -xzi < $IPOPT_TAR
516+
else
517+
tar -xzf $IPOPT_TAR
518+
fi
514519
echo ""
515520
echo "$IPOPT_DIR"
516521
ls -l $IPOPT_DIR

.github/workflows/test_pr_and_main.yml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -536,33 +536,38 @@ jobs:
536536
IPOPT_DIR=$TPL_DIR/ipopt
537537
echo "$IPOPT_DIR" >> $GITHUB_PATH
538538
echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$IPOPT_DIR" >> $GITHUB_ENV
539+
echo "DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$IPOPT_DIR" >> $GITHUB_ENV
539540
NEW_PYOMO_PATH="$IPOPT_DIR:$PYOMO_PATH"
540541
echo "PYOMO_PATH=$NEW_PYOMO_PATH" >> $GITHUB_ENV
541542
mkdir -p $IPOPT_DIR
542543
IPOPT_TAR=${DOWNLOAD_DIR}/ipopt.tar.gz
543544
if test ! -e $IPOPT_TAR; then
544545
echo "...downloading Ipopt"
545-
if test "${{matrix.TARGET}}" == osx; then
546-
echo "IDAES Ipopt not available on OSX"
547-
exit 0
548-
fi
549546
URL=https://github.com/IDAES/idaes-ext
550547
RELEASE=$(curl --max-time 150 --retry 8 \
551548
-L -s -H 'Accept: application/json' ${URL}/releases/latest)
552549
VER=$(echo $RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
553550
URL=${URL}/releases/download/$VER
554551
if test "${{matrix.TARGET}}" == linux; then
555552
curl --max-time 150 --retry 8 \
556-
-L $URL/idaes-solvers-ubuntu2004-x86_64.tar.gz \
557-
> $IPOPT_TAR
553+
-L $URL/idaes-solvers-ubuntu2204-x86_64.tar.gz \
554+
-o $IPOPT_TAR
555+
elif test "${{matrix.TARGET}}" == osx; then
556+
curl --max-time 150 --retry 8 \
557+
-L $URL/idaes-solvers-darwin-aarch64.tar.gz \
558+
-o $IPOPT_TAR
558559
else
559560
curl --max-time 150 --retry 8 \
560561
-L $URL/idaes-solvers-windows-x86_64.tar.gz \
561562
$URL/idaes-lib-windows-x86_64.tar.gz > $IPOPT_TAR
562563
fi
563564
fi
564565
cd $IPOPT_DIR
565-
tar -xzi < $IPOPT_TAR
566+
if test "${{matrix.TARGET}}" == win; then
567+
tar -xzi < $IPOPT_TAR
568+
else
569+
tar -xzf $IPOPT_TAR
570+
fi
566571
echo ""
567572
echo "$IPOPT_DIR"
568573
ls -l $IPOPT_DIR

CHANGELOG.md

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,54 @@
11
Pyomo CHANGELOG
22
===============
33

4+
-------------------------------------------------------------------------------
5+
Pyomo 6.9.2 (16 Apr 2025)
6+
-------------------------------------------------------------------------------
7+
8+
- General
9+
- Update Copyright to 2025 (#3515)
10+
- `capture_output`: do not output to captured file descriptors (#3537, #3560)
11+
- `calc_variable_from_constraint`: guard against expression overflow (#3541)
12+
- Standardize the usage of pyomo.environ imports (#3545)
13+
- Update ASL CMake builders (#3548)
14+
- Support passing LoggerAdapter objects to LogStream (#3547)
15+
- Core
16+
- Support multi-column DataFrames in Initializer (#3552)
17+
- Multiple dispatch for relational expression generation (#3483)
18+
- Type check `exception` args in component `__call__` implementations (#3538)
19+
- Documentation
20+
- Move RTD ads to the sidebar (#3536)
21+
- Standardize Example Imports (#3543)
22+
- LD-SDA Documentation (#3539)
23+
- Fix broken URLs in documentation (#3529, #3544)
24+
- Update future solver interface documentation (#3526)
25+
- Document `BlockData.clone` (#3542)
26+
- Solver Interfaces
27+
- Fix bug in `XpressPersistent.update_var` (#3566)
28+
- Avoid duplicate `AMPLFUNC` entries in `ipopt_v2` (#3554)
29+
- Update deprecation warnings in `contrib.solver` (#3553, #3555)
30+
- Support for upcoming knitro python package (#3478)
31+
- Future solver interface reorganization and updates (#3476)
32+
- Update HiGHS interface to allow keyboard interrupts (#3509, #3511)
33+
- Fix/extend MOSEK option handling (#3488)
34+
- Testing
35+
- Defer `pathlib` import, remove test output file (#3563)
36+
- Add IDAES Solvers to Mac; Update to Ubuntu 22.04 (#3556)
37+
- Clean up numeric_expr dispatcher test driver (#3551)
38+
- Testing and coverage fixes (#3549)
39+
- Resolve intermittent test failure (increase sleep time) (#3517)
40+
- Be more careful when/how we timeout conda install (#3514)
41+
- Contributed Packages
42+
- cspline_external: Add a function for cubic spline interpolation (#3216)
43+
- DoE: Correct initialization when using lower diagonal of FIM (#3532)
44+
- FBBT: Resolve bug registering native type handlers (#3567)
45+
- parmest/DoE: Ordering and param bug fixes (#3512)
46+
- PyNumero: Add support for greybox models (#3364)
47+
- PyROS: Modify Decision Rule Order Efficiency (#3562)
48+
- PyROS: Revise second-stage equality reformulation under discrete
49+
(scenario-based) uncertainty (#3533)
50+
- PyROS: Add Uncertain Parameter Reduction (#3503)
51+
452
-------------------------------------------------------------------------------
553
Pyomo 6.9.1 (5 Mar 2025)
654
-------------------------------------------------------------------------------
@@ -34,7 +82,7 @@ Pyomo 6.9.0 (21 Feb 2025)
3482
- Resolve error parenthesizing pow mantissa (#3472)
3583
- Resolve OSX error accessing closed filehandle (#3467)
3684
- Allow construction of CUID from another CUID (#3464)
37-
- Clean up `identify_variables` / `identify_mutable_parameters`;
85+
- Clean up `identify_variables` / `identify_mutable_parameters`;
3886
deprecate `SimpleExpressionVisitor` (#3436)
3987
- Solver Interfaces
4088
- Solver refactor: BUGFIX, f-string in contrib/solver (#3481)
@@ -48,11 +96,11 @@ Pyomo 6.9.0 (21 Feb 2025)
4896
- 2025 Testing update: Black 25.1.0, testing Qt without X11 (#3463)
4997
- Testing: exclude Xpress 9.5.1 on Windows/GHA/Python3.{0,1} (#3455)
5098
- CY25 CI Infrastructure and typo fixes (#3453)
51-
- Verify we are testing all NEOS solvers (#3433)
99+
- Verify we are testing all NEOS solvers (#3433)
52100
- Contributed Packages
53101
- GDPOpt: Add Logic-Based Discrete-Steepest Descent Algorithm (#3331)
54102
- PyROS: Fix/Tweak Documentation and Solver Output Logging (#3475)
55-
- PyROS: Fix Treatment of Fixed Model Variables and Initialization of
103+
- PyROS: Fix Treatment of Fixed Model Variables and Initialization of
56104
Auxiliary Uncertain Parameters (#3461)
57105
- PyROS: Improve handling of separation problem sub-solver errors (#3441)
58106
- PyROS: Extend valid types for solver argument `uncertain_params` (#3439)

RELEASE.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
We are pleased to announce the release of Pyomo 6.9.1.
1+
We are pleased to announce the release of Pyomo 6.9.2.
22

33
Pyomo is a collection of Python software packages that supports a
44
diverse set of optimization capabilities for formulating and analyzing
@@ -8,7 +8,9 @@ The following are highlights of the 6.9 release series:
88

99
- Removed support for Python 3.8
1010
- New Logic-Based Discrete-Steepest Descent Algorithm in GDPOpt
11+
- New External Function for Cubic Spline Interpolation
1112
- New solver interfaces:
13+
- Support for upcoming knitro Python package
1214
- v2: Ongoing solver interface refactor
1315
- ...and of course numerous minor bug fixes and performance enhancements
1416

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{% extends "!layout.html" %}
2+
{# Explicitly put RTD's ads in the sidebar. If we don't specify a
3+
location, RTD puts them at the bottom of the page content in a
4+
style that is easily visually confused with the documentation
5+
content.
6+
#}
7+
{%- block navigation %}
8+
{{ super() }}
9+
<div id="side-ad-box" style="max-width:90%; margin-left: auto; margin-right: auto;">
10+
<hr/>
11+
<div id="readthedocs-ea" class="raised ethical-rtd ethical-dark-theme">
12+
<div id="ethical-ad-placement"></div>
13+
</div
14+
</div>
15+
{% endblock %}

doc/OnlineDocs/contribution_guide.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ provides an example of how this can be done, including a directory
413413
for plugins and package tests. For example, this package can be
414414
imported as a subpackage of ``pyomo.contrib``::
415415

416-
from pyomo.environ import *
416+
import pyomo.environ as pyo
417417
from pyomo.contrib.example import a
418418

419419
# Print the value of 'a' defined by this package

doc/OnlineDocs/explanation/analysis/sensitivity_toolbox.rst

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,25 @@ Here :math:`x_1`, :math:`x_2`, and :math:`x_3` are the decision variables while
3131
.. doctest:: python
3232

3333
# Import Pyomo and the sensitivity toolbox
34-
>>> from pyomo.environ import *
34+
>>> import pyomo.environ as pyo
3535
>>> from pyomo.contrib.sensitivity_toolbox.sens import sensitivity_calculation
3636

3737
# Create a concrete model
38-
>>> m = ConcreteModel()
38+
>>> m = pyo.ConcreteModel()
3939

4040
# Define the variables with bounds and initial values
41-
>>> m.x1 = Var(initialize = 0.15, within=NonNegativeReals)
42-
>>> m.x2 = Var(initialize = 0.15, within=NonNegativeReals)
43-
>>> m.x3 = Var(initialize = 0.0, within=NonNegativeReals)
41+
>>> m.x1 = pyo.Var(initialize = 0.15, within=pyo.NonNegativeReals)
42+
>>> m.x2 = pyo.Var(initialize = 0.15, within=pyo.NonNegativeReals)
43+
>>> m.x3 = pyo.Var(initialize = 0.0, within=pyo.NonNegativeReals)
4444

4545
# Define the parameters
46-
>>> m.eta1 = Param(initialize=4.5,mutable=True)
47-
>>> m.eta2 = Param(initialize=1.0,mutable=True)
46+
>>> m.eta1 = pyo.Param(initialize=4.5,mutable=True)
47+
>>> m.eta2 = pyo.Param(initialize=1.0,mutable=True)
4848

4949
# Define the constraints and objective
50-
>>> m.const1 = Constraint(expr=6*m.x1+3*m.x2+2*m.x3-m.eta1 ==0)
51-
>>> m.const2 = Constraint(expr=m.eta2*m.x1+m.x2-m.x3-1 ==0)
52-
>>> m.cost = Objective(expr=m.x1**2+m.x2**2+m.x3**2)
50+
>>> m.const1 = pyo.Constraint(expr=6*m.x1+3*m.x2+2*m.x3-m.eta1 ==0)
51+
>>> m.const2 = pyo.Constraint(expr=m.eta2*m.x1+m.x2-m.x3-1 ==0)
52+
>>> m.cost = pyo.Objective(expr=m.x1**2+m.x2**2+m.x3**2)
5353

5454

5555
The solution of this optimization problem is :math:`x_1^* = 0.5`, :math:`x_2^* = 0.5`, and :math:`x_3^* = 0.0`. But what if we change the parameter values to :math:`\hat{p}_1 = 4.0` and :math:`\hat{p}_2 = 1.0`? Is there a quick way to approximate the new solution :math:`\hat{x}_1^*`, :math:`\hat{x}_2^*`, and :math:`\hat{x}_3^*`? Yes! This is the main functionality of sIPOPT and k_aug.
@@ -58,8 +58,8 @@ Next we define the perturbed parameter values :math:`\hat{p}_1` and :math:`\hat{
5858

5959
.. doctest:: python
6060

61-
>>> m.perturbed_eta1 = Param(initialize = 4.0)
62-
>>> m.perturbed_eta2 = Param(initialize = 1.0)
61+
>>> m.perturbed_eta1 = pyo.Param(initialize = 4.0)
62+
>>> m.perturbed_eta2 = pyo.Param(initialize = 1.0)
6363

6464
And finally we call sIPOPT or k_aug:
6565

0 commit comments

Comments
 (0)