elf) -> float: ...
    if sys.version_info >= (3, 9):
        def __class_getitem__(cls, item: Any) -> GenericAlias: ...

# mypy thinks the signatures of the overloads overlap, but the types still work fine
@overload
def get_close_matches(  # type: ignore
    word: AnyStr, possibilities: Iterable[AnyStr], n: int = ..., cutoff: float = ...
) -> List[AnyStr]: ...
@overload
def get_close_matches(
    word: Sequence[_T], possibilities: Iterable[Sequence[_T]], n: int = ..., cutoff: float = ...
) -> List[Sequence[_T]]: ...

class Differ:
    def __init__(self, linejunk: Optional[_JunkCallback] = ..., charjunk: Optional[_JunkCallback] = ...) -> None: ...
    def compare(self, a: Sequence[_StrType], b: Sequence[_StrType]) -> Iterator[_StrType]: ...

def IS_LINE_JUNK(line: _StrType, pat: Any = ...) -> bool: ...  # pat is undocumented
def IS_CHARACTER_JUNK(ch: _StrType, ws: _StrType = ...) -> bool: ...  # ws is undocumented
def unified_diff(
    a: Sequence[_StrType],
    b: Sequence[_StrType],
    fromfile: _StrType = ...,
    tofile: _StrType = ...,
    fromfiledate: _StrType = ...,
    tofiledate: _StrType = ...,
    n: int = ...,
    lineterm: _StrType = ...,
) -> Iterator[_StrType]: ...
def context_diff(
    a: Sequence[_StrType],
    b: Sequence[_StrType],
    fromfile: _StrType = ...,
    tofile: _StrType = ...,
    fromfiledate: _StrType = ...,
    tofiledate: _StrType = ...,
    n: int = ...,
    lineterm: _StrType = ...,
) -> Iterator[_StrType]: ...
def ndiff(
    a: Sequence[_StrType], b: Sequence[_StrType], linejunk: Optional[_JunkCallback] = ..., charjunk: Optional[_JunkCallback] = ...
) -> Iterator[_StrType]: ...

class HtmlDiff(object):
    def __init__(
        self,
        tabsize: int = ...,
        wrapcolumn: Optional[int] = ...,
        linejunk: Optional[_JunkCallback] = ...,
        charjunk: Optional[_JunkCallback] = ...,
    ) -> None: ...
    if sys.version_info >= (3, 5):
        def make_file(
            self,
            fromlines: Sequence[_StrType],
            tolines: Sequence[_StrType],
            fromdesc: _StrType = ...,
            todesc: _StrType = ...,
            context: bool = ...,
            numlines: int = ...,
            *,
            charset: str = ...,
        ) -> _StrType: ...
    else:
        def make_file(
            self,
            fromlines: Sequence[_StrType],
            tolines: Sequence[_StrType],
            fromdesc: _StrType = ...,
            todesc: _StrType = ...,
            context: bool = ...,
            numlines: int = ...,
        ) -> _StrType: ...
    def make_table(
        self,
        fromlines: Sequence[_StrType],
        tolines: Sequence[_StrType],
        fromdesc: _StrType = ...,
        todesc: _StrType = ...,
        context: bool = ...,
        numlines: int = ...,
    ) -> _StrType: ...

def restore(delta: Iterable[_StrType], which: int) -> Iterator[_StrType]: ...

if sys.version_info >= (3, 5):
    def diff_bytes(
        dfunc: Callable[[Sequence[str], Sequence[str], str, str, str, str, int, str], Iterator[str]],
        a: Sequence[bytes],
        b: Sequence[bytes],
        fromfile: bytes = ...,
        tofile: bytes = ...,
        fromfiledate: bytes = ...,
        tofiledate: bytes = ...,
        n: int = ...,
        lineterm: bytes = ...,
    ) -> Iterator[bytes]: ...
PK