{"version":3,"file":"index.mjs","names":["internal.isMatrix2x2","equals","internal.equals","make","internal.make","fromRows","internal.fromRows","fromColumns","internal.fromColumns","setRow","internal.setRow","setColumn","internal.setColumn","determinant","internal.determinant","vectorProductLeft","internal.vectorProductLeft","vectorProductRight","internal.vectorProductRight","solveSystem","internal.solveSystem","toRows","internal.toRows","toColumns","internal.toColumns","rowVector","internal.rowVector","columnVector","internal.columnVector","transpose","internal.transpose","reverseRows","internal.reverseRows","reverseColumns","internal.reverseColumns","internal.isMatrix3x3","internal.equals","internal.make","internal.fromRows","internal.fromColumns","internal.setRow","internal.setColumn","internal.determinant","internal.minor","internal.vectorProductLeft","internal.vectorProductRight","internal.solveSystem","internal.toRows","internal.toColumns","internal.rowVector","internal.columnVector","internal.transpose","internal.reverseRows","internal.reverseColumns"],"sources":["../../src/matrix/matrix2x2.ts","../../src/matrix/matrix3x3.ts"],"sourcesContent":["import type { TwoDimensionalComponent, TwoDimensionalIndex } from '../dimensions.ts'\nimport type { Pipeable } from '../utils.ts'\nimport type { Vector2 } from '../vector/vector2.ts'\nimport type { Matrix2x2TypeId } from './matrix2x2.internal.ts'\nimport * as internal from './matrix2x2.internal.ts'\n\n/**\n * A type representing the coordinate of a 2D matrix.\n *\n * @since 1.0.0\n */\nexport type Matrix2x2Coordinate = TwoDimensionalIndex | TwoDimensionalComponent\n\n/**\n * A 2D matrix with 2 rows and 2 columns.\n *\n * All fields are readonly and immutable, and all operations create new instances.\n *\n * @since 1.0.0\n */\nexport interface Matrix2x2 extends Pipeable {\n  readonly [Matrix2x2TypeId]: Matrix2x2TypeId\n\n  /**\n   * The value in the first row and first column.\n   */\n  readonly m00: number\n  /**\n   * The value in the first row and second column.\n   */\n  readonly m01: number\n  /**\n   * The value in the second row and first column.\n   */\n  readonly m10: number\n  /**\n   * The value in the second row and second column.\n   */\n  readonly m11: number\n}\n\n/**\n * Checks if a value is a `Matrix2x2`.\n *\n * @param m - The value to check.\n * @returns `true` if the value is a `Matrix2x2`, `false` otherwise.\n * @since 1.0.0\n */\nexport const isMatrix2x2: (m: unknown) => m is Matrix2x2 = internal.isMatrix2x2\n\nexport const equals: {\n  /**\n   * Checks if two `Matrix2x2` instances are approximately equal within the\n   * default absolute tolerance ({@link EPSILON}).\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns `true` when each pair of components is within tolerance.\n   * @since 1.1.0\n   */\n  (a: Matrix2x2, b: Matrix2x2): boolean\n  /**\n   * Checks if two `Matrix2x2` instances are approximately equal within the\n   * default absolute tolerance ({@link EPSILON}).\n   *\n   * @param b - The second matrix.\n   * @returns A function that takes the first matrix and returns the comparison result.\n   * @since 1.1.0\n   */\n  (b: Matrix2x2): (a: Matrix2x2) => boolean\n} = internal.equals\n\n/**\n * Creates a new `Matrix2x2` instance.\n *\n * @param m00 - The value in the first row and first column. Defaults to 0.\n * @param m01 - The value in the first row and second column. Defaults to 0.\n * @param m10 - The value in the second row and first column. Defaults to 0.\n * @param m11 - The value in the second row and second column. Defaults to 0.\n */\nexport const make: (m00?: number, m01?: number, m10?: number, m11?: number) => Matrix2x2 =\n  internal.make\n\n/**\n * Creates a new `Matrix2x2` instance from two vectors representing rows.\n *\n * @param v0 - The first row vector.\n * @param v1 - The second row vector.\n * @returns A new `Matrix2x2` instance.\n * @since 1.0.0\n */\nexport const fromRows: (v0: Vector2, v1: Vector2) => Matrix2x2 = internal.fromRows\n\n/**\n * Creates a new `Matrix2x2` instance from two vectors representing columns.\n *\n * @param v0 - The first column vector.\n * @param v1 - The second column vector.\n * @returns A new `Matrix2x2` instance.\n * @since 1.0.0\n */\nexport const fromColumns: (v0: Vector2, v1: Vector2) => Matrix2x2 = internal.fromColumns\n\nexport const setRow: {\n  /**\n   * Sets the specified row of the matrix to the given vector.\n   *\n   * @param m - The matrix to modify.\n   * @param row - The row index (0 or 1).\n   * @param v - The vector to set the row to.\n   * @returns A new `Matrix2x2` instance with the specified row set to the given vector.\n   * @since 1.0.0\n   */\n  (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2): Matrix2x2\n  /**\n   * Sets the specified row of the matrix to the given vector.\n   *\n   * @param row - The row index (0 or 1).\n   * @param v - The vector to set the row to.\n   * @returns A function that takes a matrix and returns a new `Matrix2x2` instance with the specified row set to the given vector.\n   * @since 1.0.0\n   */\n  (row: Matrix2x2Coordinate, v: Vector2): (m: Matrix2x2) => Matrix2x2\n} = internal.setRow\n\nexport const setColumn: {\n  /**\n   * Sets the specified column of the matrix to the given vector.\n   *\n   * @param m - The matrix to modify.\n   * @param column - The column index (0 or 1).\n   * @param v - The vector to set the column to.\n   * @returns A new `Matrix2x2` instance with the specified column set to the given vector.\n   * @since 1.0.0\n   */\n  (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2): Matrix2x2\n  /**\n   * Sets the specified column of the matrix to the given vector.\n   *\n   * @param column - The column index (0 or 1).\n   * @param v - The vector to set the column to.\n   * @returns A function that takes a matrix and returns a new `Matrix2x2` instance with the specified column set to the given vector.\n   * @since 1.0.0\n   */\n  (column: Matrix2x2Coordinate, v: Vector2): (m: Matrix2x2) => Matrix2x2\n} = internal.setColumn\n\n/**\n * Calculates the determinant of a 2D matrix.\n *\n * @param m - The matrix to calculate the determinant for.\n * @returns The determinant of the matrix.\n * @since 1.0.0\n */\nexport const determinant: (m: Matrix2x2) => number = internal.determinant\n\nexport const vectorProductLeft: {\n  /**\n   * Calculates the left vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix2x2 from 'curvy/matrix2x2'\n   * import * as Vector2 from 'curvy/vector2'\n   *\n   * const matrix = Matrix2x2.make(1, 2, 3, 4)\n   * const vector = Vector2.make(5, 6)\n   *\n   * // Performs:\n   * // x = 1 * 5 + 2 * 6 = 17\n   * // y = 3 * 5 + 4 * 6 = 39\n   * const result = Matrix2x2.vectorProductLeft(matrix, vector)\n   * ```\n   * @param m - The matrix to multiply.\n   * @param v - The vector to multiply.\n   * @returns The resulting vector after the left vector product.\n   * @since 1.0.0\n   */\n  (m: Matrix2x2, v: Vector2): Vector2\n  /**\n   * Calculates the left vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix2x2 from 'curvy/matrix2x2'\n   * import * as Vector2 from 'curvy/vector2'\n   *\n   * const matrix = Matrix2x2.make(1, 2, 3, 4)\n   * const vector = Vector2.make(5, 6)\n   *\n   * // Performs:\n   * // x = 1 * 5 + 2 * 6 = 17\n   * // y = 3 * 5 + 4 * 6 = 39\n   * const result = Matrix2x2.vectorProductLeft(vector)(matrix)\n   * ```\n   * @param v - The vector to multiply.\n   * @returns A function that takes a matrix and returns the resulting vector after the left vector product.\n   * @since 1.0.0\n   */\n  (v: Vector2): (m: Matrix2x2) => Vector2\n} = internal.vectorProductLeft\n\nexport const vectorProductRight: {\n  /**\n   * Calculates the right vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix2x2 from 'curvy/matrix2x2'\n   * import * as Vector2 from 'curvy/vector2'\n   *\n   * const matrix = Matrix2x2.make(1, 2, 3, 4)\n   * const vector = Vector2.make(5, 6)\n   *\n   * // Performs:\n   * // x = 1 * 5 + 3 * 6 = 33\n   * // y = 2 * 5 + 4 * 6 = 62\n   * const result = Matrix2x2.vectorProductRight(matrix, vector)\n   * ```\n   * @param m - The matrix to multiply.\n   * @param v - The vector to multiply.\n   * @returns The resulting vector after the right vector product.\n   * @since 1.0.0\n   */\n  (m: Matrix2x2, v: Vector2): Vector2\n  /**\n   * Calculates the right vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix2x2 from 'curvy/matrix2x2'\n   * import * as Vector2 from 'curvy/vector2'\n   *\n   * const matrix = Matrix2x2.make(1, 2, 3, 4)\n   * const vector = Vector2.make(5, 6)\n   *\n   * // Performs:\n   * // x = 1 * 5 + 3 * 6 = 33\n   * // y = 2 * 5 + 4 * 6 = 62\n   * const result = Matrix2x2.vectorProductRight(vector)(matrix)\n   * ```\n   * @param v - The vector to multiply.\n   * @returns A function that takes a matrix and returns the resulting vector after the right vector product.\n   * @since 1.0.0\n   */\n  (v: Vector2): (m: Matrix2x2) => Vector2\n} = internal.vectorProductRight\n\nexport const solveSystem: {\n  /**\n   * Solves a system of linear equations represented by a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix2x2 from 'curvy/matrix2x2'\n   * import * as Vector2 from 'curvy/vector2'\n   *\n   * const matrix = Matrix2x2.make(1, 2, 3, 4)\n   * const vector = Vector2.make(5, 6)\n   *\n   * // Solves the system of equations:\n   * // 1x + 2y = 5\n   * // 3x + 4y = 6\n   * const result = Matrix2x2.solveSystem(matrix, vector)\n   * ```\n   * @param m - The matrix representing the coefficients of the system.\n   * @param v - The vector representing the constants of the system.\n   * @returns The solution vector.\n   * @since 1.0.0\n   */\n  (m: Matrix2x2, v: Vector2): Vector2\n  /**\n   * Solves a system of linear equations represented by a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix2x2 from 'curvy/matrix2x2'\n   * import * as Vector2 from 'curvy/vector2'\n   *\n   * const matrix = Matrix2x2.make(1, 2, 3, 4)\n   * const vector = Vector2.make(5, 6)\n   *\n   * // Solves the system of equations:\n   * // 1x + 2y = 5\n   * // 3x + 4y = 6\n   * const result = Matrix2x2.solveSystem(vector)(matrix)\n   * ```\n   * @param v - The vector representing the constants of the system.\n   * @returns A function that takes a matrix and returns the solution vector.\n   * @since 1.0.0\n   */\n  (v: Vector2): (m: Matrix2x2) => Vector2\n} = internal.solveSystem\n\n/**\n * Returns the rows of a matrix as an array of vectors.\n *\n * @param m - The matrix to convert.\n * @returns An array of vectors representing the rows of the matrix.\n * @since 1.0.0\n */\nexport const toRows: (m: Matrix2x2) => [Vector2, Vector2] = internal.toRows\n\n/**\n * Returns the columns of a matrix as an array of vectors.\n *\n * @param m - The matrix to convert.\n * @returns An array of vectors representing the columns of the matrix.\n * @since 1.0.0\n */\nexport const toColumns: (m: Matrix2x2) => [Vector2, Vector2] = internal.toColumns\n\n/**\n * Returns the specified row of a matrix as a vector.\n *\n * @param m - The matrix to get the row from.\n * @param row - The row index (0 or 1).\n * @returns A vector representing the specified row of the matrix.\n * @since 1.0.0\n */\nexport const rowVector: (m: Matrix2x2, row: Matrix2x2Coordinate) => Vector2 = internal.rowVector\n\n/**\n * Returns the specified column of a matrix as a vector.\n *\n * @param m - The matrix to get the column from.\n * @param column - The column index (0 or 1).\n * @returns A vector representing the specified column of the matrix.\n * @since 1.0.0\n */\nexport const columnVector: (m: Matrix2x2, column: Matrix2x2Coordinate) => Vector2 =\n  internal.columnVector\n\n/**\n * Transposes a matrix.\n *\n * @param m - The matrix to transpose.\n * @returns A new `Matrix2x2` instance representing the transposed matrix.\n * @since 1.0.0\n */\nexport const transpose: (m: Matrix2x2) => Matrix2x2 = internal.transpose\n\n/**\n * Reverses the rows of a matrix.\n *\n * @param m - The matrix to reverse the rows of.\n * @returns A new `Matrix2x2` instance with the rows reversed.\n * @since 1.0.0\n */\nexport const reverseRows: (m: Matrix2x2) => Matrix2x2 = internal.reverseRows\n\n/**\n * Reverses the columns of a matrix.\n *\n * @param m - The matrix to reverse the columns of.\n * @returns A new `Matrix2x2` instance with the columns reversed.\n * @since 1.0.0\n */\nexport const reverseColumns: (m: Matrix2x2) => Matrix2x2 = internal.reverseColumns\n","import type { ThreeDimensionalComponent, ThreeDimensionalIndex } from '../dimensions.ts'\nimport type { Pipeable } from '../utils.ts'\nimport type { Vector3 } from '../vector/vector3.ts'\nimport type { Matrix2x2 } from './matrix2x2.ts'\nimport type { Matrix3x3TypeId } from './matrix3x3.internal.ts'\nimport * as internal from './matrix3x3.internal.ts'\n\n/**\n * A coordinate in a 3x3 matrix.\n *\n * @since 1.0.0\n */\nexport type Matrix3x3Coordinate = ThreeDimensionalIndex | ThreeDimensionalComponent\n\n/**\n * A 3x3 matrix.\n *\n * All fields are readonly and immutable, and all operations create new instances.\n *\n * @since 1.0.0\n */\nexport interface Matrix3x3 extends Pipeable {\n  readonly [Matrix3x3TypeId]: Matrix3x3TypeId\n  /**\n   * The value of the first row and first column.\n   */\n  readonly m00: number\n  /**\n   * The value of the first row and second column.\n   */\n  readonly m01: number\n  /**\n   * The value of the first row and third column.\n   */\n  readonly m02: number\n  /**\n   * The value of the second row and first column.\n   */\n  readonly m10: number\n  /**\n   * The value of the second row and second column.\n   */\n  readonly m11: number\n  /**\n   * The value of the second row and third column.\n   */\n  readonly m12: number\n  /**\n   * The value of the third row and first column.\n   */\n  readonly m20: number\n  /**\n   * The value of the third row and second column.\n   */\n  readonly m21: number\n  /**\n   * The value of the third row and third column.\n   */\n  readonly m22: number\n}\n\n/**\n * Checks if a value is a `Matrix3x3`.\n *\n * @param m - The value to check.\n * @returns `true` if the value is a `Matrix3x3`, `false` otherwise.\n * @since 1.0.0\n */\nexport const isMatrix3x3: (m: unknown) => m is Matrix3x3 = internal.isMatrix3x3\n\nexport const equals: {\n  /**\n   * Checks if two `Matrix3x3` instances are approximately equal within the\n   * default absolute tolerance ({@link EPSILON}).\n   *\n   * @param a - The first matrix.\n   * @param b - The second matrix.\n   * @returns `true` when each pair of components is within tolerance.\n   * @since 1.1.0\n   */\n  (a: Matrix3x3, b: Matrix3x3): boolean\n  /**\n   * Checks if two `Matrix3x3` instances are approximately equal within the\n   * default absolute tolerance ({@link EPSILON}).\n   *\n   * @param b - The second matrix.\n   * @returns A function that takes the first matrix and returns the comparison result.\n   * @since 1.1.0\n   */\n  (b: Matrix3x3): (a: Matrix3x3) => boolean\n} = internal.equals\n\n/**\n * Creates a new `Matrix3x3` instance.\n *\n * @param m00 - The value of the first row and first column.\n * @param m01 - The value of the first row and second column.\n * @param m02 - The value of the first row and third column.\n * @param m10 - The value of the second row and first column.\n * @param m11 - The value of the second row and second column.\n * @param m12 - The value of the second row and third column.\n * @param m20 - The value of the third row and first column.\n * @param m21 - The value of the third row and second column.\n * @param m22 - The value of the third row and third column.\n * @returns A new `Matrix3x3` instance.\n * @since 1.0.0\n */\nexport const make: (\n  m00?: number,\n  m01?: number,\n  m02?: number,\n  m10?: number,\n  m11?: number,\n  m12?: number,\n  m20?: number,\n  m21?: number,\n  m22?: number,\n) => Matrix3x3 = internal.make\n\n/**\n * Creates a new `Matrix3x3` instance from three row vectors.\n *\n * @param v0 - The first row vector.\n * @param v1 - The second row vector.\n * @param v2 - The third row vector.\n * @returns A new `Matrix3x3` instance.\n * @since 1.0.0\n */\nexport const fromRows: (v0: Vector3, v1: Vector3, v2: Vector3) => Matrix3x3 = internal.fromRows\n\n/**\n * Creates a new `Matrix3x3` instance from three column vectors.\n *\n * @param v0 - The first column vector.\n * @param v1 - The second column vector.\n * @param v2 - The third column vector.\n * @returns A new `Matrix3x3` instance.\n * @since 1.0.0\n */\nexport const fromColumns: (v0: Vector3, v1: Vector3, v2: Vector3) => Matrix3x3 =\n  internal.fromColumns\n\nexport const setRow: {\n  /**\n   * Sets a row of the matrix to a new vector.\n   *\n   * @param m - The matrix to set the row of.\n   * @param row - The row index to set.\n   * @param v - The new vector for the row.\n   * @returns A new matrix with the specified row set to the new vector.\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, row: Matrix3x3Coordinate, v: Vector3): Matrix3x3\n  /**\n   * Sets a row of the matrix to a new vector.\n   *\n   * @param row - The row index to set.\n   * @param v - The new vector for the row.\n   * @returns A function that takes a matrix and returns a new matrix with the specified row set to the new vector.\n   * @since 1.0.0\n   */\n  (row: Matrix3x3Coordinate, v: Vector3): (m: Matrix3x3) => Matrix3x3\n} = internal.setRow\n\nexport const setColumn: {\n  /**\n   * Sets a column of the matrix to a new vector.\n   *\n   * @param m - The matrix to set the column of.\n   * @param column - The column index to set.\n   * @param v - The new vector for the column.\n   * @returns A new matrix with the specified column set to the new vector.\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, column: Matrix3x3Coordinate, v: Vector3): Matrix3x3\n  /**\n   * Sets a column of the matrix to a new vector.\n   *\n   * @param column - The column index to set.\n   * @param v - The new vector for the column.\n   * @returns A function that takes a matrix and returns a new matrix with the specified column set to the new vector.\n   * @since 1.0.0\n   */\n  (column: Matrix3x3Coordinate, v: Vector3): (m: Matrix3x3) => Matrix3x3\n} = internal.setColumn\n\n/**\n * Calculates the determinant of a 3x3 matrix.\n *\n * @param m - The matrix to calculate the determinant of.\n * @returns The determinant of the matrix.\n * @since 1.0.0\n */\nexport const determinant: (m: Matrix3x3) => number = internal.determinant\n\n/**\n * Calculates the minor of a 3x3 matrix.\n *\n * @param m - The matrix to calculate the minor of.\n * @param row - The row index of the element to calculate the minor for.\n * @param column - The column index of the element to calculate the minor for.\n * @returns The minor of the matrix at the specified row and column.\n * @since 1.0.0\n */\nexport const minor: (\n  m: Matrix3x3,\n  row: Matrix3x3Coordinate,\n  column: Matrix3x3Coordinate,\n) => Matrix2x2 = internal.minor\n\nexport const vectorProductLeft: {\n  /**\n   * Calculates the left vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix3x3 from 'curvy/matrix3x3'\n   * import * as Vector3 from 'curvy/vector3'\n   *\n   * const m = Matrix3x3.make(1, 2, 3, 4, 5, 6, 7, 8, 9)\n   * const v = Vector3.vector3(10, 11, 12)\n   *\n   * // Performs:\n   * // x = 1 * 10 + 2 * 11 + 3 * 12\n   * // y = 4 * 10 + 5 * 11 + 6 * 12\n   * // z = 7 * 10 + 8 * 11 + 9 * 12\n   * const result = Matrix3x3.vectorProductLeft(m, v)\n   * ```\n   * @param m - The matrix to calculate the left vector product with.\n   * @param v - The vector to calculate the left vector product with.\n   * @returns The resulting vector from the left vector product.\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, v: Vector3): Vector3\n  /**\n   * Calculates the left vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix3x3 from 'curvy/matrix3x3'\n   * import * as Vector3 from 'curvy/vector3'\n   *\n   * const m = Matrix3x3.make(1, 2, 3, 4, 5, 6, 7, 8, 9)\n   * const v = Vector3.vector3(10, 11, 12)\n   *\n   * // Performs:\n   * // x = 1 * 10 + 2 * 11 + 3 * 12\n   * // y = 4 * 10 + 5 * 11 + 6 * 12\n   * // z = 7 * 10 + 8 * 11 + 9 * 12\n   * const result = Matrix3x3.vectorProductLeft(v)(m)\n   * ```\n   * @param v - The vector to calculate the left vector product with.\n   * @returns A function that takes a matrix and returns the resulting vector from the left vector product.\n   * @since 1.0.0\n   */\n  (v: Vector3): (m: Matrix3x3) => Vector3\n} = internal.vectorProductLeft\n\nexport const vectorProductRight: {\n  /**\n   * Calculates the right vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix3x3 from 'curvy/matrix3x3'\n   * import * as Vector3 from 'curvy/vector3'\n   *\n   * const m = Matrix3x3.make(1, 2, 3, 4, 5, 6, 7, 8, 9)\n   * const v = Vector3.vector3(10, 11, 12)\n   *\n   * // Performs:\n   * // x = 1 * 10 + 4 * 11 + 7 * 12\n   * // y = 2 * 10 + 5 * 11 + 8 * 12\n   * // z = 3 * 10 + 6 * 11 + 9 * 12\n   * const result = Matrix3x3.vectorProductRight(m, v)\n   * ```\n   * @param m - The matrix to calculate the right vector product with.\n   * @param v - The vector to calculate the right vector product with.\n   * @returns The resulting vector from the right vector product.\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, v: Vector3): Vector3\n  /**\n   * Calculates the right vector product of a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix3x3 from 'curvy/matrix3x3'\n   * import * as Vector3 from 'curvy/vector3'\n   *\n   * const m = Matrix3x3.make(1, 2, 3, 4, 5, 6, 7, 8, 9)\n   * const v = Vector3.vector3(10, 11, 12)\n   *\n   * // Performs:\n   * // x = 1 * 10 + 4 * 11 + 7 * 12\n   * // y = 2 * 10 + 5 * 11 + 8 * 12\n   * // z = 3 * 10 + 6 * 11 + 9 * 12\n   * const result = Matrix3x3.vectorProductRight(v)(m)\n   * ```\n   * @param v - The vector to calculate the right vector product with.\n   * @returns A function that takes a matrix and returns the resulting vector from the right vector product.\n   * @since 1.0.0\n   */\n  (v: Vector3): (m: Matrix3x3) => Vector3\n} = internal.vectorProductRight\n\nexport const solveSystem: {\n  /**\n   * Solves a system of equations represented by a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix3x3 from 'curvy/matrix3x3'\n   * import * as Vector3 from 'curvy/vector3'\n   *\n   * const m = Matrix3x3.make(1, 2, 3, 4, 5, 6, 7, 8, 9)\n   * const v = Vector3.vector3(10, 11, 12)\n   *\n   * // Performs:\n   * // x = m00 * x + m01 * y + m02 * z\n   * // y = m10 * x + m11 * y + m12 * z\n   * // z = m20 * x + m21 * y + m22 * z\n   * const result = Matrix3x3.solveSystem(m, v)\n   * ```\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, v: Vector3): Vector3\n  /**\n   * Solves a system of equations represented by a matrix and a vector.\n   *\n   * @example\n   * ```ts\n   * import * as Matrix3x3 from 'curvy/matrix3x3'\n   * import * as Vector3 from 'curvy/vector3'\n   *\n   * const m = Matrix3x3.make(1, 2, 3, 4, 5, 6, 7, 8, 9)\n   * const v = Vector3.vector3(10, 11, 12)\n   *\n   * // Performs:\n   * // x = m00 * x + m01 * y + m02 * z\n   * // y = m10 * x + m11 * y + m12 * z\n   * // z = m20 * x + m21 * y + m22 * z\n   * const result = Matrix3x3.solveSystem(v)(m)\n   * ```\n   * @since 1.0.0\n   */\n  (v: Vector3): (m: Matrix3x3) => Vector3\n} = internal.solveSystem\n\n/**\n * Returns the rows of a `Matrix3x3` as an array of vectors.\n *\n * @param m - The matrix to get the rows from.\n * @returns An array of vectors representing the rows of the matrix.\n * @since 1.0.0\n */\nexport const toRows: (m: Matrix3x3) => [Vector3, Vector3, Vector3] = internal.toRows as (\n  m: Matrix3x3,\n) => [Vector3, Vector3, Vector3]\n\n/**\n * Returns the columns of a `Matrix3x3` as an array of vectors.\n *\n * @param m - The matrix to get the columns from.\n * @returns An array of vectors representing the columns of the matrix.\n * @since 1.0.0\n */\nexport const toColumns: (m: Matrix3x3) => [Vector3, Vector3, Vector3] = internal.toColumns as (\n  m: Matrix3x3,\n) => [Vector3, Vector3, Vector3]\n\nexport const rowVector: {\n  /**\n   * Gets a row vector from the matrix.\n   *\n   * @param m - The matrix to get the row vector from.\n   * @param row - The row index to get the vector from.\n   * @returns The row vector at the specified index.\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, row: Matrix3x3Coordinate): Vector3\n  /**\n   * Gets a row vector from the matrix.\n   *\n   * @param row - The row index to get the vector from.\n   * @returns A function that takes a matrix and returns the row vector at the specified index.\n   * @since 1.0.0\n   */\n  (row: Matrix3x3Coordinate): (m: Matrix3x3) => Vector3\n} = internal.rowVector\n\nexport const columnVector: {\n  /**\n   * Gets a column vector from the matrix.\n   *\n   * @param m - The matrix to get the column vector from.\n   * @param column - The column index to get the vector from.\n   * @returns The column vector at the specified index.\n   * @since 1.0.0\n   */\n  (m: Matrix3x3, column: Matrix3x3Coordinate): Vector3\n  /**\n   * Gets a column vector from the matrix.\n   *\n   * @param column - The column index to get the vector from.\n   * @returns A function that takes a matrix and returns the column vector at the specified index.\n   * @since 1.0.0\n   */\n  (column: Matrix3x3Coordinate): (m: Matrix3x3) => Vector3\n} = internal.columnVector\n\n/**\n * Transposes a `Matrix3x3`.\n *\n * @param m - The matrix to transpose.\n * @returns A new `Matrix3x3` instance that is the transpose of the input matrix.\n * @since 1.0.0\n */\nexport const transpose: (m: Matrix3x3) => Matrix3x3 = internal.transpose\n\n/**\n * Reverses the rows of a `Matrix3x3`.\n *\n * @param m - The matrix to reverse the rows of.\n * @returns A new `Matrix3x3` instance with the rows reversed.\n * @since 1.0.0\n */\nexport const reverseRows: (m: Matrix3x3) => Matrix3x3 = internal.reverseRows\n\n/**\n * Reverses the columns of a `Matrix3x3`.\n *\n * @param m - The matrix to reverse the columns of.\n * @returns A new `Matrix3x3` instance with the columns reversed.\n * @since 1.0.0\n */\nexport const reverseColumns: (m: Matrix3x3) => Matrix3x3 = internal.reverseColumns\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,MAAa,cAA8CA;AAE3D,MAAaC,WAoBTC;;;;;;;;;AAUJ,MAAaC,SACXC;;;;;;;;;AAUF,MAAaC,aAAoDC;;;;;;;;;AAUjE,MAAaC,gBAAuDC;AAEpE,MAAaC,WAoBTC;AAEJ,MAAaC,cAoBTC;;;;;;;;AASJ,MAAaC,gBAAwCC;AAErD,MAAaC,sBA4CTC;AAEJ,MAAaC,uBA4CTC;AAEJ,MAAaC,gBA4CTC;;;;;;;;AASJ,MAAaC,WAA+CC;;;;;;;;AAS5D,MAAaC,cAAkDC;;;;;;;;;AAU/D,MAAaC,cAAiEC;;;;;;;;;AAU9E,MAAaC,iBACXC;;;;;;;;AASF,MAAaC,cAAyCC;;;;;;;;AAStD,MAAaC,gBAA2CC;;;;;;;;AASxD,MAAaC,mBAA8CC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClS3D,MAAa,cAA8CC;AAE3D,MAAa,SAoBTC;;;;;;;;;;;;;;;;AAiBJ,MAAa,OAUIC;;;;;;;;;;AAWjB,MAAa,WAAiEC;;;;;;;;;;AAW9E,MAAa,cACXC;AAEF,MAAa,SAoBTC;AAEJ,MAAa,YAoBTC;;;;;;;;AASJ,MAAa,cAAwCC;;;;;;;;;;AAWrD,MAAa,QAIIC;AAEjB,MAAa,oBA8CTC;AAEJ,MAAa,qBA8CTC;AAEJ,MAAa,cAyCTC;;;;;;;;AASJ,MAAa,SAAwDC;;;;;;;;AAWrE,MAAa,YAA2DC;AAIxE,MAAa,YAkBTC;AAEJ,MAAa,eAkBTC;;;;;;;;AASJ,MAAa,YAAyCC;;;;;;;;AAStD,MAAa,cAA2CC;;;;;;;;AASxD,MAAa,iBAA8CC"}