import { Column, EnumObject, Locale, Session, Table, TableRow } from '../index';
export declare class TableMatrix {
    session: Session;
    locale: Locale;
    protected _allData: TableMatrixDataAxis[];
    protected _allAxis: TableMatrixKeyAxis[];
    protected _rows: TableRow[];
    protected _table: Table;
    constructor(table: Table, session: Session);
    static DateGroup: {
        readonly NONE: 0;
        readonly YEAR: 256;
        readonly MONTH: 257;
        readonly WEEKDAY: 258;
        readonly DATE: 259;
    };
    static NumberGroup: {
        readonly COUNT: -1;
        readonly SUM: 1;
        readonly AVG: 2;
    };
    /**
     * add data axis
     */
    addData(data: Column<any>, dataGroup: TableMatrixNumberGroup): TableMatrixDataAxis;
    addAxis(axis: Column<any>, axisGroup: TableMatrixNumberGroup | TableMatrixDateGroup): TableMatrixKeyAxis;
    /**
     * @returns a cube containing the results
     */
    calculate(): TableMatrixResult;
    /**
     *
     * @returns Array holding an entry for each column. Each entry consists of an array with the column at index 0 and the count at index 1.
     */
    columnCount(filterNumberColumns?: boolean): Array<Array<Column<any> | number>>;
    isEmpty(): boolean;
    /**
     * @returns valid columns for table-matrix (not instance of NumberColumn and not guiOnly)
     * @param filterNumberColumns whether or not to filter NumberColumn, default is true
     */
    columns(filterNumberColumns?: boolean): Column<any>[];
    /**
     * Table rows and columns are not always in a consistent state.
     * @returns true, if table is in a valid, consistent state
     */
    isMatrixValid(): boolean;
}
export type TableMatrixNumberGroup = EnumObject<typeof TableMatrix.NumberGroup>;
export type TableMatrixDateGroup = EnumObject<typeof TableMatrix.DateGroup>;
export type TableMatrixKeyAxis = number[] & {
    column: Column<any>;
    normTable: string[];
    sortCodeMap: Record<number, number>;
    isIcon?: boolean;
    iconId?: string;
    min: number;
    max: number;
    format(n: number): string;
    keyToDeterministicKey(n: number): number | string;
    deterministicKeyToKey(f: string | number): number;
    normDeterministic(f: any): string | number;
    norm(f: any): number;
    add(k: number): any;
    reorder(): void;
};
export type TableMatrixDataAxis = {
    column: Column<any>;
    total: number;
    min: number;
    max: number;
    format(n: number): string;
    norm(f: any): number;
    group(array: number[]): number;
};
export type TableMatrixResult = Record<string, number[]> & {
    length: number;
    getValue(keys: number[]): number[];
};
//# sourceMappingURL=TableMatrix.d.ts.map