"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

import builtins
import collections.abc
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.message
import ommx.v1.constraint_pb2
import ommx.v1.decision_variables_pb2
import ommx.v1.function_pb2
import typing

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

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

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

        NAME_FIELD_NUMBER: builtins.int
        DESCRIPTION_FIELD_NUMBER: builtins.int
        AUTHORS_FIELD_NUMBER: builtins.int
        CREATED_BY_FIELD_NUMBER: builtins.int
        name: builtins.str
        description: builtins.str
        created_by: builtins.str
        """The application or library name that created this message."""
        @property
        def authors(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
        def __init__(
            self,
            *,
            name: builtins.str | None = ...,
            description: builtins.str | None = ...,
            authors: collections.abc.Iterable[builtins.str] | None = ...,
            created_by: builtins.str | None = ...,
        ) -> None: ...
        def HasField(self, field_name: typing.Literal["_created_by", b"_created_by", "_description", b"_description", "_name", b"_name", "created_by", b"created_by", "description", b"description", "name", b"name"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing.Literal["_created_by", b"_created_by", "_description", b"_description", "_name", b"_name", "authors", b"authors", "created_by", b"created_by", "description", b"description", "name", b"name"]) -> None: ...
        @typing.overload
        def WhichOneof(self, oneof_group: typing.Literal["_created_by", b"_created_by"]) -> typing.Literal["created_by"] | None: ...
        @typing.overload
        def WhichOneof(self, oneof_group: typing.Literal["_description", b"_description"]) -> typing.Literal["description"] | None: ...
        @typing.overload
        def WhichOneof(self, oneof_group: typing.Literal["_name", b"_name"]) -> typing.Literal["name"] | None: ...

    DESCRIPTION_FIELD_NUMBER: builtins.int
    DECISION_VARIABLES_FIELD_NUMBER: builtins.int
    OBJECTIVE_FIELD_NUMBER: builtins.int
    CONSTRAINTS_FIELD_NUMBER: builtins.int
    @property
    def description(self) -> global___Instance.Description: ...
    @property
    def decision_variables(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ommx.v1.decision_variables_pb2.DecisionVariable]:
        """Decision variables used in this instance

        - This must constain every decision variables used in the objective and constraints.
        - This can contains a decision variable that is not used in the objective or constraints.
        """

    @property
    def objective(self) -> ommx.v1.function_pb2.Function: ...
    @property
    def constraints(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[ommx.v1.constraint_pb2.Constraint]:
        """Constraints of the optimization problem"""

    def __init__(
        self,
        *,
        description: global___Instance.Description | None = ...,
        decision_variables: collections.abc.Iterable[ommx.v1.decision_variables_pb2.DecisionVariable] | None = ...,
        objective: ommx.v1.function_pb2.Function | None = ...,
        constraints: collections.abc.Iterable[ommx.v1.constraint_pb2.Constraint] | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["description", b"description", "objective", b"objective"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["constraints", b"constraints", "decision_variables", b"decision_variables", "description", b"description", "objective", b"objective"]) -> None: ...

global___Instance = Instance
