# @generated by generate_proto_mypy_stubs.py.  Do not edit!
import sys
from google.protobuf.descriptor import (
    EnumDescriptor as google___protobuf___descriptor___EnumDescriptor,
)

from google.protobuf.internal.containers import (
    RepeatedCompositeFieldContainer as google___protobuf___internal___containers___RepeatedCompositeFieldContainer,
    RepeatedScalarFieldContainer as google___protobuf___internal___containers___RepeatedScalarFieldContainer,
)

from google.protobuf.message import (
    Message as google___protobuf___message___Message,
)

from ortools.util.optional_boolean_pb2 import (
    OptionalBoolean as ortools___util___optional_boolean_pb2___OptionalBoolean,
)

from typing import (
    Iterable as typing___Iterable,
    List as typing___List,
    Mapping as typing___Mapping,
    MutableMapping as typing___MutableMapping,
    Optional as typing___Optional,
    Text as typing___Text,
    Tuple as typing___Tuple,
    cast as typing___cast,
)

from typing_extensions import (
    Literal as typing_extensions___Literal,
)


class MPSolverResponseStatus(int):
    DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
    @classmethod
    def Name(cls, number: int) -> str: ...
    @classmethod
    def Value(cls, name: str) -> MPSolverResponseStatus: ...
    @classmethod
    def keys(cls) -> typing___List[str]: ...
    @classmethod
    def values(cls) -> typing___List[MPSolverResponseStatus]: ...
    @classmethod
    def items(cls) -> typing___List[typing___Tuple[str, MPSolverResponseStatus]]: ...
    MPSOLVER_OPTIMAL = typing___cast(MPSolverResponseStatus, 0)
    MPSOLVER_FEASIBLE = typing___cast(MPSolverResponseStatus, 1)
    MPSOLVER_INFEASIBLE = typing___cast(MPSolverResponseStatus, 2)
    MPSOLVER_UNBOUNDED = typing___cast(MPSolverResponseStatus, 3)
    MPSOLVER_ABNORMAL = typing___cast(MPSolverResponseStatus, 4)
    MPSOLVER_NOT_SOLVED = typing___cast(MPSolverResponseStatus, 6)
    MPSOLVER_MODEL_IS_VALID = typing___cast(MPSolverResponseStatus, 97)
    MPSOLVER_UNKNOWN_STATUS = typing___cast(MPSolverResponseStatus, 99)
    MPSOLVER_MODEL_INVALID = typing___cast(MPSolverResponseStatus, 5)
    MPSOLVER_MODEL_INVALID_SOLUTION_HINT = typing___cast(MPSolverResponseStatus, 84)
    MPSOLVER_MODEL_INVALID_SOLVER_PARAMETERS = typing___cast(MPSolverResponseStatus, 85)
    MPSOLVER_SOLVER_TYPE_UNAVAILABLE = typing___cast(MPSolverResponseStatus, 7)
MPSOLVER_OPTIMAL = typing___cast(MPSolverResponseStatus, 0)
MPSOLVER_FEASIBLE = typing___cast(MPSolverResponseStatus, 1)
MPSOLVER_INFEASIBLE = typing___cast(MPSolverResponseStatus, 2)
MPSOLVER_UNBOUNDED = typing___cast(MPSolverResponseStatus, 3)
MPSOLVER_ABNORMAL = typing___cast(MPSolverResponseStatus, 4)
MPSOLVER_NOT_SOLVED = typing___cast(MPSolverResponseStatus, 6)
MPSOLVER_MODEL_IS_VALID = typing___cast(MPSolverResponseStatus, 97)
MPSOLVER_UNKNOWN_STATUS = typing___cast(MPSolverResponseStatus, 99)
MPSOLVER_MODEL_INVALID = typing___cast(MPSolverResponseStatus, 5)
MPSOLVER_MODEL_INVALID_SOLUTION_HINT = typing___cast(MPSolverResponseStatus, 84)
MPSOLVER_MODEL_INVALID_SOLVER_PARAMETERS = typing___cast(MPSolverResponseStatus, 85)
MPSOLVER_SOLVER_TYPE_UNAVAILABLE = typing___cast(MPSolverResponseStatus, 7)

