From 65fa99732c9a890a632c99a720ce1bff06026b79 Mon Sep 17 00:00:00 2001 From: Hugo Linsenmaier Date: Mon, 13 Oct 2025 14:20:30 -0700 Subject: [PATCH 1/2] Fix return on size mismatch in Barrier --- cpp/src/dual_simplex/sparse_cholesky.cuh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cpp/src/dual_simplex/sparse_cholesky.cuh b/cpp/src/dual_simplex/sparse_cholesky.cuh index 7e792998fd..bedeb91ff0 100644 --- a/cpp/src/dual_simplex/sparse_cholesky.cuh +++ b/cpp/src/dual_simplex/sparse_cholesky.cuh @@ -498,7 +498,7 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { auto d_nnz = Arow.row_start.element(Arow.m, Arow.row_start.stream()); if (nnz != d_nnz) { settings_.log.printf("Error: nnz %d != A_in.col_start[A_in.n] %d\n", nnz, d_nnz); - exit(1); + return -1; } CUDSS_CALL_AND_CHECK( @@ -568,7 +568,7 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { #endif if (A_in.n != n) { printf("Analyze input does not match size %d != %d\n", A_in.n, n); - exit(1); + return -1; } nnz = A_in.col_start[A_in.n]; @@ -669,7 +669,7 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { if (nnz != A_in.col_start[A_in.n]) { settings_.log.printf( "Error: nnz %d != A_in.col_start[A_in.n] %d\n", nnz, A_in.col_start[A_in.n]); - exit(1); + return -1; } CUDA_CALL_AND_CHECK( @@ -741,11 +741,11 @@ class sparse_cholesky_cudss_t : public sparse_cholesky_base_t { handle_ptr_->get_stream().synchronize(); if (static_cast(b.size()) != n) { settings_.log.printf("Error: b.size() %d != n %d\n", b.size(), n); - exit(1); + return -1; } if (static_cast(x.size()) != n) { settings_.log.printf("Error: x.size() %d != n %d\n", x.size(), n); - exit(1); + return -1; } CUDSS_CALL_AND_CHECK( From bdee0a9b0fee6d8d5e158c5574d5fd5eeac56732 Mon Sep 17 00:00:00 2001 From: Ramakrishna Prabhu Date: Mon, 13 Oct 2025 21:33:08 -0500 Subject: [PATCH 2/2] handle corner case with zero sized arrays --- python/cuopt/cuopt/linear_programming/problem.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/python/cuopt/cuopt/linear_programming/problem.py b/python/cuopt/cuopt/linear_programming/problem.py index 40c80548c4..25fc8880a4 100644 --- a/python/cuopt/cuopt/linear_programming/problem.py +++ b/python/cuopt/cuopt/linear_programming/problem.py @@ -1232,13 +1232,17 @@ def populate_solution(self, solution): if len(primal_sol) > 0: for var in self.vars: var.Value = primal_sol[var.index] - if not IsMIP: + if ( + not IsMIP + and reduced_cost is not None + and len(reduced_cost) > 0 + ): var.ReducedCost = reduced_cost[var.index] dual_sol = None if not IsMIP: dual_sol = solution.get_dual_solution() for i, constr in enumerate(self.constrs): - if dual_sol is not None: + if dual_sol is not None and len(dual_sol) > 0: constr.DualValue = dual_sol[i] constr.Slack = constr.compute_slack() self.ObjValue = self.Obj.getValue()