"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import builtins
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.internal.enum_type_wrapper
import google.protobuf.message
import sarus_data_spec.protobuf.path_pb2
import sarus_data_spec.protobuf.predicate_pb2
import typing
import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ...

class Type(google.protobuf.message.Message):
    """Types can be simple or composed

    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    class PropertiesEntry(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        KEY_FIELD_NUMBER: builtins.int
        VALUE_FIELD_NUMBER: builtins.int
        key: typing.Text = ...
        value: typing.Text = ...
        def __init__(self,
            *,
            key : typing.Text = ...,
            value : typing.Text = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"key",b"key",u"value",b"value"]) -> None: ...

    class Null(google.protobuf.message.Message):
        """Nested definitions

        Basic types are close to what can be found in:
        - Arrow: https://arrow.apache.org/docs/status.html#data-types
        - Tensorflow: https://www.tensorflow.org/api_docs/python/tf/dtypes/DType
        - Parquet: https://github.com/apache/parquet-format
        - Protobuf: https://developers.google.com/protocol-buffers/docs/proto3#scalar

        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    class Unit(google.protobuf.message.Message):
        """A function returning Null type cannot return. It crashes or never returns. No value can actually have the Null type.
        This type is to indicate no value is possible.

        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    class Boolean(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    class Integer(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Base(_Base, metaclass=_BaseEnumTypeWrapper):
            pass
        class _Base:
            V = typing.NewType('V', builtins.int)
        class _BaseEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Base.V], builtins.type):
            DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ...
            INT64 = Type.Integer.Base.V(0)
            INT32 = Type.Integer.Base.V(1)
            INT16 = Type.Integer.Base.V(2)
            INT8 = Type.Integer.Base.V(3)

        INT64 = Type.Integer.Base.V(0)
        INT32 = Type.Integer.Base.V(1)
        INT16 = Type.Integer.Base.V(2)
        INT8 = Type.Integer.Base.V(3)

        BASE_FIELD_NUMBER: builtins.int
        MIN_FIELD_NUMBER: builtins.int
        MAX_FIELD_NUMBER: builtins.int
        POSSIBLE_VALUES_FIELD_NUMBER: builtins.int
        base: global___Type.Integer.Base.V = ...
        min: builtins.int = ...
        max: builtins.int = ...
        @property
        def possible_values(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
        def __init__(self,
            *,
            base : global___Type.Integer.Base.V = ...,
            min : builtins.int = ...,
            max : builtins.int = ...,
            possible_values : typing.Optional[typing.Iterable[builtins.int]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"base",b"base",u"max",b"max",u"min",b"min",u"possible_values",b"possible_values"]) -> None: ...

    class Enum(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Base(_Base, metaclass=_BaseEnumTypeWrapper):
            pass
        class _Base:
            V = typing.NewType('V', builtins.int)
        class _BaseEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Base.V], builtins.type):
            DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ...
            INT64 = Type.Enum.Base.V(0)
            INT32 = Type.Enum.Base.V(1)
            INT16 = Type.Enum.Base.V(2)
            INT8 = Type.Enum.Base.V(3)

        INT64 = Type.Enum.Base.V(0)
        INT32 = Type.Enum.Base.V(1)
        INT16 = Type.Enum.Base.V(2)
        INT8 = Type.Enum.Base.V(3)

        class NameValue(google.protobuf.message.Message):
            DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
            NAME_FIELD_NUMBER: builtins.int
            VALUE_FIELD_NUMBER: builtins.int
            name: typing.Text = ...
            value: builtins.int = ...
            def __init__(self,
                *,
                name : typing.Text = ...,
                value : builtins.int = ...,
                ) -> None: ...
            def ClearField(self, field_name: typing_extensions.Literal[u"name",b"name",u"value",b"value"]) -> None: ...

        BASE_FIELD_NUMBER: builtins.int
        ORDERED_FIELD_NUMBER: builtins.int
        NAME_VALUES_FIELD_NUMBER: builtins.int
        base: global___Type.Enum.Base.V = ...
        ordered: builtins.bool = ...
        @property
        def name_values(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Type.Enum.NameValue]: ...
        def __init__(self,
            *,
            base : global___Type.Enum.Base.V = ...,
            ordered : builtins.bool = ...,
            name_values : typing.Optional[typing.Iterable[global___Type.Enum.NameValue]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"base",b"base",u"name_values",b"name_values",u"ordered",b"ordered"]) -> None: ...

    class Float(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Base(_Base, metaclass=_BaseEnumTypeWrapper):
            pass
        class _Base:
            V = typing.NewType('V', builtins.int)
        class _BaseEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Base.V], builtins.type):
            DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ...
            FLOAT64 = Type.Float.Base.V(0)
            FLOAT32 = Type.Float.Base.V(1)
            FLOAT16 = Type.Float.Base.V(2)

        FLOAT64 = Type.Float.Base.V(0)
        FLOAT32 = Type.Float.Base.V(1)
        FLOAT16 = Type.Float.Base.V(2)

        BASE_FIELD_NUMBER: builtins.int
        MIN_FIELD_NUMBER: builtins.int
        MAX_FIELD_NUMBER: builtins.int
        POSSIBLE_VALUES_FIELD_NUMBER: builtins.int
        base: global___Type.Float.Base.V = ...
        min: builtins.float = ...
        max: builtins.float = ...
        @property
        def possible_values(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.float]: ...
        def __init__(self,
            *,
            base : global___Type.Float.Base.V = ...,
            min : builtins.float = ...,
            max : builtins.float = ...,
            possible_values : typing.Optional[typing.Iterable[builtins.float]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"base",b"base",u"max",b"max",u"min",b"min",u"possible_values",b"possible_values"]) -> None: ...

    class Text(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        ENCODING_FIELD_NUMBER: builtins.int
        encoding: typing.Text = ...
        def __init__(self,
            *,
            encoding : typing.Text = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"encoding",b"encoding"]) -> None: ...

    class Bytes(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    class Struct(google.protobuf.message.Message):
        """Structured types"""
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Field(google.protobuf.message.Message):
            """A single field"""
            DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
            NAME_FIELD_NUMBER: builtins.int
            TYPE_FIELD_NUMBER: builtins.int
            name: typing.Text = ...
            @property
            def type(self) -> global___Type: ...
            def __init__(self,
                *,
                name : typing.Text = ...,
                type : typing.Optional[global___Type] = ...,
                ) -> None: ...
            def HasField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> builtins.bool: ...
            def ClearField(self, field_name: typing_extensions.Literal[u"name",b"name",u"type",b"type"]) -> None: ...

        FIELDS_FIELD_NUMBER: builtins.int
        @property
        def fields(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Type.Struct.Field]: ...
        def __init__(self,
            *,
            fields : typing.Optional[typing.Iterable[global___Type.Struct.Field]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"fields",b"fields"]) -> None: ...

    class Union(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Field(google.protobuf.message.Message):
            """A single field"""
            DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
            NAME_FIELD_NUMBER: builtins.int
            TYPE_FIELD_NUMBER: builtins.int
            name: typing.Text = ...
            @property
            def type(self) -> global___Type: ...
            def __init__(self,
                *,
                name : typing.Text = ...,
                type : typing.Optional[global___Type] = ...,
                ) -> None: ...
            def HasField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> builtins.bool: ...
            def ClearField(self, field_name: typing_extensions.Literal[u"name",b"name",u"type",b"type"]) -> None: ...

        FIELDS_FIELD_NUMBER: builtins.int
        @property
        def fields(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Type.Union.Field]:
            """A sum of type (tagged union)"""
            pass
        def __init__(self,
            *,
            fields : typing.Optional[typing.Iterable[global___Type.Union.Field]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"fields",b"fields"]) -> None: ...

    class Optional(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        TYPE_FIELD_NUMBER: builtins.int
        @property
        def type(self) -> global___Type:
            """A value of type 'type' or null"""
            pass
        def __init__(self,
            *,
            type : typing.Optional[global___Type] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> None: ...

    class List(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        TYPE_FIELD_NUMBER: builtins.int
        MAX_SIZE_FIELD_NUMBER: builtins.int
        @property
        def type(self) -> global___Type:
            """A repeated value of type 'type'"""
            pass
        max_size: builtins.int = ...
        def __init__(self,
            *,
            type : typing.Optional[global___Type] = ...,
            max_size : builtins.int = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"max_size",b"max_size",u"type",b"type"]) -> None: ...

    class Array(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        TYPE_FIELD_NUMBER: builtins.int
        SHAPE_FIELD_NUMBER: builtins.int
        @property
        def type(self) -> global___Type:
            """A numpy-like n-dimensional array"""
            pass
        @property
        def shape(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]: ...
        def __init__(self,
            *,
            type : typing.Optional[global___Type] = ...,
            shape : typing.Optional[typing.Iterable[builtins.int]] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"shape",b"shape",u"type",b"type"]) -> None: ...

    class Datetime(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Base(_Base, metaclass=_BaseEnumTypeWrapper):
            pass
        class _Base:
            V = typing.NewType('V', builtins.int)
        class _BaseEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Base.V], builtins.type):
            DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ...
            INT64_NS = Type.Datetime.Base.V(0)
            INT64_MS = Type.Datetime.Base.V(1)
            STRING = Type.Datetime.Base.V(2)

        INT64_NS = Type.Datetime.Base.V(0)
        INT64_MS = Type.Datetime.Base.V(1)
        STRING = Type.Datetime.Base.V(2)

        FORMAT_FIELD_NUMBER: builtins.int
        MIN_FIELD_NUMBER: builtins.int
        MAX_FIELD_NUMBER: builtins.int
        POSSIBLE_VALUES_FIELD_NUMBER: builtins.int
        BASE_FIELD_NUMBER: builtins.int
        format: typing.Text = ...
        """A datetime type"""

        min: typing.Text = ...
        max: typing.Text = ...
        @property
        def possible_values(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
        base: global___Type.Datetime.Base.V = ...
        def __init__(self,
            *,
            format : typing.Text = ...,
            min : typing.Text = ...,
            max : typing.Text = ...,
            possible_values : typing.Optional[typing.Iterable[typing.Text]] = ...,
            base : global___Type.Datetime.Base.V = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"base",b"base",u"format",b"format",u"max",b"max",u"min",b"min",u"possible_values",b"possible_values"]) -> None: ...

    class Constrained(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        TYPE_FIELD_NUMBER: builtins.int
        CONSTRAINT_FIELD_NUMBER: builtins.int
        @property
        def type(self) -> global___Type:
            """A type for simple relations"""
            pass
        @property
        def constraint(self) -> sarus_data_spec.protobuf.predicate_pb2.Predicate: ...
        def __init__(self,
            *,
            type : typing.Optional[global___Type] = ...,
            constraint : typing.Optional[sarus_data_spec.protobuf.predicate_pb2.Predicate] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"constraint",b"constraint",u"type",b"type"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"constraint",b"constraint",u"type",b"type"]) -> None: ...

    class Hypothesis(google.protobuf.message.Message):
        """A constructor to express an uncertain type"""
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Scored(google.protobuf.message.Message):
            DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
            TYPE_FIELD_NUMBER: builtins.int
            SCORE_FIELD_NUMBER: builtins.int
            @property
            def type(self) -> global___Type:
                """A type with a score (log-probability)"""
                pass
            score: builtins.float = ...
            def __init__(self,
                *,
                type : typing.Optional[global___Type] = ...,
                score : builtins.float = ...,
                ) -> None: ...
            def HasField(self, field_name: typing_extensions.Literal[u"type",b"type"]) -> builtins.bool: ...
            def ClearField(self, field_name: typing_extensions.Literal[u"score",b"score",u"type",b"type"]) -> None: ...

        TYPES_FIELD_NUMBER: builtins.int
        @property
        def types(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Type.Hypothesis.Scored]:
            """A type among those with a score"""
            pass
        def __init__(self,
            *,
            types : typing.Optional[typing.Iterable[global___Type.Hypothesis.Scored]] = ...,
            ) -> None: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"types",b"types"]) -> None: ...

    class Id(google.protobuf.message.Message):
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        class Base(_Base, metaclass=_BaseEnumTypeWrapper):
            pass
        class _Base:
            V = typing.NewType('V', builtins.int)
        class _BaseEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Base.V], builtins.type):
            DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor = ...
            INT64 = Type.Id.Base.V(0)
            INT32 = Type.Id.Base.V(1)
            INT16 = Type.Id.Base.V(2)
            INT8 = Type.Id.Base.V(3)
            STRING = Type.Id.Base.V(4)
            BYTES = Type.Id.Base.V(5)

        INT64 = Type.Id.Base.V(0)
        INT32 = Type.Id.Base.V(1)
        INT16 = Type.Id.Base.V(2)
        INT8 = Type.Id.Base.V(3)
        STRING = Type.Id.Base.V(4)
        BYTES = Type.Id.Base.V(5)

        BASE_FIELD_NUMBER: builtins.int
        UNIQUE_FIELD_NUMBER: builtins.int
        REFERENCE_FIELD_NUMBER: builtins.int
        base: global___Type.Id.Base.V = ...
        unique: builtins.bool = ...
        @property
        def reference(self) -> sarus_data_spec.protobuf.path_pb2.Path: ...
        def __init__(self,
            *,
            base : global___Type.Id.Base.V = ...,
            unique : builtins.bool = ...,
            reference : typing.Optional[sarus_data_spec.protobuf.path_pb2.Path] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"reference",b"reference"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"base",b"base",u"reference",b"reference",u"unique",b"unique"]) -> None: ...

    NAME_FIELD_NUMBER: builtins.int
    NULL_FIELD_NUMBER: builtins.int
    UNIT_FIELD_NUMBER: builtins.int
    BOOLEAN_FIELD_NUMBER: builtins.int
    INTEGER_FIELD_NUMBER: builtins.int
    ENUM_FIELD_NUMBER: builtins.int
    FLOAT_FIELD_NUMBER: builtins.int
    TEXT_FIELD_NUMBER: builtins.int
    BYTES_FIELD_NUMBER: builtins.int
    STRUCT_FIELD_NUMBER: builtins.int
    UNION_FIELD_NUMBER: builtins.int
    OPTIONAL_FIELD_NUMBER: builtins.int
    LIST_FIELD_NUMBER: builtins.int
    ARRAY_FIELD_NUMBER: builtins.int
    DATETIME_FIELD_NUMBER: builtins.int
    CONSTRAINED_FIELD_NUMBER: builtins.int
    HYPOTHESIS_FIELD_NUMBER: builtins.int
    ID_FIELD_NUMBER: builtins.int
    PROPERTIES_FIELD_NUMBER: builtins.int
    name: typing.Text = ...
    """Type definition"""

    @property
    def null(self) -> global___Type.Null: ...
    @property
    def unit(self) -> global___Type.Unit: ...
    @property
    def boolean(self) -> global___Type.Boolean: ...
    @property
    def integer(self) -> global___Type.Integer: ...
    @property
    def enum(self) -> global___Type.Enum: ...
    @property
    def float(self) -> global___Type.Float: ...
    @property
    def text(self) -> global___Type.Text: ...
    @property
    def bytes(self) -> global___Type.Bytes: ...
    @property
    def struct(self) -> global___Type.Struct: ...
    @property
    def union(self) -> global___Type.Union: ...
    @property
    def optional(self) -> global___Type.Optional: ...
    @property
    def list(self) -> global___Type.List: ...
    @property
    def array(self) -> global___Type.Array: ...
    @property
    def datetime(self) -> global___Type.Datetime: ...
    @property
    def constrained(self) -> global___Type.Constrained: ...
    @property
    def hypothesis(self) -> global___Type.Hypothesis: ...
    @property
    def id(self) -> global___Type.Id: ...
    @property
    def properties(self) -> google.protobuf.internal.containers.ScalarMap[typing.Text, typing.Text]:
        """Other properties"""
        pass
    def __init__(self,
        *,
        name : typing.Text = ...,
        null : typing.Optional[global___Type.Null] = ...,
        unit : typing.Optional[global___Type.Unit] = ...,
        boolean : typing.Optional[global___Type.Boolean] = ...,
        integer : typing.Optional[global___Type.Integer] = ...,
        enum : typing.Optional[global___Type.Enum] = ...,
        float : typing.Optional[global___Type.Float] = ...,
        text : typing.Optional[global___Type.Text] = ...,
        bytes : typing.Optional[global___Type.Bytes] = ...,
        struct : typing.Optional[global___Type.Struct] = ...,
        union : typing.Optional[global___Type.Union] = ...,
        optional : typing.Optional[global___Type.Optional] = ...,
        list : typing.Optional[global___Type.List] = ...,
        array : typing.Optional[global___Type.Array] = ...,
        datetime : typing.Optional[global___Type.Datetime] = ...,
        constrained : typing.Optional[global___Type.Constrained] = ...,
        hypothesis : typing.Optional[global___Type.Hypothesis] = ...,
        id : typing.Optional[global___Type.Id] = ...,
        properties : typing.Optional[typing.Mapping[typing.Text, typing.Text]] = ...,
        ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal[u"array",b"array",u"boolean",b"boolean",u"bytes",b"bytes",u"constrained",b"constrained",u"datetime",b"datetime",u"enum",b"enum",u"float",b"float",u"hypothesis",b"hypothesis",u"id",b"id",u"integer",b"integer",u"list",b"list",u"null",b"null",u"optional",b"optional",u"struct",b"struct",u"text",b"text",u"type",b"type",u"union",b"union",u"unit",b"unit"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"array",b"array",u"boolean",b"boolean",u"bytes",b"bytes",u"constrained",b"constrained",u"datetime",b"datetime",u"enum",b"enum",u"float",b"float",u"hypothesis",b"hypothesis",u"id",b"id",u"integer",b"integer",u"list",b"list",u"name",b"name",u"null",b"null",u"optional",b"optional",u"properties",b"properties",u"struct",b"struct",u"text",b"text",u"type",b"type",u"union",b"union",u"unit",b"unit"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal[u"type",b"type"]) -> typing.Optional[typing_extensions.Literal["null","unit","boolean","integer","enum","float","text","bytes","struct","union","optional","list","array","datetime","constrained","hypothesis","id"]]: ...
global___Type = Type