class MPVariableProto(google___protobuf___message___Message):
    lower_bound = ... # type: float
    upper_bound = ... # type: float
    objective_coefficient = ... # type: float
    is_integer = ... # type: bool
    name = ... # type: typing___Text
    branching_priority = ... # type: int

    def __init__(self,
        *,
        lower_bound : typing___Optional[float] = None,
        upper_bound : typing___Optional[float] = None,
        objective_coefficient : typing___Optional[float] = None,
        is_integer : typing___Optional[bool] = None,
        name : typing___Optional[typing___Text] = None,
        branching_priority : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPVariableProto: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"branching_priority",u"is_integer",u"lower_bound",u"name",u"objective_coefficient",u"upper_bound"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"branching_priority",u"is_integer",u"lower_bound",u"name",u"objective_coefficient",u"upper_bound"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"branching_priority",b"branching_priority",u"is_integer",b"is_integer",u"lower_bound",b"lower_bound",u"name",b"name",u"objective_coefficient",b"objective_coefficient",u"upper_bound",b"upper_bound"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"branching_priority",b"branching_priority",u"is_integer",b"is_integer",u"lower_bound",b"lower_bound",u"name",b"name",u"objective_coefficient",b"objective_coefficient",u"upper_bound",b"upper_bound"]) -> None: ...

class MPConstraintProto(google___protobuf___message___Message):
    var_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    coefficient = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]
    lower_bound = ... # type: float
    upper_bound = ... # type: float
    name = ... # type: typing___Text
    is_lazy = ... # type: bool

    def __init__(self,
        *,
        var_index : typing___Optional[typing___Iterable[int]] = None,
        coefficient : typing___Optional[typing___Iterable[float]] = None,
        lower_bound : typing___Optional[float] = None,
        upper_bound : typing___Optional[float] = None,
        name : typing___Optional[typing___Text] = None,
        is_lazy : typing___Optional[bool] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPConstraintProto: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"is_lazy",u"lower_bound",u"name",u"upper_bound"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"coefficient",u"is_lazy",u"lower_bound",u"name",u"upper_bound",u"var_index"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"is_lazy",b"is_lazy",u"lower_bound",b"lower_bound",u"name",b"name",u"upper_bound",b"upper_bound"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"coefficient",b"coefficient",u"is_lazy",b"is_lazy",u"lower_bound",b"lower_bound",u"name",b"name",u"upper_bound",b"upper_bound",u"var_index",b"var_index"]) -> None: ...

