import ast
from pandas.core.computation.ops import BinOp as BinOp, Constant as Constant, Div as Div, FuncNode as FuncNode, Op as Op, Term as Term, UnaryOp as UnaryOp, UndefinedVariableError as UndefinedVariableError, is_term as is_term
from pandas.core.computation.parsing import clean_backtick_quoted_toks as clean_backtick_quoted_toks, tokenize_string as tokenize_string
from pandas.core.computation.scope import Scope as Scope
from typing import Any, Optional, Type

intersection: Any

def disallow(nodes: Any) -> Any: ...
def add_ops(op_classes: Any) -> Any: ...

class BaseExprVisitor(ast.NodeVisitor):
    const_type: Type[Term] = ...
    term_type: Any = ...
    binary_ops: Any = ...
    binary_op_nodes: Any = ...
    binary_op_nodes_map: Any = ...
    unary_ops: Any = ...
    unary_op_nodes: Any = ...
    unary_op_nodes_map: Any = ...
    rewrite_map: Any = ...
    env: Any = ...
    engine: Any = ...
    parser: Any = ...
    preparser: Any = ...
    assigner: Any = ...
    def __init__(self, env: Any, engine: Any, parser: Any, preparser: Any = ...) -> None: ...
    def visit(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Module(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Expr(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_BinOp(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Div(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_UnaryOp(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Name(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_NameConstant(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Num(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Constant(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Str(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_List(self, node: Any, **kwargs: Any) -> Any: ...
    visit_Tuple: Any = ...
    def visit_Index(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Subscript(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Slice(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Assign(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Attribute(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_Call(self, node: Any, side: Optional[Any] = ..., **kwargs: Any) -> Any: ...
    def translate_In(self, op: Any) -> Any: ...
    def visit_Compare(self, node: Any, **kwargs: Any) -> Any: ...
    def visit_BoolOp(self, node: Any, **kwargs: Any) -> Any: ...

class PandasExprVisitor(BaseExprVisitor):
    def __init__(self, env: Any, engine: Any, parser: Any, preparser: Any = ...) -> None: ...

class PythonExprVisitor(BaseExprVisitor):
    def __init__(self, env: Any, engine: Any, parser: Any, preparser: Any = ...) -> None: ...

class Expr:
    env: Scope
    engine: str
    parser: str
    expr: Any = ...
    terms: Any = ...
    def __init__(self, expr: Any, engine: str=..., parser: str=..., env: Optional[Scope]=..., level: int=...) -> None: ...
    @property
    def assigner(self) -> Any: ...
    def __call__(self) -> Any: ...
    def __len__(self) -> int: ...
    def parse(self) -> Any: ...
    @property
    def names(self) -> Any: ...
