What's Changed
🚨 Breaking Changes
- Add short cu12/cu13 Docker tag aliases and update docs by @ramakrishnap-nv in #1370
- skills: consolidate three numerical-optimization API skills into one by @ramakrishnap-nv in #1489
- wheels: build CUDA 13 wheels with latest CTK (13.3.0) by @jameslamb in #1527
- Routing DataModel: store-then-build (defer device construction to solve) by @ramakrishnap-nv in #1556
- Remove deprecated
solve-by-pdlpattribute in Python API by @nguidotti in #1664
🐛 Bug Fixes
- Fix mixed-dtype cudf.concat in test_initial_solutions helper by @ramakrishnap-nv in #1295
- check for valid size in cuOptGetErrorString by @mlubin in #1414
- Fix PDLP capture cublas error and hang on infeasible solutions by @akifcorduk in #1416
- Add a guard for huge bounds in bounds propagation by @hlinsen in #1390
- grpc fix a race condition with log streaming by @tmckayus in #1426
- bugfix (routing): fix min_vehicles bug by @np96 in #1405
- fix(routing): lower opt level for sliding_window.cu to avoid nvcc 13.0.3 ICE by @ramakrishnap-nv in #1452
- Assign gRPC workers to distinct GPUs via cudaSetDevice by @tmckayus in #1449
- ci: fix unbound CONDA_PREFIX in test_doc_examples.sh by @ramakrishnap-nv in #1462
- Fix the bug detecting nonconvex quadratic constraints in the general … by @yuwenchen95 in #1438
- fix(ci): fix typo in notebook skip list for transport_cuopt by @ramakrishnap-nv in #1496
- fix: validate row type byte before enum cast in MPS parser by @ramakrishnap-nv in #1491
- Fix root cut CPUFJ solutions being dropped by the GPU heuristics by @aliceb-nv in #1497
- fix(socp): canonicalize QC Q COO for rotated SOC detection by @yuwenchen95 in #1439
- fix: incorrect GF2 presolve constraint addressing by @aliceb-nv in #1517
- Remove wrong exception of unsupported QCQP by @rg20 in #1493
- fix(barrier): destroy cuDSS descriptors before freeing their backing buffers by @ramakrishnap-nv in #1555
- fix(clang-format): preserve SPDX comments by @bdice in #1560
- fix(ci): exclude cancelled jobs from pr-test-summary failed count by @ramakrishnap-nv in #1558
- Fix cuts not obeying timer by @akifcorduk in #1563
- [BUG] Fix variable fixing for initial solutions by @nguidotti in #1580
- Fix clique size and numerical issue bugs by @akifcorduk in #1589
- fix(build): join EXTRA_CMAKE_ARGS with semicolons for SKBUILD_CMAKE_ARGS by @ramakrishnap-nv in #1588
- Fix libomp ABI bug by @aliceb-nv in #1593
- make objective_scaling_factor optional for gRPC by @tmckayus in #1600
- Fix SOC index collision and simplify QC-to-SOC conversion by routing linear QCs through general LDLT path by @yuwenchen95 in #1564
- fix(grpc): cancel active jobs on delete by @tmckayus in #1604
- Fix Ruiz equilibration skip heuristic to also check column imbalance by @mlubin in #1601
- fix(routing): preserve row-major layout when resizing capacity routes by @mlubin in #1621
- fix(docker): pre-install test deps so dnf removal doesn't break test_image.sh by @ramakrishnap-nv in #1627
- Allow zero-valued LP Python model updates by @fallintoplace in #1421
- fix(grpc): terminate workers on server shutdown by @tmckayus in #1603
- test(barrier): cap qplib_8515_ruiz_forced_off at the iteration limit by @mlubin in #1628
- Fix routing YAML best results export by @fallintoplace in #1422
- Support maximization in quadratic programs by @chris-maes in #1641
- modify ldconfig in ubi image so nvidia libraries are on path by @tmckayus in #1644
- Temporarily exclude GB300 from testing by @KyleFromNVIDIA in #1648
- Revert "Temporarily exclude GB300 from testing (#1648)" by @KyleFromNVIDIA in #1651
- remove extra or unnecessary parameters in Python gRPC api by @tmckayus in #1654
- Pin PaPILO to flush empty-row fix from akifcorduk/papilo. by @akifcorduk in #1645
- Fixed 26.08 release notes by @nguidotti in #1665
📖 Documentation
- Update cuOpt MIP positioning by @Sylendran95 in #1387
- Fix FAQ command typos in health-check examples by @jackthepunished in #1389
- docs(grpc): title-case headings, replace ASCII diagrams with PNGs, archive older version URLs by @ramakrishnap-nv in #1420
- added kaminpar license to THIRD_PARTY_LICENSES by @Bubullzz in #1463
- docs: fix NGC container catalog URL by @ramakrishnap-nv in #1470
- Align cuOpt documentation branding and Doxygen configuration by @bdice in #1503
- normalize MILP to MIP in documentation by @tmckayus in #1655
- docs: add Python async gRPC client guide under gRPC remote execution by @tmckayus in #1653
- docs: release notes for 26.08 by @ramakrishnap-nv in #1638
🚀 New Features
- add a Python interface to the C++ grpc asyc client by @tmckayus in #1430
- Implement multi-GPU PDLP by @Bubullzz in #1391
- Add support for sparsity exploitation for SOCs of large dimensionality by @yuwenchen95 in #1468
- Make the post solve info logging optional by @rg20 in #1639
🛠️ Improvements
- Fix version failure in check style for skills by @ramakrishnap-nv in #1271
- Main merge release/26.06.01 by @ramakrishnap-nv in #1273
- Main merge release/26.06 03 by @ramakrishnap-nv in #1296
- Fix skill-validation failures across all skills by @ramakrishnap-nv in #1287
- skills: rename resources/ to references/ by @ramakrishnap-nv in #1301
- skills: add evals/evals.json smoke suite (group A) by @ramakrishnap-nv in #1308
- skills: add evals/evals.json smoke suite by @ramakrishnap-nv in #1302
- Main merge release/26.06 05 by @ramakrishnap-nv in #1318
- skills/cuopt-install:Add eval by @ramakrishnap-nv in #1324
- skills/cuopt-numerical-optimization-api-c: Add eval by @ramakrishnap-nv in #1327
- Rename routing-formulation to cuopt-routing-formulation by @ramakrishnap-nv in #1329
- Rename numerical-optimization-formulation to cuopt-numerical-optimization-formulation by @ramakrishnap-nv in #1328
- skills/cuopt-server-common: Add eval by @ramakrishnap-nv in #1325
- Rename skill-evolution to cuopt-skill-evolution by @ramakrishnap-nv in #1330
- skills/cuopt-server-api-python: update with benchmark details by @ramakrishnap-nv in #1334
- skills/cuopt-numerical-optimization-api-python: update with benchmark details by @ramakrishnap-nv in #1332
- skills/cuopt-routing-api-python: update with benchmark details by @ramakrishnap-nv in #1333
- skills/cuopt-user-rules: update with benchmark details by @ramakrishnap-nv in #1335
- skills/cuopt-numerical-optimization-api-cli: update with benchmark details by @ramakrishnap-nv in #1331
- skills/cuopt-skill-evolution: add eval by @ramakrishnap-nv in #1337
- skills: prep for nvidia/skills catalog onboarding by @ramakrishnap-nv in #1310
- Main merge release/26.06 11 by @ramakrishnap-nv in #1360
- fix(ci): fix configuration for breaking change notification workflow by @jameslamb in #1356
- Main merge release/26.06 12 by @ramakrishnap-nv in #1367
- Main merge release/26.06 14 by @ramakrishnap-nv in #1374
- Add cuopt-multi-objective-exploration skill (Pareto frontier) by @cafzal in #1355
- Remove CUDA whole compilation programming model violations by @robertmaynard in #1347
- ci: nudge multi-objective skill to trigger eval by @ramakrishnap-nv in #1392
- Note dual/sensitivity support per problem type in formulation skill by @cafzal in #1393
- Expose diving hyper parameters by @nguidotti in #1364
- Fix adj_list check bug and improve clique cuts by @akifcorduk in #1386
- evals: add benchmark evals for cuopt-developer skill by @ramakrishnap-nv in #1399
- Use LP format reader throughout unit tests by @mlubin in #1410
- Correct dual-value scope to LP/QP in numerical-optimization API skills by @cafzal in #1408
- evals: add 3 C API evals for cuopt-numerical-optimization-api-c skill by @ramakrishnap-nv in #1417
- refactor: switch to
rapids-artifact-namefor consistent artifact naming by @gforsyth in #1411 - evals: add 3 Python API evals for cuopt-numerical-optimization-api-python skill by @ramakrishnap-nv in #1418
- ci: update nightly run branch from release/26.06 to release/26.08 by @ramakrishnap-nv in #1424
- Vector length diving + Farkas diving by @nguidotti in #1401
- Remove pinned host memory from barrier solver by @rg20 in #1321
- Read epsilon-constraint duals as frontier slope / exchange rate in multi-objective skill by @cafzal in #1406
- Build and test with CUDA 13.3.0 by @bdice in #1409
- skills(multi-objective): add blank line after frontmatter to enable skill signing by @ramakrishnap-nv in #1433
- evals: add 3 formulation evals for cuopt-numerical-optimization-formulation skill by @ramakrishnap-nv in #1398
- skills: allow user-space env setup; refuse only sudo/system-level ops by @ramakrishnap-nv in #1448
- Correct quadratic-constraint claims in formulation skill by @cafzal in #1407
- Use main shared-workflows branch by @bdice in #1455
- ci: disable pulp test_infeasible_2 pending fix in #1115 by @ramakrishnap-nv in #1454
- ci: trigger numerical optimization skill evals by @ramakrishnap-nv in #1453
- Restore resource_cast memory limit check by @bdice in #1231
- ci: reduce wheel-tests-cuopt-server matrix to 1 job per CUDA major by @ramakrishnap-nv in #1457
- Add latent-objective recognition eval to multi-objective skill by @cafzal in #1442
- Update CuPy and NumPy dependency specs by @bdice in #1456
- skills(multi-objective): trigger re-eval after adding eval-005 by @ramakrishnap-nv in #1460
- ci: remove dataset downloads from Python test scripts by @ramakrishnap-nv in #1458
- chore(ci): exclude NVSkills-generated files from trailing-whitespace hook by @ramakrishnap-nv in #1465
- Refactor: mathematical_optimization namespace by @mlubin in #1446
- build(deps): bump msgpack from 1.1.2 to 1.2.1 by @ramakrishnap-nv in #1464
- Post sticky PR comment summarizing CI test job failures by @ramakrishnap-nv in #1412
- skills(cuopt-user-rules): update for mathematical_optimization namespace refactor by @ramakrishnap-nv in #1480
- skills(cuopt-numerical-optimization-formulation): update for mathematical_optimization namespace refactor by @ramakrishnap-nv in #1479
- skills(cuopt-numerical-optimization-api-c): update for mathematical_optimization namespace refactor by @ramakrishnap-nv in #1478
- skills(cuopt-developer): update for mathematical_optimization namespace refactor by @ramakrishnap-nv in #1475
- skills(cuopt-multi-objective-exploration): update for mathematical_optimization namespace refactor by @ramakrishnap-nv in #1477
- skills(cuopt-install): update for mathematical_optimization namespace refactor by @ramakrishnap-nv in #1476
- MIP log cleanup by @nguidotti in #1402
- Zero Half(Odd-Cycle) cuts by @akifcorduk in #1428
- ci: remove lean CI matrix from pr.yaml by @ramakrishnap-nv in #1474
- skills: remove redundant concept-only skills by @ramakrishnap-nv in #1487
- Guard CuPy CTK extra for wheel metadata by @bdice in #1469
- refactor: promote shared primitives to mathematical_optimization by @mlubin in #1481
- test: clean up gRPC server process groups by @mlubin in #1492
- Improve cuopt-numerical-optimization-api-cli by @mlubin in #1495
- ci(test): enable pytest-xdist for cuopt Python tests by @ramakrishnap-nv in #1486
- Papilo primal/dual crush by @aliceb-nv in #1104
- Disable coverage in cuOpt.jl tests by @mlubin in #1504
- Update conventions for container indexing and casting by @mlubin in #1505
- feat(docker): add UBI10 container image for FIPS compliance by @ramakrishnap-nv in #1499
- fix(docker): use Docker Hub for UBI10 CUDA base images by @ramakrishnap-nv in #1511
- fix(ci): restrict UBI10 build, test, and manifest to CUDA 13.x only by @ramakrishnap-nv in #1515
- fix(grpc): drain all remaining log lines at job completion in StreamLogs by @ramakrishnap-nv in #1508
- ci: add multi-GPU (NCCL) cpp test job on 2-GPU runner by @ramakrishnap-nv in #1519
- style(cpp): drop gratuitous static_cast<size_t> on container subscripts by @mlubin in #1506
- Constrain server data file paths by @fallintoplace in #1423
- ci(test): fix grpc server GPU-memory leak and run cuopt tests in parallel by @ramakrishnap-nv in #1512
- Update RAPIDS.cmake to log source of rapids-cmake by @arhag23 in #1521
- remove 'cuda-python' dependency, test against oldest numba and numpy by @jameslamb in #1520
- Empty commit to trigger new builds due to RAFT 3052 ABI breakage by @divyegala in #1542
- make selection of CPU or GPU memory for problem automatic in C api by @tmckayus in #1522
- Accept numpy and pandas inputs in routing Python API by @ramakrishnap-nv in #1546
- Add a log-once macro by @aliceb-nv in #1545
- Removed
b_bartest for Gomory Cuts by @nguidotti in #1544 - Python grpc async api allow arguments for TLS by @tmckayus in #1525
- cuopt-skill-evolution: add low-maintenance/fail-loud design rule by @ramakrishnap-nv in #1561
- Clamp crushed solutions to dual-reduced bounds by @aliceb-nv in #1568
- Increase cuSparse version requierment for SpMVOp from 12.7 to 12.8 by @Bubullzz in #1576
- Conflict Graph Improvements: Use non-binary rows for and add probing implications to CG by @akifcorduk in #1569
- ci: enable codecov for Python test coverage by @ramakrishnap-nv in #1575
- Recursive RINS by @nguidotti in #1482
- Fast MPS parser for free-format MPS files by @aliceb-nv in #1429
- Routing Phase 3: export the recorded problem to a host representation by @ramakrishnap-nv in #1583
- change semantics of problem construction in cuOptReadProblem by @tmckayus in #1559
- Make cuopt.routing importable without a GPU by @ramakrishnap-nv in #1591
- Add front-completion workflow to cuopt-multi-objective-exploration skill by @cafzal in #1550
- fix(deps): add cufile to test dependencies for cuda12 by @gforsyth in #1553
- fix(build): pin RAPIDS_BRANCH to branch-26.08 by @ramakrishnap-nv in #1599
- tests: retire correctness/regression tests covered by C++ gtests by @ramakrishnap-nv in #1461
- fix(docker): patch UBI10 High CVEs — dnf update + remove vim by @ramakrishnap-nv in #1602
- extend getters on C API by @tmckayus in #1549
- fix(docker): patch High CVEs in UBI10 and Ubuntu container images by @ramakrishnap-nv in #1611
- developer skills: size PARALLEL_LEVEL from cgroup limits in containers by @mlubin in #1614
- Print logs when exception is caught by @akifcorduk in #1590
- fix(quality): resolve SonarQube S3490 and S1186 critical findings by @ramakrishnap-nv in #1609
- docs(skills): add GitHub etiquette rules and evals to cuopt-developer by @ramakrishnap-nv in #1619
- refactor(tests): link internal tests against cuopt_static by @ramakrishnap-nv in #1581
- enforce 'yamllint' checks by @jameslamb in #1613
- test routing null matrix validation by @aycsi in #1220
- fix(security): resolve SonarQube critical/high/blocker security findings by @ramakrishnap-nv in #1608
- fix(docker): don't override python3 alternative in UBI10 image by @ramakrishnap-nv in #1634
- test(mip): Update incumbent callback API test to use a bit more complex problem by @ramakrishnap-nv in #1649
- Include Q matrix in Ruiz scale computations by @rg20 in #1643
- skills(cuopt-multi-objective-exploration): trigger CI eval by @ramakrishnap-nv in #1642
- Reduce concurrent LP host memory footprint by @hlinsen in #1640
New Contributors
- @cafzal made their first contribution in #1355
- @Sylendran95 made their first contribution in #1387
- @jackthepunished made their first contribution in #1389
- @fallintoplace made their first contribution in #1423
- @arhag23 made their first contribution in #1521
- @divyegala made their first contribution in #1542
Full Changelog: v26.08.00a...v26.08.00