import { BaseCollection } from './base-collection';
export interface Matrix<T> {
    get(row: number, col: number): T | undefined;
    set(row: number, col: number, value: T): void;
    rows(): number;
    columns(): number;
    fill(value: T): void;
    resize(rows: number, cols: number): void;
    isSquare(): boolean;
    isSymmetric(): boolean;
    getRow(row: number): T[];
    getColumn(col: number): T[];
    setRow(row: number, values: T[]): void;
    setColumn(col: number, values: T[]): void;
    swapRows(row1: number, row2: number): void;
    swapColumns(col1: number, col2: number): void;
    transpose(): Matrix<T>;
    add(other: Matrix<T>): Matrix<T>;
    subtract(other: Matrix<T>): Matrix<T>;
    multiply(other: Matrix<T>): Matrix<T>;
    scalarMultiply(scalar: number): Matrix<T>;
    map(fn: (value: T, row: number, col: number) => T): Matrix<T>;
    forEach(fn: (value: T, row: number, col: number) => void): void;
    clone(): Matrix<T>;
    toArray(): T[][];
    equals(other: Matrix<T>): boolean;
    submatrix(startRow: number, startCol: number, endRow: number, endCol: number): Matrix<T>;
    insertMatrix(other: Matrix<T>, startRow: number, startCol: number): void;
    getDiagonal(): T[];
    setDiagonal(values: T[]): void;
    trace(): T;
}
export declare class Matrix<T> extends BaseCollection<T> implements Matrix<T> {
    private data;
    private numRows;
    private numCols;
    constructor(rows: number, cols: number);
    /**
     * Clears the matrix by setting all elements to undefined.
     */
    clear(): void;
    /**
     * Checks if the matrix is empty (has zero dimensions).
     */
    isEmpty(): boolean;
    /**
     * Returns the total number of elements in the matrix.
     */
    size(): number;
    private isValidPosition;
}
