# -*- coding: utf-8 -*-
import sys
import typing
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:
    import ast

from pyccolo._fast import *  # noqa: F403

def location_of(*args, **kwargs) -> "Any": ...
def kw(arg: str, value: "ast.expr") -> "ast.keyword": ...
def kwargs(**kwargs: "ast.expr") -> "typing.List[ast.keyword]": ...
def parse(*args, **kwargs) -> "ast.Module": ...
def And(*args, **kwargs) -> "ast.And": ...
def Attribute(*args, **kwargs) -> "ast.Attribute": ...
def BinOp(*args, **kwargs) -> "ast.BinOp": ...
def BoolOp(*args, **kwargs) -> "ast.BoolOp": ...
def Call(*args, **kwargs) -> "ast.Call": ...
def Compare(*args, **kwargs) -> "ast.Compare": ...
def Dict(*args, **kwargs) -> "ast.Dict": ...
def If(*args, **kwargs) -> "ast.If": ...
def IfExp(*args, **kwargs) -> "ast.IfExp": ...
def Import(*args, **kwargs) -> "ast.Import": ...
def ImportFrom(*args, **kwargs) -> "ast.ImportFrom": ...
def Lambda(*args, **kwargs) -> "ast.Lambda": ...
def List(*args, **kwargs) -> "ast.List": ...
def Name(*args, **kwargs) -> "ast.Name": ...
def Not(*args, **kwargs) -> "ast.Not": ...
def Or(*args, **kwargs) -> "ast.Or": ...
def Pass(*args, **kwargs) -> "ast.Pass": ...
def Subscript(*args, **kwargs) -> "ast.Subscript": ...
def Try(*args, **kwargs) -> "ast.Try": ...
def Tuple(*args, **kwargs) -> "ast.Tuple": ...
def UnaryOp(*args, **kwargs) -> "ast.UnaryOp": ...
def alias(*args, **kwargs) -> "ast.alias": ...
def arg(*args, **kwargs) -> "ast.arg": ...
def keyword(*args, **kwargs) -> "ast.keyword": ...

if sys.version_info < (3, 9):
    def Index(*args, **kwargs) -> "ast.Index": ...

if sys.version_info < (3, 8):
    def Num(*args, **kwargs) -> "ast.Num": ...
    def Str(*args, **kwargs) -> "ast.Str": ...
    def Bytes(*args, **kwargs) -> "ast.Bytes": ...
    def NameConstant(*args, **kwargs) -> "ast.NameConstant": ...
    def Ellipsis(*args, **kwargs) -> "ast.Ellipsis": ...

else:
    def Constant(*args, **kwargs) -> "ast.Constant": ...
    def Num(*args, **kwargs) -> "ast.Constant": ...
    def Str(*args, **kwargs) -> "ast.Constant": ...
    def Bytes(*args, **kwargs) -> "ast.Constant": ...
    def NameConstant(*args, **kwargs) -> "ast.Constant": ...
    def Ellipsis(*args, **kwargs) -> "ast.Constant": ...
