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.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +344 -0
  3. package/dist/CSRMatrix-CwGwQRea.d.cts +219 -0
  4. package/dist/CSRMatrix-KzNt6QpS.d.ts +219 -0
  5. package/dist/Tensor-BQLk1ltW.d.cts +147 -0
  6. package/dist/Tensor-g8mUClel.d.ts +147 -0
  7. package/dist/chunk-4S73VUBD.js +677 -0
  8. package/dist/chunk-4S73VUBD.js.map +1 -0
  9. package/dist/chunk-5R4S63PF.js +2925 -0
  10. package/dist/chunk-5R4S63PF.js.map +1 -0
  11. package/dist/chunk-6AE5FKKQ.cjs +9264 -0
  12. package/dist/chunk-6AE5FKKQ.cjs.map +1 -0
  13. package/dist/chunk-AD436M45.js +3854 -0
  14. package/dist/chunk-AD436M45.js.map +1 -0
  15. package/dist/chunk-ALS7ETWZ.cjs +4263 -0
  16. package/dist/chunk-ALS7ETWZ.cjs.map +1 -0
  17. package/dist/chunk-AU7XHGKJ.js +2092 -0
  18. package/dist/chunk-AU7XHGKJ.js.map +1 -0
  19. package/dist/chunk-B5TNKUEY.js +1481 -0
  20. package/dist/chunk-B5TNKUEY.js.map +1 -0
  21. package/dist/chunk-BCR7G3A6.js +9136 -0
  22. package/dist/chunk-BCR7G3A6.js.map +1 -0
  23. package/dist/chunk-C4PKXY74.cjs +1917 -0
  24. package/dist/chunk-C4PKXY74.cjs.map +1 -0
  25. package/dist/chunk-DWZY6PIP.cjs +6400 -0
  26. package/dist/chunk-DWZY6PIP.cjs.map +1 -0
  27. package/dist/chunk-E3EU5FZO.cjs +2113 -0
  28. package/dist/chunk-E3EU5FZO.cjs.map +1 -0
  29. package/dist/chunk-F3JWBINJ.js +1054 -0
  30. package/dist/chunk-F3JWBINJ.js.map +1 -0
  31. package/dist/chunk-FJYLIGJX.js +1940 -0
  32. package/dist/chunk-FJYLIGJX.js.map +1 -0
  33. package/dist/chunk-JSCDE774.cjs +729 -0
  34. package/dist/chunk-JSCDE774.cjs.map +1 -0
  35. package/dist/chunk-LWECRCW2.cjs +2412 -0
  36. package/dist/chunk-LWECRCW2.cjs.map +1 -0
  37. package/dist/chunk-MLBMYKCG.js +6379 -0
  38. package/dist/chunk-MLBMYKCG.js.map +1 -0
  39. package/dist/chunk-OX6QXFMV.cjs +3874 -0
  40. package/dist/chunk-OX6QXFMV.cjs.map +1 -0
  41. package/dist/chunk-PHV2DKRS.cjs +1072 -0
  42. package/dist/chunk-PHV2DKRS.cjs.map +1 -0
  43. package/dist/chunk-PL7TAYKI.js +4056 -0
  44. package/dist/chunk-PL7TAYKI.js.map +1 -0
  45. package/dist/chunk-PR647I7R.js +1898 -0
  46. package/dist/chunk-PR647I7R.js.map +1 -0
  47. package/dist/chunk-QERHVCHC.cjs +2960 -0
  48. package/dist/chunk-QERHVCHC.cjs.map +1 -0
  49. package/dist/chunk-XEG44RF6.cjs +1514 -0
  50. package/dist/chunk-XEG44RF6.cjs.map +1 -0
  51. package/dist/chunk-XMWVME2W.js +2377 -0
  52. package/dist/chunk-XMWVME2W.js.map +1 -0
  53. package/dist/chunk-ZB75FESB.cjs +1979 -0
  54. package/dist/chunk-ZB75FESB.cjs.map +1 -0
  55. package/dist/chunk-ZLW62TJG.cjs +4061 -0
  56. package/dist/chunk-ZLW62TJG.cjs.map +1 -0
  57. package/dist/chunk-ZXKBDFP3.js +4235 -0
  58. package/dist/chunk-ZXKBDFP3.js.map +1 -0
  59. package/dist/core/index.cjs +204 -0
  60. package/dist/core/index.cjs.map +1 -0
  61. package/dist/core/index.d.cts +2 -0
  62. package/dist/core/index.d.ts +2 -0
  63. package/dist/core/index.js +3 -0
  64. package/dist/core/index.js.map +1 -0
  65. package/dist/dataframe/index.cjs +22 -0
  66. package/dist/dataframe/index.cjs.map +1 -0
  67. package/dist/dataframe/index.d.cts +3 -0
  68. package/dist/dataframe/index.d.ts +3 -0
  69. package/dist/dataframe/index.js +5 -0
  70. package/dist/dataframe/index.js.map +1 -0
  71. package/dist/datasets/index.cjs +134 -0
  72. package/dist/datasets/index.cjs.map +1 -0
  73. package/dist/datasets/index.d.cts +3 -0
  74. package/dist/datasets/index.d.ts +3 -0
  75. package/dist/datasets/index.js +5 -0
  76. package/dist/datasets/index.js.map +1 -0
  77. package/dist/index-74AB8Cyh.d.cts +1126 -0
  78. package/dist/index-9oQx1HgV.d.cts +1180 -0
  79. package/dist/index-BJY2SI4i.d.ts +483 -0
  80. package/dist/index-BWGhrDlr.d.ts +733 -0
  81. package/dist/index-B_DK4FKY.d.cts +242 -0
  82. package/dist/index-BbA2Gxfl.d.ts +456 -0
  83. package/dist/index-BgHYAoSS.d.cts +837 -0
  84. package/dist/index-BndMbqsM.d.ts +1439 -0
  85. package/dist/index-C1mfVYoo.d.ts +2517 -0
  86. package/dist/index-CCvlwAmL.d.cts +809 -0
  87. package/dist/index-CDw5CnOU.d.ts +785 -0
  88. package/dist/index-Cn3SdB0O.d.ts +1126 -0
  89. package/dist/index-CrqLlS-a.d.ts +776 -0
  90. package/dist/index-D61yaSMY.d.cts +483 -0
  91. package/dist/index-D9Loo1_A.d.cts +2517 -0
  92. package/dist/index-DIT_OO9C.d.cts +785 -0
  93. package/dist/index-DIp_RrRt.d.ts +242 -0
  94. package/dist/index-DbultU6X.d.cts +1427 -0
  95. package/dist/index-DmEg_LCm.d.cts +776 -0
  96. package/dist/index-DoPWVxPo.d.cts +1439 -0
  97. package/dist/index-DuCxd-8d.d.ts +837 -0
  98. package/dist/index-Dx42TZaY.d.ts +809 -0
  99. package/dist/index-DyZ4QQf5.d.cts +456 -0
  100. package/dist/index-GFAVyOWO.d.ts +1427 -0
  101. package/dist/index-WHQLn0e8.d.cts +733 -0
  102. package/dist/index-ZtI1Iy4L.d.ts +1180 -0
  103. package/dist/index-eJgeni9c.d.cts +1911 -0
  104. package/dist/index-tk4lSYod.d.ts +1911 -0
  105. package/dist/index.cjs +72 -0
  106. package/dist/index.cjs.map +1 -0
  107. package/dist/index.d.cts +17 -0
  108. package/dist/index.d.ts +17 -0
  109. package/dist/index.js +15 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/linalg/index.cjs +86 -0
  112. package/dist/linalg/index.cjs.map +1 -0
  113. package/dist/linalg/index.d.cts +3 -0
  114. package/dist/linalg/index.d.ts +3 -0
  115. package/dist/linalg/index.js +5 -0
  116. package/dist/linalg/index.js.map +1 -0
  117. package/dist/metrics/index.cjs +158 -0
  118. package/dist/metrics/index.cjs.map +1 -0
  119. package/dist/metrics/index.d.cts +3 -0
  120. package/dist/metrics/index.d.ts +3 -0
  121. package/dist/metrics/index.js +5 -0
  122. package/dist/metrics/index.js.map +1 -0
  123. package/dist/ml/index.cjs +87 -0
  124. package/dist/ml/index.cjs.map +1 -0
  125. package/dist/ml/index.d.cts +3 -0
  126. package/dist/ml/index.d.ts +3 -0
  127. package/dist/ml/index.js +6 -0
  128. package/dist/ml/index.js.map +1 -0
  129. package/dist/ndarray/index.cjs +501 -0
  130. package/dist/ndarray/index.cjs.map +1 -0
  131. package/dist/ndarray/index.d.cts +5 -0
  132. package/dist/ndarray/index.d.ts +5 -0
  133. package/dist/ndarray/index.js +4 -0
  134. package/dist/ndarray/index.js.map +1 -0
  135. package/dist/nn/index.cjs +142 -0
  136. package/dist/nn/index.cjs.map +1 -0
  137. package/dist/nn/index.d.cts +6 -0
  138. package/dist/nn/index.d.ts +6 -0
  139. package/dist/nn/index.js +5 -0
  140. package/dist/nn/index.js.map +1 -0
  141. package/dist/optim/index.cjs +77 -0
  142. package/dist/optim/index.cjs.map +1 -0
  143. package/dist/optim/index.d.cts +4 -0
  144. package/dist/optim/index.d.ts +4 -0
  145. package/dist/optim/index.js +4 -0
  146. package/dist/optim/index.js.map +1 -0
  147. package/dist/plot/index.cjs +114 -0
  148. package/dist/plot/index.cjs.map +1 -0
  149. package/dist/plot/index.d.cts +6 -0
  150. package/dist/plot/index.d.ts +6 -0
  151. package/dist/plot/index.js +5 -0
  152. package/dist/plot/index.js.map +1 -0
  153. package/dist/preprocess/index.cjs +82 -0
  154. package/dist/preprocess/index.cjs.map +1 -0
  155. package/dist/preprocess/index.d.cts +4 -0
  156. package/dist/preprocess/index.d.ts +4 -0
  157. package/dist/preprocess/index.js +5 -0
  158. package/dist/preprocess/index.js.map +1 -0
  159. package/dist/random/index.cjs +74 -0
  160. package/dist/random/index.cjs.map +1 -0
  161. package/dist/random/index.d.cts +3 -0
  162. package/dist/random/index.d.ts +3 -0
  163. package/dist/random/index.js +5 -0
  164. package/dist/random/index.js.map +1 -0
  165. package/dist/stats/index.cjs +142 -0
  166. package/dist/stats/index.cjs.map +1 -0
  167. package/dist/stats/index.d.cts +3 -0
  168. package/dist/stats/index.d.ts +3 -0
  169. package/dist/stats/index.js +5 -0
  170. package/dist/stats/index.js.map +1 -0
  171. package/dist/tensor-B96jjJLQ.d.cts +205 -0
  172. package/dist/tensor-B96jjJLQ.d.ts +205 -0
  173. package/package.json +226 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/stats/index.ts","../src/stats/_internal.ts","../src/stats/correlation.ts","../src/stats/descriptive.ts","../src/stats/tests.ts"],"names":["outShape","mean","out","cov","z","variance","std","quantile","F"],"mappings":"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","file":"chunk-XMWVME2W.js","sourcesContent":["// Correlation\nexport { corrcoef, cov, kendalltau, pearsonr, spearmanr } from \"./correlation\";\n\n// Descriptive\nexport {\n geometricMean,\n harmonicMean,\n kurtosis,\n mean,\n median,\n mode,\n moment,\n percentile,\n quantile,\n skewness,\n std,\n trimMean,\n variance,\n} from \"./descriptive\";\n\n// Tests\nexport type { TestResult } from \"./tests\";\nexport {\n anderson,\n bartlett,\n chisquare,\n f_oneway,\n friedmanchisquare,\n kruskal,\n kstest,\n levene,\n mannwhitneyu,\n normaltest,\n shapiro,\n ttest_1samp,\n ttest_ind,\n ttest_rel,\n wilcoxon,\n} from \"./tests\";\n","/**\n * Internal utilities for the stats package.\n *\n * This module contains internal helper functions used by the stats package.\n * Functions are exported for use by other stats modules but are not part\n * of the stable public API exported from `src/stats/index.ts`.\n *\n * Some functions (particularly CDFs and special functions like `normalCdf`,\n * `studentTCdf`, `logGamma`, etc.) may be promoted to the public API in\n * future versions if there is user demand.\n *\n * @internal\n * @module stats/_internal\n */\n\nimport type { Axis, Shape } from \"../core\";\nimport {\n DTypeError,\n getElementAsNumber,\n InvalidParameterError,\n normalizeAxis,\n ShapeError,\n validateShape,\n} from \"../core\";\n\nimport { Tensor } from \"../ndarray\";\n\n/**\n * Type representing axis specification for reduction operations.\n * Can be a single axis number/alias or an array of axis numbers/aliases.\n *\n * @example\n * ```ts\n * const axis1: AxisLike = 0; // Single axis\n * const axis2: AxisLike = [0, 1]; // Multiple axes\n * const axis3: AxisLike = \"rows\"; // Alias\n * ```\n */\nexport type AxisLike = Axis | readonly Axis[];\n\n/**\n * Normalizes axis specification to a sorted array of non-negative axis indices.\n *\n * Converts negative indices to positive, validates bounds, removes duplicates,\n * and returns a sorted array. Returns empty array if axis is undefined.\n *\n * @param axis - Axis specification (single number, array, or undefined)\n * @param ndim - Number of dimensions in the tensor\n * @returns Sorted array of unique, non-negative axis indices\n * @throws {RangeError} If any axis is out of bounds for the given ndim\n *\n * @example\n * ```ts\n * normalizeAxes([-1], 3); // Returns [2]\n * normalizeAxes([1, 0, 1], 3); // Returns [0, 1] (sorted, deduplicated)\n * normalizeAxes(undefined, 3); // Returns []\n * ```\n */\nexport function normalizeAxes(axis: AxisLike | undefined, ndim: number): readonly number[] {\n if (axis === undefined) return [];\n const axesInput: Axis[] = Array.isArray(axis) ? [...axis] : [axis];\n\n const seen = new Set<number>();\n const result: number[] = [];\n\n for (const ax of axesInput) {\n const norm = normalizeAxis(ax, ndim);\n if (!seen.has(norm)) {\n seen.add(norm);\n result.push(norm);\n }\n }\n\n // Sort for consistency with previous behavior\n return result.sort((a, b) => a - b);\n}\n\n/**\n * Computes the output shape after reduction along specified axes.\n *\n * When keepdims=true, reduced dimensions become 1.\n * When keepdims=false, reduced dimensions are removed entirely.\n *\n * @param shape - Original tensor shape\n * @param axes - Axes to reduce over (must be normalized)\n * @param keepdims - Whether to keep reduced dimensions as size 1\n * @returns New shape after reduction\n * @throws {ShapeError} If shape dimensions are invalid\n *\n * @example\n * ```ts\n * reducedShape([3, 4, 5], [1], false); // [3, 5]\n * reducedShape([3, 4, 5], [1], true); // [3, 1, 5]\n * reducedShape([3, 4, 5], [], false); // []\n * reducedShape([3, 4, 5], [], true); // [1, 1, 1]\n * ```\n */\nexport function reducedShape(shape: Shape, axes: readonly number[], keepdims: boolean): Shape {\n if (axes.length === 0) {\n return keepdims ? new Array<number>(shape.length).fill(1) : [];\n }\n\n const reduce = new Set(axes);\n const out: number[] = [];\n\n for (let i = 0; i < shape.length; i++) {\n const d = shape[i];\n if (d === undefined) throw new ShapeError(\"Internal error: missing shape dimension\");\n\n if (reduce.has(i)) {\n if (keepdims) out.push(1);\n } else {\n out.push(d);\n }\n }\n\n validateShape(out);\n return out;\n}\n\n/**\n * Computes row-major (C-order) strides for a given shape.\n *\n * Strides define how many elements to skip in memory to move one position\n * along each dimension. Computed in row-major order where the last dimension\n * is contiguous in memory.\n *\n * @param shape - Tensor shape\n * @returns Array of strides for each dimension\n *\n * @example\n * ```ts\n * computeStrides([3, 4, 5]); // Returns [20, 5, 1]\n * computeStrides([2, 3]); // Returns [3, 1]\n * ```\n */\nexport function computeStrides(shape: readonly number[]): readonly number[] {\n const strides = new Array<number>(shape.length);\n let stride = 1;\n for (let i = shape.length - 1; i >= 0; i--) {\n strides[i] = stride;\n stride *= shape[i] ?? 0;\n }\n return strides;\n}\n\n/**\n * Asserts that two tensors have the same total number of elements.\n *\n * Used for operations that require element-wise correspondence between tensors,\n * regardless of their shapes (e.g., correlation between flattened arrays).\n *\n * @param a - First tensor\n * @param b - Second tensor\n * @param name - Name of the calling function (for error messages)\n * @throws {InvalidParameterError} If tensors have different sizes\n *\n * @example\n * ```ts\n * assertSameSize(tensor([1, 2, 3]), tensor([4, 5, 6]), \"pearsonr\"); // OK\n * assertSameSize(tensor([1, 2]), tensor([3, 4, 5]), \"pearsonr\"); // Throws\n * ```\n */\nexport function assertSameSize(a: Tensor, b: Tensor, name: string): void {\n if (a.size !== b.size) {\n throw new InvalidParameterError(\n `${name}: tensors must have the same number of elements; got ${a.size} and ${b.size}`,\n \"size\",\n { a: a.size, b: b.size }\n );\n }\n}\n\n/**\n * Extracts a numeric value from a tensor at a specific memory offset.\n *\n * Handles type conversion from bigint to number and validates dtype.\n * This is a low-level accessor used by reduction operations.\n *\n * @param t - Tensor to read from\n * @param offset - Memory offset in the underlying data array\n * @returns Numeric value at the offset\n * @throws {DTypeError} If tensor has string dtype\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3]);\n * getNumberAt(t, t.offset + 1); // Returns 2\n * ```\n */\nexport function getNumberAt(t: Tensor, offset: number): number {\n if (t.dtype === \"string\" || Array.isArray(t.data)) {\n throw new DTypeError(\"operation not supported for string dtype\");\n }\n\n return getElementAsNumber(t.data, offset);\n}\n\n/**\n * Assigns average ranks to values with tie tracking.\n *\n * Ranks are 1-indexed. Ties receive the average of their rank positions.\n * Returns the sum of (t^3 - t) over tied groups, which is used for tie correction.\n *\n * @param values - Input values to rank\n * @returns Object containing ranks and tie sum\n */\nexport function rankData(values: Float64Array): {\n ranks: Float64Array;\n tieSum: number;\n} {\n const n = values.length;\n const ranks = new Float64Array(n);\n if (n === 0) return { ranks, tieSum: 0 };\n\n const sorted = Array.from(values, (v, i) => ({ v, i })).sort((a, b) => a.v - b.v);\n let tieSum = 0;\n\n for (let i = 0; i < sorted.length; ) {\n let j = i + 1;\n while (j < sorted.length && sorted[j]?.v === sorted[i]?.v) {\n j++;\n }\n const t = j - i;\n const avgRank = (i + 1 + j) / 2;\n for (let k = i; k < j; k++) {\n const idx = sorted[k]?.i;\n if (idx !== undefined) {\n ranks[idx] = avgRank;\n }\n }\n if (t > 1) tieSum += t * t * t - t;\n i = j;\n }\n\n return { ranks, tieSum };\n}\n\n/**\n * Iterates over all elements in a tensor, calling a function with offset and index.\n *\n * Handles arbitrary tensor shapes and strides, iterating in row-major order.\n * This is the core iteration primitive used by all reduction operations.\n *\n * @param t - Tensor to iterate over\n * @param fn - Callback function receiving (offset, index) for each element\n *\n * @example\n * ```ts\n * const t = tensor([[1, 2], [3, 4]]);\n * forEachIndexOffset(t, (offset, idx) => {\n * console.log(`idx=${idx}, value=${t.data[offset]}`);\n * });\n * // Outputs: idx=[0,0], value=1\n * // idx=[0,1], value=2\n * // idx=[1,0], value=3\n * // idx=[1,1], value=4\n * ```\n */\nexport function forEachIndexOffset(\n t: Tensor,\n fn: (offset: number, idx: readonly number[]) => void\n): void {\n if (t.size === 0) return;\n\n if (t.ndim === 0) {\n fn(t.offset, []);\n return;\n }\n\n const shape = t.shape;\n const strides = t.strides;\n const idx = new Array<number>(t.ndim).fill(0);\n let offset = t.offset;\n\n while (true) {\n fn(offset, idx);\n\n // Odometer increment from last axis.\n let axis = t.ndim - 1;\n for (;;) {\n idx[axis] = (idx[axis] ?? 0) + 1;\n offset += strides[axis] ?? 0;\n\n const dim = shape[axis] ?? 0;\n if ((idx[axis] ?? 0) < dim) break;\n\n // carry\n offset -= (idx[axis] ?? 0) * (strides[axis] ?? 0);\n idx[axis] = 0;\n axis--;\n if (axis < 0) return;\n }\n }\n}\n\n/**\n * Computes the arithmetic mean along specified axes.\n *\n * Uses a simple sum-based approach for numerical stability.\n * This is an internal function used by the public mean() API.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes to reduce over (undefined means all)\n * @param keepdims - Whether to keep reduced dimensions as size 1\n * @returns Tensor containing mean values\n * @throws {InvalidParameterError} If tensor is empty or reduction over empty axis\n *\n * @example\n * ```ts\n * const t = tensor([[1, 2], [3, 4]]);\n * reduceMean(t, undefined, false); // Returns tensor([2.5])\n * reduceMean(t, 0, false); // Returns tensor([2, 3])\n * ```\n */\nexport function reduceMean(t: Tensor, axis: AxisLike | undefined, keepdims: boolean): Tensor {\n const axes = normalizeAxes(axis, t.ndim);\n if (axes.length === 0) {\n // Full reduction.\n if (t.size === 0) {\n throw new InvalidParameterError(\"mean() requires at least one element\", \"size\", t.size);\n }\n\n let sum = 0;\n forEachIndexOffset(t, (off) => {\n sum += getNumberAt(t, off);\n });\n\n const out = new Float64Array(1);\n out[0] = sum / t.size;\n\n const outShape = keepdims ? new Array<number>(t.ndim).fill(1) : [];\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n }\n\n const outShape = reducedShape(t.shape, axes, keepdims);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const sums = new Float64Array(outSize);\n\n const reduce = new Set<number>(axes);\n const reduceCount = axes.reduce((acc, ax) => acc * (t.shape[ax] ?? 0), 1);\n if (reduceCount === 0) {\n throw new InvalidParameterError(\n \"mean() reduction over empty axis is undefined\",\n \"reduceCount\",\n reduceCount\n );\n }\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n if (keepdims) {\n // outShape has same rank as input.\n for (let i = 0; i < t.ndim; i++) {\n const s = outStrides[i] ?? 0;\n const v = reduce.has(i) ? 0 : (idx[i] ?? 0);\n outFlat += v * s;\n }\n } else {\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n }\n\n sums[outFlat] = (sums[outFlat] ?? 0) + getNumberAt(t, off);\n });\n\n for (let i = 0; i < sums.length; i++) {\n sums[i] = (sums[i] ?? 0) / reduceCount;\n }\n\n return Tensor.fromTypedArray({\n data: sums,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes variance along specified axes using Welford's online algorithm.\n *\n * Welford's algorithm provides numerical stability for variance computation\n * by avoiding catastrophic cancellation that occurs with the naive two-pass method.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes to reduce over (undefined means all)\n * @param keepdims - Whether to keep reduced dimensions as size 1\n * @param ddof - Delta degrees of freedom (0 for population, 1 for sample variance)\n * @returns Tensor containing variance values\n * @throws {InvalidParameterError} If tensor is empty, ddof >= sample size, or reduction over empty axis\n * @throws {DTypeError} If tensor has string dtype\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * reduceVariance(t, undefined, false, 1); // Sample variance\n * reduceVariance(t, undefined, false, 0); // Population variance\n * ```\n */\nexport function reduceVariance(\n t: Tensor,\n axis: AxisLike | undefined,\n keepdims: boolean,\n ddof: number\n): Tensor {\n const axes = normalizeAxes(axis, t.ndim);\n\n if (t.dtype === \"string\") {\n throw new DTypeError(\"variance() not supported for string dtype\");\n }\n\n if (axes.length === 0) {\n if (t.size === 0) {\n throw new InvalidParameterError(\"variance() requires at least one element\", \"size\", t.size);\n }\n if (ddof < 0) {\n throw new InvalidParameterError(\"ddof must be non-negative\", \"ddof\", ddof);\n }\n if (t.size <= ddof) {\n throw new InvalidParameterError(\n `ddof=${ddof} >= size=${t.size}, variance undefined`,\n \"ddof\",\n ddof\n );\n }\n\n // Welford's online algorithm for numerically stable variance computation\n // Maintains running mean and sum of squared deviations (M2)\n let mean = 0; // Running mean\n let m2 = 0; // Sum of squared deviations from mean\n let n = 0; // Count of elements processed\n forEachIndexOffset(t, (off) => {\n const x = getNumberAt(t, off);\n n++;\n const delta = x - mean; // Deviation from old mean\n mean += delta / n; // Update mean incrementally\n const delta2 = x - mean; // Deviation from new mean\n m2 += delta * delta2; // Update M2 (numerically stable)\n });\n\n const out = new Float64Array(1);\n out[0] = m2 / (n - ddof);\n\n const outShape = keepdims ? new Array<number>(t.ndim).fill(1) : [];\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n }\n\n const outShape = reducedShape(t.shape, axes, keepdims);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n\n const reduce = new Set<number>(axes);\n const reduceCount = axes.reduce((acc, ax) => acc * (t.shape[ax] ?? 0), 1);\n if (reduceCount === 0) {\n throw new InvalidParameterError(\n \"variance() reduction over empty axis is undefined\",\n \"reduceCount\",\n reduceCount\n );\n }\n if (ddof < 0) {\n throw new InvalidParameterError(\"ddof must be non-negative\", \"ddof\", ddof);\n }\n if (reduceCount <= ddof) {\n throw new InvalidParameterError(\n `ddof=${ddof} >= reduced size=${reduceCount}, variance undefined`,\n \"ddof\",\n ddof\n );\n }\n\n const means = new Float64Array(outSize);\n const m2s = new Float64Array(outSize);\n const counts = new Int32Array(outSize);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n if (keepdims) {\n for (let i = 0; i < t.ndim; i++) {\n const s = outStrides[i] ?? 0;\n const v = reduce.has(i) ? 0 : (idx[i] ?? 0);\n outFlat += v * s;\n }\n } else {\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n }\n\n const x = getNumberAt(t, off);\n const n = (counts[outFlat] ?? 0) + 1;\n counts[outFlat] = n;\n\n const mean = means[outFlat] ?? 0;\n const delta = x - mean;\n const nextMean = mean + delta / n;\n means[outFlat] = nextMean;\n const delta2 = x - nextMean;\n m2s[outFlat] = (m2s[outFlat] ?? 0) + delta * delta2;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n const n = counts[i] ?? 0;\n out[i] = (m2s[i] ?? 0) / (n - ddof);\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n// ---- Special functions for distribution CDFs ----\n\n/**\n * Lanczos approximation coefficients for gamma function (g=7, n=9).\n * These constants provide high-precision approximation of the gamma function.\n */\nconst LANCZOS_COEFFS: readonly number[] = [\n 0.99999999999980993, 676.5203681218851, -1259.1392167224028, 771.3234287776531,\n -176.6150291621406, 12.507343278686905, -0.13857109526572012, 0.000009984369578019572,\n 1.5056327351493116e-7,\n];\n\n/**\n * Computes the natural logarithm of the gamma function: ln(Γ(z)).\n *\n * Uses Lanczos approximation for z >= 0.5 and reflection formula for z < 0.5.\n * The gamma function extends the factorial to real and complex numbers:\n * Γ(n) = (n-1)! for positive integers n.\n *\n * @param z - Input value (real number)\n * @returns Natural logarithm of gamma function at z\n *\n * @example\n * ```ts\n * logGamma(5); // Returns ln(4!) = ln(24) ≈ 3.178\n * logGamma(0.5); // Returns ln(√π) ≈ 0.572\n * ```\n */\nexport function logGamma(z: number): number {\n if (z < 0.5) {\n // Use reflection formula: Γ(z)Γ(1-z) = π/sin(πz)\n // Therefore: ln(Γ(z)) = ln(π) - ln(sin(πz)) - ln(Γ(1-z))\n return Math.log(Math.PI) - Math.log(Math.sin(Math.PI * z)) - logGamma(1 - z);\n }\n\n // Lanczos approximation for z >= 0.5\n z -= 1; // Shift z for Lanczos formula\n let x = LANCZOS_COEFFS[0] ?? 0; // Start with first coefficient\n // Sum the series: x = c0 + c1/(z+1) + c2/(z+2) + ... + c8/(z+8)\n for (let i = 1; i < LANCZOS_COEFFS.length; i++) {\n x += (LANCZOS_COEFFS[i] ?? 0) / (z + i);\n }\n\n const t = z + 7.5; // g + 0.5 where g=7\n // Final Lanczos formula: ln(Γ(z+1)) = 0.5*ln(2π) + (z+0.5)*ln(t) - t + ln(x)\n return 0.5 * Math.log(2 * Math.PI) + (z + 0.5) * Math.log(t) - t + Math.log(x);\n}\n\n/**\n * Evaluates continued fraction for incomplete beta function.\n *\n * Uses Lentz's algorithm for evaluating continued fractions.\n * This is a helper function for regularizedIncompleteBeta.\n *\n * @param a - First shape parameter\n * @param b - Second shape parameter\n * @param x - Evaluation point in [0, 1]\n * @returns Continued fraction value\n */\nfunction betacf(a: number, b: number, x: number): number {\n const MAX_ITER = 200; // Maximum iterations for convergence\n const EPS = 3e-14; // Convergence threshold\n const FPMIN = 1e-300; // Minimum floating point value to prevent division by zero\n\n // Precompute common terms\n const qab = a + b;\n const qap = a + 1;\n const qam = a - 1;\n\n // Initialize Lentz's algorithm\n let c = 1;\n let d = 1 - (qab * x) / qap;\n if (Math.abs(d) < FPMIN) d = FPMIN; // Prevent division by zero\n d = 1 / d;\n let h = d; // Accumulated result\n\n // Iterate using modified Lentz's method\n for (let m = 1; m <= MAX_ITER; m++) {\n const m2 = 2 * m;\n\n // Even step of continued fraction\n let aa = (m * (b - m) * x) / ((qam + m2) * (a + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < FPMIN) d = FPMIN;\n c = 1 + aa / c;\n if (Math.abs(c) < FPMIN) c = FPMIN;\n d = 1 / d;\n h *= d * c;\n\n // Odd step of continued fraction\n aa = (-(a + m) * (qab + m) * x) / ((a + m2) * (qap + m2));\n d = 1 + aa * d;\n if (Math.abs(d) < FPMIN) d = FPMIN;\n c = 1 + aa / c;\n if (Math.abs(c) < FPMIN) c = FPMIN;\n d = 1 / d;\n const del = d * c;\n h *= del;\n\n // Check for convergence\n if (Math.abs(del - 1.0) < EPS) break;\n }\n\n return h;\n}\n\n/**\n * Computes the regularized incomplete beta function I_x(a, b).\n *\n * The regularized incomplete beta function is defined as:\n * I_x(a, b) = B(x; a, b) / B(a, b)\n * where B(x; a, b) is the incomplete beta function and B(a, b) is the beta function.\n *\n * Used in computing CDFs for beta, F, and t distributions.\n *\n * @param a - First shape parameter (must be > 0)\n * @param b - Second shape parameter (must be > 0)\n * @param x - Evaluation point in [0, 1]\n * @returns Value of I_x(a, b) in [0, 1]\n * @throws {InvalidParameterError} If parameters are outside their valid ranges\n *\n * @example\n * ```ts\n * regularizedIncompleteBeta(2, 3, 0.5); // Returns ~0.6875\n * ```\n */\nexport function regularizedIncompleteBeta(a: number, b: number, x: number): number {\n if (!Number.isFinite(a) || a <= 0) {\n throw new InvalidParameterError(\"a must be > 0\", \"a\", a);\n }\n if (!Number.isFinite(b) || b <= 0) {\n throw new InvalidParameterError(\"b must be > 0\", \"b\", b);\n }\n // Validate input range\n if (x < 0 || x > 1) {\n throw new InvalidParameterError(\"x must be in [0,1]\", \"x\", x);\n }\n // Handle boundary cases\n if (x === 0) return 0;\n if (x === 1) return 1;\n\n // Compute ln(B(x; a, b)) = ln(Γ(a+b)) - ln(Γ(a)) - ln(Γ(b)) + a*ln(x) + b*ln(1-x)\n const lnBt = logGamma(a + b) - logGamma(a) - logGamma(b) + a * Math.log(x) + b * Math.log(1 - x);\n const bt = Math.exp(lnBt);\n\n // Use symmetry relation to ensure x is in the more stable region\n if (x < (a + 1) / (a + b + 2)) {\n // Direct evaluation\n return (bt * betacf(a, b, x)) / a;\n }\n // Use symmetry: I_x(a,b) = 1 - I_(1-x)(b,a)\n return 1 - (bt * betacf(b, a, 1 - x)) / b;\n}\n\n/**\n * Computes the regularized lower incomplete gamma function P(s, x).\n *\n * P(s, x) = γ(s, x) / Γ(s) where γ(s, x) is the lower incomplete gamma function.\n * This represents the CDF of the gamma distribution.\n *\n * @param s - Shape parameter (must be > 0)\n * @param x - Evaluation point (must be >= 0)\n * @returns Value of P(s, x) in [0, 1]\n * @throws {InvalidParameterError} If parameters are outside their valid ranges\n */\nfunction regularizedLowerIncompleteGamma(s: number, x: number): number {\n // Validate input\n if (!Number.isFinite(s) || s <= 0) {\n throw new InvalidParameterError(\"s must be > 0\", \"s\", s);\n }\n if (x < 0) throw new InvalidParameterError(\"x must be >= 0\", \"x\", x);\n if (x === 0) return 0;\n\n const ITMAX = 200; // Maximum iterations\n const EPS = 3e-14; // Convergence threshold\n const FPMIN = 1e-300; // Minimum floating point value\n\n if (x < s + 1) {\n // Use series representation for x < s + 1 (more stable)\n // P(s,x) = e^(-x) * x^s / Γ(s) * Σ(x^n / Γ(s+n+1))\n let sum = 1 / s;\n let del = sum;\n let ap = s;\n\n for (let n = 1; n <= ITMAX; n++) {\n ap += 1;\n del *= x / ap;\n sum += del;\n if (Math.abs(del) < Math.abs(sum) * EPS) break; // Converged\n }\n\n // Multiply by normalization factor\n return sum * Math.exp(-x + s * Math.log(x) - logGamma(s));\n }\n\n // Use continued fraction for Q(s, x) = 1 - P(s, x) when x >= s + 1\n // This is more numerically stable in this region\n let b = x + 1 - s;\n let c = 1 / FPMIN;\n let d = 1 / b;\n let h = d;\n\n // Evaluate continued fraction using Lentz's algorithm\n for (let i = 1; i <= ITMAX; i++) {\n const an = -i * (i - s);\n b += 2;\n d = an * d + b;\n if (Math.abs(d) < FPMIN) d = FPMIN;\n c = b + an / c;\n if (Math.abs(c) < FPMIN) c = FPMIN;\n d = 1 / d;\n const del = d * c;\n h *= del;\n if (Math.abs(del - 1) < EPS) break; // Converged\n }\n\n // Compute Q(s, x) and return P(s, x) = 1 - Q(s, x)\n const q = Math.exp(-x + s * Math.log(x) - logGamma(s)) * h;\n return 1 - q;\n}\n\n/**\n * Computes the cumulative distribution function (CDF) of the standard normal distribution.\n *\n * Uses Abramowitz & Stegun approximation via error function.\n * Φ(x) = 0.5 * (1 + erf(x/√2))\n *\n * @param x - Input value\n * @returns Probability P(X <= x) where X ~ N(0, 1)\n *\n * @example\n * ```ts\n * normalCdf(0); // Returns 0.5\n * normalCdf(1.96); // Returns ~0.975 (95th percentile)\n * normalCdf(-1.96); // Returns ~0.025 (5th percentile)\n * ```\n */\nexport function normalCdf(x: number): number {\n // Abramowitz & Stegun approximation via error function\n // erf(x) ≈ sign(x) * sqrt(1 - exp(-x^2 * (4/π + ax^2) / (1 + ax^2)))\n const a = 0.147; // Approximation parameter\n const sign = x < 0 ? -1 : 1;\n const ax = Math.abs(x) / Math.SQRT2; // Scale by 1/√2 for erf\n const t = 1 + a * ax * ax;\n const erf = sign * Math.sqrt(1 - Math.exp(-ax * ax * ((4 / Math.PI + a * ax * ax) / t)));\n // Convert erf to CDF: Φ(x) = 0.5 * (1 + erf(x/√2))\n return 0.5 * (1 + erf);\n}\n\n/**\n * Computes the cumulative distribution function (CDF) of Student's t-distribution.\n *\n * Uses the relationship between t-distribution and incomplete beta function:\n * F_t(t; ν) = 0.5 * I_x(ν/2, 1/2) where x = ν/(ν + t²)\n *\n * @param t - t-statistic value\n * @param df - Degrees of freedom (must be > 0)\n * @returns Probability P(T <= t) where T ~ t(df)\n * @throws {InvalidParameterError} If df <= 0\n *\n * @example\n * ```ts\n * studentTCdf(0, 10); // Returns 0.5 (symmetric at 0)\n * studentTCdf(2.228, 10); // Returns ~0.975 (95th percentile for df=10)\n * ```\n */\nexport function studentTCdf(t: number, df: number): number {\n // Validate degrees of freedom\n if (!Number.isFinite(df) || df <= 0) {\n throw new InvalidParameterError(\"df must be > 0\", \"df\", df);\n }\n // Handle infinite t-values\n if (Number.isNaN(t)) return NaN;\n if (!Number.isFinite(t)) return t < 0 ? 0 : 1;\n\n // Transform to incomplete beta function parameter\n const x = df / (df + t * t);\n const a = df / 2;\n const b = 0.5;\n const ib = regularizedIncompleteBeta(a, b, x);\n const p = 0.5 * ib;\n // Use symmetry of t-distribution around 0\n return t >= 0 ? 1 - p : p;\n}\n\n/**\n * Computes the cumulative distribution function (CDF) of the chi-square distribution.\n *\n * Uses the relationship: χ²(x; k) = P(k/2, x/2)\n * where P is the regularized lower incomplete gamma function.\n *\n * @param x - Chi-square statistic (must be >= 0)\n * @param k - Degrees of freedom (must be > 0)\n * @returns Probability P(X <= x) where X ~ χ²(k)\n * @throws {InvalidParameterError} If k <= 0\n *\n * @example\n * ```ts\n * chiSquareCdf(3.841, 1); // Returns ~0.95 (95th percentile for df=1)\n * chiSquareCdf(0, 5); // Returns 0\n * ```\n */\nexport function chiSquareCdf(x: number, k: number): number {\n // Validate degrees of freedom\n if (!Number.isFinite(k) || k <= 0) {\n throw new InvalidParameterError(\"degrees of freedom must be > 0\", \"k\", k);\n }\n if (Number.isNaN(x)) return NaN;\n if (x === Infinity) return 1;\n // Chi-square is non-negative\n if (x <= 0) return 0;\n // Use gamma CDF relationship: χ²(k) is Gamma(k/2, 2)\n return regularizedLowerIncompleteGamma(k / 2, x / 2);\n}\n\n/**\n * Computes the cumulative distribution function (CDF) of the F-distribution.\n *\n * Uses the relationship between F-distribution and incomplete beta function:\n * F(x; d₁, d₂) = I_y(d₁/2, d₂/2) where y = (d₁*x)/(d₁*x + d₂)\n *\n * @param x - F-statistic value (must be >= 0)\n * @param dfn - Numerator degrees of freedom (must be > 0)\n * @param dfd - Denominator degrees of freedom (must be > 0)\n * @returns Probability P(F <= x) where F ~ F(dfn, dfd)\n * @throws {InvalidParameterError} If dfn <= 0 or dfd <= 0\n *\n * @example\n * ```ts\n * fCdf(4.0, 5, 10); // Returns F-distribution CDF at x=4\n * fCdf(0, 5, 10); // Returns 0\n * ```\n */\nexport function fCdf(x: number, dfn: number, dfd: number): number {\n // Validate degrees of freedom\n if (!Number.isFinite(dfn) || dfn <= 0) {\n throw new InvalidParameterError(\"degrees of freedom (dfn) must be > 0\", \"dfn\", dfn);\n }\n if (!Number.isFinite(dfd) || dfd <= 0) {\n throw new InvalidParameterError(\"degrees of freedom (dfd) must be > 0\", \"dfd\", dfd);\n }\n if (Number.isNaN(x)) return NaN;\n if (x === Infinity) return 1;\n // F-statistic is non-negative\n if (x <= 0) return 0;\n\n // Transform to incomplete beta parameter\n const xx = (dfn * x) / (dfn * x + dfd);\n return regularizedIncompleteBeta(dfn / 2, dfd / 2, xx);\n}\n","import { InvalidParameterError, ShapeError } from \"../core\";\nimport { Tensor, tensor } from \"../ndarray\";\nimport {\n assertSameSize,\n forEachIndexOffset,\n getNumberAt,\n normalCdf,\n rankData,\n studentTCdf,\n} from \"./_internal\";\n\n/**\n * Converts a tensor to a dense flat Float64Array.\n * Helper function for correlation computations.\n *\n * @param t - Input tensor\n * @returns Flattened Float64Array containing all tensor values\n */\nfunction toDenseFlatArray(t: Tensor): Float64Array {\n const out = new Float64Array(t.size);\n let i = 0;\n forEachIndexOffset(t, (off) => {\n out[i] = getNumberAt(t, off);\n i++;\n });\n return out;\n}\n\n/**\n * Computes Pearson correlation coefficient from two dense arrays.\n *\n * Uses the standard formula: r = cov(X,Y) / (std(X) * std(Y))\n * Computed efficiently in a single pass.\n *\n * @param x - First array\n * @param y - Second array (must have same length as x)\n * @returns Pearson correlation coefficient in [-1, 1]\n * @throws {InvalidParameterError} If arrays have constant values (zero variance)\n */\nfunction pearsonFromDense(x: Float64Array, y: Float64Array): number {\n const n = x.length;\n // First pass: compute means\n let sumX = 0;\n let sumY = 0;\n for (let i = 0; i < n; i++) {\n sumX += x[i] ?? 0;\n sumY += y[i] ?? 0;\n }\n const meanX = sumX / n;\n const meanY = sumY / n;\n\n // Second pass: compute covariance and variances\n let num = 0; // Numerator: covariance\n let denX = 0; // Denominator: variance of X\n let denY = 0; // Denominator: variance of Y\n for (let i = 0; i < n; i++) {\n const dx = (x[i] ?? 0) - meanX;\n const dy = (y[i] ?? 0) - meanY;\n num += dx * dy; // Sum of products of deviations\n denX += dx * dx; // Sum of squared deviations for X\n denY += dy * dy; // Sum of squared deviations for Y\n }\n\n // Compute correlation: r = cov(X,Y) / (std(X) * std(Y))\n const den = Math.sqrt(denX * denY);\n if (den === 0) {\n throw new InvalidParameterError(\n \"pearsonr() is undefined for constant input\",\n \"input\",\n \"constant\"\n );\n }\n return num / den;\n}\n\n/**\n * Pearson correlation coefficient.\n *\n * Measures linear correlation between two variables.\n *\n * @param x - First tensor\n * @param y - Second tensor (must have same size as x)\n * @returns Tuple of [correlation coefficient in [-1, 1], two-tailed p-value]\n * @throws {InvalidParameterError} If tensors have different sizes, < 2 samples, or constant input\n *\n * @example\n * ```ts\n * const x = tensor([1, 2, 3, 4, 5]);\n * const y = tensor([2, 4, 6, 8, 10]);\n * const [r, p] = pearsonr(x, y); // r = 1.0 (perfect linear)\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs propagate to NaN correlation\n * - Infinity inputs result in NaN correlation\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html | SciPy stats.pearsonr}\n */\nexport function pearsonr(x: Tensor, y: Tensor): [number, number] {\n assertSameSize(x, y, \"pearsonr\");\n const n = x.size;\n if (n < 2) {\n throw new InvalidParameterError(\"pearsonr() requires at least 2 paired samples\", \"n\", n);\n }\n\n const xd = toDenseFlatArray(x);\n const yd = toDenseFlatArray(y);\n const r = pearsonFromDense(xd, yd);\n\n // Compute p-value using t-distribution\n // Under H0: ρ=0, the test statistic t = r*sqrt((n-2)/(1-r²)) follows t(n-2)\n const df = n - 2;\n if (df <= 0) {\n return [r, NaN]; // Cannot compute p-value with < 2 degrees of freedom\n }\n const tStat = r * Math.sqrt(df / (1 - r * r));\n const pValue = 2 * (1 - studentTCdf(Math.abs(tStat), df)); // Two-tailed test\n return [r, pValue];\n}\n\n/**\n * Computes Spearman's rank correlation coefficient.\n *\n * Non-parametric measure of monotonic relationship between two variables.\n * Computed as Pearson correlation of rank values.\n * - ρ = 1: Perfect monotonic increasing relationship\n * - ρ = 0: No monotonic relationship\n * - ρ = -1: Perfect monotonic decreasing relationship\n *\n * @param x - First tensor\n * @param y - Second tensor (must have same size as x)\n * @returns Tuple of [correlation coefficient, p-value]\n * @throws {InvalidParameterError} If tensors have different sizes, < 2 samples, or constant input\n *\n * @example\n * ```ts\n * const x = tensor([1, 2, 3, 4, 5]);\n * const y = tensor([2, 4, 6, 8, 10]);\n * const [rho, p] = spearmanr(x, y); // rho = 1.0 (perfect monotonic)\n * ```\n *\n * @remarks\n * Ties are assigned average ranks.\n * NaN values are ranked according to JavaScript sort behavior.\n * Infinity values are sorted naturally (±Infinity at extremes).\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.spearmanr.html | SciPy stats.spearmanr}\n */\nexport function spearmanr(x: Tensor, y: Tensor): [number, number] {\n assertSameSize(x, y, \"spearmanr\");\n const n = x.size;\n if (n < 2) {\n throw new InvalidParameterError(\"spearmanr() requires at least 2 paired samples\", \"n\", n);\n }\n\n const xd = toDenseFlatArray(x);\n const yd = toDenseFlatArray(y);\n\n // Convert values to average ranks (1-indexed) with tie correction.\n const rankX = rankData(xd).ranks;\n const rankY = rankData(yd).ranks;\n\n // Compute Pearson correlation of ranks\n const rho = pearsonFromDense(rankX, rankY);\n // Test statistic follows t-distribution under H0: ρ=0\n const df = n - 2;\n const tStat = rho * Math.sqrt(df / (1 - rho * rho));\n const pValue = df > 0 ? 2 * (1 - studentTCdf(Math.abs(tStat), df)) : NaN;\n return [rho, pValue];\n}\n\n/**\n * Computes Kendall's tau correlation coefficient.\n *\n * Non-parametric measure of ordinal association based on concordant/discordant pairs.\n * More robust to outliers than Spearman, but computationally more expensive.\n * - τ = 1: All pairs concordant (perfect agreement)\n * - τ = 0: Equal concordant and discordant pairs\n * - τ = -1: All pairs discordant (perfect disagreement)\n *\n * @param x - First tensor\n * @param y - Second tensor (must have same size as x)\n * @returns Tuple of [tau coefficient, p-value]\n * @throws {InvalidParameterError} If tensors have different sizes or < 2 samples\n *\n * @example\n * ```ts\n * const x = tensor([1, 2, 3, 4, 5]);\n * const y = tensor([1, 3, 2, 4, 5]);\n * const [tau, p] = kendalltau(x, y); // Mostly concordant\n * ```\n *\n * @remarks\n * This implementation uses the tau-b variant with tie correction.\n * Ties are excluded from concordant/discordant counts and reduce the denominator.\n * The p-value uses a normal approximation with tie-corrected variance.\n *\n * @complexity O(n²) - suitable for moderate sample sizes (n < 10,000)\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kendalltau.html | SciPy stats.kendalltau}\n */\nexport function kendalltau(x: Tensor, y: Tensor): [number, number] {\n assertSameSize(x, y, \"kendalltau\");\n const n = x.size;\n if (n < 2) {\n throw new InvalidParameterError(\"kendalltau() requires at least 2 paired samples\", \"n\", n);\n }\n\n const xd = toDenseFlatArray(x);\n const yd = toDenseFlatArray(y);\n\n // Count concordant and discordant pairs (ties excluded)\n let concordant = 0;\n let discordant = 0;\n for (let i = 0; i < n - 1; i++) {\n const xi = xd[i] ?? 0;\n const yi = yd[i] ?? 0;\n for (let j = i + 1; j < n; j++) {\n const signX = Math.sign((xd[j] ?? 0) - xi);\n const signY = Math.sign((yd[j] ?? 0) - yi);\n if (signX === 0 || signY === 0) continue;\n if (signX === signY) concordant++;\n else discordant++;\n }\n }\n\n const n0 = (n * (n - 1)) / 2;\n // Tie summaries for tau-b denominator and variance corrections.\n const tieSums = (\n vals: Float64Array\n ): {\n nTies: number;\n sumT: number;\n sumT2: number;\n sumT3: number;\n } => {\n const sorted = Array.from(vals).sort((a, b) => a - b);\n let sumT = 0;\n let sumT2 = 0;\n let sumT3 = 0;\n for (let i = 0; i < sorted.length; ) {\n let j = i + 1;\n while (j < sorted.length && sorted[j] === sorted[i]) j++;\n const t = j - i;\n if (t > 1) {\n sumT += t * (t - 1);\n sumT2 += t * (t - 1) * (2 * t + 5);\n sumT3 += t * (t - 1) * (t - 2);\n }\n i = j;\n }\n return { nTies: sumT / 2, sumT, sumT2, sumT3 };\n };\n\n const tieX = tieSums(xd);\n const tieY = tieSums(yd);\n const denom = Math.sqrt((n0 - tieX.nTies) * (n0 - tieY.nTies));\n const s = concordant - discordant;\n const tau = denom === 0 ? NaN : s / denom;\n\n // Normal approximation for p-value with tie correction\n // Normal approximation variance with tie correction (SciPy-style).\n let varS =\n (n * (n - 1) * (2 * n + 5) - tieX.sumT2 - tieY.sumT2) / 18 +\n (tieX.sumT * tieY.sumT) / (2 * n * (n - 1));\n if (n > 2) {\n varS += (tieX.sumT3 * tieY.sumT3) / (9 * n * (n - 1) * (n - 2));\n }\n\n const pValue = varS <= 0 ? NaN : 2 * (1 - normalCdf(Math.abs(s / Math.sqrt(varS))));\n return [tau, pValue];\n}\n\n/**\n * Computes the Pearson correlation coefficient matrix.\n *\n * For two variables, returns 2x2 correlation matrix.\n * For a 2D tensor, treats each column as a variable and computes pairwise correlations.\n *\n * @param x - Input tensor (1D or 2D)\n * @param y - Optional second tensor (if provided, computes correlation between x and y)\n * @returns Correlation matrix (symmetric with 1s on diagonal)\n * @throws {InvalidParameterError} If < 2 observations or size mismatch\n * @throws {ShapeError} If tensor is not 1D or 2D\n *\n * @example\n * ```ts\n * const x = tensor([1, 2, 3, 4, 5]);\n * const y = tensor([2, 4, 5, 4, 5]);\n * corrcoef(x, y); // Returns [[1.0, 0.8], [0.8, 1.0]]\n *\n * const data = tensor([[1, 2], [3, 4], [5, 6]]);\n * corrcoef(data); // Returns 2x2 correlation matrix for 2 variables\n * ```\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.corrcoef.html | NumPy corrcoef}\n */\nexport function corrcoef(x: Tensor, y?: Tensor): Tensor {\n if (y) {\n const [r] = pearsonr(x, y);\n return tensor([\n [1.0, r],\n [r, 1.0],\n ]);\n }\n\n if (x.ndim === 1) {\n if (x.size < 2) {\n throw new InvalidParameterError(\n \"corrcoef() requires at least 2 observations\",\n \"nObs\",\n x.size\n );\n }\n return tensor([[1.0]]);\n }\n\n if (x.ndim !== 2) {\n throw new ShapeError(\"corrcoef() expects a 1D or 2D tensor\");\n }\n\n // Treat columns as variables (rowvar=false style): shape (nObs, nVar)\n const nObs = x.shape[0] ?? 0; // Number of observations (rows)\n const nVar = x.shape[1] ?? 0; // Number of variables (columns)\n if (nObs < 2) {\n throw new InvalidParameterError(\"corrcoef() requires at least 2 observations\", \"nObs\", nObs);\n }\n\n const s0 = x.strides[0] ?? 0;\n const s1 = x.strides[1] ?? 0;\n const xOff = x.offset;\n const xData = x.data;\n\n // Fast path: direct numeric array access (non-BigInt, non-string)\n const directAccess = !Array.isArray(xData) && !(xData instanceof BigInt64Array);\n\n const means = new Float64Array(nVar);\n if (directAccess) {\n for (let j = 0; j < nVar; j++) {\n let s = 0;\n for (let i = 0; i < nObs; i++) {\n s += xData[xOff + i * s0 + j * s1] as number;\n }\n means[j] = s / nObs;\n }\n } else {\n for (let j = 0; j < nVar; j++) {\n let s = 0;\n for (let i = 0; i < nObs; i++) {\n s += getNumberAt(x, xOff + i * s0 + j * s1);\n }\n means[j] = s / nObs;\n }\n }\n\n const cov = new Float64Array(nVar * nVar);\n const ddof = 1;\n if (directAccess) {\n for (let a = 0; a < nVar; a++) {\n const ma = means[a] as number;\n for (let b = a; b < nVar; b++) {\n const mb = means[b] as number;\n let s = 0;\n for (let i = 0; i < nObs; i++) {\n const base = xOff + i * s0;\n s += ((xData[base + a * s1] as number) - ma) * ((xData[base + b * s1] as number) - mb);\n }\n const v = s / (nObs - ddof);\n cov[a * nVar + b] = v;\n cov[b * nVar + a] = v;\n }\n }\n } else {\n for (let a = 0; a < nVar; a++) {\n for (let b = a; b < nVar; b++) {\n let s = 0;\n for (let i = 0; i < nObs; i++) {\n const offA = xOff + i * s0 + a * s1;\n const offB = xOff + i * s0 + b * s1;\n s += (getNumberAt(x, offA) - (means[a] ?? 0)) * (getNumberAt(x, offB) - (means[b] ?? 0));\n }\n const v = s / (nObs - ddof);\n cov[a * nVar + b] = v;\n cov[b * nVar + a] = v;\n }\n }\n }\n\n const corr = new Float64Array(nVar * nVar);\n for (let i = 0; i < nVar; i++) {\n for (let j = 0; j < nVar; j++) {\n const v = cov[i * nVar + j] ?? 0;\n const vi = cov[i * nVar + i] ?? 0;\n const vj = cov[j * nVar + j] ?? 0;\n const den = Math.sqrt(vi * vj);\n corr[i * nVar + j] = den === 0 ? NaN : v / den;\n }\n }\n\n return Tensor.fromTypedArray({\n data: corr,\n shape: [nVar, nVar],\n dtype: \"float64\",\n device: x.device,\n });\n}\n\n/**\n * Computes the covariance matrix.\n *\n * Covariance measures how two variables change together.\n * For two variables, returns 2x2 covariance matrix.\n * For a 2D tensor, treats each column as a variable.\n *\n * @param x - Input tensor (1D or 2D)\n * @param y - Optional second tensor (if provided, computes covariance between x and y)\n * @param ddof - Delta degrees of freedom (0 = population, 1 = sample, default: 1)\n * @returns Covariance matrix (symmetric)\n * @throws {InvalidParameterError} If tensor is empty, ddof < 0, ddof >= sample size, or size mismatch\n * @throws {ShapeError} If tensor is not 1D or 2D\n *\n * @example\n * ```ts\n * const x = tensor([1, 2, 3, 4, 5]);\n * const y = tensor([2, 4, 5, 4, 5]);\n * cov(x, y); // Returns 2x2 covariance matrix\n *\n * const data = tensor([[1, 2], [3, 4], [5, 6]]);\n * cov(data); // Returns 2x2 covariance matrix for 2 variables\n * ```\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.cov.html | NumPy cov}\n */\nexport function cov(x: Tensor, y?: Tensor, ddof = 1): Tensor {\n if (!Number.isFinite(ddof) || ddof < 0) {\n throw new InvalidParameterError(\"ddof must be a non-negative finite number\", \"ddof\", ddof);\n }\n\n if (y) {\n assertSameSize(x, y, \"cov\");\n const n = x.size;\n if (n === 0) throw new InvalidParameterError(\"cov() requires at least one element\", \"n\", n);\n if (n <= ddof)\n throw new InvalidParameterError(\n `ddof=${ddof} >= size=${n}, covariance undefined`,\n \"ddof\",\n ddof\n );\n\n const xd = toDenseFlatArray(x);\n const yd = toDenseFlatArray(y);\n\n let meanX = 0;\n let meanY = 0;\n for (let i = 0; i < n; i++) {\n meanX += xd[i] ?? 0;\n meanY += yd[i] ?? 0;\n }\n meanX /= n;\n meanY /= n;\n\n let varX = 0;\n let varY = 0;\n let covXY = 0;\n for (let i = 0; i < n; i++) {\n const dx = (xd[i] ?? 0) - meanX;\n const dy = (yd[i] ?? 0) - meanY;\n varX += dx * dx;\n varY += dy * dy;\n covXY += dx * dy;\n }\n varX /= n - ddof;\n varY /= n - ddof;\n covXY /= n - ddof;\n\n return tensor([\n [varX, covXY],\n [covXY, varY],\n ]);\n }\n\n if (x.ndim === 1) {\n const n = x.size;\n if (n === 0) throw new InvalidParameterError(\"cov() requires at least one element\", \"n\", n);\n if (ddof < 0) {\n throw new InvalidParameterError(\"ddof must be non-negative\", \"ddof\", ddof);\n }\n if (n <= ddof)\n throw new InvalidParameterError(\n `ddof=${ddof} >= size=${n}, covariance undefined`,\n \"ddof\",\n ddof\n );\n\n const xd = toDenseFlatArray(x);\n let meanX = 0;\n for (let i = 0; i < n; i++) meanX += xd[i] ?? 0;\n meanX /= n;\n let varX = 0;\n for (let i = 0; i < n; i++) {\n const dx = (xd[i] ?? 0) - meanX;\n varX += dx * dx;\n }\n varX /= n - ddof;\n return tensor([[varX]]);\n }\n\n if (x.ndim !== 2) {\n throw new ShapeError(\"cov() expects a 1D or 2D tensor\");\n }\n\n const nObs = x.shape[0] ?? 0;\n const nVar = x.shape[1] ?? 0;\n if (nObs === 0)\n throw new InvalidParameterError(\"cov() requires at least one observation\", \"nObs\", nObs);\n if (ddof < 0) {\n throw new InvalidParameterError(\"ddof must be non-negative\", \"ddof\", ddof);\n }\n if (nObs <= ddof)\n throw new InvalidParameterError(\n `ddof=${ddof} >= nObs=${nObs}, covariance undefined`,\n \"ddof\",\n ddof\n );\n\n const means = new Float64Array(nVar);\n for (let j = 0; j < nVar; j++) {\n let s = 0;\n for (let i = 0; i < nObs; i++) {\n const off = x.offset + i * (x.strides[0] ?? 0) + j * (x.strides[1] ?? 0);\n s += getNumberAt(x, off);\n }\n means[j] = s / nObs;\n }\n\n const out = new Float64Array(nVar * nVar);\n for (let a = 0; a < nVar; a++) {\n for (let b = a; b < nVar; b++) {\n let s = 0;\n for (let i = 0; i < nObs; i++) {\n const offA = x.offset + i * (x.strides[0] ?? 0) + a * (x.strides[1] ?? 0);\n const offB = x.offset + i * (x.strides[0] ?? 0) + b * (x.strides[1] ?? 0);\n s += (getNumberAt(x, offA) - (means[a] ?? 0)) * (getNumberAt(x, offB) - (means[b] ?? 0));\n }\n const v = s / (nObs - ddof);\n out[a * nVar + b] = v;\n out[b * nVar + a] = v;\n }\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: [nVar, nVar],\n dtype: \"float64\",\n device: x.device,\n });\n}\n","import { InvalidParameterError } from \"../core\";\nimport { Tensor, tensor } from \"../ndarray\";\nimport {\n type AxisLike,\n computeStrides,\n forEachIndexOffset,\n getNumberAt,\n normalizeAxes,\n reducedShape,\n reduceMean,\n reduceVariance,\n} from \"./_internal\";\n\n/**\n * Computes the arithmetic mean along specified axes.\n *\n * The mean is the sum of all values divided by the count.\n * Supports axis-wise reduction with optional dimension preservation.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute the mean (undefined = all axes)\n * @param _keepdims - If true, reduced axes are retained with size 1 (default: false)\n * @returns Tensor containing mean values\n * @throws {InvalidParameterError} If tensor is empty or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([[1, 2, 3], [4, 5, 6]]);\n * mean(t); // Returns tensor([3.5]) - mean of all elements\n * mean(t, 0); // Returns tensor([2.5, 3.5, 4.5]) - column means\n * mean(t, 1); // Returns tensor([2, 5]) - row means\n * mean(t, 1, true); // Returns tensor([[2], [5]]) - keepdims\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs propagate to NaN output\n * - Infinity is handled according to standard arithmetic rules\n * - Mixed Infinity values (Infinity + -Infinity) result in NaN\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.mean.html | NumPy mean}\n */\nexport function mean(t: Tensor, axis?: AxisLike, _keepdims = false): Tensor {\n return reduceMean(t, axis, _keepdims);\n}\n\n/**\n * Computes the median (50th percentile) along specified axes.\n *\n * The median is the middle value when data is sorted. For even-sized arrays,\n * it's the average of the two middle values. More robust to outliers than mean.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute the median (undefined = all axes)\n * @param _keepdims - If true, reduced axes are retained with size 1 (default: false)\n * @returns Tensor containing median values\n * @throws {InvalidParameterError} If tensor is empty or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * median(t); // Returns tensor([3])\n *\n * const t2 = tensor([1, 2, 3, 4]);\n * median(t2); // Returns tensor([2.5]) - average of 2 and 3\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs result in NaN output (NaN sorts to end)\n * - Infinity values are sorted naturally (±Infinity at extremes)\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.median.html | NumPy median}\n */\nexport function median(t: Tensor, axis?: AxisLike, _keepdims = false): Tensor {\n const axes = normalizeAxes(axis, t.ndim);\n\n if (axes.length === 0) {\n if (t.size === 0) {\n throw new InvalidParameterError(\"median() requires at least one element\", \"size\", t.size);\n }\n const values: number[] = [];\n let hasNaN = false;\n forEachIndexOffset(t, (off) => {\n const v = getNumberAt(t, off);\n if (Number.isNaN(v)) hasNaN = true;\n values.push(v);\n });\n const outShape = _keepdims ? new Array<number>(t.ndim).fill(1) : [];\n if (hasNaN) {\n const out = new Float64Array(1);\n out[0] = Number.NaN;\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n }\n values.sort((a, b) => a - b);\n const mid = Math.floor(values.length / 2);\n const result =\n values.length % 2 === 0\n ? ((values[mid - 1] ?? 0) + (values[mid] ?? 0)) / 2\n : (values[mid] ?? 0);\n const out = new Float64Array(1);\n out[0] = result;\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n }\n\n const outShape = reducedShape(t.shape, axes, _keepdims);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const buckets: (number[] | undefined)[] = new Array(outSize);\n const nanFlags = new Array<boolean>(outSize).fill(false);\n\n const reduce = new Set(axes);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n if (_keepdims) {\n for (let i = 0; i < t.ndim; i++) {\n const s = outStrides[i] ?? 0;\n const v = reduce.has(i) ? 0 : (idx[i] ?? 0);\n outFlat += v * s;\n }\n } else {\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n }\n\n const val = getNumberAt(t, off);\n if (Number.isNaN(val)) {\n nanFlags[outFlat] = true;\n return;\n }\n const arr = buckets[outFlat] ?? [];\n arr.push(val);\n buckets[outFlat] = arr;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n if (nanFlags[i]) {\n out[i] = Number.NaN;\n continue;\n }\n const arr = buckets[i] ?? [];\n if (arr.length === 0) {\n throw new InvalidParameterError(\n \"median() reduction over empty axis is undefined\",\n \"axis\",\n arr.length\n );\n }\n arr.sort((a, b) => a - b);\n const mid = Math.floor(arr.length / 2);\n out[i] = arr.length % 2 === 0 ? ((arr[mid - 1] ?? 0) + (arr[mid] ?? 0)) / 2 : (arr[mid] ?? 0);\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes the mode (most frequent value) along specified axis.\n *\n * The mode is the value that appears most frequently in the dataset.\n * If multiple values have the same maximum frequency, returns the smallest value.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute the mode (undefined = all axes)\n * @returns Tensor containing mode values\n * @throws {InvalidParameterError} If tensor is empty\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 2, 3, 3, 3]);\n * mode(t); // Returns tensor([3]) - most frequent value\n *\n * const t2 = tensor([[1, 2, 2], [3, 3, 4]]);\n * mode(t2, 1); // Returns tensor([2, 3]) - mode of each row\n * ```\n *\n * @remarks\n * NaN inputs propagate to NaN output.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mode.html | SciPy stats.mode}\n */\nexport function mode(t: Tensor, axis?: AxisLike): Tensor {\n const axes = normalizeAxes(axis, t.ndim);\n\n if (axes.length === 0) {\n if (t.size === 0) {\n throw new InvalidParameterError(\"mode() requires at least one element\", \"size\", t.size);\n }\n const freq = new Map<number, number>();\n let maxFreq = 0;\n let modeVal = Number.POSITIVE_INFINITY;\n let hasNaN = false;\n forEachIndexOffset(t, (off) => {\n const val = getNumberAt(t, off);\n if (Number.isNaN(val)) {\n hasNaN = true;\n return;\n }\n const count = (freq.get(val) ?? 0) + 1;\n freq.set(val, count);\n if (count > maxFreq || (count === maxFreq && val < modeVal)) {\n maxFreq = count;\n modeVal = val;\n }\n });\n if (hasNaN) {\n return tensor([Number.NaN]);\n }\n return tensor([modeVal]);\n }\n\n // Axis-wise mode implemented via per-output frequency maps.\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const maps: Array<Map<number, number> | undefined> = new Array(outSize);\n const bestCounts = new Int32Array(outSize);\n const bestValues = new Float64Array(outSize);\n const nanFlags = new Array<boolean>(outSize).fill(false);\n const reduce = new Set(axes);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n\n const val = getNumberAt(t, off);\n if (Number.isNaN(val)) {\n nanFlags[outFlat] = true;\n return;\n }\n const m = maps[outFlat] ?? new Map<number, number>();\n const next = (m.get(val) ?? 0) + 1;\n m.set(val, next);\n maps[outFlat] = m;\n const currentBestCount = bestCounts[outFlat] ?? 0;\n const currentBestValue = bestValues[outFlat] ?? Number.POSITIVE_INFINITY;\n if (next > currentBestCount || (next === currentBestCount && val < currentBestValue)) {\n bestCounts[outFlat] = next;\n bestValues[outFlat] = val;\n }\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n if (nanFlags[i]) {\n out[i] = Number.NaN;\n continue;\n }\n if ((bestCounts[i] ?? 0) === 0) {\n throw new InvalidParameterError(\n \"mode() reduction over empty axis is undefined\",\n \"axis\",\n bestCounts[i] ?? 0\n );\n }\n out[i] = bestValues[i] ?? Number.NaN;\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes the standard deviation along specified axes.\n *\n * Standard deviation is the square root of variance, measuring spread of data.\n * Uses Welford's algorithm for numerical stability via the variance function.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute std (undefined = all axes)\n * @param _keepdims - If true, reduced axes are retained with size 1 (default: false)\n * @param ddof - Delta degrees of freedom (0 = population, 1 = sample, default: 0)\n * @returns Tensor containing standard deviation values\n * @throws {InvalidParameterError} If tensor is empty, ddof < 0, ddof >= sample size, or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n * @throws {DTypeError} If tensor has string dtype\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * std(t); // Population std (ddof=0)\n * std(t, 0, false, 1); // Sample std (ddof=1)\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs propagate to NaN output\n * - Infinity inputs result in NaN (infinite standard deviation)\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.std.html | NumPy std}\n */\nexport function std(t: Tensor, axis?: AxisLike, _keepdims = false, ddof = 0): Tensor {\n const v = reduceVariance(t, axis, _keepdims, ddof);\n const out = new Float64Array(v.size);\n for (let i = 0; i < v.size; i++) {\n out[i] = Math.sqrt(getNumberAt(v, v.offset + i));\n }\n return Tensor.fromTypedArray({\n data: out,\n shape: v.shape,\n dtype: \"float64\",\n device: v.device,\n });\n}\n\n/**\n * Computes the variance along specified axes.\n *\n * Variance measures the average squared deviation from the mean.\n * Uses Welford's online algorithm for numerical stability.\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute variance (undefined = all axes)\n * @param _keepdims - If true, reduced axes are retained with size 1 (default: false)\n * @param ddof - Delta degrees of freedom (0 = population, 1 = sample, default: 0)\n * @returns Tensor containing variance values\n * @throws {InvalidParameterError} If tensor is empty, ddof < 0, ddof >= sample size, or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n * @throws {DTypeError} If tensor has string dtype\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * variance(t); // Population variance: 2.0\n * variance(t, 0, false, 1); // Sample variance: 2.5\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs propagate to NaN output\n * - Infinity inputs result in NaN (infinite variance)\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.var.html | NumPy var}\n */\nexport function variance(t: Tensor, axis?: AxisLike, _keepdims = false, ddof = 0): Tensor {\n return reduceVariance(t, axis, _keepdims, ddof);\n}\n\n/**\n * Computes the skewness (third standardized moment) along specified axis.\n *\n * Skewness measures the asymmetry of the probability distribution.\n * - Negative skew: left tail is longer (mean < median)\n * - Zero skew: symmetric distribution (normal distribution)\n * - Positive skew: right tail is longer (mean > median)\n *\n * Uses Fisher's moment coefficient: E[(X - μ)³] / σ³\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute skewness (undefined = all axes)\n * @param bias - If false, applies the unbiased Fisher-Pearson correction (default: true)\n * @returns Tensor containing skewness values\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * skewness(t); // Returns ~0 (symmetric)\n *\n * const t2 = tensor([1, 2, 2, 3, 3, 3, 4, 4, 4, 4]);\n * skewness(t2); // Positive skew (right-tailed)\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs propagate to NaN output\n * - Returns NaN for constant input (zero variance)\n * - Unbiased correction requires at least 3 samples; otherwise returns NaN\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.skew.html | SciPy stats.skew}\n */\nexport function skewness(t: Tensor, axis?: AxisLike, bias = true): Tensor {\n const mu = reduceMean(t, axis, false);\n const sigma2 = reduceVariance(t, axis, false, 0);\n\n const axes = normalizeAxes(axis, t.ndim);\n const reduce = new Set(axes);\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const sumCube = new Float64Array(outSize);\n const counts = new Int32Array(outSize);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n\n const m = getNumberAt(mu, mu.offset + outFlat);\n const v = Math.sqrt(getNumberAt(sigma2, sigma2.offset + outFlat));\n const x = getNumberAt(t, off);\n if (!Number.isFinite(v) || v === 0) {\n sumCube[outFlat] = NaN;\n } else {\n const z = (x - m) / v;\n sumCube[outFlat] = (sumCube[outFlat] ?? 0) + z * z * z;\n }\n counts[outFlat] = (counts[outFlat] ?? 0) + 1;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n const n = counts[i] ?? 0;\n if (n === 0) {\n out[i] = NaN;\n continue;\n }\n let g1 = (sumCube[i] ?? NaN) / n;\n if (!bias) {\n // Fisher-Pearson unbiased correction for sample skewness\n if (n < 3) {\n g1 = NaN;\n } else {\n g1 *= Math.sqrt(n * (n - 1)) / (n - 2);\n }\n }\n out[i] = g1;\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes the kurtosis (fourth standardized moment) along specified axis.\n *\n * Kurtosis measures the \"tailedness\" of the probability distribution.\n * - Negative excess kurtosis: lighter tails than normal (platykurtic)\n * - Zero excess kurtosis: same tails as normal distribution (mesokurtic)\n * - Positive excess kurtosis: heavier tails than normal (leptokurtic)\n *\n * Uses Fisher's definition: E[(X - μ)⁴] / σ⁴ - 3 (excess kurtosis)\n *\n * @param t - Input tensor\n * @param axis - Axis or axes along which to compute kurtosis (undefined = all axes)\n * @param fisher - If true, returns excess kurtosis (subtract 3, default: true)\n * @param bias - If false, applies bias correction (requires at least 4 samples, default: true)\n * @returns Tensor containing kurtosis values\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * kurtosis(t, undefined, true); // Excess kurtosis (Fisher)\n * kurtosis(t, undefined, false); // Raw kurtosis (Pearson)\n * ```\n *\n * @remarks\n * This function follows IEEE 754 semantics for special values:\n * - NaN inputs propagate to NaN output\n * - Returns NaN for constant input (zero variance)\n * - Unbiased correction requires at least 4 samples; otherwise returns NaN\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kurtosis.html | SciPy stats.kurtosis}\n */\nexport function kurtosis(t: Tensor, axis?: AxisLike, fisher = true, bias = true): Tensor {\n const mu = reduceMean(t, axis, false);\n const sigma2 = reduceVariance(t, axis, false, 0);\n\n const axes = normalizeAxes(axis, t.ndim);\n const reduce = new Set(axes);\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const sumQuad = new Float64Array(outSize);\n const counts = new Int32Array(outSize);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n\n const m = getNumberAt(mu, mu.offset + outFlat);\n const v = Math.sqrt(getNumberAt(sigma2, sigma2.offset + outFlat));\n const x = getNumberAt(t, off);\n if (!Number.isFinite(v) || v === 0) {\n sumQuad[outFlat] = NaN;\n } else {\n const z = (x - m) / v;\n sumQuad[outFlat] = (sumQuad[outFlat] ?? 0) + z ** 4;\n }\n counts[outFlat] = (counts[outFlat] ?? 0) + 1;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n const n = counts[i] ?? 0;\n if (n === 0) {\n out[i] = NaN;\n continue;\n }\n let g2 = (sumQuad[i] ?? NaN) / n; // raw kurtosis\n if (!bias) {\n // Unbiased k-statistics correction for excess kurtosis\n if (n < 4) {\n g2 = NaN;\n } else {\n const excess = g2 - 3;\n const adj = ((n + 1) * excess + 6) * ((n - 1) / ((n - 2) * (n - 3)));\n g2 = adj + 3;\n }\n }\n out[i] = fisher ? g2 - 3 : g2;\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes quantiles along specified axes.\n *\n * Quantiles are cut points dividing the range of a probability distribution.\n * Uses linear interpolation between data points.\n *\n * @param t - Input tensor\n * @param q - Quantile(s) to compute, in range [0, 1] (0.5 = median)\n * @param axis - Axis or axes along which to compute quantiles (undefined = all axes)\n * @returns Tensor containing quantile values\n * @throws {InvalidParameterError} If q is not in [0, 1], tensor is empty, or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * quantile(t, 0.5); // Returns tensor([3]) - median\n * quantile(t, [0.25, 0.75]); // Returns tensor([2, 4]) - quartiles\n * quantile(t, 0.95); // Returns tensor([4.8]) - 95th percentile\n * ```\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.quantile.html | NumPy quantile}\n */\nexport function quantile(t: Tensor, q: number | number[], axis?: AxisLike): Tensor {\n const qVals = Array.isArray(q) ? q : [q];\n for (const v of qVals) {\n if (!Number.isFinite(v) || v < 0 || v > 1) {\n throw new InvalidParameterError(\"q must be in [0, 1]\", \"q\", v);\n }\n }\n\n const axes = normalizeAxes(axis, t.ndim);\n const reduce = new Set(axes);\n\n if (axes.length === 0) {\n if (t.size === 0) {\n throw new InvalidParameterError(\"quantile() requires at least one element\", \"size\", t.size);\n }\n const arr: number[] = [];\n let hasNaN = false;\n forEachIndexOffset(t, (off) => {\n const v = getNumberAt(t, off);\n if (Number.isNaN(v)) hasNaN = true;\n arr.push(v);\n });\n if (hasNaN) {\n return tensor(qVals.map(() => Number.NaN));\n }\n arr.sort((a, b) => a - b);\n const results: number[] = [];\n for (const qVal of qVals) {\n const idx = qVal * (arr.length - 1);\n const lower = Math.floor(idx);\n const upper = Math.ceil(idx);\n const weight = idx - lower;\n results.push((arr[lower] ?? 0) * (1 - weight) + (arr[upper] ?? 0) * weight);\n }\n return tensor(results);\n }\n\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const buckets: (number[] | undefined)[] = new Array(outSize);\n const nanFlags = new Array<boolean>(outSize).fill(false);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n const val = getNumberAt(t, off);\n if (Number.isNaN(val)) {\n nanFlags[outFlat] = true;\n return;\n }\n const arr = buckets[outFlat] ?? [];\n arr.push(val);\n buckets[outFlat] = arr;\n });\n\n // Output shape: (qVals.length, ...reducedShape)\n const finalShape = [qVals.length, ...outShape];\n const finalSize = qVals.length * outSize;\n const out = new Float64Array(finalSize);\n\n for (let g = 0; g < outSize; g++) {\n if (nanFlags[g]) {\n for (let qi = 0; qi < qVals.length; qi++) {\n out[qi * outSize + g] = Number.NaN;\n }\n continue;\n }\n const arr = buckets[g] ?? [];\n if (arr.length === 0) {\n throw new InvalidParameterError(\n \"quantile() reduction over empty axis is undefined\",\n \"axis\",\n arr.length\n );\n }\n arr.sort((a, b) => a - b);\n for (let qi = 0; qi < qVals.length; qi++) {\n const qVal = qVals[qi] ?? 0;\n const idx = qVal * (arr.length - 1);\n const lower = Math.floor(idx);\n const upper = Math.ceil(idx);\n const weight = idx - lower;\n out[qi * outSize + g] = (arr[lower] ?? 0) * (1 - weight) + (arr[upper] ?? 0) * weight;\n }\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: finalShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes percentiles along specified axes.\n *\n * Percentiles are quantiles expressed as percentages (0-100 instead of 0-1).\n * This is a convenience wrapper around quantile().\n *\n * @param t - Input tensor\n * @param q - Percentile(s) to compute, in range [0, 100] (50 = median)\n * @param axis - Axis or axes along which to compute percentiles (undefined = all axes)\n * @returns Tensor containing percentile values\n * @throws {InvalidParameterError} If q is not in [0, 100], tensor is empty, or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * percentile(t, 50); // Returns tensor([3]) - median\n * percentile(t, [25, 75]); // Returns tensor([2, 4]) - quartiles\n * percentile(t, 95); // Returns tensor([4.8]) - 95th percentile\n * ```\n *\n * @see {@link https://numpy.org/doc/stable/reference/generated/numpy.percentile.html | NumPy percentile}\n */\nexport function percentile(t: Tensor, q: number | number[], axis?: AxisLike): Tensor {\n const qArr = Array.isArray(q) ? q : [q];\n for (const v of qArr) {\n if (!Number.isFinite(v) || v < 0 || v > 100) {\n throw new InvalidParameterError(\"q must be in [0, 100]\", \"q\", v);\n }\n }\n // Percentile is just quantile with q/100 (convert percentage to fraction)\n const qVals = Array.isArray(q) ? q.map((v) => v / 100) : q / 100;\n return quantile(t, qVals, axis);\n}\n\n/**\n * Computes the n-th central moment about the mean.\n *\n * The n-th moment is defined as: E[(X - μ)ⁿ]\n * - n=1: Always 0 (by definition of mean)\n * - n=2: Variance\n * - n=3: Related to skewness\n * - n=4: Related to kurtosis\n *\n * @param t - Input tensor\n * @param n - Order of the moment (must be non-negative integer)\n * @param axis - Axis or axes along which to compute moment (undefined = all axes)\n * @returns Tensor containing moment values\n * @throws {InvalidParameterError} If n is not a non-negative integer\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5]);\n * moment(t, 1); // Returns ~0 (first moment about mean)\n * moment(t, 2); // Returns variance\n * moment(t, 3); // Returns third moment (related to skewness)\n * ```\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.moment.html | SciPy stats.moment}\n */\nexport function moment(t: Tensor, n: number, axis?: AxisLike): Tensor {\n if (!Number.isFinite(n) || !Number.isInteger(n) || n < 0) {\n throw new InvalidParameterError(\"n must be a non-negative integer\", \"n\", n);\n }\n\n const mu = reduceMean(t, axis, false);\n const axes = normalizeAxes(axis, t.ndim);\n const reduce = new Set(axes);\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const sums = new Float64Array(outSize);\n const counts = new Int32Array(outSize);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n const m = getNumberAt(mu, mu.offset + outFlat);\n const x = getNumberAt(t, off);\n sums[outFlat] = (sums[outFlat] ?? 0) + (x - m) ** n;\n counts[outFlat] = (counts[outFlat] ?? 0) + 1;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n const c = counts[i] ?? 0;\n out[i] = c === 0 ? NaN : (sums[i] ?? 0) / c;\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes the geometric mean along specified axis.\n *\n * The geometric mean is the n-th root of the product of n values.\n * Computed as: exp(mean(log(x))) for numerical stability.\n * Useful for averaging ratios, growth rates, and multiplicative processes.\n *\n * @param t - Input tensor (all values must be > 0)\n * @param axis - Axis or axes along which to compute geometric mean (undefined = all axes)\n * @returns Tensor containing geometric mean values\n * @throws {InvalidParameterError} If any value is <= 0\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 4, 8]);\n * geometricMean(t); // Returns ~2.83 (⁴√(1*2*4*8))\n *\n * // Growth rates: 10% and 20% growth\n * const growth = tensor([1.1, 1.2]);\n * geometricMean(growth); // Returns ~1.149 (average growth rate)\n * ```\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gmean.html | SciPy stats.gmean}\n */\nexport function geometricMean(t: Tensor, axis?: AxisLike): Tensor {\n const axes = normalizeAxes(axis, t.ndim);\n if (axes.length === 0 && t.size === 0) {\n throw new InvalidParameterError(\n \"geometricMean() requires at least one element\",\n \"size\",\n t.size\n );\n }\n const reduce = new Set(axes);\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const sums = new Float64Array(outSize);\n const counts = new Int32Array(outSize);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n const x = getNumberAt(t, off);\n if (x <= 0)\n throw new InvalidParameterError(\"geometricMean() requires all values to be > 0\", \"value\", x);\n sums[outFlat] = (sums[outFlat] ?? 0) + Math.log(x);\n counts[outFlat] = (counts[outFlat] ?? 0) + 1;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n const c = counts[i] ?? 0;\n if (c === 0) {\n throw new InvalidParameterError(\n \"geometricMean() reduction over empty axis is undefined\",\n \"axis\",\n c\n );\n }\n out[i] = Math.exp((sums[i] ?? 0) / c);\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes the harmonic mean along specified axis.\n *\n * The harmonic mean is the reciprocal of the arithmetic mean of reciprocals.\n * Computed as: n / sum(1/x)\n * Useful for averaging rates and ratios (e.g., speeds, densities).\n *\n * @param t - Input tensor (all values must be > 0)\n * @param axis - Axis or axes along which to compute harmonic mean (undefined = all axes)\n * @returns Tensor containing harmonic mean values\n * @throws {InvalidParameterError} If any value is <= 0\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 4]);\n * harmonicMean(t); // Returns ~1.71 (3 / (1/1 + 1/2 + 1/4))\n *\n * // Average speed: 60 mph for half distance, 40 mph for other half\n * const speeds = tensor([60, 40]);\n * harmonicMean(speeds); // Returns 48 mph (correct average)\n * ```\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.hmean.html | SciPy stats.hmean}\n */\nexport function harmonicMean(t: Tensor, axis?: AxisLike): Tensor {\n const axes = normalizeAxes(axis, t.ndim);\n if (axes.length === 0 && t.size === 0) {\n throw new InvalidParameterError(\"harmonicMean() requires at least one element\", \"size\", t.size);\n }\n const reduce = new Set(axes);\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const sums = new Float64Array(outSize);\n const counts = new Int32Array(outSize);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n const x = getNumberAt(t, off);\n if (x <= 0) {\n throw new InvalidParameterError(\"harmonicMean() requires all values to be > 0\", \"value\", x);\n }\n sums[outFlat] = (sums[outFlat] ?? 0) + 1 / x;\n counts[outFlat] = (counts[outFlat] ?? 0) + 1;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n const c = counts[i] ?? 0;\n if (c === 0) {\n throw new InvalidParameterError(\n \"harmonicMean() reduction over empty axis is undefined\",\n \"axis\",\n c\n );\n }\n out[i] = c / (sums[i] ?? NaN);\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n\n/**\n * Computes the trimmed mean (mean after removing outliers from both tails).\n *\n * Removes a specified proportion of extreme values from both ends before computing mean.\n * More robust to outliers than regular mean, less extreme than median.\n *\n * @param t - Input tensor\n * @param proportiontocut - Fraction to cut from each tail, in range [0, 0.5)\n * @param axis - Axis or axes along which to compute trimmed mean (undefined = all axes)\n * @returns Tensor containing trimmed mean values\n * @throws {InvalidParameterError} If proportiontocut is not in [0, 0.5), tensor is empty, or reduction over empty axis\n * @throws {IndexError} If axis is out of bounds\n *\n * @example\n * ```ts\n * const t = tensor([1, 2, 3, 4, 5, 100]); // 100 is outlier\n * mean(t); // Returns ~19.17 (affected by outlier)\n * trimMean(t, 0.2); // Returns 3.5 (removes 1 and 100)\n * trimMean(t, 0.1); // Returns ~22.8 (removes only 100)\n * ```\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.trim_mean.html | SciPy stats.trim_mean}\n */\nexport function trimMean(t: Tensor, proportiontocut: number, axis?: AxisLike): Tensor {\n if (!Number.isFinite(proportiontocut) || proportiontocut < 0 || proportiontocut >= 0.5) {\n throw new InvalidParameterError(\n \"proportiontocut must be a finite number in range [0, 0.5)\",\n \"proportiontocut\",\n proportiontocut\n );\n }\n\n const axes = normalizeAxes(axis, t.ndim);\n const reduce = new Set(axes);\n\n if (axes.length === 0) {\n const arr: number[] = [];\n let hasNaN = false;\n forEachIndexOffset(t, (off) => {\n const v = getNumberAt(t, off);\n if (Number.isNaN(v)) hasNaN = true;\n arr.push(v);\n });\n if (arr.length === 0)\n throw new InvalidParameterError(\n \"trimMean() requires at least one element\",\n \"size\",\n arr.length\n );\n if (hasNaN) {\n return tensor([Number.NaN]);\n }\n arr.sort((a, b) => a - b);\n const nTrim = Math.floor(arr.length * proportiontocut);\n const trimmed = arr.slice(nTrim, arr.length - nTrim);\n const sum = trimmed.reduce((a, b) => a + b, 0);\n return tensor([sum / trimmed.length]);\n }\n\n const outShape = reducedShape(t.shape, axes, false);\n const outStrides = computeStrides(outShape);\n const outSize = outShape.reduce((a, b) => a * b, 1);\n const buckets: (number[] | undefined)[] = new Array(outSize);\n const nanFlags = new Array<boolean>(outSize).fill(false);\n\n forEachIndexOffset(t, (off, idx) => {\n let outFlat = 0;\n let oi = 0;\n for (let i = 0; i < t.ndim; i++) {\n if (reduce.has(i)) continue;\n outFlat += (idx[i] ?? 0) * (outStrides[oi] ?? 0);\n oi++;\n }\n const val = getNumberAt(t, off);\n if (Number.isNaN(val)) {\n nanFlags[outFlat] = true;\n return;\n }\n const arr = buckets[outFlat] ?? [];\n arr.push(val);\n buckets[outFlat] = arr;\n });\n\n const out = new Float64Array(outSize);\n for (let i = 0; i < outSize; i++) {\n if (nanFlags[i]) {\n out[i] = Number.NaN;\n continue;\n }\n const arr = buckets[i] ?? [];\n if (arr.length === 0) {\n throw new InvalidParameterError(\n \"trimMean() reduction over empty axis is undefined\",\n \"axis\",\n arr.length\n );\n }\n arr.sort((a, b) => a - b);\n const nTrim = Math.floor(arr.length * proportiontocut);\n const trimmed = arr.slice(nTrim, arr.length - nTrim);\n const sum = trimmed.reduce((a, b) => a + b, 0);\n out[i] = sum / trimmed.length;\n }\n\n return Tensor.fromTypedArray({\n data: out,\n shape: outShape,\n dtype: \"float64\",\n device: t.device,\n });\n}\n","import { InvalidParameterError } from \"../core\";\nimport type { Tensor } from \"../ndarray\";\nimport {\n chiSquareCdf,\n fCdf,\n forEachIndexOffset,\n getNumberAt,\n normalCdf,\n rankData,\n studentTCdf,\n} from \"./_internal\";\n\nexport type TestResult = {\n statistic: number;\n pvalue: number;\n};\n\nfunction toDenseSortedArray1D(x: Tensor): Float64Array {\n if (x.size < 1) {\n return new Float64Array(0);\n }\n const out = new Float64Array(x.size);\n let i = 0;\n forEachIndexOffset(x, (off) => {\n out[i] = getNumberAt(x, off);\n i++;\n });\n out.sort((a, b) => a - b);\n return out;\n}\n\nfunction toDenseArray1D(x: Tensor): Float64Array {\n const out = new Float64Array(x.size);\n let i = 0;\n forEachIndexOffset(x, (off) => {\n out[i] = getNumberAt(x, off);\n i++;\n });\n return out;\n}\n\nfunction meanAndM2(x: Float64Array): { mean: number; m2: number } {\n if (x.length === 0) {\n throw new InvalidParameterError(\"expected at least one element\", \"length\", x.length);\n }\n let mean = 0;\n let m2 = 0;\n for (let i = 0; i < x.length; i++) {\n const v = x[i] ?? 0;\n const n = i + 1;\n const delta = v - mean;\n mean += delta / n;\n const delta2 = v - mean;\n m2 += delta * delta2;\n }\n return { mean, m2 };\n}\n\nfunction shapiroWilk(x: Float64Array): TestResult {\n // Ported from Algorithm AS R94 (Royston, 1995), following implementations\n // derived from the original FORTRAN and common ports.\n const n = x.length;\n if (n < 3 || n > 5000) {\n throw new InvalidParameterError(\"shapiro() sample size must be between 3 and 5000\", \"n\", n);\n }\n\n const range = (x[n - 1] ?? 0) - (x[0] ?? 0);\n if (range === 0) {\n throw new InvalidParameterError(\"shapiro() all x values are identical\", \"range\", range);\n }\n\n const small = 1e-19;\n if (range < small) {\n throw new InvalidParameterError(\"shapiro() range is too small\", \"range\", range);\n }\n\n const nn2 = Math.floor(n / 2);\n const a = new Float64Array(nn2 + 1); // 1-based\n\n const g: readonly number[] = [-2.273, 0.459];\n const c1: readonly number[] = [0.0, 0.221157, -0.147981, -2.07119, 4.434685, -2.706056];\n const c2: readonly number[] = [0.0, 0.042981, -0.293762, -1.752461, 5.682633, -3.582633];\n const c3: readonly number[] = [0.544, -0.39978, 0.025054, -6.714e-4];\n const c4: readonly number[] = [1.3822, -0.77857, 0.062767, -0.0020322];\n const c5: readonly number[] = [-1.5861, -0.31082, -0.083751, 0.0038915];\n const c6: readonly number[] = [-0.4803, -0.082676, 0.0030302];\n\n const poly = (cc: readonly number[], x0: number): number => {\n let p = cc[cc.length - 1] ?? 0;\n for (let j = cc.length - 2; j >= 0; j--) {\n p = p * x0 + (cc[j] ?? 0);\n }\n return p;\n };\n\n const sign = (v: number): number => (v === 0 ? 0 : v > 0 ? 1 : -1);\n\n const an = n;\n if (n === 3) {\n a[1] = Math.SQRT1_2;\n } else {\n const an25 = an + 0.25;\n let summ2 = 0;\n for (let i = 1; i <= nn2; i++) {\n const p = (i - 0.375) / an25;\n // Inverse normal CDF via approximation using studentTCdf? We use a rational approximation:\n // For this package, approximate quantile using inverse error function via binary search on normalCdf.\n let lo = -10;\n let hi = 10;\n for (let it = 0; it < 80; it++) {\n const mid = (lo + hi) / 2;\n const cdf = normalCdf(mid);\n if (cdf < p) lo = mid;\n else hi = mid;\n }\n const z = (lo + hi) / 2;\n a[i] = z;\n summ2 += z * z;\n }\n summ2 *= 2;\n const ssumm2 = Math.sqrt(summ2);\n const rsn = 1 / Math.sqrt(an);\n\n const a1 = poly(c1, rsn) - (a[1] ?? 0) / ssumm2;\n let i1: number;\n let fac: number;\n if (n > 5) {\n i1 = 3;\n const a2 = -((a[2] ?? 0) / ssumm2) + poly(c2, rsn);\n fac = Math.sqrt(\n (summ2 - 2 * (a[1] ?? 0) * (a[1] ?? 0) - 2 * (a[2] ?? 0) * (a[2] ?? 0)) /\n (1 - 2 * a1 * a1 - 2 * a2 * a2)\n );\n a[2] = a2;\n } else {\n i1 = 2;\n fac = Math.sqrt((summ2 - 2 * (a[1] ?? 0) * (a[1] ?? 0)) / (1 - 2 * a1 * a1));\n }\n a[1] = a1;\n for (let i = i1; i <= nn2; i++) {\n a[i] = -((a[i] ?? 0) / fac);\n }\n }\n\n // Check sort order and compute scaled sums\n let xx = (x[0] ?? 0) / range;\n let sx = xx;\n let sa = -(a[1] ?? 0);\n for (let i = 1, j = n - 1; i < n; j--) {\n const xi = (x[i] ?? 0) / range;\n if (xx - xi > small) {\n throw new InvalidParameterError(\"shapiro() data is not sorted\", \"data\", \"unsorted\");\n }\n sx += xi;\n i++;\n if (i !== j) {\n sa += sign(i - j) * (a[Math.min(i, j)] ?? 0);\n }\n xx = xi;\n }\n\n sa /= n;\n sx /= n;\n\n let ssa = 0;\n let ssx = 0;\n let sax = 0;\n for (let i = 0, j = n - 1; i < n; i++, j--) {\n const asa = i !== j ? sign(i - j) * (a[1 + Math.min(i, j)] ?? 0) - sa : -sa;\n const xsx = (x[i] ?? 0) / range - sx;\n ssa += asa * asa;\n ssx += xsx * xsx;\n sax += asa * xsx;\n }\n\n const ssassx = Math.sqrt(ssa * ssx);\n const w1 = ((ssassx - sax) * (ssassx + sax)) / (ssa * ssx);\n const w = 1 - w1;\n\n if (n === 3) {\n const pi6 = 1.90985931710274;\n const stqr = 1.0471975511966;\n let pw = pi6 * (Math.asin(Math.sqrt(w)) - stqr);\n if (pw < 0) pw = 0;\n if (pw > 1) pw = 1;\n return { statistic: w, pvalue: pw };\n }\n\n const y = Math.log(w1);\n const lnN = Math.log(an);\n let m: number;\n let s: number;\n if (n <= 11) {\n const gamma = poly(g, an);\n if (y >= gamma) {\n return { statistic: w, pvalue: 0 };\n }\n const yy = -Math.log(gamma - y);\n m = poly(c3, an);\n s = Math.exp(poly(c4, an));\n const z = (yy - m) / s;\n return { statistic: w, pvalue: normalCdf(z) };\n }\n m = poly(c5, lnN);\n s = Math.exp(poly(c6, lnN));\n const z = (y - m) / s;\n return { statistic: w, pvalue: normalCdf(z) };\n}\n\n/**\n * One-sample t-test.\n *\n * Tests whether mean of sample differs from population mean.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_1samp.html | SciPy stats.ttest_1samp}\n */\nexport function ttest_1samp(a: Tensor, popmean: number): TestResult {\n const x = toDenseSortedArray1D(a);\n const n = x.length;\n if (n < 2) {\n throw new InvalidParameterError(\"ttest_1samp() requires at least 2 samples\", \"n\", n);\n }\n\n // mean\n let mean = 0;\n for (let i = 0; i < n; i++) mean += x[i] ?? 0;\n mean /= n;\n\n // sample variance\n let m2 = 0;\n for (let i = 0; i < n; i++) {\n const d = (x[i] ?? 0) - mean;\n m2 += d * d;\n }\n const variance = m2 / (n - 1);\n const std = Math.sqrt(variance);\n if (std === 0) {\n throw new InvalidParameterError(\"ttest_1samp() is undefined for constant input\", \"std\", std);\n }\n const tstat = (mean - popmean) / (std / Math.sqrt(n));\n\n const df = n - 1;\n const pvalue = 2 * (1 - studentTCdf(Math.abs(tstat), df));\n return { statistic: tstat, pvalue };\n}\n\n/**\n * Independent two-sample t-test.\n *\n * Tests whether means of two independent samples are equal.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html | SciPy stats.ttest_ind}\n */\nexport function ttest_ind(a: Tensor, b: Tensor, equalVar = true): TestResult {\n const xa = toDenseSortedArray1D(a);\n const xb = toDenseSortedArray1D(b);\n const na = xa.length;\n const nb = xb.length;\n if (na < 2 || nb < 2) {\n throw new InvalidParameterError(\"ttest_ind() requires at least 2 samples in each group\", \"n\", {\n na,\n nb,\n });\n }\n\n let meanA = 0;\n let meanB = 0;\n for (let i = 0; i < na; i++) meanA += xa[i] ?? 0;\n for (let i = 0; i < nb; i++) meanB += xb[i] ?? 0;\n meanA /= na;\n meanB /= nb;\n\n let ssa = 0;\n let ssb = 0;\n for (let i = 0; i < na; i++) {\n const d = (xa[i] ?? 0) - meanA;\n ssa += d * d;\n }\n for (let i = 0; i < nb; i++) {\n const d = (xb[i] ?? 0) - meanB;\n ssb += d * d;\n }\n const varA = ssa / (na - 1);\n const varB = ssb / (nb - 1);\n\n let tstat: number;\n let df: number;\n\n if (equalVar) {\n const pooledVar = ((na - 1) * varA + (nb - 1) * varB) / (na + nb - 2);\n const denom = Math.sqrt(pooledVar * (1 / na + 1 / nb));\n if (denom === 0)\n throw new InvalidParameterError(\n \"ttest_ind() is undefined for constant input\",\n \"denom\",\n denom\n );\n tstat = (meanA - meanB) / denom;\n df = na + nb - 2;\n } else {\n const denom = Math.sqrt(varA / na + varB / nb);\n if (denom === 0)\n throw new InvalidParameterError(\n \"ttest_ind() is undefined for constant input\",\n \"denom\",\n denom\n );\n tstat = (meanA - meanB) / denom;\n df = (varA / na + varB / nb) ** 2 / ((varA / na) ** 2 / (na - 1) + (varB / nb) ** 2 / (nb - 1));\n }\n\n const pvalue = 2 * (1 - studentTCdf(Math.abs(tstat), df));\n return { statistic: tstat, pvalue };\n}\n\n/**\n * Paired-sample t-test.\n *\n * Tests whether means of two related samples are equal.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_rel.html | SciPy stats.ttest_rel}\n */\nexport function ttest_rel(a: Tensor, b: Tensor): TestResult {\n if (a.size !== b.size) {\n throw new InvalidParameterError(\"ttest_rel() requires paired samples of equal length\", \"size\", {\n a: a.size,\n b: b.size,\n });\n }\n const n = a.size;\n if (n < 2) {\n throw new InvalidParameterError(\"ttest_rel() requires at least 2 paired samples\", \"n\", n);\n }\n\n // Differences\n const diffs = new Float64Array(n);\n let i = 0;\n forEachIndexOffset(a, (offA) => {\n // Map to corresponding flat element in b using the same iteration order.\n // We rely on size equality and iterate both tensors to dense arrays.\n diffs[i] = getNumberAt(a, offA);\n i++;\n });\n const bd = new Float64Array(n);\n i = 0;\n forEachIndexOffset(b, (offB) => {\n bd[i] = getNumberAt(b, offB);\n i++;\n });\n for (let k = 0; k < n; k++) {\n diffs[k] = (diffs[k] ?? 0) - (bd[k] ?? 0);\n }\n\n let mean = 0;\n for (let k = 0; k < n; k++) mean += diffs[k] ?? 0;\n mean /= n;\n\n let ss = 0;\n for (let k = 0; k < n; k++) {\n const d = (diffs[k] ?? 0) - mean;\n ss += d * d;\n }\n const varDiff = ss / (n - 1);\n const stdDiff = Math.sqrt(varDiff);\n if (stdDiff === 0) {\n throw new InvalidParameterError(\n \"ttest_rel() is undefined for constant differences\",\n \"stdDiff\",\n stdDiff\n );\n }\n const tstat = mean / (stdDiff / Math.sqrt(n));\n const df = n - 1;\n const pvalue = 2 * (1 - studentTCdf(Math.abs(tstat), df));\n return { statistic: tstat, pvalue };\n}\n\n/**\n * Chi-square goodness of fit test.\n *\n * Observed and expected frequencies must be non-negative and sum to the same total\n * (within floating-point tolerance).\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chisquare.html | SciPy stats.chisquare}\n */\nexport function chisquare(f_obs: Tensor, f_exp?: Tensor): TestResult {\n const obs = toDenseArray1D(f_obs);\n const n = obs.length;\n if (n < 1) {\n throw new InvalidParameterError(\"chisquare() requires at least one observed value\", \"n\", n);\n }\n let chiSq = 0;\n let sumObs = 0;\n\n for (let i = 0; i < n; i++) {\n const v = obs[i] ?? 0;\n if (!Number.isFinite(v) || v < 0) {\n throw new InvalidParameterError(\n \"chisquare() observed frequencies must be finite and >= 0\",\n \"f_obs\",\n v\n );\n }\n sumObs += v;\n }\n\n if (f_exp && f_obs.size !== f_exp.size) {\n throw new InvalidParameterError(\n \"Observed and expected frequency arrays must have the same length\",\n \"size\",\n { f_obs: f_obs.size, f_exp: f_exp.size }\n );\n }\n\n if (!f_exp) {\n // Uniform expected frequencies\n const expected = sumObs / n;\n if (!Number.isFinite(expected) || expected <= 0) {\n throw new InvalidParameterError(\n \"chisquare() expected frequencies must be finite and > 0\",\n \"expected\",\n expected\n );\n }\n for (let i = 0; i < n; i++) {\n const v = obs[i] ?? 0;\n chiSq += (v - expected) ** 2 / expected;\n }\n } else {\n const exp = toDenseArray1D(f_exp);\n let sumExp = 0;\n for (let i = 0; i < n; i++) {\n const v = exp[i] ?? 0;\n if (!Number.isFinite(v) || v <= 0) {\n throw new InvalidParameterError(\n \"chisquare() expected frequencies must be finite and > 0\",\n \"f_exp\",\n v\n );\n }\n sumExp += v;\n }\n\n const rtol = Math.sqrt(Number.EPSILON);\n const denom = Math.max(Math.abs(sumObs), Math.abs(sumExp));\n if (Math.abs(sumObs - sumExp) > rtol * denom) {\n throw new InvalidParameterError(\n \"chisquare() expected and observed frequencies must sum to the same value\",\n \"sum\",\n { f_obs: sumObs, f_exp: sumExp }\n );\n }\n\n for (let i = 0; i < n; i++) {\n const vObs = obs[i] ?? 0;\n const vExp = exp[i] ?? 0;\n chiSq += (vObs - vExp) ** 2 / vExp;\n }\n }\n\n const df = n - 1;\n if (df < 1) {\n throw new InvalidParameterError(\n \"chisquare() requires at least 2 categories (df must be >= 1)\",\n \"df\",\n df\n );\n }\n const pvalue = 1 - chiSquareCdf(chiSq, df);\n\n return { statistic: chiSq, pvalue };\n}\n\n/**\n * Kolmogorov-Smirnov test for goodness of fit.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kstest.html | SciPy stats.kstest}\n */\nexport function kstest(data: Tensor, cdf: string | ((x: number) => number)): TestResult {\n const x = toDenseSortedArray1D(data);\n const n = x.length;\n if (n === 0) {\n throw new InvalidParameterError(\"kstest() requires at least one element\", \"n\", n);\n }\n\n if (typeof cdf === \"string\" && cdf !== \"norm\") {\n throw new InvalidParameterError(\n `Unsupported distribution: '${cdf}'. Supported distributions: 'norm'`,\n \"cdf\",\n cdf\n );\n }\n\n const F = typeof cdf === \"string\" ? (v: number) => normalCdf(v) : cdf;\n\n let d = 0;\n for (let i = 0; i < n; i++) {\n const xi = x[i] ?? 0;\n const fi = F(xi);\n const dPlus = (i + 1) / n - fi;\n const dMinus = fi - i / n;\n d = Math.max(d, dPlus, dMinus);\n }\n\n // Asymptotic p-value (two-sided) using Kolmogorov distribution\n // p ≈ 2 * sum_{k=1..inf} (-1)^{k-1} exp(-2 k^2 d^2 n)\n let p = 0;\n for (let k = 1; k < 200; k++) {\n const term = Math.exp(-2 * k * k * d * d * n);\n p += (k % 2 === 1 ? 1 : -1) * term;\n if (term < 1e-12) break;\n }\n p = Math.max(0, Math.min(1, 2 * p));\n\n return { statistic: d, pvalue: p };\n}\n\n/**\n * Test for normality.\n *\n * Uses D'Agostino-Pearson's omnibus test combining skewness and kurtosis.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.normaltest.html | SciPy stats.normaltest}\n */\nexport function normaltest(a: Tensor): TestResult {\n const x = toDenseSortedArray1D(a);\n const n = x.length;\n if (n < 8) {\n throw new InvalidParameterError(\"normaltest() requires at least 8 samples\", \"n\", n);\n }\n const { mean, m2 } = meanAndM2(x);\n const m2n = m2 / n;\n const std = Math.sqrt(m2n);\n if (!Number.isFinite(std) || std === 0) {\n throw new InvalidParameterError(\"normaltest() is undefined for constant input\", \"std\", std);\n }\n\n let m3 = 0;\n let m4 = 0;\n for (let i = 0; i < n; i++) {\n const d = (x[i] ?? 0) - mean;\n m3 += d * d * d;\n m4 += d * d * d * d;\n }\n const skew = m3 / n / m2n ** 1.5;\n const kurt = m4 / n / (m2n * m2n);\n\n // Skewness component (D'Agostino)\n const y = skew * Math.sqrt(((n + 1) * (n + 3)) / (6 * (n - 2)));\n const beta2 =\n (3 * (n * n + 27 * n - 70) * (n + 1) * (n + 3)) / ((n - 2) * (n + 5) * (n + 7) * (n + 9));\n const w2 = -1 + Math.sqrt(2 * (beta2 - 1));\n const delta = 1 / Math.sqrt(0.5 * Math.log(w2));\n const alpha = Math.sqrt(2 / (w2 - 1));\n const yScaled = y / alpha;\n const z1 = delta * Math.log(yScaled + Math.sqrt(yScaled * yScaled + 1));\n\n // Kurtosis component (Anscombe-Glynn)\n const e = (3 * (n - 1)) / (n + 1);\n const varb2 = (24 * n * (n - 2) * (n - 3)) / ((n + 1) * (n + 1) * (n + 3) * (n + 5));\n const xval = (kurt - e) / Math.sqrt(varb2);\n const sqrtbeta1 =\n ((6 * (n * n - 5 * n + 2)) / ((n + 7) * (n + 9))) *\n Math.sqrt((6 * (n + 3) * (n + 5)) / (n * (n - 2) * (n - 3)));\n const aTerm = 6 + (8 / sqrtbeta1) * (2 / sqrtbeta1 + Math.sqrt(1 + 4 / (sqrtbeta1 * sqrtbeta1)));\n const term1 = 1 - 2 / (9 * aTerm);\n const denom = 1 + xval * Math.sqrt(2 / (aTerm - 4));\n const term2 =\n denom === 0 ? Number.NaN : Math.sign(denom) * ((1 - 2 / aTerm) / Math.abs(denom)) ** (1 / 3);\n const z2 = (term1 - term2) / Math.sqrt(2 / (9 * aTerm));\n\n const k2 = z1 * z1 + z2 * z2;\n const pvalue = 1 - chiSquareCdf(k2, 2);\n return { statistic: k2, pvalue };\n}\n\n/**\n * Shapiro-Wilk test for normality.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.shapiro.html | SciPy stats.shapiro}\n */\nexport function shapiro(x: Tensor): TestResult {\n const sorted = toDenseSortedArray1D(x);\n return shapiroWilk(sorted);\n}\n\n/**\n * Anderson-Darling test for normality.\n *\n * Uses sample standard deviation and size-adjusted critical values.\n * For very small samples (n < 10), uses an IQR-based scale estimate to stabilize\n * the statistic.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.anderson.html | SciPy stats.anderson}\n */\nexport function anderson(x: Tensor): {\n statistic: number;\n critical_values: number[];\n significance_level: number[];\n} {\n const sorted = toDenseSortedArray1D(x);\n const n = sorted.length;\n if (n < 1) {\n throw new InvalidParameterError(\"anderson() requires at least one element\", \"n\", n);\n }\n const { mean, m2 } = meanAndM2(sorted);\n const variance = n > 1 ? m2 / (n - 1) : NaN;\n let std = Math.sqrt(variance);\n if (!Number.isFinite(std) || std === 0) {\n throw new InvalidParameterError(\"anderson() is undefined for constant input\", \"std\", std);\n }\n if (n < 10) {\n const quantile = (q: number): number => {\n if (n === 1) return sorted[0] ?? 0;\n const pos = (n - 1) * q;\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n const v0 = sorted[lo] ?? 0;\n const v1 = sorted[hi] ?? v0;\n return v0 + (pos - lo) * (v1 - v0);\n };\n const q1 = quantile(0.25);\n const q3 = quantile(0.75);\n const iqr = q3 - q1;\n const robust = iqr / 1.349;\n if (Number.isFinite(robust) && robust > 0) {\n std = robust;\n }\n }\n\n // Anderson-Darling for normal: A^2 = -n - (1/n) sum_{i=1..n} (2i-1)[ln Phi(z_i) + ln(1-Phi(z_{n+1-i}))]\n let A2 = 0;\n for (let i = 0; i < n; i++) {\n const zi = ((sorted[i] ?? 0) - mean) / std;\n const zj = ((sorted[n - 1 - i] ?? 0) - mean) / std;\n const PhiI = Math.max(1e-300, Math.min(1 - 1e-16, normalCdf(zi)));\n const PhiJ = Math.max(1e-300, Math.min(1 - 1e-16, normalCdf(zj)));\n A2 += (2 * (i + 1) - 1) * (Math.log(PhiI) + Math.log(1 - PhiJ));\n }\n A2 = -n - A2 / n;\n\n const baseCritical = [0.576, 0.656, 0.787, 0.918, 1.092];\n const factor = 1 + 4 / n - 25 / (n * n);\n const critical_values = baseCritical.map((v) => Math.round((v / factor) * 1000) / 1000);\n\n return {\n statistic: A2,\n critical_values,\n significance_level: [0.15, 0.1, 0.05, 0.025, 0.01],\n };\n}\n\n/**\n * Mann-Whitney U test (non-parametric).\n *\n * Tests whether two independent samples come from same distribution.\n *\n * Note: Uses normal approximation for the p-value with tie correction and\n * continuity correction. No exact method selection is available.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.mannwhitneyu.html | SciPy stats.mannwhitneyu}\n */\nexport function mannwhitneyu(x: Tensor, y: Tensor): TestResult {\n const nx = x.size;\n const ny = y.size;\n\n if (nx < 1 || ny < 1) {\n throw new InvalidParameterError(\"Both samples must be non-empty\", \"size\", {\n x: nx,\n y: ny,\n });\n }\n\n const xVals = toDenseArray1D(x);\n const yVals = toDenseArray1D(y);\n const n = nx + ny;\n const combined = new Float64Array(n);\n combined.set(xVals, 0);\n combined.set(yVals, nx);\n\n const { ranks, tieSum } = rankData(combined);\n\n // Rank sum for group 1 (first sample)\n let R1 = 0;\n for (let i = 0; i < nx; i++) {\n R1 += ranks[i] ?? 0;\n }\n\n const U1 = R1 - (nx * (nx + 1)) / 2;\n const U2 = nx * ny - U1;\n const U = Math.min(U1, U2);\n\n const meanU = (nx * ny) / 2;\n // Tie correction uses sum(t^3 - t) over tied groups.\n const tieAdj = n > 1 ? tieSum / (n * (n - 1)) : 0;\n const varU = (nx * ny * (n + 1 - tieAdj)) / 12;\n if (varU <= 0) {\n return { statistic: U, pvalue: NaN };\n }\n\n const stdU = Math.sqrt(varU);\n // Continuity correction for two-sided normal approximation.\n // For small samples, omit correction to better match exact distribution behavior.\n const useContinuity = nx + ny > 20;\n const continuity = useContinuity ? (U < meanU ? 0.5 : U > meanU ? -0.5 : 0) : 0;\n const z = (U - meanU + continuity) / stdU;\n const pvalue = 2 * (1 - normalCdf(Math.abs(z)));\n\n return { statistic: U, pvalue };\n}\n\n/**\n * Wilcoxon signed-rank test (non-parametric paired test).\n *\n * Note: Uses normal approximation for the p-value with tie correction and\n * continuity correction. No exact method selection is available.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.wilcoxon.html | SciPy stats.wilcoxon}\n */\nexport function wilcoxon(x: Tensor, y?: Tensor): TestResult {\n const n = x.size;\n const diffs: number[] = [];\n\n if (y) {\n if (x.size !== y.size) {\n throw new InvalidParameterError(\"Paired samples must have equal length\", \"size\", {\n x: x.size,\n y: y.size,\n });\n }\n const xd = toDenseArray1D(x);\n const yd = toDenseArray1D(y);\n for (let i = 0; i < n; i++) {\n const diff = (xd[i] ?? 0) - (yd[i] ?? 0);\n if (diff !== 0) diffs.push(diff);\n }\n } else {\n const xd = toDenseArray1D(x);\n for (let i = 0; i < n; i++) {\n const val = xd[i] ?? 0;\n if (val !== 0) diffs.push(val);\n }\n }\n\n if (diffs.length === 0) {\n throw new InvalidParameterError(\n \"wilcoxon() is undefined when all differences are zero\",\n \"diffs\",\n diffs.length\n );\n }\n\n const absDiffs = new Float64Array(diffs.length);\n for (let i = 0; i < diffs.length; i++) {\n absDiffs[i] = Math.abs(diffs[i] ?? 0);\n }\n\n const { ranks, tieSum } = rankData(absDiffs);\n\n let Wplus = 0;\n for (let i = 0; i < diffs.length; i++) {\n if ((diffs[i] ?? 0) > 0) {\n Wplus += ranks[i] ?? 0;\n }\n }\n\n const nEff = diffs.length;\n const meanW = (nEff * (nEff + 1)) / 4;\n // Tie-corrected variance for signed-rank statistic.\n const varW = (nEff * (nEff + 1) * (2 * nEff + 1)) / 24 - tieSum / 48;\n if (varW <= 0) {\n return { statistic: Wplus, pvalue: NaN };\n }\n\n const stdW = Math.sqrt(varW);\n // Continuity correction for two-sided normal approximation.\n // For small samples, omit correction to better match exact distribution behavior.\n const useContinuity = nEff > 20;\n const continuity = useContinuity ? (Wplus < meanW ? 0.5 : Wplus > meanW ? -0.5 : 0) : 0;\n const z = (Wplus - meanW + continuity) / stdW;\n const pvalue = 2 * (1 - normalCdf(Math.abs(z)));\n\n return { statistic: Wplus, pvalue };\n}\n\n/**\n * Kruskal-Wallis H-test (non-parametric version of ANOVA).\n *\n * Note: Uses chi-square approximation for the p-value with tie correction.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.kruskal.html | SciPy stats.kruskal}\n */\nexport function kruskal(...samples: Tensor[]): TestResult {\n const k = samples.length;\n if (k < 2) {\n throw new InvalidParameterError(\"kruskal() requires at least 2 groups\", \"k\", k);\n }\n\n let N = 0;\n const sizes = new Array<number | undefined>(k);\n const validatedSamples = new Array<Tensor | undefined>(k);\n for (let g = 0; g < k; g++) {\n const sample = samples[g];\n if (!sample || sample.size < 1) {\n throw new InvalidParameterError(\"kruskal() requires non-empty samples\", \"size\", {\n group: g,\n size: sample?.size ?? 0,\n });\n }\n validatedSamples[g] = sample;\n sizes[g] = sample.size;\n N += sample.size;\n }\n\n const combined = new Float64Array(N);\n const groupIndex = new Int32Array(N);\n let idx = 0;\n for (let g = 0; g < k; g++) {\n const sample = validatedSamples[g];\n if (!sample) {\n throw new InvalidParameterError(\"kruskal() requires non-empty samples\", \"sample\", g);\n }\n const vals = toDenseArray1D(sample);\n for (let i = 0; i < vals.length; i++) {\n combined[idx] = vals[i] ?? 0;\n groupIndex[idx] = g;\n idx++;\n }\n }\n\n const { ranks, tieSum } = rankData(combined);\n\n const rankSums = new Float64Array(k);\n for (let i = 0; i < N; i++) {\n const group = groupIndex[i] ?? 0;\n const rank = ranks[i] ?? 0;\n rankSums[group] = (rankSums[group] ?? 0) + rank;\n }\n\n let H = 0;\n for (let g = 0; g < k; g++) {\n const rs = rankSums[g] ?? 0;\n const sz = sizes[g] ?? 1;\n H += (rs * rs) / sz;\n }\n H = (12 / (N * (N + 1))) * H - 3 * (N + 1);\n\n // Tie correction factor for H statistic.\n const tieCorrection = N > 1 ? 1 - tieSum / (N * N * N - N) : 1;\n if (tieCorrection <= 0) {\n throw new InvalidParameterError(\n \"kruskal() is undefined when all numbers are identical\",\n \"tieCorrection\",\n tieCorrection\n );\n }\n H /= tieCorrection;\n\n const df = k - 1;\n const pvalue = 1 - chiSquareCdf(H, df);\n\n return { statistic: H, pvalue };\n}\n\n/**\n * Friedman test (non-parametric repeated measures ANOVA).\n *\n * Note: Uses chi-square approximation for the p-value with tie correction.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.friedmanchisquare.html | SciPy stats.friedmanchisquare}\n */\nexport function friedmanchisquare(...samples: Tensor[]): TestResult {\n const k = samples.length;\n if (k < 3) {\n throw new InvalidParameterError(\n \"friedmanchisquare() requires at least 3 related samples\",\n \"k\",\n k\n );\n }\n const n = samples[0]?.size ?? 0;\n if (n < 1) {\n throw new InvalidParameterError(\n \"friedmanchisquare() requires all samples to be non-empty\",\n \"n\",\n n\n );\n }\n\n for (let i = 1; i < k; i++) {\n const sample = samples[i];\n if (sample && sample.size !== n) {\n throw new InvalidParameterError(\n \"All samples must have the same length for Friedman test\",\n \"size\",\n { expected: n, got: sample.size, sampleIndex: i }\n );\n }\n }\n\n // Rank within each block (row)\n const denseSamples = samples.map((sample) =>\n sample ? toDenseArray1D(sample) : new Float64Array(0)\n );\n const rankSums = new Float64Array(k);\n let tieSum = 0;\n\n for (let i = 0; i < n; i++) {\n const block = new Float64Array(k);\n for (let j = 0; j < k; j++) {\n const arr = denseSamples[j];\n block[j] = arr?.[i] ?? 0;\n }\n const ranked = rankData(block);\n tieSum += ranked.tieSum;\n for (let j = 0; j < k; j++) {\n const rank = ranked.ranks[j] ?? 0;\n rankSums[j] = (rankSums[j] ?? 0) + rank;\n }\n }\n\n let chiSq = 0;\n for (let j = 0; j < k; j++) {\n const rs = rankSums[j] ?? 0;\n chiSq += rs * rs;\n }\n chiSq = (12 / (n * k * (k + 1))) * chiSq - 3 * n * (k + 1);\n\n // Tie correction factor for Friedman chi-square.\n const tieCorrection = n > 0 ? 1 - tieSum / (n * k * (k * k - 1)) : 1;\n if (tieCorrection <= 0) {\n throw new InvalidParameterError(\n \"friedmanchisquare() is undefined when all numbers are identical within blocks\",\n \"tieCorrection\",\n tieCorrection\n );\n }\n chiSq /= tieCorrection;\n\n const df = k - 1;\n const pvalue = 1 - chiSquareCdf(chiSq, df);\n\n return { statistic: chiSq, pvalue };\n}\n\n/**\n * Levene's test for equality of variances.\n *\n * Tests whether two or more groups have equal variances.\n * More robust than Bartlett's test for non-normal data.\n *\n * @param center - Method to use for centering: 'median' (default, most robust),\n * 'mean' (traditional), or 'trimmed' (10% trimmed mean)\n * @param samples - Two or more sample tensors to compare\n * @returns Test result with statistic and p-value\n *\n * @example\n * ```ts\n * import { levene, tensor } from 'deepbox';\n *\n * const group1 = tensor([1, 2, 3, 4, 5]);\n * const group2 = tensor([2, 4, 6, 8, 10]);\n * const result = levene('median', group1, group2);\n * console.log(result.pvalue); // p-value for equal variances\n * ```\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.levene.html | SciPy stats.levene}\n */\nexport function levene(center: \"mean\" | \"median\" | \"trimmed\", ...samples: Tensor[]): TestResult {\n const k = samples.length;\n if (k < 2) {\n throw new InvalidParameterError(\"levene() requires at least 2 groups\", \"k\", k);\n }\n\n // Convert samples to arrays and compute centers\n const groups: Float64Array[] = [];\n const centers: number[] = [];\n\n for (let g = 0; g < k; g++) {\n const sample = samples[g];\n if (!sample || sample.size === 0) {\n throw new InvalidParameterError(\"levene() requires all groups to be non-empty\", \"groupSize\", {\n group: g,\n size: sample?.size ?? 0,\n });\n }\n const arr = toDenseSortedArray1D(sample);\n if (arr.length < 2) {\n throw new InvalidParameterError(\n \"levene() requires at least 2 samples per group\",\n \"groupSize\",\n arr.length\n );\n }\n groups.push(arr);\n\n // Compute center based on method\n if (center === \"mean\") {\n let sum = 0;\n for (let i = 0; i < arr.length; i++) sum += arr[i] ?? 0;\n centers.push(sum / arr.length);\n } else if (center === \"median\") {\n const mid = Math.floor(arr.length / 2);\n if (arr.length % 2 === 0) {\n centers.push(((arr[mid - 1] ?? 0) + (arr[mid] ?? 0)) / 2);\n } else {\n centers.push(arr[mid] ?? 0);\n }\n } else {\n // Trimmed mean (10%)\n const trimCount = Math.floor(arr.length * 0.1);\n let sum = 0;\n const n = arr.length - 2 * trimCount;\n for (let i = trimCount; i < arr.length - trimCount; i++) {\n sum += arr[i] ?? 0;\n }\n centers.push(sum / n);\n }\n }\n\n // Compute absolute deviations from center (Z_ij = |Y_ij - center_i|)\n const Z: Float64Array[] = [];\n const groupMeansZ: number[] = [];\n let N = 0;\n let grandSumZ = 0;\n\n for (let g = 0; g < groups.length; g++) {\n const arr = groups[g];\n if (!arr) continue;\n const c = centers[g] ?? 0;\n const zArr = new Float64Array(arr.length);\n let sumZ = 0;\n\n for (let i = 0; i < arr.length; i++) {\n const absVal = Math.abs((arr[i] ?? 0) - c);\n zArr[i] = absVal;\n sumZ += absVal;\n }\n\n Z.push(zArr);\n groupMeansZ.push(sumZ / arr.length);\n N += arr.length;\n grandSumZ += sumZ;\n }\n\n const grandMeanZ = grandSumZ / N;\n\n // Compute Levene's W statistic (F-test on absolute deviations)\n let SSB = 0; // Between-group sum of squares\n let SSW = 0; // Within-group sum of squares\n\n for (let g = 0; g < Z.length; g++) {\n const zArr = Z[g];\n if (!zArr) continue;\n const n = zArr.length;\n SSB += n * ((groupMeansZ[g] ?? 0) - grandMeanZ) ** 2;\n\n for (let i = 0; i < n; i++) {\n SSW += ((zArr[i] ?? 0) - (groupMeansZ[g] ?? 0)) ** 2;\n }\n }\n\n const dfB = k - 1;\n const dfW = N - k;\n if (dfW <= 0) {\n throw new InvalidParameterError(\n \"levene() requires more total observations than groups\",\n \"dfW\",\n dfW\n );\n }\n if (SSW === 0) {\n return { statistic: Infinity, pvalue: 0 };\n }\n const W = SSB / dfB / (SSW / dfW);\n\n const pvalue = 1 - fCdf(W, dfB, dfW);\n\n return { statistic: W, pvalue };\n}\n\n/**\n * Bartlett's test for equality of variances.\n *\n * Tests whether two or more groups have equal variances.\n * Assumes data is normally distributed; use Levene's test for non-normal data.\n *\n * @param samples - Two or more sample tensors to compare\n * @returns Test result with statistic and p-value\n *\n * @example\n * ```ts\n * import { bartlett, tensor } from 'deepbox';\n *\n * const group1 = tensor([1, 2, 3, 4, 5]);\n * const group2 = tensor([2, 4, 6, 8, 10]);\n * const result = bartlett(group1, group2);\n * console.log(result.pvalue); // p-value for equal variances\n * ```\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.bartlett.html | SciPy stats.bartlett}\n */\nexport function bartlett(...samples: Tensor[]): TestResult {\n const k = samples.length;\n if (k < 2) {\n throw new InvalidParameterError(\"bartlett() requires at least 2 groups\", \"k\", k);\n }\n\n // Convert samples to arrays and compute variances\n const variances: number[] = [];\n const sizes: number[] = [];\n let N = 0;\n\n for (let g = 0; g < k; g++) {\n const sample = samples[g];\n if (!sample || sample.size === 0) {\n throw new InvalidParameterError(\n \"bartlett() requires all groups to be non-empty\",\n \"groupSize\",\n { group: g, size: sample?.size ?? 0 }\n );\n }\n const arr = toDenseSortedArray1D(sample);\n const n = arr.length;\n if (n < 2) {\n throw new InvalidParameterError(\n \"bartlett() requires at least 2 samples per group\",\n \"groupSize\",\n n\n );\n }\n\n // Compute mean\n let mean = 0;\n for (let i = 0; i < n; i++) mean += arr[i] ?? 0;\n mean /= n;\n\n // Compute sample variance (using n-1 denominator)\n let ss = 0;\n for (let i = 0; i < n; i++) {\n const d = (arr[i] ?? 0) - mean;\n ss += d * d;\n }\n const variance = ss / (n - 1);\n\n variances.push(variance);\n sizes.push(n);\n N += n;\n }\n\n // Check for zero variances\n for (let g = 0; g < k; g++) {\n if ((variances[g] ?? 0) === 0) {\n throw new InvalidParameterError(\n \"bartlett() is undefined when a group has zero variance\",\n \"variance\",\n variances[g]\n );\n }\n }\n\n // Compute pooled variance\n let pooledNumerator = 0;\n for (let g = 0; g < k; g++) {\n pooledNumerator += ((sizes[g] ?? 1) - 1) * (variances[g] ?? 1);\n }\n const pooledVariance = pooledNumerator / (N - k);\n\n // Compute Bartlett's statistic\n // T = (N-k) * ln(s_p^2) - sum((n_i - 1) * ln(s_i^2))\n let sumLogVar = 0;\n for (let g = 0; g < k; g++) {\n sumLogVar += ((sizes[g] ?? 1) - 1) * Math.log(variances[g] ?? 1);\n }\n const T = (N - k) * Math.log(pooledVariance) - sumLogVar;\n\n // Correction factor C\n let sumInvDf = 0;\n for (let g = 0; g < k; g++) {\n sumInvDf += 1 / ((sizes[g] ?? 1) - 1);\n }\n const C = 1 + (1 / (3 * (k - 1))) * (sumInvDf - 1 / (N - k));\n\n // Chi-square statistic\n const chiSq = T / C;\n\n const df = k - 1;\n const pvalue = 1 - chiSquareCdf(chiSq, df);\n\n return { statistic: chiSq, pvalue };\n}\n\n/**\n * One-way ANOVA.\n *\n * @see {@link https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.f_oneway.html | SciPy stats.f_oneway}\n */\nexport function f_oneway(...samples: Tensor[]): TestResult {\n const k = samples.length;\n if (k < 2) {\n throw new InvalidParameterError(\"f_oneway() requires at least 2 groups\", \"groups\", k);\n }\n\n for (let g = 0; g < k; g++) {\n const sample = samples[g];\n if (!sample || sample.size === 0) {\n throw new InvalidParameterError(\n \"f_oneway() requires all groups to be non-empty\",\n \"groupSize\",\n { group: g, size: sample?.size ?? 0 }\n );\n }\n }\n\n let N = 0;\n const means: number[] = [];\n const sizes: number[] = [];\n const groups: Float64Array[] = [];\n\n // Compute group means\n for (let g = 0; g < k; g++) {\n const sample = samples[g];\n if (!sample) {\n throw new InvalidParameterError(\n \"f_oneway() requires all groups to be non-empty\",\n \"groupSize\",\n { group: g, size: 0 }\n );\n }\n const arr = toDenseArray1D(sample);\n const n = arr.length;\n groups.push(arr);\n sizes.push(n);\n N += n;\n\n let sum = 0;\n for (let i = 0; i < n; i++) {\n sum += arr[i] ?? 0;\n }\n means.push(sum / n);\n }\n\n // Compute grand mean\n let grandSum = 0;\n for (let g = 0; g < k; g++) {\n grandSum += (means[g] ?? 0) * (sizes[g] ?? 0);\n }\n const grandMean = grandSum / N;\n\n // Compute between-group and within-group variance\n let SSB = 0; // Between-group sum of squares\n let SSW = 0; // Within-group sum of squares\n\n for (let g = 0; g < groups.length; g++) {\n const arr = groups[g];\n if (!arr) continue;\n const n = arr.length;\n SSB += n * ((means[g] ?? 0) - grandMean) ** 2;\n\n for (let i = 0; i < n; i++) {\n SSW += ((arr[i] ?? 0) - (means[g] ?? 0)) ** 2;\n }\n }\n\n const dfB = k - 1;\n const dfW = N - k;\n if (dfW <= 0) {\n throw new InvalidParameterError(\n \"f_oneway() requires at least one group with more than one sample\",\n \"dfW\",\n dfW\n );\n }\n const MSB = SSB / dfB;\n const MSW = SSW / dfW;\n if (MSW === 0) {\n // All within-group values are identical; F is infinite if groups differ, NaN otherwise\n const F = MSB === 0 ? NaN : Infinity;\n return { statistic: F, pvalue: MSB === 0 ? NaN : 0 };\n }\n const F = MSB / MSW;\n\n const pvalue = 1 - fCdf(F, dfB, dfW);\n\n return { statistic: F, pvalue };\n}\n"]}