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

import builtins
import google.protobuf.descriptor
import google.protobuf.message
import ommx.v1.linear_pb2
import ommx.v1.polynomial_pb2
import ommx.v1.quadratic_pb2
import typing

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

@typing.final
class Function(google.protobuf.message.Message):
    """Real-valued multivariate function used for objective function and constraints."""

    DESCRIPTOR: google.protobuf.descriptor.Descriptor

    CONSTANT_FIELD_NUMBER: builtins.int
    LINEAR_FIELD_NUMBER: builtins.int
    QUADRATIC_FIELD_NUMBER: builtins.int
    POLYNOMIAL_FIELD_NUMBER: builtins.int
    constant: builtins.float
    """Constant function like `f(x_1, x_2) = 2`"""
    @property
    def linear(self) -> ommx.v1.linear_pb2.Linear:
        """Linear function like `f(x_1, x_2) = 2 x_1 + 3 x_2`"""

    @property
    def quadratic(self) -> ommx.v1.quadratic_pb2.Quadratic:
        """Quadratic function like `f(x_1, x_2) = 4 x_1 x_2 + 5 x_2`"""

    @property
    def polynomial(self) -> ommx.v1.polynomial_pb2.Polynomial:
        """Polynomial like `f(x_1, x_2) = 4 x_1^2 + 5 x_2^3 + 6 x_1 x_2^2 + 7 x_2^2 + 8 x_1 x_2 + 9 x_1 + 10 x_2 + 11`"""

    def __init__(
        self,
        *,
        constant: builtins.float = ...,
        linear: ommx.v1.linear_pb2.Linear | None = ...,
        quadratic: ommx.v1.quadratic_pb2.Quadratic | None = ...,
        polynomial: ommx.v1.polynomial_pb2.Polynomial | None = ...,
    ) -> None: ...
    def HasField(self, field_name: typing.Literal["constant", b"constant", "function", b"function", "linear", b"linear", "polynomial", b"polynomial", "quadratic", b"quadratic"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing.Literal["constant", b"constant", "function", b"function", "linear", b"linear", "polynomial", b"polynomial", "quadratic", b"quadratic"]) -> None: ...
    def WhichOneof(self, oneof_group: typing.Literal["function", b"function"]) -> typing.Literal["constant", "linear", "quadratic", "polynomial"] | None: ...

global___Function = Function
