from typing import Iterable

class FMIndex:
    def __init__(self, data: str) -> FMIndex: ...
    def __len__(self) -> int: ...
    def __contains__(self, pattern: str) -> bool: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __copy__(self) -> FMIndex: ...
    def __deepcopy__(self, memo) -> FMIndex: ...
    def item(self) -> str: ...
    def contains(self, pattern: str) -> bool: ...
    def count(self, pattern: str) -> int: ...
    def locate(self, pattern: str) -> list[int]: ...
    def startswith(self, prefix: str) -> bool: ...
    def endswith(self, suffix: str) -> bool: ...

class MultiFMIndex:
    def __init__(self, data: Iterable[str]) -> MultiFMIndex: ...
    def __len__(self) -> int: ...
    def __contains__(self, pattern: str) -> bool: ...
    def __str__(self) -> str: ...
    def __repr__(self) -> str: ...
    def __copy__(self) -> MultiFMIndex: ...
    def __deepcopy__(self, memo) -> MultiFMIndex: ...
    def item(self) -> list[str]: ...
    def contains(self, pattern: str) -> bool: ...
    def count_all(self, pattern: str) -> int: ...
    def count(self, pattern: str) -> dict[int, int]: ...
    def locate(self, pattern: str) -> dict[int, list[int]]: ...
    def startswith(self, prefix: str) -> list[int]: ...
    def endswith(self, suffix: str) -> list[int]: ...