class MPGeneralConstraintProto(google___protobuf___message___Message):
    name = ... # type: typing___Text

    @property
    def indicator_constraint(self) -> MPIndicatorConstraint: ...

    @property
    def sos_constraint(self) -> MPSosConstraint: ...

    @property
    def quadratic_constraint(self) -> MPQuadraticConstraint: ...

    @property
    def abs_constraint(self) -> MPAbsConstraint: ...

    @property
    def and_constraint(self) -> MPArrayConstraint: ...

    @property
    def or_constraint(self) -> MPArrayConstraint: ...

    @property
    def min_constraint(self) -> MPArrayWithConstantConstraint: ...

    @property
    def max_constraint(self) -> MPArrayWithConstantConstraint: ...

    def __init__(self,
        *,
        name : typing___Optional[typing___Text] = None,
        indicator_constraint : typing___Optional[MPIndicatorConstraint] = None,
        sos_constraint : typing___Optional[MPSosConstraint] = None,
        quadratic_constraint : typing___Optional[MPQuadraticConstraint] = None,
        abs_constraint : typing___Optional[MPAbsConstraint] = None,
        and_constraint : typing___Optional[MPArrayConstraint] = None,
        or_constraint : typing___Optional[MPArrayConstraint] = None,
        min_constraint : typing___Optional[MPArrayWithConstantConstraint] = None,
        max_constraint : typing___Optional[MPArrayWithConstantConstraint] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPGeneralConstraintProto: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"abs_constraint",u"and_constraint",u"general_constraint",u"indicator_constraint",u"max_constraint",u"min_constraint",u"name",u"or_constraint",u"quadratic_constraint",u"sos_constraint"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"abs_constraint",u"and_constraint",u"general_constraint",u"indicator_constraint",u"max_constraint",u"min_constraint",u"name",u"or_constraint",u"quadratic_constraint",u"sos_constraint"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"abs_constraint",b"abs_constraint",u"and_constraint",b"and_constraint",u"general_constraint",b"general_constraint",u"indicator_constraint",b"indicator_constraint",u"max_constraint",b"max_constraint",u"min_constraint",b"min_constraint",u"name",b"name",u"or_constraint",b"or_constraint",u"quadratic_constraint",b"quadratic_constraint",u"sos_constraint",b"sos_constraint"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"abs_constraint",b"abs_constraint",u"and_constraint",b"and_constraint",u"general_constraint",b"general_constraint",u"indicator_constraint",b"indicator_constraint",u"max_constraint",b"max_constraint",u"min_constraint",b"min_constraint",u"name",b"name",u"or_constraint",b"or_constraint",u"quadratic_constraint",b"quadratic_constraint",u"sos_constraint",b"sos_constraint"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions___Literal[u"general_constraint",b"general_constraint"]) -> typing_extensions___Literal["indicator_constraint","sos_constraint","quadratic_constraint","abs_constraint","and_constraint","or_constraint","min_constraint","max_constraint"]: ...

class MPIndicatorConstraint(google___protobuf___message___Message):
    var_index = ... # type: int
    var_value = ... # type: int

    @property
    def constraint(self) -> MPConstraintProto: ...

    def __init__(self,
        *,
        var_index : typing___Optional[int] = None,
        var_value : typing___Optional[int] = None,
        constraint : typing___Optional[MPConstraintProto] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPIndicatorConstraint: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"constraint",u"var_index",u"var_value"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"constraint",u"var_index",u"var_value"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"constraint",b"constraint",u"var_index",b"var_index",u"var_value",b"var_value"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"constraint",b"constraint",u"var_index",b"var_index",u"var_value",b"var_value"]) -> None: ...

class MPSosConstraint(google___protobuf___message___Message):
    class Type(int):
        DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
        @classmethod
        def Name(cls, number: int) -> str: ...
        @classmethod
        def Value(cls, name: str) -> MPSosConstraint.Type: ...
        @classmethod
        def keys(cls) -> typing___List[str]: ...
        @classmethod
        def values(cls) -> typing___List[MPSosConstraint.Type]: ...
        @classmethod
        def items(cls) -> typing___List[typing___Tuple[str, MPSosConstraint.Type]]: ...
        SOS1_DEFAULT = typing___cast(MPSosConstraint.Type, 0)
        SOS2 = typing___cast(MPSosConstraint.Type, 1)
    SOS1_DEFAULT = typing___cast(MPSosConstraint.Type, 0)
    SOS2 = typing___cast(MPSosConstraint.Type, 1)

    type = ... # type: MPSosConstraint.Type
    var_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    weight = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]

    def __init__(self,
        *,
        type : typing___Optional[MPSosConstraint.Type] = None,
        var_index : typing___Optional[typing___Iterable[int]] = None,
        weight : typing___Optional[typing___Iterable[float]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPSosConstraint: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"type"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"type",u"var_index",u"weight"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"type",b"type"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"type",b"type",u"var_index",b"var_index",u"weight",b"weight"]) -> None: ...

