import ast
from .._compat import IS_PY2 as IS_PY2, IS_PY3 as IS_PY3, IS_PY34_OR_GREATER as IS_PY34_OR_GREATER, IS_PY35_OR_GREATER as IS_PY35_OR_GREATER
from typing import Any

IOPERATOR_TO_STR: Any
ALLOWED_FUNC_NAMES: Any
FORBIDDEN_FUNC_NAMES: Any

def copy_locations(new_node, old_node) -> None: ...

class PrintInfo:
    print_used: bool
    printed_used: bool
    def __init__(self) -> None: ...
    def new_print_scope(self) -> None: ...

class RestrictingNodeTransformer(ast.NodeTransformer):
    errors: Any
    warnings: Any
    used_names: Any
    print_info: Any
    def __init__(self, errors: Any | None = ..., warnings: Any | None = ..., used_names: Any | None = ...) -> None: ...
    def gen_tmp_name(self): ...
    def error(self, node, info) -> None: ...
    def warn(self, node, info) -> None: ...
    def guard_iter(self, node): ...
    def is_starred(self, ob): ...
    def gen_unpack_spec(self, tpl): ...
    def protect_unpack_sequence(self, target, value): ...
    def gen_unpack_wrapper(self, node, target, ctx: str = ...): ...
    def gen_none_node(self): ...
    def gen_lambda(self, args, body): ...
    def gen_del_stmt(self, name_to_del): ...
    def transform_slice(self, slice_): ...
    def check_name(self, node, name, allow_magic_methods: bool = ...) -> None: ...
    def check_function_argument_names(self, node) -> None: ...
    def check_import_names(self, node): ...
    def inject_print_collector(self, node, position: int = ...) -> None: ...
    def gen_attr_check(self, node, attr_name): ...
    def generic_visit(self, node): ...
    def not_allowed(self, node) -> None: ...
    def node_contents_visit(self, node): ...
    def visit_Num(self, node): ...
    def visit_Str(self, node): ...
    def visit_Bytes(self, node): ...
    def visit_List(self, node): ...
    def visit_Tuple(self, node): ...
    def visit_Set(self, node): ...
    def visit_Dict(self, node): ...
    def visit_FormattedValue(self, node): ...
    def visit_JoinedStr(self, node): ...
    def visit_Constant(self, node): ...
    def visit_Ellipsis(self, node): ...
    def visit_NameConstant(self, node): ...
    def visit_Name(self, node): ...
    def visit_Load(self, node): ...
    def visit_Store(self, node): ...
    def visit_Del(self, node): ...
    def visit_Starred(self, node): ...
    def visit_Expression(self, node): ...
    def visit_Expr(self, node): ...
    def visit_UnaryOp(self, node): ...
    def visit_UAdd(self, node): ...
    def visit_USub(self, node): ...
    def visit_Not(self, node): ...
    def visit_Invert(self, node): ...
    def visit_BinOp(self, node): ...
    def visit_Add(self, node): ...
    def visit_Sub(self, node): ...
    def visit_Mult(self, node): ...
    def visit_Div(self, node): ...
    def visit_FloorDiv(self, node): ...
    def visit_Mod(self, node): ...
    def visit_Pow(self, node): ...
    def visit_LShift(self, node): ...
    def visit_RShift(self, node): ...
    def visit_BitOr(self, node): ...
    def visit_BitXor(self, node): ...
    def visit_BitAnd(self, node): ...
    def visit_MatMult(self, node) -> None: ...
    def visit_BoolOp(self, node): ...
    def visit_And(self, node): ...
    def visit_Or(self, node): ...
    def visit_Compare(self, node): ...
    def visit_Eq(self, node): ...
    def visit_NotEq(self, node): ...
    def visit_Lt(self, node): ...
    def visit_LtE(self, node): ...
    def visit_Gt(self, node): ...
    def visit_GtE(self, node): ...
    def visit_Is(self, node): ...
    def visit_IsNot(self, node): ...
    def visit_In(self, node): ...
    def visit_NotIn(self, node): ...
    def visit_Call(self, node): ...
    def visit_keyword(self, node): ...
    def visit_IfExp(self, node): ...
    def visit_Attribute(self, node): ...
    def visit_Subscript(self, node): ...
    def visit_Index(self, node): ...
    def visit_Slice(self, node): ...
    def visit_ExtSlice(self, node): ...
    def visit_ListComp(self, node): ...
    def visit_SetComp(self, node): ...
    def visit_GeneratorExp(self, node): ...
    def visit_DictComp(self, node): ...
    def visit_comprehension(self, node): ...
    def visit_Assign(self, node): ...
    def visit_AugAssign(self, node): ...
    def visit_Print(self, node): ...
    def visit_Raise(self, node): ...
    def visit_Assert(self, node): ...
    def visit_Delete(self, node): ...
    def visit_Pass(self, node): ...
    def visit_Import(self, node): ...
    def visit_ImportFrom(self, node): ...
    def visit_alias(self, node): ...
    def visit_Exec(self, node) -> None: ...
    def visit_If(self, node): ...
    def visit_For(self, node): ...
    def visit_While(self, node): ...
    def visit_Break(self, node): ...
    def visit_Continue(self, node): ...
    def visit_Try(self, node): ...
    def visit_TryFinally(self, node): ...
    def visit_TryExcept(self, node): ...
    def visit_ExceptHandler(self, node): ...
    def visit_With(self, node): ...
    def visit_withitem(self, node): ...
    def visit_FunctionDef(self, node): ...
    def visit_Lambda(self, node): ...
    def visit_arguments(self, node): ...
    def visit_arg(self, node): ...
    def visit_Return(self, node): ...
    def visit_Yield(self, node): ...
    def visit_YieldFrom(self, node): ...
    def visit_Global(self, node): ...
    def visit_Nonlocal(self, node) -> None: ...
    def visit_ClassDef(self, node): ...
    def visit_Module(self, node): ...
    def visit_Param(self, node): ...
    def visit_AsyncFunctionDef(self, node) -> None: ...
    def visit_Await(self, node) -> None: ...
    def visit_AsyncFor(self, node) -> None: ...
    def visit_AsyncWith(self, node) -> None: ...
    def visit_NamedExpr(self, node): ...
