@danielsimonjr/mathts-functions 0.31.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2021,16 +2021,16 @@ var xgcd = mathTyped2("xgcd", {
2021
2021
  return a < 0n ? [-a, -lastX, -lastY] : [a, lastX, lastY];
2022
2022
  }
2023
2023
  });
2024
- function is2DArray(arr7) {
2025
- return Array.isArray(arr7[0]);
2026
- }
2027
- function vectorNorm(arr7, p = 2) {
2028
- if (p === Infinity) return Math.max(...arr7.map((x) => Math.abs(x)));
2029
- if (p === -Infinity) return Math.min(...arr7.map((x) => Math.abs(x)));
2030
- if (p === 0) return arr7.filter((x) => x !== 0).length;
2031
- if (p === 2) return norm2(arr7);
2032
- const terms = new Array(arr7.length);
2033
- for (let i = 0; i < arr7.length; i++) terms[i] = Math.pow(Math.abs(arr7[i]), p);
2024
+ function is2DArray(arr8) {
2025
+ return Array.isArray(arr8[0]);
2026
+ }
2027
+ function vectorNorm(arr8, p = 2) {
2028
+ if (p === Infinity) return Math.max(...arr8.map((x) => Math.abs(x)));
2029
+ if (p === -Infinity) return Math.min(...arr8.map((x) => Math.abs(x)));
2030
+ if (p === 0) return arr8.filter((x) => x !== 0).length;
2031
+ if (p === 2) return norm2(arr8);
2032
+ const terms = new Array(arr8.length);
2033
+ for (let i = 0; i < arr8.length; i++) terms[i] = Math.pow(Math.abs(arr8[i]), p);
2034
2034
  return Math.pow(pairwiseSum(terms), 1 / p);
2035
2035
  }
2036
2036
  function matrixNorm(data, p = "fro") {
@@ -2071,9 +2071,9 @@ var norm = mathTyped2("norm", {
2071
2071
  Complex: (a) => a.abs(),
2072
2072
  BigNumber: (a) => a.abs(),
2073
2073
  // Array: a flat vector uses the vector 2-norm; a 2-D array is a matrix (Frobenius).
2074
- Array: (arr7) => is2DArray(arr7) ? matrixNorm(arr7) : vectorNorm(arr7),
2075
- "Array, number": (arr7, p) => is2DArray(arr7) ? matrixNorm(arr7, p) : vectorNorm(arr7, p),
2076
- "Array, string": (arr7, p) => matrixNorm(arr7, p),
2074
+ Array: (arr8) => is2DArray(arr8) ? matrixNorm(arr8) : vectorNorm(arr8),
2075
+ "Array, number": (arr8, p) => is2DArray(arr8) ? matrixNorm(arr8, p) : vectorNorm(arr8, p),
2076
+ "Array, string": (arr8, p) => matrixNorm(arr8, p),
2077
2077
  // Matrix norms (mathjs parity): Frobenius / 1 / 2 / ∞.
2078
2078
  DenseMatrix: (m) => matrixNorm(matrixLike(m)),
2079
2079
  "DenseMatrix, number": (m, p) => matrixNorm(matrixLike(m), p),
@@ -2187,7 +2187,7 @@ var min = mathTyped2("min", {
2187
2187
  "bigint, bigint": (a, b) => a < b ? a : b,
2188
2188
  "Fraction, Fraction": (a, b) => a.compare(b) < 0 ? a : b,
2189
2189
  "BigNumber, BigNumber": (a, b) => a.compare(b) < 0 ? a : b,
2190
- Array: (arr7) => Math.min(...arr7),
2190
+ Array: (arr8) => Math.min(...arr8),
2191
2191
  number: (a) => a,
2192
2192
  "number, number": (a, b) => Math.min(a, b),
2193
2193
  "number, number, ...number": (a, b, rest) => Math.min(a, b, ...rest),
@@ -2206,7 +2206,7 @@ var max = mathTyped2("max", {
2206
2206
  "bigint, bigint": (a, b) => a > b ? a : b,
2207
2207
  "Fraction, Fraction": (a, b) => a.compare(b) > 0 ? a : b,
2208
2208
  "BigNumber, BigNumber": (a, b) => a.compare(b) > 0 ? a : b,
2209
- Array: (arr7) => Math.max(...arr7),
2209
+ Array: (arr8) => Math.max(...arr8),
2210
2210
  number: (a) => a,
2211
2211
  "number, number": (a, b) => Math.max(a, b),
2212
2212
  "number, number, ...number": (a, b, rest) => Math.max(a, b, ...rest),
@@ -2221,7 +2221,7 @@ var max = mathTyped2("max", {
2221
2221
  }
2222
2222
  });
2223
2223
  var fsum = mathTyped2("fsum", {
2224
- Array: (arr7) => neumaierSum(arr7),
2224
+ Array: (arr8) => neumaierSum(arr8),
2225
2225
  Float64Array: (a) => neumaierSum(a)
2226
2226
  });
2227
2227
  var sum = mathTyped2("sum", {
@@ -2238,7 +2238,7 @@ var sum = mathTyped2("sum", {
2238
2238
  // all inherit it. Pairwise costs the same number of additions — the naive loop was simply worse.
2239
2239
  // For catastrophic cancellation (e.g. [1e16, 1, -1e16], which pairwise AND np.sum both
2240
2240
  // annihilate to 0) use `fsum`.
2241
- Array: (arr7) => pairwiseSum(arr7),
2241
+ Array: (arr8) => pairwiseSum(arr8),
2242
2242
  // Float64Array: the pool's sequential branch is pairwise too (see ComputePool.sum), and its
2243
2243
  // parallel branch sums per-chunk then combines — blocked summation, which is pairwise-like.
2244
2244
  // Either way the O(n) drift is gone.
@@ -2248,9 +2248,9 @@ var sum = mathTyped2("sum", {
2248
2248
  }
2249
2249
  });
2250
2250
  var mean = mathTyped2("mean", {
2251
- Array: (arr7) => {
2252
- if (arr7.length === 0) return NaN;
2253
- return pairwiseSum(arr7) / arr7.length;
2251
+ Array: (arr8) => {
2252
+ if (arr8.length === 0) return NaN;
2253
+ return pairwiseSum(arr8) / arr8.length;
2254
2254
  },
2255
2255
  // Parallel Float64Array mean
2256
2256
  Float64Array: async (a) => {
@@ -2270,12 +2270,12 @@ function varianceFromM2(m2, n, norm4) {
2270
2270
  return n > 1 ? m2 / (n - 1) : 0;
2271
2271
  }
2272
2272
  }
2273
- function m2OfArray(arr7) {
2274
- return sumSquaredDeviations(arr7);
2273
+ function m2OfArray(arr8) {
2274
+ return sumSquaredDeviations(arr8);
2275
2275
  }
2276
2276
  var variance = mathTyped2("variance", {
2277
- Array: (arr7) => varianceFromM2(m2OfArray(arr7), arr7.length, "unbiased"),
2278
- "Array, string": (arr7, norm4) => varianceFromM2(m2OfArray(arr7), arr7.length, norm4),
2277
+ Array: (arr8) => varianceFromM2(m2OfArray(arr8), arr8.length, "unbiased"),
2278
+ "Array, string": (arr8, norm4) => varianceFromM2(m2OfArray(arr8), arr8.length, norm4),
2279
2279
  // Parallel Float64Array variance. computePool returns POPULATION variance
2280
2280
  // (sum2/n); recover sum2 = pop·n and renormalize for the requested convention.
2281
2281
  Float64Array: async (a) => {
@@ -2288,8 +2288,8 @@ var variance = mathTyped2("variance", {
2288
2288
  }
2289
2289
  });
2290
2290
  var std = mathTyped2("std", {
2291
- Array: (arr7) => Math.sqrt(varianceFromM2(m2OfArray(arr7), arr7.length, "unbiased")),
2292
- "Array, string": (arr7, norm4) => Math.sqrt(varianceFromM2(m2OfArray(arr7), arr7.length, norm4)),
2291
+ Array: (arr8) => Math.sqrt(varianceFromM2(m2OfArray(arr8), arr8.length, "unbiased")),
2292
+ "Array, string": (arr8, norm4) => Math.sqrt(varianceFromM2(m2OfArray(arr8), arr8.length, norm4)),
2293
2293
  // Parallel Float64Array std — derive from the (renormalized) variance so the
2294
2294
  // convention matches the Array path and parallelStatStd.
2295
2295
  Float64Array: async (a) => {
@@ -2642,7 +2642,7 @@ var hypot = mathTyped3("hypot", {
2642
2642
  number: (a) => Math.abs(a),
2643
2643
  "number, number": (a, b) => Math.hypot(a, b),
2644
2644
  "number, number, ...number": (a, b, rest) => Math.hypot(a, b, ...rest),
2645
- Array: (arr7) => Math.hypot(...arr7)
2645
+ Array: (arr8) => Math.hypot(...arr8)
2646
2646
  });
2647
2647
  var typedTrigonometry = {
2648
2648
  // Basic
@@ -2673,8 +2673,8 @@ var typedTrigonometry = {
2673
2673
  // src/typed/statistics.ts
2674
2674
  import { mathTyped as mathTyped4, neumaierCumsum } from "@danielsimonjr/mathts-core";
2675
2675
  import { computePool as computePool3 } from "@danielsimonjr/mathts-parallel";
2676
- function toFloat64Array(arr7) {
2677
- return new Float64Array(arr7);
2676
+ function toFloat64Array(arr8) {
2677
+ return new Float64Array(arr8);
2678
2678
  }
2679
2679
  var parallelStatSum = mathTyped4("parallelStatSum", {
2680
2680
  // Float64Array - parallel execution
@@ -2683,8 +2683,8 @@ var parallelStatSum = mathTyped4("parallelStatSum", {
2683
2683
  return result.result;
2684
2684
  },
2685
2685
  // Number array
2686
- Array: async (arr7) => {
2687
- const data = toFloat64Array(arr7);
2686
+ Array: async (arr8) => {
2687
+ const data = toFloat64Array(arr8);
2688
2688
  const result = await computePool3.sum(data);
2689
2689
  return result.result;
2690
2690
  },
@@ -2700,9 +2700,9 @@ var parallelStatMean = mathTyped4("parallelStatMean", {
2700
2700
  return result.result;
2701
2701
  },
2702
2702
  // Number array - parallel execution
2703
- Array: async (arr7) => {
2704
- if (arr7.length === 0) return NaN;
2705
- const data = toFloat64Array(arr7);
2703
+ Array: async (arr8) => {
2704
+ if (arr8.length === 0) return NaN;
2705
+ const data = toFloat64Array(arr8);
2706
2706
  const result = await computePool3.mean(data);
2707
2707
  return result.result;
2708
2708
  },
@@ -2737,15 +2737,15 @@ var parallelStatVariance = mathTyped4("parallelStatVariance", {
2737
2737
  }
2738
2738
  },
2739
2739
  // Number array
2740
- Array: async (arr7) => {
2741
- if (arr7.length === 0) return NaN;
2742
- const data = toFloat64Array(arr7);
2740
+ Array: async (arr8) => {
2741
+ if (arr8.length === 0) return NaN;
2742
+ const data = toFloat64Array(arr8);
2743
2743
  return parallelStatVariance(data);
2744
2744
  },
2745
2745
  // Number array with normalization
2746
- "Array, string": async (arr7, normalization) => {
2747
- if (arr7.length === 0) return NaN;
2748
- const data = toFloat64Array(arr7);
2746
+ "Array, string": async (arr8, normalization) => {
2747
+ if (arr8.length === 0) return NaN;
2748
+ const data = toFloat64Array(arr8);
2749
2749
  return parallelStatVariance(data, normalization);
2750
2750
  },
2751
2751
  // Variadic form
@@ -2772,15 +2772,15 @@ var parallelStatStd = mathTyped4("parallelStatStd", {
2772
2772
  return Math.sqrt(variance2);
2773
2773
  },
2774
2774
  // Number array
2775
- Array: async (arr7) => {
2776
- if (arr7.length === 0) return NaN;
2777
- const data = toFloat64Array(arr7);
2775
+ Array: async (arr8) => {
2776
+ if (arr8.length === 0) return NaN;
2777
+ const data = toFloat64Array(arr8);
2778
2778
  return parallelStatStd(data);
2779
2779
  },
2780
2780
  // Number array with normalization
2781
- "Array, string": async (arr7, normalization) => {
2782
- if (arr7.length === 0) return NaN;
2783
- const data = toFloat64Array(arr7);
2781
+ "Array, string": async (arr8, normalization) => {
2782
+ if (arr8.length === 0) return NaN;
2783
+ const data = toFloat64Array(arr8);
2784
2784
  return parallelStatStd(data, normalization);
2785
2785
  }
2786
2786
  });
@@ -2791,9 +2791,9 @@ var parallelStatMin = mathTyped4("parallelStatMin", {
2791
2791
  return result.result;
2792
2792
  },
2793
2793
  // Number array
2794
- Array: async (arr7) => {
2795
- if (arr7.length === 0) return Infinity;
2796
- const data = toFloat64Array(arr7);
2794
+ Array: async (arr8) => {
2795
+ if (arr8.length === 0) return Infinity;
2796
+ const data = toFloat64Array(arr8);
2797
2797
  const result = await computePool3.min(data);
2798
2798
  return result.result;
2799
2799
  },
@@ -2811,9 +2811,9 @@ var parallelStatMax = mathTyped4("parallelStatMax", {
2811
2811
  return result.result;
2812
2812
  },
2813
2813
  // Number array
2814
- Array: async (arr7) => {
2815
- if (arr7.length === 0) return -Infinity;
2816
- const data = toFloat64Array(arr7);
2814
+ Array: async (arr8) => {
2815
+ if (arr8.length === 0) return -Infinity;
2816
+ const data = toFloat64Array(arr8);
2817
2817
  const result = await computePool3.max(data);
2818
2818
  return result.result;
2819
2819
  },
@@ -2831,8 +2831,8 @@ var parallelStatMinMax = mathTyped4("parallelStatMinMax", {
2831
2831
  return result.result;
2832
2832
  },
2833
2833
  // Number array
2834
- Array: async (arr7) => {
2835
- const data = toFloat64Array(arr7);
2834
+ Array: async (arr8) => {
2835
+ const data = toFloat64Array(arr8);
2836
2836
  const result = await computePool3.minMax(data);
2837
2837
  return result.result;
2838
2838
  }
@@ -2852,25 +2852,25 @@ var parallelStatMedian = mathTyped4("parallelStatMedian", {
2852
2852
  return sorted[mid];
2853
2853
  },
2854
2854
  // Number array
2855
- Array: async (arr7) => {
2856
- if (arr7.length === 0) return NaN;
2857
- return parallelStatMedian(toFloat64Array(arr7));
2855
+ Array: async (arr8) => {
2856
+ if (arr8.length === 0) return NaN;
2857
+ return parallelStatMedian(toFloat64Array(arr8));
2858
2858
  },
2859
2859
  // Variadic form
2860
2860
  "number, number": (a, b) => (a + b) / 2,
2861
2861
  "number, number, number": (a, b, c) => {
2862
- const arr7 = [a, b, c].sort((x, y) => x - y);
2863
- return arr7[1];
2862
+ const arr8 = [a, b, c].sort((x, y) => x - y);
2863
+ return arr8[1];
2864
2864
  }
2865
2865
  });
2866
2866
  var parallelStatMode = mathTyped4("parallelStatMode", {
2867
2867
  // Number array
2868
- Array: (arr7) => {
2869
- if (arr7.length === 0) return [];
2868
+ Array: (arr8) => {
2869
+ if (arr8.length === 0) return [];
2870
2870
  const counts = /* @__PURE__ */ new Map();
2871
2871
  let maxCount = 0;
2872
- for (let i = 0; i < arr7.length; i++) {
2873
- const val = arr7[i];
2872
+ for (let i = 0; i < arr8.length; i++) {
2873
+ const val = arr8[i];
2874
2874
  const count2 = (counts.get(val) || 0) + 1;
2875
2875
  counts.set(val, count2);
2876
2876
  if (count2 > maxCount) maxCount = count2;
@@ -2888,11 +2888,11 @@ var parallelStatMode = mathTyped4("parallelStatMode", {
2888
2888
  });
2889
2889
  var parallelStatProd = mathTyped4("parallelStatProd", {
2890
2890
  // Number array
2891
- Array: (arr7) => {
2892
- if (arr7.length === 0) return 1;
2891
+ Array: (arr8) => {
2892
+ if (arr8.length === 0) return 1;
2893
2893
  let prod2 = 1;
2894
- for (let i = 0; i < arr7.length; i++) {
2895
- prod2 *= arr7[i];
2894
+ for (let i = 0; i < arr8.length; i++) {
2895
+ prod2 *= arr8[i];
2896
2896
  }
2897
2897
  return prod2;
2898
2898
  },
@@ -2920,8 +2920,8 @@ var parallelStatNorm = mathTyped4("parallelStatNorm", {
2920
2920
  return result.result;
2921
2921
  },
2922
2922
  // Number array
2923
- Array: async (arr7) => {
2924
- const data = toFloat64Array(arr7);
2923
+ Array: async (arr8) => {
2924
+ const data = toFloat64Array(arr8);
2925
2925
  const result = await computePool3.norm(data);
2926
2926
  return result.result;
2927
2927
  },
@@ -2962,8 +2962,8 @@ var parallelStatNorm = mathTyped4("parallelStatNorm", {
2962
2962
  }
2963
2963
  },
2964
2964
  // Number array with p-norm
2965
- "Array, number": (arr7, p) => {
2966
- return parallelStatNorm(toFloat64Array(arr7), p);
2965
+ "Array, number": (arr8, p) => {
2966
+ return parallelStatNorm(toFloat64Array(arr8), p);
2967
2967
  }
2968
2968
  });
2969
2969
  var parallelStatDistance = mathTyped4("parallelStatDistance", {
@@ -3020,8 +3020,8 @@ var parallelStatMAD = mathTyped4("parallelStatMAD", {
3020
3020
  return mad2 / n;
3021
3021
  },
3022
3022
  // Number array
3023
- Array: async (arr7) => {
3024
- return parallelStatMAD(toFloat64Array(arr7));
3023
+ Array: async (arr8) => {
3024
+ return parallelStatMAD(toFloat64Array(arr8));
3025
3025
  }
3026
3026
  });
3027
3027
  var parallelStatCumsum = mathTyped4("parallelStatCumsum", {
@@ -3032,9 +3032,9 @@ var parallelStatCumsum = mathTyped4("parallelStatCumsum", {
3032
3032
  return result;
3033
3033
  },
3034
3034
  // Number array
3035
- Array: (arr7) => {
3036
- const result = new Array(arr7.length);
3037
- neumaierCumsum(arr7, result);
3035
+ Array: (arr8) => {
3036
+ const result = new Array(arr8.length);
3037
+ neumaierCumsum(arr8, result);
3038
3038
  return result;
3039
3039
  }
3040
3040
  });
@@ -3056,8 +3056,8 @@ var parallelStatQuantile = mathTyped4("parallelStatQuantile", {
3056
3056
  return sorted[lower] * (1 - frac) + sorted[upper] * frac;
3057
3057
  },
3058
3058
  // Number array
3059
- "Array, number": (arr7, q) => {
3060
- return parallelStatQuantile(toFloat64Array(arr7), q);
3059
+ "Array, number": (arr8, q) => {
3060
+ return parallelStatQuantile(toFloat64Array(arr8), q);
3061
3061
  },
3062
3062
  // Multiple quantiles
3063
3063
  "Float64Array, Array": (data, quantiles) => {
@@ -3080,15 +3080,15 @@ var parallelStatHistogram = mathTyped4("parallelStatHistogram", {
3080
3080
  return result.result;
3081
3081
  },
3082
3082
  // Number array
3083
- "Array, number": async (arr7, bins) => {
3084
- return parallelStatHistogram(toFloat64Array(arr7), bins);
3083
+ "Array, number": async (arr8, bins) => {
3084
+ return parallelStatHistogram(toFloat64Array(arr8), bins);
3085
3085
  }
3086
3086
  });
3087
- function quickSelect(arr7, k) {
3088
- if (k < 0 || k >= arr7.length) {
3089
- throw new RangeError(`k=${k} is out of range for array of length ${arr7.length}`);
3087
+ function quickSelect(arr8, k) {
3088
+ if (k < 0 || k >= arr8.length) {
3089
+ throw new RangeError(`k=${k} is out of range for array of length ${arr8.length}`);
3090
3090
  }
3091
- const a = arr7.slice();
3091
+ const a = arr8.slice();
3092
3092
  return _quickSelect(a, 0, a.length - 1, k);
3093
3093
  }
3094
3094
  function _quickSelect(a, lo, hi, k) {
@@ -3131,32 +3131,32 @@ function _quickSelect(a, lo, hi, k) {
3131
3131
  }
3132
3132
  return a[lo];
3133
3133
  }
3134
- function medianSelect(arr7) {
3135
- const n = arr7.length;
3134
+ function medianSelect(arr8) {
3135
+ const n = arr8.length;
3136
3136
  if (n === 0) return NaN;
3137
- if (n === 1) return arr7[0];
3137
+ if (n === 1) return arr8[0];
3138
3138
  const mid = Math.floor(n / 2);
3139
3139
  if (n % 2 === 1) {
3140
- return quickSelect(arr7, mid);
3140
+ return quickSelect(arr8, mid);
3141
3141
  }
3142
- const a = arr7.slice();
3142
+ const a = arr8.slice();
3143
3143
  const lower = _quickSelect(a, 0, a.length - 1, mid - 1);
3144
3144
  const upper = _quickSelect(a, 0, a.length - 1, mid);
3145
3145
  return (lower + upper) / 2;
3146
3146
  }
3147
- function minSelect(arr7, k) {
3147
+ function minSelect(arr8, k) {
3148
3148
  if (k <= 0) return [];
3149
- if (k >= arr7.length) return arr7.slice().sort((a2, b) => a2 - b);
3150
- const a = arr7.slice();
3149
+ if (k >= arr8.length) return arr8.slice().sort((a2, b) => a2 - b);
3150
+ const a = arr8.slice();
3151
3151
  _quickSelect(a, 0, a.length - 1, k - 1);
3152
3152
  const result = a.slice(0, k);
3153
3153
  result.sort((x, y) => x - y);
3154
3154
  return result;
3155
3155
  }
3156
- function maxSelect(arr7, k) {
3156
+ function maxSelect(arr8, k) {
3157
3157
  if (k <= 0) return [];
3158
- if (k >= arr7.length) return arr7.slice().sort((a2, b) => b - a2);
3159
- const a = arr7.slice();
3158
+ if (k >= arr8.length) return arr8.slice().sort((a2, b) => b - a2);
3159
+ const a = arr8.slice();
3160
3160
  const pivot = a.length - k;
3161
3161
  _quickSelect(a, 0, a.length - 1, pivot);
3162
3162
  const result = a.slice(pivot);
@@ -5110,8 +5110,8 @@ var typedLogical = {
5110
5110
 
5111
5111
  // src/typed/complex.ts
5112
5112
  import { mathTyped as mathTyped8, BigNumber as BigNumber5 } from "@danielsimonjr/mathts-core";
5113
- function deepMapArray(arr7, fn) {
5114
- return arr7.map(
5113
+ function deepMapArray(arr8, fn) {
5114
+ return arr8.map(
5115
5115
  (item) => Array.isArray(item) ? deepMapArray(item, fn) : fn(item)
5116
5116
  );
5117
5117
  }
@@ -5161,9 +5161,9 @@ var typedComplex = {
5161
5161
 
5162
5162
  // src/typed/set.ts
5163
5163
  import { mathTyped as mathTyped9 } from "@danielsimonjr/mathts-core";
5164
- function flattenArray(arr7) {
5164
+ function flattenArray(arr8) {
5165
5165
  const result = [];
5166
- const stack = [...arr7];
5166
+ const stack = [...arr8];
5167
5167
  while (stack.length > 0) {
5168
5168
  const item = stack.shift();
5169
5169
  if (Array.isArray(item)) {
@@ -9894,11 +9894,11 @@ function discriminant(coeffs) {
9894
9894
  const sign3 = deg * (deg - 1) / 2 % 2 === 0 ? 1 : -1;
9895
9895
  return sign3 * res / an;
9896
9896
  }
9897
- function differences(arr7, n = 1) {
9897
+ function differences(arr8, n = 1) {
9898
9898
  if (n < 0 || !Number.isInteger(n)) {
9899
9899
  throw new Error("Difference order must be a non-negative integer");
9900
9900
  }
9901
- let result = [...arr7];
9901
+ let result = [...arr8];
9902
9902
  for (let k = 0; k < n; k++) {
9903
9903
  if (result.length <= 1) return [];
9904
9904
  const next = new Array(result.length - 1);
@@ -10167,11 +10167,11 @@ function fullSimplify(expr) {
10167
10167
  result = reduce(result);
10168
10168
  return result;
10169
10169
  }
10170
- function element(arr7, index) {
10171
- if (index < 0 || index >= arr7.length) {
10172
- throw new Error("Index " + index + " out of bounds for array of length " + arr7.length);
10170
+ function element(arr8, index) {
10171
+ if (index < 0 || index >= arr8.length) {
10172
+ throw new Error("Index " + index + " out of bounds for array of length " + arr8.length);
10173
10173
  }
10174
- return arr7[index];
10174
+ return arr8[index];
10175
10175
  }
10176
10176
  function eliminate(system, variable) {
10177
10177
  const symbols = /* @__PURE__ */ new Set();
@@ -11549,22 +11549,22 @@ var createSolveODE = /* @__PURE__ */ factory(
11549
11549
  const stageAlloc = wasmLoader.allocateFloat64ArrayEmpty(numStages * dim);
11550
11550
  try {
11551
11551
  let readVec2 = function(alloc) {
11552
- const arr7 = new Float64Array(wasm.memory.buffer, alloc.ptr, dim);
11552
+ const arr8 = new Float64Array(wasm.memory.buffer, alloc.ptr, dim);
11553
11553
  const result = new Array(dim);
11554
11554
  for (let i = 0; i < dim; i++) {
11555
- result[i] = arr7[i];
11555
+ result[i] = arr8[i];
11556
11556
  }
11557
11557
  return result;
11558
11558
  }, writeVec2 = function(alloc, data) {
11559
- const arr7 = new Float64Array(wasm.memory.buffer, alloc.ptr, dim);
11559
+ const arr8 = new Float64Array(wasm.memory.buffer, alloc.ptr, dim);
11560
11560
  for (let i = 0; i < dim; i++) {
11561
- arr7[i] = data[i];
11561
+ arr8[i] = data[i];
11562
11562
  }
11563
11563
  }, writeStage2 = function(stageIdx, data) {
11564
11564
  const offset = stageIdx * dim;
11565
- const arr7 = new Float64Array(wasm.memory.buffer, stageAlloc.ptr, numStages * dim);
11565
+ const arr8 = new Float64Array(wasm.memory.buffer, stageAlloc.ptr, numStages * dim);
11566
11566
  for (let i = 0; i < dim; i++) {
11567
- arr7[offset + i] = data[i];
11567
+ arr8[offset + i] = data[i];
11568
11568
  }
11569
11569
  }, trimStepNum2 = function(tn, tfn, hn) {
11570
11570
  const next = tn + hn;
@@ -15509,12 +15509,12 @@ function _makeMulberry322(seed) {
15509
15509
  return z / 4294967296;
15510
15510
  };
15511
15511
  }
15512
- function _shuffle(arr7, rng) {
15513
- for (let i = arr7.length - 1; i > 0; i--) {
15512
+ function _shuffle(arr8, rng) {
15513
+ for (let i = arr8.length - 1; i > 0; i--) {
15514
15514
  const j = Math.floor(rng() * (i + 1));
15515
- const tmp = arr7[i];
15516
- arr7[i] = arr7[j];
15517
- arr7[j] = tmp;
15515
+ const tmp = arr8[i];
15516
+ arr8[i] = arr8[j];
15517
+ arr8[j] = tmp;
15518
15518
  }
15519
15519
  }
15520
15520
  function _bootstrapSummary(stats) {
@@ -15528,16 +15528,16 @@ function _bootstrapSummary(stats) {
15528
15528
  const std2 = n > 1 ? Math.sqrt(sq / (n - 1)) : 0;
15529
15529
  return { bootstrapMean: mean7, bootstrapStd: std2 };
15530
15530
  }
15531
- function _mean(arr7) {
15531
+ function _mean(arr8) {
15532
15532
  let sum3 = 0;
15533
- for (let i = 0; i < arr7.length; i++) sum3 += arr7[i];
15534
- return sum3 / arr7.length;
15533
+ for (let i = 0; i < arr8.length; i++) sum3 += arr8[i];
15534
+ return sum3 / arr8.length;
15535
15535
  }
15536
- function _variance(arr7, ddof = 1) {
15537
- const m = _mean(arr7);
15536
+ function _variance(arr8, ddof = 1) {
15537
+ const m = _mean(arr8);
15538
15538
  let sum3 = 0;
15539
- for (let i = 0; i < arr7.length; i++) sum3 += (arr7[i] - m) ** 2;
15540
- return sum3 / (arr7.length - ddof);
15539
+ for (let i = 0; i < arr8.length; i++) sum3 += (arr8[i] - m) ** 2;
15540
+ return sum3 / (arr8.length - ddof);
15541
15541
  }
15542
15542
  function _erf(x) {
15543
15543
  if (x === 0) return 0;
@@ -15651,6 +15651,13 @@ function _chiSquaredPValue(x, df) {
15651
15651
  function _fPValue(f, d1, d2) {
15652
15652
  return 1 - _betainc2(d1 * f / (d1 * f + d2), d1 / 2, d2 / 2);
15653
15653
  }
15654
+ function _binomCoeff(n, k) {
15655
+ if (k < 0 || k > n) return 0;
15656
+ const kk = Math.min(k, n - k);
15657
+ let r = 1;
15658
+ for (let i = 0; i < kk; i++) r = r * (n - i) / (i + 1);
15659
+ return r;
15660
+ }
15654
15661
  function studentTTest(sample1, sample2) {
15655
15662
  if (sample1.length < 2) throw new Error("studentTTest: sample1 must have at least 2 elements");
15656
15663
  if (sample2 === void 0 || sample2 === null) {
@@ -15915,6 +15922,40 @@ async function kolmogorovSmirnovTest(sample, cdfFn, opts) {
15915
15922
  bootstrapStd
15916
15923
  };
15917
15924
  }
15925
+ function _mwUCounts(n16, n26) {
15926
+ const table = [];
15927
+ for (let i = 0; i <= n16; i++) {
15928
+ const row2 = [];
15929
+ for (let j = 0; j <= n26; j++) {
15930
+ const maxU = i * j;
15931
+ const arr8 = new Float64Array(maxU + 1);
15932
+ if (i === 0 || j === 0) {
15933
+ arr8[0] = 1;
15934
+ } else {
15935
+ const prevI = table[i - 1][j];
15936
+ const prevJ = row2[j - 1];
15937
+ for (let u = 0; u <= maxU; u++) {
15938
+ let val = 0;
15939
+ const uShift = u - j;
15940
+ if (uShift >= 0 && uShift < prevI.length) val += prevI[uShift];
15941
+ if (u < prevJ.length) val += prevJ[u];
15942
+ arr8[u] = val;
15943
+ }
15944
+ }
15945
+ row2.push(arr8);
15946
+ }
15947
+ table.push(row2);
15948
+ }
15949
+ return table[n16][n26];
15950
+ }
15951
+ function _mwExactPValue(n16, n26, U) {
15952
+ const counts = _mwUCounts(n16, n26);
15953
+ let total = 0;
15954
+ for (let k = 0; k < counts.length; k++) total += counts[k];
15955
+ let cumLe = 0;
15956
+ for (let k = 0; k <= U; k++) cumLe += counts[k];
15957
+ return Math.min(1, 2 * (cumLe / total));
15958
+ }
15918
15959
  async function mannWhitneyTest(sample1, sample2, opts) {
15919
15960
  if (sample1.length < 1 || sample2.length < 1) {
15920
15961
  throw new Error("mannWhitneyTest: both samples must be non-empty");
@@ -15938,10 +15979,12 @@ async function mannWhitneyTest(sample1, sample2, opts) {
15938
15979
  combined.sort((a, b) => a.value - b.value);
15939
15980
  }
15940
15981
  const ranksArr = new Float64Array(nTotal);
15982
+ let hasTies = false;
15941
15983
  let i = 0;
15942
15984
  while (i < nTotal) {
15943
15985
  let j = i;
15944
15986
  while (j < nTotal && combined[j].value === combined[i].value) j++;
15987
+ if (j - i > 1) hasTies = true;
15945
15988
  const avgRank = (i + 1 + j) / 2;
15946
15989
  for (let k = i; k < j; k++) ranksArr[k] = avgRank;
15947
15990
  i = j;
@@ -15961,11 +16004,16 @@ async function mannWhitneyTest(sample1, sample2, opts) {
15961
16004
  const U1 = R1 - n16 * (n16 + 1) / 2;
15962
16005
  const U2 = n16 * n26 - U1;
15963
16006
  const U = Math.min(U1, U2);
15964
- const mu = n16 * n26 / 2;
15965
- const sigma = Math.sqrt(n16 * n26 * (n16 + n26 + 1) / 12);
15966
- const z = sigma === 0 ? 0 : (U - mu) / sigma;
15967
- const pValue = 2 * _normalCDF(z);
15968
- const baseResult = { uStatistic: U, pValue: Math.min(1, pValue) };
16007
+ let pValue;
16008
+ if (n16 * n26 <= 400 && !hasTies) {
16009
+ pValue = _mwExactPValue(n16, n26, U);
16010
+ } else {
16011
+ const mu = n16 * n26 / 2;
16012
+ const sigma = Math.sqrt(n16 * n26 * (n16 + n26 + 1) / 12);
16013
+ const z = sigma === 0 ? 0 : (U - mu) / sigma;
16014
+ pValue = Math.min(1, 2 * _normalCDF(z));
16015
+ }
16016
+ const baseResult = { uStatistic: U, pValue };
15969
16017
  const B = opts?.bootstrap ?? 0;
15970
16018
  if (B <= 0) return baseResult;
15971
16019
  const combinedPool = new Float64Array(nTotal);
@@ -16267,7 +16315,26 @@ function _kstwobignSf(x) {
16267
16315
  }
16268
16316
  return Math.max(0, Math.min(1, sum3));
16269
16317
  }
16270
- function kolmogorovSmirnov2Test(sample1, sample2) {
16318
+ function _ks2ExactPValue(n16, n26, D) {
16319
+ const eps = 1e-9;
16320
+ const dp = Array.from({ length: n16 + 1 }, () => new Float64Array(n26 + 1));
16321
+ dp[0][0] = 1;
16322
+ for (let i = 0; i <= n16; i++) {
16323
+ for (let j = 0; j <= n26; j++) {
16324
+ if (i === 0 && j === 0) continue;
16325
+ const dev = Math.abs(i / n16 - j / n26);
16326
+ if (dev >= D - eps) continue;
16327
+ let v = 0;
16328
+ if (i > 0) v += dp[i - 1][j];
16329
+ if (j > 0) v += dp[i][j - 1];
16330
+ dp[i][j] = v;
16331
+ }
16332
+ }
16333
+ const total = _binomCoeff(n16 + n26, n16);
16334
+ const inside = dp[n16][n26];
16335
+ return Math.max(0, Math.min(1, 1 - inside / total));
16336
+ }
16337
+ function kolmogorovSmirnov2Test(sample1, sample2, opts) {
16271
16338
  const n16 = sample1.length;
16272
16339
  const n26 = sample2.length;
16273
16340
  if (n16 < 1 || n26 < 1) {
@@ -16284,11 +16351,16 @@ function kolmogorovSmirnov2Test(sample1, sample2) {
16284
16351
  while (j < n26 && b[j] <= x) j++;
16285
16352
  d = Math.max(d, Math.abs(i / n16 - j / n26));
16286
16353
  }
16354
+ const method = opts?.method;
16355
+ const useExact = method === "exact" || method === "auto" && n16 * n26 <= 1e4;
16356
+ if (useExact) {
16357
+ return { statistic: d, pValue: _ks2ExactPValue(n16, n26, d) };
16358
+ }
16287
16359
  const en = Math.sqrt(n16 * n26 / (n16 + n26));
16288
16360
  return { statistic: d, pValue: _kstwobignSf(en * d) };
16289
16361
  }
16290
- function _median(arr7) {
16291
- const s = arr7.slice().sort((a, b) => a - b);
16362
+ function _median(arr8) {
16363
+ const s = arr8.slice().sort((a, b) => a - b);
16292
16364
  const n = s.length;
16293
16365
  const m = n >> 1;
16294
16366
  return n % 2 === 1 ? s[m] : (s[m - 1] + s[m]) / 2;
@@ -18078,19 +18150,19 @@ var randomInt = mathTyped16("randomInt", {
18078
18150
  }
18079
18151
  });
18080
18152
  var pickRandom = mathTyped16("pickRandom", {
18081
- Array: (arr7) => _pick(arr7, 1, void 0)[0],
18082
- "Array, number": (arr7, n) => _pick(arr7, n, void 0),
18083
- "Array, Array": (arr7, weights) => _pick(arr7, 1, weights)[0],
18084
- "Array, number, Array": (arr7, n, weights) => _pick(arr7, n, weights),
18085
- "Array, Array, number": (arr7, weights, n) => _pick(arr7, n, weights)
18153
+ Array: (arr8) => _pick(arr8, 1, void 0)[0],
18154
+ "Array, number": (arr8, n) => _pick(arr8, n, void 0),
18155
+ "Array, Array": (arr8, weights) => _pick(arr8, 1, weights)[0],
18156
+ "Array, number, Array": (arr8, n, weights) => _pick(arr8, n, weights),
18157
+ "Array, Array, number": (arr8, weights, n) => _pick(arr8, n, weights)
18086
18158
  });
18087
- function _pick(arr7, n, weights) {
18088
- if (arr7.length === 0) throw new RangeError("Cannot pick from an empty array");
18159
+ function _pick(arr8, n, weights) {
18160
+ if (arr8.length === 0) throw new RangeError("Cannot pick from an empty array");
18089
18161
  if (!Number.isInteger(n) || n < 1) {
18090
18162
  throw new RangeError("number of picks must be a positive integer");
18091
18163
  }
18092
18164
  if (weights !== void 0) {
18093
- if (weights.length !== arr7.length) {
18165
+ if (weights.length !== arr8.length) {
18094
18166
  throw new RangeError("weights must have the same length as the array");
18095
18167
  }
18096
18168
  let total = 0;
@@ -18104,20 +18176,20 @@ function _pick(arr7, n, weights) {
18104
18176
  const result2 = [];
18105
18177
  for (let i = 0; i < n; i++) {
18106
18178
  let r = _rng() * total;
18107
- for (let j = 0; j < arr7.length; j++) {
18179
+ for (let j = 0; j < arr8.length; j++) {
18108
18180
  r -= weights[j];
18109
18181
  if (r < 0) {
18110
- result2.push(arr7[j]);
18182
+ result2.push(arr8[j]);
18111
18183
  break;
18112
18184
  }
18113
18185
  }
18114
- if (result2.length < i + 1) result2.push(arr7[arr7.length - 1]);
18186
+ if (result2.length < i + 1) result2.push(arr8[arr8.length - 1]);
18115
18187
  }
18116
18188
  return result2;
18117
18189
  }
18118
18190
  const result = [];
18119
18191
  for (let i = 0; i < n; i++) {
18120
- result.push(arr7[Math.floor(_rng() * arr7.length)]);
18192
+ result.push(arr8[Math.floor(_rng() * arr8.length)]);
18121
18193
  }
18122
18194
  return result;
18123
18195
  }
@@ -18769,13 +18841,13 @@ function resize(array, size2, defaultValue) {
18769
18841
  );
18770
18842
  }
18771
18843
  });
18772
- let arr7 = array;
18844
+ let arr8 = array;
18773
18845
  if (isNumber(array) || isBigNumber(array)) {
18774
- arr7 = [array];
18846
+ arr8 = [array];
18775
18847
  }
18776
18848
  const _defaultValue = defaultValue !== void 0 ? defaultValue : 0;
18777
- _resize(arr7, size2, 0, _defaultValue);
18778
- return arr7;
18849
+ _resize(arr8, size2, 0, _defaultValue);
18850
+ return arr8;
18779
18851
  }
18780
18852
  function _resize(array, size2, dim, defaultValue) {
18781
18853
  let i;
@@ -18876,9 +18948,9 @@ function _reshape(array, sizes) {
18876
18948
  }
18877
18949
  function squeeze(array, size2) {
18878
18950
  const s = size2 || arraySize(array);
18879
- let arr7 = array;
18880
- while (Array.isArray(arr7) && arr7.length === 1) {
18881
- arr7 = arr7[0];
18951
+ let arr8 = array;
18952
+ while (Array.isArray(arr8) && arr8.length === 1) {
18953
+ arr8 = arr8[0];
18882
18954
  s.shift();
18883
18955
  }
18884
18956
  let dims = s.length;
@@ -18886,19 +18958,19 @@ function squeeze(array, size2) {
18886
18958
  dims--;
18887
18959
  }
18888
18960
  if (dims < s.length) {
18889
- arr7 = _squeeze(arr7, dims, 0);
18961
+ arr8 = _squeeze(arr8, dims, 0);
18890
18962
  s.length = dims;
18891
18963
  }
18892
- return arr7;
18964
+ return arr8;
18893
18965
  }
18894
18966
  function _squeeze(array, dims, dim) {
18895
18967
  if (dim < dims) {
18896
18968
  const next = dim + 1;
18897
- const arr7 = array;
18898
- for (let i = 0, ii = arr7.length; i < ii; i++) {
18899
- arr7[i] = _squeeze(arr7[i], dims, next);
18969
+ const arr8 = array;
18970
+ for (let i = 0, ii = arr8.length; i < ii; i++) {
18971
+ arr8[i] = _squeeze(arr8[i], dims, next);
18900
18972
  }
18901
- return arr7;
18973
+ return arr8;
18902
18974
  } else {
18903
18975
  let result = array;
18904
18976
  while (Array.isArray(result)) {
@@ -18921,9 +18993,9 @@ function flatten2(array, isRectangular = false) {
18921
18993
  _flatten(array);
18922
18994
  }
18923
18995
  return flat;
18924
- function _flatten(arr7) {
18925
- for (let i = 0; i < arr7.length; i++) {
18926
- const item = arr7[i];
18996
+ function _flatten(arr8) {
18997
+ for (let i = 0; i < arr8.length; i++) {
18998
+ const item = arr8[i];
18927
18999
  if (Array.isArray(item)) {
18928
19000
  _flatten(item);
18929
19001
  } else {
@@ -18931,14 +19003,14 @@ function flatten2(array, isRectangular = false) {
18931
19003
  }
18932
19004
  }
18933
19005
  }
18934
- function _flattenRectangular(arr7) {
18935
- if (Array.isArray(arr7[0])) {
18936
- for (let i = 0; i < arr7.length; i++) {
18937
- _flattenRectangular(arr7[i]);
19006
+ function _flattenRectangular(arr8) {
19007
+ if (Array.isArray(arr8[0])) {
19008
+ for (let i = 0; i < arr8.length; i++) {
19009
+ _flattenRectangular(arr8[i]);
18938
19010
  }
18939
19011
  } else {
18940
- for (let i = 0; i < arr7.length; i++) {
18941
- flat.push(arr7[i]);
19012
+ for (let i = 0; i < arr8.length; i++) {
19013
+ flat.push(arr8[i]);
18942
19014
  }
18943
19015
  }
18944
19016
  }
@@ -19918,24 +19990,24 @@ function decCoefficientToBinaryString(x) {
19918
19990
  str = str.slice(0, xe) + "." + str.slice(xe);
19919
19991
  }
19920
19992
  }
19921
- const arr7 = [0];
19993
+ const arr8 = [0];
19922
19994
  for (let i = 0; i < str.length; ) {
19923
- let arrL = arr7.length;
19995
+ let arrL = arr8.length;
19924
19996
  while (arrL--) {
19925
- arr7[arrL] *= 10;
19997
+ arr8[arrL] *= 10;
19926
19998
  }
19927
- arr7[0] += parseInt(str.charAt(i++));
19928
- for (let j2 = 0; j2 < arr7.length; ++j2) {
19929
- if (arr7[j2] > 1) {
19930
- if (arr7[j2 + 1] === null || arr7[j2 + 1] === void 0) {
19931
- arr7[j2 + 1] = 0;
19999
+ arr8[0] += parseInt(str.charAt(i++));
20000
+ for (let j2 = 0; j2 < arr8.length; ++j2) {
20001
+ if (arr8[j2] > 1) {
20002
+ if (arr8[j2 + 1] === null || arr8[j2 + 1] === void 0) {
20003
+ arr8[j2 + 1] = 0;
19932
20004
  }
19933
- arr7[j2 + 1] += arr7[j2] >> 1;
19934
- arr7[j2] &= 1;
20005
+ arr8[j2 + 1] += arr8[j2] >> 1;
20006
+ arr8[j2] &= 1;
19935
20007
  }
19936
20008
  }
19937
20009
  }
19938
- return arr7.reverse();
20010
+ return arr8.reverse();
19939
20011
  }
19940
20012
  function bitXor2(x, y) {
19941
20013
  if (x.isFinite() && !x.isInteger() || y.isFinite() && !y.isInteger()) {
@@ -20435,8 +20507,8 @@ var createMap = /* @__PURE__ */ factory(
20435
20507
  if (index) index[depth] = i;
20436
20508
  result[i] = iterate(
20437
20509
  arrays2.map((array, arrayIndex) => {
20438
- const arr7 = array;
20439
- return offsets[arrayIndex] > depth ? array : arr7.length === 1 ? arr7[0] : arr7[i];
20510
+ const arr8 = array;
20511
+ return offsets[arrayIndex] > depth ? array : arr8.length === 1 ? arr8[0] : arr8[i];
20440
20512
  }),
20441
20513
  depth + 1
20442
20514
  );
@@ -20446,8 +20518,8 @@ var createMap = /* @__PURE__ */ factory(
20446
20518
  if (index) index[depth] = i;
20447
20519
  result[i] = callback(
20448
20520
  arrays2.map((a) => {
20449
- const arr7 = a;
20450
- return arr7.length === 1 ? arr7[0] : arr7[i];
20521
+ const arr8 = a;
20522
+ return arr8.length === 1 ? arr8[0] : arr8[i];
20451
20523
  }),
20452
20524
  index ? index.slice() : void 0
20453
20525
  );
@@ -20657,15 +20729,15 @@ var createLgamma = /* @__PURE__ */ factory(
20657
20729
  0.08333333333333333
20658
20730
  ];
20659
20731
  return typed3(name30, {
20660
- Array: function(arr7) {
20732
+ Array: function(arr8) {
20661
20733
  const wasm = wasmLoader.getModule();
20662
- if (wasm && arr7.length >= 100 && arr7.every((x) => typeof x === "number")) {
20734
+ if (wasm && arr8.length >= 100 && arr8.every((x) => typeof x === "number")) {
20663
20735
  try {
20664
- const input = new Float64Array(arr7);
20736
+ const input = new Float64Array(arr8);
20665
20737
  const inputAlloc = wasmLoader.allocateFloat64Array(input);
20666
- const resultAlloc = wasmLoader.allocateFloat64ArrayEmpty(arr7.length);
20738
+ const resultAlloc = wasmLoader.allocateFloat64ArrayEmpty(arr8.length);
20667
20739
  try {
20668
- wasm.lgammaArray(inputAlloc.ptr, arr7.length, resultAlloc.ptr);
20740
+ wasm.lgammaArray(inputAlloc.ptr, arr8.length, resultAlloc.ptr);
20669
20741
  return Array.from(resultAlloc.array);
20670
20742
  } finally {
20671
20743
  wasmLoader.free(inputAlloc.ptr);
@@ -20674,7 +20746,7 @@ var createLgamma = /* @__PURE__ */ factory(
20674
20746
  } catch {
20675
20747
  }
20676
20748
  }
20677
- return arr7.map((x) => lgammaNumber(x));
20749
+ return arr8.map((x) => lgammaNumber(x));
20678
20750
  },
20679
20751
  number: lgammaNumber,
20680
20752
  Complex: lgammaComplex2,
@@ -21711,8 +21783,8 @@ var createIsBounded = /* @__PURE__ */ factory(
21711
21783
  ),
21712
21784
  "Array | Matrix": typed3.referToSelf(
21713
21785
  (self) => (A) => {
21714
- const arr7 = Array.isArray(A) ? A : A.valueOf();
21715
- return arr7.every((entry) => self(entry));
21786
+ const arr8 = Array.isArray(A) ? A : A.valueOf();
21787
+ return arr8.every((entry) => self(entry));
21716
21788
  }
21717
21789
  )
21718
21790
  });
@@ -22048,9 +22120,9 @@ var createUnaryPlus = /* @__PURE__ */ factory(
22048
22120
 
22049
22121
  // src/matrix/dot.ts
22050
22122
  import { pairwiseDot as pairwiseDot2 } from "@danielsimonjr/mathts-core";
22051
- function _isFlatNumbers(arr7) {
22052
- for (let i = 0; i < arr7.length; i++) {
22053
- if (typeof arr7[i] !== "number") return false;
22123
+ function _isFlatNumbers(arr8) {
22124
+ for (let i = 0; i < arr8.length; i++) {
22125
+ if (typeof arr8[i] !== "number") return false;
22054
22126
  }
22055
22127
  return true;
22056
22128
  }
@@ -22290,9 +22362,9 @@ function improveErrorMessage(err, fnName, value) {
22290
22362
 
22291
22363
  // src/statistics/prod.ts
22292
22364
  var WASM_PROD_THRESHOLD = 100;
22293
- function isFlatNumberArray(arr7) {
22294
- for (let i = 0; i < arr7.length; i++) {
22295
- if (typeof arr7[i] !== "number") {
22365
+ function isFlatNumberArray(arr8) {
22366
+ for (let i = 0; i < arr8.length; i++) {
22367
+ if (typeof arr8[i] !== "number") {
22296
22368
  return false;
22297
22369
  }
22298
22370
  }
@@ -22810,19 +22882,19 @@ function createZerosAndOnes(name254, defaultValue, { typed: typed3, config: conf
22810
22882
  }
22811
22883
  return m;
22812
22884
  } else {
22813
- const arr7 = [];
22885
+ const arr8 = [];
22814
22886
  if (size2.length > 0) {
22815
- return resize(arr7, size2, dflt);
22887
+ return resize(arr8, size2, dflt);
22816
22888
  }
22817
- return arr7;
22889
+ return arr8;
22818
22890
  }
22819
22891
  }
22820
22892
  function _normalize(size2) {
22821
22893
  let hasBigNumbers = false;
22822
- size2.forEach(function(value, index, arr7) {
22894
+ size2.forEach(function(value, index, arr8) {
22823
22895
  if (isBigNumber(value)) {
22824
22896
  hasBigNumbers = true;
22825
- arr7[index] = value.toNumber();
22897
+ arr8[index] = value.toNumber();
22826
22898
  }
22827
22899
  });
22828
22900
  return hasBigNumbers;
@@ -22949,9 +23021,9 @@ var createDiag = /* @__PURE__ */ factory(
22949
23021
 
22950
23022
  // src/matrix/kron.ts
22951
23023
  var WASM_KRON_THRESHOLD = 64;
22952
- function isPlainNumber2D(arr7) {
22953
- for (let i = 0; i < arr7.length; i++) {
22954
- const row2 = arr7[i];
23024
+ function isPlainNumber2D(arr8) {
23025
+ for (let i = 0; i < arr8.length; i++) {
23026
+ const row2 = arr8[i];
22955
23027
  for (let j = 0; j < row2.length; j++) {
22956
23028
  if (typeof row2[j] !== "number") {
22957
23029
  return false;
@@ -22960,11 +23032,11 @@ function isPlainNumber2D(arr7) {
22960
23032
  }
22961
23033
  return true;
22962
23034
  }
22963
- function flatten2D(arr7, rows, cols) {
23035
+ function flatten2D(arr8, rows, cols) {
22964
23036
  const result = new Float64Array(rows * cols);
22965
23037
  for (let i = 0; i < rows; i++) {
22966
23038
  for (let j = 0; j < cols; j++) {
22967
- result[i * cols + j] = arr7[i][j];
23039
+ result[i * cols + j] = arr8[i][j];
22968
23040
  }
22969
23041
  }
22970
23042
  return result;
@@ -23106,15 +23178,15 @@ var createMatrixFromColumns = /* @__PURE__ */ factory(
23106
23178
  ({ typed: typed3, matrix: matrix2, flatten: flatten4, size: size2 }) => {
23107
23179
  return typed3(name92, {
23108
23180
  // Single variadic handler for arrays, matrices, and mixed types
23109
- "...": function(arr7) {
23110
- if (arr7.length === 0) {
23181
+ "...": function(arr8) {
23182
+ if (arr8.length === 0) {
23111
23183
  throw new TypeError("At least one column is needed to construct a matrix.");
23112
23184
  }
23113
- const allMatrix = arr7.every(
23185
+ const allMatrix = arr8.every(
23114
23186
  (item) => typeof item.toArray === "function"
23115
23187
  );
23116
- const hasArray = arr7.some((item) => Array.isArray(item));
23117
- const arrays = arr7.map(
23188
+ const hasArray = arr8.some((item) => Array.isArray(item));
23189
+ const arrays = arr8.map(
23118
23190
  (item) => typeof item.toArray === "function" ? item.toArray() : item
23119
23191
  );
23120
23192
  const result = _createArray(arrays);
@@ -23125,15 +23197,15 @@ var createMatrixFromColumns = /* @__PURE__ */ factory(
23125
23197
  }
23126
23198
  // TODO implement this properly for SparseMatrix
23127
23199
  });
23128
- function _createArray(arr7) {
23129
- if (arr7.length === 0)
23200
+ function _createArray(arr8) {
23201
+ if (arr8.length === 0)
23130
23202
  throw new TypeError("At least one column is needed to construct a matrix.");
23131
- const N = checkVectorTypeAndReturnLength(arr7[0]);
23203
+ const N = checkVectorTypeAndReturnLength(arr8[0]);
23132
23204
  const result = [];
23133
23205
  for (let i = 0; i < N; i++) {
23134
23206
  result[i] = [];
23135
23207
  }
23136
- for (const col of arr7) {
23208
+ for (const col of arr8) {
23137
23209
  const colLength = checkVectorTypeAndReturnLength(col);
23138
23210
  if (colLength !== N) {
23139
23211
  throw new TypeError(
@@ -23175,15 +23247,15 @@ var createMatrixFromRows = /* @__PURE__ */ factory(
23175
23247
  ({ typed: typed3, matrix: matrix2, flatten: flatten4, size: size2 }) => {
23176
23248
  return typed3(name93, {
23177
23249
  // Single variadic handler for arrays, matrices, and mixed types
23178
- "...": function(arr7) {
23179
- if (arr7.length === 0) {
23250
+ "...": function(arr8) {
23251
+ if (arr8.length === 0) {
23180
23252
  throw new TypeError("At least one row is needed to construct a matrix.");
23181
23253
  }
23182
- const allMatrix = arr7.every(
23254
+ const allMatrix = arr8.every(
23183
23255
  (item) => typeof item.toArray === "function"
23184
23256
  );
23185
- const hasArray = arr7.some((item) => Array.isArray(item));
23186
- const arrays = arr7.map(
23257
+ const hasArray = arr8.some((item) => Array.isArray(item));
23258
+ const arrays = arr8.map(
23187
23259
  (item) => typeof item.toArray === "function" ? item.toArray() : item
23188
23260
  );
23189
23261
  const result = _createArray(arrays);
@@ -23194,12 +23266,12 @@ var createMatrixFromRows = /* @__PURE__ */ factory(
23194
23266
  }
23195
23267
  // TODO implement this properly for SparseMatrix
23196
23268
  });
23197
- function _createArray(arr7) {
23198
- if (arr7.length === 0)
23269
+ function _createArray(arr8) {
23270
+ if (arr8.length === 0)
23199
23271
  throw new TypeError("At least one row is needed to construct a matrix.");
23200
- const N = checkVectorTypeAndReturnLength(arr7[0]);
23272
+ const N = checkVectorTypeAndReturnLength(arr8[0]);
23201
23273
  const result = [];
23202
- for (const row2 of arr7) {
23274
+ for (const row2 of arr8) {
23203
23275
  const rowLength = checkVectorTypeAndReturnLength(row2);
23204
23276
  if (rowLength !== N) {
23205
23277
  throw new TypeError(
@@ -26211,9 +26283,9 @@ var createResize = /* @__PURE__ */ factory(
26211
26283
  }
26212
26284
  return clone(scalar);
26213
26285
  } else {
26214
- let arr7 = !Array.isArray(x) ? [x] : x;
26215
- arr7 = clone(arr7);
26216
- const res = resize(arr7, sz, defaultValue);
26286
+ let arr8 = !Array.isArray(x) ? [x] : x;
26287
+ arr8 = clone(arr8);
26288
+ const res = resize(arr8, sz, defaultValue);
26217
26289
  return asMatrix ? matrix2(res) : res;
26218
26290
  }
26219
26291
  }
@@ -27111,9 +27183,9 @@ var createZpk2tf = /* @__PURE__ */ factory(
27111
27183
 
27112
27184
  // src/statistics/cumsum.ts
27113
27185
  import { neumaierCumsum as neumaierCumsum2 } from "@danielsimonjr/mathts-core";
27114
- function isFlatNumberArray2(arr7) {
27115
- for (let i = 0; i < arr7.length; i++) {
27116
- if (typeof arr7[i] !== "number") {
27186
+ function isFlatNumberArray2(arr8) {
27187
+ for (let i = 0; i < arr8.length; i++) {
27188
+ if (typeof arr8[i] !== "number") {
27117
27189
  return false;
27118
27190
  }
27119
27191
  }
@@ -27210,9 +27282,9 @@ var createCumSum = /* @__PURE__ */ factory(
27210
27282
 
27211
27283
  // src/statistics/sum.ts
27212
27284
  import { pairwiseSum as pairwiseSum2 } from "@danielsimonjr/mathts-core";
27213
- function isFlatNumberArray3(arr7) {
27214
- for (let i = 0; i < arr7.length; i++) {
27215
- if (typeof arr7[i] !== "number") {
27285
+ function isFlatNumberArray3(arr8) {
27286
+ for (let i = 0; i < arr8.length; i++) {
27287
+ if (typeof arr8[i] !== "number") {
27216
27288
  return false;
27217
27289
  }
27218
27290
  }
@@ -30066,9 +30138,9 @@ var createComposition = /* @__PURE__ */ factory(
30066
30138
 
30067
30139
  // src/matrix/partitionSelect.ts
30068
30140
  var WASM_PARTITION_SELECT_THRESHOLD = 100;
30069
- function isFlatNumberArray4(arr7) {
30070
- for (let i = 0; i < arr7.length; i++) {
30071
- if (typeof arr7[i] !== "number") {
30141
+ function isFlatNumberArray4(arr8) {
30142
+ for (let i = 0; i < arr8.length; i++) {
30143
+ if (typeof arr8[i] !== "number") {
30072
30144
  return false;
30073
30145
  }
30074
30146
  }
@@ -30110,28 +30182,28 @@ var createPartitionSelect = /* @__PURE__ */ factory(
30110
30182
  }
30111
30183
  return quickSelect2(x, k, compare3);
30112
30184
  }
30113
- function quickSelect2(arr7, k, compare3) {
30114
- if (k >= arr7.length) {
30185
+ function quickSelect2(arr8, k, compare3) {
30186
+ if (k >= arr8.length) {
30115
30187
  throw new Error("k out of bounds");
30116
30188
  }
30117
- for (let i = 0; i < arr7.length; i++) {
30118
- if (isNumeric2(arr7[i]) && mathIsNaN(arr7[i])) {
30119
- return arr7[i];
30189
+ for (let i = 0; i < arr8.length; i++) {
30190
+ if (isNumeric2(arr8[i]) && mathIsNaN(arr8[i])) {
30191
+ return arr8[i];
30120
30192
  }
30121
30193
  }
30122
30194
  const wasm = wasmLoader.getModule();
30123
- if (wasm && arr7.length >= WASM_PARTITION_SELECT_THRESHOLD && isFlatNumberArray4(arr7)) {
30195
+ if (wasm && arr8.length >= WASM_PARTITION_SELECT_THRESHOLD && isFlatNumberArray4(arr8)) {
30124
30196
  const isAsc = compare3 === asc;
30125
30197
  const isDesc = compare3 === desc;
30126
30198
  if (isAsc || isDesc) {
30127
30199
  try {
30128
- const effectiveK = isDesc ? arr7.length - 1 - k : k;
30129
- const data = wasmLoader.allocateFloat64Array(arr7);
30130
- const work = wasmLoader.allocateFloat64ArrayEmpty(arr7.length);
30200
+ const effectiveK = isDesc ? arr8.length - 1 - k : k;
30201
+ const data = wasmLoader.allocateFloat64Array(arr8);
30202
+ const work = wasmLoader.allocateFloat64ArrayEmpty(arr8.length);
30131
30203
  try {
30132
- const result = wasm.partitionSelect(data.ptr, arr7.length, effectiveK, work.ptr);
30133
- for (let i = 0; i < arr7.length; i++) {
30134
- arr7[i] = work.array[i];
30204
+ const result = wasm.partitionSelect(data.ptr, arr8.length, effectiveK, work.ptr);
30205
+ for (let i = 0; i < arr8.length; i++) {
30206
+ arr8[i] = work.array[i];
30135
30207
  }
30136
30208
  return result;
30137
30209
  } finally {
@@ -30143,22 +30215,22 @@ var createPartitionSelect = /* @__PURE__ */ factory(
30143
30215
  }
30144
30216
  }
30145
30217
  let from = 0;
30146
- let to3 = arr7.length - 1;
30218
+ let to3 = arr8.length - 1;
30147
30219
  while (from < to3) {
30148
30220
  let r = from;
30149
30221
  let w = to3;
30150
- const pivot = arr7[Math.floor(Math.random() * (to3 - from + 1)) + from];
30222
+ const pivot = arr8[Math.floor(Math.random() * (to3 - from + 1)) + from];
30151
30223
  while (r < w) {
30152
- if (compare3(arr7[r], pivot) >= 0) {
30153
- const tmp = arr7[w];
30154
- arr7[w] = arr7[r];
30155
- arr7[r] = tmp;
30224
+ if (compare3(arr8[r], pivot) >= 0) {
30225
+ const tmp = arr8[w];
30226
+ arr8[w] = arr8[r];
30227
+ arr8[r] = tmp;
30156
30228
  --w;
30157
30229
  } else {
30158
30230
  ++r;
30159
30231
  }
30160
30232
  }
30161
- if (compare3(arr7[r], pivot) > 0) {
30233
+ if (compare3(arr8[r], pivot) > 0) {
30162
30234
  --r;
30163
30235
  }
30164
30236
  if (k <= r) {
@@ -30167,7 +30239,7 @@ var createPartitionSelect = /* @__PURE__ */ factory(
30167
30239
  from = r + 1;
30168
30240
  }
30169
30241
  }
30170
- return arr7[k];
30242
+ return arr8[k];
30171
30243
  }
30172
30244
  }
30173
30245
  );
@@ -30300,10 +30372,10 @@ var createPinv = /* @__PURE__ */ factory(
30300
30372
  function _isZero(x) {
30301
30373
  return equal2(add2(x, Complex12(1, 1)), add2(0, Complex12(1, 1)));
30302
30374
  }
30303
- function _isZeros(arr7) {
30375
+ function _isZeros(arr8) {
30304
30376
  return deepEqual3(
30305
- add2(arr7, Complex12(1, 1)),
30306
- add2(multiply2(arr7, 0), Complex12(1, 1))
30377
+ add2(arr8, Complex12(1, 1)),
30378
+ add2(multiply2(arr8, 0), Complex12(1, 1))
30307
30379
  );
30308
30380
  }
30309
30381
  }
@@ -30620,11 +30692,11 @@ var createRange = /* @__PURE__ */ factory(
30620
30692
  return _out(_range(start, end, step, includeEnd));
30621
30693
  }
30622
30694
  });
30623
- function _out(arr7) {
30695
+ function _out(arr8) {
30624
30696
  if (config2.matrix === "Matrix") {
30625
- return matrix2 ? matrix2(arr7) : noMatrix();
30697
+ return matrix2 ? matrix2(arr8) : noMatrix();
30626
30698
  }
30627
- return arr7;
30699
+ return arr8;
30628
30700
  }
30629
30701
  function _strRange(str, includeEnd) {
30630
30702
  const r = _parse2(str);
@@ -30921,9 +30993,9 @@ var createEqualText = /* @__PURE__ */ factory(
30921
30993
 
30922
30994
  // src/statistics/max.ts
30923
30995
  var WASM_MAX_THRESHOLD = 100;
30924
- function isFlatNumberArray5(arr7) {
30925
- for (let i = 0; i < arr7.length; i++) {
30926
- if (typeof arr7[i] !== "number") {
30996
+ function isFlatNumberArray5(arr8) {
30997
+ for (let i = 0; i < arr8.length; i++) {
30998
+ if (typeof arr8[i] !== "number") {
30927
30999
  return false;
30928
31000
  }
30929
31001
  }
@@ -31000,9 +31072,9 @@ var createMax = /* @__PURE__ */ factory(
31000
31072
 
31001
31073
  // src/statistics/min.ts
31002
31074
  var WASM_MIN_THRESHOLD = 100;
31003
- function isFlatNumberArray6(arr7) {
31004
- for (let i = 0; i < arr7.length; i++) {
31005
- if (typeof arr7[i] !== "number") {
31075
+ function isFlatNumberArray6(arr8) {
31076
+ for (let i = 0; i < arr8.length; i++) {
31077
+ if (typeof arr8[i] !== "number") {
31006
31078
  return false;
31007
31079
  }
31008
31080
  }
@@ -31087,8 +31159,8 @@ var createNullish = /* @__PURE__ */ factory(
31087
31159
  const matAlgo03xDSf = createMatAlgo03xDSf({ typed: typed3 });
31088
31160
  const matAlgo14xDs = createMatAlgo14xDs({ typed: typed3 });
31089
31161
  const matAlgo13xDD = createMatAlgo13xDD({ typed: typed3 });
31090
- const toMatrix = (arr7) => {
31091
- return matrix2(arr7);
31162
+ const toMatrix = (arr8) => {
31163
+ return matrix2(arr8);
31092
31164
  };
31093
31165
  return typed3(name180, {
31094
31166
  // Scalar and SparseMatrix-first short-circuit handlers
@@ -31400,11 +31472,11 @@ var createDistance = /* @__PURE__ */ factory(
31400
31472
  throw new TypeError("Invalid Arguments: Try again");
31401
31473
  }
31402
31474
  },
31403
- Array: function(arr7) {
31404
- if (!_pairwise(arr7)) {
31475
+ Array: function(arr8) {
31476
+ if (!_pairwise(arr8)) {
31405
31477
  throw new TypeError("Incorrect array format entered for pairwise distance calculation");
31406
31478
  }
31407
- return _distancePairwise(arr7);
31479
+ return _distancePairwise(arr8);
31408
31480
  }
31409
31481
  });
31410
31482
  function _isNumber(a) {
@@ -31414,15 +31486,15 @@ var createDistance = /* @__PURE__ */ factory(
31414
31486
  if (!Array.isArray(a)) {
31415
31487
  a = _objectToArray(a);
31416
31488
  }
31417
- const arr7 = a;
31418
- return _isNumber(arr7[0]) && _isNumber(arr7[1]);
31489
+ const arr8 = a;
31490
+ return _isNumber(arr8[0]) && _isNumber(arr8[1]);
31419
31491
  }
31420
31492
  function _3d(a) {
31421
31493
  if (!Array.isArray(a)) {
31422
31494
  a = _objectToArray(a);
31423
31495
  }
31424
- const arr7 = a;
31425
- return _isNumber(arr7[0]) && _isNumber(arr7[1]) && _isNumber(arr7[2]);
31496
+ const arr8 = a;
31497
+ return _isNumber(arr8[0]) && _isNumber(arr8[1]) && _isNumber(arr8[2]);
31426
31498
  }
31427
31499
  function _containsOnlyNumbers(a) {
31428
31500
  if (!Array.isArray(a)) {
@@ -31434,8 +31506,8 @@ var createDistance = /* @__PURE__ */ factory(
31434
31506
  if (!Array.isArray(a)) {
31435
31507
  a = _objectToArray(a);
31436
31508
  }
31437
- const arr7 = a;
31438
- return _isNumber(arr7[0]) && _isNumber(arr7[1]) && _isNumber(arr7[2]) && _isNumber(arr7[3]) && _isNumber(arr7[4]) && _isNumber(arr7[5]);
31509
+ const arr8 = a;
31510
+ return _isNumber(arr8[0]) && _isNumber(arr8[1]) && _isNumber(arr8[2]) && _isNumber(arr8[3]) && _isNumber(arr8[4]) && _isNumber(arr8[5]);
31439
31511
  }
31440
31512
  function _objectToArray(o) {
31441
31513
  const keys = Object.keys(o);
@@ -32754,11 +32826,11 @@ var FAST_FFT_THRESHOLD = 64;
32754
32826
  function isPowerOf23(n) {
32755
32827
  return n > 0 && (n & n - 1) === 0;
32756
32828
  }
32757
- function complexToInterleaved(arr7, _complex) {
32758
- const n = arr7.length;
32829
+ function complexToInterleaved(arr8, _complex) {
32830
+ const n = arr8.length;
32759
32831
  const result = new Float64Array(n * 2);
32760
32832
  for (let i = 0; i < n; i++) {
32761
- const val = arr7[i];
32833
+ const val = arr8[i];
32762
32834
  if (typeof val === "number") {
32763
32835
  result[i * 2] = val;
32764
32836
  result[i * 2 + 1] = 0;
@@ -32820,40 +32892,40 @@ var createFft = /* @__PURE__ */ factory(
32820
32892
  return matrix2.create(_ndFft(matrix2.valueOf()), matrix2._datatype);
32821
32893
  }
32822
32894
  });
32823
- function _ndFft(arr7) {
32824
- const size2 = arraySize(arr7);
32825
- if (size2.length === 1) return _fft(arr7, size2[0]);
32895
+ function _ndFft(arr8) {
32896
+ const size2 = arraySize(arr8);
32897
+ if (size2.length === 1) return _fft(arr8, size2[0]);
32826
32898
  return _1dFft(
32827
- arr7.map((slice) => _ndFft(slice)),
32899
+ arr8.map((slice) => _ndFft(slice)),
32828
32900
  0
32829
32901
  );
32830
32902
  }
32831
- function _1dFft(arr7, dim) {
32832
- const size2 = arraySize(arr7);
32903
+ function _1dFft(arr8, dim) {
32904
+ const size2 = arraySize(arr8);
32833
32905
  if (dim !== 0) {
32834
32906
  const result = [];
32835
32907
  for (let i = 0; i < size2[0]; i++) {
32836
- result.push(_1dFft(arr7[i], dim - 1));
32908
+ result.push(_1dFft(arr8[i], dim - 1));
32837
32909
  }
32838
32910
  return result;
32839
32911
  }
32840
- if (size2.length === 1) return _fft(arr7);
32841
- function _transpose(arr8) {
32842
- const size3 = arraySize(arr8);
32912
+ if (size2.length === 1) return _fft(arr8);
32913
+ function _transpose(arr9) {
32914
+ const size3 = arraySize(arr9);
32843
32915
  const result = [];
32844
32916
  for (let j = 0; j < size3[1]; j++) {
32845
32917
  const row2 = [];
32846
32918
  for (let i = 0; i < size3[0]; i++) {
32847
- row2.push(arr8[i][j]);
32919
+ row2.push(arr9[i][j]);
32848
32920
  }
32849
32921
  result.push(row2);
32850
32922
  }
32851
32923
  return result;
32852
32924
  }
32853
- return _transpose(_1dFft(_transpose(arr7), 1));
32925
+ return _transpose(_1dFft(_transpose(arr8), 1));
32854
32926
  }
32855
- function _czt(arr7) {
32856
- const n = arr7.length;
32927
+ function _czt(arr8) {
32928
+ const n = arr8.length;
32857
32929
  const w = exp2(divideScalar2(multiplyScalar2(-1, multiplyScalar2(I2, tau2)), n));
32858
32930
  const chirp = [];
32859
32931
  for (let i = 1 - n; i < n; i++) {
@@ -32862,7 +32934,7 @@ var createFft = /* @__PURE__ */ factory(
32862
32934
  const N2 = pow2(2, ceil2(log23(n + n - 1)));
32863
32935
  const xp = [];
32864
32936
  for (let i = 0; i < n; i++) {
32865
- xp.push(multiplyScalar2(arr7[i], chirp[n - 1 + i]));
32937
+ xp.push(multiplyScalar2(arr8[i], chirp[n - 1 + i]));
32866
32938
  }
32867
32939
  for (let i = 0; i < N2 - n; i++) {
32868
32940
  xp.push(0);
@@ -32887,11 +32959,11 @@ var createFft = /* @__PURE__ */ factory(
32887
32959
  }
32888
32960
  return ret;
32889
32961
  }
32890
- function _fft(arr7, len) {
32891
- const length = len ?? arr7.length;
32892
- if (length === 1) return [arr7[0]];
32893
- if (length === arr7.length && length >= FAST_FFT_THRESHOLD && isPowerOf23(length)) {
32894
- const interleaved = complexToInterleaved(arr7, complex2);
32962
+ function _fft(arr8, len) {
32963
+ const length = len ?? arr8.length;
32964
+ if (length === 1) return [arr8[0]];
32965
+ if (length === arr8.length && length >= FAST_FFT_THRESHOLD && isPowerOf23(length)) {
32966
+ const interleaved = complexToInterleaved(arr8, complex2);
32895
32967
  if (interleaved) {
32896
32968
  const real = new Float64Array(length);
32897
32969
  const imag = new Float64Array(length);
@@ -32911,11 +32983,11 @@ var createFft = /* @__PURE__ */ factory(
32911
32983
  if (length % 2 === 0) {
32912
32984
  const ret = [
32913
32985
  ..._fft(
32914
- arr7.filter((_, i) => i % 2 === 0),
32986
+ arr8.filter((_, i) => i % 2 === 0),
32915
32987
  length / 2
32916
32988
  ),
32917
32989
  ..._fft(
32918
- arr7.filter((_, i) => i % 2 === 1),
32990
+ arr8.filter((_, i) => i % 2 === 1),
32919
32991
  length / 2
32920
32992
  )
32921
32993
  ];
@@ -32930,7 +33002,7 @@ var createFft = /* @__PURE__ */ factory(
32930
33002
  }
32931
33003
  return ret;
32932
33004
  } else {
32933
- return _czt(arr7);
33005
+ return _czt(arr8);
32934
33006
  }
32935
33007
  }
32936
33008
  }
@@ -33201,11 +33273,11 @@ var FAST_IFFT_THRESHOLD = 64;
33201
33273
  function isPowerOf24(n) {
33202
33274
  return n > 0 && (n & n - 1) === 0;
33203
33275
  }
33204
- function complexToInterleaved2(arr7, _complex) {
33205
- const n = arr7.length;
33276
+ function complexToInterleaved2(arr8, _complex) {
33277
+ const n = arr8.length;
33206
33278
  const result = new Float64Array(n * 2);
33207
33279
  for (let i = 0; i < n; i++) {
33208
- const val = arr7[i];
33280
+ const val = arr8[i];
33209
33281
  if (typeof val === "number") {
33210
33282
  result[i * 2] = val;
33211
33283
  result[i * 2 + 1] = 0;
@@ -33233,13 +33305,13 @@ var createIfft = /* @__PURE__ */ factory(
33233
33305
  dependencies200,
33234
33306
  ({ typed: typed3, fft: fft2, dotDivide: dotDivide2, conj: conj3, complex: complex2 }) => {
33235
33307
  return typed3(name200, {
33236
- "Array | Matrix": function(arr7) {
33237
- const size2 = isMatrix(arr7) ? arr7.size() : arraySize(arr7);
33308
+ "Array | Matrix": function(arr8) {
33309
+ const size2 = isMatrix(arr8) ? arr8.size() : arraySize(arr8);
33238
33310
  const totalSize = size2.reduce((acc, curr) => acc * curr, 1);
33239
33311
  if (size2.length === 1) {
33240
33312
  const length = size2[0];
33241
33313
  if (length >= FAST_IFFT_THRESHOLD && isPowerOf24(length)) {
33242
- const arrData = isMatrix(arr7) ? arr7.valueOf() : arr7;
33314
+ const arrData = isMatrix(arr8) ? arr8.valueOf() : arr8;
33243
33315
  const interleaved = complexToInterleaved2(arrData, complex2);
33244
33316
  if (interleaved) {
33245
33317
  const real = new Float64Array(length);
@@ -33255,14 +33327,14 @@ var createIfft = /* @__PURE__ */ factory(
33255
33327
  packed[i * 2 + 1] = out.imag[i];
33256
33328
  }
33257
33329
  const result = interleavedToComplex2(packed, length, complex2);
33258
- if (isMatrix(arr7)) {
33259
- return arr7.create(result);
33330
+ if (isMatrix(arr8)) {
33331
+ return arr8.create(result);
33260
33332
  }
33261
33333
  return result;
33262
33334
  }
33263
33335
  }
33264
33336
  }
33265
- return dotDivide2(conj3(fft2(conj3(arr7))), totalSize);
33337
+ return dotDivide2(conj3(fft2(conj3(arr8))), totalSize);
33266
33338
  }
33267
33339
  });
33268
33340
  }
@@ -34226,51 +34298,51 @@ var createDiff = /* @__PURE__ */ factory(
34226
34298
  number: number2
34227
34299
  }) => {
34228
34300
  return typed3(name210, {
34229
- "Array | Matrix": function(arr7) {
34230
- if (isMatrix(arr7)) {
34231
- return matrix2(_diff(arr7.toArray()));
34301
+ "Array | Matrix": function(arr8) {
34302
+ if (isMatrix(arr8)) {
34303
+ return matrix2(_diff(arr8.toArray()));
34232
34304
  } else {
34233
- return _diff(arr7);
34305
+ return _diff(arr8);
34234
34306
  }
34235
34307
  },
34236
- "Array | Matrix, number": function(arr7, dim) {
34308
+ "Array | Matrix, number": function(arr8, dim) {
34237
34309
  if (!isInteger(dim)) throw new RangeError("Dimension must be a whole number");
34238
- if (isMatrix(arr7)) {
34239
- return matrix2(_recursive(arr7.toArray(), dim));
34310
+ if (isMatrix(arr8)) {
34311
+ return matrix2(_recursive(arr8.toArray(), dim));
34240
34312
  } else {
34241
- return _recursive(arr7, dim);
34313
+ return _recursive(arr8, dim);
34242
34314
  }
34243
34315
  },
34244
34316
  // typed-function's runtime `referTo` is single-call variadic
34245
34317
  // (`referTo(...signatures, callback)`); the imported TypedFunction interface
34246
34318
  // models it curried, so narrow to the real contract via `unknown`.
34247
- "Array, BigNumber": typed3.referTo("Array,number", (selfAn) => (arr7, dim) => selfAn(arr7, number2(dim))),
34248
- "Matrix, BigNumber": typed3.referTo("Matrix,number", (selfMn) => (arr7, dim) => selfMn(arr7, number2(dim)))
34319
+ "Array, BigNumber": typed3.referTo("Array,number", (selfAn) => (arr8, dim) => selfAn(arr8, number2(dim))),
34320
+ "Matrix, BigNumber": typed3.referTo("Matrix,number", (selfMn) => (arr8, dim) => selfMn(arr8, number2(dim)))
34249
34321
  });
34250
- function _recursive(arr7, dim) {
34251
- if (isMatrix(arr7)) {
34252
- arr7 = arr7.toArray();
34322
+ function _recursive(arr8, dim) {
34323
+ if (isMatrix(arr8)) {
34324
+ arr8 = arr8.toArray();
34253
34325
  }
34254
- if (!Array.isArray(arr7)) {
34326
+ if (!Array.isArray(arr8)) {
34255
34327
  throw RangeError("Array/Matrix does not have that many dimensions");
34256
34328
  }
34257
34329
  if (dim > 0) {
34258
34330
  const result = [];
34259
- arr7.forEach((element2) => {
34331
+ arr8.forEach((element2) => {
34260
34332
  result.push(_recursive(element2, dim - 1));
34261
34333
  });
34262
34334
  return result;
34263
34335
  } else if (dim === 0) {
34264
- return _diff(arr7);
34336
+ return _diff(arr8);
34265
34337
  } else {
34266
34338
  throw RangeError("Cannot have negative dimension");
34267
34339
  }
34268
34340
  }
34269
- function _diff(arr7) {
34341
+ function _diff(arr8) {
34270
34342
  const result = [];
34271
- const size2 = arr7.length;
34343
+ const size2 = arr8.length;
34272
34344
  for (let i = 1; i < size2; i++) {
34273
- result.push(_ElementDiff(arr7[i - 1], arr7[i]));
34345
+ result.push(_ElementDiff(arr8[i - 1], arr8[i]));
34274
34346
  }
34275
34347
  return result;
34276
34348
  }
@@ -35356,21 +35428,21 @@ var createIntersect = /* @__PURE__ */ factory(
35356
35428
  "Array, Array, Array": _AAA,
35357
35429
  "Array, Array, Array, Array": _AAAA,
35358
35430
  "Matrix, Matrix, Matrix": function(x, y, plane) {
35359
- const arr7 = _AAA(
35431
+ const arr8 = _AAA(
35360
35432
  x.valueOf(),
35361
35433
  y.valueOf(),
35362
35434
  plane.valueOf()
35363
35435
  );
35364
- return arr7 === null ? null : matrix2(arr7);
35436
+ return arr8 === null ? null : matrix2(arr8);
35365
35437
  },
35366
35438
  "Matrix, Matrix, Matrix, Matrix": function(w, x, y, z) {
35367
- const arr7 = _AAAA(
35439
+ const arr8 = _AAAA(
35368
35440
  w.valueOf(),
35369
35441
  x.valueOf(),
35370
35442
  y.valueOf(),
35371
35443
  z.valueOf()
35372
35444
  );
35373
- return arr7 === null ? null : matrix2(arr7);
35445
+ return arr8 === null ? null : matrix2(arr8);
35374
35446
  }
35375
35447
  });
35376
35448
  function _AAA(x, y, plane) {
@@ -35436,13 +35508,13 @@ var createIntersect = /* @__PURE__ */ factory(
35436
35508
  throw new TypeError("Arrays with two or thee dimensional points expected");
35437
35509
  }
35438
35510
  }
35439
- function _coerceArr(arr7) {
35440
- if (arr7.length === 1 && Array.isArray(arr7[0])) return arr7[0];
35441
- if (arr7.length > 1 && Array.isArray(arr7[0])) {
35442
- if (arr7.every((el) => Array.isArray(el) && el.length === 1))
35443
- return flatten4(arr7);
35511
+ function _coerceArr(arr8) {
35512
+ if (arr8.length === 1 && Array.isArray(arr8[0])) return arr8[0];
35513
+ if (arr8.length > 1 && Array.isArray(arr8[0])) {
35514
+ if (arr8.every((el) => Array.isArray(el) && el.length === 1))
35515
+ return flatten4(arr8);
35444
35516
  }
35445
- return arr7;
35517
+ return arr8;
35446
35518
  }
35447
35519
  function _2d(x) {
35448
35520
  return x.length === 2 && isNumeric2(x[0]) && isNumeric2(x[1]);
@@ -35582,9 +35654,9 @@ var createIntersect = /* @__PURE__ */ factory(
35582
35654
 
35583
35655
  // src/statistics/mean.ts
35584
35656
  var WASM_MEAN_THRESHOLD = 100;
35585
- function isFlatNumberArray7(arr7) {
35586
- for (let i = 0; i < arr7.length; i++) {
35587
- if (typeof arr7[i] !== "number") {
35657
+ function isFlatNumberArray7(arr8) {
35658
+ for (let i = 0; i < arr8.length; i++) {
35659
+ if (typeof arr8[i] !== "number") {
35588
35660
  return false;
35589
35661
  }
35590
35662
  }
@@ -35716,9 +35788,9 @@ var createMedian = /* @__PURE__ */ factory(
35716
35788
 
35717
35789
  // src/statistics/variance.ts
35718
35790
  import { sumSquaredDeviations as sumSquaredDeviations2 } from "@danielsimonjr/mathts-core";
35719
- function isFlatNumberArray8(arr7) {
35720
- for (let i = 0; i < arr7.length; i++) {
35721
- if (typeof arr7[i] !== "number") {
35791
+ function isFlatNumberArray8(arr8) {
35792
+ for (let i = 0; i < arr8.length; i++) {
35793
+ if (typeof arr8[i] !== "number") {
35722
35794
  return false;
35723
35795
  }
35724
35796
  }
@@ -37259,12 +37331,12 @@ function createComplexEigs({
37259
37331
  matrixFromColumns: _matrixFromColumns,
37260
37332
  dot: dot5
37261
37333
  }) {
37262
- function complexEigs(arr7, N, prec, type, findVectors = true) {
37334
+ function complexEigs(arr8, N, prec, type, findVectors = true) {
37263
37335
  if (!findVectors && type === "number" && N * N >= WASM_EIGS_THRESHOLD) {
37264
37336
  const wasm = wasmLoader.getModule();
37265
37337
  if (wasm) {
37266
37338
  try {
37267
- const flat = flattenToFloat648(arr7, N, N);
37339
+ const flat = flattenToFloat648(arr8, N, N);
37268
37340
  const matrixAlloc = wasmLoader.allocateFloat64Array(flat);
37269
37341
  const eigenvaluesRealAlloc = wasmLoader.allocateFloat64ArrayEmpty(N);
37270
37342
  const eigenvaluesImagAlloc = wasmLoader.allocateFloat64ArrayEmpty(N);
@@ -37308,16 +37380,16 @@ function createComplexEigs({
37308
37380
  }
37309
37381
  }
37310
37382
  }
37311
- const R = balance(arr7, N, prec, type, findVectors);
37312
- reduceToHessenberg(arr7, N, prec, type, findVectors, R);
37313
- const { values, C } = iterateUntilTriangular(arr7, N, prec, type, findVectors);
37383
+ const R = balance(arr8, N, prec, type, findVectors);
37384
+ reduceToHessenberg(arr8, N, prec, type, findVectors, R);
37385
+ const { values, C } = iterateUntilTriangular(arr8, N, prec, type, findVectors);
37314
37386
  if (findVectors) {
37315
- const eigenvectors = findEigenvectors(arr7, N, C, R, values, prec, type);
37387
+ const eigenvectors = findEigenvectors(arr8, N, C, R, values, prec, type);
37316
37388
  return { values, eigenvectors };
37317
37389
  }
37318
37390
  return { values };
37319
37391
  }
37320
- function balance(arr7, N, _prec, type, findVectors) {
37392
+ function balance(arr8, N, _prec, type, findVectors) {
37321
37393
  const big = type === "BigNumber";
37322
37394
  const cplx = type === "Complex";
37323
37395
  const realzero = big ? bignumber2(0) : 0;
@@ -37337,8 +37409,8 @@ function createComplexEigs({
37337
37409
  let rowNorm = realzero;
37338
37410
  for (let j = 0; j < N; j++) {
37339
37411
  if (i === j) continue;
37340
- colNorm = addScalar2(colNorm, abs2(arr7[j][i]));
37341
- rowNorm = addScalar2(rowNorm, abs2(arr7[i][j]));
37412
+ colNorm = addScalar2(colNorm, abs2(arr8[j][i]));
37413
+ rowNorm = addScalar2(rowNorm, abs2(arr8[i][j]));
37342
37414
  }
37343
37415
  if (!equal2(colNorm, 0) && !equal2(rowNorm, 0)) {
37344
37416
  let f = realone;
@@ -37364,8 +37436,8 @@ function createComplexEigs({
37364
37436
  if (i === j) {
37365
37437
  continue;
37366
37438
  }
37367
- arr7[i][j] = multiplyScalar2(arr7[i][j], g);
37368
- arr7[j][i] = multiplyScalar2(arr7[j][i], f);
37439
+ arr8[i][j] = multiplyScalar2(arr8[i][j], g);
37440
+ arr8[j][i] = multiplyScalar2(arr8[j][i], f);
37369
37441
  }
37370
37442
  if (findVectors) {
37371
37443
  Rdiag[i] = multiplyScalar2(Rdiag[i], g);
@@ -37376,7 +37448,7 @@ function createComplexEigs({
37376
37448
  }
37377
37449
  return findVectors ? diag2(Rdiag) : null;
37378
37450
  }
37379
- function reduceToHessenberg(arr7, N, prec, type, findVectors, R) {
37451
+ function reduceToHessenberg(arr8, N, prec, type, findVectors, R) {
37380
37452
  const big = type === "BigNumber";
37381
37453
  const cplx = type === "Complex";
37382
37454
  const zero = big ? bignumber2(0) : cplx ? complex2(0) : 0;
@@ -37387,7 +37459,7 @@ function createComplexEigs({
37387
37459
  let maxIndex = 0;
37388
37460
  let max2 = zero;
37389
37461
  for (let j = i + 1; j < N; j++) {
37390
- const el = arr7[j][i];
37462
+ const el = arr8[j][i];
37391
37463
  if (smaller2(abs2(max2), abs2(el))) {
37392
37464
  max2 = el;
37393
37465
  maxIndex = j;
@@ -37397,13 +37469,13 @@ function createComplexEigs({
37397
37469
  continue;
37398
37470
  }
37399
37471
  if (maxIndex !== i + 1) {
37400
- const tmp1 = arr7[maxIndex];
37401
- arr7[maxIndex] = arr7[i + 1];
37402
- arr7[i + 1] = tmp1;
37472
+ const tmp1 = arr8[maxIndex];
37473
+ arr8[maxIndex] = arr8[i + 1];
37474
+ arr8[i + 1] = tmp1;
37403
37475
  for (let j = 0; j < N; j++) {
37404
- const tmp2 = arr7[j][maxIndex];
37405
- arr7[j][maxIndex] = arr7[j][i + 1];
37406
- arr7[j][i + 1] = tmp2;
37476
+ const tmp2 = arr8[j][maxIndex];
37477
+ arr8[j][maxIndex] = arr8[j][i + 1];
37478
+ arr8[j][i + 1] = tmp2;
37407
37479
  }
37408
37480
  if (findVectors) {
37409
37481
  const tmp3 = R[maxIndex];
@@ -37412,15 +37484,15 @@ function createComplexEigs({
37412
37484
  }
37413
37485
  }
37414
37486
  for (let j = i + 2; j < N; j++) {
37415
- const n = divideScalar2(arr7[j][i], max2);
37487
+ const n = divideScalar2(arr8[j][i], max2);
37416
37488
  if (n === 0) {
37417
37489
  continue;
37418
37490
  }
37419
37491
  for (let k = 0; k < N; k++) {
37420
- arr7[j][k] = subtract2(arr7[j][k], multiplyScalar2(n, arr7[i + 1][k]));
37492
+ arr8[j][k] = subtract2(arr8[j][k], multiplyScalar2(n, arr8[i + 1][k]));
37421
37493
  }
37422
37494
  for (let k = 0; k < N; k++) {
37423
- arr7[k][i + 1] = addScalar2(arr7[k][i + 1], multiplyScalar2(n, arr7[k][j]));
37495
+ arr8[k][i + 1] = addScalar2(arr8[k][i + 1], multiplyScalar2(n, arr8[k][j]));
37424
37496
  }
37425
37497
  if (findVectors) {
37426
37498
  for (let k = 0; k < N; k++) {
@@ -37437,7 +37509,7 @@ function createComplexEigs({
37437
37509
  if (big) {
37438
37510
  prec = bignumber2(prec);
37439
37511
  }
37440
- let arr7 = clone(A);
37512
+ let arr8 = clone(A);
37441
37513
  const lambdas = [];
37442
37514
  let n = N;
37443
37515
  const Sdiag = [];
@@ -37446,21 +37518,21 @@ function createComplexEigs({
37446
37518
  let lastConvergenceBefore = 0;
37447
37519
  while (lastConvergenceBefore <= 100) {
37448
37520
  lastConvergenceBefore += 1;
37449
- const k = arr7[n - 1][n - 1];
37521
+ const k = arr8[n - 1][n - 1];
37450
37522
  for (let i = 0; i < n; i++) {
37451
- arr7[i][i] = subtract2(arr7[i][i], k);
37523
+ arr8[i][i] = subtract2(arr8[i][i], k);
37452
37524
  }
37453
- const { Q: Q2, R } = qr2(arr7);
37454
- arr7 = multiply2(R, Q2);
37525
+ const { Q: Q2, R } = qr2(arr8);
37526
+ arr8 = multiply2(R, Q2);
37455
37527
  for (let i = 0; i < n; i++) {
37456
- arr7[i][i] = addScalar2(arr7[i][i], k);
37528
+ arr8[i][i] = addScalar2(arr8[i][i], k);
37457
37529
  }
37458
37530
  if (findVectors) {
37459
37531
  Qpartial = multiply2(Qpartial, Q2);
37460
37532
  }
37461
- if (n === 1 || smaller2(abs2(arr7[n - 1][n - 2]), prec)) {
37533
+ if (n === 1 || smaller2(abs2(arr8[n - 1][n - 2]), prec)) {
37462
37534
  lastConvergenceBefore = 0;
37463
- lambdas.push(arr7[n - 1][n - 1]);
37535
+ lambdas.push(arr8[n - 1][n - 1]);
37464
37536
  if (findVectors) {
37465
37537
  Sdiag.unshift([[1]]);
37466
37538
  inflateMatrix(Qpartial, N);
@@ -37470,26 +37542,26 @@ function createComplexEigs({
37470
37542
  }
37471
37543
  }
37472
37544
  n -= 1;
37473
- arr7.pop();
37545
+ arr8.pop();
37474
37546
  for (let i = 0; i < n; i++) {
37475
- arr7[i].pop();
37547
+ arr8[i].pop();
37476
37548
  }
37477
- } else if (n === 2 || smaller2(abs2(arr7[n - 2][n - 3]), prec)) {
37549
+ } else if (n === 2 || smaller2(abs2(arr8[n - 2][n - 3]), prec)) {
37478
37550
  lastConvergenceBefore = 0;
37479
37551
  const ll = eigenvalues2x2(
37480
- arr7[n - 2][n - 2],
37481
- arr7[n - 2][n - 1],
37482
- arr7[n - 1][n - 2],
37483
- arr7[n - 1][n - 1]
37552
+ arr8[n - 2][n - 2],
37553
+ arr8[n - 2][n - 1],
37554
+ arr8[n - 1][n - 2],
37555
+ arr8[n - 1][n - 1]
37484
37556
  );
37485
37557
  lambdas.push(...ll);
37486
37558
  if (findVectors) {
37487
37559
  Sdiag.unshift(
37488
37560
  jordanBase2x2(
37489
- arr7[n - 2][n - 2],
37490
- arr7[n - 2][n - 1],
37491
- arr7[n - 1][n - 2],
37492
- arr7[n - 1][n - 1],
37561
+ arr8[n - 2][n - 2],
37562
+ arr8[n - 2][n - 1],
37563
+ arr8[n - 1][n - 2],
37564
+ arr8[n - 1][n - 1],
37493
37565
  ll[0],
37494
37566
  ll[1],
37495
37567
  prec,
@@ -37503,11 +37575,11 @@ function createComplexEigs({
37503
37575
  }
37504
37576
  }
37505
37577
  n -= 2;
37506
- arr7.pop();
37507
- arr7.pop();
37578
+ arr8.pop();
37579
+ arr8.pop();
37508
37580
  for (let i = 0; i < n; i++) {
37509
- arr7[i].pop();
37510
- arr7[i].pop();
37581
+ arr8[i].pop();
37582
+ arr8[i].pop();
37511
37583
  }
37512
37584
  }
37513
37585
  if (n === 0) {
@@ -37612,23 +37684,23 @@ function createComplexEigs({
37612
37684
  ];
37613
37685
  }
37614
37686
  }
37615
- function inflateMatrix(arr7, N) {
37616
- for (let i = 0; i < arr7.length; i++) {
37617
- arr7[i].push(...Array(N - arr7[i].length).fill(0));
37687
+ function inflateMatrix(arr8, N) {
37688
+ for (let i = 0; i < arr8.length; i++) {
37689
+ arr8[i].push(...Array(N - arr8[i].length).fill(0));
37618
37690
  }
37619
- for (let i = arr7.length; i < N; i++) {
37620
- arr7.push(Array(N).fill(0));
37621
- arr7[i][i] = 1;
37691
+ for (let i = arr8.length; i < N; i++) {
37692
+ arr8.push(Array(N).fill(0));
37693
+ arr8[i][i] = 1;
37622
37694
  }
37623
- return arr7;
37695
+ return arr8;
37624
37696
  }
37625
- function blockDiag(arr7, N) {
37697
+ function blockDiag(arr8, N) {
37626
37698
  const M = [];
37627
37699
  for (let i = 0; i < N; i++) {
37628
37700
  M[i] = Array(N).fill(0);
37629
37701
  }
37630
37702
  let I2 = 0;
37631
- for (const sub of arr7) {
37703
+ for (const sub of arr8) {
37632
37704
  const n = sub.length;
37633
37705
  for (let i = 0; i < n; i++) {
37634
37706
  for (let j = 0; j < n; j++) {
@@ -37639,9 +37711,9 @@ function createComplexEigs({
37639
37711
  }
37640
37712
  return M;
37641
37713
  }
37642
- function indexOf(arr7, el, fn) {
37643
- for (let i = 0; i < arr7.length; i++) {
37644
- if (fn(arr7[i], el)) {
37714
+ function indexOf(arr8, el, fn) {
37715
+ for (let i = 0; i < arr8.length; i++) {
37716
+ if (fn(arr8[i], el)) {
37645
37717
  return i;
37646
37718
  }
37647
37719
  }
@@ -37754,12 +37826,12 @@ function createRealSymmetric({
37754
37826
  if (typeof a === "number" && typeof b === "number") return a <= b;
37755
37827
  return a.lte(b);
37756
37828
  }
37757
- function main(arr7, _N, prec = config2.relTol, type, computeVectors) {
37829
+ function main(arr8, _N, prec = config2.relTol, type, computeVectors) {
37758
37830
  if (type === "number") {
37759
- return diag2(arr7, prec, computeVectors);
37831
+ return diag2(arr8, prec, computeVectors);
37760
37832
  }
37761
37833
  if (type === "BigNumber") {
37762
- return diagBig(arr7, prec, computeVectors);
37834
+ return diagBig(arr8, prec, computeVectors);
37763
37835
  }
37764
37836
  throw TypeError("Unsupported data type: " + type);
37765
37837
  }
@@ -38221,18 +38293,18 @@ var createEigs = /* @__PURE__ */ factory(
38221
38293
  return result;
38222
38294
  }
38223
38295
  function computeValuesAndVectors(mat, prec, computeVectors) {
38224
- const arr7 = mat.toArray();
38296
+ const arr8 = mat.toArray();
38225
38297
  const asize = mat.size();
38226
38298
  if (asize.length !== 2 || asize[0] !== asize[1]) {
38227
38299
  throw new RangeError(`Matrix must be square (size: ${format3(asize, {})})`);
38228
38300
  }
38229
38301
  const N = asize[0];
38230
- if (isReal(arr7, N, prec)) {
38231
- coerceReal(arr7, N);
38232
- if (isSymmetric(arr7, N, prec)) {
38233
- const type2 = coerceTypes(mat, arr7, N);
38302
+ if (isReal(arr8, N, prec)) {
38303
+ coerceReal(arr8, N);
38304
+ if (isSymmetric(arr8, N, prec)) {
38305
+ const type2 = coerceTypes(mat, arr8, N);
38234
38306
  return doRealSymmetric(
38235
- arr7,
38307
+ arr8,
38236
38308
  N,
38237
38309
  prec,
38238
38310
  type2,
@@ -38240,37 +38312,37 @@ var createEigs = /* @__PURE__ */ factory(
38240
38312
  );
38241
38313
  }
38242
38314
  }
38243
- const type = coerceTypes(mat, arr7, N);
38244
- return doComplexEigs(arr7, N, prec, type, computeVectors);
38315
+ const type = coerceTypes(mat, arr8, N);
38316
+ return doComplexEigs(arr8, N, prec, type, computeVectors);
38245
38317
  }
38246
- function isSymmetric(arr7, N, prec) {
38318
+ function isSymmetric(arr8, N, prec) {
38247
38319
  for (let i = 0; i < N; i++) {
38248
38320
  for (let j = i; j < N; j++) {
38249
- if (larger2(bignumber2(abs2(subtract2(arr7[i][j], arr7[j][i]))), prec)) {
38321
+ if (larger2(bignumber2(abs2(subtract2(arr8[i][j], arr8[j][i]))), prec)) {
38250
38322
  return false;
38251
38323
  }
38252
38324
  }
38253
38325
  }
38254
38326
  return true;
38255
38327
  }
38256
- function isReal(arr7, N, prec) {
38328
+ function isReal(arr8, N, prec) {
38257
38329
  for (let i = 0; i < N; i++) {
38258
38330
  for (let j = 0; j < N; j++) {
38259
- if (larger2(bignumber2(abs2(im3(arr7[i][j]))), prec)) {
38331
+ if (larger2(bignumber2(abs2(im3(arr8[i][j]))), prec)) {
38260
38332
  return false;
38261
38333
  }
38262
38334
  }
38263
38335
  }
38264
38336
  return true;
38265
38337
  }
38266
- function coerceReal(arr7, N) {
38338
+ function coerceReal(arr8, N) {
38267
38339
  for (let i = 0; i < N; i++) {
38268
38340
  for (let j = 0; j < N; j++) {
38269
- arr7[i][j] = re3(arr7[i][j]);
38341
+ arr8[i][j] = re3(arr8[i][j]);
38270
38342
  }
38271
38343
  }
38272
38344
  }
38273
- function coerceTypes(mat, arr7, N) {
38345
+ function coerceTypes(mat, arr8, N) {
38274
38346
  const type = mat.datatype();
38275
38347
  if (type === "number" || type === "BigNumber" || type === "Complex") {
38276
38348
  return type;
@@ -38280,7 +38352,7 @@ var createEigs = /* @__PURE__ */ factory(
38280
38352
  let hasComplex = false;
38281
38353
  for (let i = 0; i < N; i++) {
38282
38354
  for (let j = 0; j < N; j++) {
38283
- const el = arr7[i][j];
38355
+ const el = arr8[i][j];
38284
38356
  if (isNumber(el) || isFraction(el)) {
38285
38357
  hasNumber = true;
38286
38358
  } else if (isBigNumber(el)) {
@@ -38298,7 +38370,7 @@ var createEigs = /* @__PURE__ */ factory(
38298
38370
  if (hasComplex) {
38299
38371
  for (let i = 0; i < N; i++) {
38300
38372
  for (let j = 0; j < N; j++) {
38301
- arr7[i][j] = complex2(arr7[i][j]);
38373
+ arr8[i][j] = complex2(arr8[i][j]);
38302
38374
  }
38303
38375
  }
38304
38376
  return "Complex";
@@ -38306,7 +38378,7 @@ var createEigs = /* @__PURE__ */ factory(
38306
38378
  if (hasBig) {
38307
38379
  for (let i = 0; i < N; i++) {
38308
38380
  for (let j = 0; j < N; j++) {
38309
- arr7[i][j] = bignumber2(arr7[i][j]);
38381
+ arr8[i][j] = bignumber2(arr8[i][j]);
38310
38382
  }
38311
38383
  }
38312
38384
  return "BigNumber";
@@ -38314,7 +38386,7 @@ var createEigs = /* @__PURE__ */ factory(
38314
38386
  if (hasNumber) {
38315
38387
  for (let i = 0; i < N; i++) {
38316
38388
  for (let j = 0; j < N; j++) {
38317
- arr7[i][j] = number2(arr7[i][j]);
38389
+ arr8[i][j] = number2(arr8[i][j]);
38318
38390
  }
38319
38391
  }
38320
38392
  return "number";
@@ -38532,9 +38604,9 @@ var createLusolve = /* @__PURE__ */ factory(
38532
38604
 
38533
38605
  // src/statistics/corr.ts
38534
38606
  import { pairwiseSum as pairwiseSum3, pairwiseDot as pairwiseDot3 } from "@danielsimonjr/mathts-core";
38535
- function isPlainNumberArray(arr7) {
38536
- for (let i = 0; i < arr7.length; i++) {
38537
- if (typeof arr7[i] !== "number") {
38607
+ function isPlainNumberArray(arr8) {
38608
+ for (let i = 0; i < arr8.length; i++) {
38609
+ if (typeof arr8[i] !== "number") {
38538
38610
  return false;
38539
38611
  }
38540
38612
  }
@@ -38609,9 +38681,9 @@ var createCorr = /* @__PURE__ */ factory(
38609
38681
 
38610
38682
  // src/statistics/mad.ts
38611
38683
  var WASM_MAD_THRESHOLD = 500;
38612
- function isPlainNumberArray2(arr7) {
38613
- for (let i = 0; i < arr7.length; i++) {
38614
- if (typeof arr7[i] !== "number") {
38684
+ function isPlainNumberArray2(arr8) {
38685
+ for (let i = 0; i < arr8.length; i++) {
38686
+ if (typeof arr8[i] !== "number") {
38615
38687
  return false;
38616
38688
  }
38617
38689
  }
@@ -40208,12 +40280,12 @@ var createNorm = /* @__PURE__ */ factory(
40208
40280
  if (size2.length !== 1 || size2[0] < WASM_NORM_THRESHOLD) return null;
40209
40281
  const wasm = wasmLoader.getModule();
40210
40282
  if (!wasm) return null;
40211
- const arr7 = x.toArray();
40212
- const n = arr7.length;
40283
+ const arr8 = x.toArray();
40284
+ const n = arr8.length;
40213
40285
  const data = new Float64Array(n);
40214
40286
  for (let i = 0; i < n; i++) {
40215
- if (typeof arr7[i] !== "number") return null;
40216
- data[i] = arr7[i];
40287
+ if (typeof arr8[i] !== "number") return null;
40288
+ data[i] = arr8[i];
40217
40289
  }
40218
40290
  const alloc = wasmLoader.allocateFloat64Array(data);
40219
40291
  try {
@@ -44515,9 +44587,9 @@ function kendallTau(x, y) {
44515
44587
  }
44516
44588
  }
44517
44589
  const n0 = n * (n - 1) / 2;
44518
- const tiePairs = (arr7) => {
44590
+ const tiePairs = (arr8) => {
44519
44591
  const counts = /* @__PURE__ */ new Map();
44520
- for (const v of arr7) counts.set(v, (counts.get(v) ?? 0) + 1);
44592
+ for (const v of arr8) counts.set(v, (counts.get(v) ?? 0) + 1);
44521
44593
  let s = 0;
44522
44594
  for (const c of counts.values()) s += c * (c - 1) / 2;
44523
44595
  return s;
@@ -44604,6 +44676,10 @@ function kendalltau(x, y) {
44604
44676
  const z = 3 * tau2 * Math.sqrt(n * (n - 1)) / Math.sqrt(2 * (2 * n + 5));
44605
44677
  return { coefficient: tau2, pValue: 2 * (1 - normalCDF(Math.abs(z))) };
44606
44678
  }
44679
+ function kendallTauTest(x, y) {
44680
+ const { coefficient, pValue } = kendalltau(x, y);
44681
+ return { tau: coefficient, pValue };
44682
+ }
44607
44683
  function ptp(x) {
44608
44684
  const a = Array.from(x);
44609
44685
  if (a.length === 0) return NaN;
@@ -45422,39 +45498,6 @@ function acf(x, nlags) {
45422
45498
  return out;
45423
45499
  }
45424
45500
 
45425
- // src/regression-extra.ts
45426
- var arr5 = (x) => Array.isArray(x) ? x : Array.from(x);
45427
- var mean5 = (x) => mean(x);
45428
- function linearRegression(x, y) {
45429
- const a = arr5(x);
45430
- const b = arr5(y);
45431
- const n = a.length;
45432
- if (b.length !== n) throw new Error(`linearRegression: length mismatch ${n} vs ${b.length}`);
45433
- if (n < 3)
45434
- throw new Error("linearRegression: need at least 3 points for a slope significance test");
45435
- const mx = mean5(a);
45436
- const my = mean5(b);
45437
- let sxx = 0;
45438
- let syy = 0;
45439
- let sxy = 0;
45440
- for (let i = 0; i < n; i++) {
45441
- const dx = a[i] - mx;
45442
- const dy = b[i] - my;
45443
- sxx += dx * dx;
45444
- syy += dy * dy;
45445
- sxy += dx * dy;
45446
- }
45447
- if (sxx === 0) throw new Error("linearRegression: predictor x has zero variance");
45448
- const slope = sxy / sxx;
45449
- const intercept = my - slope * mx;
45450
- const rValue = sxy / Math.sqrt(sxx * syy);
45451
- const df = n - 2;
45452
- const stdErr = Math.sqrt((syy - slope * sxy) / df / sxx);
45453
- const t = slope / stdErr;
45454
- const pValue = 2 * (1 - studentTCDF(Math.abs(t), df));
45455
- return { slope, intercept, rValue, rSquared: rValue * rValue, pValue, stdErr };
45456
- }
45457
-
45458
45501
  // src/ml/ols.ts
45459
45502
  function transpose3(m) {
45460
45503
  const rows = m.length;
@@ -45542,6 +45585,155 @@ function ols(X, y, opts) {
45542
45585
  return { coefficients, stderr, tValues, pValues, r2, adjR2, fStat, residuals };
45543
45586
  }
45544
45587
 
45588
+ // src/stats/timeseries.ts
45589
+ var arr5 = (x) => Array.isArray(x) ? x : Array.from(x);
45590
+ function pacf(x, nlags) {
45591
+ const r = acf(x, nlags);
45592
+ const out = new Array(nlags + 1);
45593
+ out[0] = 1;
45594
+ if (nlags === 0) return out;
45595
+ let phiPrev = [];
45596
+ for (let k = 1; k <= nlags; k++) {
45597
+ if (k === 1) {
45598
+ const phi11 = r[1];
45599
+ out[1] = phi11;
45600
+ phiPrev = [phi11];
45601
+ continue;
45602
+ }
45603
+ let num2 = r[k];
45604
+ let den = 1;
45605
+ for (let j = 1; j <= k - 1; j++) {
45606
+ num2 -= phiPrev[j - 1] * r[k - j];
45607
+ den -= phiPrev[j - 1] * r[j];
45608
+ }
45609
+ const phikk = den === 0 ? 0 : num2 / den;
45610
+ const phiCurr = new Array(k);
45611
+ for (let j = 1; j <= k - 1; j++) {
45612
+ phiCurr[j - 1] = phiPrev[j - 1] - phikk * phiPrev[k - 1 - j];
45613
+ }
45614
+ phiCurr[k - 1] = phikk;
45615
+ out[k] = phikk;
45616
+ phiPrev = phiCurr;
45617
+ }
45618
+ return out;
45619
+ }
45620
+ function ljungBox(x, lags) {
45621
+ const n = x.length;
45622
+ if (lags < 1 || lags >= n)
45623
+ throw new Error(`ljungBox: lags ${lags} out of range for series length ${n}`);
45624
+ const r = acf(x, lags);
45625
+ let sum3 = 0;
45626
+ for (let k = 1; k <= lags; k++) sum3 += r[k] * r[k] / (n - k);
45627
+ const statistic = n * (n + 2) * sum3;
45628
+ const pValue = 1 - chiSquaredCDF(statistic, lags);
45629
+ return { statistic, pValue };
45630
+ }
45631
+ function durbinWatson(residuals) {
45632
+ const e = arr5(residuals);
45633
+ const n = e.length;
45634
+ if (n < 2) throw new Error("durbinWatson: need at least 2 residuals");
45635
+ let num2 = 0;
45636
+ for (let t = 1; t < n; t++) num2 += (e[t] - e[t - 1]) * (e[t] - e[t - 1]);
45637
+ let den = 0;
45638
+ for (let t = 0; t < n; t++) den += e[t] * e[t];
45639
+ if (den === 0) throw new Error("durbinWatson: residuals have zero variance");
45640
+ return num2 / den;
45641
+ }
45642
+ var MACKINNON_C = {
45643
+ 1: { betaInf: -3.4336, beta1: -5.999, beta2: -29.25 },
45644
+ 5: { betaInf: -2.8621, beta1: -2.738, beta2: -8.36 },
45645
+ 10: { betaInf: -2.5671, beta1: -1.438, beta2: -4.48 }
45646
+ };
45647
+ function adfCriticalValue(pct, n) {
45648
+ const { betaInf, beta1, beta2 } = MACKINNON_C[pct];
45649
+ return betaInf + beta1 / n + beta2 / (n * n);
45650
+ }
45651
+ function adfPValue(statistic, n) {
45652
+ const cv1 = adfCriticalValue(1, n);
45653
+ const cv5 = adfCriticalValue(5, n);
45654
+ const cv10 = adfCriticalValue(10, n);
45655
+ const clamp2 = (p) => Math.min(1, Math.max(0, p));
45656
+ if (statistic <= cv1) {
45657
+ const slope2 = (0.05 - 0.01) / (cv5 - cv1);
45658
+ return clamp2(0.01 + slope2 * (statistic - cv1));
45659
+ }
45660
+ if (statistic <= cv5) {
45661
+ const slope2 = (0.05 - 0.01) / (cv5 - cv1);
45662
+ return clamp2(0.01 + slope2 * (statistic - cv1));
45663
+ }
45664
+ if (statistic <= cv10) {
45665
+ const slope2 = (0.1 - 0.05) / (cv10 - cv5);
45666
+ return clamp2(0.05 + slope2 * (statistic - cv5));
45667
+ }
45668
+ const slope = (0.1 - 0.05) / (cv10 - cv5);
45669
+ return clamp2(0.1 + slope * (statistic - cv10));
45670
+ }
45671
+ function adfuller(x, maxlag) {
45672
+ const a = arr5(x);
45673
+ const n = a.length;
45674
+ if (n < 4) throw new Error(`adfuller: series too short (length ${n})`);
45675
+ const d = new Array(n - 1);
45676
+ for (let i = 0; i < n - 1; i++) d[i] = a[i + 1] - a[i];
45677
+ let lag = maxlag ?? Math.floor(12 * Math.pow(n / 100, 0.25));
45678
+ lag = Math.max(0, Math.min(lag, n - 4));
45679
+ for (; lag >= 0; lag--) {
45680
+ const rows = n - lag - 1;
45681
+ const params = lag + 2;
45682
+ if (rows <= params) continue;
45683
+ const X = [];
45684
+ const y = [];
45685
+ for (let i = lag; i <= n - 2; i++) {
45686
+ const row2 = [a[i]];
45687
+ for (let j = 1; j <= lag; j++) row2.push(d[i - j]);
45688
+ X.push(row2);
45689
+ y.push(d[i]);
45690
+ }
45691
+ try {
45692
+ const result = ols(X, y);
45693
+ const statistic = result.coefficients[1] / result.stderr[1];
45694
+ if (!Number.isFinite(statistic)) continue;
45695
+ const pValue = adfPValue(statistic, n);
45696
+ return { statistic, pValue, usedLag: lag };
45697
+ } catch {
45698
+ continue;
45699
+ }
45700
+ }
45701
+ throw new Error(`adfuller: could not construct a well-posed regression for series length ${n}`);
45702
+ }
45703
+
45704
+ // src/regression-extra.ts
45705
+ var arr6 = (x) => Array.isArray(x) ? x : Array.from(x);
45706
+ var mean5 = (x) => mean(x);
45707
+ function linearRegression(x, y) {
45708
+ const a = arr6(x);
45709
+ const b = arr6(y);
45710
+ const n = a.length;
45711
+ if (b.length !== n) throw new Error(`linearRegression: length mismatch ${n} vs ${b.length}`);
45712
+ if (n < 3)
45713
+ throw new Error("linearRegression: need at least 3 points for a slope significance test");
45714
+ const mx = mean5(a);
45715
+ const my = mean5(b);
45716
+ let sxx = 0;
45717
+ let syy = 0;
45718
+ let sxy = 0;
45719
+ for (let i = 0; i < n; i++) {
45720
+ const dx = a[i] - mx;
45721
+ const dy = b[i] - my;
45722
+ sxx += dx * dx;
45723
+ syy += dy * dy;
45724
+ sxy += dx * dy;
45725
+ }
45726
+ if (sxx === 0) throw new Error("linearRegression: predictor x has zero variance");
45727
+ const slope = sxy / sxx;
45728
+ const intercept = my - slope * mx;
45729
+ const rValue = sxy / Math.sqrt(sxx * syy);
45730
+ const df = n - 2;
45731
+ const stdErr = Math.sqrt((syy - slope * sxy) / df / sxx);
45732
+ const t = slope / stdErr;
45733
+ const pValue = 2 * (1 - studentTCDF(Math.abs(t), df));
45734
+ return { slope, intercept, rValue, rSquared: rValue * rValue, pValue, stdErr };
45735
+ }
45736
+
45545
45737
  // src/ml/regularized-regression.ts
45546
45738
  function validate(X, y, name254) {
45547
45739
  const n = X.length;
@@ -46188,6 +46380,100 @@ function multipleTest(pValues, method) {
46188
46380
  return adjusted;
46189
46381
  }
46190
46382
 
46383
+ // src/stats/fit-distribution.ts
46384
+ var LOG_2PI = Math.log(2 * Math.PI);
46385
+ function meanOf(data) {
46386
+ return mean(data);
46387
+ }
46388
+ function popStd(data) {
46389
+ return std(data, "uncorrected");
46390
+ }
46391
+ function normalLogPdf(x, mu, sigma) {
46392
+ const z = (x - mu) / sigma;
46393
+ return -0.5 * z * z - Math.log(sigma) - 0.5 * LOG_2PI;
46394
+ }
46395
+ function fitNormal(data) {
46396
+ const mu = meanOf(data);
46397
+ const sigma = popStd(data);
46398
+ let logLikelihood = 0;
46399
+ for (const x of data) logLikelihood += normalLogPdf(x, mu, sigma);
46400
+ return { params: { mean: mu, std: sigma }, logLikelihood };
46401
+ }
46402
+ function fitExponential(data) {
46403
+ const lambda = 1 / meanOf(data);
46404
+ let logLikelihood = 0;
46405
+ for (const x of data) logLikelihood += Math.log(lambda) - lambda * x;
46406
+ return { params: { lambda }, logLikelihood };
46407
+ }
46408
+ function fitLognormal(data) {
46409
+ for (const x of data) {
46410
+ if (!(x > 0)) {
46411
+ throw new Error("fitDistribution: lognormal requires all data > 0");
46412
+ }
46413
+ }
46414
+ const logData = data.map((x) => Math.log(x));
46415
+ const mu = meanOf(logData);
46416
+ const sigma = popStd(logData);
46417
+ let logLikelihood = 0;
46418
+ for (const x of data) {
46419
+ logLikelihood += normalLogPdf(Math.log(x), mu, sigma) - Math.log(x);
46420
+ }
46421
+ return { params: { mu, sigma }, logLikelihood };
46422
+ }
46423
+ function logFactorial(k) {
46424
+ return lgamma(k + 1);
46425
+ }
46426
+ function fitPoisson(data) {
46427
+ const lambda = meanOf(data);
46428
+ let logLikelihood = 0;
46429
+ for (const k of data) logLikelihood += -lambda + k * Math.log(lambda) - logFactorial(k);
46430
+ return { params: { lambda }, logLikelihood };
46431
+ }
46432
+ function gammaLogPdf(x, shape, scale) {
46433
+ return (shape - 1) * Math.log(x) - x / scale - lgamma(shape) - shape * Math.log(scale);
46434
+ }
46435
+ function fitGamma(data) {
46436
+ for (const x of data) {
46437
+ if (!(x > 0)) {
46438
+ throw new Error("fitDistribution: gamma requires all data > 0");
46439
+ }
46440
+ }
46441
+ const xbar = meanOf(data);
46442
+ const meanLog = meanOf(data.map((x) => Math.log(x)));
46443
+ const s = Math.log(xbar) - meanLog;
46444
+ if (!(s > 0)) {
46445
+ throw new Error("fitDistribution: gamma requires data with positive spread (s <= 0)");
46446
+ }
46447
+ const k0 = (3 - s + Math.sqrt((s - 3) * (s - 3) + 24 * s)) / (12 * s);
46448
+ const f = (k) => Math.log(k) - digamma(k) - s;
46449
+ const shape = secant(f, k0, k0 * 1.1, { tol: 1e-12, maxIter: 200 });
46450
+ const scale = xbar / shape;
46451
+ let logLikelihood = 0;
46452
+ for (const x of data) logLikelihood += gammaLogPdf(x, shape, scale);
46453
+ return { params: { shape, scale }, logLikelihood };
46454
+ }
46455
+ function fitDistribution(name254, data) {
46456
+ if (data.length === 0) {
46457
+ throw new Error("fitDistribution: data must be non-empty");
46458
+ }
46459
+ switch (name254) {
46460
+ case "normal":
46461
+ return fitNormal(data);
46462
+ case "exponential":
46463
+ return fitExponential(data);
46464
+ case "lognormal":
46465
+ return fitLognormal(data);
46466
+ case "poisson":
46467
+ return fitPoisson(data);
46468
+ case "gamma":
46469
+ return fitGamma(data);
46470
+ default: {
46471
+ const _exhaustive = name254;
46472
+ throw new Error(`fitDistribution: unknown distribution '${_exhaustive}'`);
46473
+ }
46474
+ }
46475
+ }
46476
+
46191
46477
  // src/numeric/bfgs.ts
46192
46478
  var CBRT_EPS = Math.cbrt(2220446049250313e-31);
46193
46479
  function numericGradient(f, x) {
@@ -46563,7 +46849,7 @@ function symbolicIntegral(expr, variable = "x") {
46563
46849
  // src/signal-filter-extra.ts
46564
46850
  import { Complex as Complex11 } from "@danielsimonjr/mathts-core";
46565
46851
  var _inv3 = inv;
46566
- var arr6 = (x) => Array.isArray(x) ? x : Array.from(x);
46852
+ var arr7 = (x) => Array.isArray(x) ? x : Array.from(x);
46567
46853
  var sinc = (x) => x === 0 ? 1 : Math.sin(Math.PI * x) / (Math.PI * x);
46568
46854
  function firwin(numtaps, cutoff) {
46569
46855
  if (!Number.isInteger(numtaps) || numtaps < 2)
@@ -46600,10 +46886,10 @@ function lfilterState(b, a, x, zi) {
46600
46886
  return { y, zf: z };
46601
46887
  }
46602
46888
  function lfilter(b, a, x) {
46603
- return lfilterState(arr6(b), arr6(a), arr6(x)).y;
46889
+ return lfilterState(arr7(b), arr7(a), arr7(x)).y;
46604
46890
  }
46605
46891
  function lfilterZi(b, a) {
46606
- const { b: bb, a: aa, n } = padCoeffs(arr6(b), arr6(a));
46892
+ const { b: bb, a: aa, n } = padCoeffs(arr7(b), arr7(a));
46607
46893
  if (n < 2) return [];
46608
46894
  const C = companion(aa);
46609
46895
  const M = Array.from(
@@ -46623,9 +46909,9 @@ function lfilterZi(b, a) {
46623
46909
  return zi;
46624
46910
  }
46625
46911
  function filtfilt(b, a, x) {
46626
- const bb = arr6(b);
46627
- const aa = arr6(a);
46628
- const xx = arr6(x);
46912
+ const bb = arr7(b);
46913
+ const aa = arr7(a);
46914
+ const xx = arr7(x);
46629
46915
  const n = xx.length;
46630
46916
  const ntaps = Math.max(aa.length, bb.length);
46631
46917
  const pad = 3 * ntaps;
@@ -46748,6 +47034,142 @@ function quaternionToRotationMatrix(q) {
46748
47034
  [2 * (x * z - y * w), 2 * (y * z + x * w), 1 - 2 * (x * x + y * y)]
46749
47035
  ];
46750
47036
  }
47037
+
47038
+ // src/stats/inference-extra2.ts
47039
+ var TWO_PI = 2 * Math.PI;
47040
+ function noncentralChi2CDF(x, df, nc) {
47041
+ if (df <= 0) throw new Error("noncentralChi2CDF: df must be positive");
47042
+ if (nc < 0) throw new Error("noncentralChi2CDF: nc must be non-negative");
47043
+ if (x <= 0) return 0;
47044
+ const halfNc = nc / 2;
47045
+ let sum3 = 0;
47046
+ let poissonCum = 0;
47047
+ let logWeight = -halfNc;
47048
+ for (let j = 0; j < 2e3; j++) {
47049
+ const weight = Math.exp(logWeight);
47050
+ sum3 += weight * chiSquaredCDF(x, df + 2 * j);
47051
+ poissonCum += weight;
47052
+ if (j > halfNc && 1 - poissonCum < 1e-12) break;
47053
+ logWeight += Math.log(halfNc) - Math.log(j + 1);
47054
+ }
47055
+ return sum3;
47056
+ }
47057
+ function noncentralFCDF(x, dfn, dfd, nc) {
47058
+ if (dfn <= 0 || dfd <= 0) throw new Error("noncentralFCDF: dfn and dfd must be positive");
47059
+ if (nc < 0) throw new Error("noncentralFCDF: nc must be non-negative");
47060
+ if (x <= 0) return 0;
47061
+ const halfNc = nc / 2;
47062
+ let sum3 = 0;
47063
+ let poissonCum = 0;
47064
+ let logWeight = -halfNc;
47065
+ for (let j = 0; j < 2e3; j++) {
47066
+ const weight = Math.exp(logWeight);
47067
+ const dfnj = dfn + 2 * j;
47068
+ sum3 += weight * fCDF(x * dfn / dfnj, dfnj, dfd);
47069
+ poissonCum += weight;
47070
+ if (j > halfNc && 1 - poissonCum < 1e-12) break;
47071
+ logWeight += Math.log(halfNc) - Math.log(j + 1);
47072
+ }
47073
+ return sum3;
47074
+ }
47075
+ function noncentralTCDF(t, df, nc) {
47076
+ if (df <= 0) throw new Error("noncentralTCDF: df must be positive");
47077
+ const chi2 = chiSquaredDist(df);
47078
+ const std2 = normalDist();
47079
+ const upper = df + 40 * Math.sqrt(2 * Math.max(df, 1)) + 100;
47080
+ const panels = 2e4;
47081
+ const a = 1e-10;
47082
+ const h = (upper - a) / panels;
47083
+ const integrand = (v) => {
47084
+ if (v <= 0) return 0;
47085
+ const z = t * Math.sqrt(v / df) - nc;
47086
+ return std2.cdf(z) * chi2.pdf(v);
47087
+ };
47088
+ let sum3 = integrand(a) + integrand(upper);
47089
+ for (let i = 1; i < panels; i++) {
47090
+ const v = a + i * h;
47091
+ sum3 += (i % 2 === 0 ? 2 : 4) * integrand(v);
47092
+ }
47093
+ return h / 3 * sum3;
47094
+ }
47095
+ function circularSums(angles, opts) {
47096
+ const { high = TWO_PI, low = 0 } = opts;
47097
+ const scale = TWO_PI / (high - low);
47098
+ let sinSum = 0;
47099
+ let cosSum = 0;
47100
+ for (const a of angles) {
47101
+ const theta = (a - low) * scale;
47102
+ sinSum += Math.sin(theta);
47103
+ cosSum += Math.cos(theta);
47104
+ }
47105
+ return { sinSum, cosSum, scale };
47106
+ }
47107
+ function circmean(angles, opts = {}) {
47108
+ const { low = 0 } = opts;
47109
+ const { sinSum, cosSum, scale } = circularSums(angles, opts);
47110
+ let mean7 = Math.atan2(sinSum, cosSum);
47111
+ if (mean7 < 0) mean7 += TWO_PI;
47112
+ return mean7 / scale + low;
47113
+ }
47114
+ function circvar(angles, opts = {}) {
47115
+ const n = angles.length;
47116
+ if (n === 0) throw new Error("circvar: angles must be non-empty");
47117
+ const { sinSum, cosSum } = circularSums(angles, opts);
47118
+ const R = Math.hypot(cosSum, sinSum) / n;
47119
+ return 1 - R;
47120
+ }
47121
+ function circstd(angles, opts = {}) {
47122
+ const n = angles.length;
47123
+ if (n === 0) throw new Error("circstd: angles must be non-empty");
47124
+ const { sinSum, cosSum } = circularSums(angles, opts);
47125
+ const R = Math.hypot(cosSum, sinSum) / n;
47126
+ return Math.sqrt(-2 * Math.log(R));
47127
+ }
47128
+ function vonMisesPDF(theta, mu, kappa) {
47129
+ if (kappa < 0) throw new Error("vonMisesPDF: kappa must be non-negative");
47130
+ return Math.exp(kappa * Math.cos(theta - mu)) / (TWO_PI * besselIScalar(0, kappa));
47131
+ }
47132
+ function mcnemar(table, opts = {}) {
47133
+ if (table.length !== 2 || table[0].length !== 2 || table[1].length !== 2) {
47134
+ throw new Error("mcnemar: table must be 2x2");
47135
+ }
47136
+ const b = table[0][1];
47137
+ const c = table[1][0];
47138
+ const correction = opts.correction !== false;
47139
+ const denom = b + c;
47140
+ const diff2 = Math.max(0, Math.abs(b - c) - (correction ? 1 : 0));
47141
+ const chi2 = denom > 0 ? diff2 * diff2 / denom : 0;
47142
+ const pValue = 1 - chiSquaredCDF(chi2, 1);
47143
+ return { chi2, pValue };
47144
+ }
47145
+ function cochranQ(data) {
47146
+ const n = data.length;
47147
+ if (n === 0) throw new Error("cochranQ: data must have at least one row");
47148
+ const k = data[0].length;
47149
+ if (k < 2) throw new Error("cochranQ: need at least 2 treatments (columns)");
47150
+ const colSums = new Array(k).fill(0);
47151
+ const rowSums = new Array(n).fill(0);
47152
+ let N = 0;
47153
+ for (let i = 0; i < n; i++) {
47154
+ if (data[i].length !== k) throw new Error("cochranQ: data must be rectangular");
47155
+ let rowSum = 0;
47156
+ for (let j = 0; j < k; j++) {
47157
+ colSums[j] += data[i][j];
47158
+ rowSum += data[i][j];
47159
+ }
47160
+ rowSums[i] = rowSum;
47161
+ N += rowSum;
47162
+ }
47163
+ let sumC2 = 0;
47164
+ for (let j = 0; j < k; j++) sumC2 += colSums[j] * colSums[j];
47165
+ let sumR2 = 0;
47166
+ for (let i = 0; i < n; i++) sumR2 += rowSums[i] * rowSums[i];
47167
+ const dof = k - 1;
47168
+ const denominator = k * N - sumR2;
47169
+ const Q2 = denominator !== 0 ? dof * (k * sumC2 - N * N) / denominator : 0;
47170
+ const pValue = 1 - chiSquaredCDF(Q2, dof);
47171
+ return { Q: Q2, pValue, dof };
47172
+ }
46751
47173
  export {
46752
47174
  ARRAY_WORKER_THRESHOLD,
46753
47175
  CAS_BATCH_THRESHOLD,
@@ -46770,6 +47192,7 @@ export {
46770
47192
  acsch,
46771
47193
  add,
46772
47194
  addScalar,
47195
+ adfuller,
46773
47196
  adjacencyMatrix,
46774
47197
  airyAi,
46775
47198
  airyBi,
@@ -46866,11 +47289,15 @@ export {
46866
47289
  chineseRemainder,
46867
47290
  chirpZTransform,
46868
47291
  cholesky,
47292
+ circmean,
47293
+ circstd,
46869
47294
  circulant,
47295
+ circvar,
46870
47296
  clamp,
46871
47297
  classicalElectronRadius,
46872
47298
  clearAssumptions,
46873
47299
  clone3 as clone,
47300
+ cochranQ,
46874
47301
  coefficientList,
46875
47302
  collect,
46876
47303
  column,
@@ -46970,6 +47397,7 @@ export {
46970
47397
  dotPow,
46971
47398
  doubleFactorial,
46972
47399
  dst,
47400
+ durbinWatson,
46973
47401
  dwt,
46974
47402
  efimovFactor,
46975
47403
  eigenvectorCentrality,
@@ -47094,6 +47522,7 @@ export {
47094
47522
  firstRadiation,
47095
47523
  firwin,
47096
47524
  fisherExact,
47525
+ fitDistribution,
47097
47526
  fix,
47098
47527
  flatten3 as flatten,
47099
47528
  floor,
@@ -47211,6 +47640,7 @@ export {
47211
47640
  kdTree,
47212
47641
  kdTreeNearest,
47213
47642
  kendallTau,
47643
+ kendallTauTest,
47214
47644
  kendalltau,
47215
47645
  kldivergence,
47216
47646
  klitzing,
@@ -47251,6 +47681,7 @@ export {
47251
47681
  linprog,
47252
47682
  linregress,
47253
47683
  linsolve,
47684
+ ljungBox,
47254
47685
  loess,
47255
47686
  log,
47256
47687
  log10,
@@ -47299,6 +47730,7 @@ export {
47299
47730
  max,
47300
47731
  maxSelect,
47301
47732
  maximize,
47733
+ mcnemar,
47302
47734
  mean,
47303
47735
  meanCI,
47304
47736
  medfilt,
@@ -47338,7 +47770,10 @@ export {
47338
47770
  nintegrate,
47339
47771
  nnls,
47340
47772
  nodeOperations,
47773
+ noncentralChi2CDF,
47341
47774
  noncentralChi2PDF,
47775
+ noncentralFCDF,
47776
+ noncentralTCDF,
47342
47777
  norm,
47343
47778
  norm22 as norm2,
47344
47779
  normFro,
@@ -47364,6 +47799,7 @@ export {
47364
47799
  or,
47365
47800
  orth,
47366
47801
  outer,
47802
+ pacf,
47367
47803
  padeApproximant,
47368
47804
  pageRank,
47369
47805
  parallelAutoCorr,
@@ -47640,6 +48076,7 @@ export {
47640
48076
  variables,
47641
48077
  variance,
47642
48078
  variation,
48079
+ vonMisesPDF,
47643
48080
  voronoiDiagram,
47644
48081
  weakMixingAngle,
47645
48082
  weibullDist,