"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
Copyright 2010-2025 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

An encoding format for mathematical optimization problems.
"""

import builtins
import collections.abc
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.message
import ortools.math_opt.sparse_containers_pb2
import sys
import typing

if sys.version_info >= (3, 10):
    import typing as typing_extensions
else:
    import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

@typing.final
class VariablesProto(google.protobuf.message.Message):
    """As used below, we define "#variables" = size(VariablesProto.ids)."""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    IDS_FIELD_NUMBER: builtins.int
    LOWER_BOUNDS_FIELD_NUMBER: builtins.int
    UPPER_BOUNDS_FIELD_NUMBER: builtins.int
    INTEGERS_FIELD_NUMBER: builtins.int
    NAMES_FIELD_NUMBER: builtins.int
    @property
    def ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """Must be nonnegative and strictly increasing. The max(int64) value can't be
        used.
        """

    @property
    def lower_bounds(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """Should have length equal to #variables, values in [-inf, inf)."""

    @property
    def upper_bounds(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """Should have length equal to #variables, values in (-inf, inf]."""

    @property
    def integers(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.bool]:
        """Should have length equal to #variables. Value is false for continuous
        variables and true for integer variables.
        """

    @property
    def names(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
        """If not set, assumed to be all empty strings. Otherwise, should have length
        equal to #variables.

        All nonempty names must be distinct. TODO(b/169575522): we may relax this.
        """

    def __init__(
        self,
        *,
        ids: collections.abc.Iterable[builtins.int] | None = ...,
        lower_bounds: collections.abc.Iterable[builtins.float] | None = ...,
        upper_bounds: collections.abc.Iterable[builtins.float] | None = ...,
        integers: collections.abc.Iterable[builtins.bool] | None = ...,
        names: collections.abc.Iterable[builtins.str] | None = ...,
    ) -> None: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["ids", b"ids", "integers", b"integers", "lower_bounds", b"lower_bounds", "names", b"names", "upper_bounds", b"upper_bounds"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___VariablesProto: typing_extensions.TypeAlias = VariablesProto

@typing.final
class ObjectiveProto(google.protobuf.message.Message):
    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    MAXIMIZE_FIELD_NUMBER: builtins.int
    OFFSET_FIELD_NUMBER: builtins.int
    LINEAR_COEFFICIENTS_FIELD_NUMBER: builtins.int
    QUADRATIC_COEFFICIENTS_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    PRIORITY_FIELD_NUMBER: builtins.int
    maximize: builtins.bool
    """false is minimize, true is maximize"""
    offset: builtins.float
    """Must be finite and not NaN."""
    name: builtins.str
    """Parent messages may have uniqueness requirements on this field; e.g., see
    ModelProto.objectives and AuxiliaryObjectivesUpdatesProto.new_objectives.
    """
    priority: builtins.int
    """For multi-objective problems, the priority of this objective relative to
    the others (lower is more important). This value must be nonnegative.
    Furthermore, each objective priority in the model must be distinct at solve
    time. This condition is not validated at the proto level, so models may
    temporarily have objectives with the same priority.
    """
    @property
    def linear_coefficients(self) -> ortools.math_opt.sparse_containers_pb2.SparseDoubleVectorProto:
        """ObjectiveProto terms that are linear in the decision variables.

        Requirements:
         * linear_coefficients.ids are elements of VariablesProto.ids.
         * VariablesProto not specified correspond to zero.
         * linear_coefficients.values must all be finite.
         * linear_coefficients.values can be zero, but this just wastes space.
        """

    @property
    def quadratic_coefficients(self) -> ortools.math_opt.sparse_containers_pb2.SparseDoubleMatrixProto:
        """Objective terms that are quadratic in the decision variables.

        Requirements in addition to those on SparseDoubleMatrixProto messages:
         * Each element of quadratic_coefficients.row_ids and each element of
           quadratic_coefficients.column_ids must be an element of
           VariablesProto.ids.
         * The matrix must be upper triangular: for each i,
           quadratic_coefficients.row_ids[i] <=
           quadratic_coefficients.column_ids[i].

        Notes:
         * Terms not explicitly stored have zero coefficient.
         * Elements of quadratic_coefficients.coefficients can be zero, but this
           just wastes space.
        """

    def __init__(
        self,
        *,
        maximize: builtins.bool = ...,
        offset: builtins.float = ...,
        linear_coefficients: ortools.math_opt.sparse_containers_pb2.SparseDoubleVectorProto | None = ...,
        quadratic_coefficients: ortools.math_opt.sparse_containers_pb2.SparseDoubleMatrixProto | None = ...,
        name: builtins.str = ...,
        priority: builtins.int = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["linear_coefficients", b"linear_coefficients", "quadratic_coefficients", b"quadratic_coefficients"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["linear_coefficients", b"linear_coefficients", "maximize", b"maximize", "name", b"name", "offset", b"offset", "priority", b"priority", "quadratic_coefficients", b"quadratic_coefficients"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___ObjectiveProto: typing_extensions.TypeAlias = ObjectiveProto

@typing.final
class LinearConstraintsProto(google.protobuf.message.Message):
    """As used below, we define "#linear constraints" =
    size(LinearConstraintsProto.ids).
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    IDS_FIELD_NUMBER: builtins.int
    LOWER_BOUNDS_FIELD_NUMBER: builtins.int
    UPPER_BOUNDS_FIELD_NUMBER: builtins.int
    NAMES_FIELD_NUMBER: builtins.int
    @property
    def ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
        """Must be nonnegative and strictly increasing. The max(int64) value can't be
        used.
        """

    @property
    def lower_bounds(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """Should have length equal to #linear constraints, values in [-inf, inf)."""

    @property
    def upper_bounds(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """Should have length equal to #linear constraints, values in (-inf, inf]."""

    @property
    def names(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]:
        """If not set, assumed to be all empty strings. Otherwise, should have length
        equal to #linear constraints.

        All nonempty names must be distinct. TODO(b/169575522): we may relax this.
        """

    def __init__(
        self,
        *,
        ids: collections.abc.Iterable[builtins.int] | None = ...,
        lower_bounds: collections.abc.Iterable[builtins.float] | None = ...,
        upper_bounds: collections.abc.Iterable[builtins.float] | None = ...,
        names: collections.abc.Iterable[builtins.str] | None = ...,
    ) -> None: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["ids", b"ids", "lower_bounds", b"lower_bounds", "names", b"names", "upper_bounds", b"upper_bounds"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___LinearConstraintsProto: typing_extensions.TypeAlias = LinearConstraintsProto

@typing.final
class QuadraticConstraintProto(google.protobuf.message.Message):
    """A single quadratic constraint of the form:
       lb <= sum{linear_terms} + sum{quadratic_terms} <= ub.

    If a variable involved in this constraint is deleted, it is treated as if it
    were set to zero.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    LINEAR_TERMS_FIELD_NUMBER: builtins.int
    QUADRATIC_TERMS_FIELD_NUMBER: builtins.int
    LOWER_BOUND_FIELD_NUMBER: builtins.int
    UPPER_BOUND_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    lower_bound: builtins.float
    """Must have value in [-inf, inf), and be less than or equal to `upper_bound`."""
    upper_bound: builtins.float
    """Must have value in (-inf, inf], and be greater than or equal to
    `lower_bound`.
    """
    name: builtins.str
    """Parent messages may have uniqueness requirements on this field; e.g., see
    ModelProto.quadratic_constraints and
    QuadraticConstraintUpdatesProto.new_constraints.
    """
    @property
    def linear_terms(self) -> ortools.math_opt.sparse_containers_pb2.SparseDoubleVectorProto:
        """Terms that are linear in the decision variables.

        In addition to requirements on SparseDoubleVectorProto messages we require
        that:
         * linear_terms.ids are elements of VariablesProto.ids.
         * linear_terms.values must all be finite and not-NaN.

        Notes:
         * Variable ids omitted have a corresponding coefficient of zero.
         * linear_terms.values can be zero, but this just wastes space.
        """

    @property
    def quadratic_terms(self) -> ortools.math_opt.sparse_containers_pb2.SparseDoubleMatrixProto:
        """Terms that are quadratic in the decision variables.

        In addition to requirements on SparseDoubleMatrixProto messages we require
        that:
         * Each element of quadratic_terms.row_ids and each element of
           quadratic_terms.column_ids must be an element of VariablesProto.ids.
         * The matrix must be upper triangular: for each i,
           quadratic_terms.row_ids[i] <= quadratic_terms.column_ids[i].

        Notes:
         * Terms not explicitly stored have zero coefficient.
         * Elements of quadratic_terms.coefficients can be zero, but this just
           wastes space.
        """

    def __init__(
        self,
        *,
        linear_terms: ortools.math_opt.sparse_containers_pb2.SparseDoubleVectorProto | None = ...,
        quadratic_terms: ortools.math_opt.sparse_containers_pb2.SparseDoubleMatrixProto | None = ...,
        lower_bound: builtins.float = ...,
        upper_bound: builtins.float = ...,
        name: builtins.str = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["linear_terms", b"linear_terms", "quadratic_terms", b"quadratic_terms"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["linear_terms", b"linear_terms", "lower_bound", b"lower_bound", "name", b"name", "quadratic_terms", b"quadratic_terms", "upper_bound", b"upper_bound"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___QuadraticConstraintProto: typing_extensions.TypeAlias = QuadraticConstraintProto

@typing.final
class SecondOrderConeConstraintProto(google.protobuf.message.Message):
    """A single second-order cone constraint of the form:

       ||`arguments_to_norm`||_2 <= `upper_bound`,

    where `upper_bound` and each element of `arguments_to_norm` are linear
    expressions.

    If a variable involved in this constraint is deleted, it is treated as if it
    were set to zero.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    UPPER_BOUND_FIELD_NUMBER: builtins.int
    ARGUMENTS_TO_NORM_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    name: builtins.str
    """Parent messages may have uniqueness requirements on this field; e.g., see
    `ModelProto.second_order_cone_constraints` and
    `SecondOrderConeConstraintUpdatesProto.new_constraints`.
    """
    @property
    def upper_bound(self) -> ortools.math_opt.sparse_containers_pb2.LinearExpressionProto: ...
    @property
    def arguments_to_norm(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ortools.math_opt.sparse_containers_pb2.LinearExpressionProto]: ...
    def __init__(
        self,
        *,
        upper_bound: ortools.math_opt.sparse_containers_pb2.LinearExpressionProto | None = ...,
        arguments_to_norm: collections.abc.Iterable[ortools.math_opt.sparse_containers_pb2.LinearExpressionProto] | None = ...,
        name: builtins.str = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["upper_bound", b"upper_bound"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["arguments_to_norm", b"arguments_to_norm", "name", b"name", "upper_bound", b"upper_bound"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___SecondOrderConeConstraintProto: typing_extensions.TypeAlias = SecondOrderConeConstraintProto

@typing.final
class SosConstraintProto(google.protobuf.message.Message):
    """Data for representing a single SOS1 or SOS2 constraint.

    If a variable involved in this constraint is deleted, it is treated as if it
    were set to zero.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    EXPRESSIONS_FIELD_NUMBER: builtins.int
    WEIGHTS_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    name: builtins.str
    """Parent messages may have uniqueness requirements on this field; e.g., see
    ModelProto.sos1_constraints and SosConstraintUpdatesProto.new_constraints.
    """
    @property
    def expressions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ortools.math_opt.sparse_containers_pb2.LinearExpressionProto]:
        """The expressions over which to apply the SOS constraint:
          * SOS1: At most one element takes a nonzero value.
          * SOS2: At most two elements take nonzero values, and they must be
                  adjacent in the repeated ordering.
        """

    @property
    def weights(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]:
        """Either empty or of equal length to expressions. If empty, default weights
        are 1, 2, ...
        If present, the entries must be unique.
        """

    def __init__(
        self,
        *,
        expressions: collections.abc.Iterable[ortools.math_opt.sparse_containers_pb2.LinearExpressionProto] | None = ...,
        weights: collections.abc.Iterable[builtins.float] | None = ...,
        name: builtins.str = ...,
    ) -> None: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["expressions", b"expressions", "name", b"name", "weights", b"weights"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___SosConstraintProto: typing_extensions.TypeAlias = SosConstraintProto

@typing.final
class IndicatorConstraintProto(google.protobuf.message.Message):
    """Data for representing a single indicator constraint of the form:
       Variable(indicator_id) = (activate_on_zero ? 0 : 1) ⇒
       lower_bound <= expression <= upper_bound.

    If a variable involved in this constraint (either the indicator, or appearing
    in `expression`) is deleted, it is treated as if it were set to zero. In
    particular, deleting the indicator variable means that the indicator
    constraint is vacuous if `activate_on_zero` is false, and that it is
    equivalent to a linear constraint if `activate_on_zero` is true.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    INDICATOR_ID_FIELD_NUMBER: builtins.int
    ACTIVATE_ON_ZERO_FIELD_NUMBER: builtins.int
    EXPRESSION_FIELD_NUMBER: builtins.int
    LOWER_BOUND_FIELD_NUMBER: builtins.int
    UPPER_BOUND_FIELD_NUMBER: builtins.int
    NAME_FIELD_NUMBER: builtins.int
    indicator_id: builtins.int
    """An ID corresponding to a binary variable, or unset. If unset, the indicator
    constraint is ignored. If set, we require that:
      * VariablesProto.integers[indicator_id] = true,
      * VariablesProto.lower_bounds[indicator_id] >= 0,
      * VariablesProto.upper_bounds[indicator_id] <= 1.
    These conditions are not validated by MathOpt, but if not satisfied will
    lead to the solver returning an error upon solving.
    """
    activate_on_zero: builtins.bool
    """If true, then if the indicator variable takes value 0, the implied
    constraint must hold. Otherwise, if the indicator variable takes value 1,
    then the implied constraint must hold.
    """
    lower_bound: builtins.float
    """Must have value in [-inf, inf); cannot be NaN."""
    upper_bound: builtins.float
    """Must have value in (-inf, inf]; cannot be NaN."""
    name: builtins.str
    """Parent messages may have uniqueness requirements on this field; e.g., see
    `ModelProto.indicator_constraints` and
    `IndicatorConstraintUpdatesProto.new_constraints`.
    """
    @property
    def expression(self) -> ortools.math_opt.sparse_containers_pb2.SparseDoubleVectorProto:
        """Must be a valid linear expression with respect to the containing model:
          * All stated conditions on `SparseDoubleVectorProto`,
          * All elements of `expression.values` must be finite,
          * `expression.ids` are a subset of `VariablesProto.ids`.
        """

    def __init__(
        self,
        *,
        indicator_id: builtins.int | None = ...,
        activate_on_zero: builtins.bool = ...,
        expression: ortools.math_opt.sparse_containers_pb2.SparseDoubleVectorProto | None = ...,
        lower_bound: builtins.float = ...,
        upper_bound: builtins.float = ...,
        name: builtins.str = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["_indicator_id", b"_indicator_id", "expression", b"expression", "indicator_id", b"indicator_id"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["_indicator_id", b"_indicator_id", "activate_on_zero", b"activate_on_zero", "expression", b"expression", "indicator_id", b"indicator_id", "lower_bound", b"lower_bound", "name", b"name", "upper_bound", b"upper_bound"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...
    _WhichOneofReturnType__indicator_id: typing_extensions.TypeAlias = typing.Literal["indicator_id"]
    _WhichOneofArgType__indicator_id: typing_extensions.TypeAlias = typing.Literal["_indicator_id", b"_indicator_id"]
    def WhichOneof(self, oneof_group: _WhichOneofArgType__indicator_id) -> _WhichOneofReturnType__indicator_id | None: ...

Global___IndicatorConstraintProto: typing_extensions.TypeAlias = IndicatorConstraintProto

@typing.final
class ModelProto(google.protobuf.message.Message):
    """An optimization problem.

    MathOpt supports:
      - Continuous and integer decision variables with optional finite bounds.
      - Linear and quadratic objectives (single or multiple objectives), either
      minimized or maximized.
      - A number of constraints types, including:
        * Linear constraints
        * Quadratic constraints
        * Second-order cone constraints
        * Logical constraints
          > SOS1 and SOS2 constraints
          > Indicator constraints

    By default, constraints are represented in "id-to-data" maps. However, we
    represent linear constraints in a more efficient "struct-of-arrays" format.
    """

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    @typing.final
    class AuxiliaryObjectivesEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.int
        @property
        def value(self) -> Global___ObjectiveProto: ...
        def __init__(
            self,
            *,
            key: builtins.int = ...,
            value: Global___ObjectiveProto | None = ...,
        ) -> None: ...
        _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["value", b"value"]
        def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
        _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["key", b"key", "value", b"value"]
        def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

    @typing.final
    class QuadraticConstraintsEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.int
        @property
        def value(self) -> Global___QuadraticConstraintProto: ...
        def __init__(
            self,
            *,
            key: builtins.int = ...,
            value: Global___QuadraticConstraintProto | None = ...,
        ) -> None: ...
        _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["value", b"value"]
        def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
        _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["key", b"key", "value", b"value"]
        def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

    @typing.final
    class SecondOrderConeConstraintsEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.int
        @property
        def value(self) -> Global___SecondOrderConeConstraintProto: ...
        def __init__(
            self,
            *,
            key: builtins.int = ...,
            value: Global___SecondOrderConeConstraintProto | None = ...,
        ) -> None: ...
        _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["value", b"value"]
        def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
        _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["key", b"key", "value", b"value"]
        def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

    @typing.final
    class Sos1ConstraintsEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.int
        @property
        def value(self) -> Global___SosConstraintProto: ...
        def __init__(
            self,
            *,
            key: builtins.int = ...,
            value: Global___SosConstraintProto | None = ...,
        ) -> None: ...
        _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["value", b"value"]
        def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
        _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["key", b"key", "value", b"value"]
        def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

    @typing.final
    class Sos2ConstraintsEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.int
        @property
        def value(self) -> Global___SosConstraintProto: ...
        def __init__(
            self,
            *,
            key: builtins.int = ...,
            value: Global___SosConstraintProto | None = ...,
        ) -> None: ...
        _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["value", b"value"]
        def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
        _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["key", b"key", "value", b"value"]
        def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

    @typing.final
    class IndicatorConstraintsEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor

        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: builtins.int
        @property
        def value(self) -> Global___IndicatorConstraintProto: ...
        def __init__(
            self,
            *,
            key: builtins.int = ...,
            value: Global___IndicatorConstraintProto | None = ...,
        ) -> None: ...
        _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["value", b"value"]
        def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
        _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["key", b"key", "value", b"value"]
        def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

    NAME_FIELD_NUMBER: builtins.int
    VARIABLES_FIELD_NUMBER: builtins.int
    OBJECTIVE_FIELD_NUMBER: builtins.int
    AUXILIARY_OBJECTIVES_FIELD_NUMBER: builtins.int
    LINEAR_CONSTRAINTS_FIELD_NUMBER: builtins.int
    LINEAR_CONSTRAINT_MATRIX_FIELD_NUMBER: builtins.int
    QUADRATIC_CONSTRAINTS_FIELD_NUMBER: builtins.int
    SECOND_ORDER_CONE_CONSTRAINTS_FIELD_NUMBER: builtins.int
    SOS1_CONSTRAINTS_FIELD_NUMBER: builtins.int
    SOS2_CONSTRAINTS_FIELD_NUMBER: builtins.int
    INDICATOR_CONSTRAINTS_FIELD_NUMBER: builtins.int
    name: builtins.str
    @property
    def variables(self) -> Global___VariablesProto: ...
    @property
    def objective(self) -> Global___ObjectiveProto:
        """The primary objective in the model."""

    @property
    def auxiliary_objectives(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, Global___ObjectiveProto]:
        """Auxiliary objectives for use in multi-objective models.

        Map key IDs must be in [0, max(int64)). Each priority, and each nonempty
        name, must be unique and also distinct from the primary `objective`.
        """

    @property
    def linear_constraints(self) -> Global___LinearConstraintsProto: ...
    @property
    def linear_constraint_matrix(self) -> ortools.math_opt.sparse_containers_pb2.SparseDoubleMatrixProto:
        """The variable coefficients for the linear constraints.

        If a variable involved in this constraint is deleted, it is treated as if
        it were set to zero.

        Requirements:
         * linear_constraint_matrix.row_ids are elements of linear_constraints.ids.
         * linear_constraint_matrix.column_ids are elements of variables.ids.
         * Matrix entries not specified are zero.
         * linear_constraint_matrix.coefficients must all be finite.
        """

    @property
    def quadratic_constraints(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, Global___QuadraticConstraintProto]:
        """Mapped constraints (i.e., stored in "constraint ID"-to-"constraint data"
        map). For each subsequent submessage, we require that:
          * Each key is in [0, max(int64)).
          * Each key is unique in its respective map (but not necessarily across
            constraint types)
          * Each value contains a name field (called `name`), and each nonempty
            name must be distinct across all map entries (but not necessarily
            across constraint types).

        Quadratic constraints in the model.
        """

    @property
    def second_order_cone_constraints(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, Global___SecondOrderConeConstraintProto]:
        """Second-order cone constraints in the model."""

    @property
    def sos1_constraints(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, Global___SosConstraintProto]:
        """SOS1 constraints in the model, which constrain that at most one
        `expression` can be nonzero. The optional `weights` entries are an
        implementation detail used by the solver to (hopefully) converge more
        quickly. In more detail, solvers may (or may not) use these weights to
        select branching decisions that produce "balanced" children nodes.
        """

    @property
    def sos2_constraints(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, Global___SosConstraintProto]:
        """SOS2 constraints in the model, which constrain that at most two entries of
        `expression` can be nonzero, and they must be adjacent in their ordering.
        If no `weights` are provided, this ordering is their linear ordering in the
        `expressions` list; if `weights` are presented, the ordering is taken with
        respect to these values in increasing order.
        """

    @property
    def indicator_constraints(self) -> google.protobuf.internal.containers.MessageMap[builtins.int, Global___IndicatorConstraintProto]:
        """Indicator constraints in the model, which enforce that, if a binary
        "indicator variable" is set to one, then an "implied constraint" must hold.
        """

    def __init__(
        self,
        *,
        name: builtins.str = ...,
        variables: Global___VariablesProto | None = ...,
        objective: Global___ObjectiveProto | None = ...,
        auxiliary_objectives: collections.abc.Mapping[builtins.int, Global___ObjectiveProto] | None = ...,
        linear_constraints: Global___LinearConstraintsProto | None = ...,
        linear_constraint_matrix: ortools.math_opt.sparse_containers_pb2.SparseDoubleMatrixProto | None = ...,
        quadratic_constraints: collections.abc.Mapping[builtins.int, Global___QuadraticConstraintProto] | None = ...,
        second_order_cone_constraints: collections.abc.Mapping[builtins.int, Global___SecondOrderConeConstraintProto] | None = ...,
        sos1_constraints: collections.abc.Mapping[builtins.int, Global___SosConstraintProto] | None = ...,
        sos2_constraints: collections.abc.Mapping[builtins.int, Global___SosConstraintProto] | None = ...,
        indicator_constraints: collections.abc.Mapping[builtins.int, Global___IndicatorConstraintProto] | None = ...,
    ) -> None: ...
    _HasFieldArgType: typing_extensions.TypeAlias = typing.Literal["linear_constraint_matrix", b"linear_constraint_matrix", "linear_constraints", b"linear_constraints", "objective", b"objective", "variables", b"variables"]
    def HasField(self, field_name: _HasFieldArgType) -> builtins.bool: ...
    _ClearFieldArgType: typing_extensions.TypeAlias = typing.Literal["auxiliary_objectives", b"auxiliary_objectives", "indicator_constraints", b"indicator_constraints", "linear_constraint_matrix", b"linear_constraint_matrix", "linear_constraints", b"linear_constraints", "name", b"name", "objective", b"objective", "quadratic_constraints", b"quadratic_constraints", "second_order_cone_constraints", b"second_order_cone_constraints", "sos1_constraints", b"sos1_constraints", "sos2_constraints", b"sos2_constraints", "variables", b"variables"]
    def ClearField(self, field_name: _ClearFieldArgType) -> None: ...

Global___ModelProto: typing_extensions.TypeAlias = ModelProto
