18 #include "absl/status/status.h"
23 #include "ortools/math_opt/model.pb.h"
24 #include "ortools/math_opt/sparse_containers.pb.h"
37 {.allow_positive_infinity = false, .allow_negative_infinity = false}))
38 <<
"bad linear term in quadratic constraint";
40 CheckIdsSubset(constraint.linear_terms().ids(), variable_universe))
41 <<
"bad linear term ID in quadratic constraint";
46 <<
"bad quadratic term in quadratic constraint";
48 variable_universe, variable_universe))
49 <<
"bad quadratic term ID in quadratic constraint";
53 const double lb = constraint.lower_bound();
54 const double ub = constraint.upper_bound();
56 <<
"bad quadratic constraint lower bound";
58 <<
"bad quadratic constraint upper bound";
61 <<
"Quadratic constraint bounds are inverted, rendering model "
62 "trivially infeasible: lb = "
63 << lb <<
" > " << ub <<
" = ub";
67 return absl::OkStatus();
#define RETURN_IF_ERROR(expr)
absl::Status CheckScalar(const double value, const DoubleOptions &options)
absl::Status SparseMatrixIdsAreKnown(const SparseDoubleMatrixProto &matrix, const IdNameBiMap &row_ids, const IdNameBiMap &column_ids)
absl::Status ValidateConstraint(const IndicatorConstraintProto &constraint, const IdNameBiMap &variable_universe)
absl::Status CheckIdsSubset(absl::Span< const int64_t > ids, const IdNameBiMap &universe, std::optional< int64_t > upper_bound)
absl::Status SparseMatrixValid(const SparseDoubleMatrixProto &matrix, const bool enforce_upper_triangular)
absl::Status CheckIdsAndValues(const SparseVectorView< T > &vector_view, absl::string_view value_name="values")
SparseVectorView< T > MakeView(absl::Span< const int64_t > ids, const Collection &values)
StatusBuilder InvalidArgumentErrorBuilder()