Skip to content

Update solution object to include the LP solver#822

Open
nguidotti wants to merge 21 commits intoNVIDIA:release/26.04from
nguidotti:update-lp-api
Open

Update solution object to include the LP solver#822
nguidotti wants to merge 21 commits intoNVIDIA:release/26.04from
nguidotti:update-lp-api

Conversation

@nguidotti
Copy link
Copy Markdown
Contributor

@nguidotti nguidotti commented Feb 3, 2026

This PR replaced solved_by_pdlp with solved_by in optimization_problem_solution_t and all associated objects, such that now it is possible to retrieve which method was used for solving the LP when running in concurrent mode. This also fix a typo in the CUOPT_TERMINATION_STATUS and updates the B&B logs to display the method used for solving the root relaxation.

Issue

Closes #787

Checklist

  • I am familiar with the Contributing Guidelines.
  • Testing
    • New or existing tests cover these changes
    • Added tests
    • Created an issue to follow-up
    • NA
  • Documentation
    • The documentation is up to date with these changes
    • Added new documentation
    • NA

@nguidotti nguidotti added this to the 26.04 milestone Feb 3, 2026
@nguidotti nguidotti self-assigned this Feb 3, 2026
@nguidotti nguidotti added breaking Introduces a breaking change pdlp labels Feb 3, 2026
@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot bot commented Feb 3, 2026

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@nguidotti
Copy link
Copy Markdown
Contributor Author

/ok to test 2758461

@nguidotti nguidotti added the do not merge Do not merge if this flag is set label Feb 3, 2026
@nguidotti
Copy link
Copy Markdown
Contributor Author

@CodeRabbit review

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 3, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 3, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR fixes a spelling error in public termination-status macros (renaming CUOPT_TERIMINATION_STATUS_*CUOPT_TERMINATION_STATUS_*), adds CUOPT_METHOD_UNSET, and replaces PDLP-specific solved_by_pdlp booleans with a generic method_t solved_by across solution interfaces, callbacks, tests, and Python/Cython bindings.

Changes

