from argparse import ArgumentParser
from typing import Any
import re

CURRENT_PYTHON: tuple[int, int]
REQUIRED_PYTHON: tuple[int, int]

def pluralize(value: int, arg: str = "s") -> str: ...

class Command:
    description: str | None
    def create_parser(self, command_name: str | None = None) -> ArgumentParser: ...
    def add_arguments(self, parser: ArgumentParser) -> None: ...
    def print_help(self, command_name: str) -> None: ...
    def execute(self, argv: list[str]) -> None: ...

class CreateProject(Command):
    description: str
    default_template_path: str
    def __init__(self) -> None: ...
    def add_arguments(self, parser: ArgumentParser) -> None: ...
    def get_default_template_path(self) -> str: ...
    def run(self, project_name: str | None = None, dest_dir: str | None = None, **options: Any) -> None: ...

class UpdateModulePaths(Command):
    description: str
    REPLACEMENTS: list[tuple[re.Pattern[str], str]]
    def add_arguments(self, parser: ArgumentParser) -> None: ...
    def run(
        self,
        root_path: str | None = None,
        list_files: bool = False,
        diff: bool = False,
        ignored_dirs: list[str] | None = None,
        ignored_patterns: list[str] | None = None,
    ) -> None: ...

class Version(Command):
    description: str
    def run(self) -> None: ...

COMMANDS: dict[str, Command]

def prog_name() -> str: ...
def help_index() -> None: ...
def unknown_command(command: str) -> None: ...
def main() -> None: ...
