Skip to content

Fix termination reason string logic and missing Python bindings #48

@ZedongPeng

Description

@ZedongPeng

Description

  1. There is a logic error in the termination_reason_tToString and termination_reason_to_string functions. The case for TERMINATION_REASON_UNSPECIFIED lacks a return statement or a break, causing it to fall through to the next case, which is FEAS_POLISH_SUCCESS. These two functions appear to be duplicated code.

cuPDLPx/src/utils.cu

Lines 198 to 218 in 4ff479e

const char *termination_reason_to_string(termination_reason_t reason)
{
switch (reason)
{
case TERMINATION_REASON_OPTIMAL:
return "OPTIMAL";
case TERMINATION_REASON_PRIMAL_INFEASIBLE:
return "PRIMAL_INFEASIBLE";
case TERMINATION_REASON_DUAL_INFEASIBLE:
return "DUAL_INFEASIBLE";
case TERMINATION_REASON_TIME_LIMIT:
return "TIME_LIMIT";
case TERMINATION_REASON_ITERATION_LIMIT:
return "ITERATION_LIMIT";
case TERMINATION_REASON_UNSPECIFIED:
case TERMINATION_REASON_FEAS_POLISH_SUCCESS:
return "FEAS_POLISH_SUCCESS";
default:
return "UNSPECIFIED";
}
}

cuPDLPx/src/cli.c

Lines 29 to 49 in 4ff479e

const char *termination_reason_tToString(termination_reason_t reason)
{
switch (reason)
{
case TERMINATION_REASON_OPTIMAL:
return "OPTIMAL";
case TERMINATION_REASON_PRIMAL_INFEASIBLE:
return "PRIMAL_INFEASIBLE";
case TERMINATION_REASON_DUAL_INFEASIBLE:
return "DUAL_INFEASIBLE";
case TERMINATION_REASON_TIME_LIMIT:
return "TIME_LIMIT";
case TERMINATION_REASON_ITERATION_LIMIT:
return "ITERATION_LIMIT";
case TERMINATION_REASON_UNSPECIFIED:
case TERMINATION_REASON_FEAS_POLISH_SUCCESS:
return "FEAS_POLISH_SUCCESS";
default:
return "UNSPECIFIED";
}
}

  1. Missing Case in Python Bindings: The Python binding implementation is missing the case for FEAS_POLISH_SUCCESS.
    static const char *status_to_str(termination_reason_t r)
    {
    switch (r)
    {
    case TERMINATION_REASON_OPTIMAL:
    return "OPTIMAL";
    case TERMINATION_REASON_PRIMAL_INFEASIBLE:
    return "PRIMAL_INFEASIBLE";
    case TERMINATION_REASON_DUAL_INFEASIBLE:
    return "DUAL_INFEASIBLE";
    case TERMINATION_REASON_TIME_LIMIT:
    return "TIME_LIMIT";
    case TERMINATION_REASON_ITERATION_LIMIT:
    return "ITERATION_LIMIT";
    case TERMINATION_REASON_UNSPECIFIED:
    default:
    return "UNSPECIFIED";
    }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions