# @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 typing import (
    Iterable as typing___Iterable,
    List as typing___List,
    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 CpSolverStatus(int):
    DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
    @classmethod
    def Name(cls, number: int) -> str: ...
    @classmethod
    def Value(cls, name: str) -> CpSolverStatus: ...
    @classmethod
    def keys(cls) -> typing___List[str]: ...
    @classmethod
    def values(cls) -> typing___List[CpSolverStatus]: ...
    @classmethod
    def items(cls) -> typing___List[typing___Tuple[str, CpSolverStatus]]: ...
    UNKNOWN = typing___cast(CpSolverStatus, 0)
    MODEL_INVALID = typing___cast(CpSolverStatus, 1)
    FEASIBLE = typing___cast(CpSolverStatus, 2)
    INFEASIBLE = typing___cast(CpSolverStatus, 3)
    OPTIMAL = typing___cast(CpSolverStatus, 4)
UNKNOWN = typing___cast(CpSolverStatus, 0)
MODEL_INVALID = typing___cast(CpSolverStatus, 1)
FEASIBLE = typing___cast(CpSolverStatus, 2)
INFEASIBLE = typing___cast(CpSolverStatus, 3)
OPTIMAL = typing___cast(CpSolverStatus, 4)

class IntegerVariableProto(google___protobuf___message___Message):
    name = ... # type: typing___Text
    domain = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        name : typing___Optional[typing___Text] = None,
        domain : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> IntegerVariableProto: ...
    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"domain",u"name"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"domain",b"domain",u"name",b"name"]) -> None: ...

class BoolArgumentProto(google___protobuf___message___Message):
    literals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        literals : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> BoolArgumentProto: ...
    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"literals"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"literals",b"literals"]) -> None: ...

class IntegerArgumentProto(google___protobuf___message___Message):
    target = ... # type: int
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        target : typing___Optional[int] = None,
        vars : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> IntegerArgumentProto: ...
    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"target",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"target",b"target",u"vars",b"vars"]) -> None: ...

class LinearExpressionProto(google___protobuf___message___Message):
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    coeffs = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    offset = ... # type: int

    def __init__(self,
        *,
        vars : typing___Optional[typing___Iterable[int]] = None,
        coeffs : typing___Optional[typing___Iterable[int]] = None,
        offset : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> LinearExpressionProto: ...
    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"coeffs",u"offset",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"coeffs",b"coeffs",u"offset",b"offset",u"vars",b"vars"]) -> None: ...

class LinearArgumentProto(google___protobuf___message___Message):

    @property
    def target(self) -> LinearExpressionProto: ...

    @property
    def exprs(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[LinearExpressionProto]: ...

    def __init__(self,
        *,
        target : typing___Optional[LinearExpressionProto] = None,
        exprs : typing___Optional[typing___Iterable[LinearExpressionProto]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> LinearArgumentProto: ...
    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"target"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"exprs",u"target"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"target",b"target"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"exprs",b"exprs",u"target",b"target"]) -> None: ...

class AllDifferentConstraintProto(google___protobuf___message___Message):
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        vars : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> AllDifferentConstraintProto: ...
    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"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"vars",b"vars"]) -> None: ...

class LinearConstraintProto(google___protobuf___message___Message):
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    coeffs = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    domain = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        vars : typing___Optional[typing___Iterable[int]] = None,
        coeffs : typing___Optional[typing___Iterable[int]] = None,
        domain : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> LinearConstraintProto: ...
    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"coeffs",u"domain",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"coeffs",b"coeffs",u"domain",b"domain",u"vars",b"vars"]) -> None: ...

class ElementConstraintProto(google___protobuf___message___Message):
    index = ... # type: int
    target = ... # type: int
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        index : typing___Optional[int] = None,
        target : typing___Optional[int] = None,
        vars : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> ElementConstraintProto: ...
    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"index",u"target",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"index",b"index",u"target",b"target",u"vars",b"vars"]) -> None: ...

class IntervalConstraintProto(google___protobuf___message___Message):
    start = ... # type: int
    end = ... # type: int
    size = ... # type: int

    def __init__(self,
        *,
        start : typing___Optional[int] = None,
        end : typing___Optional[int] = None,
        size : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> IntervalConstraintProto: ...
    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"end",u"size",u"start"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"end",b"end",u"size",b"size",u"start",b"start"]) -> None: ...

class NoOverlapConstraintProto(google___protobuf___message___Message):
    intervals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        intervals : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> NoOverlapConstraintProto: ...
    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"intervals"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"intervals",b"intervals"]) -> None: ...

class NoOverlap2DConstraintProto(google___protobuf___message___Message):
    x_intervals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    y_intervals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    boxes_with_null_area_can_overlap = ... # type: bool

    def __init__(self,
        *,
        x_intervals : typing___Optional[typing___Iterable[int]] = None,
        y_intervals : typing___Optional[typing___Iterable[int]] = None,
        boxes_with_null_area_can_overlap : typing___Optional[bool] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> NoOverlap2DConstraintProto: ...
    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"boxes_with_null_area_can_overlap",u"x_intervals",u"y_intervals"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"boxes_with_null_area_can_overlap",b"boxes_with_null_area_can_overlap",u"x_intervals",b"x_intervals",u"y_intervals",b"y_intervals"]) -> None: ...

class CumulativeConstraintProto(google___protobuf___message___Message):
    capacity = ... # type: int
    intervals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    demands = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        capacity : typing___Optional[int] = None,
        intervals : typing___Optional[typing___Iterable[int]] = None,
        demands : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> CumulativeConstraintProto: ...
    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"capacity",u"demands",u"intervals"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"capacity",b"capacity",u"demands",b"demands",u"intervals",b"intervals"]) -> None: ...

class ReservoirConstraintProto(google___protobuf___message___Message):
    min_level = ... # type: int
    max_level = ... # type: int
    times = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    demands = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    actives = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        min_level : typing___Optional[int] = None,
        max_level : typing___Optional[int] = None,
        times : typing___Optional[typing___Iterable[int]] = None,
        demands : typing___Optional[typing___Iterable[int]] = None,
        actives : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> ReservoirConstraintProto: ...
    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"actives",u"demands",u"max_level",u"min_level",u"times"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"actives",b"actives",u"demands",b"demands",u"max_level",b"max_level",u"min_level",b"min_level",u"times",b"times"]) -> None: ...

class CircuitConstraintProto(google___protobuf___message___Message):
    tails = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    heads = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    literals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        tails : typing___Optional[typing___Iterable[int]] = None,
        heads : typing___Optional[typing___Iterable[int]] = None,
        literals : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> CircuitConstraintProto: ...
    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"heads",u"literals",u"tails"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"heads",b"heads",u"literals",b"literals",u"tails",b"tails"]) -> None: ...

class RoutesConstraintProto(google___protobuf___message___Message):
    tails = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    heads = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    literals = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    demands = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    capacity = ... # type: int

    def __init__(self,
        *,
        tails : typing___Optional[typing___Iterable[int]] = None,
        heads : typing___Optional[typing___Iterable[int]] = None,
        literals : typing___Optional[typing___Iterable[int]] = None,
        demands : typing___Optional[typing___Iterable[int]] = None,
        capacity : typing___Optional[int] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> RoutesConstraintProto: ...
    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"capacity",u"demands",u"heads",u"literals",u"tails"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"capacity",b"capacity",u"demands",b"demands",u"heads",b"heads",u"literals",b"literals",u"tails",b"tails"]) -> None: ...

class CircuitCoveringConstraintProto(google___protobuf___message___Message):
    nexts = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    distinguished_nodes = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        nexts : typing___Optional[typing___Iterable[int]] = None,
        distinguished_nodes : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> CircuitCoveringConstraintProto: ...
    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"distinguished_nodes",u"nexts"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"distinguished_nodes",b"distinguished_nodes",u"nexts",b"nexts"]) -> None: ...