class MPQuadraticConstraint(google___protobuf___message___Message):
    var_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    coefficient = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]
    qvar1_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    qvar2_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    qcoefficient = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]
    lower_bound = ... # type: float
    upper_bound = ... # type: float

    def __init__(self,
        *,
        var_index : typing___Optional[typing___Iterable[int]] = None,
        coefficient : typing___Optional[typing___Iterable[float]] = None,
        qvar1_index : typing___Optional[typing___Iterable[int]] = None,
        qvar2_index : typing___Optional[typing___Iterable[int]] = None,
        qcoefficient : typing___Optional[typing___Iterable[float]] = None,
        lower_bound : typing___Optional[float] = None,
        upper_bound : typing___Optional[float] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPQuadraticConstraint: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"lower_bound",u"upper_bound"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"coefficient",u"lower_bound",u"qcoefficient",u"qvar1_index",u"qvar2_index",u"upper_bound",u"var_index"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"lower_bound",b"lower_bound",u"upper_bound",b"upper_bound"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"coefficient",b"coefficient",u"lower_bound",b"lower_bound",u"qcoefficient",b"qcoefficient",u"qvar1_index",b"qvar1_index",u"qvar2_index",b"qvar2_index",u"upper_bound",b"upper_bound",u"var_index",b"var_index"]) -> None: ...

class MPAbsConstraint(google___protobuf___message___Message):
    var_index = ... # type: int
    resultant_var_index = ... # type: int

    def __init__(self,
        *,
        var_index : typing___Optional[int] = None,
        resultant_var_index : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPAbsConstraint: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"resultant_var_index",u"var_index"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"resultant_var_index",u"var_index"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"resultant_var_index",b"resultant_var_index",u"var_index",b"var_index"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"resultant_var_index",b"resultant_var_index",u"var_index",b"var_index"]) -> None: ...

class MPArrayConstraint(google___protobuf___message___Message):
    var_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    resultant_var_index = ... # type: int

    def __init__(self,
        *,
        var_index : typing___Optional[typing___Iterable[int]] = None,
        resultant_var_index : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPArrayConstraint: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"resultant_var_index"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"resultant_var_index",u"var_index"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"resultant_var_index",b"resultant_var_index"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"resultant_var_index",b"resultant_var_index",u"var_index",b"var_index"]) -> None: ...

class MPArrayWithConstantConstraint(google___protobuf___message___Message):
    var_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    constant = ... # type: float
    resultant_var_index = ... # type: int

    def __init__(self,
        *,
        var_index : typing___Optional[typing___Iterable[int]] = None,
        constant : typing___Optional[float] = None,
        resultant_var_index : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPArrayWithConstantConstraint: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"constant",u"resultant_var_index"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"constant",u"resultant_var_index",u"var_index"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"constant",b"constant",u"resultant_var_index",b"resultant_var_index"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"constant",b"constant",u"resultant_var_index",b"resultant_var_index",u"var_index",b"var_index"]) -> None: ...

