Skip to content

Conversation

@aliceb-nv
Copy link
Contributor

3rd party APIs expect problems with crossing bounds to be treated as infeasible by the solver.
This PR replaces the previous behavior (exception on crossing bounds in input problem) to align accordingly.
closes #260

@aliceb-nv aliceb-nv added this to the 25.10 milestone Aug 29, 2025
@aliceb-nv aliceb-nv requested a review from a team as a code owner August 29, 2025 15:51
@aliceb-nv aliceb-nv requested review from kaatish and nguidotti August 29, 2025 15:51
@aliceb-nv aliceb-nv added bug Something isn't working non-breaking Introduces a non-breaking change labels Aug 29, 2025
jameslamb and others added 2 commits September 1, 2025 09:19
)

Contributes to rapidsai/build-planning#208 and #294, by doing some of the pre-work to support CUDA 13

* updates from GCC 13 to GCC 14 (ref: rapidsai/build-planning#188)
* consolidates some dependency groups in `dependencies.yaml` marked with `cuda: "12.*"` that also should apply for CUDA 13

Other small packaging / CI changes:

* updates to latest versions of all RAPIDS `pre-commit` hooks
  - *including the new `--strict` flag for `rapids-dependency-file-generator` from rapidsai/dependency-file-generator#163
* removes empty `conda/recipes/cuopt-sh-client/conda_build_config.yaml`

## Issue

#294

Authors:
  - James Lamb (https://github.com/jameslamb)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #358
@aliceb-nv aliceb-nv requested a review from a team as a code owner September 1, 2025 09:19
@aliceb-nv aliceb-nv requested a review from AyodeAwe September 1, 2025 09:19
@aliceb-nv aliceb-nv removed request for a team and AyodeAwe September 1, 2025 09:27
@github-actions
Copy link

github-actions bot commented Sep 9, 2025

🔔 Hi @anandhkb, this pull request has had no activity for 7 days. Please update or let us know if it can be closed. Thank you!

If this is an "epic" issue, then please add the "epic" label to this issue.
If it is a PR and not ready for review, then please convert this to draft.
If you just want to switch off this notification, then use the "skip inactivity reminder" label.

error_type_t::ValidationError,
"MPS Parser Internal Error - Please contact cuOpt team");
if (variable_lower_bounds[i] > variable_upper_bounds[i]) {
printf("WARNING: Variable %d has crossing bounds: %f > %f\n",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is logger not suitable here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't link against rapids_logger in libmps_parser iirc

problem_checking_t<i_t, f_t>::check_initial_solution_representation(op_problem, settings);

// Check for crossing bounds. Return infeasible if there are any
if (problem_checking_t<i_t, f_t>::has_crossing_bounds(op_problem)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There may be some unset vars which we set in problem constructor. I think this should come after the problem cosntructor.

problem_checking_t<i_t, f_t>::check_initial_solution_representation(op_problem, settings);

// Check for crossing bounds. Return infeasible if there are any
if (problem_checking_t<i_t, f_t>::has_crossing_bounds(op_problem)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have to do this for LP as well.

// Set constraint bounds
std::vector<double> lower_bounds = {1.0};
std::vector<double> upper_bounds = {0.0};
std::vector<double> upper_bounds = {1.0, 1.0};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sizes are different for lower and upper bounds?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a test that is meant to catch is a problem is ill-formed (e.g., contains bounds of different sizes)

Copy link
Contributor

@nguidotti nguidotti Sep 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A small suggestion: instead of goto, is not better to transform

Done:

  cuOptDestroyProblem(&problem);
  cuOptDestroySolverSettings(&settings);
  cuOptDestroySolution(&solution);

into a separated routine (e.g., cleanup) and then call cleanup + return to end the routine?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That part of the code wasn't written by me, but to be fair it's more of a flavour / personal prerefence kind of thing :) It is a common pattern in C for resource cleanup; and it lets the code have a single exit point

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair enough

rgsl888prabhu and others added 8 commits September 22, 2025 09:52
Adding commit SHA for future reference

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - James Lamb (https://github.com/jameslamb)
  - Ishika Roy (https://github.com/Iroy30)

Approvers:
  - James Lamb (https://github.com/jameslamb)
  - Ishika Roy (https://github.com/Iroy30)

URL: #362
# QPS (Quadratic Programming Specification) Support

This library now supports the QPS format, which is an extension of the standard MPS format for representing quadratic programming problems.

## QPS Format Extensions

QPS files are a superset of MPS files, adding the following new section to the standard MPS sections:

### QUADOBJ Section
Defines quadratic terms in the objective function. Format:
```
QUADOBJ
    variable1    variable2    coefficient
    X1           X1           2.0
    X1           X2           1.0
    X2           X2           2.0
```

This represents quadratic terms in the objective function: 2.0*X1² + 1.0*X1*X2 + 2.0*X2²

**Note**: QUADOBJ stores only the upper triangular elements of the quadratic matrix, which are automatically expanded to create the full symmetric matrix during parsing.

## API Usage

### Parsing QPS Files
```cpp
#include <mps_parser/parser.hpp>

// Parse QPS file (using the same API as MPS files)
auto qp_model = cuopt::mps_parser::parse_mps<int, double>("problem.qps", false);
```

### Checking Quadratic Terms
```cpp
// Check for quadratic objective function
if (qp_model.has_quadratic_objective()) {
    const auto& Q_values = qp_model.get_quadratic_objective_values();
    const auto& Q_indices = qp_model.get_quadratic_objective_indices();
    const auto& Q_offsets = qp_model.get_quadratic_objective_offsets();
    // Quadratic objective matrix stored in CSR format
    // Matrix is automatically expanded from upper triangular to full symmetric form
}
```

### Manually Setting Quadratic Data
```cpp
// Set quadratic objective matrix
std::vector<double> Q_values = {2.0, 1.0, 1.0, 2.0};
std::vector<int> Q_indices = {0, 1, 0, 1};
std::vector<int> Q_offsets = {0, 2, 4};

qp_model.set_quadratic_objective_matrix(Q_values.data(), Q_values.size(),
                                        Q_indices.data(), Q_indices.size(),
                                        Q_offsets.data(), Q_offsets.size());
```

## Data Storage Format

Quadratic matrix data is stored in CSR (Compressed Sparse Row) format, consistent with the linear constraint matrix A:
- `Q_values`: Non-zero element values
- `Q_indices`: Column indices of non-zero elements  
- `Q_offsets`: Row offset positions

## Backward Compatibility

- All existing MPS parsing functionality remains unchanged
- Standard MPS files are still fully compatible
- QPS-specific features are activated only when corresponding sections are detected

## Example Files

Refer to the `tests/test_quadratic.qps` file for a complete example of the QPS format.

## Testing

Run tests to verify QPS functionality:
```bash
# Build and run tests
mkdir build && cd build
cmake .. -DBUILD_TESTS=ON
make
./MPS_PARSER_TEST
```

## Technical Details

### CSR Matrix Representation
The quadratic matrices use the same efficient sparse storage format as the linear constraint matrices:

```cpp
// For a 2x2 quadratic matrix:
// [2.0  1.0]
// [0.0  2.0]

Q_values  = [2.0, 1.0, 2.0]    // Non-zero values
Q_indices = [0, 1, 1]          // Column indices
Q_offsets = [0, 2, 3]          // Row start positions
```

### Format Detection
The library automatically detects QPS format by scanning for:
- `QUADOBJ` section headers
- Quadratic coefficient entries

This enables seamless handling of both MPS and QPS files with the same API.

### Performance Considerations
- QPS parsing performance scales linearly with problem size: **O(m + n + nnz)**
- Uses efficient double transpose algorithm instead of sorting: **O(m + n + nnz)** vs **O(nnz log nnz)**
- CSR storage provides optimal memory usage for sparse quadratic matrices
- Upper triangular QUADOBJ input automatically expanded to full symmetric CSR format
- No performance penalty for standard MPS files without quadratic terms

## Supported QPS Features

### Quadratic Objective Functions
- ✅ Full support for `QUADOBJ` sections
- ✅ Upper triangular storage format (QUADOBJ standard)
- ✅ Automatic symmetric matrix expansion using double transpose algorithm
- ✅ CSR format storage for efficient computation
- ✅ Automatic sparsity detection
- ✅ Linear complexity parsing: O(m + n + nnz)

### Validation and Error Handling
- ✅ Comprehensive format validation
- ✅ Detailed error messages for malformed QPS files
- ✅ Graceful handling of missing sections
- ✅ Variable name consistency checking

## Integration Examples

### With Optimization Solvers
```cpp
// Example integration with optimization libraries
auto qp_data = cuopt::mps_parser::parse_mps<int, double>("portfolio.qps");

if (qp_data.has_quadratic_objective()) {
    // Pass CSR matrices directly to solver
    // Matrix is automatically expanded from QUADOBJ upper triangular format
    solver.set_quadratic_objective(
        qp_data.get_quadratic_objective_values(),
        qp_data.get_quadratic_objective_indices(),
        qp_data.get_quadratic_objective_offsets()
    );
}
```

### Data Analysis
```cpp
// Analyze problem characteristics
std::cout << "Problem type: " 
          << (qp_data.has_quadratic_objective() ? "QP" : "LP") << std::endl;
std::cout << "Quadratic density: " 
          << qp_data.get_quadratic_objective_values().size() 
          << " / " << (qp_data.get_n_variables() * qp_data.get_n_variables())
          << std::endl;
```

Authors:
  - https://github.com/Franc-Z
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Chris Maes (https://github.com/chris-maes)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #352
This PR aims at making the compile time faster by adding several options:

- build lp only (extracted MIP files necessary in LP), also meant we needed a skip c and python adapter option
- put back no fetch rapids
- put back not building test option
- added skip routing
- added skip write of fatbin
- adding ccache to libcuopt target
- added two benchmarking targets, one for LP and for MIP

Authors:
  - Nicolas Blin (https://github.com/Kh4ster)

Approvers:
  - Alice Boucher (https://github.com/aliceb-nv)
  - Rajesh Gandham (https://github.com/rg20)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #316
This OOB access happens when the last element is the one being removed: the second access to `infeasibility_indices[k]` after the `pop_back` is invalid.

This is another example for issue #150.

Authors:
  - Clement Courbet (https://github.com/legrosbuffle)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Rajesh Gandham (https://github.com/rg20)

URL: #346
Adding zlib and bzip2 decompression to mps_parser, such that .mps.gz and .mps.bz2 files can be opened directly.

Authors:
  - https://github.com/ahehn-nv
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Kyle Edwards (https://github.com/KyleFromNVIDIA)
  - Nicolas Blin (https://github.com/Kh4ster)
  - Alice Boucher (https://github.com/aliceb-nv)
  - Ishika Roy (https://github.com/Iroy30)

URL: #357
Add documentation on nightly installation commands

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Ishika Roy (https://github.com/Iroy30)
  - Trevor McKay (https://github.com/tmckayus)
  - Cindy Wilkinson (https://github.com/cwilkinson76)

URL: #367
While loading libcuopt using load, sometimes due to a missing dependent library we get error as libcuopt.so is missing even though libcuopt.so is present but some other dependency is missing.

This PR adds a warning in such cases so it doesn't fail in the corner cases, but provide a better details through a warning.

## Issue

closes #340

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)

URL: #375
closes #369

Most solvers report the version in their logs, along with some extra information such as build date or commit hash.

This PR adds code to cuopt_cli (and solve_MPS_problem, until we deprecate it) to print out the cuOpt version, build hash, and target architectures, along with host/device details when starting the solver.

Example output:

```
cuOpt version: 25.10.0, git hash: 9006ad7, host arch: x86_64, device archs: 90-real
CPU: AMD EPYC 7742 64-Core Processor, threads (physical/logical): 128/256, RAM: 726.66 GiB
CUDA 12.9, device: NVIDIA H100 PCIe (ID 0), VRAM: 79.18 GiB
CUDA device UUID: 1effffffa4ffffff9937-fffffff928-ffff
```

Authors:
  - Alice Boucher (https://github.com/aliceb-nv)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - Rajesh Gandham (https://github.com/rg20)

URL: #370
hlinsen and others added 19 commits September 22, 2025 09:52
Papilo's problem builder was spending a long amount of time building the constraint matrix.
Rewrote that step -> provides ~1.8x speedup on presolve
With TBB there is another ~1.2x additional speedup so ~2x.
[Parallel Presolve.xlsx](https://github.com/user-attachments/files/22145182/Parallel.Presolve.xlsx)

Authors:
  - Hugo Linsenmaier (https://github.com/hlinsen)

Approvers:
  - Rajesh Gandham (https://github.com/rg20)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #371
Contributes to rapidsai/build-planning#208

* uses CUDA 13.0.0 to build and test
* moves some dependency pins:
  - `cuda-python`: `>=12.9.2` (CUDA 12), `>=13.0.1` (CUDA 13)
  - `cupy`: `>=13.6.0`
* declares `cuda-python` runtime dependency for wheels ([it was previously only declared for conda packages](https://github.com/NVIDIA/cuopt/blob/c62320447414c47f25ea67bb2570e05c7d0d29ac/conda/recipes/cuopt/recipe.yaml#L70))

Contributes to rapidsai/build-planning#68

* updates to CUDA 13 dependencies in fallback entries in `dependencies.yaml` matrices (i.e., the ones that get written to `pyproject.toml` in source control)

## Notes for Reviewers

This switches GitHub Actions workflows to the `cuda13.0` branch from here: rapidsai/shared-workflows#413

A future round of PRs will revert that back to `branch-25.10`, once all of RAPIDS supports CUDA 13.

## Issue

Closes #294

Authors:
  - James Lamb (https://github.com/jameslamb)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: #366
Contributes to rapidsai/build-planning#208

* updates all GitHub Actions branch references back to `branch-25.10`, now that rapidsai/shared-workflows#413 is merged
* fixes docs mistakes (#366 (comment))
* fixes nightly builds

Nightly wheel builds of `cuopt-mps-parser` are failing like this:

> Error: Failed to CreateArtifact: Received non-retryable error: Failed request: (409) Conflict: an artifact with this name already exists on the workflow run

([wheel-build-cuopt-mps-parser link](https://github.com/NVIDIA/cuopt/actions/runs/17501959410/job/49716771454))

Because I forgot to bring over all of the artifact-naming changes made in `pr.yaml` to the corresponding entries on `build.yaml`, sorry 😬

Authors:
  - James Lamb (https://github.com/jameslamb)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #377
This adds testing for https://github.com/NVIDIA/cuopt-examples to nightly testing suite.

## Issue

closes #334 
closes #212

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - James Lamb (https://github.com/jameslamb)
  - Trevor McKay (https://github.com/tmckayus)

URL: #342
…379)

- This PR adds support for cuda 13 container for nightly and release
- Also updates python version to 3.13
- Also cuda-toolkits have stopped using cu13 suffixes and they need to be fixed in dependencies
- This also requires addition to RPATH since the paths are different for cu13

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)
  - James Lamb (https://github.com/jameslamb)

URL: #379
This PR combined the buffers problem_t::variable_lower_bounds and problem_t::variable_upper_bounds into a single buffer. This is done so as to improve the cache utilization when randomly accessing variable bounds.

## Issue

Authors:
  - Kumar Aatish (https://github.com/kaatish)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)
  - Alice Boucher (https://github.com/aliceb-nv)
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #372
closes #349

compute_related_variables was heuristically allocating memory based on A100/H100 with >=40GB of VRAM.
This is now automatically adjusted based on the total VRAM of the device

A command-line option has also been added to solve_MPS_file to specify device memory allocation limits for ease of testing.

Authors:
  - Alice Boucher (https://github.com/aliceb-nv)
  - Nicolas L. Guidotti (https://github.com/nguidotti)

Approvers:
  - Nicolas L. Guidotti (https://github.com/nguidotti)

URL: #351
This PR implements node presolve using the bounds strengthening algorithm. At each node in branch-and-bound tree,  host presolve is run to (i) improve the bounds on the variables (ii) to detect infeasibility and fathom nodes accordingly

**Details**

- The bounds strengthening takes into account of integrality constraints. This leads to more infeasibility detection than doing the dual simplex. 
- Bounds strengthening is done only starting with the constraints that are associated with the branched variables (all up to the root node) only.  For examples, if the current node is depth 7, only constraints relating to these 7 variables are considered changed for the first iteration of bounds strengthening. This greatly improves the performance of the node presolve
- This bounds strengthening is performed on the cpu

## Issue
Closes #276

Authors:
  - Rajesh Gandham (https://github.com/rg20)

Approvers:
  - Kumar Aatish (https://github.com/kaatish)

URL: #368
…olve/solve time (#381)

This PR updates:
- Presolve tolerance setting from 9e-7 to 1e-5 as some models were incorrectly detected as infeasible.
- Usage of `timer_t` class to propagate and report more precisely the cumulative time of presolve + solve time (concurrent, dual, pldp).

Authors:
  - Hugo Linsenmaier (https://github.com/hlinsen)

Approvers:
  - Rajesh Gandham (https://github.com/rg20)

URL: #381
…s dependency (#384)

Adds doc updates for docker container version update
Also add nvidia-cuda-runtime  as dependency so we don't need to install it explicitly.

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Cindy Wilkinson (https://github.com/cwilkinson76)
  - Trevor McKay (https://github.com/tmckayus)

URL: #384
Add video link to the docs and readme

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)

URL: #393
Add name to drop down for video link

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Cindy Wilkinson (https://github.com/cwilkinson76)
  - Ishika Roy (https://github.com/Iroy30)

URL: #396
Add the ability to read from MPS , write to MPS and relax a MIP problem into an LP in python API

## Issue

Authors:
  - Ishika Roy (https://github.com/Iroy30)
  - Trevor McKay (https://github.com/tmckayus)
  - Alice Boucher (https://github.com/aliceb-nv)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)
  - Rajesh Gandham (https://github.com/rg20)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #323
The previous VRAM fix PR left a limiting_resource_adaptor in the code limiting runs on multiple GPUs to 6GB of VRAM. This was not meant to be part of the push, and this PR fixes this mistake.

Authors:
  - Alice Boucher (https://github.com/aliceb-nv)

Approvers:
  - Nicolas L. Guidotti (https://github.com/nguidotti)

URL: #398
This PR adds sanitizer build option.
To use sanitizer with cuda runtime, one must follow a few steps:
1. Find libasan.so with "gcc -print-file-name=libasan.so"
2. Run the binary with env var set: LD_PRELOAD=$PATH_TO_LIBASAN ASAN_OPTIONS='protect_shadow_gap=0:replace_intrin=0'
3. (Optional) To run with a debugger (gdb or cuda-gdb) use the additional ASAN option alloc_dealloc_mismatch=0

Authors:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)
  - Trevor McKay (https://github.com/tmckayus)

URL: #385
…uristics (#382)

This PR changes the heuristic structure by creating a natural balance between generation and improvement.
The FP/FJ loop now adds solution to the population and only if we have enough diverse solutions we exit the loop and execute the population improvement. The diversity is increased to `sqrt(n_integers)`. The recombiners are run between the current best and all other solutions in the current population, if stagnation is detected in FP/FJ loop and then the loop continues. The bounds prop rounding in the context of FP is also improved. When the dual simplex solution is set, the pdlp is warm started now with both primal and dual solutions.

The default tolerance is now 1e-6 absolute tolerance and 1e-12 relative tolerance.

This PR includes bug fixes on:
- Apperance of inf/nan on `z` vector dual simplex phase2.
- Invalid launch dimensions on FJ and hash kernels.
- Timer diff and function time limit issues when the solver is run with unlimited time limit.

Benchmark results in 10 mins run on H100:
- Main branch: 207 feasible solutions and average gap: '28.54', 3 unfinished/crashed
- This PR: 213 feasible and average gap: '23.11', 1 unfinished/crushed. (The PR didn't have any crash before merge with main branch)

closes #142  
closes #374 
closes #218

Authors:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - Alice Boucher (https://github.com/aliceb-nv)

URL: #382
The issue was the problem check that some constraint values were going -inf and nan. This was caught by exceptions but it didn't crash the process as it is caught. We need more graceful handling of exceptions: #264

Authors:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

Approvers:
  - Alice Boucher (https://github.com/aliceb-nv)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: #403
This PR introduces the following changes:
- Implements a simple diving procedure
- Allows the branch-and-bound to switch between different search strategies: `BEST_FIRST`, `DEPTH_FIRST` and `MULTITHREADED_BEST_FIRST_WITH_DIVING`
- Refactor the branch-and-bound code such that the `solve` function is now organized into separated methods
- Moved some commonly used variables to be member variables in the branch-and-bound solver.

Authors:
  - Nicolas L. Guidotti (https://github.com/nguidotti)
  - Ramakrishnap (https://github.com/rgsl888prabhu)
  - https://github.com/ahehn-nv

Approvers:
  - Gil Forsyth (https://github.com/gforsyth)
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)
  - Trevor McKay (https://github.com/tmckayus)
  - Chris Maes (https://github.com/chris-maes)

URL: #305
@aliceb-nv aliceb-nv requested a review from a team as a code owner September 22, 2025 09:53
@aliceb-nv aliceb-nv requested a review from Iroy30 September 22, 2025 09:53
@aliceb-nv aliceb-nv removed request for a team and Iroy30 September 22, 2025 09:59
@aliceb-nv
Copy link
Contributor Author

/ok to test 98781b1

@aliceb-nv
Copy link
Contributor Author

/merge

@rapids-bot rapids-bot bot merged commit a66cb86 into branch-25.10 Sep 22, 2025
201 of 202 checks passed
@rgsl888prabhu rgsl888prabhu deleted the invalid-bounds-fix branch October 29, 2025 16:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] Invalid bounds need to return infeasible solution rather than erroring invalid bound