class TableConstraintProto(google___protobuf___message___Message):
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    values = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    negated = ... # type: bool

    def __init__(self,
        *,
        vars : typing___Optional[typing___Iterable[int]] = None,
        values : typing___Optional[typing___Iterable[int]] = None,
        negated : typing___Optional[bool] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> TableConstraintProto: ...
    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"negated",u"values",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"negated",b"negated",u"values",b"values",u"vars",b"vars"]) -> None: ...

class InverseConstraintProto(google___protobuf___message___Message):
    f_direct = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    f_inverse = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        f_direct : typing___Optional[typing___Iterable[int]] = None,
        f_inverse : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> InverseConstraintProto: ...
    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"f_direct",u"f_inverse"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"f_direct",b"f_direct",u"f_inverse",b"f_inverse"]) -> None: ...

class AutomatonConstraintProto(google___protobuf___message___Message):
    starting_state = ... # type: int
    final_states = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    transition_tail = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    transition_head = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    transition_label = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        starting_state : typing___Optional[int] = None,
        final_states : typing___Optional[typing___Iterable[int]] = None,
        transition_tail : typing___Optional[typing___Iterable[int]] = None,
        transition_head : typing___Optional[typing___Iterable[int]] = None,
        transition_label : typing___Optional[typing___Iterable[int]] = None,
        vars : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> AutomatonConstraintProto: ...
    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"final_states",u"starting_state",u"transition_head",u"transition_label",u"transition_tail",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"final_states",b"final_states",u"starting_state",b"starting_state",u"transition_head",b"transition_head",u"transition_label",b"transition_label",u"transition_tail",b"transition_tail",u"vars",b"vars"]) -> None: ...

class ConstraintProto(google___protobuf___message___Message):
    name = ... # type: typing___Text
    enforcement_literal = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    @property
    def bool_or(self) -> BoolArgumentProto: ...

    @property
    def bool_and(self) -> BoolArgumentProto: ...

    @property
    def at_most_one(self) -> BoolArgumentProto: ...

    @property
    def bool_xor(self) -> BoolArgumentProto: ...

    @property
    def int_div(self) -> IntegerArgumentProto: ...

    @property
    def int_mod(self) -> IntegerArgumentProto: ...

    @property
    def int_max(self) -> IntegerArgumentProto: ...

    @property
    def lin_max(self) -> LinearArgumentProto: ...

    @property
    def int_min(self) -> IntegerArgumentProto: ...

    @property
    def lin_min(self) -> LinearArgumentProto: ...

    @property
    def int_prod(self) -> IntegerArgumentProto: ...

    @property
    def linear(self) -> LinearConstraintProto: ...

    @property
    def all_diff(self) -> AllDifferentConstraintProto: ...

    @property
    def element(self) -> ElementConstraintProto: ...

    @property
    def circuit(self) -> CircuitConstraintProto: ...

    @property
    def routes(self) -> RoutesConstraintProto: ...

    @property
    def circuit_covering(self) -> CircuitCoveringConstraintProto: ...

    @property
    def table(self) -> TableConstraintProto: ...

    @property
    def automaton(self) -> AutomatonConstraintProto: ...

    @property
    def inverse(self) -> InverseConstraintProto: ...

    @property
    def reservoir(self) -> ReservoirConstraintProto: ...

    @property
    def interval(self) -> IntervalConstraintProto: ...

    @property
    def no_overlap(self) -> NoOverlapConstraintProto: ...

    @property
    def no_overlap_2d(self) -> NoOverlap2DConstraintProto: ...

    @property
    def cumulative(self) -> CumulativeConstraintProto: ...

    def __init__(self,
        *,
        name : typing___Optional[typing___Text] = None,
        enforcement_literal : typing___Optional[typing___Iterable[int]] = None,
        bool_or : typing___Optional[BoolArgumentProto] = None,
        bool_and : typing___Optional[BoolArgumentProto] = None,
        at_most_one : typing___Optional[BoolArgumentProto] = None,
        bool_xor : typing___Optional[BoolArgumentProto] = None,
        int_div : typing___Optional[IntegerArgumentProto] = None,
        int_mod : typing___Optional[IntegerArgumentProto] = None,
        int_max : typing___Optional[IntegerArgumentProto] = None,
        lin_max : typing___Optional[LinearArgumentProto] = None,
        int_min : typing___Optional[IntegerArgumentProto] = None,
        lin_min : typing___Optional[LinearArgumentProto] = None,
        int_prod : typing___Optional[IntegerArgumentProto] = None,
        linear : typing___Optional[LinearConstraintProto] = None,
        all_diff : typing___Optional[AllDifferentConstraintProto] = None,
        element : typing___Optional[ElementConstraintProto] = None,
        circuit : typing___Optional[CircuitConstraintProto] = None,
        routes : typing___Optional[RoutesConstraintProto] = None,
        circuit_covering : typing___Optional[CircuitCoveringConstraintProto] = None,
        table : typing___Optional[TableConstraintProto] = None,
        automaton : typing___Optional[AutomatonConstraintProto] = None,
        inverse : typing___Optional[InverseConstraintProto] = None,
        reservoir : typing___Optional[ReservoirConstraintProto] = None,
        interval : typing___Optional[IntervalConstraintProto] = None,
        no_overlap : typing___Optional[NoOverlapConstraintProto] = None,
        no_overlap_2d : typing___Optional[NoOverlap2DConstraintProto] = None,
        cumulative : typing___Optional[CumulativeConstraintProto] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> ConstraintProto: ...
    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"all_diff",u"at_most_one",u"automaton",u"bool_and",u"bool_or",u"bool_xor",u"circuit",u"circuit_covering",u"constraint",u"cumulative",u"element",u"int_div",u"int_max",u"int_min",u"int_mod",u"int_prod",u"interval",u"inverse",u"lin_max",u"lin_min",u"linear",u"no_overlap",u"no_overlap_2d",u"reservoir",u"routes",u"table"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"all_diff",u"at_most_one",u"automaton",u"bool_and",u"bool_or",u"bool_xor",u"circuit",u"circuit_covering",u"constraint",u"cumulative",u"element",u"enforcement_literal",u"int_div",u"int_max",u"int_min",u"int_mod",u"int_prod",u"interval",u"inverse",u"lin_max",u"lin_min",u"linear",u"name",u"no_overlap",u"no_overlap_2d",u"reservoir",u"routes",u"table"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"all_diff",b"all_diff",u"at_most_one",b"at_most_one",u"automaton",b"automaton",u"bool_and",b"bool_and",u"bool_or",b"bool_or",u"bool_xor",b"bool_xor",u"circuit",b"circuit",u"circuit_covering",b"circuit_covering",u"constraint",b"constraint",u"cumulative",b"cumulative",u"element",b"element",u"int_div",b"int_div",u"int_max",b"int_max",u"int_min",b"int_min",u"int_mod",b"int_mod",u"int_prod",b"int_prod",u"interval",b"interval",u"inverse",b"inverse",u"lin_max",b"lin_max",u"lin_min",b"lin_min",u"linear",b"linear",u"no_overlap",b"no_overlap",u"no_overlap_2d",b"no_overlap_2d",u"reservoir",b"reservoir",u"routes",b"routes",u"table",b"table"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"all_diff",b"all_diff",u"at_most_one",b"at_most_one",u"automaton",b"automaton",u"bool_and",b"bool_and",u"bool_or",b"bool_or",u"bool_xor",b"bool_xor",u"circuit",b"circuit",u"circuit_covering",b"circuit_covering",u"constraint",b"constraint",u"cumulative",b"cumulative",u"element",b"element",u"enforcement_literal",b"enforcement_literal",u"int_div",b"int_div",u"int_max",b"int_max",u"int_min",b"int_min",u"int_mod",b"int_mod",u"int_prod",b"int_prod",u"interval",b"interval",u"inverse",b"inverse",u"lin_max",b"lin_max",u"lin_min",b"lin_min",u"linear",b"linear",u"name",b"name",u"no_overlap",b"no_overlap",u"no_overlap_2d",b"no_overlap_2d",u"reservoir",b"reservoir",u"routes",b"routes",u"table",b"table"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions___Literal[u"constraint",b"constraint"]) -> typing_extensions___Literal["bool_or","bool_and","at_most_one","bool_xor","int_div","int_mod","int_max","lin_max","int_min","lin_min","int_prod","linear","all_diff","element","circuit","routes","circuit_covering","table","automaton","inverse","reservoir","interval","no_overlap","no_overlap_2d","cumulative"]: ...

class CpObjectiveProto(google___protobuf___message___Message):
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    coeffs = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    offset = ... # type: float
    scaling_factor = ... # type: float
    domain = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        vars : typing___Optional[typing___Iterable[int]] = None,
        coeffs : typing___Optional[typing___Iterable[int]] = None,
        offset : typing___Optional[float] = None,
        scaling_factor : typing___Optional[float] = None,
        domain : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> CpObjectiveProto: ...
    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"coeffs",u"domain",u"offset",u"scaling_factor",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"coeffs",b"coeffs",u"domain",b"domain",u"offset",b"offset",u"scaling_factor",b"scaling_factor",u"vars",b"vars"]) -> None: ...

class DecisionStrategyProto(google___protobuf___message___Message):
    class VariableSelectionStrategy(int):
        DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
        @classmethod
        def Name(cls, number: int) -> str: ...
        @classmethod
        def Value(cls, name: str) -> DecisionStrategyProto.VariableSelectionStrategy: ...
        @classmethod
        def keys(cls) -> typing___List[str]: ...
        @classmethod
        def values(cls) -> typing___List[DecisionStrategyProto.VariableSelectionStrategy]: ...
        @classmethod
        def items(cls) -> typing___List[typing___Tuple[str, DecisionStrategyProto.VariableSelectionStrategy]]: ...
        CHOOSE_FIRST = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 0)
        CHOOSE_LOWEST_MIN = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 1)
        CHOOSE_HIGHEST_MAX = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 2)
        CHOOSE_MIN_DOMAIN_SIZE = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 3)
        CHOOSE_MAX_DOMAIN_SIZE = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 4)
    CHOOSE_FIRST = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 0)
    CHOOSE_LOWEST_MIN = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 1)
    CHOOSE_HIGHEST_MAX = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 2)
    CHOOSE_MIN_DOMAIN_SIZE = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 3)
    CHOOSE_MAX_DOMAIN_SIZE = typing___cast(DecisionStrategyProto.VariableSelectionStrategy, 4)

    class DomainReductionStrategy(int):
        DESCRIPTOR: google___protobuf___descriptor___EnumDescriptor = ...
        @classmethod
        def Name(cls, number: int) -> str: ...
        @classmethod
        def Value(cls, name: str) -> DecisionStrategyProto.DomainReductionStrategy: ...
        @classmethod
        def keys(cls) -> typing___List[str]: ...
        @classmethod
        def values(cls) -> typing___List[DecisionStrategyProto.DomainReductionStrategy]: ...
        @classmethod
        def items(cls) -> typing___List[typing___Tuple[str, DecisionStrategyProto.DomainReductionStrategy]]: ...
        SELECT_MIN_VALUE = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 0)
        SELECT_MAX_VALUE = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 1)
        SELECT_LOWER_HALF = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 2)
        SELECT_UPPER_HALF = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 3)
        SELECT_MEDIAN_VALUE = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 4)
    SELECT_MIN_VALUE = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 0)
    SELECT_MAX_VALUE = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 1)
    SELECT_LOWER_HALF = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 2)
    SELECT_UPPER_HALF = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 3)
    SELECT_MEDIAN_VALUE = typing___cast(DecisionStrategyProto.DomainReductionStrategy, 4)

    class AffineTransformation(google___protobuf___message___Message):
        var = ... # type: int
        offset = ... # type: int
        positive_coeff = ... # type: int

        def __init__(self,
            *,
            var : typing___Optional[int] = None,
            offset : typing___Optional[int] = None,
            positive_coeff : typing___Optional[int] = None,
            ) -> None: ...
        @classmethod
        def FromString(cls, s: bytes) -> DecisionStrategyProto.AffineTransformation: ...
        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"offset",u"positive_coeff",u"var"]) -> None: ...
        else:
            def ClearField(self, field_name: typing_extensions___Literal[u"offset",b"offset",u"positive_coeff",b"positive_coeff",u"var",b"var"]) -> None: ...

    variables = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    variable_selection_strategy = ... # type: DecisionStrategyProto.VariableSelectionStrategy
    domain_reduction_strategy = ... # type: DecisionStrategyProto.DomainReductionStrategy

    @property
    def transformations(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[DecisionStrategyProto.AffineTransformation]: ...

    def __init__(self,
        *,
        variables : typing___Optional[typing___Iterable[int]] = None,
        variable_selection_strategy : typing___Optional[DecisionStrategyProto.VariableSelectionStrategy] = None,
        domain_reduction_strategy : typing___Optional[DecisionStrategyProto.DomainReductionStrategy] = None,
        transformations : typing___Optional[typing___Iterable[DecisionStrategyProto.AffineTransformation]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> DecisionStrategyProto: ...
    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"domain_reduction_strategy",u"transformations",u"variable_selection_strategy",u"variables"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"domain_reduction_strategy",b"domain_reduction_strategy",u"transformations",b"transformations",u"variable_selection_strategy",b"variable_selection_strategy",u"variables",b"variables"]) -> None: ...

class PartialVariableAssignment(google___protobuf___message___Message):
    vars = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    values = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    def __init__(self,
        *,
        vars : typing___Optional[typing___Iterable[int]] = None,
        values : typing___Optional[typing___Iterable[int]] = 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"values",u"vars"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"values",b"values",u"vars",b"vars"]) -> None: ...

