from typing import Any

class Options:
    dict_cls: Any
    custom_functions: Any
    def __init__(self, dict_cls: Any | None = ..., custom_functions: Any | None = ...) -> None: ...

class _Expression:
    expression: Any
    interpreter: Any
    def __init__(self, expression, interpreter) -> None: ...
    def visit(self, node, *args, **kwargs): ...

class Visitor:
    def __init__(self) -> None: ...
    def visit(self, node, *args, **kwargs): ...
    def default_visit(self, node, *args, **kwargs) -> None: ...

class TreeInterpreter(Visitor):
    COMPARATOR_FUNC: Any
    MAP_TYPE: Any
    def __init__(self, options: Any | None = ...) -> None: ...
    def default_visit(self, node, *args, **kwargs) -> None: ...
    def visit_subexpression(self, node, value): ...
    def visit_field(self, node, value): ...
    def visit_comparator(self, node, value): ...
    def visit_current(self, node, value): ...
    def visit_expref(self, node, value): ...
    def visit_function_expression(self, node, value): ...
    def visit_filter_projection(self, node, value): ...
    def visit_flatten(self, node, value): ...
    def visit_identity(self, node, value): ...
    def visit_index(self, node, value): ...
    def visit_index_expression(self, node, value): ...
    def visit_slice(self, node, value): ...
    def visit_key_val_pair(self, node, value): ...
    def visit_literal(self, node, value): ...
    def visit_multi_select_dict(self, node, value): ...
    def visit_multi_select_list(self, node, value): ...
    def visit_or_expression(self, node, value): ...
    def visit_and_expression(self, node, value): ...
    def visit_not_expression(self, node, value): ...
    def visit_pipe(self, node, value): ...
    def visit_projection(self, node, value): ...
    def visit_value_projection(self, node, value): ...

class GraphvizVisitor(Visitor):
    def __init__(self) -> None: ...
    def visit(self, node, *args, **kwargs): ...
