Skip to content

Commit 0318238

Browse files
committed
Merge remote-tracking branch 'upstream/main' into HEAD
2 parents 3262583 + 1c7cda3 commit 0318238

154 files changed

Lines changed: 18696 additions & 3088 deletions

File tree

Some content is hidden

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

.coin-or/projDesc.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,8 @@ Carl D. Laird, Chair, Pyomo Management Committee, claird at andrew dot cmu dot e
208208
Use explicit overrides to disable use of automated
209209
version reporting.
210210
-->
211-
<stableVersionNumber>6.10.0</stableVersionNumber>
212-
<releaseNumber>6.10.0</releaseNumber>
211+
<stableVersionNumber>6.10.1</stableVersionNumber>
212+
<releaseNumber>6.10.1</releaseNumber>
213213

214214
</developmentStatus>
215215

.github/ISSUE_TEMPLATE/task.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
---
2+
name: "Developer Task"
3+
about: Track a new developer task to be completed.
4+
labels: "Task"
5+
---
6+
7+
<!-- ONLY FOR USE BY CORE DEVELOPERS. This template is only intended for use by core developers. If you are reporting a bug or requesting a new feature, please use the appropriate template. -->
8+
9+
## Summary
10+
<!-- Brief description of this task -->
11+
12+
## Goal / Purpose
13+
<!-- Why is this task needed? -->
14+
15+
## Additional Info Needed
16+
<!-- Are there any discussion items that still need to be addressed, maybe with other developer? -->
17+

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,30 @@
1818
-
1919
-
2020

21+
## AI-Use Disclosure
22+
<!-- Contributors must disclose whether and how AI tools were used and highlight any areas of uncertainty or where they want focused reviewer feedback -->
23+
24+
- [ ] **AI tools were NOT used during the preparation of this PR**
25+
26+
or
27+
28+
- [ ] **AI tools contributed to the development of this PR**
29+
- [ ] AI tools generated documentation (including the PR description/comments, code comments, and/or Sphinx documentation)
30+
- [ ] AI tools generated tests (baselines, examples, and/or code)
31+
- [ ] AI tools generated code (apart from tests)
32+
33+
*Review process (select ONE)*:
34+
- [ ] **Rewritten**: All AI-generated content was rewritten by me before being committed.
35+
- [ ] **Reviewed/verified**: I retained AI-generated content and verified it before committing. Verification included (as applicable):
36+
- [ ] Ran the code and fixed issues
37+
- [ ] Added and ran tests
38+
- [ ] Checked correctness/logic of code and tests
39+
- [ ] Checked for alignment with the contribution guide
40+
- [ ] Considered security implications
41+
- [ ] **As-is**: AI-generated content was commited directly to the repository
42+
43+
**Notes for reviewers (optional):** <!-- Where should reviewers focus? What are you least confident about? -->
44+
2145
### Legal Acknowledgement
2246

