from typing import Any, Literal

from sympy.combinatorics.permutations import Perm
from sympy.core.basic import Basic

def dummy_sgs(dummies, sym, n) -> list[Any]: ...
def transversal2coset(size, base, transversal) -> list[Any]: ...
def double_coset_can_rep(dummies, sym, b_S, sgens, S_transversals, g) -> Literal[0]: ...
def canonical_free(base, gens, g, num_free) -> list[Any]: ...
def canonicalize(g, dummies, msym, *v) -> list[Any] | Literal[0]: ...
def perm_af_direct_product(gens1, gens2, signed=...) -> list[list[Any]]: ...
def bsgs_direct_product(base1, gens1, base2, gens2, signed=...) -> tuple[list[Any], list[Perm]]: ...
def get_symmetric_group_sgs(n, antisym=...) -> tuple[list[Any], list[Perm]] | tuple[list[int], list[Perm]]: ...

riemann_bsgs = ...

def get_transversals(base, gens) -> list[Any] | list[dict[Any, Any]]: ...
def get_minimal_bsgs(base, gens) -> tuple[Any | list[Any], list[Basic] | Any | list[Basic | Any]] | None: ...
def tensor_gens(
    base, gens, list_free_indices, sym=...
) -> (
    tuple[Any, list[Any], list[Perm]]
    | tuple[Any, Any | list[Any], list[Perm] | list[Any | Perm]]
    | tuple[Any, list[Any], list[Perm] | list[Any | Perm]]
): ...
def gens_products(*v) -> tuple[Any | None, Any | list[Any], list[list[int]] | list[Perm | Any]]: ...
