"""
@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.message
from .. import substrait
from .. import substrait
import typing
import typing_extensions
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor

class PlanRel(google.protobuf.message.Message):
    """Either a relation or root relation"""
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    REL_FIELD_NUMBER: builtins.int
    ROOT_FIELD_NUMBER: builtins.int

    @property
    def rel(self) -> substrait.algebra_pb2.Rel:
        """Any relation"""
        pass

    @property
    def root(self) -> substrait.algebra_pb2.RelRoot:
        """The root of a relation tree"""
        pass

    def __init__(self, *, rel: typing.Optional[substrait.algebra_pb2.Rel]=..., root: typing.Optional[substrait.algebra_pb2.RelRoot]=...) -> None:
        ...

    def HasField(self, field_name: typing_extensions.Literal['rel', b'rel', 'rel_type', b'rel_type', 'root', b'root']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing_extensions.Literal['rel', b'rel', 'rel_type', b'rel_type', 'root', b'root']) -> None:
        ...

    def WhichOneof(self, oneof_group: typing_extensions.Literal['rel_type', b'rel_type']) -> typing.Optional[typing_extensions.Literal['rel', 'root']]:
        ...
global___PlanRel = PlanRel

class Plan(google.protobuf.message.Message):
    """Describe a set of operations to complete.
    For compactness sake, identifiers are normalized at the plan level.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor
    EXTENSION_URIS_FIELD_NUMBER: builtins.int
    EXTENSIONS_FIELD_NUMBER: builtins.int
    RELATIONS_FIELD_NUMBER: builtins.int
    ADVANCED_EXTENSIONS_FIELD_NUMBER: builtins.int
    EXPECTED_TYPE_URLS_FIELD_NUMBER: builtins.int

    @property
    def extension_uris(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[substrait.extensions.extensions_pb2.SimpleExtensionURI]:
        """a list of yaml specifications this plan may depend on"""
        pass

    @property
    def extensions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[substrait.extensions.extensions_pb2.SimpleExtensionDeclaration]:
        """a list of extensions this plan may depend on"""
        pass

    @property
    def relations(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___PlanRel]:
        """one or more relation trees that are associated with this plan."""
        pass

    @property
    def advanced_extensions(self) -> substrait.extensions.extensions_pb2.AdvancedExtension:
        """additional extensions associated with this plan."""
        pass

    @property
    def expected_type_urls(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]:
        """A list of com.google.Any entities that this plan may use. Can be used to
        warn if some embedded message types are unknown. Note that this list may
        include message types that are ignorable (optimizations) or that are
        unused. In many cases, a consumer may be able to work with a plan even if
        one or more message types defined here are unknown.
        """
        pass

    def __init__(self, *, extension_uris: typing.Optional[typing.Iterable[substrait.extensions.extensions_pb2.SimpleExtensionURI]]=..., extensions: typing.Optional[typing.Iterable[substrait.extensions.extensions_pb2.SimpleExtensionDeclaration]]=..., relations: typing.Optional[typing.Iterable[global___PlanRel]]=..., advanced_extensions: typing.Optional[substrait.extensions.extensions_pb2.AdvancedExtension]=..., expected_type_urls: typing.Optional[typing.Iterable[typing.Text]]=...) -> None:
        ...

    def HasField(self, field_name: typing_extensions.Literal['advanced_extensions', b'advanced_extensions']) -> builtins.bool:
        ...

    def ClearField(self, field_name: typing_extensions.Literal['advanced_extensions', b'advanced_extensions', 'expected_type_urls', b'expected_type_urls', 'extension_uris', b'extension_uris', 'extensions', b'extensions', 'relations', b'relations']) -> None:
        ...
global___Plan = Plan