Pyomo cuOpt adapter: TypeError formatting _version aborts pytest collection (thirdparty pyomo, 12/12 nightly jobs)

Aperta
#1,746 2 commenti 0 reazioni 1 assegnatario Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@aliceb-nv ci sta già lavorando.

Dal 19/8/2026.

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

bug dependencies

Summary

Pyomo's cuOpt adapter (pyomo/solvers/plugins/solvers/cuopt_direct.py) raises TypeError while formatting the solver name from CUOPTDirect._version. Because this happens at import/plugin-resolution time, it aborts pytest collection, so the entire thirdparty pyomo step fails rather than a single test.

This is not CI-only: any Pyomo user who has cuOpt installed hits this as soon as Pyomo resolves its solver plugins.

Observed in

Nightly run 32220613929 (main @ 1dbab9cf, 2026-08-19) — 12 of 12 wheel-tests-cuopt jobs fail the thirdparty pyomo step.

Deterministic and long-standing: also 12/12 in 32104333527 (2026-08-18), and wheel-tests-cuopt has failed 12/12 in every nightly checked back to 2026-08-14.

Independent of CUDA version, arch, Python version, and driver — it reproduces across 12.2.2 / 12.9.2 / 13.0.3 / 13.3.0, amd64 and arm64, py3.11–3.14.

Traceback

ERROR collecting pyomo/solvers/tests/checks/test_BARON.py
pyomo/solvers/tests/checks/test_BARON.py:23: in <module>
    baron_available = _test_solver_cases('baron', 'bar').available
pyomo/solvers/tests/solvers.py:445: in test_solver_cases
    _test_solver_cases['cuopt', 'python'] = initialize(
pyomo/solvers/tests/solvers.py:47: in initialize
    elif not opt.available(exception_flag=False):
pyomo/solvers/plugins/solvers/direct_or_persistent_solver.py:314: in available
    return bool(_api)
pyomo/common/dependencies.py:347: in __bool__
    self.resolve()
...
pyomo/solvers/plugins/solvers/cuopt_direct.py:37: in _get_cuopt_version
    CUOPTDirect._name = "cuOpt %s.%s%s" % CUOPTDirect._version
E   TypeError: not all arguments converted during string formatting

!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
====================== 6440 deselected, 1 error in 5.05s =======================

Analysis

"cuOpt %s.%s%s" % CUOPTDirect._version requires _version to be a 3-tuple. _version now has more than three elements, so the % operator raises TypeError: not all arguments converted during string formatting.

The likely trigger is a change in the shape of the version cuOpt reports (e.g. a 4-component version, or an extra suffix/build component being included when the tuple is built). Worth confirming what _version actually contains against a current cuOpt build before settling on the fix.

Suggested fix

The offending line lives in Pyomo, not in this repo, so the fix needs a PR upstream to Pyomo. Make the formatting length-agnostic rather than assuming three components, e.g. joining the parts instead of positional %s placeholders.

In the meantime, this repo's ci/thirdparty-testing/ Pyomo step will keep failing on every nightly, which also masks any genuine Pyomo-integration regression behind a collection abort.

Follow-up needed

  • Confirm the actual value/length of CUOPTDirect._version with a current cuOpt build
  • File and land a PR against Pyomo fixing cuopt_direct.py
  • Decide whether to pin/patch Pyomo in ci/thirdparty-testing/ until the upstream fix ships, so the step stops failing every night

Related

Filed alongside the other thirdparty nightly failures from the same run: #1485 (JuMP SOC bridge segfault, reopened) and the cvxpy build failure.

Lingua principale
Cuda
Stelle
1.1k
Fork
255
Merge medio
1g 11h
PR unite (30g)
123

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di NVIDIA/cuopt

Tutte le issue di NVIDIA/cuopt

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.