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

未关闭
#1,746 2 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

维护者通常 1 天内回复

@aliceb-nv 已经在做这个了。

开始于 2026年8月19日。

评估

这个 Issue 还没有评估数据。

描述

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.

主要语言
Cuda
星标
1.1k
派生
255
平均合并
1 天 22 小时
30 天内合并 PR
102

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

NVIDIA/cuopt 的其他 Issue

查看 NVIDIA/cuopt 的全部 Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。