18#include "absl/status/status.h"
32 <<
"Invalid indicator variable id in indicator constraint: "
37 {.allow_positive_infinity = false, .allow_negative_infinity = false}))
38 <<
"expression of implied constraint in indicator constraint";
40 if (!variable_universe.
HasId(var_id)) {
42 <<
"Invalid variable id in implied constraint in indicator "
49 {.allow_positive_infinity = false, .allow_negative_infinity = true}))
50 <<
"invalid lower bound in indicator constraint: "
54 {.allow_positive_infinity = true, .allow_negative_infinity = false}))
55 <<
"invalid upper bound in indicator constraint: "
57 return absl::OkStatus();
#define RETURN_IF_ERROR(expr)
bool HasId(int64_t id) const
::int64_t indicator_id() const
double upper_bound() const
double lower_bound() const
const ::operations_research::math_opt::SparseDoubleVectorProto & expression() const
bool has_indicator_id() const
optional int64 indicator_id = 1;
::int64_t ids(int index) const
An object oriented wrapper for quadratic constraints in ModelStorage.
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.
StatusBuilder InvalidArgumentErrorBuilder()