class MPQuadraticObjective(google___protobuf___message___Message):
    qvar1_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    qvar2_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    coefficient = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]

    def __init__(self,
        *,
        qvar1_index : typing___Optional[typing___Iterable[int]] = None,
        qvar2_index : typing___Optional[typing___Iterable[int]] = None,
        coefficient : typing___Optional[typing___Iterable[float]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPQuadraticObjective: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def ClearField(self, field_name: typing_extensions___Literal[u"coefficient",u"qvar1_index",u"qvar2_index"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"coefficient",b"coefficient",u"qvar1_index",b"qvar1_index",u"qvar2_index",b"qvar2_index"]) -> None: ...

class PartialVariableAssignment(google___protobuf___message___Message):
    var_index = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    var_value = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]

    def __init__(self,
        *,
        var_index : typing___Optional[typing___Iterable[int]] = None,
        var_value : typing___Optional[typing___Iterable[float]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> PartialVariableAssignment: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def ClearField(self, field_name: typing_extensions___Literal[u"var_index",u"var_value"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"var_index",b"var_index",u"var_value",b"var_value"]) -> None: ...

class MPModelProto(google___protobuf___message___Message):
    maximize = ... # type: bool
    objective_offset = ... # type: float
    name = ... # type: typing___Text

    @property
    def variable(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[MPVariableProto]: ...

    @property
    def constraint(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[MPConstraintProto]: ...

    @property
    def general_constraint(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[MPGeneralConstraintProto]: ...

    @property
    def quadratic_objective(self) -> MPQuadraticObjective: ...

    @property
    def solution_hint(self) -> PartialVariableAssignment: ...

    def __init__(self,
        *,
        variable : typing___Optional[typing___Iterable[MPVariableProto]] = None,
        constraint : typing___Optional[typing___Iterable[MPConstraintProto]] = None,
        general_constraint : typing___Optional[typing___Iterable[MPGeneralConstraintProto]] = None,
        maximize : typing___Optional[bool] = None,
        objective_offset : typing___Optional[float] = None,
        quadratic_objective : typing___Optional[MPQuadraticObjective] = None,
        name : typing___Optional[typing___Text] = None,
        solution_hint : typing___Optional[PartialVariableAssignment] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPModelProto: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"maximize",u"name",u"objective_offset",u"quadratic_objective",u"solution_hint"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"constraint",u"general_constraint",u"maximize",u"name",u"objective_offset",u"quadratic_objective",u"solution_hint",u"variable"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"maximize",b"maximize",u"name",b"name",u"objective_offset",b"objective_offset",u"quadratic_objective",b"quadratic_objective",u"solution_hint",b"solution_hint"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"constraint",b"constraint",u"general_constraint",b"general_constraint",u"maximize",b"maximize",u"name",b"name",u"objective_offset",b"objective_offset",u"quadratic_objective",b"quadratic_objective",u"solution_hint",b"solution_hint",u"variable",b"variable"]) -> None: ...

class OptionalDouble(google___protobuf___message___Message):
    value = ... # type: float

    def __init__(self,
        *,
        value : typing___Optional[float] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> OptionalDouble: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"value"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"value"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"value",b"value"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"value",b"value"]) -> None: ...

class MPSolverCommonParameters(google___protobuf___message___Message):
    class LPAlgorithmValues(int):
        DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
        @classmethod
        def Name(cls, number: int) -> str: ...
        @classmethod
        def Value(cls, name: str) -> MPSolverCommonParameters.LPAlgorithmValues: ...
        @classmethod
        def keys(cls) -> typing___List[str]: ...
        @classmethod
        def values(cls) -> typing___List[MPSolverCommonParameters.LPAlgorithmValues]: ...
        @classmethod
        def items(cls) -> typing___List[typing___Tuple[str, MPSolverCommonParameters.LPAlgorithmValues]]: ...
        LP_ALGO_UNSPECIFIED = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 0)
        LP_ALGO_DUAL = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 1)
        LP_ALGO_PRIMAL = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 2)
        LP_ALGO_BARRIER = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 3)
    LP_ALGO_UNSPECIFIED = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 0)
    LP_ALGO_DUAL = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 1)
    LP_ALGO_PRIMAL = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 2)
    LP_ALGO_BARRIER = typing___cast(MPSolverCommonParameters.LPAlgorithmValues, 3)

    lp_algorithm = ... # type: MPSolverCommonParameters.LPAlgorithmValues
    presolve = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean
    scaling = ... # type: ortools___util___optional_boolean_pb2___OptionalBoolean

    @property
    def relative_mip_gap(self) -> OptionalDouble: ...

    @property
    def primal_tolerance(self) -> OptionalDouble: ...

    @property
    def dual_tolerance(self) -> OptionalDouble: ...

    def __init__(self,
        *,
        relative_mip_gap : typing___Optional[OptionalDouble] = None,
        primal_tolerance : typing___Optional[OptionalDouble] = None,
        dual_tolerance : typing___Optional[OptionalDouble] = None,
        lp_algorithm : typing___Optional[MPSolverCommonParameters.LPAlgorithmValues] = None,
        presolve : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
        scaling : typing___Optional[ortools___util___optional_boolean_pb2___OptionalBoolean] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPSolverCommonParameters: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"dual_tolerance",u"lp_algorithm",u"presolve",u"primal_tolerance",u"relative_mip_gap",u"scaling"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"dual_tolerance",u"lp_algorithm",u"presolve",u"primal_tolerance",u"relative_mip_gap",u"scaling"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"dual_tolerance",b"dual_tolerance",u"lp_algorithm",b"lp_algorithm",u"presolve",b"presolve",u"primal_tolerance",b"primal_tolerance",u"relative_mip_gap",b"relative_mip_gap",u"scaling",b"scaling"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"dual_tolerance",b"dual_tolerance",u"lp_algorithm",b"lp_algorithm",u"presolve",b"presolve",u"primal_tolerance",b"primal_tolerance",u"relative_mip_gap",b"relative_mip_gap",u"scaling",b"scaling"]) -> None: ...

