from typing import Any, List, Sequence, Text, Tuple, Union
from types import CodeType

import sys

if sys.version_info >= (3, 6):
    from builtins import _PathLike
    _Path = Union[str, bytes, _PathLike]
else:
    _Path = Union[str, bytes]

def expr(source: Text) -> STType: ...
def suite(source: Text) -> STType: ...
def sequence2st(sequence: Sequence[Any]) -> STType: ...
def tuple2st(sequence: Sequence[Any]) -> STType: ...
def st2list(st: STType, line_info: bool = ..., col_info: bool = ...) -> List[Any]: ...
def st2tuple(st: STType, line_info: bool = ..., col_info: bool = ...) -> Tuple[Any]: ...
def compilest(st: STType, filename: _Path = ...) -> CodeType: ...
def isexpr(st: STType) -> bool: ...
def issuite(st: STType) -> bool: ...

class ParserError(Exception): ...

class STType:
    def compile(self, filename: _Path = ...) -> CodeType: ...
    def isexpr(self) -> bool: ...
    def issuite(self) -> bool: ...
    def tolist(self, line_info: bool = ..., col_info: bool = ...) -> List[Any]: ...
    def totuple(self, line_info: bool = ..., col_info: bool = ...) -> Tuple[Any]: ...
