deepbox 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +344 -0
- package/dist/CSRMatrix-CwGwQRea.d.cts +219 -0
- package/dist/CSRMatrix-KzNt6QpS.d.ts +219 -0
- package/dist/Tensor-BQLk1ltW.d.cts +147 -0
- package/dist/Tensor-g8mUClel.d.ts +147 -0
- package/dist/chunk-4S73VUBD.js +677 -0
- package/dist/chunk-4S73VUBD.js.map +1 -0
- package/dist/chunk-5R4S63PF.js +2925 -0
- package/dist/chunk-5R4S63PF.js.map +1 -0
- package/dist/chunk-6AE5FKKQ.cjs +9264 -0
- package/dist/chunk-6AE5FKKQ.cjs.map +1 -0
- package/dist/chunk-AD436M45.js +3854 -0
- package/dist/chunk-AD436M45.js.map +1 -0
- package/dist/chunk-ALS7ETWZ.cjs +4263 -0
- package/dist/chunk-ALS7ETWZ.cjs.map +1 -0
- package/dist/chunk-AU7XHGKJ.js +2092 -0
- package/dist/chunk-AU7XHGKJ.js.map +1 -0
- package/dist/chunk-B5TNKUEY.js +1481 -0
- package/dist/chunk-B5TNKUEY.js.map +1 -0
- package/dist/chunk-BCR7G3A6.js +9136 -0
- package/dist/chunk-BCR7G3A6.js.map +1 -0
- package/dist/chunk-C4PKXY74.cjs +1917 -0
- package/dist/chunk-C4PKXY74.cjs.map +1 -0
- package/dist/chunk-DWZY6PIP.cjs +6400 -0
- package/dist/chunk-DWZY6PIP.cjs.map +1 -0
- package/dist/chunk-E3EU5FZO.cjs +2113 -0
- package/dist/chunk-E3EU5FZO.cjs.map +1 -0
- package/dist/chunk-F3JWBINJ.js +1054 -0
- package/dist/chunk-F3JWBINJ.js.map +1 -0
- package/dist/chunk-FJYLIGJX.js +1940 -0
- package/dist/chunk-FJYLIGJX.js.map +1 -0
- package/dist/chunk-JSCDE774.cjs +729 -0
- package/dist/chunk-JSCDE774.cjs.map +1 -0
- package/dist/chunk-LWECRCW2.cjs +2412 -0
- package/dist/chunk-LWECRCW2.cjs.map +1 -0
- package/dist/chunk-MLBMYKCG.js +6379 -0
- package/dist/chunk-MLBMYKCG.js.map +1 -0
- package/dist/chunk-OX6QXFMV.cjs +3874 -0
- package/dist/chunk-OX6QXFMV.cjs.map +1 -0
- package/dist/chunk-PHV2DKRS.cjs +1072 -0
- package/dist/chunk-PHV2DKRS.cjs.map +1 -0
- package/dist/chunk-PL7TAYKI.js +4056 -0
- package/dist/chunk-PL7TAYKI.js.map +1 -0
- package/dist/chunk-PR647I7R.js +1898 -0
- package/dist/chunk-PR647I7R.js.map +1 -0
- package/dist/chunk-QERHVCHC.cjs +2960 -0
- package/dist/chunk-QERHVCHC.cjs.map +1 -0
- package/dist/chunk-XEG44RF6.cjs +1514 -0
- package/dist/chunk-XEG44RF6.cjs.map +1 -0
- package/dist/chunk-XMWVME2W.js +2377 -0
- package/dist/chunk-XMWVME2W.js.map +1 -0
- package/dist/chunk-ZB75FESB.cjs +1979 -0
- package/dist/chunk-ZB75FESB.cjs.map +1 -0
- package/dist/chunk-ZLW62TJG.cjs +4061 -0
- package/dist/chunk-ZLW62TJG.cjs.map +1 -0
- package/dist/chunk-ZXKBDFP3.js +4235 -0
- package/dist/chunk-ZXKBDFP3.js.map +1 -0
- package/dist/core/index.cjs +204 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +2 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/dataframe/index.cjs +22 -0
- package/dist/dataframe/index.cjs.map +1 -0
- package/dist/dataframe/index.d.cts +3 -0
- package/dist/dataframe/index.d.ts +3 -0
- package/dist/dataframe/index.js +5 -0
- package/dist/dataframe/index.js.map +1 -0
- package/dist/datasets/index.cjs +134 -0
- package/dist/datasets/index.cjs.map +1 -0
- package/dist/datasets/index.d.cts +3 -0
- package/dist/datasets/index.d.ts +3 -0
- package/dist/datasets/index.js +5 -0
- package/dist/datasets/index.js.map +1 -0
- package/dist/index-74AB8Cyh.d.cts +1126 -0
- package/dist/index-9oQx1HgV.d.cts +1180 -0
- package/dist/index-BJY2SI4i.d.ts +483 -0
- package/dist/index-BWGhrDlr.d.ts +733 -0
- package/dist/index-B_DK4FKY.d.cts +242 -0
- package/dist/index-BbA2Gxfl.d.ts +456 -0
- package/dist/index-BgHYAoSS.d.cts +837 -0
- package/dist/index-BndMbqsM.d.ts +1439 -0
- package/dist/index-C1mfVYoo.d.ts +2517 -0
- package/dist/index-CCvlwAmL.d.cts +809 -0
- package/dist/index-CDw5CnOU.d.ts +785 -0
- package/dist/index-Cn3SdB0O.d.ts +1126 -0
- package/dist/index-CrqLlS-a.d.ts +776 -0
- package/dist/index-D61yaSMY.d.cts +483 -0
- package/dist/index-D9Loo1_A.d.cts +2517 -0
- package/dist/index-DIT_OO9C.d.cts +785 -0
- package/dist/index-DIp_RrRt.d.ts +242 -0
- package/dist/index-DbultU6X.d.cts +1427 -0
- package/dist/index-DmEg_LCm.d.cts +776 -0
- package/dist/index-DoPWVxPo.d.cts +1439 -0
- package/dist/index-DuCxd-8d.d.ts +837 -0
- package/dist/index-Dx42TZaY.d.ts +809 -0
- package/dist/index-DyZ4QQf5.d.cts +456 -0
- package/dist/index-GFAVyOWO.d.ts +1427 -0
- package/dist/index-WHQLn0e8.d.cts +733 -0
- package/dist/index-ZtI1Iy4L.d.ts +1180 -0
- package/dist/index-eJgeni9c.d.cts +1911 -0
- package/dist/index-tk4lSYod.d.ts +1911 -0
- package/dist/index.cjs +72 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +17 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/linalg/index.cjs +86 -0
- package/dist/linalg/index.cjs.map +1 -0
- package/dist/linalg/index.d.cts +3 -0
- package/dist/linalg/index.d.ts +3 -0
- package/dist/linalg/index.js +5 -0
- package/dist/linalg/index.js.map +1 -0
- package/dist/metrics/index.cjs +158 -0
- package/dist/metrics/index.cjs.map +1 -0
- package/dist/metrics/index.d.cts +3 -0
- package/dist/metrics/index.d.ts +3 -0
- package/dist/metrics/index.js +5 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/ml/index.cjs +87 -0
- package/dist/ml/index.cjs.map +1 -0
- package/dist/ml/index.d.cts +3 -0
- package/dist/ml/index.d.ts +3 -0
- package/dist/ml/index.js +6 -0
- package/dist/ml/index.js.map +1 -0
- package/dist/ndarray/index.cjs +501 -0
- package/dist/ndarray/index.cjs.map +1 -0
- package/dist/ndarray/index.d.cts +5 -0
- package/dist/ndarray/index.d.ts +5 -0
- package/dist/ndarray/index.js +4 -0
- package/dist/ndarray/index.js.map +1 -0
- package/dist/nn/index.cjs +142 -0
- package/dist/nn/index.cjs.map +1 -0
- package/dist/nn/index.d.cts +6 -0
- package/dist/nn/index.d.ts +6 -0
- package/dist/nn/index.js +5 -0
- package/dist/nn/index.js.map +1 -0
- package/dist/optim/index.cjs +77 -0
- package/dist/optim/index.cjs.map +1 -0
- package/dist/optim/index.d.cts +4 -0
- package/dist/optim/index.d.ts +4 -0
- package/dist/optim/index.js +4 -0
- package/dist/optim/index.js.map +1 -0
- package/dist/plot/index.cjs +114 -0
- package/dist/plot/index.cjs.map +1 -0
- package/dist/plot/index.d.cts +6 -0
- package/dist/plot/index.d.ts +6 -0
- package/dist/plot/index.js +5 -0
- package/dist/plot/index.js.map +1 -0
- package/dist/preprocess/index.cjs +82 -0
- package/dist/preprocess/index.cjs.map +1 -0
- package/dist/preprocess/index.d.cts +4 -0
- package/dist/preprocess/index.d.ts +4 -0
- package/dist/preprocess/index.js +5 -0
- package/dist/preprocess/index.js.map +1 -0
- package/dist/random/index.cjs +74 -0
- package/dist/random/index.cjs.map +1 -0
- package/dist/random/index.d.cts +3 -0
- package/dist/random/index.d.ts +3 -0
- package/dist/random/index.js +5 -0
- package/dist/random/index.js.map +1 -0
- package/dist/stats/index.cjs +142 -0
- package/dist/stats/index.cjs.map +1 -0
- package/dist/stats/index.d.cts +3 -0
- package/dist/stats/index.d.ts +3 -0
- package/dist/stats/index.js +5 -0
- package/dist/stats/index.js.map +1 -0
- package/dist/tensor-B96jjJLQ.d.cts +205 -0
- package/dist/tensor-B96jjJLQ.d.ts +205 -0
- package/package.json +226 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/linalg/index.ts","../src/linalg/_internal.ts","../src/linalg/decomposition/cholesky.ts","../src/linalg/decomposition/svd.ts","../src/linalg/decomposition/eig.ts","../src/linalg/decomposition/lu.ts","../src/linalg/decomposition/qr.ts","../src/linalg/inverse.ts","../src/linalg/norms.ts","../src/linalg/properties.ts","../src/linalg/solvers/lstsq.ts","../src/linalg/solvers/solve.ts"],"names":["__export","DTypeError","ShapeError","DataValidationError","getConfig","Tensor","lu","IndexError","norm","inv","B","V","fillOrthonormalColumn","InvalidParameterError","ConvergenceError","DeepboxError","normalizeAxes","sum","normalizeAxis","i","tensor","isContiguous","A"],"mappings":"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","file":"chunk-E3EU5FZO.cjs","sourcesContent":["export {\n cholesky,\n type EigOptions,\n eig,\n eigh,\n eigvals,\n eigvalsh,\n lu,\n qr,\n svd,\n} from \"./decomposition/index\";\nexport { inv, pinv } from \"./inverse\";\nexport { cond, norm } from \"./norms\";\nexport { det, matrixRank, slogdet, trace } from \"./properties\";\nexport { lstsq, solve, solveTriangular } from \"./solvers/index\";\n","import { DataValidationError, DTypeError, getConfig, IndexError, ShapeError } from \"../core\";\nimport { Tensor } from \"../ndarray\";\n\n/**\n * Represents a 2D matrix view over a tensor's underlying data buffer.\n *\n * This structure provides efficient access to matrix elements without copying data.\n * It tracks strides to handle both contiguous and non-contiguous memory layouts.\n *\n * @property tensor - The underlying tensor object\n * @property rows - Number of rows (M)\n * @property cols - Number of columns (N)\n * @property offset - Starting position in the data buffer\n * @property strideRow - Number of elements to skip between consecutive rows\n * @property strideCol - Number of elements to skip between consecutive columns\n * @property isRowMajorContiguous - True if data is stored in contiguous row-major order\n *\n * @internal\n */\ntype Matrix2D = {\n readonly tensor: Tensor;\n readonly rows: number;\n readonly cols: number;\n readonly offset: number;\n readonly strideRow: number;\n readonly strideCol: number;\n readonly isRowMajorContiguous: boolean;\n};\n\n/**\n * Converts a 2D tensor into a Matrix2D view for efficient element access.\n *\n * **Time Complexity**: O(1) - only metadata extraction, no data copying\n *\n * @param t - Input tensor (must be 2D)\n * @returns Matrix2D view with stride information\n * @throws {ShapeError} If tensor is not 2D\n * @throws {DTypeError} If tensor has string dtype\n *\n * @internal\n */\nexport function asMatrix2D(t: Tensor): Matrix2D {\n // Reject string tensors first\n if (t.dtype === \"string\") {\n throw new DTypeError(\"String tensors are not supported\");\n }\n\n // Validate tensor dimensionality\n if (t.ndim !== 2) {\n throw new ShapeError(\"Expected a 2D tensor\");\n }\n\n // Extract shape dimensions\n const rows = t.shape[0];\n const cols = t.shape[1];\n if (rows === undefined || cols === undefined) {\n throw new ShapeError(\"Tensor shape metadata is inconsistent\");\n }\n\n // Extract stride information for memory layout\n const strideRow = t.strides[0];\n const strideCol = t.strides[1];\n if (strideRow === undefined || strideCol === undefined) {\n throw new ShapeError(\"Tensor stride metadata is inconsistent\");\n }\n\n // Check if data is contiguous in row-major (C-order) layout\n // Row-major: elements in same row are adjacent (strideCol=1), rows are cols apart\n const isRowMajorContiguous = strideCol === 1 && strideRow === cols;\n\n return {\n tensor: t,\n rows,\n cols,\n offset: t.offset,\n strideRow,\n strideCol,\n isRowMajorContiguous,\n };\n}\n\n/**\n * Converts a tensor to a dense Float64Array in row-major order.\n *\n * Handles both contiguous and strided memory layouts efficiently.\n *\n * **Time Complexity**:\n * - O(M*N) where M=rows, N=cols\n * - Optimized path for contiguous data: O(M*N) with better cache locality\n *\n * @param t - Input 2D tensor\n * @returns Object containing dimensions and dense data array\n *\n * @internal\n */\nexport function toDenseMatrix2D(t: Tensor): {\n readonly rows: number;\n readonly cols: number;\n readonly data: Float64Array;\n} {\n const m = asMatrix2D(t);\n const { rows, cols } = m;\n\n const out = new Float64Array(rows * cols);\n\n if (m.isRowMajorContiguous) {\n const start = m.offset;\n const end = start + rows * cols;\n for (let i = 0, j = start; j < end; i++, j++) {\n const val = Number(m.tensor.data[j]);\n if (!Number.isFinite(val)) {\n throw new DataValidationError(\"Input contains non-finite values\");\n }\n out[i] = val;\n }\n return { rows, cols, data: out };\n }\n\n for (let i = 0; i < rows; i++) {\n const base = m.offset + i * m.strideRow;\n for (let j = 0; j < cols; j++) {\n const val = Number(m.tensor.data[base + j * m.strideCol]);\n if (!Number.isFinite(val)) {\n throw new DataValidationError(\"Input contains non-finite values\");\n }\n out[i * cols + j] = val;\n }\n }\n\n return { rows, cols, data: out };\n}\n\n/**\n * Converts a 1D tensor to a dense Float64Array.\n *\n * **Time Complexity**: O(N) where N is the vector length\n *\n * @param t - Input 1D tensor\n * @returns Dense Float64Array copy of the data\n * @throws {ShapeError} If tensor is not 1D\n * @throws {DTypeError} If tensor has string dtype\n * @throws {DataValidationError} If tensor contains non-finite values\n *\n * @internal\n */\nexport function toDenseVector1D(t: Tensor): Float64Array {\n if (t.dtype === \"string\") {\n throw new DTypeError(\"String tensors are not supported\");\n }\n if (t.ndim !== 1) {\n throw new ShapeError(\"Expected a 1D tensor\");\n }\n const n = t.shape[0];\n if (n === undefined) {\n throw new ShapeError(\"Tensor shape metadata is inconsistent\");\n }\n const stride = t.strides[0];\n if (stride === undefined) {\n throw new ShapeError(\"Tensor stride metadata is inconsistent\");\n }\n\n const out = new Float64Array(n);\n const base = t.offset;\n\n for (let i = 0; i < n; i++) {\n const val = Number(t.data[base + i * stride]);\n if (!Number.isFinite(val)) {\n throw new DataValidationError(\"Input contains non-finite values\");\n }\n out[i] = val;\n }\n return out;\n}\n\n/**\n * Creates a 2D tensor from a dense Float64Array in row-major order.\n *\n * **Time Complexity**: O(1) - tensor wraps existing array without copying\n *\n * @param rows - Number of rows (M)\n * @param cols - Number of columns (N)\n * @param data - Dense Float64Array of length M*N in row-major order\n * @returns New tensor wrapping the data\n *\n * @internal\n */\nexport function fromDenseMatrix2D(rows: number, cols: number, data: Float64Array): Tensor {\n // Get global configuration for device placement\n const config = getConfig();\n // Create tensor from typed array (zero-copy operation)\n return Tensor.fromTypedArray({\n data,\n shape: [rows, cols],\n dtype: \"float64\",\n device: config.defaultDevice,\n });\n}\n\n/**\n * Creates a 1D tensor from a dense Float64Array.\n *\n * **Time Complexity**: O(1) - tensor wraps existing array without copying\n *\n * @param data - Dense Float64Array\n * @returns New 1D tensor wrapping the data\n *\n * @internal\n */\nexport function fromDenseVector1D(data: Float64Array): Tensor {\n // Get global configuration for device placement\n const config = getConfig();\n // Create tensor from typed array (zero-copy operation)\n return Tensor.fromTypedArray({\n data,\n shape: [data.length],\n dtype: \"float64\",\n device: config.defaultDevice,\n });\n}\n\n/**\n * Performs LU factorization with partial pivoting on a square matrix.\n *\n * Implements Gaussian elimination with row pivoting for numerical stability.\n * Factorizes A into P*A = L*U where:\n * - P is a permutation matrix (represented by piv array)\n * - L is lower triangular with unit diagonal (stored in lower triangle of lu)\n * - U is upper triangular (stored in upper triangle of lu)\n *\n * **Algorithm**: Gaussian elimination with partial pivoting\n * **Time Complexity**: O(N³) where N is matrix dimension\n * **Space Complexity**: O(N²) for lu array + O(N) for pivot array\n *\n * @param a - Input square matrix as Float64Array in row-major order (N×N)\n * @param n - Matrix dimension (N)\n * @returns Object containing:\n * - lu: Combined L and U matrices (L below diagonal, U on and above)\n * - piv: Permutation vector (piv[i] = original row index of current row i)\n * - pivSign: Sign of permutation (+1 or -1, used for determinant)\n * @throws {DataValidationError} If matrix is singular or contains non-finite values\n *\n * @internal\n */\nexport function luFactorSquare(\n a: Float64Array,\n n: number\n): {\n readonly lu: Float64Array;\n readonly piv: Int32Array;\n readonly pivSign: number;\n} {\n // Create working copy of input matrix\n const lu = new Float64Array(a);\n // Initialize permutation vector to identity\n const piv = new Int32Array(n);\n for (let i = 0; i < n; i++) piv[i] = i;\n\n // Track sign of permutation for determinant calculation\n let pivSign = 1;\n\n // Main elimination loop over columns\n for (let k = 0; k < n; k++) {\n // Find pivot: row with largest absolute value in column k\n let maxRow = k;\n let maxVal = Math.abs(at(lu, k * n + k));\n for (let i = k + 1; i < n; i++) {\n const v = Math.abs(at(lu, i * n + k));\n if (v > maxVal) {\n maxVal = v;\n maxRow = i;\n }\n }\n\n // Check for singularity or numerical issues\n if (!Number.isFinite(maxVal) || maxVal === 0) {\n throw new DataValidationError(\"Matrix is singular\");\n }\n\n // Perform row swap if needed (partial pivoting)\n if (maxRow !== k) {\n // Swap rows k and maxRow in lu matrix\n for (let j = 0; j < n; j++) {\n const tmp = at(lu, k * n + j);\n lu[k * n + j] = at(lu, maxRow * n + j);\n lu[maxRow * n + j] = tmp;\n }\n // Update permutation vector\n const tp = atInt(piv, k);\n piv[k] = atInt(piv, maxRow);\n piv[maxRow] = tp;\n // Flip sign for determinant\n pivSign = -pivSign;\n }\n\n // Perform elimination for rows below pivot\n const pivot = at(lu, k * n + k);\n for (let i = k + 1; i < n; i++) {\n // Compute multiplier (stored in L part)\n lu[i * n + k] = at(lu, i * n + k) / pivot;\n const lik = at(lu, i * n + k);\n // Update row i: row_i = row_i - lik * row_k\n for (let j = k + 1; j < n; j++) {\n lu[i * n + j] = at(lu, i * n + j) - lik * at(lu, k * n + j);\n }\n }\n }\n\n return { lu, piv, pivSign };\n}\n\n/**\n * Solves linear system(s) A*X = B using precomputed LU factorization.\n *\n * Performs forward substitution (L*Y = P*B) followed by backward substitution (U*X = Y).\n * Modifies b in-place to contain the solution.\n *\n * **Algorithm**: Forward and backward substitution\n * **Time Complexity**: O(N² * K) where N is matrix size, K is number of RHS\n * **Space Complexity**: O(N * K) for temporary permutation copy\n *\n * @param lu - Combined LU matrix from luFactorSquare (N×N)\n * @param piv - Permutation vector from luFactorSquare\n * @param n - Matrix dimension (N)\n * @param b - Right-hand side matrix (N×K), modified in-place to contain solution\n * @param nrhs - Number of right-hand sides (K)\n * @throws {DataValidationError} If matrix is singular (zero diagonal in U)\n *\n * @internal\n */\nexport function luSolveInPlace(\n lu: Float64Array,\n piv: Int32Array,\n n: number,\n b: Float64Array,\n nrhs: number\n): void {\n // Step 1: Apply row permutation to RHS\n // Note: piv is a final permutation vector (not swap history)\n // Must use copy to avoid overwriting values needed later\n const b0 = new Float64Array(b);\n for (let i = 0; i < n; i++) {\n const pi = atInt(piv, i);\n for (let j = 0; j < nrhs; j++) {\n b[i * nrhs + j] = at(b0, pi * nrhs + j);\n }\n }\n\n // Step 2: Forward substitution - solve L*Y = P*B\n // L has unit diagonal (implicit 1s), so no division needed\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < nrhs; j++) {\n let sum = at(b, i * nrhs + j);\n // Subtract contributions from already-solved variables\n for (let k = 0; k < i; k++) {\n sum -= at(lu, i * n + k) * at(b, k * nrhs + j);\n }\n b[i * nrhs + j] = sum;\n }\n }\n\n // Step 3: Backward substitution - solve U*X = Y\n // U has explicit diagonal, must divide by it\n for (let i = n - 1; i >= 0; i--) {\n const diag = at(lu, i * n + i);\n // Check for singularity\n if (diag === 0) throw new DataValidationError(\"Matrix is singular\");\n for (let j = 0; j < nrhs; j++) {\n let sum = at(b, i * nrhs + j);\n // Subtract contributions from already-solved variables\n for (let k = i + 1; k < n; k++) {\n sum -= at(lu, i * n + k) * at(b, k * nrhs + j);\n }\n // Divide by diagonal element\n b[i * nrhs + j] = sum / diag;\n }\n }\n}\n\n/**\n * Type-safe array element access for Float64Array.\n * Returns the element at index i, with TypeScript knowing it's always a number.\n * This eliminates the need for `?? 0` fallbacks in tight loops.\n *\n * **IMPORTANT**: Caller must ensure index is within bounds.\n * This function does NOT perform bounds checking for performance.\n *\n * @param arr - The Float64Array to access\n * @param i - Index to access (must be valid)\n * @returns The element at index i\n *\n * @internal\n */\nexport function at(arr: Float64Array, i: number): number {\n const value = arr[i];\n if (value === undefined) {\n throw new IndexError(`Index ${i} is out of bounds for Float64Array length ${arr.length}`, {\n index: i,\n validRange: [0, Math.max(0, arr.length - 1)],\n });\n }\n return value;\n}\n\n/**\n * Type-safe array element access for number arrays.\n * Returns the element at index i, with TypeScript knowing it's always a number.\n *\n * **IMPORTANT**: Caller must ensure index is within bounds.\n *\n * @param arr - The number array to access\n * @param i - Index to access (must be valid)\n * @returns The element at index i\n *\n * @internal\n */\nexport function atArr(arr: number[], i: number): number {\n const value = arr[i];\n if (value === undefined) {\n throw new IndexError(`Index ${i} is out of bounds for array length ${arr.length}`, {\n index: i,\n validRange: [0, Math.max(0, arr.length - 1)],\n });\n }\n return value;\n}\n\n/**\n * Type-safe element access for Int32Array with explicit bounds checks.\n *\n * @internal\n */\nexport function atInt(arr: Int32Array, i: number): number {\n const value = arr[i];\n if (value === undefined) {\n throw new IndexError(`Index ${i} is out of bounds for Int32Array length ${arr.length}`, {\n index: i,\n validRange: [0, Math.max(0, arr.length - 1)],\n });\n }\n return value;\n}\n\n/**\n * Retrieves a tensor dimension with bounds checking.\n *\n * @param t - Input tensor\n * @param axis - Axis index (must be valid)\n * @param context - Context string for error messages\n * @returns Dimension size\n *\n * @internal\n */\nexport function getDim(t: Tensor, axis: number, context: string): number {\n const dim = t.shape[axis];\n if (dim === undefined) {\n throw new ShapeError(`${context}: missing dimension for axis ${axis}`);\n }\n return dim;\n}\n\n/**\n * Retrieves a tensor stride with bounds checking.\n *\n * @param t - Input tensor\n * @param axis - Axis index (must be valid)\n * @param context - Context string for error messages\n * @returns Stride value\n *\n * @internal\n */\nexport function getStride(t: Tensor, axis: number, context: string): number {\n const stride = t.strides[axis];\n if (stride === undefined) {\n throw new ShapeError(`${context}: missing stride for axis ${axis}`);\n }\n return stride;\n}\n\n/**\n * Validates that a tensor contains only finite numeric values.\n * Iterates using shape/strides, so views are checked correctly.\n *\n * @param t - Input tensor\n * @param context - Context string for error messages\n *\n * @internal\n */\nexport function assertFiniteTensor(t: Tensor, context: string): void {\n if (t.dtype === \"string\") {\n throw new DTypeError(`${context} does not support string dtype`);\n }\n\n if (t.size === 0) return;\n\n const ndim = t.ndim;\n if (ndim === 0) {\n const val = Number(t.data[t.offset]);\n if (!Number.isFinite(val)) {\n throw new DataValidationError(`${context} contains non-finite values`);\n }\n return;\n }\n\n const shape = t.shape;\n const strides = t.strides;\n const data = t.data;\n\n // Fast path: contiguous zero-offset numeric tensor — direct array scan\n if (!Array.isArray(data) && !(data instanceof BigInt64Array) && t.offset === 0) {\n // Check if contiguous by comparing strides\n let contiguous = true;\n let expected = 1;\n for (let i = ndim - 1; i >= 0; i--) {\n if (strides[i] !== expected) {\n contiguous = false;\n break;\n }\n expected *= shape[i] ?? 1;\n }\n if (contiguous) {\n for (let i = 0; i < t.size; i++) {\n const val = data[i] as number;\n if (!Number.isFinite(val)) {\n throw new DataValidationError(`${context} contains non-finite values`);\n }\n }\n return;\n }\n }\n\n const idx = new Array<number>(ndim).fill(0);\n let offset = t.offset;\n\n for (let count = 0; count < t.size; count++) {\n const val = Number(data[offset]);\n if (!Number.isFinite(val)) {\n throw new DataValidationError(`${context} contains non-finite values`);\n }\n\n for (let d = ndim - 1; d >= 0; d--) {\n const dim = shape[d];\n const stride = strides[d];\n if (dim === undefined || stride === undefined) {\n throw new ShapeError(`${context}: tensor metadata is inconsistent`);\n }\n const idxVal = idx[d] ?? 0;\n const nextIdx = idxVal + 1;\n idx[d] = nextIdx;\n offset += stride;\n if (nextIdx < dim) {\n break;\n }\n offset -= nextIdx * stride;\n idx[d] = 0;\n }\n }\n}\n","import { DataValidationError, ShapeError } from \"../../core\";\nimport type { Tensor } from \"../../ndarray\";\nimport { at, fromDenseMatrix2D, getDim, toDenseMatrix2D } from \"../_internal\";\n\n/**\n * Cholesky decomposition.\n *\n * Factorizes symmetric positive definite matrix A into L * L^T where L is lower triangular.\n *\n * **Algorithm**: Cholesky-Banachiewicz algorithm\n * **Time Complexity**: O(N³/3) - approximately half the cost of LU decomposition\n * **Space Complexity**: O(N²) for output matrix\n *\n * **Mathematical Background**:\n * For a symmetric positive definite matrix A, the Cholesky decomposition is:\n * A = L * L^T\n * where L is lower triangular with positive diagonal elements.\n *\n * **Numerical Stability**:\n * - Only works for positive definite matrices (all eigenvalues > 0)\n * - More stable than LU for this class of matrices\n * - No pivoting required due to positive definiteness\n *\n * **Parameters**:\n * @param a - Symmetric positive definite matrix of shape (N, N)\n *\n * **Returns**: L - Lower triangular matrix where A = L * L^T\n *\n * **Requirements**:\n * - Input must be 2D square matrix\n * - Matrix must be symmetric: A = A^T\n * - Matrix must be positive definite: x^T * A * x > 0 for all x ≠ 0\n *\n * **Properties**:\n * - A = L @ L^T\n * - L is lower triangular (L[i,j] = 0 for j > i)\n * - L has positive diagonal elements\n * - Much faster than LU decomposition for positive definite matrices\n * - Determinant: det(A) = (product of L[i,i])²\n *\n * @example\n * ```ts\n * import { cholesky } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * // Positive definite matrix\n * const A = tensor([[4, 12, -16], [12, 37, -43], [-16, -43, 98]]);\n * const L = cholesky(A);\n *\n * // Verify: A ≈ L @ L^T\n * ```\n *\n * @throws {ShapeError} If input is not 2D square matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If matrix is not symmetric\n * @throws {DataValidationError} If matrix is not positive definite\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/Cholesky_decomposition | Wikipedia: Cholesky decomposition}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 4.2.1\n */\nexport function cholesky(a: Tensor): Tensor {\n // Validate input dimensions\n if (a.ndim !== 2) {\n throw new ShapeError(\"Input must be a 2D matrix\");\n }\n const rows = getDim(a, 0, \"cholesky()\");\n const cols = getDim(a, 1, \"cholesky()\");\n if (rows !== cols) {\n throw new ShapeError(\"cholesky requires a square matrix\");\n }\n\n const n = rows;\n\n // Handle empty matrix edge case\n if (n === 0) {\n return fromDenseMatrix2D(0, 0, new Float64Array(0));\n }\n\n // Convert input to dense Float64Array for efficient access\n // Note: toDenseMatrix2D already validates non-finite values\n const { data: A } = toDenseMatrix2D(a);\n\n // Validate symmetry (using tolerance for floating-point comparison)\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const aij = at(A, i * n + j);\n const aji = at(A, j * n + i);\n if (Math.abs(aij - aji) > 1e-10) {\n throw new DataValidationError(\"Matrix must be symmetric\");\n }\n }\n }\n\n // Allocate output matrix L (initialized to zeros)\n const L = new Float64Array(n * n);\n\n // Cholesky-Banachiewicz algorithm\n // Computes L row by row from top to bottom\n for (let i = 0; i < n; i++) {\n // Process elements in row i up to and including diagonal\n for (let j = 0; j <= i; j++) {\n let sum = 0;\n\n if (j === i) {\n // Diagonal element: L[i,i] = sqrt(A[i,i] - sum(L[i,k]² for k < i))\n // Sum of squares of elements in row i before diagonal\n for (let k = 0; k < j; k++) {\n const Lik = at(L, i * n + k);\n sum += Lik * Lik;\n }\n // Compute diagonal element\n const val = at(A, i * n + i) - sum;\n // Check positive definiteness\n if (val <= 0) {\n throw new DataValidationError(\"Matrix is not positive definite\");\n }\n // Store square root of diagonal element\n L[i * n + i] = Math.sqrt(val);\n } else {\n // Off-diagonal element: L[i,j] = (A[i,j] - sum(L[i,k]*L[j,k] for k < j)) / L[j,j]\n // Dot product of partial rows i and j\n for (let k = 0; k < j; k++) {\n sum += at(L, i * n + k) * at(L, j * n + k);\n }\n // Compute off-diagonal element\n const Ljj = at(L, j * n + j);\n // Ljj should never be 0 here since we check positive definiteness on diagonal\n // If it is 0, the matrix is not positive definite (caught earlier)\n L[i * n + j] = (at(A, i * n + j) - sum) / Ljj;\n }\n }\n }\n\n // Convert result back to tensor\n return fromDenseMatrix2D(n, n, L);\n}\n","import { ShapeError } from \"../../core\";\nimport type { Tensor } from \"../../ndarray\";\nimport { at, fromDenseMatrix2D, fromDenseVector1D, getDim, toDenseMatrix2D } from \"../_internal\";\n\nfunction identityMatrix(n: number): Float64Array {\n const out = new Float64Array(n * n);\n for (let i = 0; i < n; i++) out[i * n + i] = 1;\n return out;\n}\n\nfunction fillOrthonormalColumn(\n mat: Float64Array,\n rows: number,\n cols: number,\n col: number\n): boolean {\n for (let basis = 0; basis < rows; basis++) {\n const vec = new Float64Array(rows);\n vec[basis] = 1;\n for (let j = 0; j < col; j++) {\n let dot = 0;\n for (let i = 0; i < rows; i++) {\n dot += at(mat, i * cols + j) * at(vec, i);\n }\n for (let i = 0; i < rows; i++) {\n vec[i] = at(vec, i) - dot * at(mat, i * cols + j);\n }\n }\n let norm = 0;\n for (let i = 0; i < rows; i++) {\n const v = at(vec, i);\n norm += v * v;\n }\n norm = Math.sqrt(norm);\n if (norm > 1e-12) {\n const inv = 1 / norm;\n for (let i = 0; i < rows; i++) {\n mat[i * cols + col] = at(vec, i) * inv;\n }\n return true;\n }\n }\n return false;\n}\n\nfunction completeOrthonormalColumns(\n mat: Float64Array,\n rows: number,\n cols: number,\n startCol: number\n): void {\n for (let col = startCol; col < cols; col++) {\n fillOrthonormalColumn(mat, rows, cols, col);\n }\n}\n\nfunction jacobiSVDCols(\n a: Float64Array,\n m: number,\n n: number,\n maxSweeps = 100,\n tol = 1e-12\n): { readonly B: Float64Array; readonly V: Float64Array } {\n const B = new Float64Array(a);\n const V = identityMatrix(n);\n\n if (m === 0 || n === 0) return { B, V };\n\n for (let sweep = 0; sweep < maxSweeps; sweep++) {\n let maxCorr = 0;\n\n for (let p = 0; p < n - 1; p++) {\n for (let q = p + 1; q < n; q++) {\n let alpha = 0;\n let beta = 0;\n let gamma = 0;\n\n for (let i = 0; i < m; i++) {\n const ip = at(B, i * n + p);\n const iq = at(B, i * n + q);\n alpha += ip * ip;\n beta += iq * iq;\n gamma += ip * iq;\n }\n\n if (alpha === 0 || beta === 0) continue;\n const denom = Math.sqrt(alpha * beta);\n if (denom === 0) continue;\n\n const corr = Math.abs(gamma) / denom;\n if (corr > maxCorr) maxCorr = corr;\n if (corr <= tol) continue;\n\n const tau = (beta - alpha) / (2 * gamma);\n const sign = tau >= 0 ? 1 : -1;\n const t = sign / (Math.abs(tau) + Math.sqrt(1 + tau * tau));\n const c = 1 / Math.sqrt(1 + t * t);\n const s = c * t;\n\n for (let i = 0; i < m; i++) {\n const ip = at(B, i * n + p);\n const iq = at(B, i * n + q);\n B[i * n + p] = c * ip - s * iq;\n B[i * n + q] = s * ip + c * iq;\n }\n\n for (let i = 0; i < n; i++) {\n const vip = at(V, i * n + p);\n const viq = at(V, i * n + q);\n V[i * n + p] = c * vip - s * viq;\n V[i * n + q] = s * vip + c * viq;\n }\n }\n }\n\n if (maxCorr <= tol) break;\n }\n\n return { B, V };\n}\n\nfunction emptySvd(m: number, n: number, fullMatrices: boolean): [Tensor, Tensor, Tensor] {\n const k = Math.min(m, n);\n const s = new Float64Array(0);\n if (!fullMatrices) {\n return [\n fromDenseMatrix2D(m, k, new Float64Array(m * k)),\n fromDenseVector1D(s),\n fromDenseMatrix2D(k, n, new Float64Array(k * n)),\n ];\n }\n const Ufull = identityMatrix(m);\n const VtFull = identityMatrix(n);\n return [fromDenseMatrix2D(m, m, Ufull), fromDenseVector1D(s), fromDenseMatrix2D(n, n, VtFull)];\n}\n\nfunction buildSvdFromJacobi(\n B: Float64Array,\n V: Float64Array,\n m: number,\n n: number,\n fullMatrices: boolean\n): [Tensor, Tensor, Tensor] {\n const k = Math.min(m, n);\n const norms = new Float64Array(n);\n let maxSigma = 0;\n\n for (let j = 0; j < n; j++) {\n let sum = 0;\n for (let i = 0; i < m; i++) {\n const v = at(B, i * n + j);\n sum += v * v;\n }\n const sigma = Math.sqrt(sum);\n norms[j] = sigma;\n if (sigma > maxSigma) maxSigma = sigma;\n }\n\n const idx = new Array<number>(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n idx.sort((i, j) => at(norms, j) - at(norms, i));\n\n const sigmaTol = Number.EPSILON * Math.max(m, n) * (maxSigma || 1);\n\n const s = new Float64Array(k);\n const U = new Float64Array(m * k);\n const filled = new Array<boolean>(k).fill(false);\n\n for (let j = 0; j < k; j++) {\n const col = idx[j] ?? 0;\n const sigma = norms[col] ?? 0;\n s[j] = sigma;\n if (sigma > sigmaTol) {\n const inv = 1 / sigma;\n for (let i = 0; i < m; i++) {\n U[i * k + j] = at(B, i * n + col) * inv;\n }\n filled[j] = true;\n }\n }\n\n for (let j = 0; j < k; j++) {\n if (!filled[j]) {\n fillOrthonormalColumn(U, m, k, j);\n }\n }\n\n const Vsorted = new Float64Array(n * n);\n for (let j = 0; j < n; j++) {\n const col = idx[j] ?? 0;\n for (let i = 0; i < n; i++) {\n Vsorted[i * n + j] = at(V, i * n + col);\n }\n }\n\n if (!fullMatrices) {\n const Vt = new Float64Array(k * n);\n for (let i = 0; i < k; i++) {\n for (let j = 0; j < n; j++) {\n Vt[i * n + j] = at(Vsorted, j * n + i);\n }\n }\n return [fromDenseMatrix2D(m, k, U), fromDenseVector1D(s), fromDenseMatrix2D(k, n, Vt)];\n }\n\n let Ufull = U;\n if (m !== k) {\n Ufull = new Float64Array(m * m);\n for (let j = 0; j < k; j++) {\n for (let i = 0; i < m; i++) {\n Ufull[i * m + j] = at(U, i * k + j);\n }\n }\n completeOrthonormalColumns(Ufull, m, m, k);\n }\n\n const VtFull = new Float64Array(n * n);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n VtFull[i * n + j] = at(Vsorted, j * n + i);\n }\n }\n\n return [fromDenseMatrix2D(m, m, Ufull), fromDenseVector1D(s), fromDenseMatrix2D(n, n, VtFull)];\n}\n\nfunction buildSvdFromJacobiTransposed(\n B: Float64Array,\n V: Float64Array,\n m: number,\n n: number,\n fullMatrices: boolean\n): [Tensor, Tensor, Tensor] {\n const k = Math.min(m, n);\n const norms = new Float64Array(k);\n let maxSigma = 0;\n\n for (let j = 0; j < k; j++) {\n let sum = 0;\n for (let i = 0; i < n; i++) {\n const v = at(B, i * k + j);\n sum += v * v;\n }\n const sigma = Math.sqrt(sum);\n norms[j] = sigma;\n if (sigma > maxSigma) maxSigma = sigma;\n }\n\n const idx = new Array<number>(k);\n for (let i = 0; i < k; i++) idx[i] = i;\n idx.sort((i, j) => at(norms, j) - at(norms, i));\n\n const sigmaTol = Number.EPSILON * Math.max(m, n) * (maxSigma || 1);\n\n const s = new Float64Array(k);\n const U = new Float64Array(m * k);\n const Vcols = new Float64Array(n * k);\n const filledV = new Array<boolean>(k).fill(false);\n\n for (let j = 0; j < k; j++) {\n const col = idx[j] ?? 0;\n const sigma = norms[col] ?? 0;\n s[j] = sigma;\n\n for (let i = 0; i < m; i++) {\n U[i * k + j] = at(V, i * k + col);\n }\n\n if (sigma > sigmaTol) {\n const inv = 1 / sigma;\n for (let i = 0; i < n; i++) {\n Vcols[i * k + j] = at(B, i * k + col) * inv;\n }\n filledV[j] = true;\n }\n }\n\n for (let j = 0; j < k; j++) {\n if (!filledV[j]) {\n fillOrthonormalColumn(Vcols, n, k, j);\n }\n }\n\n if (!fullMatrices) {\n const Vt = new Float64Array(k * n);\n for (let i = 0; i < k; i++) {\n for (let j = 0; j < n; j++) {\n Vt[i * n + j] = at(Vcols, j * k + i);\n }\n }\n return [fromDenseMatrix2D(m, k, U), fromDenseVector1D(s), fromDenseMatrix2D(k, n, Vt)];\n }\n\n let Vfull = Vcols;\n if (n !== k) {\n Vfull = new Float64Array(n * n);\n for (let j = 0; j < k; j++) {\n for (let i = 0; i < n; i++) {\n Vfull[i * n + j] = at(Vcols, i * k + j);\n }\n }\n completeOrthonormalColumns(Vfull, n, n, k);\n }\n\n const VtFull = new Float64Array(n * n);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n VtFull[i * n + j] = at(Vfull, j * n + i);\n }\n }\n\n return [fromDenseMatrix2D(m, m, U), fromDenseVector1D(s), fromDenseMatrix2D(n, n, VtFull)];\n}\n\n/**\n * Singular Value Decomposition.\n *\n * Factorizes matrix A into three matrices: A = U * Σ * V^T\n *\n * **Algorithm**: One-sided Jacobi (Hestenes) SVD\n *\n * **Numerical Stability**: Uses orthogonal rotations on A's columns to\n * directly compute singular values and right singular vectors without forming\n * A^T A. This is substantially more stable for ill-conditioned matrices than\n * the normal-equations approach.\n *\n * **Implementation Details**:\n * 1. Apply cyclic Jacobi rotations to orthogonalize columns of A\n * 2. Column norms converge to singular values\n * 3. Right singular vectors are accumulated as the product of rotations\n * 4. Left singular vectors are normalized columns of the rotated matrix\n *\n * **Parameters**:\n * @param a - Input matrix of shape (M, N)\n * @param fullMatrices - If true, U has shape (M, M) and V has shape (N, N).\n * If false, U has shape (M, K) and V has shape (N, K) where K = min(M, N)\n *\n * **Returns**: [U, s, Vt]\n * - U: Left singular vectors of shape (M, M) or (M, K)\n * - s: Singular values of shape (K,) in descending order\n * - Vt: Right singular vectors transposed of shape (N, N) or (K, N)\n *\n * **Requirements**:\n * - Input must be 2D matrix\n * - Works with any M x N matrix\n *\n * **Properties**:\n * - A = U @ diag(s) @ Vt\n * - U and V are orthogonal matrices\n * - Singular values are non-negative and sorted in descending order\n *\n * @example\n * ```ts\n * import { svd } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [3, 4], [5, 6]]);\n * const [U, s, Vt] = svd(A);\n *\n * console.log(U.shape); // [3, 3] if fullMatrices=true, [3, 2] if false\n * console.log(s.shape); // [2]\n * console.log(Vt.shape); // [2, 2] if fullMatrices=true, [2, 2] if false\n *\n * // Reconstruction: A ≈ U @ diag(s) @ Vt\n * ```\n *\n * @throws {ShapeError} If input is not 2D\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/Singular_value_decomposition | Wikipedia: SVD}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 8.6.2\n */\nexport function svd(a: Tensor, fullMatrices: boolean = true): [Tensor, Tensor, Tensor] {\n if (a.ndim !== 2) throw new ShapeError(\"Input must be 2D matrix\");\n\n const m = getDim(a, 0, \"svd()\");\n const n = getDim(a, 1, \"svd()\");\n\n if (m === 0 || n === 0) {\n return emptySvd(m, n, fullMatrices);\n }\n\n const { data: A } = toDenseMatrix2D(a);\n const maxSweeps = 100;\n const tol = 1e-12;\n\n if (m >= n) {\n const { B, V } = jacobiSVDCols(A, m, n, maxSweeps, tol);\n return buildSvdFromJacobi(B, V, m, n, fullMatrices);\n }\n\n // For wide matrices, compute SVD of A^T and swap roles of U and V.\n const At = new Float64Array(n * m);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < n; j++) {\n At[j * m + i] = at(A, i * n + j);\n }\n }\n\n const { B, V } = jacobiSVDCols(At, n, m, maxSweeps, tol);\n return buildSvdFromJacobiTransposed(B, V, m, n, fullMatrices);\n}\n","import {\n ConvergenceError,\n DataValidationError,\n InvalidParameterError,\n ShapeError,\n} from \"../../core\";\nimport type { Tensor } from \"../../ndarray\";\nimport {\n at,\n atArr,\n fromDenseMatrix2D,\n fromDenseVector1D,\n toDenseMatrix2D,\n toDenseVector1D,\n} from \"../_internal\";\nimport { svd } from \"./svd\";\n\nfunction getSquareMatrixSize(a: Tensor, context: string): number {\n if (a.ndim !== 2) {\n throw new ShapeError(`${context}: input must be 2D matrix`);\n }\n const rows = a.shape[0];\n const cols = a.shape[1];\n if (rows === undefined || cols === undefined || rows !== cols) {\n throw new ShapeError(`${context}: input must be square matrix`);\n }\n return rows;\n}\n\nfunction jacobiEigenSymmetric(\n a: Float64Array,\n n: number,\n maxSweeps = 100,\n tol = 1e-12\n): { readonly values: Float64Array; readonly vectors: Float64Array } {\n const A = new Float64Array(a);\n const V = new Float64Array(n * n);\n for (let i = 0; i < n; i++) V[i * n + i] = 1;\n\n for (let sweep = 0; sweep < maxSweeps; sweep++) {\n let p = 0;\n let q = 1;\n let max = 0;\n\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const v = Math.abs(at(A, i * n + j));\n if (v > max) {\n max = v;\n p = i;\n q = j;\n }\n }\n }\n\n if (max < tol) break;\n\n const app = at(A, p * n + p);\n const aqq = at(A, q * n + q);\n const apq = at(A, p * n + q);\n if (apq === 0) continue;\n\n const tau = (aqq - app) / (2 * apq);\n const sign = tau >= 0 ? 1 : -1;\n const t = sign / (Math.abs(tau) + Math.sqrt(1 + tau * tau));\n const c = 1 / Math.sqrt(1 + t * t);\n const s = t * c;\n\n for (let k = 0; k < n; k++) {\n if (k === p || k === q) continue;\n const aik = at(A, k * n + p);\n const akq = at(A, k * n + q);\n const newAik = c * aik - s * akq;\n const newAkq = s * aik + c * akq;\n A[k * n + p] = newAik;\n A[p * n + k] = newAik;\n A[k * n + q] = newAkq;\n A[q * n + k] = newAkq;\n }\n\n const newApp = c * c * app - 2 * s * c * apq + s * s * aqq;\n const newAqq = s * s * app + 2 * s * c * apq + c * c * aqq;\n\n A[p * n + p] = newApp;\n A[q * n + q] = newAqq;\n A[p * n + q] = 0;\n A[q * n + p] = 0;\n\n for (let k = 0; k < n; k++) {\n const vkp = at(V, k * n + p);\n const vkq = at(V, k * n + q);\n V[k * n + p] = c * vkp - s * vkq;\n V[k * n + q] = s * vkp + c * vkq;\n }\n }\n\n const values = new Float64Array(n);\n for (let i = 0; i < n; i++) values[i] = at(A, i * n + i);\n return { values, vectors: V };\n}\n\nfunction matmulSquare(a: Float64Array, b: Float64Array, n: number): Float64Array {\n const out = new Float64Array(n * n);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < n; j++) {\n let sum = 0;\n for (let k = 0; k < n; k++) {\n sum += at(a, i * n + k) * at(b, k * n + j);\n }\n out[i * n + j] = sum;\n }\n }\n return out;\n}\n\nfunction qrFactorSquare(\n a: Float64Array,\n n: number\n): { readonly Q: Float64Array; readonly R: Float64Array } {\n // Modified Gram-Schmidt is sufficient here for QR iteration on small n.\n const Q = new Float64Array(n * n);\n const R = new Float64Array(n * n);\n\n const v = new Float64Array(n * n);\n v.set(a);\n\n const fillOrthonormalColumn = (col: number): void => {\n for (let basis = 0; basis < n; basis++) {\n const vec = new Float64Array(n);\n vec[basis] = 1;\n for (let j = 0; j < col; j++) {\n let dot = 0;\n for (let k = 0; k < n; k++) {\n dot += at(Q, k * n + j) * at(vec, k);\n }\n for (let k = 0; k < n; k++) {\n vec[k] = at(vec, k) - dot * at(Q, k * n + j);\n }\n }\n let norm = 0;\n for (let k = 0; k < n; k++) {\n const val = at(vec, k);\n norm += val * val;\n }\n norm = Math.sqrt(norm);\n if (norm > 1e-12) {\n const inv = 1 / norm;\n for (let k = 0; k < n; k++) {\n Q[k * n + col] = at(vec, k) * inv;\n }\n return;\n }\n }\n };\n\n for (let j = 0; j < n; j++) {\n for (let i = 0; i < j; i++) {\n let dot = 0;\n for (let k = 0; k < n; k++) {\n dot += at(Q, k * n + i) * at(v, k * n + j);\n }\n R[i * n + j] = dot;\n for (let k = 0; k < n; k++) {\n v[k * n + j] = at(v, k * n + j) - dot * at(Q, k * n + i);\n }\n }\n\n let norm = 0;\n for (let k = 0; k < n; k++) {\n const x = at(v, k * n + j);\n norm += x * x;\n }\n norm = Math.sqrt(norm);\n R[j * n + j] = norm;\n if (norm > 1e-12) {\n const inv = 1 / norm;\n for (let k = 0; k < n; k++) {\n Q[k * n + j] = at(v, k * n + j) * inv;\n }\n } else {\n fillOrthonormalColumn(j);\n }\n }\n\n return { Q, R };\n}\n\n/**\n * Reduce matrix to upper Hessenberg form using Householder reflections.\n * Returns H and Q such that A = Q * H * Q^T where H is upper Hessenberg.\n *\n * Upper Hessenberg form has zeros below the first subdiagonal, which\n * significantly speeds up QR iteration convergence.\n *\n * @internal\n */\nfunction hessenbergReduce(\n a: Float64Array,\n n: number\n): { readonly H: Float64Array; readonly Q: Float64Array } {\n const H = new Float64Array(a);\n const Q = new Float64Array(n * n);\n for (let i = 0; i < n; i++) Q[i * n + i] = 1;\n\n const v = new Float64Array(n);\n\n for (let col = 0; col < n - 2; col++) {\n // Extract column col below diagonal\n let norm = 0;\n for (let i = col + 1; i < n; i++) {\n const val = at(H, i * n + col);\n v[i] = val;\n norm += val * val;\n }\n norm = Math.sqrt(norm);\n\n if (norm < 1e-14) continue;\n\n // Choose sign to avoid cancellation\n const vkp1 = at(v, col + 1);\n const sign = vkp1 >= 0 ? 1 : -1;\n v[col + 1] = vkp1 + sign * norm;\n\n // Normalize v\n let vnorm = 0;\n for (let i = col + 1; i < n; i++) {\n const val = at(v, i);\n vnorm += val * val;\n }\n vnorm = Math.sqrt(vnorm);\n if (vnorm < 1e-14) continue;\n\n for (let i = col + 1; i < n; i++) {\n v[i] = at(v, i) / vnorm;\n }\n\n // Apply H = (I - 2*v*v^T) * H from left\n for (let j = col; j < n; j++) {\n let dot = 0;\n for (let i = col + 1; i < n; i++) {\n dot += at(v, i) * at(H, i * n + j);\n }\n dot *= 2;\n for (let i = col + 1; i < n; i++) {\n H[i * n + j] = at(H, i * n + j) - dot * at(v, i);\n }\n }\n\n // Apply H = H * (I - 2*v*v^T) from right\n for (let i = 0; i < n; i++) {\n let dot = 0;\n for (let j = col + 1; j < n; j++) {\n dot += at(H, i * n + j) * at(v, j);\n }\n dot *= 2;\n for (let j = col + 1; j < n; j++) {\n H[i * n + j] = at(H, i * n + j) - dot * at(v, j);\n }\n }\n\n // Accumulate Q = Q * (I - 2*v*v^T)\n for (let i = 0; i < n; i++) {\n let dot = 0;\n for (let j = col + 1; j < n; j++) {\n dot += at(Q, i * n + j) * at(v, j);\n }\n dot *= 2;\n for (let j = col + 1; j < n; j++) {\n Q[i * n + j] = at(Q, i * n + j) - dot * at(v, j);\n }\n }\n }\n\n return { H, Q };\n}\n\n/**\n * Compute eigenvalues and eigenvectors of a square matrix.\n *\n * Solves A * v = λ * v where λ are eigenvalues and v are eigenvectors.\n *\n * **Algorithm**:\n * - Symmetric matrices: Jacobi iteration (stable, accurate)\n * - General matrices: QR iteration with Hessenberg reduction\n *\n * **Limitations**:\n * - Only real eigenvalues are supported. Non-symmetric matrices whose\n * spectrum includes complex eigenvalues will cause an\n * {@link InvalidParameterError} to be thrown.\n * - For symmetric/Hermitian matrices, use `eigh()` for better performance\n * - May not converge for some matrices (bounded QR iterations; see options)\n *\n * **Parameters**:\n * @param a - Square matrix of shape (N, N)\n * @param options - Optional configuration overrides (see {@link EigOptions})\n * @param options.maxIter - Maximum QR iterations (default: 300)\n * @param options.tol - Convergence tolerance for subdiagonal norm (default: 1e-10)\n *\n * **Returns**: [eigenvalues, eigenvectors]\n * - eigenvalues: Real values of shape (N,)\n * - eigenvectors: Column vectors of shape (N, N) where eigenvectors[:,i] corresponds to eigenvalues[i]\n *\n * **Requirements**:\n * - Input must be square matrix\n * - Matrix must have only real eigenvalues\n * - For symmetric matrices, use eigh() for better performance\n *\n * **Properties**:\n * - A @ v[:,i] = λ[i] * v[:,i]\n * - Eigenvectors are normalized\n *\n * @example\n * ```ts\n * import { eig } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [2, 1]]);\n * const [eigenvalues, eigenvectors] = eig(A);\n *\n * // Verify: A @ eigenvectors[:,i] ≈ eigenvalues[i] * eigenvectors[:,i]\n * ```\n *\n * @throws {ShapeError} If input is not square matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n * @throws {InvalidParameterError} If matrix has complex eigenvalues\n *\n * @see {@link https://en.wikipedia.org/wiki/Eigendecomposition_of_a_matrix | Wikipedia: Eigendecomposition}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 7.5.2\n */\nexport type EigOptions = {\n readonly maxIter?: number;\n readonly tol?: number;\n};\n\nexport function eig(a: Tensor, options: EigOptions = {}): [Tensor, Tensor] {\n const n = getSquareMatrixSize(a, \"eig\");\n if (n === 0) {\n return [fromDenseVector1D(new Float64Array(0)), fromDenseMatrix2D(0, 0, new Float64Array(0))];\n }\n\n // If symmetric, use Jacobi (real eigenvalues, orthonormal eigenvectors).\n const { data: A0 } = toDenseMatrix2D(a);\n\n let symmetric = true;\n for (let i = 0; i < n && symmetric; i++) {\n for (let j = i + 1; j < n; j++) {\n const aij = at(A0, i * n + j);\n const aji = at(A0, j * n + i);\n if (Math.abs(aij - aji) > 1e-10) {\n symmetric = false;\n break;\n }\n }\n }\n\n if (symmetric) {\n return eigh(a);\n }\n\n // Reduce to Hessenberg form first for faster QR iteration convergence\n const { H } = hessenbergReduce(A0, n);\n\n // Shifted QR iteration on Hessenberg matrix (converges faster and more reliably)\n const maxIter = options.maxIter ?? 300;\n const convTol = options.tol ?? 1e-10;\n let Ak = H;\n let converged = false;\n\n for (let iter = 0; iter < maxIter; iter++) {\n let off = 0;\n for (let i = 1; i < n; i++) {\n const v = at(Ak, i * n + (i - 1));\n off += v * v;\n }\n if (Math.sqrt(off) < convTol) {\n converged = true;\n break;\n }\n\n const mu = at(Ak, (n - 1) * n + (n - 1));\n const shifted = new Float64Array(Ak);\n for (let i = 0; i < n; i++) {\n shifted[i * n + i] = at(shifted, i * n + i) - mu;\n }\n\n const { Q, R } = qrFactorSquare(shifted, n);\n Ak = matmulSquare(R, Q, n);\n for (let i = 0; i < n; i++) {\n Ak[i * n + i] = at(Ak, i * n + i) + mu;\n }\n }\n\n // Clean small subdiagonal entries to stabilize eigenvalue detection\n for (let i = 1; i < n; i++) {\n const v = at(Ak, i * n + (i - 1));\n if (Math.abs(v) < convTol) {\n Ak[i * n + (i - 1)] = 0;\n }\n }\n\n // Detect complex eigenvalues by checking for 2x2 blocks in the quasi-upper\n // triangular (real Schur) form. A 2x2 diagonal block [[a, b], [c, d]] has\n // complex conjugate eigenvalues when its discriminant (a-d)^2 + 4*b*c < 0.\n // This check runs before the convergence check because matrices with complex\n // eigenvalues will never converge (2x2 blocks persist), and the complex\n // eigenvalue error is more informative than a generic convergence failure.\n const complexTol = 1e-8;\n let hasComplex = false;\n for (let i = 0; i < n - 1; i++) {\n const subdiag = Math.abs(at(Ak, (i + 1) * n + i));\n if (subdiag > complexTol) {\n // Non-negligible subdiagonal element indicates a 2x2 block\n const a11 = at(Ak, i * n + i);\n const a12 = at(Ak, i * n + (i + 1));\n const a21 = at(Ak, (i + 1) * n + i);\n const a22 = at(Ak, (i + 1) * n + (i + 1));\n const discriminant = (a11 - a22) * (a11 - a22) + 4 * a12 * a21;\n if (discriminant < -complexTol) {\n hasComplex = true;\n break;\n }\n }\n }\n\n if (hasComplex) {\n throw new InvalidParameterError(\n \"Matrix has complex eigenvalues, which are not supported. \" +\n \"Only matrices with real eigenvalues can be decomposed. \" +\n \"Symmetric matrices always have real eigenvalues.\",\n \"a\"\n );\n }\n\n if (!converged) {\n throw new ConvergenceError(`eig() failed to converge after ${maxIter} iterations`, {\n iterations: maxIter,\n tolerance: convTol,\n });\n }\n\n const evals = new Float64Array(n);\n for (let i = 0; i < n; i++) evals[i] = at(Ak, i * n + i);\n\n // Compute eigenvectors by finding nullspace of (A - λI)\n const vectors = new Float64Array(n * n);\n const used = new Array<boolean>(n).fill(false);\n const clusterTol = 1e-8;\n\n for (let i = 0; i < n; i++) {\n if (used[i]) continue;\n const lambda = at(evals, i);\n const cluster = [i];\n used[i] = true;\n for (let j = i + 1; j < n; j++) {\n if (used[j]) continue;\n const diff = Math.abs(at(evals, j) - lambda);\n const scale = Math.max(1, Math.abs(lambda));\n if (diff <= clusterTol * scale) {\n used[j] = true;\n cluster.push(j);\n }\n }\n\n const basis = (() => {\n const M = new Float64Array(A0);\n for (let d = 0; d < n; d++) {\n M[d * n + d] = at(M, d * n + d) - lambda;\n }\n const [_, s, Vt] = svd(fromDenseMatrix2D(n, n, M), true);\n const sDense = toDenseVector1D(s);\n const { data: VtData } = toDenseMatrix2D(Vt);\n const vData = new Float64Array(n * n);\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n vData[r * n + c] = at(VtData, c * n + r);\n }\n }\n const sMax = sDense.length === 0 ? 0 : at(sDense, 0);\n const tol = Number.EPSILON * n * sMax;\n const basisVecs: Float64Array[] = [];\n for (let r = sDense.length - 1; r >= 0; r--) {\n if (at(sDense, r) <= tol) {\n const vec = new Float64Array(n);\n for (let c = 0; c < n; c++) {\n vec[c] = at(vData, c * n + r);\n }\n basisVecs.push(vec);\n }\n }\n if (basisVecs.length === 0 && sDense.length > 0) {\n const r = sDense.length - 1;\n const vec = new Float64Array(n);\n for (let c = 0; c < n; c++) {\n vec[c] = at(vData, c * n + r);\n }\n basisVecs.push(vec);\n }\n return basisVecs.length === 0 ? [new Float64Array(n)] : basisVecs;\n })();\n\n for (let b = 0; b < cluster.length; b++) {\n const colIndex = cluster[b];\n if (colIndex === undefined) {\n throw new ShapeError(\"eig(): eigenvector index is missing\");\n }\n const vec = basis[b % basis.length];\n if (vec === undefined) {\n throw new ShapeError(\"eig(): eigenvector basis is missing\");\n }\n let norm = 0;\n for (let r = 0; r < n; r++) {\n const v = at(vec, r);\n norm += v * v;\n }\n if (norm === 0) {\n for (let r = 0; r < n; r++) {\n vectors[r * n + colIndex] = r === colIndex ? 1 : 0;\n }\n continue;\n }\n const inv = 1 / Math.sqrt(norm);\n for (let r = 0; r < n; r++) {\n vectors[r * n + colIndex] = at(vec, r) * inv;\n }\n }\n }\n\n return [fromDenseVector1D(evals), fromDenseMatrix2D(n, n, vectors)];\n}\n\n/**\n * Compute eigenvalues only (faster than eig).\n *\n * **Parameters**:\n * @param a - Square matrix of shape (N, N)\n *\n * **Returns**: eigenvalues - Array of real eigenvalues\n *\n * **Limitations**:\n * - Matrices with complex eigenvalues are not supported and will throw\n * {@link InvalidParameterError}\n *\n * @example\n * ```ts\n * import { eigvals } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [2, 1]]);\n * const eigenvalues = eigvals(A);\n * console.log(eigenvalues); // [3, -1]\n * ```\n */\nexport function eigvals(a: Tensor, options?: EigOptions): Tensor {\n const [eigenvalues] = eig(a, options);\n return eigenvalues;\n}\n\n/**\n * Compute eigenvalues only of symmetric matrix (faster than eigh).\n *\n * **Parameters**:\n * @param a - Symmetric square matrix of shape (N, N)\n *\n * **Returns**: eigenvalues - Array of real eigenvalues\n *\n * @example\n * ```ts\n * import { eigvalsh } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [2, 1]]);\n * const eigenvalues = eigvalsh(A);\n * console.log(eigenvalues); // [-1, 3]\n * ```\n *\n * @throws {ShapeError} If input is not square matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input is not symmetric\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n */\nexport function eigvalsh(a: Tensor): Tensor {\n const n = getSquareMatrixSize(a, \"eigvalsh\");\n const { data: A } = toDenseMatrix2D(a);\n\n // Validate symmetry\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const aij = at(A, i * n + j);\n const aji = at(A, j * n + i);\n if (Math.abs(aij - aji) > 1e-10) {\n throw new DataValidationError(\"Input must be symmetric for eigvalsh\");\n }\n }\n }\n\n const [eigenvalues] = eigh(a);\n return eigenvalues;\n}\n\n/**\n * Compute eigenvalues and eigenvectors of a symmetric/Hermitian matrix.\n *\n * More efficient than eig() for symmetric matrices.\n *\n * **Parameters**:\n * @param a - Symmetric matrix of shape (N, N)\n *\n * **Returns**: [eigenvalues, eigenvectors]\n * - All eigenvalues are real\n * - Eigenvectors are orthonormal\n *\n * @example\n * ```ts\n * import { eigh } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [2, 1]]); // Symmetric\n * const [eigenvalues, eigenvectors] = eigh(A);\n * ```\n *\n * @throws {ShapeError} If input is not square matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input is not symmetric\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n */\nexport function eigh(a: Tensor): [Tensor, Tensor] {\n const n = getSquareMatrixSize(a, \"eigh\");\n if (n === 0) {\n return [fromDenseVector1D(new Float64Array(0)), fromDenseMatrix2D(0, 0, new Float64Array(0))];\n }\n\n const { data: A } = toDenseMatrix2D(a);\n\n // Validate symmetry\n for (let i = 0; i < n; i++) {\n for (let j = i + 1; j < n; j++) {\n const aij = at(A, i * n + j);\n const aji = at(A, j * n + i);\n if (Math.abs(aij - aji) > 1e-10) {\n throw new DataValidationError(\"Input must be symmetric for eigh\");\n }\n }\n }\n\n const { values, vectors } = jacobiEigenSymmetric(A, n);\n\n // Sort ascending like NumPy eigh\n const idx = new Array<number>(n);\n for (let i = 0; i < n; i++) idx[i] = i;\n idx.sort((i, j) => at(values, i) - at(values, j));\n\n const outVals = new Float64Array(n);\n const outVecs = new Float64Array(n * n);\n for (let col = 0; col < n; col++) {\n const src = atArr(idx, col);\n outVals[col] = at(values, src);\n for (let row = 0; row < n; row++) {\n outVecs[row * n + col] = at(vectors, row * n + src);\n }\n }\n\n return [fromDenseVector1D(outVals), fromDenseMatrix2D(n, n, outVecs)];\n}\n","import { ShapeError } from \"../../core\";\nimport type { Tensor } from \"../../ndarray\";\nimport { at, atInt, fromDenseMatrix2D, getDim, toDenseMatrix2D } from \"../_internal\";\n\n/**\n * LU decomposition with partial pivoting.\n *\n * Factorizes matrix A into P * A = L * U where:\n * - P is a permutation matrix\n * - L is lower triangular with unit diagonal\n * - U is upper triangular\n *\n * **Algorithm**: Gaussian elimination with partial pivoting\n *\n * **Parameters**:\n * @param a - Input matrix of shape (M, N)\n *\n * **Returns**: [P, L, U]\n * - P: Permutation matrix of shape (M, M)\n * - L: Lower triangular matrix of shape (M, K) where K = min(M, N)\n * - U: Upper triangular matrix of shape (K, N)\n *\n * **Requirements**:\n * - Input must be 2D matrix\n *\n * **Properties**:\n * - P @ A = L @ U\n * - L has unit diagonal (L[i,i] = 1)\n * - Partial pivoting ensures numerical stability\n *\n * @example\n * ```ts\n * import { lu } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[2, 1, 1], [4, 3, 3], [8, 7, 9]]);\n * const [P, L, U] = lu(A);\n *\n * // Verify: P @ A ≈ L @ U\n * ```\n *\n * @throws {ShapeError} If input is not 2D\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * **Note**: Rank-deficient matrices (with zero pivots) are handled gracefully.\n * The factorization will still produce valid P, L, U factors.\n *\n * @see {@link https://en.wikipedia.org/wiki/LU_decomposition | Wikipedia: LU decomposition}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 3.4.1\n */\nexport function lu(a: Tensor): [Tensor, Tensor, Tensor] {\n if (a.ndim !== 2) throw new ShapeError(\"Input must be 2D matrix\");\n\n const m = getDim(a, 0, \"lu()\");\n const n = getDim(a, 1, \"lu()\");\n const k = Math.min(m, n);\n\n const { data: A0 } = toDenseMatrix2D(a);\n const Ufull = new Float64Array(A0);\n\n const Lfull = new Float64Array(m * k);\n for (let i = 0; i < Math.min(m, k); i++) Lfull[i * k + i] = 1;\n\n const piv = new Int32Array(m);\n for (let i = 0; i < m; i++) piv[i] = i;\n\n for (let col = 0; col < k; col++) {\n // Find pivot row\n let maxRow = col;\n let maxVal = Math.abs(at(Ufull, col * n + col));\n for (let i = col + 1; i < m; i++) {\n const v = Math.abs(at(Ufull, i * n + col));\n if (v > maxVal) {\n maxVal = v;\n maxRow = i;\n }\n }\n\n if (maxRow !== col) {\n // Swap rows in U\n for (let j = 0; j < n; j++) {\n const tmp = at(Ufull, col * n + j);\n Ufull[col * n + j] = at(Ufull, maxRow * n + j);\n Ufull[maxRow * n + j] = tmp;\n }\n\n // Swap already computed entries of L (columns < col)\n for (let j = 0; j < col; j++) {\n const tmp = at(Lfull, col * k + j);\n Lfull[col * k + j] = at(Lfull, maxRow * k + j);\n Lfull[maxRow * k + j] = tmp;\n }\n\n const tp = atInt(piv, col);\n piv[col] = atInt(piv, maxRow);\n piv[maxRow] = tp;\n }\n\n const pivot = at(Ufull, col * n + col);\n\n // Skip elimination for zero-pivot columns (rank-deficient matrices).\n // L column stays zero (except the unit diagonal already set), U retains the row as-is.\n if (pivot === 0) continue;\n\n for (let i = col + 1; i < m; i++) {\n const factor = at(Ufull, i * n + col) / pivot;\n Lfull[i * k + col] = factor;\n Ufull[i * n + col] = factor;\n for (let j = col + 1; j < n; j++) {\n Ufull[i * n + j] = at(Ufull, i * n + j) - factor * at(Ufull, col * n + j);\n }\n }\n }\n\n // Build permutation matrix P from piv.\n const Pfull = new Float64Array(m * m);\n for (let i = 0; i < m; i++) {\n const pi = atInt(piv, i);\n Pfull[i * m + pi] = 1;\n }\n\n // Extract U (k x n) from Ufull.\n const U = new Float64Array(k * n);\n for (let i = 0; i < k; i++) {\n for (let j = 0; j < n; j++) {\n U[i * n + j] = i <= j ? at(Ufull, i * n + j) : 0;\n }\n }\n\n return [\n fromDenseMatrix2D(m, m, Pfull),\n fromDenseMatrix2D(m, k, Lfull),\n fromDenseMatrix2D(k, n, U),\n ];\n}\n","import { ShapeError } from \"../../core\";\nimport type { Tensor } from \"../../ndarray\";\nimport { at, fromDenseMatrix2D, getDim, toDenseMatrix2D } from \"../_internal\";\n\n/**\n * QR decomposition.\n *\n * Factorizes matrix A into Q * R where Q is orthogonal and R is upper triangular.\n *\n * **Algorithm**: Householder reflections\n *\n * **Parameters**:\n * @param a - Input matrix of shape (M, N)\n * @param mode - Decomposition mode:\n * - 'reduced': Q has shape (M, K), R has shape (K, N) where K = min(M, N)\n * - 'complete': Q has shape (M, M), R has shape (M, N)\n *\n * **Returns**: [Q, R]\n * - Q: Orthogonal matrix (Q^T * Q = I)\n * - R: Upper triangular matrix\n *\n * **Requirements**:\n * - Input must be 2D matrix\n *\n * **Properties**:\n * - A = Q @ R\n * - Q is orthogonal: Q^T @ Q = I\n * - R is upper triangular\n *\n * @example\n * ```ts\n * import { qr } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[12, -51, 4], [6, 167, -68], [-4, 24, -41]]);\n * const [Q, R] = qr(A);\n *\n * // Verify: A ≈ Q @ R\n * // Verify: Q is orthogonal (Q^T @ Q ≈ I)\n * ```\n *\n * @throws {ShapeError} If input is not 2D\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/QR_decomposition | Wikipedia: QR decomposition}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 5.2.1\n */\nexport function qr(a: Tensor, mode: \"reduced\" | \"complete\" = \"reduced\"): [Tensor, Tensor] {\n if (a.ndim !== 2) throw new ShapeError(\"Input must be 2D matrix\");\n\n const m = getDim(a, 0, \"qr()\");\n const n = getDim(a, 1, \"qr()\");\n const minDim = Math.min(m, n);\n\n // Convert to dense arrays for processing\n const { data: A_data } = toDenseMatrix2D(a);\n\n // R starts as a copy of A\n // We use Float64Array for precision\n const R = new Float64Array(A_data);\n\n // Q starts as Identity (m x m)\n const Q = new Float64Array(m * m);\n for (let i = 0; i < m; i++) {\n Q[i * m + i] = 1.0;\n }\n\n // Work vectors\n const v = new Float64Array(m);\n const w = new Float64Array(m);\n\n // Householder reflections\n // Iterate over columns to zero out elements below diagonal\n for (let k = 0; k < minDim; k++) {\n // 1. Compute Householder vector v for column k of R\n // x = R[k:m, k]\n let normXSq = 0;\n for (let i = k; i < m; i++) {\n const val = at(R, i * n + k);\n normXSq += val * val;\n }\n\n // If column is already close to zero, skip\n // This handles rank-deficient matrices gracefully\n if (normXSq < 1e-15) continue;\n\n const normX = Math.sqrt(normXSq);\n const x0 = at(R, k * n + k);\n\n // Choose sign to avoid catastrophic cancellation: alpha = -sign(x0) * ||x||\n const sign = x0 >= 0 ? 1 : -1;\n const alpha = -sign * normX;\n\n // Construct v:\n // v = x - alpha * e1\n // v[0] = x0 - alpha\n // v[1..] = x[1..]\n // Then normalize v\n\n // We compute v directly in the work array\n // Reset v to 0 first (important for i < k)\n v.fill(0);\n\n v[k] = x0 - alpha;\n for (let i = k + 1; i < m; i++) {\n v[i] = at(R, i * n + k);\n }\n\n // Normalize v\n let normVSq = 0;\n for (let i = k; i < m; i++) {\n const vi = at(v, i);\n normVSq += vi * vi;\n }\n const normV = Math.sqrt(normVSq);\n\n if (normV < 1e-15) continue;\n\n const invNormV = 1.0 / normV;\n for (let i = k; i < m; i++) {\n v[i] = at(v, i) * invNormV;\n }\n\n // 2. Apply H to R: R = H * R = (I - 2vv^T) R = R - 2 v (v^T R)\n // Update submatrix R[k:m, k:n]\n for (let j = k; j < n; j++) {\n // Compute dot product: v^T * R[:, j]\n let dot = 0;\n for (let i = k; i < m; i++) {\n dot += at(v, i) * at(R, i * n + j);\n }\n\n // R[:, j] -= 2 * dot * v\n for (let i = k; i < m; i++) {\n R[i * n + j] = at(R, i * n + j) - 2 * dot * at(v, i);\n }\n }\n\n // Force sub-diagonal elements in column k to zero (clean up numerical noise)\n R[k * n + k] = alpha;\n for (let i = k + 1; i < m; i++) {\n R[i * n + k] = 0;\n }\n\n // 3. Apply H to Q: Q = Q * H^T = Q * H (since H is symmetric)\n // Q = Q (I - 2vv^T) = Q - 2 (Q v) v^T\n // Update Q[:, k:m]\n\n // Compute w = Q[:, k:m] * v[k:m]\n // This is a matrix-vector multiplication: w = Q * v\n // But v is only non-zero from k to m, so we optimize loops\n w.fill(0);\n for (let i = 0; i < m; i++) {\n let dot = 0;\n for (let j = k; j < m; j++) {\n dot += at(Q, i * m + j) * at(v, j);\n }\n w[i] = dot;\n }\n\n // Q[:, j] -= 2 * w * v[j] for each column j in k..m-1\n for (let j = k; j < m; j++) {\n const vj = at(v, j);\n for (let i = 0; i < m; i++) {\n Q[i * m + j] = at(Q, i * m + j) - 2 * at(w, i) * vj;\n }\n }\n }\n\n // Return requested mode\n if (mode === \"reduced\") {\n const k = minDim;\n\n // Extract first k columns of Q\n const Q_reduced = new Float64Array(m * k);\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < k; j++) {\n Q_reduced[i * k + j] = at(Q, i * m + j);\n }\n }\n\n // Extract first k rows of R\n const R_reduced = new Float64Array(k * n);\n for (let i = 0; i < k; i++) {\n for (let j = 0; j < n; j++) {\n R_reduced[i * n + j] = at(R, i * n + j);\n }\n }\n\n return [fromDenseMatrix2D(m, k, Q_reduced), fromDenseMatrix2D(k, n, R_reduced)];\n }\n\n // Complete mode: return full Q (m x m) and R (m x n)\n return [fromDenseMatrix2D(m, m, Q), fromDenseMatrix2D(m, n, R)];\n}\n","import { DeepboxError, InvalidParameterError, ShapeError } from \"../core\";\nimport type { Tensor } from \"../ndarray\";\nimport {\n at,\n fromDenseMatrix2D,\n getDim,\n luFactorSquare,\n luSolveInPlace,\n toDenseMatrix2D,\n toDenseVector1D,\n} from \"./_internal\";\nimport { svd } from \"./decomposition/svd\";\n\n/**\n * Compute the inverse of a matrix.\n *\n * Finds matrix A^(-1) such that A * A^(-1) = I.\n *\n * **Parameters**:\n * @param a - Square matrix of shape (N, N)\n *\n * **Returns**: Inverse matrix\n *\n * **Requirements**:\n * - Matrix must be square\n * - Matrix must be non-singular (det(A) ≠ 0)\n *\n * **Properties**:\n * - A * inv(A) = I\n * - inv(inv(A)) = A\n * - inv(AB) = inv(B) * inv(A)\n *\n * @example\n * ```ts\n * import { inv } from 'deepbox/linalg';\n * import { tensor, matmul } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [3, 4]]);\n * const Ainv = inv(A);\n *\n * // Verify: A * A^(-1) ≈ I\n * const I = matmul(A, Ainv);\n * ```\n *\n * @throws {ShapeError} If matrix is not square or not 2D\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If matrix is singular or contains non-finite values\n *\n * @see {@link https://en.wikipedia.org/wiki/Invertible_matrix | Wikipedia: Matrix inverse}\n */\nexport function inv(a: Tensor): Tensor {\n if (a.ndim !== 2) throw new ShapeError(\"Input must be 2D matrix\");\n const rows = getDim(a, 0, \"inv()\");\n const cols = getDim(a, 1, \"inv()\");\n if (rows !== cols) throw new ShapeError(\"inv requires a square matrix\");\n\n const n = rows;\n\n if (n === 0) {\n return fromDenseMatrix2D(0, 0, new Float64Array(0));\n }\n\n const { data: A } = toDenseMatrix2D(a);\n const { lu, piv } = luFactorSquare(A, n);\n\n const rhs = new Float64Array(n * n);\n for (let i = 0; i < n; i++) rhs[i * n + i] = 1;\n\n luSolveInPlace(lu, piv, n, rhs, n);\n return fromDenseMatrix2D(n, n, rhs);\n}\n\n/**\n * Compute the Moore-Penrose pseudo-inverse.\n *\n * Generalization of matrix inverse for non-square or singular matrices.\n *\n * **Parameters**:\n * @param a - Input matrix of shape (M, N)\n * @param rcond - Cutoff for small singular values\n *\n * **Returns**: Pseudo-inverse of shape (N, M)\n *\n * **Properties**:\n * - A * pinv(A) * A = A\n * - pinv(A) * A * pinv(A) = pinv(A)\n * - For full rank square matrix: pinv(A) = inv(A)\n * - For overdetermined system: pinv(A) gives least squares solution\n *\n * **Algorithm**: Using SVD\n * A = U * Σ * V^T\n * pinv(A) = V * Σ^+ * U^T\n * where Σ^+ is pseudo-inverse of Σ (1/s_i for s_i > rcond, else 0)\n *\n * @example\n * ```ts\n * import { pinv } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * // Non-square matrix\n * const A = tensor([[1, 2], [3, 4], [5, 6]]);\n * const Apinv = pinv(A);\n *\n * console.log(Apinv.shape); // [2, 3]\n * ```\n *\n * @throws {ShapeError} If input is not 2D matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {InvalidParameterError} If rcond is negative or non-finite\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse | Wikipedia: Pseudo-inverse}\n */\nexport function pinv(a: Tensor, rcond?: number): Tensor {\n if (a.ndim !== 2) throw new ShapeError(\"Input must be 2D matrix\");\n\n if (rcond !== undefined && (!Number.isFinite(rcond) || rcond < 0)) {\n throw new InvalidParameterError(\"rcond must be a non-negative finite number\", \"rcond\", rcond);\n }\n\n const m = getDim(a, 0, \"pinv()\");\n const n = getDim(a, 1, \"pinv()\");\n const k = Math.min(m, n);\n\n if (k === 0) {\n return fromDenseMatrix2D(n, m, new Float64Array(n * m));\n }\n\n const [U_t, s_t, Vt_t] = svd(a, false);\n const { data: U, cols: uCols, rows: uRows } = toDenseMatrix2D(U_t);\n const s = toDenseVector1D(s_t);\n const { data: Vt, cols: vtCols, rows: vtRows } = toDenseMatrix2D(Vt_t);\n\n // U: (m, k), Vt: (k, n)\n if (uRows !== m || uCols !== k) throw new DeepboxError(\"Internal error: unexpected U shape\");\n if (vtRows !== k || vtCols !== n) throw new DeepboxError(\"Internal error: unexpected Vt shape\");\n\n const s0 = at(s, 0);\n const rcondVal = rcond ?? Number.EPSILON * Math.max(m, n);\n const cutoff = rcondVal * s0;\n\n const sInv = new Float64Array(k);\n for (let i = 0; i < k; i++) {\n const si = at(s, i);\n sInv[i] = si > cutoff ? 1 / si : 0;\n }\n\n // Compute pinv(A) = V * diag(sInv) * U^T\n // V is n x k (transpose of Vt).\n const out = new Float64Array(n * m);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n let sum = 0;\n for (let r = 0; r < k; r++) {\n const v_ir = at(Vt, r * n + i); // Vt[r,i] = V[i,r]\n const u_jr = at(U, j * k + r); // U[j,r]\n sum += v_ir * at(sInv, r) * u_jr;\n }\n out[i * m + j] = sum;\n }\n }\n\n return fromDenseMatrix2D(n, m, out);\n}\n","import {\n type Axis,\n InvalidParameterError,\n normalizeAxes,\n normalizeAxis,\n ShapeError,\n} from \"../core\";\nimport { type Tensor, tensor } from \"../ndarray\";\nimport { isContiguous } from \"../ndarray/tensor/strides\";\nimport { assertFiniteTensor, at, getDim, getStride, toDenseVector1D } from \"./_internal\";\nimport { svd } from \"./decomposition/svd\";\n\n/**\n * Matrix or vector norm.\n *\n * Computes various matrix and vector norms.\n *\n * **Parameters**:\n * @param x - Input array\n * @param ord - Order of the norm:\n * For vectors:\n * - undefined or 2: L2 norm (Euclidean)\n * - 1: L1 norm (Manhattan)\n * - Infinity: Max norm\n * - -Infinity: Min norm\n * - 0: L0 \"norm\" (number of non-zero elements)\n * - p: Lp norm (p > 0). Negative p (except -Infinity) is invalid.\n * For matrices:\n * - 'fro': Frobenius norm\n * - 'nuc': Nuclear norm (sum of singular values)\n * - 1: Max column sum\n * - -1: Min column sum\n * - 2: Largest singular value\n * - -2: Smallest singular value\n * - Infinity: Max row sum\n * - -Infinity: Min row sum\n * @param axis - Axis along which to compute norm\n * @param keepdims - Keep reduced dimensions\n *\n * **Returns**: Norm value (scalar or tensor)\n *\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n * @throws {InvalidParameterError} If norm order or axis values are invalid\n * @throws {ShapeError} If axis configuration is incompatible with input\n *\n * @see {@link https://en.wikipedia.org/wiki/Matrix_norm | Wikipedia: Matrix norm}\n */\nexport function norm(\n x: Tensor,\n ord?: number | \"fro\" | \"nuc\",\n axis?: Axis | Axis[],\n keepdims = false\n): Tensor | number {\n assertFiniteTensor(x, \"norm()\");\n\n const axes = axis !== undefined ? normalizeAxes(axis, x.ndim) : undefined;\n\n let p: number | \"fro\" | \"nuc\";\n if (ord === undefined) {\n if (axes === undefined) {\n p = x.ndim === 1 ? 2 : \"fro\";\n } else if (axes.length === 2) {\n p = \"fro\";\n } else {\n p = 2;\n }\n } else {\n p = ord;\n }\n\n const normalizeVectorOrder = (order: number | \"fro\"): number => {\n const ordValue = order === \"fro\" ? 2 : order;\n\n if (Number.isNaN(ordValue)) {\n throw new InvalidParameterError(\"ord must be a valid number\", \"ord\", ordValue);\n }\n if (!Number.isFinite(ordValue)) {\n if (ordValue === Number.POSITIVE_INFINITY || ordValue === Number.NEGATIVE_INFINITY) {\n return ordValue;\n }\n throw new InvalidParameterError(\"ord must be finite or ±Infinity\", \"ord\", ordValue);\n }\n if (ordValue < 0) {\n throw new InvalidParameterError(\n \"Vector norm order must be non-negative or ±Infinity\",\n \"ord\",\n ordValue\n );\n }\n return ordValue;\n };\n\n const vectorNormValue = (\n values: Iterable<number> & { readonly length: number },\n order: number\n ): number => {\n const n = values.length;\n if (n === 0) return 0;\n\n if (order === 0) {\n let count = 0;\n for (const v of values) if (v !== 0) count++;\n return count;\n }\n if (order === 1) {\n let sum = 0;\n for (const v of values) sum += Math.abs(v);\n return sum;\n }\n if (order === 2) {\n let sum = 0;\n for (const v of values) sum += v * v;\n return Math.sqrt(sum);\n }\n if (order === Number.POSITIVE_INFINITY) {\n let max = 0;\n for (const v of values) max = Math.max(max, Math.abs(v));\n return max;\n }\n if (order === Number.NEGATIVE_INFINITY) {\n let min = Infinity;\n for (const v of values) min = Math.min(min, Math.abs(v));\n return min === Infinity ? 0 : min;\n }\n\n let sum = 0;\n for (const v of values) sum += Math.abs(v) ** order;\n return sum ** (1 / order);\n };\n\n const vectorNormAxis = (axisValue: number, order: number, keep: boolean): Tensor | number => {\n const ax = normalizeAxis(axisValue, x.ndim);\n const axisDim = getDim(x, ax, \"norm()\");\n\n const outShape: number[] = [];\n for (let i = 0; i < x.ndim; i++) {\n if (i === ax) {\n if (keep) outShape.push(1);\n } else {\n outShape.push(getDim(x, i, \"norm()\"));\n }\n }\n\n const outSize = outShape.length === 0 ? 1 : outShape.reduce((a, b) => a * b, 1);\n const out = new Float64Array(outSize);\n\n const outStrides = new Array<number>(outShape.length);\n let stride = 1;\n for (let i = outShape.length - 1; i >= 0; i--) {\n outStrides[i] = stride;\n stride *= outShape[i] ?? 0;\n }\n\n for (let outFlat = 0; outFlat < outSize; outFlat++) {\n let rem = outFlat;\n const outIdx: number[] = new Array(outShape.length);\n\n let i = 0;\n for (const s of outStrides) {\n outIdx[i] = Math.floor(rem / s);\n rem %= s;\n i++;\n }\n\n const inIdx = new Array<number>(x.ndim);\n if (keep) {\n for (let i = 0; i < x.ndim; i++) {\n inIdx[i] = i === ax ? 0 : (outIdx[i] ?? 0);\n }\n } else {\n let outAxis = 0;\n for (let i = 0; i < x.ndim; i++) {\n if (i === ax) {\n inIdx[i] = 0;\n } else {\n inIdx[i] = outIdx[outAxis] ?? 0;\n outAxis++;\n }\n }\n }\n\n if (axisDim === 0) {\n out[outFlat] = 0;\n continue;\n }\n\n let baseOffset = x.offset;\n for (let i = 0; i < x.ndim; i++) {\n baseOffset += (inIdx[i] ?? 0) * getStride(x, i, \"norm()\");\n }\n\n const axisStride = getStride(x, ax, \"norm()\");\n\n if (order === 0) {\n let count = 0;\n for (let k = 0; k < axisDim; k++) {\n if (Number(x.data[baseOffset + k * axisStride]) !== 0) count++;\n }\n out[outFlat] = count;\n } else if (order === 1) {\n let sum = 0;\n for (let k = 0; k < axisDim; k++) {\n sum += Math.abs(Number(x.data[baseOffset + k * axisStride]));\n }\n out[outFlat] = sum;\n } else if (order === 2) {\n let sum = 0;\n for (let k = 0; k < axisDim; k++) {\n const v = Number(x.data[baseOffset + k * axisStride]);\n sum += v * v;\n }\n out[outFlat] = Math.sqrt(sum);\n } else if (order === Number.POSITIVE_INFINITY) {\n let max = 0;\n for (let k = 0; k < axisDim; k++) {\n max = Math.max(max, Math.abs(Number(x.data[baseOffset + k * axisStride])));\n }\n out[outFlat] = max;\n } else if (order === Number.NEGATIVE_INFINITY) {\n let min = Infinity;\n for (let k = 0; k < axisDim; k++) {\n min = Math.min(min, Math.abs(Number(x.data[baseOffset + k * axisStride])));\n }\n out[outFlat] = min === Infinity ? 0 : min;\n } else {\n let sum = 0;\n for (let k = 0; k < axisDim; k++) {\n sum += Math.abs(Number(x.data[baseOffset + k * axisStride])) ** order;\n }\n out[outFlat] = sum ** (1 / order);\n }\n }\n\n if (outShape.length === 0 && !keep) return at(out, 0);\n return tensor(out).view(outShape);\n };\n\n const collectValues = (): number[] => {\n const values = new Array<number>(x.size);\n if (x.size === 0) return values;\n\n if (x.ndim === 0) {\n values[0] = Number(x.data[x.offset]);\n return values;\n }\n\n // Fast path: contiguous zero-offset numeric tensor\n const data = x.data;\n if (\n !Array.isArray(data) &&\n !(data instanceof BigInt64Array) &&\n x.offset === 0 &&\n isContiguous(x.shape, x.strides)\n ) {\n for (let i = 0; i < x.size; i++) {\n values[i] = data[i] as number;\n }\n return values;\n }\n\n const idx = new Array<number>(x.ndim).fill(0);\n let offset = x.offset;\n\n for (let count = 0; count < x.size; count++) {\n values[count] = Number(data[offset]);\n\n for (let d = x.ndim - 1; d >= 0; d--) {\n const dim = getDim(x, d, \"norm()\");\n const stride = getStride(x, d, \"norm()\");\n const idxVal = idx[d] ?? 0;\n const nextIdx = idxVal + 1;\n\n idx[d] = nextIdx;\n offset += stride;\n\n if (nextIdx < dim) break;\n\n offset -= nextIdx * stride;\n idx[d] = 0;\n }\n }\n\n return values;\n };\n\n if (axis !== undefined) {\n if (p === \"nuc\") {\n throw new InvalidParameterError(\n \"axis is only supported for vector norms, not nuclear norm\",\n \"axis\",\n axis\n );\n }\n if (axes === undefined) {\n throw new ShapeError(\"axis has invalid length for input\");\n }\n\n if (axes.length === 0) {\n const ordValue = normalizeVectorOrder(p === \"fro\" ? 2 : p);\n const value = vectorNormValue(collectValues(), ordValue);\n if (!keepdims) return value;\n\n const kdShape = new Array<number>(x.ndim).fill(1);\n return tensor([value]).view(kdShape);\n }\n\n if (axes.length === 1) {\n const ax = axes[0];\n if (ax === undefined) throw new ShapeError(\"axis has invalid length for input\");\n const ordValue = normalizeVectorOrder(p === \"fro\" ? 2 : p);\n return vectorNormAxis(ax, ordValue, keepdims);\n }\n\n if (axes.length === 2) {\n if (x.ndim < 2) throw new ShapeError(\"axis has invalid length for input\");\n\n const ax0 = axes[0];\n const ax1 = axes[1];\n if (ax0 === undefined || ax1 === undefined)\n throw new ShapeError(\"axis has invalid length for input\");\n\n const dimRow = getDim(x, ax0, \"norm()\");\n const dimCol = getDim(x, ax1, \"norm()\");\n const strideRow = getStride(x, ax0, \"norm()\");\n const strideCol = getStride(x, ax1, \"norm()\");\n\n const outerShape: number[] = [];\n const outerStrides: number[] = [];\n for (let i = 0; i < x.ndim; i++) {\n if (i !== ax0 && i !== ax1) {\n outerShape.push(getDim(x, i, \"norm()\"));\n outerStrides.push(getStride(x, i, \"norm()\"));\n }\n }\n\n const outerSize = outerShape.length === 0 ? 1 : outerShape.reduce((a, b) => a * b, 1);\n\n const matOrd = p === \"fro\" ? \"fro\" : p;\n if (\n matOrd !== \"fro\" &&\n matOrd !== 1 &&\n matOrd !== -1 &&\n matOrd !== 2 &&\n matOrd !== -2 &&\n matOrd !== Number.POSITIVE_INFINITY &&\n matOrd !== Number.NEGATIVE_INFINITY\n ) {\n throw new InvalidParameterError(\n `Invalid norm order '${String(matOrd)}' for matrix norm. ` +\n \"Valid orders are: 1, -1, 2, -2, Infinity, -Infinity, 'fro'.\",\n \"ord\",\n matOrd\n );\n }\n\n const results = new Float64Array(outerSize);\n\n for (let outer = 0; outer < outerSize; outer++) {\n let baseOffset = x.offset;\n let rem = outer;\n\n for (let d = outerShape.length - 1; d >= 0; d--) {\n const dim = outerShape[d] ?? 0;\n const idx = rem % dim;\n rem = Math.floor(rem / dim);\n baseOffset += idx * (outerStrides[d] ?? 0);\n }\n\n let val = 0;\n\n if (matOrd === \"fro\") {\n let sum = 0;\n for (let i = 0; i < dimRow; i++) {\n for (let j = 0; j < dimCol; j++) {\n const v = Number(x.data[baseOffset + i * strideRow + j * strideCol]);\n sum += v * v;\n }\n }\n val = Math.sqrt(sum);\n } else if (matOrd === 1) {\n let maxSum = 0;\n for (let j = 0; j < dimCol; j++) {\n let colSum = 0;\n for (let i = 0; i < dimRow; i++) {\n colSum += Math.abs(Number(x.data[baseOffset + i * strideRow + j * strideCol]));\n }\n maxSum = Math.max(maxSum, colSum);\n }\n val = maxSum;\n } else if (matOrd === -1) {\n let minSum = Infinity;\n for (let j = 0; j < dimCol; j++) {\n let colSum = 0;\n for (let i = 0; i < dimRow; i++) {\n colSum += Math.abs(Number(x.data[baseOffset + i * strideRow + j * strideCol]));\n }\n minSum = Math.min(minSum, colSum);\n }\n val = minSum === Infinity ? 0 : minSum;\n } else if (matOrd === Number.POSITIVE_INFINITY) {\n let maxSum = 0;\n for (let i = 0; i < dimRow; i++) {\n let rowSum = 0;\n for (let j = 0; j < dimCol; j++) {\n rowSum += Math.abs(Number(x.data[baseOffset + i * strideRow + j * strideCol]));\n }\n maxSum = Math.max(maxSum, rowSum);\n }\n val = maxSum;\n } else if (matOrd === Number.NEGATIVE_INFINITY) {\n let minSum = Infinity;\n for (let i = 0; i < dimRow; i++) {\n let rowSum = 0;\n for (let j = 0; j < dimCol; j++) {\n rowSum += Math.abs(Number(x.data[baseOffset + i * strideRow + j * strideCol]));\n }\n minSum = Math.min(minSum, rowSum);\n }\n val = minSum === Infinity ? 0 : minSum;\n } else if (matOrd === 2 || matOrd === -2) {\n const sliceData = new Float64Array(dimRow * dimCol);\n for (let i = 0; i < dimRow; i++) {\n for (let j = 0; j < dimCol; j++) {\n sliceData[i * dimCol + j] = Number(\n x.data[baseOffset + i * strideRow + j * strideCol]\n );\n }\n }\n const sliceTensor = tensor(sliceData).view([dimRow, dimCol]);\n const [_U, s, _Vt] = svd(sliceTensor);\n const sDense = toDenseVector1D(s);\n\n if (sDense.length === 0) {\n val = 0;\n } else {\n val = matOrd === 2 ? at(sDense, 0) : Math.abs(at(sDense, sDense.length - 1));\n }\n }\n\n results[outer] = val;\n }\n\n if (keepdims) {\n const kdShape: number[] = [];\n for (let i = 0; i < x.ndim; i++) {\n kdShape.push(i === ax0 || i === ax1 ? 1 : getDim(x, i, \"norm()\"));\n }\n return tensor(results).view(kdShape);\n }\n\n if (outerSize === 1 && outerShape.length === 0) return at(results, 0);\n return tensor(results).view(outerShape);\n }\n\n throw new ShapeError(\"axis has invalid length for input\");\n }\n\n // Scalar norms when axis is omitted\n if (x.ndim === 0) {\n if (p === \"nuc\") {\n throw new InvalidParameterError(\"Invalid norm order 'nuc' for scalar norm.\", \"ord\", p);\n }\n const ordInput = p === \"fro\" ? 2 : p;\n if (typeof ordInput !== \"number\") {\n throw new InvalidParameterError(\n `Invalid norm order '${String(ordInput)}' for scalar norm.`,\n \"ord\",\n ordInput\n );\n }\n const ordValue = normalizeVectorOrder(ordInput);\n return vectorNormValue(collectValues(), ordValue);\n }\n\n if (x.ndim === 1) {\n if (p === \"nuc\") {\n throw new InvalidParameterError(\"Invalid norm order 'nuc' for vector norm.\", \"ord\", p);\n }\n const ordInput = p === \"fro\" ? 2 : p;\n if (typeof ordInput !== \"number\") {\n throw new InvalidParameterError(\n `Invalid norm order '${String(ordInput)}' for vector norm.`,\n \"ord\",\n ordInput\n );\n }\n const ordValue = normalizeVectorOrder(ordInput);\n return vectorNormValue(collectValues(), ordValue);\n }\n\n if (x.ndim !== 2) {\n throw new ShapeError(\"norm requires 1D or 2D input when axis is omitted\");\n }\n\n const s0 = getStride(x, 0, \"norm()\");\n const s1 = getStride(x, 1, \"norm()\");\n const rows = getDim(x, 0, \"norm()\");\n const cols = getDim(x, 1, \"norm()\");\n\n if (p === \"fro\") {\n let sum = 0;\n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n const val = Number(x.data[x.offset + i * s0 + j * s1]);\n sum += val * val;\n }\n }\n return Math.sqrt(sum);\n }\n\n if (p === \"nuc\") {\n const [_U, s, _Vt] = svd(x);\n const sDense = toDenseVector1D(s);\n let sum = 0;\n for (let i = 0; i < sDense.length; i++) sum += Math.abs(at(sDense, i));\n return sum;\n }\n\n if (p === 1) {\n let maxSum = 0;\n for (let j = 0; j < cols; j++) {\n let colSum = 0;\n for (let i = 0; i < rows; i++) {\n colSum += Math.abs(Number(x.data[x.offset + i * s0 + j * s1]));\n }\n maxSum = Math.max(maxSum, colSum);\n }\n return maxSum;\n }\n\n if (p === -1) {\n let minSum = Infinity;\n for (let j = 0; j < cols; j++) {\n let colSum = 0;\n for (let i = 0; i < rows; i++) {\n colSum += Math.abs(Number(x.data[x.offset + i * s0 + j * s1]));\n }\n minSum = Math.min(minSum, colSum);\n }\n return minSum === Infinity ? 0 : minSum;\n }\n\n if (p === Number.POSITIVE_INFINITY) {\n let maxSum = 0;\n for (let i = 0; i < rows; i++) {\n let rowSum = 0;\n for (let j = 0; j < cols; j++) {\n rowSum += Math.abs(Number(x.data[x.offset + i * s0 + j * s1]));\n }\n maxSum = Math.max(maxSum, rowSum);\n }\n return maxSum;\n }\n\n if (p === Number.NEGATIVE_INFINITY) {\n let minSum = Infinity;\n for (let i = 0; i < rows; i++) {\n let rowSum = 0;\n for (let j = 0; j < cols; j++) {\n rowSum += Math.abs(Number(x.data[x.offset + i * s0 + j * s1]));\n }\n minSum = Math.min(minSum, rowSum);\n }\n return minSum === Infinity ? 0 : minSum;\n }\n\n if (p === 2 || p === -2) {\n const [_U, s, _Vt] = svd(x);\n const sDense = toDenseVector1D(s);\n if (sDense.length === 0) return 0;\n const sMax = at(sDense, 0);\n const sMin = at(sDense, sDense.length - 1);\n return p === 2 ? sMax : Math.abs(sMin);\n }\n\n throw new InvalidParameterError(\n `Invalid norm order '${String(p)}' for matrix norm. ` +\n \"Valid orders are: 1, -1, 2, -2, Infinity, -Infinity, 'fro', 'nuc'.\",\n \"ord\",\n p\n );\n}\n\n/**\n * Condition number of a matrix.\n *\n * Measures how sensitive the solution of A*x=b is to changes in b.\n * Large condition number indicates ill-conditioned matrix.\n *\n * **Formula**: cond(A) = ||A|| * ||A^(-1)||\n *\n * **Parameters**:\n * @param a - Input matrix\n * @param p - Norm order (same as norm())\n *\n * **Returns**: Condition number (>= 1, infinity for singular matrices)\n *\n * @throws {ShapeError} If input is not a 2D matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n * @throws {InvalidParameterError} If p is unsupported\n */\nexport function cond(a: Tensor, _p?: number | \"fro\"): number {\n if (a.ndim !== 2) throw new ShapeError(\"Input must be 2D matrix\");\n assertFiniteTensor(a, \"cond()\");\n\n if (_p !== undefined) {\n if (_p === \"fro\") {\n // ok\n } else if (typeof _p === \"number\") {\n if (!Number.isFinite(_p) || Number.isNaN(_p) || _p !== 2) {\n throw new InvalidParameterError(\n \"Only 2-norm and Frobenius norm are supported for condition number\",\n \"p\",\n _p\n );\n }\n } else {\n throw new InvalidParameterError(\n \"Only 2-norm and Frobenius norm are supported for condition number\",\n \"p\",\n _p\n );\n }\n }\n\n const m = getDim(a, 0, \"cond()\");\n const n = getDim(a, 1, \"cond()\");\n const k = Math.min(m, n);\n if (k === 0) return Infinity;\n\n const [_U, s, _Vt] = svd(a);\n const sDense = toDenseVector1D(s);\n\n if (_p === \"fro\") {\n if (sDense.length === 0) return Infinity;\n let sumSq = 0;\n let sumInvSq = 0;\n for (let i = 0; i < sDense.length; i++) {\n const si = at(sDense, i);\n sumSq += si * si;\n if (si === 0) return Infinity;\n sumInvSq += 1 / (si * si);\n }\n return Math.sqrt(sumSq) * Math.sqrt(sumInvSq);\n }\n\n const sMax = at(sDense, 0);\n const sMin = at(sDense, k - 1);\n if (sMin === 0) return Infinity;\n return sMax / sMin;\n}\n","import {\n type Axis,\n DataValidationError,\n InvalidParameterError,\n normalizeAxis,\n ShapeError,\n} from \"../core\";\nimport { type Tensor, tensor } from \"../ndarray\";\nimport {\n at,\n getDim,\n getStride,\n luFactorSquare,\n toDenseMatrix2D,\n toDenseVector1D,\n} from \"./_internal\";\nimport { svd } from \"./decomposition/svd\";\n\n/**\n * Compute the determinant of a matrix.\n *\n * Uses LU decomposition with partial pivoting for numerical stability.\n * The determinant is computed as: det(A) = pivSign * product(diag(U))\n *\n * **Algorithm**: LU decomposition\n * **Time Complexity**: O(N³) for N×N matrix\n * **Space Complexity**: O(N²) for LU factorization\n *\n * **Parameters**:\n * @param a - Square matrix of shape (N, N)\n *\n * **Returns**: Determinant value (scalar)\n *\n * **Properties**:\n * - det(A) = 0 if and only if A is singular (non-invertible)\n * - det(AB) = det(A) * det(B)\n * - det(A^T) = det(A)\n * - det(cA) = c^N * det(A) for scalar c and N×N matrix A\n * - det(I) = 1 for identity matrix\n *\n * @example\n * ```ts\n * import { det } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [3, 4]]);\n * console.log(det(A)); // -2\n * ```\n *\n * @throws {ShapeError} If input is not a 2D square matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/Determinant | Wikipedia: Determinant}\n */\nexport function det(a: Tensor): number {\n if (a.ndim !== 2) throw new ShapeError(\"det requires a 2-D matrix\");\n const rows = getDim(a, 0, \"det()\");\n const cols = getDim(a, 1, \"det()\");\n if (rows !== cols) throw new ShapeError(\"det requires a square matrix\");\n\n const n = rows;\n if (n === 0) return 1;\n\n const { data: A } = toDenseMatrix2D(a);\n\n try {\n const { lu, pivSign } = luFactorSquare(A, n);\n let detVal = pivSign;\n for (let i = 0; i < n; i++) detVal *= at(lu, i * n + i);\n return detVal;\n } catch (err) {\n // (Fix) Do NOT swallow all errors. Only treat the specific \"singular matrix\" case as det=0.\n if (err instanceof DataValidationError && err.message === \"Matrix is singular\") {\n return 0;\n }\n throw err;\n }\n}\n\n/**\n * Compute sign and natural logarithm of the determinant.\n *\n * More numerically stable than det() for large matrices or matrices with\n * very large/small determinants that would overflow/underflow.\n *\n * **Algorithm**: LU decomposition\n * **Time Complexity**: O(N³)\n * **Space Complexity**: O(N²)\n *\n * **Parameters**:\n * @param a - Square matrix\n *\n * **Returns**: [sign, logdet]\n * - sign: +1, -1, or 0 (as 0D tensor)\n * - logdet: Natural log of |det(A)| (as 0D tensor), -Infinity if singular\n *\n * **Mathematical Relation**:\n * det(A) = sign * exp(logdet)\n *\n * **Advantages over det()**:\n * - Avoids overflow for large determinants\n * - Avoids underflow for small determinants\n * - More numerically stable for ill-conditioned matrices\n *\n * @example\n * ```ts\n * import { slogdet } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [3, 4]]);\n * const [sign, logdet] = slogdet(A);\n * // det(A) = sign * exp(logdet)\n * ```\n *\n * @throws {ShapeError} If input is not a 2D square matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n */\nexport function slogdet(a: Tensor): [Tensor, Tensor] {\n if (a.ndim !== 2) throw new ShapeError(\"slogdet requires a 2-D matrix\");\n const rows = getDim(a, 0, \"slogdet()\");\n const cols = getDim(a, 1, \"slogdet()\");\n if (rows !== cols) throw new ShapeError(\"slogdet requires a square matrix\");\n\n const n = rows;\n if (n === 0) return [tensor([1]), tensor([0])];\n\n const { data: A } = toDenseMatrix2D(a);\n\n try {\n const { lu, pivSign } = luFactorSquare(A, n);\n let sign = pivSign;\n let logAbsDet = 0;\n\n for (let i = 0; i < n; i++) {\n const d = at(lu, i * n + i);\n if (d === 0) {\n return [tensor([0]), tensor([-Infinity])];\n }\n sign *= Math.sign(d);\n logAbsDet += Math.log(Math.abs(d));\n }\n\n return [tensor([sign]), tensor([logAbsDet])];\n } catch (err) {\n // (Fix) Do NOT swallow all errors. Only treat the specific \"singular matrix\" case specially.\n if (err instanceof DataValidationError && err.message === \"Matrix is singular\") {\n return [tensor([0]), tensor([-Infinity])];\n }\n throw err;\n }\n}\n\n/**\n * Compute the trace of a matrix.\n *\n * Sum of diagonal elements. Supports offset diagonals.\n *\n * **Algorithm**: Direct summation\n * **Time Complexity**: O(min(M, N)) where M×N is matrix size\n * **Space Complexity**: O(1)\n *\n * **Parameters**:\n * @param a - Input matrix (at least 2D)\n * @param offset - Integer offset from main diagonal:\n * - 0: main diagonal (default)\n * - >0: upper diagonal (k-th diagonal above main)\n * - <0: lower diagonal (k-th diagonal below main)\n * @param axis1 - First axis to take the diagonal from (default: 0)\n * @param axis2 - Second axis to take the diagonal from (default: 1)\n *\n * **Returns**: Trace values as tensor (one per slice if input is batched)\n *\n * **Properties**:\n * - trace(A) = sum of eigenvalues (for square matrices)\n * - trace(AB) = trace(BA) (cyclic property)\n * - trace(A + B) = trace(A) + trace(B) (linearity)\n * - trace(cA) = c * trace(A) for scalar c\n * - trace(A^T) = trace(A)\n *\n * @example\n * ```ts\n * import { trace } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);\n * console.log(trace(A)); // 1 + 5 + 9 = 15\n * console.log(trace(A, 1)); // 2 + 6 = 8 (upper diagonal)\n * console.log(trace(A, -1)); // 4 + 8 = 12 (lower diagonal)\n * ```\n *\n * @throws {ShapeError} If input is not at least 2D\n * @throws {InvalidParameterError} If axis values are invalid/identical or offset is non-integer\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n */\nexport function trace(a: Tensor, offset = 0, axis1: Axis = 0, axis2: Axis = 1): Tensor {\n if (a.ndim < 2) {\n throw new ShapeError(\"Input must be at least 2D\");\n }\n\n if (!Number.isInteger(offset)) {\n throw new InvalidParameterError(\"offset must be an integer\", \"offset\", offset);\n }\n\n if (a.dtype === \"string\") {\n throw new DataValidationError(\"trace() does not support string dtype\");\n }\n\n const ndim = a.ndim;\n\n const ax1 = normalizeAxis(axis1, ndim);\n const ax2 = normalizeAxis(axis2, ndim);\n if (ax1 === ax2) {\n throw new InvalidParameterError(\"axis1 and axis2 must be different\", \"axis\", [axis1, axis2]);\n }\n\n const dim1 = getDim(a, ax1, \"trace()\");\n const dim2 = getDim(a, ax2, \"trace()\");\n const stride1 = getStride(a, ax1, \"trace()\");\n const stride2 = getStride(a, ax2, \"trace()\");\n\n const outerShape: number[] = [];\n const outerStrides: number[] = [];\n for (let i = 0; i < ndim; i++) {\n if (i !== ax1 && i !== ax2) {\n outerShape.push(getDim(a, i, \"trace()\"));\n outerStrides.push(getStride(a, i, \"trace()\"));\n }\n }\n\n const outerSize = outerShape.length === 0 ? 1 : outerShape.reduce((acc, v) => acc * v, 1);\n const out = new Float64Array(outerSize);\n\n for (let outer = 0; outer < outerSize; outer++) {\n let baseOffset = a.offset;\n let rem = outer;\n\n for (let d = outerShape.length - 1; d >= 0; d--) {\n const dim = outerShape[d];\n if (dim === undefined) throw new ShapeError(\"trace(): outer shape is out of bounds\");\n\n const idx = rem % dim;\n rem = Math.floor(rem / dim);\n\n const stride = outerStrides[d];\n if (stride === undefined) throw new ShapeError(\"trace(): outer stride is out of bounds\");\n\n baseOffset += idx * stride;\n }\n\n let sum = 0;\n if (offset >= 0) {\n const n = Math.min(dim1, Math.max(0, dim2 - offset));\n for (let i = 0; i < n; i++) {\n sum += Number(a.data[baseOffset + i * stride1 + (i + offset) * stride2]);\n }\n } else {\n const absOffset = -offset;\n const n = Math.min(Math.max(0, dim1 - absOffset), dim2);\n for (let i = 0; i < n; i++) {\n sum += Number(a.data[baseOffset + (i + absOffset) * stride1 + i * stride2]);\n }\n }\n\n out[outer] = sum;\n }\n\n if (outerShape.length === 0) {\n return tensor([at(out, 0)]);\n }\n return tensor(out).view(outerShape);\n}\n\n/**\n * Compute the rank of a matrix.\n *\n * Number of linearly independent rows/columns.\n * Uses SVD to count singular values above a threshold.\n *\n * **Algorithm**: SVD-based rank computation\n * **Time Complexity**: O(min(M,N) * M * N) for M×N matrix\n * **Space Complexity**: O(M*N) for SVD computation\n *\n * **Parameters**:\n * @param a - Input matrix of shape (M, N)\n * @param tol - Threshold for small singular values (optional)\n * - Default: max(M,N) * largest_singular_value * machine_epsilon\n * - Singular values > tol are counted as non-zero\n *\n * **Returns**: Rank (integer between 0 and min(M, N))\n *\n * **Properties**:\n * - 0 ≤ rank(A) ≤ min(M, N)\n * - rank(A) = rank(A^T)\n * - rank(A) = number of non-zero singular values\n * - Full rank: rank(A) = min(M, N)\n * - Rank deficient: rank(A) < min(M, N)\n *\n * @example\n * ```ts\n * import { matrixRank } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[1, 2], [2, 4]]); // Rank 1 (linearly dependent rows)\n * console.log(matrixRank(A)); // 1\n *\n * const B = tensor([[1, 0], [0, 1]]); // Full rank\n * console.log(matrixRank(B)); // 2\n * ```\n *\n * @throws {ShapeError} If input is not a 2D matrix\n * @throws {DTypeError} If input has string dtype\n * @throws {InvalidParameterError} If tol is negative or non-finite\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n */\nexport function matrixRank(a: Tensor, tol?: number): number {\n if (a.ndim !== 2) throw new ShapeError(\"matrixRank requires a 2-D matrix\");\n if (tol !== undefined && (!Number.isFinite(tol) || tol < 0)) {\n throw new InvalidParameterError(\"tol must be a non-negative finite number\", \"tol\", tol);\n }\n\n const rows = getDim(a, 0, \"matrixRank()\");\n const cols = getDim(a, 1, \"matrixRank()\");\n const k = Math.min(rows, cols);\n if (k === 0) return 0;\n\n const [_U, s, _Vt] = svd(a);\n const sDense = toDenseVector1D(s);\n\n const defaultTol = at(sDense, 0) * Number.EPSILON * Math.max(rows, cols);\n const threshold = tol ?? defaultTol;\n\n let rank = 0;\n for (let i = 0; i < k; i++) {\n if (at(sDense, i) > threshold) rank++;\n }\n return rank;\n}\n","import { DeepboxError, InvalidParameterError, ShapeError } from \"../../core\";\nimport { type Tensor, tensor } from \"../../ndarray\";\nimport {\n at,\n fromDenseMatrix2D,\n fromDenseVector1D,\n getDim,\n toDenseMatrix2D,\n toDenseVector1D,\n} from \"../_internal\";\nimport { svd } from \"../decomposition/svd\";\n\n/**\n * Least squares solution to A * x = b.\n *\n * Finds x that minimizes ||A*x - b||^2 (Euclidean norm).\n * Works for overdetermined (M > N), underdetermined (M < N), and square systems.\n *\n * **Algorithm**: SVD-based least squares\n *\n * **Parameters**:\n * @param a - Coefficient matrix of shape (M, N)\n * @param b - Target values of shape (M,) or (M, K)\n * @param rcond - Cutoff for small singular values (default: machine epsilon * max(M,N))\n *\n * **Returns**: Object with:\n * - x: Least squares solution of shape (N,) or (N, K)\n * - residuals: Sum of squared residuals ||b - A*x||^2\n * - rank: Effective rank of A\n * - s: Singular values of A\n *\n * **Requirements**:\n * - A can be any M x N matrix\n * - First dimension of A must match first dimension of b\n *\n * @example\n * ```ts\n * import { lstsq } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * // Overdetermined system (more equations than unknowns)\n * const A = tensor([[1, 1], [1, 2], [1, 3]]);\n * const b = tensor([2, 3, 5]);\n * const result = lstsq(A, b);\n *\n * console.log(result.x); // Best fit solution\n * console.log(result.residuals); // Residual error\n * ```\n *\n * @throws {ShapeError} If A is not 2D matrix\n * @throws {ShapeError} If b is not 1D or 2D tensor\n * @throws {ShapeError} If dimensions don't match\n * @throws {DTypeError} If input has string dtype\n * @throws {InvalidParameterError} If rcond is negative or non-finite\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/Least_squares | Wikipedia: Least squares}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 5.5.4\n */\nexport function lstsq(\n a: Tensor,\n b: Tensor,\n rcond?: number\n): {\n readonly x: Tensor;\n readonly residuals: Tensor;\n readonly rank: number;\n readonly s: Tensor;\n} {\n if (a.ndim !== 2) throw new ShapeError(\"A must be a 2D matrix\");\n if (b.ndim !== 1 && b.ndim !== 2) throw new ShapeError(\"b must be a 1D or 2D tensor\");\n\n if (rcond !== undefined && (!Number.isFinite(rcond) || rcond < 0)) {\n throw new InvalidParameterError(\"rcond must be a non-negative finite number\", \"rcond\", rcond);\n }\n\n const m = getDim(a, 0, \"lstsq()\");\n const n = getDim(a, 1, \"lstsq()\");\n const bRows = getDim(b, 0, \"lstsq()\");\n if (bRows !== m) throw new ShapeError(\"A and b dimensions do not match\");\n\n const k = Math.min(m, n);\n\n if (k === 0) {\n const zeroX =\n b.ndim === 1\n ? fromDenseVector1D(new Float64Array(n))\n : fromDenseMatrix2D(\n n,\n getDim(b, 1, \"lstsq()\"),\n new Float64Array(n * getDim(b, 1, \"lstsq()\"))\n );\n const zeroResiduals =\n b.ndim === 1 ? tensor([0]) : fromDenseVector1D(new Float64Array(getDim(b, 1, \"lstsq()\")));\n return {\n x: zeroX,\n residuals: zeroResiduals,\n rank: 0,\n s: fromDenseVector1D(new Float64Array(0)),\n };\n }\n\n const rcondVal = rcond ?? Number.EPSILON * Math.max(m, n);\n\n // Compute SVD once and reuse for both rank and pseudo-inverse\n const [U_t, s, Vt_t] = svd(a, false);\n const { data: U, cols: uCols, rows: uRows } = toDenseMatrix2D(U_t);\n const sDense = toDenseVector1D(s);\n const { data: Vt, cols: vtCols, rows: vtRows } = toDenseMatrix2D(Vt_t);\n\n // Validate SVD shapes\n if (uRows !== m || uCols !== k) {\n throw new DeepboxError(\"Internal error: unexpected U shape\");\n }\n if (vtRows !== k || vtCols !== n) {\n throw new DeepboxError(\"Internal error: unexpected Vt shape\");\n }\n\n // Compute rank and inverse singular values\n const cutoff = at(sDense, 0) * rcondVal;\n let rank = 0;\n const sInv = new Float64Array(k);\n for (let i = 0; i < k; i++) {\n const si = at(sDense, i);\n if (si > cutoff) {\n rank++;\n sInv[i] = 1 / si;\n } else {\n sInv[i] = 0;\n }\n }\n\n // Compute pinv(A) = V * diag(sInv) * U^T manually (n x m)\n const P = new Float64Array(n * m);\n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n let sum = 0;\n for (let r = 0; r < k; r++) {\n const v_ir = at(Vt, r * n + i); // Vt[r,i] = V[i,r]\n const u_jr = at(U, j * k + r); // U[j,r]\n sum += v_ir * at(sInv, r) * u_jr;\n }\n P[i * m + j] = sum;\n }\n }\n\n if (b.ndim === 1) {\n const bv = toDenseVector1D(b);\n const x = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n let sum = 0;\n for (let j = 0; j < m; j++) {\n sum += at(P, i * m + j) * at(bv, j);\n }\n x[i] = sum;\n }\n\n // residual = ||b - A x||^2\n const { data: A } = toDenseMatrix2D(a);\n let residual = 0;\n for (let i = 0; i < m; i++) {\n let pred = 0;\n for (let j = 0; j < n; j++) {\n pred += at(A, i * n + j) * at(x, j);\n }\n const err = at(bv, i) - pred;\n residual += err * err;\n }\n\n return {\n x: fromDenseVector1D(x),\n residuals: tensor([residual]),\n rank,\n s,\n };\n }\n\n const nrhs = getDim(b, 1, \"lstsq()\");\n const { data: B, rows: bM, cols: bK } = toDenseMatrix2D(b);\n if (bM !== m || bK !== nrhs) throw new DeepboxError(\"Internal error: unexpected b shape\");\n\n const X = new Float64Array(n * nrhs);\n for (let i = 0; i < n; i++) {\n for (let k2 = 0; k2 < nrhs; k2++) {\n let sum = 0;\n for (let j = 0; j < m; j++) {\n sum += at(P, i * m + j) * at(B, j * nrhs + k2);\n }\n X[i * nrhs + k2] = sum;\n }\n }\n\n const { data: A } = toDenseMatrix2D(a);\n const residuals = new Float64Array(nrhs);\n for (let k2 = 0; k2 < nrhs; k2++) {\n let rsum = 0;\n for (let i = 0; i < m; i++) {\n let pred = 0;\n for (let j = 0; j < n; j++) {\n pred += at(A, i * n + j) * at(X, j * nrhs + k2);\n }\n const err = at(B, i * nrhs + k2) - pred;\n rsum += err * err;\n }\n residuals[k2] = rsum;\n }\n\n return {\n x: fromDenseMatrix2D(n, nrhs, X),\n residuals: fromDenseVector1D(residuals),\n rank,\n s,\n };\n}\n","import { DataValidationError, ShapeError } from \"../../core\";\nimport type { Tensor } from \"../../ndarray\";\nimport {\n at,\n fromDenseMatrix2D,\n fromDenseVector1D,\n getDim,\n luFactorSquare,\n luSolveInPlace,\n toDenseMatrix2D,\n toDenseVector1D,\n} from \"../_internal\";\n\n/**\n * Solve linear system A * x = b.\n *\n * Finds vector x that satisfies the equation A * x = b.\n *\n * **Algorithm**: LU decomposition with partial pivoting\n *\n * **Parameters**:\n * @param a - Coefficient matrix of shape (N, N)\n * @param b - Right-hand side of shape (N,) or (N, K) for multiple RHS\n *\n * **Returns**: Solution x of same shape as b\n *\n * **Requirements**:\n * - A must be square matrix\n * - A must be non-singular (invertible)\n * - Number of rows in A must equal length of b\n *\n * @example\n * ```ts\n * import { solve } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const A = tensor([[3, 1], [1, 2]]);\n * const b = tensor([9, 8]);\n * const x = solve(A, b);\n *\n * // Verify: A @ x ≈ b\n * console.log(x); // [2, 3]\n * ```\n *\n * @throws {ShapeError} If A is not square\n * @throws {ShapeError} If dimensions don't match\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If A is singular\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/System_of_linear_equations | Wikipedia: Linear systems}\n * @see Golub & Van Loan, \"Matrix Computations\", Algorithm 3.4.1\n */\nexport function solve(a: Tensor, b: Tensor): Tensor {\n if (a.ndim !== 2) throw new ShapeError(\"A must be a 2D matrix\");\n const n = getDim(a, 0, \"solve()\");\n const n2 = getDim(a, 1, \"solve()\");\n if (n !== n2) throw new ShapeError(\"A must be square\");\n\n if (b.ndim !== 1 && b.ndim !== 2) {\n throw new ShapeError(\"b must be a 1D or 2D tensor\");\n }\n\n const bRows = getDim(b, 0, \"solve()\");\n if (bRows !== n) {\n throw new ShapeError(\"A and b dimensions do not match\");\n }\n\n const { data: A } = toDenseMatrix2D(a);\n const { lu, piv } = luFactorSquare(A, n);\n\n if (b.ndim === 1) {\n const rhs = toDenseVector1D(b);\n const rhsMat = new Float64Array(n * 1);\n for (let i = 0; i < n; i++) rhsMat[i] = at(rhs, i);\n luSolveInPlace(lu, piv, n, rhsMat, 1);\n return fromDenseVector1D(rhsMat);\n }\n\n const nrhs = getDim(b, 1, \"solve()\");\n const { data: B } = toDenseMatrix2D(b);\n luSolveInPlace(lu, piv, n, B, nrhs);\n return fromDenseMatrix2D(n, nrhs, B);\n}\n\n/**\n * Solve triangular system.\n *\n * More efficient than solve() when A is already triangular.\n *\n * **Parameters**:\n * @param a - Triangular matrix of shape (N, N)\n * @param b - Right-hand side of shape (N,) or (N, K)\n * @param lower - If true, A is lower triangular; if false, upper triangular\n *\n * **Returns**: Solution x\n *\n * @example\n * ```ts\n * import { solveTriangular } from 'deepbox/linalg';\n * import { tensor } from 'deepbox/ndarray';\n *\n * const L = tensor([[2, 0], [3, 4]]); // Lower triangular\n * const b = tensor([6, 18]);\n * const x = solveTriangular(L, b, true);\n * ```\n *\n * @throws {ShapeError} If A is not square\n * @throws {ShapeError} If dimensions don't match\n * @throws {DTypeError} If input has string dtype\n * @throws {DataValidationError} If A is singular (zero diagonal)\n * @throws {DataValidationError} If input contains non-finite values (NaN, Infinity)\n *\n * @see {@link https://en.wikipedia.org/wiki/Triangular_matrix | Wikipedia: Triangular matrix}\n */\nexport function solveTriangular(a: Tensor, b: Tensor, lower = true): Tensor {\n if (a.ndim !== 2) throw new ShapeError(\"A must be a 2D matrix\");\n const n = getDim(a, 0, \"solveTriangular()\");\n const n2 = getDim(a, 1, \"solveTriangular()\");\n if (n !== n2) throw new ShapeError(\"A must be square\");\n if (b.ndim !== 1 && b.ndim !== 2) {\n throw new ShapeError(\"b must be a 1D or 2D tensor\");\n }\n const bN = getDim(b, 0, \"solveTriangular()\");\n if (bN !== n) throw new ShapeError(\"A and b dimensions do not match\");\n\n const { data: A } = toDenseMatrix2D(a);\n if (b.ndim === 1) {\n const rhs = toDenseVector1D(b);\n const x = new Float64Array(n);\n\n if (lower) {\n for (let i = 0; i < n; i++) {\n let sum = at(rhs, i);\n for (let j = 0; j < i; j++) {\n sum -= at(A, i * n + j) * at(x, j);\n }\n const diag = at(A, i * n + i);\n if (diag === 0) throw new DataValidationError(\"Matrix is singular\");\n x[i] = sum / diag;\n }\n } else {\n for (let i = n - 1; i >= 0; i--) {\n let sum = at(rhs, i);\n for (let j = i + 1; j < n; j++) {\n sum -= at(A, i * n + j) * at(x, j);\n }\n const diag = at(A, i * n + i);\n if (diag === 0) throw new DataValidationError(\"Matrix is singular\");\n x[i] = sum / diag;\n }\n }\n\n return fromDenseVector1D(x);\n }\n\n const nrhs = getDim(b, 1, \"solveTriangular()\");\n const { data: B } = toDenseMatrix2D(b);\n const X = new Float64Array(n * nrhs);\n\n if (lower) {\n for (let k = 0; k < nrhs; k++) {\n for (let i = 0; i < n; i++) {\n let sum = at(B, i * nrhs + k);\n for (let j = 0; j < i; j++) {\n sum -= at(A, i * n + j) * at(X, j * nrhs + k);\n }\n const diag = at(A, i * n + i);\n if (diag === 0) throw new DataValidationError(\"Matrix is singular\");\n X[i * nrhs + k] = sum / diag;\n }\n }\n } else {\n for (let k = 0; k < nrhs; k++) {\n for (let i = n - 1; i >= 0; i--) {\n let sum = at(B, i * nrhs + k);\n for (let j = i + 1; j < n; j++) {\n sum -= at(A, i * n + j) * at(X, j * nrhs + k);\n }\n const diag = at(A, i * n + i);\n if (diag === 0) throw new DataValidationError(\"Matrix is singular\");\n X[i * nrhs + k] = sum / diag;\n }\n }\n }\n\n return fromDenseMatrix2D(n, nrhs, X);\n}\n"]}
|