Cohort / File(s) Summary
Termination Status Constants
cpp/include/cuopt/linear_programming/constants.h
Renamed CUOPT_TERIMINATION_STATUS_*CUOPT_TERMINATION_STATUS_* macros; added CUOPT_METHOD_UNSET (4).
Solution & Termination Metadata (C++)
cpp/include/cuopt/linear_programming/mip/solver_solution.hpp, cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp, cpp/include/cuopt/linear_programming/optimization_problem_solution.hpp, cpp/include/cuopt/linear_programming/cpu_optimization_problem_solution.hpp, cpp/include/cuopt/linear_programming/optimization_problem_solution_interface.hpp, cpp/include/cuopt/linear_programming/utilities/cython_types.hpp
Replaced bool solved_by_pdlp with method_t solved_by (fields, accessors, constructors); updated enum mappings to use corrected termination constants and added includes where needed.
Method Enum & Helpers
cpp/include/cuopt/linear_programming/pdlp/solver_settings.hpp
Added Unset = CUOPT_METHOD_UNSET to method_t, documented Barrier and Unset, and added method_to_string(method_t) helper.
PDLP internals
cpp/src/pdlp/pdlp.cu
Set per-climber termination metadata solved_by = method_t::PDLP (or omit for ConcurrentLimit) instead of boolean flags.
Branch-and-Bound Integration
cpp/src/branch_and_bound/branch_and_bound.hpp, cpp/src/branch_and_bound/branch_and_bound.cpp
set_root_relaxation_solution(...) gains method_t method param; added root_relax_solved_by member and use method_to_string() for logging.
MIP Heuristics & Problem Callback
cpp/src/mip_heuristics/problem/problem.cuh, cpp/src/mip_heuristics/solver.cu, cpp/src/mip_heuristics/diversity/diversity_manager.cu
Expanded set_root_relaxation_solution_callback signature to include trailing method_t; updated bind/call sites to forward solver method_t; diversity manager captures and forwards solved_by.
Dual Simplex Logging
cpp/src/dual_simplex/crossover.cpp, cpp/src/dual_simplex/right_looking_lu.cpp
Guard "Concurrent halt\n" debug prints so they only emit when settings.inside_mip is false; halt detection and returns unchanged.
Problem/LP solution interface changes
cpp/include/cuopt/linear_programming/optimization_problem_solution_interface.hpp, cpp/include/cuopt/linear_programming/optimization_problem_solution.hpp, cpp/include/cuopt/linear_programming/cpu_optimization_problem_solution.hpp
Virtual signature changed from is_solved_by_pdlp(...)method_t solved_by(...); callers updated to propagate solved_by.
C API & Examples / Docs
cpp/tests/linear_programming/c_api_tests/c_api_test.c, docs/cuopt/source/cuopt-c/lp-qp-milp/examples/*, docs/.../lp-qp-milp-c-api.rst
Fixed termination constant names in examples/docs and adjusted some example output/formatting; added small helper normalizations in C API test file.
Tests (C++ / CUDA / PDLP)
cpp/tests/linear_programming/*, cpp/tests/mip/*, cpp/tests/linear_programming/pdlp_test.cu, cpp/tests/linear_programming/unit_tests/*, cpp/tests/mip/*
Replaced misspelled termination-constant references across many tests; updated PDLP tests to check solved_by (e.g., method_t::DualSimplex); minor formatting changes.
Python & Cython bindings
python/cuopt/cuopt/linear_programming/solution/solution.py, python/cuopt/cuopt/linear_programming/solver/solver.pxd, python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx, python/cuopt/cuopt/linear_programming/solver_settings/solver_settings.py
Cython method_t enum and linear_programming_ret_t.solved_by_ added; Python Solution now stores solved_by via SolverMethod; SolverMethod enum gained Unset.
Misc (bind/adaptors)
cpp/src/mip_heuristics/solver.cu, cpp/src/mip_heuristics/diversity/diversity_manager.cu
Updated std::bind placeholders and call sites to match expanded callback signature including method_t.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 20.37% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly and specifically describes the main change: updating the solution object to report which LP solver was used.
Description check ✅ Passed The PR description is directly related to the changeset, explaining the replacement of solved_by_pdlp with solved_by, the typo fix, and B&B log updates.
Linked Issues check ✅ Passed The PR fully addresses issue #787 by replacing solved_by_pdlp with solved_by across C++, C, and Python APIs, enabling retrieval of which solver method solved the LP in concurrent mode.
Out of Scope Changes check ✅ Passed All changes are in-scope: API updates to use solved_by instead of solved_by_pdlp, typo fixes for termination status constants, logging changes, and comprehensive updates across C++/C/Python layers align with issue #787 objectives.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
python/cuopt_self_hosted/cuopt_sh_client/cuopt_self_host_client.py (1)

189-204: ⚠️ Potential issue | 🟡 Minor

Add backward-compatible fallback for solved_by.

If a client connects to an older server that still returns solved_by_pdlp, this will throw and the function will silently return a raw dict instead of a ThinClientSolution. Consider a fallback to preserve compatibility.

🔧 Suggested fallback
-                solved_by=sol["solved_by"],
+                solved_by=sol.get("solved_by", sol.get("solved_by_pdlp", None)),

As per coding guidelines, maintain backward compatibility in Python and server APIs with deprecation warnings.

python/cuopt_server/cuopt_server/utils/linear_programming/data_definition.py (1)

698-703: ⚠️ Potential issue | 🟠 Major

Type mismatch: solved_by should be int, not bool.

The PR objective is to replace the boolean solved_by_pdlp with an enum-based solved_by field that can represent multiple solvers (DualSimplex=1, PDLP=2, Barrier=3). However, the type here remains bool.

Based on the solver wrapper changes in this PR (solver_wrapper.pyx line 362), solved_by is now an integer value from lp_solver_type_t. The field type and description should be updated to reflect this.

🐛 Proposed fix
-    solved_by: bool = Field(
+    solved_by: int = Field(
         default=None,
         description=(
-            "Returns whether problem was solved by PDLP or Dual Simplex"
+            "Returns which solver solved the LP: 0=Unset, 1=DualSimplex, 2=PDLP, 3=Barrier"
         ),
     )
🤖 Fix all issues with AI agents
In `@cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp`:
- Around line 94-95: Update the comment for the member solved_by of type
lp_solver_type_t to accurately reflect all enum options (PDLP, Dual Simplex, and
Barrier); locate the declaration of solved_by (lp_solver_type_t solved_by =
lp_solver_type_t::Unset;) and change the comment text from "Whether the problem
was solved by PDLP or Dual Simplex" to include "Barrier" as well (e.g., "Whether
the problem was solved by PDLP, Dual Simplex, or Barrier").

In `@cpp/src/dual_simplex/branch_and_bound.cpp`:
- Around line 1357-1358: The current assignment to solver_name treats any
non-Barrier value as "PDLP", causing misleading logs when root_relax_solved_by
is Unset or DualSimplex; change the logic in the block that assigns solver_name
(referencing solver_name and root_relax_solved_by) to use a switch/if chain over
lp_solver_type_t (check lp_solver_type_t::Barrier, lp_solver_type_t::PDLP,
lp_solver_type_t::DualSimplex and lp_solver_type_t::Unset or a default case) and
set solver_name to the exact labels ("Barrier", "PDLP", "DualSimplex", "Unset"
or "Unknown") so the logged value accurately reflects the enum.

In `@cpp/src/linear_programming/pdlp.cu`:
- Around line 768-773: The termination-info entry can retain stale solver
metadata when the status is ConcurrentLimit; before the existing conditional in
the PDLP termination handling, explicitly reset
batch_solution_to_return_.get_additional_termination_informations()[climber_strategies_[i].original_index].solved_by
to lp_solver_type_t::Unset, then keep the existing if
(current_termination_strategy_.get_termination_status(i) !=
pdlp_termination_status_t::ConcurrentLimit) assignment to set solved_by =
lp_solver_type_t::PDLP; do the same reset at the other location covering lines
839–844 to ensure no stale values remain.

In `@python/cuopt_server/cuopt_server/utils/linear_programming/solver.py`:
- Line 493: The change replaces the public key "solved_by_pdlp" with "solved_by"
and also mismatches types: keep backward compatibility by preserving the old key
while adding the new key and emitting a DeprecationWarning; set both values from
sol.get_solved_by() (an int) and update the data model annotation in
data_definition.py to solved_by: int; specifically, in solver.py where you
assign solution["solved_by"] = sol.get_solved_by(), also set
solution["solved_by_pdlp"] = sol.get_solved_by() but wrap a DeprecationWarning
(or warnings.warn) indicating the key is deprecated, and change the type
declaration for solved_by in data_definition.py from bool to int.

In `@python/cuopt/cuopt/linear_programming/solution/solution.py`:
- Around line 119-121: Add a deprecated alias for the renamed API: implement a
solved_by_pdlp shim that maps to the new solved_by attribute and emits a
deprecation warning; specifically, in the Solution class add a `@property` def
solved_by_pdlp(self) that returns self.solved_by and a setter that assigns to
self.solved_by while calling warnings.warn("solved_by_pdlp is deprecated; use
solved_by", DeprecationWarning, stacklevel=2); also accept and translate an
incoming constructor/initializer keyword/parameter solved_by_pdlp to solved_by
(and log the same deprecation) and update any other places that previously
referenced solved_by_pdlp to use the shim so callers remain compatible.
🧹 Nitpick comments (3)
python/cuopt/cuopt/tests/linear_programming/test_lp_solver.py (1)

588-588: LGTM - DualSimplex solver attribution verified.

The assertion correctly verifies that DualSimplex solver returns solved_by == 1.

Consider defining named constants for solver type codes to improve readability and reduce magic numbers:

# At module level or in a constants file
SOLVER_DUAL_SIMPLEX = 1
SOLVER_PDLP = 2
SOLVER_BARRIER = 3

# Then in tests:
assert solution.get_solved_by() == SOLVER_DUAL_SIMPLEX

This would make tests more self-documenting and easier to maintain if enum values change.

cpp/tests/linear_programming/pdlp_test.cu (1)

977-978: Consider adding concurrent-mode coverage for Barrier/PDLP winners.

Right now the solved_by assertion only covers DualSimplex for the empty-matrix concurrent case; adding one case where Barrier or PDLP wins would exercise the new enum more fully.

python/cuopt_self_hosted/cuopt_sh_client/thin_client_solution.py (1)

69-70: Consider backward compatibility for this breaking API change.

The method get_solved_by_pdlp() has been renamed to get_solved_by() without a deprecation path. While the PR is labeled as "breaking," consider whether a deprecation wrapper would ease migration for existing users:

def get_solved_by_pdlp(self):
    """Deprecated: Use get_solved_by() instead."""
    import warnings
    warnings.warn("get_solved_by_pdlp is deprecated, use get_solved_by instead", DeprecationWarning)
    return self.solved_by == 2  # PDLP

If full removal is intentional for this release, disregard this suggestion. As per coding guidelines, Python APIs should maintain backward compatibility with deprecation warnings.

Also applies to: 194-198

@rgsl888prabhu rgsl888prabhu changed the base branch from main to release/26.04 March 19, 2026 16:35
@nguidotti nguidotti marked this pull request as ready for review March 23, 2026 17:03
@nguidotti nguidotti requested review from a team as code owners March 23, 2026 17:03
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@cpp/include/cuopt/linear_programming/utilities/cython_types.hpp`:
- Line 86: The C++ field was renamed/retyped to linear_programming::method_t
solved_by_, but Cython still declares and accesses the old bool solved_by_pdlp_;
update the Cython declarations and accessors to match the new symbol and type:
change the pxd declaration from bool solved_by_pdlp_ to the appropriate mapped
enum/typedef for linear_programming::method_t (or an int/enum proxy) and replace
all uses of lp_ptr.solved_by_pdlp_ in the wrapper with lp_ptr.solved_by_ (and
adjust any enum/value conversions in solver_wrapper.pyx accordingly).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7cfc763e-b131-45cf-baf6-c813ba5a01b1

📥 Commits

Reviewing files that changed from the base of the PR and between 2758461 and e60524d.

📒 Files selected for processing (16)
  • cpp/include/cuopt/linear_programming/constants.h
  • cpp/include/cuopt/linear_programming/cpu_optimization_problem_solution.hpp
  • cpp/include/cuopt/linear_programming/mip/solver_solution.hpp
  • cpp/include/cuopt/linear_programming/optimization_problem_solution.hpp
  • cpp/include/cuopt/linear_programming/optimization_problem_solution_interface.hpp
  • cpp/include/cuopt/linear_programming/pdlp/solver_settings.hpp
  • cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp
  • cpp/include/cuopt/linear_programming/utilities/cython_types.hpp
  • cpp/src/branch_and_bound/branch_and_bound.cpp
  • cpp/src/branch_and_bound/branch_and_bound.hpp
  • cpp/src/dual_simplex/crossover.cpp
  • cpp/src/dual_simplex/right_looking_lu.cpp
  • cpp/src/mip_heuristics/diversity/diversity_manager.cu
  • cpp/src/mip_heuristics/problem/problem.cuh
  • cpp/src/mip_heuristics/solver.cu
  • cpp/src/pdlp/pdlp.cu
🚧 Files skipped from review as they are similar to previous changes (4)
  • cpp/src/dual_simplex/right_looking_lu.cpp
  • cpp/include/cuopt/linear_programming/pdlp/solver_solution.hpp
  • cpp/include/cuopt/linear_programming/mip/solver_solution.hpp
  • cpp/include/cuopt/linear_programming/constants.h

int nb_iterations_{};
double solve_time_{};
bool solved_by_pdlp_{};
linear_programming::method_t solved_by_{};
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

fd 'cython_types\.hpp$|solver\.pxd$|solver_wrapper\.pyx$'

rg -n "solved_by_pdlp_|solved_by_" \
  cpp/include/cuopt/linear_programming/utilities/cython_types.hpp \
  python/cuopt/cuopt/linear_programming/solver/solver.pxd \
  python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx

Repository: NVIDIA/cuopt

Length of output: 671


Cython struct field mismatch: solved_by_pdlp_ declaration and accessors not updated to match C++ field rename/retype.

The C++ struct field at line 86 changed to linear_programming::method_t solved_by_{}, but Cython declarations and wrapper code still reference the old field:

  • solver.pxd:178 declares bool solved_by_pdlp_
  • solver_wrapper.pyx:480, 499 access lp_ptr.solved_by_pdlp_

Cython will attempt to access a non-existent field, causing a compile or runtime error. Update solver.pxd to declare the new field with correct type, and update all accessors in solver_wrapper.pyx to use the new name.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cpp/include/cuopt/linear_programming/utilities/cython_types.hpp` at line 86,
The C++ field was renamed/retyped to linear_programming::method_t solved_by_,
but Cython still declares and accesses the old bool solved_by_pdlp_; update the
Cython declarations and accessors to match the new symbol and type: change the
pxd declaration from bool solved_by_pdlp_ to the appropriate mapped enum/typedef
for linear_programming::method_t (or an int/enum proxy) and replace all uses of
lp_ptr.solved_by_pdlp_ in the wrapper with lp_ptr.solved_by_ (and adjust any
enum/value conversions in solver_wrapper.pyx accordingly).

nguidotti and others added 2 commits March 23, 2026 18:50
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
@copy-pr-bot
Copy link
Copy Markdown

copy-pr-bot bot commented Mar 23, 2026

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

♻️ Duplicate comments (1)
python/cuopt/cuopt/linear_programming/solution/solution.py (1)

200-200: ⚠️ Potential issue | 🔴 Critical

Fix the undefined solved_by path and keep the old API as a shim.

Line 200 calls SolverMethod(solved_by), but __init__ still only accepts solved_by_pdlp, so constructing Solution now raises NameError. Downstream, the legacy solved_by_pdlp attribute/getter is no longer backed by state either. Please add a solved_by parameter, keep solved_by_pdlp as a deprecated alias, and derive the legacy bool from self.solved_by so existing callers keep working. As per coding guidelines, maintain backward compatibility in Python and server APIs with deprecation warnings.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@python/cuopt/cuopt/linear_programming/solution/solution.py` at line 200, The
constructor for the Solution class calls SolverMethod(solved_by) but __init__
only accepts solved_by_pdlp, causing NameError and breaking the legacy API;
update Solution.__init__ to accept a new solved_by parameter (optional), set
self.solved_by = SolverMethod(solved_by) (fall back to interpreting
solved_by_pdlp if solved_by is None), keep solved_by_pdlp as a deprecated alias
(e.g., set self.solved_by_pdlp = bool(self.solved_by == SolverMethod.PDLP) or
compute it from self.solved_by) and emit a DeprecationWarning when
solved_by_pdlp is used so existing callers work while guiding them to use
solved_by instead; reference Solution.__init__, solved_by, solved_by_pdlp, and
SolverMethod when making changes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@python/cuopt/cuopt/linear_programming/solution/solution.py`:
- Line 200: The constructor for the Solution class calls SolverMethod(solved_by)
but __init__ only accepts solved_by_pdlp, causing NameError and breaking the
legacy API; update Solution.__init__ to accept a new solved_by parameter
(optional), set self.solved_by = SolverMethod(solved_by) (fall back to
interpreting solved_by_pdlp if solved_by is None), keep solved_by_pdlp as a
deprecated alias (e.g., set self.solved_by_pdlp = bool(self.solved_by ==
SolverMethod.PDLP) or compute it from self.solved_by) and emit a
DeprecationWarning when solved_by_pdlp is used so existing callers work while
guiding them to use solved_by instead; reference Solution.__init__, solved_by,
solved_by_pdlp, and SolverMethod when making changes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 6f6bacd5-bfe2-4bdf-8a51-4699b0aa980f

📥 Commits

Reviewing files that changed from the base of the PR and between ae0d86e and fec19e1.

📒 Files selected for processing (4)
  • python/cuopt/cuopt/linear_programming/solution/solution.py
  • python/cuopt/cuopt/linear_programming/solver/solver.pxd
  • python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx
  • python/cuopt/cuopt/linear_programming/solver_settings/solver_settings.py
✅ Files skipped from review due to trivial changes (2)
  • python/cuopt/cuopt/linear_programming/solver_settings/solver_settings.py
  • python/cuopt/cuopt/linear_programming/solver/solver_wrapper.pyx

@nguidotti
Copy link
Copy Markdown
Contributor Author

/ok to test fec19e1

@Iroy30 Iroy30 removed the do not merge Do not merge if this flag is set label Mar 24, 2026
@Iroy30
Copy link
Copy Markdown
Member

Iroy30 commented Mar 24, 2026

/ok to test fc0a39d

@Iroy30 Iroy30 added the improvement Improves an existing functionality label Mar 24, 2026
@Iroy30
Copy link
Copy Markdown
Member

Iroy30 commented Mar 24, 2026

/ok to test 9c00324

@chris-maes chris-maes added the P2 label Mar 25, 2026
Time used for pre-solve
solve_time: Float64
Solve time in seconds
solved_by_pdlp: bool
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This would be a breaking change since we are replacing this with something else. May for this time, we can cleanly remove it, but for next time lets plan a support for 2 releases with deprecation for major elements before completely removing it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

If you prefer, we can keep the solved_by_pdlp for now, set as solved_by_pdlp = solved_by == SolverMethod.PDLP and add a deprecation warning.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done. See cc5844b

Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
Signed-off-by: Nicolas Guidotti <224634272+nguidotti@users.noreply.github.com>
@nguidotti
Copy link
Copy Markdown
Contributor Author

/ok to test dd24b5a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking Introduces a breaking change improvement Improves an existing functionality P2 pdlp

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEA] Add a way to retrieve the solver type from the solution object

5 participants