import '../../assert/js/assert.js';
import '../../globals.js';
declare class Permutation {
    readonly indices: number[];
    /**
     * Creates a permutation that will rearrange a list so that newList[i] = oldList[permutation[i]]
     */
    constructor(indices: number[]);
    size(): number;
    /**
     * Applies the permutation, returning either a new array or number (whatever was provided).
     */
    apply<E, T extends E[] | number>(arrayOrInt: T): T extends E[] ? number[] : number;
    /**
     * Creates a new permutation that is the inverse of this.
     */
    inverted(): Permutation;
    withIndicesPermuted(indices: number[]): Permutation[];
    toString(): string;
    equals(permutation: Permutation): boolean;
    /**
     * Creates an identity permutation of a given size.
     */
    static identity(size: number): Permutation;
    /**
     * Lists all permutations that have a given size
     */
    static permutations(size: number): Permutation[];
    /**
     * Calls a callback on every single possible permutation of the given Array
     *
     * @param array
     * @param callback - Called on each permuted version of the array possible
     */
    static forEachPermutation<T>(array: T[], callback: (array: readonly T[]) => void): void;
    static permutationsOf<T>(array: T[]): T[][];
}
export default Permutation;
//# sourceMappingURL=Permutation.d.ts.map