Skip to content

Commit 732665f

Browse files
XPRSc4v4claude
andcommitted
Merge upstream/main: add SCIP solver, NLP log test precision fix
- Keep Xpress solver registrations alongside new SCIP registrations in plugins.py - Use places=3 for NLP log test assertions (matches upstream) - Fix stale doc string: "Direct interface to Xpress" (not scipy-based) Co-authored-by: Claude <noreply@anthropic.com>
2 parents d0d5a73 + 1c7cda3 commit 732665f

108 files changed

Lines changed: 11457 additions & 2141 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/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: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ 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
@@ -77,7 +77,8 @@ jobs:
7777
# Exclude:
7878
# - Jenkins because it's behind a firewall
7979
# - RTD because a magically-generated string triggers failures
80-
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
8182
# Exclude:
8283
# - All gnu.org links because they consistently fail the checker
8384
# - All lpsolve.sourceforge.net links because SF appears to reject from GHA
@@ -147,6 +148,14 @@ jobs:
147148
TARGET: win
148149
PYENV: pip
149150

151+
- os: ubuntu-latest
152+
python: '3.10'
153+
other: /slim
154+
slim: 2
155+
TARGET: linux
156+
PYENV: pip
157+
158+
150159
steps:
151160
- name: Checkout Pyomo source
152161
uses: actions/checkout@v6
@@ -161,7 +170,7 @@ jobs:
161170
echo "GHA_JOBGROUP=other" >> $GITHUB_ENV
162171
fi
163172
EXTRAS=tests
164-
if test -z "${{matrix.slim}}"; then
173+
if test -z "${{matrix.slim}}" -o "${{matrix.slim}}" = 1; then
165174
EXTRAS="$EXTRAS,docs,optional"
166175
fi
167176
echo "EXTRAS=$EXTRAS" >> $GITHUB_ENV
@@ -257,7 +266,7 @@ jobs:
257266
conda-remove-defaults: true
258267
auto-update-conda: false
259268
python-version: ${{ matrix.python }}
260-
channels: conda-forge, gurobi, ibmdecisionoptimization, fico-xpress
269+
channels: conda-forge, gurobi, fico-xpress
261270
use-mamba: true
262271

263272
# This is necessary for qt (UI) tests; the package utilized here does not
@@ -312,21 +321,20 @@ jobs:
312321
python -m pip install --cache-dir cache/pip pymysql || \
313322
python -m pip install --cache-dir cache/pip pymysql
314323
if test -z "${{matrix.slim}}"; then
315-
# Disallow cplex 22.1.2.1 because it errors fatally when
316-
# computing IIS on python 3.13 and 3.14
317-
if [[ ${{matrix.python}} =~ 3.1[34] ]]; then
318-
CPLEX='cplex!=22.1.2.1'
319-
else
320-
CPLEX='cplex'
321-
fi
322-
python -m pip install --cache-dir cache/pip "$CPLEX" docplex \
324+
python -m pip install --cache-dir cache/pip cplex docplex \
323325
|| echo "WARNING: CPLEX Community Edition is not available"
324326
python -m pip install --cache-dir cache/pip gurobipy \
325327
|| echo "WARNING: Gurobi is not available"
326328
python -m pip install --cache-dir cache/pip xpress \
327329
|| echo "WARNING: Xpress Community Edition is not available"
328330
python -m pip install --cache-dir cache/pip maingopy \
329331
|| 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
330338
if [[ ${{matrix.python}} == pypy* ]]; then
331339
echo "skipping wntr for pypy"
332340
else
@@ -356,6 +364,8 @@ jobs:
356364
python --version
357365
# We need setuptools so we can run Pyomo's setup.py
358366
conda install setuptools
367+
# Make sure pip is installed for dependencies not available through conda
368+
conda install pip
359369
# Note: some pypi packages are not available through conda
360370
PYOMO_DEPENDENCIES=`python setup.py dependencies \
361371
--extras "$EXTRAS" | tail -1`
@@ -393,15 +403,6 @@ jobs:
393403
TIMEOUT_MSG="TIMEOUT: killing conda install process"
394404
PYVER=$(echo "py${{matrix.python}}" | sed 's/\.//g')
395405
echo "Installing for $PYVER"
396-
#
397-
# Disallow cplex 22.1.2 and 22.1.2.1, as they error fatally when
398-
# computing IIS on Python 3.13 and 3.14
399-
# Disallow cplex 12.9 (caused segfaults in tests)
400-
if [[ ${{matrix.python}} =~ 3.1[34] ]]; then
401-
CPLEX='cplex>=12.10,<22.1.2|>22.1.2.1'
402-
else
403-
CPLEX='cplex>=12.10'
404-
fi
405406
# xpress.init() (xpress 9.5.1 from conda) hangs indefinitely
406407
# on GHA/Windows under Python 3.10 and 3.11. Exclude that
407408
# release on that platform.
@@ -414,7 +415,7 @@ jobs:
414415
else
415416
XPRESS='xpress'
416417
fi
417-
for PKG in "$CPLEX" docplex gurobi "$XPRESS" cyipopt pymumps scip; do
418+
for PKG in gurobi "$XPRESS" cyipopt pymumps scip pyscipopt; do
418419
echo ""
419420
echo "*** Install $PKG ***"
420421
echo ""
@@ -463,6 +464,12 @@ jobs:
463464
echo "WARNING: $PKG is not available"
464465
fi
465466
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"
466473
fi
467474
# Re-try Pyomo (optional) dependencies with pip
468475
echo ""
@@ -566,7 +573,7 @@ jobs:
566573
Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
567574
$INSTALLER = "${env:DOWNLOAD_DIR}/gams_install.exe"
568575
# Demo licenses are included for 5mo from the newest release
569-
$URL = "https://d37drm4t2jghv5.cloudfront.net/distributions/52.5.0"
576+
$URL = "https://d37drm4t2jghv5.cloudfront.net/distributions/latest"
570577
if ( "${{matrix.TARGET}}" -eq "win" ) {
571578
$URL = "$URL/windows/windows_x64_64.exe"
572579
} elseif ( "${{matrix.TARGET}}" -eq "osx" ) {
@@ -680,9 +687,9 @@ jobs:
680687
cd gjh_asl_json-master/Thirdparty
681688
# Patch get.ASL to use curl
682689
URL="http://www.ampl.com/netlib/ampl/solvers.tgz"
683-
sed -i "s|wget |curl -o solvers.tgz |" get.ASL
684-
cat get.ASL
685-
./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
686693
cd ..
687694
make
688695
mv bin "$INSTALL_DIR/bin"

0 commit comments

Comments
 (0)