class CpModelProto(google___protobuf___message___Message):
    name = ... # type: typing___Text
    assumptions = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]

    @property
    def variables(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[IntegerVariableProto]: ...

    @property
    def constraints(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[ConstraintProto]: ...

    @property
    def objective(self) -> CpObjectiveProto: ...

    @property
    def search_strategy(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[DecisionStrategyProto]: ...

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

    def __init__(self,
        *,
        name : typing___Optional[typing___Text] = None,
        variables : typing___Optional[typing___Iterable[IntegerVariableProto]] = None,
        constraints : typing___Optional[typing___Iterable[ConstraintProto]] = None,
        objective : typing___Optional[CpObjectiveProto] = None,
        search_strategy : typing___Optional[typing___Iterable[DecisionStrategyProto]] = None,
        solution_hint : typing___Optional[PartialVariableAssignment] = None,
        assumptions : typing___Optional[typing___Iterable[int]] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> CpModelProto: ...
    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"objective",u"solution_hint"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"assumptions",u"constraints",u"name",u"objective",u"search_strategy",u"solution_hint",u"variables"]) -> None: ...
    else:
        def HasField(self, field_name: typing_extensions___Literal[u"objective",b"objective",u"solution_hint",b"solution_hint"]) -> bool: ...
        def ClearField(self, field_name: typing_extensions___Literal[u"assumptions",b"assumptions",u"constraints",b"constraints",u"name",b"name",u"objective",b"objective",u"search_strategy",b"search_strategy",u"solution_hint",b"solution_hint",u"variables",b"variables"]) -> None: ...

class CpSolverResponse(google___protobuf___message___Message):
    status = ... # type: CpSolverStatus
    solution = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    objective_value = ... # type: float
    best_objective_bound = ... # type: float
    solution_lower_bounds = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    solution_upper_bounds = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    sufficient_assumptions_for_infeasibility = ... # type: google___protobuf___internal___containers___RepeatedScalarFieldContainer[int]
    all_solutions_were_found = ... # type: bool
    num_booleans = ... # type: int
    num_conflicts = ... # type: int
    num_branches = ... # type: int
    num_binary_propagations = ... # type: int
    num_integer_propagations = ... # type: int
    wall_time = ... # type: float
    user_time = ... # type: float
    deterministic_time = ... # type: float
    primal_integral = ... # type: float
    solution_info = ... # type: typing___Text

    @property
    def tightened_variables(self) -> google___protobuf___internal___containers___RepeatedCompositeFieldContainer[IntegerVariableProto]: ...

    def __init__(self,
        *,
        status : typing___Optional[CpSolverStatus] = None,
        solution : typing___Optional[typing___Iterable[int]] = None,
        objective_value : typing___Optional[float] = None,
        best_objective_bound : typing___Optional[float] = None,
        solution_lower_bounds : typing___Optional[typing___Iterable[int]] = None,
        solution_upper_bounds : typing___Optional[typing___Iterable[int]] = None,
        tightened_variables : typing___Optional[typing___Iterable[IntegerVariableProto]] = None,
        sufficient_assumptions_for_infeasibility : typing___Optional[typing___Iterable[int]] = None,
        all_solutions_were_found : typing___Optional[bool] = None,
        num_booleans : typing___Optional[int] = None,
        num_conflicts : typing___Optional[int] = None,
        num_branches : typing___Optional[int] = None,
        num_binary_propagations : typing___Optional[int] = None,
        num_integer_propagations : typing___Optional[int] = None,
        wall_time : typing___Optional[float] = None,
        user_time : typing___Optional[float] = None,
        deterministic_time : typing___Optional[float] = None,
        primal_integral : typing___Optional[float] = None,
        solution_info : typing___Optional[typing___Text] = None,
        ) -> None: ...
    @classmethod
    def FromString(cls, s: bytes) -> CpSolverResponse: ...
    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"all_solutions_were_found",u"best_objective_bound",u"deterministic_time",u"num_binary_propagations",u"num_booleans",u"num_branches",u"num_conflicts",u"num_integer_propagations",u"objective_value",u"primal_integral",u"solution",u"solution_info",u"solution_lower_bounds",u"solution_upper_bounds",u"status",u"sufficient_assumptions_for_infeasibility",u"tightened_variables",u"user_time",u"wall_time"]) -> None: ...
    else:
        def ClearField(self, field_name: typing_extensions___Literal[u"all_solutions_were_found",b"all_solutions_were_found",u"best_objective_bound",b"best_objective_bound",u"deterministic_time",b"deterministic_time",u"num_binary_propagations",b"num_binary_propagations",u"num_booleans",b"num_booleans",u"num_branches",b"num_branches",u"num_conflicts",b"num_conflicts",u"num_integer_propagations",b"num_integer_propagations",u"objective_value",b"objective_value",u"primal_integral",b"primal_integral",u"solution",b"solution",u"solution_info",b"solution_info",u"solution_lower_bounds",b"solution_lower_bounds",u"solution_upper_bounds",b"solution_upper_bounds",u"status",b"status",u"sufficient_assumptions_for_infeasibility",b"sufficient_assumptions_for_infeasibility",u"tightened_variables",b"tightened_variables",u"user_time",b"user_time",u"wall_time",b"wall_time"]) -> None: ...
