16#include "absl/container/flat_hash_set.h"
17#include "absl/status/status.h"
30 if (!constraint.
weights().empty() &&
33 <<
"Length mismatch between weights and expressions: "
39 <<
"Invalid SOS expression";
42 absl::flat_hash_set<double> weights;
43 for (
const double weight : constraint.
weights()) {
45 if (!weights.insert(weight).second) {
47 <<
"SOS weights must be unique, but encountered duplicate weight: "
51 return absl::OkStatus();
#define RETURN_IF_ERROR(expr)
double weights(int index) const
const ::operations_research::math_opt::LinearExpressionProto & expressions(int index) const
int expressions_size() const
repeated .operations_research.math_opt.LinearExpressionProto expressions = 1;
int weights_size() const
repeated double weights = 2;
An object oriented wrapper for quadratic constraints in ModelStorage.
absl::Status ValidateConstraint(const IndicatorConstraintProto &constraint, const IdNameBiMap &variable_universe)
absl::Status CheckScalarNoNanNoInf(const double d)
absl::Status ValidateLinearExpression(const LinearExpressionProto &expression, const IdNameBiMap &variable_universe)
StatusBuilder InvalidArgumentErrorBuilder()