18#include "absl/status/status.h"
37 {.allow_positive_infinity = false, .allow_negative_infinity = false}))
38 <<
"bad linear term in quadratic constraint";
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";
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)
double lower_bound() const
double upper_bound() const
const ::operations_research::math_opt::SparseDoubleMatrixProto & quadratic_terms() const
const ::operations_research::math_opt::SparseDoubleVectorProto & linear_terms() const
::int64_t ids(int index) const
An object oriented wrapper for quadratic constraints in ModelStorage.
absl::Status SparseMatrixIdsAreKnown(const SparseDoubleMatrixProto &matrix, const IdNameBiMap &row_ids, const IdNameBiMap &column_ids)
SparseVectorView< T > MakeView(absl::Span< const int64_t > ids, const Collection &values)
absl::Status CheckIdsAndValues(const SparseVectorView< T > &vector_view, absl::string_view value_name="values")
absl::Status ValidateConstraint(const IndicatorConstraintProto &constraint, const IdNameBiMap &variable_universe)
absl::Status CheckScalar(const double value, const DoubleOptions &options)
Checks value is not NaN and satisfies the additional conditions in options.
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)
StatusBuilder InvalidArgumentErrorBuilder()