16#include "absl/log/log.h"
17#include "absl/status/status.h"
18#include "absl/strings/str_cat.h"
30 if (status.primal_or_dual_infeasible()) {
32 <<
"expected primal_or_dual_infeasible = false";
34 return absl::OkStatus();
39absl::Status ValidateTerminationReasonConsistency(
41 switch (termination.reason()) {
50 return absl::OkStatus();
55 return absl::OkStatus();
62 return absl::OkStatus();
77 return absl::OkStatus();
84 CheckNotPrimalDualInfeasible(termination.problem_status()));
86 return absl::OkStatus();
97 return absl::OkStatus();
105 return absl::OkStatus();
114 CheckNotPrimalDualInfeasible(termination.problem_status()));
116 return absl::OkStatus();
119 <<
" not implemented";
122 return absl::OkStatus();
128 const bool is_maximize) {
130 return absl::InvalidArgumentError(
"termination reason must be specified");
135 return absl::InvalidArgumentError(
137 ", limit must be specified"));
141 return absl::InvalidArgumentError(
142 "For LIMIT_CUTOFF expected no solutions");
146 return absl::InvalidArgumentError(
148 ", limit should be unspecified, but was set to: ",
159 return absl::OkStatus();
#define RETURN_IF_ERROR(expr)
const ::operations_research::math_opt::ObjectiveBoundsProto & objective_bounds() const
const ::operations_research::math_opt::ProblemStatusProto & problem_status() const
::operations_research::math_opt::TerminationReasonProto reason() const
::operations_research::math_opt::LimitProto limit() const
An object oriented wrapper for quadratic constraints in ModelStorage.
@ TERMINATION_REASON_OPTIMAL
@ TERMINATION_REASON_OTHER_ERROR
@ TERMINATION_REASON_INFEASIBLE_OR_UNBOUNDED
@ TERMINATION_REASON_NO_SOLUTION_FOUND
@ TERMINATION_REASON_FEASIBLE
@ TERMINATION_REASON_NUMERICAL_ERROR
@ TERMINATION_REASON_UNSPECIFIED
@ TERMINATION_REASON_INFEASIBLE
@ TERMINATION_REASON_IMPRECISE
@ TERMINATION_REASON_UNBOUNDED
absl::Status CheckDualStatusIsNot(const ProblemStatusProto &status, const FeasibilityStatusProto forbidden_status)
Assumes ValidateProblemStatus(status) is ok.
absl::Status CheckPrimalStatusIs(const ProblemStatusProto &status, const FeasibilityStatusProto required_status)
Assumes ValidateProblemStatus(status) is ok.
absl::Status ValidateProblemStatus(const ProblemStatusProto &status)
@ FEASIBILITY_STATUS_FEASIBLE
@ FEASIBILITY_STATUS_UNDETERMINED
@ FEASIBILITY_STATUS_INFEASIBLE
absl::Status CheckDualStatusIs(const ProblemStatusProto &status, const FeasibilityStatusProto required_status, const bool primal_or_dual_infeasible_also_ok)
Assumes ValidateProblemStatus(status) is ok.
absl::Status CheckFinitePrimalBound(const ObjectiveBoundsProto &bounds)
absl::Status ValidateObjectiveBounds(const ObjectiveBoundsProto &bounds)
absl::Status ValidateTermination(const TerminationProto &termination, const bool is_maximize)
Checks all messages are valid and compatible.
absl::Status ValidateBoundStatusConsistency(const ObjectiveBoundsProto &objective_bounds, const ProblemStatusProto &status, bool is_maximize)
absl::Status CheckPrimalStatusIsNot(const ProblemStatusProto &status, const FeasibilityStatusProto forbidden_status)
Assumes ValidateProblemStatus(status) is ok.
In SWIG mode, we don't want anything besides these top-level includes.
std::string ProtoEnumToString(ProtoEnumType enum_value)
StatusBuilder InvalidArgumentErrorBuilder()