2347
By contributing to this software project, I have read the [contribution guide](https://pyomo.readthedocs.io/en/stable/contribution_guide.html) and agree to the following terms and conditions for my contribution:

.github/workflows/release_wheel_creation.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ jobs:
7979
CIBW_SKIP: "*-musllinux*"
8080
CIBW_BUILD_VERBOSITY: 1
8181
CIBW_ENVIRONMENT: PYOMO_SETUP_ARGS="${{ matrix.GLOBAL_OPTIONS }}"
82-
- uses: actions/upload-artifact@v4
82+
- uses: actions/upload-artifact@v7
8383
with:
8484
name: native_wheels-${{ matrix.os }}-${{ matrix.TARGET }}
8585
path: dist/*.whl
@@ -132,7 +132,7 @@ jobs:
132132
CIBW_SKIP: "*-musllinux*"
133133
CIBW_BUILD_VERBOSITY: 1
134134
CIBW_ENVIRONMENT: PYOMO_SETUP_ARGS="${{ matrix.GLOBAL_OPTIONS }}"
135-
- uses: actions/upload-artifact@v4
135+
- uses: actions/upload-artifact@v7
136136
with:
137137
name: alt_wheels-${{ matrix.os }}-${{ matrix.TARGET }}
138138
path: dist/*.whl
@@ -152,7 +152,7 @@ jobs:
152152
sed '1,/REMOVE-EVERYTHING-BEFORE-THIS-LINE/d' README.md > README.new
153153
mv README.new README.md
154154
- name: Set up Python ${{ matrix.python-version }}
155-
uses: actions/setup-python@v5
155+
uses: actions/setup-python@v6
156156
with:
157157
python-version: ${{ matrix.python-version }}
158158
- name: Install dependencies
@@ -164,7 +164,7 @@ jobs:
164164
export PYOMO_SETUP_ARGS=--without-cython
165165
python -m build --wheel --outdir dist --config-setting="--build-option=--without-cython"
166166
- name: Upload artifact
167-
uses: actions/upload-artifact@v4
167+
uses: actions/upload-artifact@v7
168168
with:
169169
name: purepythonwheel
170170
path: dist/*.whl
@@ -189,7 +189,7 @@ jobs:
189189
sed '1,/REMOVE-EVERYTHING-BEFORE-THIS-LINE/d' README.md > README.new
190190
mv README.new README.md
191191
- name: Set up Python ${{ matrix.python-version }}
192-
uses: actions/setup-python@v5
192+
uses: actions/setup-python@v6
193193
with:
194194
python-version: ${{ matrix.python-version }}
195195
- name: Install dependencies
@@ -201,7 +201,7 @@ jobs:
201201
export PYOMO_SETUP_ARGS=--without-cython
202202
python -m build --sdist --outdir dist --config-setting="--build-option=--without-cython"
203203
- name: Upload artifact
204-
uses: actions/upload-artifact@v4
204+
uses: actions/upload-artifact@v7
205205
with:
206206
name: generictarball
207207
path: dist

.github/workflows/test_branches.yml

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,16 @@ env:
2323
PYTHON_CORE_PKGS: wheel
2424
PYPI_ONLY: z3-solver linear-tree
2525
PYPY_EXCLUDE: scipy numdifftools seaborn statsmodels linear-tree
26-
CACHE_VER: v260304.0
26+
CACHE_VER: v260512.3
2727
NEOS_EMAIL: tests@pyomo.org
2828
SRC_REF: ${{ github.head_ref || github.ref }}
2929
PYOMO_WORKFLOW: branch
3030

3131
jobs:
3232
lint:
3333
name: lint/style-and-typos
34-
if: |
35-
${{ ! ( contains(github.event.pull_request.title, '[WIP]') ||
36-
github.event.pull_request.draft ) }}
34+
# Note: 'env' is not available in GHA jobs.<job_id>.if context.
35+
if: ${{ ! contains(github.event.pull_request.title, '[WIP]') }}
3736
runs-on: ubuntu-latest
3837
steps:
3938
- name: Checkout Pyomo source
@@ -62,7 +61,7 @@ jobs:
6261
sudo resolvectl query github.com
6362
sudo resolvectl status
6463
- name: URL Checker
65-
if: env.PYOMO_WORKFLOW == 'branch'
64+
if: ${{ env.PYOMO_WORKFLOW == 'branch' }}
6665
uses: urlstechie/urlchecker-action@0.0.34
6766
with:
6867
# A comma-separated list of file types to cover in the URL checks
@@ -78,7 +77,8 @@ jobs:
7877
# Exclude:
7978
# - Jenkins because it's behind a firewall
8079
# - RTD because a magically-generated string triggers failures
81-
exclude_urls: https://pyomo-jenkins.sandia.gov/,https://pyomo.readthedocs.io/en/%s/errors.html
80+
# - scipopt.org as they perform "validation" on the webclient (which fails)
81+
exclude_urls: https://pyomo-jenkins.sandia.gov/,https://pyomo.readthedocs.io/en/%s/errors.html,https://www.scipopt.org
8282
# Exclude:
8383
# - All gnu.org links because they consistently fail the checker
8484
# - All lpsolve.sourceforge.net links because SF appears to reject from GHA
@@ -148,6 +148,14 @@ jobs:
148148
TARGET: win
149149
PYENV: pip
150150

151+
- os: ubuntu-latest
152+
python: '3.10'
153+
other: /slim
154+
slim: 2
155+
TARGET: linux
156+
PYENV: pip
157+
158+
151159
steps:
152160
- name: Checkout Pyomo source
153161
uses: actions/checkout@v6
@@ -162,7 +170,7 @@ jobs:
162170
echo "GHA_JOBGROUP=other" >> $GITHUB_ENV
163171
fi
164172
EXTRAS=tests
165-
if test -z "${{matrix.slim}}"; then
173+
if test -z "${{matrix.slim}}" -o "${{matrix.slim}}" = 1; then
166174
EXTRAS="$EXTRAS,docs,optional"
167175
fi
168176
echo "EXTRAS=$EXTRAS" >> $GITHUB_ENV
@@ -253,12 +261,12 @@ jobs:
253261

254262
- name: Set up Miniconda Python ${{ matrix.python }}
255263
if: matrix.PYENV == 'conda'
256-
uses: conda-incubator/setup-miniconda@v3
264+
uses: conda-incubator/setup-miniconda@v4
257265
with:
258266
conda-remove-defaults: true
259267
auto-update-conda: false
260268
python-version: ${{ matrix.python }}
261-
channels: conda-forge, gurobi, ibmdecisionoptimization, fico-xpress
269+
channels: conda-forge, gurobi, fico-xpress
262270
use-mamba: true
263271

264272
# This is necessary for qt (UI) tests; the package utilized here does not
@@ -313,21 +321,20 @@ jobs:
313321
python -m pip install --cache-dir cache/pip pymysql || \
314322
python -m pip install --cache-dir cache/pip pymysql
315323
if test -z "${{matrix.slim}}"; then
316-
# Disallow cplex 22.1.2.1 because it errors fatally when
317-
# computing IIS on python 3.13 and 3.14
318-
if [[ ${{matrix.python}} =~ 3.1[34] ]]; then
319-
CPLEX='cplex!=22.1.2.1'
320-
else
321-
CPLEX='cplex'
322-
fi
323-
python -m pip install --cache-dir cache/pip "$CPLEX" docplex \
324+
python -m pip install --cache-dir cache/pip cplex docplex \
324325
|| echo "WARNING: CPLEX Community Edition is not available"
325326
python -m pip install --cache-dir cache/pip gurobipy \
326327
|| echo "WARNING: Gurobi is not available"
327328
python -m pip install --cache-dir cache/pip xpress \
328329
|| echo "WARNING: Xpress Community Edition is not available"
329330
python -m pip install --cache-dir cache/pip maingopy \
330331
|| echo "WARNING: MAiNGO is not available"
332+
if [[ ${{matrix.python}} == pypy* ]]; then
333+
echo "skipping SCIP for pypy"
334+
else
335+
python -m pip install --cache-dir cache/pip pyscipopt \
336+
|| echo "WARNING: SCIP is not available"
337+
fi
331338
if [[ ${{matrix.python}} == pypy* ]]; then
332339
echo "skipping wntr for pypy"
333340
else
@@ -357,6 +364,8 @@ jobs:
357364
python --version
358365
# We need setuptools so we can run Pyomo's setup.py
359366
conda install setuptools
367+
# Make sure pip is installed for dependencies not available through conda
368+
conda install pip
360369
# Note: some pypi packages are not available through conda
361370
PYOMO_DEPENDENCIES=`python setup.py dependencies \
362371
--extras "$EXTRAS" | tail -1`
@@ -394,15 +403,6 @@ jobs:
394403
TIMEOUT_MSG="TIMEOUT: killing conda install process"
395404
PYVER=$(echo "py${{matrix.python}}" | sed 's/\.//g')
396405
echo "Installing for $PYVER"
397-
#
398-
# Disallow cplex 22.1.2 and 22.1.2.1, as they error fatally when
399-
# computing IIS on Python 3.13 and 3.14
400-
# Disallow cplex 12.9 (caused segfaults in tests)
401-
if [[ ${{matrix.python}} =~ 3.1[34] ]]; then
402-
CPLEX='cplex>=12.10,<22.1.2|>22.1.2.1'
403-
else
404-
CPLEX='cplex>=12.10'
405-
fi
406406
# xpress.init() (xpress 9.5.1 from conda) hangs indefinitely
407407
# on GHA/Windows under Python 3.10 and 3.11. Exclude that
408408
# release on that platform.
@@ -415,7 +415,7 @@ jobs:
415415
else
416416
XPRESS='xpress'
417417
fi
418-
for PKG in "$CPLEX" docplex gurobi "$XPRESS" cyipopt pymumps scip; do
418+
for PKG in gurobi "$XPRESS" cyipopt pymumps scip pyscipopt; do
419419
echo ""
420420
echo "*** Install $PKG ***"
421421
echo ""
@@ -464,6 +464,12 @@ jobs:
464464
echo "WARNING: $PKG is not available"
465465
fi
466466
done
467+
# As of June 2026, cplex/docplex want their users to move towards
468+
# pypi and away from conda. Particularly:
469+
# The CPLEX and CP Optimizer Python interfaces are no longer
470+
# delivered inside CPLEX Optimization Studio, but can be
471+
# installed directly from PyPI.
472+
PYPI_DEPENDENCIES="$PYPI_DEPENDENCIES cplex docplex"
467473
fi
468474
# Re-try Pyomo (optional) dependencies with pip
469475
echo ""
@@ -567,7 +573,7 @@ jobs:
567573
Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
568574
$INSTALLER = "${env:DOWNLOAD_DIR}/gams_install.exe"
569575
# Demo licenses are included for 5mo from the newest release
570-
$URL = "https://d37drm4t2jghv5.cloudfront.net/distributions/52.5.0"
576+
$URL = "https://d37drm4t2jghv5.cloudfront.net/distributions/latest"
571577
if ( "${{matrix.TARGET}}" -eq "win" ) {
572578
$URL = "$URL/windows/windows_x64_64.exe"
573579
} elseif ( "${{matrix.TARGET}}" -eq "osx" ) {
@@ -681,9 +687,9 @@ jobs:
681687
cd gjh_asl_json-master/Thirdparty
682688
# Patch get.ASL to use curl
683689
URL="http://www.ampl.com/netlib/ampl/solvers.tgz"
684-
sed -i "s|wget |curl -o solvers.tgz |" get.ASL
685-
cat get.ASL
686-
./get.ASL
690+
sed "s|wget |curl -o solvers.tgz |" get.ASL > get.ASL.patched
691+
cat get.ASL.patched
692+
bash ./get.ASL.patched
687693
cd ..
688694
make
689695
mv bin "$INSTALL_DIR/bin"
@@ -866,8 +872,8 @@ jobs:
866872
cover:
867873
name: process-coverage-${{ matrix.TARGET }}
868874
needs: build
869-
# run even if a build job fails, but not if canceled (except for branches)
870-
if: ${{ false }}
875+
# run even if a build job fails, but not if canceled
876+
if: ${{ success() || failure() }}
871877
runs-on: ${{ matrix.os }}
872878
timeout-minutes: 10
873879
strategy:
@@ -976,7 +982,9 @@ jobs:
976982
fi
977983
978984
- name: Upload codecov reports
979-
if: github.repository_owner == 'Pyomo' || github.ref != 'refs/heads/main'
985+
if: |
986+
env.PYOMO_WORKFLOW != 'branch' &&
987+
(github.repository_owner == 'Pyomo' || github.ref != 'refs/heads/main')
980988
uses: codecov/codecov-action@v6
981989
with:
982990
files: coverage.xml
@@ -987,6 +995,7 @@ jobs:
987995

988996
- name: Upload other coverage reports
989997
if: |
998+
env.PYOMO_WORKFLOW != 'branch' &&
990999
hashFiles('coverage-other.xml') != '' &&
9911000
(github.repository_owner == 'Pyomo' || github.ref != 'refs/heads/main')
9921001
uses: codecov/codecov-action@v6

0 commit comments

Comments
 (0)