class MPModelDeltaProto(google___protobuf___message___Message):
    class VariableOverridesEntry(google___protobuf___message___Message):
        key = ... # type: int

        @property
        def value(self) -> MPVariableProto: ...

        def __init__(self,
            *,
            key : typing___Optional[int] = None,
            value : typing___Optional[MPVariableProto] = None,
            ) -> None: ...
        @classmethod
        def FromString(cls, s: bytes) -> MPModelDeltaProto.VariableOverridesEntry: ...
        def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
        def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
        if sys.version_info >= (3,):
            def HasField(self, field_name: typing_extensions___Literal[u"key",u"value"]) -> bool: ...
            def ClearField(self, field_name: typing_extensions___Literal[u"key",u"value"]) -> None: ...
        else:
            def HasField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> bool: ...
            def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ...

    class ConstraintOverridesEntry(google___protobuf___message___Message):
        key = ... # type: int

        @property
        def value(self) -> MPConstraintProto: ...

        def __init__(self,
            *,
            key : typing___Optional[int] = None,
            value : typing___Optional[MPConstraintProto] = None,
            ) -> None: ...
        @classmethod
        def FromString(cls, s: bytes) -> MPModelDeltaProto.ConstraintOverridesEntry: ...
        def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
        def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
        if sys.version_info >= (3,):
            def HasField(self, field_name: typing_extensions___Literal[u"key",u"value"]) -> bool: ...
            def ClearField(self, field_name: typing_extensions___Literal[u"key",u"value"]) -> None: ...
        else:
            def HasField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> bool: ...
            def ClearField(self, field_name: typing_extensions___Literal[u"key",b"key",u"value",b"value"]) -> None: ...

    baseline_model_file_path = ... # type: typing___Text

    @property
    def variable_overrides(self) -> typing___MutableMapping[int, MPVariableProto]: ...

    @property
    def constraint_overrides(self) -> typing___MutableMapping[int, MPConstraintProto]: ...

    def __init__(self,
        *,
        baseline_model_file_path : typing___Optional[typing___Text] = None,
        variable_overrides : typing___Optional[typing___Mapping[int, MPVariableProto]] = None,
        constraint_overrides : typing___Optional[typing___Mapping[int, MPConstraintProto]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPModelDeltaProto: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"baseline_model_file_path"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"baseline_model_file_path",u"constraint_overrides",u"variable_overrides"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"baseline_model_file_path",b"baseline_model_file_path"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"baseline_model_file_path",b"baseline_model_file_path",u"constraint_overrides",b"constraint_overrides",u"variable_overrides",b"variable_overrides"]) -> None: ...

