From aa598c2c3e5a8a4909fdce7b67ec9a82f6d372b2 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 13:49:48 -0500 Subject: [PATCH 01/14] fix(build): pin RAPIDS_BRANCH to branch-26.08 RAPIDS main moved to 26.10 after burndown; local builds were pulling rapids-cmake from RAPIDS main (26.10) while the conda env has 26.08 packages, breaking the build. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu --- RAPIDS_BRANCH | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RAPIDS_BRANCH b/RAPIDS_BRANCH index ba2906d066..2b265dae94 100644 --- a/RAPIDS_BRANCH +++ b/RAPIDS_BRANCH @@ -1 +1 @@ -main +branch-26.08 From c67db7a957be0f59c006ff0a106d5be351d99152 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 14:11:34 -0500 Subject: [PATCH 02/14] fix(build): use release/26.08 branch for rapids-cmake rapids-cmake uses release/X.Y branch naming, not branch-X.Y. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu --- RAPIDS_BRANCH | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RAPIDS_BRANCH b/RAPIDS_BRANCH index 2b265dae94..8ce6b73837 100644 --- a/RAPIDS_BRANCH +++ b/RAPIDS_BRANCH @@ -1 +1 @@ -branch-26.08 +release/26.08 From d81ce44821f5e5f37cc57983497ac26da613410e Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 14:29:39 -0500 Subject: [PATCH 03/14] fix(ci): pin shared-workflows to release/26.08 rapidsai/shared-workflows main moved to 26.10, causing wheel builds to use 26.10 CI containers. Pin to release/26.08 to match the RAPIDS_BRANCH. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu --- .github/workflows/build.yaml | 24 ++++++++-------- .github/workflows/multi_gpu_cpp_test.yaml | 2 +- .github/workflows/pr.yaml | 28 +++++++++---------- .github/workflows/test.yaml | 10 +++---- .../trigger-breaking-change-alert.yaml | 2 +- 5 files changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c11938346a..a3bb5d3fd6 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -53,7 +53,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -69,7 +69,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -84,7 +84,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-upload-packages.yaml@release/26.08 secrets: CONDA_RAPIDSAI_NIGHTLY_TOKEN: ${{ secrets.CONDA_RAPIDSAI_NIGHTLY_TOKEN }} CONDA_RAPIDSAI_TOKEN: ${{ secrets.CONDA_RAPIDSAI_TOKEN }} @@ -101,7 +101,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -119,7 +119,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.08 secrets: CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN: ${{ secrets.CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN }} RAPIDSAI_PYPI_TOKEN: ${{ secrets.RAPIDSAI_PYPI_TOKEN }} @@ -140,7 +140,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -157,7 +157,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.08 secrets: CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN: ${{ secrets.CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN }} RAPIDSAI_PYPI_TOKEN: ${{ secrets.RAPIDSAI_PYPI_TOKEN }} @@ -177,7 +177,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -197,7 +197,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.08 secrets: CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN: ${{ secrets.CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN }} RAPIDSAI_PYPI_TOKEN: ${{ secrets.RAPIDSAI_PYPI_TOKEN }} @@ -218,7 +218,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} node_type: "gpu-l4-latest-1" @@ -238,7 +238,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: ${{ inputs.build_type || 'branch' }} branch: ${{ inputs.branch }} @@ -259,7 +259,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@release/26.08 secrets: CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN: ${{ secrets.CONDA_RAPIDSAI_WHEELS_NIGHTLY_TOKEN }} RAPIDSAI_PYPI_TOKEN: ${{ secrets.RAPIDSAI_PYPI_TOKEN }} diff --git a/.github/workflows/multi_gpu_cpp_test.yaml b/.github/workflows/multi_gpu_cpp_test.yaml index 515be4a330..00983baff2 100644 --- a/.github/workflows/multi_gpu_cpp_test.yaml +++ b/.github/workflows/multi_gpu_cpp_test.yaml @@ -54,7 +54,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index dbdf0993b5..939fb15d95 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -36,7 +36,7 @@ jobs: - pr-test-summary permissions: contents: read - uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/pr-builder.yaml@release/26.08 if: always() with: needs: ${{ toJSON(needs) }} @@ -64,7 +64,7 @@ jobs: contents: read packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/changed-files.yaml@release/26.08 with: files_yaml: | build_docs: @@ -331,7 +331,7 @@ jobs: checks: permissions: contents: read - uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/checks.yaml@release/26.08 with: enable_check_generated_files: false conda-cpp-build: @@ -348,7 +348,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-build.yaml@release/26.08 with: build_type: pull-request script: ci/build_cpp.sh @@ -360,7 +360,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@release/26.08 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_cpp with: build_type: pull-request @@ -399,7 +399,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-python-build.yaml@release/26.08 with: build_type: pull-request script: ci/build_python.sh @@ -411,7 +411,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@release/26.08 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_conda with: build_type: pull-request @@ -428,7 +428,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 if: fromJSON(needs.changed-files.outputs.changed_file_groups).build_docs with: build_type: pull-request @@ -448,7 +448,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: # build for every combination of arch and CUDA version, but only for the latest Python matrix_filter: ${{ needs.compute-matrix-filters.outputs.libcuopt_filter }} @@ -466,7 +466,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: pull-request script: ci/build_wheel_cuopt.sh @@ -480,7 +480,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.08 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request @@ -502,7 +502,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: pull-request script: ci/build_wheel_cuopt_server.sh @@ -521,7 +521,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@release/26.08 with: build_type: pull-request script: ci/build_wheel_cuopt_sh_client.sh @@ -539,7 +539,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.08 if: fromJSON(needs.changed-files.outputs.changed_file_groups).test_python_wheels with: build_type: pull-request diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 3158118324..d991c15fc7 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -35,7 +35,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-cpp-tests.yaml@release/26.08 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -57,7 +57,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/conda-python-tests.yaml@release/26.08 with: run_codecov: false build_type: ${{ inputs.build_type }} @@ -80,7 +80,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.08 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -102,7 +102,7 @@ jobs: id-token: write packages: read pull-requests: read - uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/wheels-test.yaml@release/26.08 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} @@ -125,7 +125,7 @@ jobs: packages: read pull-requests: read secrets: inherit # zizmor: ignore[secrets-inherit] - uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/custom-job.yaml@release/26.08 with: build_type: ${{ inputs.build_type }} branch: ${{ inputs.branch }} diff --git a/.github/workflows/trigger-breaking-change-alert.yaml b/.github/workflows/trigger-breaking-change-alert.yaml index 7a8cf1b8e8..6a1dd9f939 100644 --- a/.github/workflows/trigger-breaking-change-alert.yaml +++ b/.github/workflows/trigger-breaking-change-alert.yaml @@ -21,7 +21,7 @@ jobs: if: contains(github.event.pull_request.labels.*.name, 'breaking') permissions: contents: read - uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@main + uses: rapidsai/shared-workflows/.github/workflows/breaking-change-alert.yaml@release/26.08 secrets: slack-webhook-url: ${{ secrets.NV_SLACK_BREAKING_CHANGE_NOTIFIER_APP }} with: From cb918edc6276299aa8fdec31947542ec6a38ea9b Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 14:33:40 -0500 Subject: [PATCH 04/14] docs: update README install versions to 26.08 Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1a8c9c4fee..fbb5b46486 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ For CUDA 12.x: pip install \ --extra-index-url=https://pypi.nvidia.com \ nvidia-cuda-runtime-cu12==12.9.* \ - cuopt-server-cu12==26.6.* cuopt-sh-client==26.6.* + cuopt-server-cu12==26.08.* cuopt-sh-client==26.08.* ``` Development wheels are available as nightlies, please update `--extra-index-url` to `https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/` to install latest nightly packages. @@ -101,7 +101,7 @@ Development wheels are available as nightlies, please update `--extra-index-url` pip install --pre \ --extra-index-url=https://pypi.nvidia.com \ --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ \ - cuopt-server-cu12==26.6.* cuopt-sh-client==26.6.* + cuopt-server-cu12==26.08.* cuopt-sh-client==26.08.* ``` For CUDA 13.x: @@ -109,7 +109,7 @@ For CUDA 13.x: ```bash pip install \ --extra-index-url=https://pypi.nvidia.com \ - cuopt-server-cu13==26.6.* cuopt-sh-client==26.6.* + cuopt-server-cu13==26.08.* cuopt-sh-client==26.08.* ``` Development wheels are available as nightlies, please update `--extra-index-url` to `https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/` to install latest nightly packages. @@ -117,7 +117,7 @@ Development wheels are available as nightlies, please update `--extra-index-url` pip install --pre \ --extra-index-url=https://pypi.nvidia.com \ --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple/ \ - cuopt-server-cu13==26.6.* cuopt-sh-client==26.6.* + cuopt-server-cu13==26.08.* cuopt-sh-client==26.08.* ``` @@ -128,7 +128,7 @@ cuOpt can be installed with conda (via [miniforge](https://github.com/conda-forg All other dependencies are installed automatically when `cuopt-server` and `cuopt-sh-client` are installed. ```bash -conda install -c rapidsai -c conda-forge -c nvidia cuopt-server=26.06.* cuopt-sh-client=26.06.* +conda install -c rapidsai -c conda-forge -c nvidia cuopt-server=26.08.* cuopt-sh-client=26.08.* ``` We also provide [nightly conda packages](https://anaconda.org/rapidsai-nightly) built from the HEAD From c9ae05a25533ef59bff70dd0a2da3afcd48d0782 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 15:23:59 -0500 Subject: [PATCH 05/14] fix(build): replace rmm::device_uvector forward declaration with include RMM defines device_uvector inside namespace RMM_NAMESPACE, which expands to `__attribute__((visibility("default"))) rmm` on GCC/Linux. A forward declaration in plain `namespace rmm {}` creates a second, distinct class visible to NVCC, causing '"rmm::device_uvector" is ambiguous' errors. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu --- cpp/src/pdlp/utilities/problem_checking.cuh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cpp/src/pdlp/utilities/problem_checking.cuh b/cpp/src/pdlp/utilities/problem_checking.cuh index 217080356c..5dc74808a2 100644 --- a/cpp/src/pdlp/utilities/problem_checking.cuh +++ b/cpp/src/pdlp/utilities/problem_checking.cuh @@ -10,10 +10,7 @@ #include #include -namespace rmm { -template -class device_uvector; -} // namespace rmm +#include namespace cuopt::mathematical_optimization { From 18624637fcc22fe40fd81b25baf50a107549496d Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 15:25:14 -0500 Subject: [PATCH 06/14] Revert "fix(build): replace rmm::device_uvector forward declaration with include" This reverts commit c9ae05a25533ef59bff70dd0a2da3afcd48d0782. Signed-off-by: Ramakrishna Prabhu --- cpp/src/pdlp/utilities/problem_checking.cuh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/src/pdlp/utilities/problem_checking.cuh b/cpp/src/pdlp/utilities/problem_checking.cuh index 5dc74808a2..217080356c 100644 --- a/cpp/src/pdlp/utilities/problem_checking.cuh +++ b/cpp/src/pdlp/utilities/problem_checking.cuh @@ -10,7 +10,10 @@ #include #include -#include +namespace rmm { +template +class device_uvector; +} // namespace rmm namespace cuopt::mathematical_optimization { From a6c08e41e222c9a7b7a95188ab9a62e2eb72e5fd Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 15:30:18 -0500 Subject: [PATCH 07/14] fix(build): replace rmm::device_uvector forward declaration with include rmm 26.08.00a61 introduced inline namespace ABI versioning: device_uvector now lives in rmm::_RMM_26_8 (exposed as rmm::device_uvector via inline namespace). A plain-namespace forward declaration creates a second, distinct rmm::device_uvector, causing '"rmm::device_uvector" is ambiguous' errors in NVCC. Replace with the full header include. Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu --- cpp/src/pdlp/utilities/problem_checking.cuh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cpp/src/pdlp/utilities/problem_checking.cuh b/cpp/src/pdlp/utilities/problem_checking.cuh index 217080356c..5dc74808a2 100644 --- a/cpp/src/pdlp/utilities/problem_checking.cuh +++ b/cpp/src/pdlp/utilities/problem_checking.cuh @@ -10,10 +10,7 @@ #include #include -namespace rmm { -template -class device_uvector; -} // namespace rmm +#include namespace cuopt::mathematical_optimization { From d2000b369bc5a5db75546f0e63382ddf5855e744 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 16:59:58 -0500 Subject: [PATCH 08/14] ci: retrigger CI Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu From 8f611523fc85edc79916fe5c72559fa878d8cce4 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Tue, 21 Jul 2026 21:39:41 -0500 Subject: [PATCH 09/14] ci: retrigger CI Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: Ramakrishna Prabhu From 7050aaddacd692ee2f813904d4b950e1b99b74cc Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Tue, 21 Jul 2026 16:50:24 +0200 Subject: [PATCH 10/14] fix Qc test and added canonicalization --- cpp/src/io/experimental_mps_fast/fast_parser.cpp | 3 +++ cpp/src/io/mps_parser.cpp | 6 ++++++ .../experimental_mps_fast/fast_parser_edge_test.cpp | 1 + 3 files changed, 10 insertions(+) diff --git a/cpp/src/io/experimental_mps_fast/fast_parser.cpp b/cpp/src/io/experimental_mps_fast/fast_parser.cpp index 4b74943a1d..077fcefc17 100644 --- a/cpp/src/io/experimental_mps_fast/fast_parser.cpp +++ b/cpp/src/io/experimental_mps_fast/fast_parser.cpp @@ -42,6 +42,7 @@ #include #include +#include #define MPS_FAST_COMPACT_ROW_HASH #define MPS_FAST_THP_PREFAULT @@ -2769,6 +2770,7 @@ static void finalize_qcmatrix_constraints(parse_state_t& state) return std::get<1>(ea) < std::get<1>(eb); }); + // Match reference ingest: canonicalize MPS symmetric halves to upper-triangular COO. qc.rows.reserve(block.entries.size()); qc.cols.reserve(block.entries.size()); qc.vals.reserve(block.entries.size()); @@ -2778,6 +2780,7 @@ static void finalize_qcmatrix_constraints(parse_state_t& state) qc.cols.push_back(col); qc.vals.push_back(val); } + canonicalize_coo_matrix(qc.rows, qc.cols, qc.vals); state.problem.quadratic_constraints_.push_back(std::move(qc)); } diff --git a/cpp/src/io/mps_parser.cpp b/cpp/src/io/mps_parser.cpp index aed892713b..b9423d81e6 100644 --- a/cpp/src/io/mps_parser.cpp +++ b/cpp/src/io/mps_parser.cpp @@ -1717,5 +1717,11 @@ template void canonicalize_coo_matrix(std::vector&, template void canonicalize_coo_matrix(std::vector&, std::vector&, std::vector&); +template void canonicalize_coo_matrix(std::vector&, + std::vector&, + std::vector&); +template void canonicalize_coo_matrix(std::vector&, + std::vector&, + std::vector&); } // namespace cuopt::mathematical_optimization::io diff --git a/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp b/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp index 69cc29a0d3..6427e2b2b7 100644 --- a/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp +++ b/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp @@ -853,6 +853,7 @@ TEST(FastMpsParserEdgeTest, QcMatrixRowsMatchReferenceBitwise) "QCMATRIX QC1\n" " X1 X1 1.25\n" " X1 X2 -2.5\n" + " X2 X1 -2.5\n" "QCMATRIX QC2\n" " X2 X2 3.75\n" "ENDATA\n"); From 97f14e3c413657a479ee563d890bbf0ed7510e5b Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Tue, 21 Jul 2026 17:03:15 +0200 Subject: [PATCH 11/14] style --- cpp/src/io/experimental_mps_fast/fast_parser.cpp | 2 +- .../experimental_mps_fast/fast_parser_edge_test.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/src/io/experimental_mps_fast/fast_parser.cpp b/cpp/src/io/experimental_mps_fast/fast_parser.cpp index 077fcefc17..1135e0fc1a 100644 --- a/cpp/src/io/experimental_mps_fast/fast_parser.cpp +++ b/cpp/src/io/experimental_mps_fast/fast_parser.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // reserved. SPDX-License-Identifier: Apache-2.0 #include "fast_parser.hpp" diff --git a/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp b/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp index 6427e2b2b7..48fd77ae35 100644 --- a/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp +++ b/cpp/tests/linear_programming/experimental_mps_fast/fast_parser_edge_test.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 #include "fast_parser.hpp" From 7ba8b4affbfe9730666fae3cd5e170442fc3bcf7 Mon Sep 17 00:00:00 2001 From: Bulle Mostovoi Date: Tue, 21 Jul 2026 19:22:36 +0200 Subject: [PATCH 12/14] added check symetrical off diagonal --- cpp/src/io/experimental_mps_fast/fast_parser.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/src/io/experimental_mps_fast/fast_parser.cpp b/cpp/src/io/experimental_mps_fast/fast_parser.cpp index 1135e0fc1a..c6a967a139 100644 --- a/cpp/src/io/experimental_mps_fast/fast_parser.cpp +++ b/cpp/src/io/experimental_mps_fast/fast_parser.cpp @@ -2780,6 +2780,7 @@ static void finalize_qcmatrix_constraints(parse_state_t& state) qc.cols.push_back(col); qc.vals.push_back(val); } + check_symmetric_offdiagonal_pairs(qc.rows, qc.cols, qc.vals); canonicalize_coo_matrix(qc.rows, qc.cols, qc.vals); state.problem.quadratic_constraints_.push_back(std::move(qc)); } From c21f7a80193bbb1a53af20179a2125704487dd83 Mon Sep 17 00:00:00 2001 From: Alice Boucher Date: Tue, 21 Jul 2026 04:25:52 -0700 Subject: [PATCH 13/14] fix libomp ABI bug --- cpp/src/branch_and_bound/branch_and_bound.cpp | 11 ++++++++--- .../test_incumbent_callbacks.py | 19 ++----------------- .../linear_programming/test_lp_solver.py | 7 ------- skills/cuopt-developer/SKILL.md | 6 ++++++ 4 files changed, 16 insertions(+), 27 deletions(-) diff --git a/cpp/src/branch_and_bound/branch_and_bound.cpp b/cpp/src/branch_and_bound/branch_and_bound.cpp index 4b707533ad..0e39fe4a50 100644 --- a/cpp/src/branch_and_bound/branch_and_bound.cpp +++ b/cpp/src/branch_and_bound/branch_and_bound.cpp @@ -2168,9 +2168,14 @@ bool branch_and_bound_t::launch_rins_worker(const std::vector& so worker->set_active(); worker->search_strategy = search_strategy_t::SUBMIP; -#pragma omp task priority(CUOPT_DEFAULT_TASK_PRIORITY) affinity(worker) \ - firstprivate(worker, sol) if (!settings_.inside_submip) - rins(worker, sol); + if (settings_.inside_submip) { + // LLVM libomp's GOMP compatibility path skips GCC's firstprivate copy + // function for included tasks. + rins(worker, sol); + } else { +#pragma omp task priority(CUOPT_DEFAULT_TASK_PRIORITY) affinity(worker) firstprivate(worker, sol) + rins(worker, sol); + } return true; } diff --git a/python/cuopt/cuopt/tests/linear_programming/test_incumbent_callbacks.py b/python/cuopt/cuopt/tests/linear_programming/test_incumbent_callbacks.py index 077f661b93..7277794da3 100644 --- a/python/cuopt/cuopt/tests/linear_programming/test_incumbent_callbacks.py +++ b/python/cuopt/cuopt/tests/linear_programming/test_incumbent_callbacks.py @@ -110,21 +110,9 @@ def set_solution( ) -_BAD_ARRAY_SKIP = pytest.mark.skip( - reason=( - "Temporarily disabled: aborts with std::bad_array_new_length " - "in wheel builds after the fast MPS parser landed (#1429). " - "Tracked in https://github.com/NVIDIA/cuopt/issues/1592." - ) -) - - @pytest.mark.parametrize( "file_name", - [ - pytest.param("/mip/swath1.mps", marks=_BAD_ARRAY_SKIP), - pytest.param("/mip/neos5-free-bound.mps", marks=_BAD_ARRAY_SKIP), - ], + ["/mip/swath1.mps", "/mip/neos5-free-bound.mps"], ) def test_incumbent_get_callback(file_name): _run_incumbent_solver_callback(file_name, include_set_callback=False) @@ -132,10 +120,7 @@ def test_incumbent_get_callback(file_name): @pytest.mark.parametrize( "file_name", - [ - pytest.param("/mip/swath1.mps", marks=_BAD_ARRAY_SKIP), - pytest.param("/mip/neos5-free-bound.mps", marks=_BAD_ARRAY_SKIP), - ], + ["/mip/swath1.mps", "/mip/neos5-free-bound.mps"], ) def test_incumbent_get_set_callback(file_name): _run_incumbent_solver_callback(file_name, include_set_callback=True) diff --git a/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py b/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py index a303e1d602..7d9b611124 100644 --- a/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py +++ b/python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py @@ -676,13 +676,6 @@ def test_solved_by(): assert solution.get_solved_by() == SolverMethod.Barrier -@pytest.mark.skip( - reason=( - "Temporarily disabled: swath1 aborts with std::bad_array_new_length " - "in wheel builds after the fast MPS parser landed (#1429). " - "Tracked in https://github.com/NVIDIA/cuopt/issues/1592." - ) -) def test_heuristics_only(): file_path = RAPIDS_DATASET_ROOT_DIR + "/mip/swath1.mps" data_model_obj = Read(file_path) diff --git a/skills/cuopt-developer/SKILL.md b/skills/cuopt-developer/SKILL.md index 5028fb657a..f1b9335f68 100644 --- a/skills/cuopt-developer/SKILL.md +++ b/skills/cuopt-developer/SKILL.md @@ -223,6 +223,12 @@ For pre-commit setup, DCO sign-off (`git commit -s`), the fork-based PR workflow For C++ naming (`snake_case`, `d_`/`h_` prefixes, `_t` suffix), file extensions (`.hpp`/`.cpp`/`.cu`/`.cuh` and which compiler each uses), include order, Python style, error handling (`CUOPT_EXPECTS`, `RAFT_CUDA_TRY`), memory management (RMM patterns, no raw `new`/`delete`), and test-impact rules, see [references/conventions.md](references/conventions.md). +## OpenMP task/runtime compatibility + +Treat `#pragma omp task if(...) firstprivate(...)` with a non-trivial C++ capture as runtime-ABI-sensitive. In affected LLVM libomp versions, the GCC `GOMP_task` compatibility path skips the GCC copy function for an included (`if(false)`) task, so the task body can observe an unconstructed object. Branch explicitly instead: create the OpenMP task only when deferral is wanted, and call the body synchronously otherwise. + +When diagnosing OpenMP-only failures, test compiler/runtime pairs separately. A Clang + libomp pass exercises the `__kmpc_*` ABI and does not cover GCC + libomp's `GOMP_*` path; reduce suspicious cases to a direct runtime-ABI probe before attributing them to solver logic. + ## Troubleshooting & CI For build/test pitfalls (Cython rebuild, OOM, CUDA driver mismatch, missing `nvcc`) and CI failure diagnostics (style checks, DCO failures, dependency drift), see [references/troubleshooting.md](references/troubleshooting.md). From 67c5df3341dc391751ef9d42b5e21b7c63aeaa1d Mon Sep 17 00:00:00 2001 From: Alice Boucher Date: Wed, 22 Jul 2026 01:00:11 -0700 Subject: [PATCH 14/14] missing instanciation --- cpp/src/io/mps_parser.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cpp/src/io/mps_parser.cpp b/cpp/src/io/mps_parser.cpp index b9423d81e6..89ee8ad615 100644 --- a/cpp/src/io/mps_parser.cpp +++ b/cpp/src/io/mps_parser.cpp @@ -1711,6 +1711,19 @@ template class mps_parser_t; template class mps_parser_t; +template void check_symmetric_offdiagonal_pairs(const std::vector&, + const std::vector&, + const std::vector&); +template void check_symmetric_offdiagonal_pairs(const std::vector&, + const std::vector&, + const std::vector&); +template void check_symmetric_offdiagonal_pairs(const std::vector&, + const std::vector&, + const std::vector&); +template void check_symmetric_offdiagonal_pairs(const std::vector&, + const std::vector&, + const std::vector&); + template void canonicalize_coo_matrix(std::vector&, std::vector&, std::vector&);