class MPModelRequest(google___protobuf___message___Message):
    class SolverType(int):
        DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
        @classmethod
        def Name(cls, number: int) -> str: ...
        @classmethod
        def Value(cls, name: str) -> MPModelRequest.SolverType: ...
        @classmethod
        def keys(cls) -> typing___List[str]: ...
        @classmethod
        def values(cls) -> typing___List[MPModelRequest.SolverType]: ...
        @classmethod
        def items(cls) -> typing___List[typing___Tuple[str, MPModelRequest.SolverType]]: ...
        GLOP_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 2)
        CLP_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 0)
        GLPK_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 1)
        GUROBI_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 6)
        XPRESS_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 101)
        CPLEX_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 10)
        SCIP_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 3)
        GLPK_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 4)
        CBC_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 5)
        GUROBI_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 7)
        XPRESS_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 102)
        CPLEX_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 11)
        BOP_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 12)
        SAT_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 14)
        KNAPSACK_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 13)
    GLOP_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 2)
    CLP_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 0)
    GLPK_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 1)
    GUROBI_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 6)
    XPRESS_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 101)
    CPLEX_LINEAR_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 10)
    SCIP_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 3)
    GLPK_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 4)
    CBC_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 5)
    GUROBI_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 7)
    XPRESS_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 102)
    CPLEX_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 11)
    BOP_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 12)
    SAT_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 14)
    KNAPSACK_MIXED_INTEGER_PROGRAMMING = typing___cast(MPModelRequest.SolverType, 13)

    solver_type = ... # type: MPModelRequest.SolverType
    solver_time_limit_seconds = ... # type: float
    enable_internal_solver_output = ... # type: bool
    solver_specific_parameters = ... # type: typing___Text

    @property
    def model(self) -> MPModelProto: ...

    @property
    def model_delta(self) -> MPModelDeltaProto: ...

    def __init__(self,
        *,
        model : typing___Optional[MPModelProto] = None,
        solver_type : typing___Optional[MPModelRequest.SolverType] = None,
        solver_time_limit_seconds : typing___Optional[float] = None,
        enable_internal_solver_output : typing___Optional[bool] = None,
        solver_specific_parameters : typing___Optional[typing___Text] = None,
        model_delta : typing___Optional[MPModelDeltaProto] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPModelRequest: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"enable_internal_solver_output",u"model",u"model_delta",u"solver_specific_parameters",u"solver_time_limit_seconds",u"solver_type"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"enable_internal_solver_output",u"model",u"model_delta",u"solver_specific_parameters",u"solver_time_limit_seconds",u"solver_type"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"enable_internal_solver_output",b"enable_internal_solver_output",u"model",b"model",u"model_delta",b"model_delta",u"solver_specific_parameters",b"solver_specific_parameters",u"solver_time_limit_seconds",b"solver_time_limit_seconds",u"solver_type",b"solver_type"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"enable_internal_solver_output",b"enable_internal_solver_output",u"model",b"model",u"model_delta",b"model_delta",u"solver_specific_parameters",b"solver_specific_parameters",u"solver_time_limit_seconds",b"solver_time_limit_seconds",u"solver_type",b"solver_type"]) -> None: ...

class MPSolutionResponse(google___protobuf___message___Message):
    status = ... # type: MPSolverResponseStatus
    status_str = ... # type: typing___Text
    objective_value = ... # type: float
    best_objective_bound = ... # type: float
    variable_value = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]
    dual_value = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]
    reduced_cost = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[float]

    def __init__(self,
        *,
        status : typing___Optional[MPSolverResponseStatus] = None,
        status_str : typing___Optional[typing___Text] = None,
        objective_value : typing___Optional[float] = None,
        best_objective_bound : typing___Optional[float] = None,
        variable_value : typing___Optional[typing___Iterable[float]] = None,
        dual_value : typing___Optional[typing___Iterable[float]] = None,
        reduced_cost : typing___Optional[typing___Iterable[float]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> MPSolutionResponse: ...
    def MergeFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    def CopyFrom(self, other_msg: google___protobuf___message___Message) -> None: ...
    if sys.version_info >= (3,):
        def HasField(self, field_name: typing_extensions___Literal[u"best_objective_bound",u"objective_value",u"status",u"status_str"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"best_objective_bound",u"dual_value",u"objective_value",u"reduced_cost",u"status",u"status_str",u"variable_value"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"best_objective_bound",b"best_objective_bound",u"objective_value",b"objective_value",u"status",b"status",u"status_str",b"status_str"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"best_objective_bound",b"best_objective_bound",u"dual_value",b"dual_value",u"objective_value",b"objective_value",u"reduced_cost",b"reduced_cost",u"status",b"status",u"status_str",b"status_str",u"variable_value",b"variable_value"]) -> None: ...
