@danielsimonjr/mathts-functions 0.31.0 → 0.33.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/descriptive-stats.d.ts +16 -0
- package/dist/descriptive-stats.d.ts.map +1 -1
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1383 -485
- package/dist/numbertheory/extra.d.ts +142 -0
- package/dist/numbertheory/extra.d.ts.map +1 -0
- package/dist/numeric/gauss-nodes.d.ts +35 -0
- package/dist/numeric/gauss-nodes.d.ts.map +1 -0
- package/dist/special/hypergeometric.d.ts +91 -0
- package/dist/special/hypergeometric.d.ts.map +1 -0
- package/dist/special/jacobi-elliptic.d.ts +60 -0
- package/dist/special/jacobi-elliptic.d.ts.map +1 -0
- package/dist/special/polygamma-orthopoly.d.ts +79 -0
- package/dist/special/polygamma-orthopoly.d.ts.map +1 -0
- package/dist/stats/fit-distribution.d.ts +44 -0
- package/dist/stats/fit-distribution.d.ts.map +1 -0
- package/dist/stats/inference-extra2.d.ts +127 -0
- package/dist/stats/inference-extra2.d.ts.map +1 -0
- package/dist/stats/timeseries.d.ts +50 -0
- package/dist/stats/timeseries.d.ts.map +1 -0
- package/dist/typed/hypothesis.d.ts +24 -6
- package/dist/typed/hypothesis.d.ts.map +1 -1
- package/package.json +1 -1
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(
|
|
2025
|
-
return Array.isArray(
|
|
2026
|
-
}
|
|
2027
|
-
function vectorNorm(
|
|
2028
|
-
if (p === Infinity) return Math.max(...
|
|
2029
|
-
if (p === -Infinity) return Math.min(...
|
|
2030
|
-
if (p === 0) return
|
|
2031
|
-
if (p === 2) return norm2(
|
|
2032
|
-
const terms = new Array(
|
|
2033
|
-
for (let i = 0; i <
|
|
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: (
|
|
2075
|
-
"Array, number": (
|
|
2076
|
-
"Array, string": (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
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: (
|
|
2252
|
-
if (
|
|
2253
|
-
return pairwiseSum(
|
|
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(
|
|
2274
|
-
return sumSquaredDeviations(
|
|
2273
|
+
function m2OfArray(arr8) {
|
|
2274
|
+
return sumSquaredDeviations(arr8);
|
|
2275
2275
|
}
|
|
2276
2276
|
var variance = mathTyped2("variance", {
|
|
2277
|
-
Array: (
|
|
2278
|
-
"Array, string": (
|
|
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: (
|
|
2292
|
-
"Array, string": (
|
|
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: (
|
|
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(
|
|
2677
|
-
return new Float64Array(
|
|
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 (
|
|
2687
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2704
|
-
if (
|
|
2705
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2741
|
-
if (
|
|
2742
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2747
|
-
if (
|
|
2748
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2776
|
-
if (
|
|
2777
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2782
|
-
if (
|
|
2783
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2795
|
-
if (
|
|
2796
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2815
|
-
if (
|
|
2816
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2835
|
-
const data = toFloat64Array(
|
|
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 (
|
|
2856
|
-
if (
|
|
2857
|
-
return parallelStatMedian(toFloat64Array(
|
|
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
|
|
2863
|
-
return
|
|
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: (
|
|
2869
|
-
if (
|
|
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 <
|
|
2873
|
-
const val =
|
|
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: (
|
|
2892
|
-
if (
|
|
2891
|
+
Array: (arr8) => {
|
|
2892
|
+
if (arr8.length === 0) return 1;
|
|
2893
2893
|
let prod2 = 1;
|
|
2894
|
-
for (let i = 0; i <
|
|
2895
|
-
prod2 *=
|
|
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 (
|
|
2924
|
-
const data = toFloat64Array(
|
|
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": (
|
|
2966
|
-
return parallelStatNorm(toFloat64Array(
|
|
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 (
|
|
3024
|
-
return parallelStatMAD(toFloat64Array(
|
|
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: (
|
|
3036
|
-
const result = new Array(
|
|
3037
|
-
neumaierCumsum(
|
|
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": (
|
|
3060
|
-
return parallelStatQuantile(toFloat64Array(
|
|
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 (
|
|
3084
|
-
return parallelStatHistogram(toFloat64Array(
|
|
3083
|
+
"Array, number": async (arr8, bins) => {
|
|
3084
|
+
return parallelStatHistogram(toFloat64Array(arr8), bins);
|
|
3085
3085
|
}
|
|
3086
3086
|
});
|
|
3087
|
-
function quickSelect(
|
|
3088
|
-
if (k < 0 || k >=
|
|
3089
|
-
throw new RangeError(`k=${k} is out of range for array of 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 =
|
|
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(
|
|
3135
|
-
const n =
|
|
3134
|
+
function medianSelect(arr8) {
|
|
3135
|
+
const n = arr8.length;
|
|
3136
3136
|
if (n === 0) return NaN;
|
|
3137
|
-
if (n === 1) return
|
|
3137
|
+
if (n === 1) return arr8[0];
|
|
3138
3138
|
const mid = Math.floor(n / 2);
|
|
3139
3139
|
if (n % 2 === 1) {
|
|
3140
|
-
return quickSelect(
|
|
3140
|
+
return quickSelect(arr8, mid);
|
|
3141
3141
|
}
|
|
3142
|
-
const a =
|
|
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(
|
|
3147
|
+
function minSelect(arr8, k) {
|
|
3148
3148
|
if (k <= 0) return [];
|
|
3149
|
-
if (k >=
|
|
3150
|
-
const a =
|
|
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(
|
|
3156
|
+
function maxSelect(arr8, k) {
|
|
3157
3157
|
if (k <= 0) return [];
|
|
3158
|
-
if (k >=
|
|
3159
|
-
const a =
|
|
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(
|
|
5114
|
-
return
|
|
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(
|
|
5164
|
+
function flattenArray(arr8) {
|
|
5165
5165
|
const result = [];
|
|
5166
|
-
const stack = [...
|
|
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(
|
|
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 = [...
|
|
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(
|
|
10171
|
-
if (index < 0 || index >=
|
|
10172
|
-
throw new Error("Index " + index + " out of bounds for array of 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
|
|
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
|
|
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] =
|
|
11555
|
+
result[i] = arr8[i];
|
|
11556
11556
|
}
|
|
11557
11557
|
return result;
|
|
11558
11558
|
}, writeVec2 = function(alloc, data) {
|
|
11559
|
-
const
|
|
11559
|
+
const arr8 = new Float64Array(wasm.memory.buffer, alloc.ptr, dim);
|
|
11560
11560
|
for (let i = 0; i < dim; i++) {
|
|
11561
|
-
|
|
11561
|
+
arr8[i] = data[i];
|
|
11562
11562
|
}
|
|
11563
11563
|
}, writeStage2 = function(stageIdx, data) {
|
|
11564
11564
|
const offset = stageIdx * dim;
|
|
11565
|
-
const
|
|
11565
|
+
const arr8 = new Float64Array(wasm.memory.buffer, stageAlloc.ptr, numStages * dim);
|
|
11566
11566
|
for (let i = 0; i < dim; i++) {
|
|
11567
|
-
|
|
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(
|
|
15513
|
-
for (let 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 =
|
|
15516
|
-
|
|
15517
|
-
|
|
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(
|
|
15531
|
+
function _mean(arr8) {
|
|
15532
15532
|
let sum3 = 0;
|
|
15533
|
-
for (let i = 0; i <
|
|
15534
|
-
return sum3 /
|
|
15533
|
+
for (let i = 0; i < arr8.length; i++) sum3 += arr8[i];
|
|
15534
|
+
return sum3 / arr8.length;
|
|
15535
15535
|
}
|
|
15536
|
-
function _variance(
|
|
15537
|
-
const m = _mean(
|
|
15536
|
+
function _variance(arr8, ddof = 1) {
|
|
15537
|
+
const m = _mean(arr8);
|
|
15538
15538
|
let sum3 = 0;
|
|
15539
|
-
for (let i = 0; i <
|
|
15540
|
-
return sum3 / (
|
|
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
|
-
|
|
15965
|
-
|
|
15966
|
-
|
|
15967
|
-
|
|
15968
|
-
|
|
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
|
|
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(
|
|
16291
|
-
const s =
|
|
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: (
|
|
18082
|
-
"Array, number": (
|
|
18083
|
-
"Array, Array": (
|
|
18084
|
-
"Array, number, Array": (
|
|
18085
|
-
"Array, Array, number": (
|
|
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(
|
|
18088
|
-
if (
|
|
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 !==
|
|
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 <
|
|
18179
|
+
for (let j = 0; j < arr8.length; j++) {
|
|
18108
18180
|
r -= weights[j];
|
|
18109
18181
|
if (r < 0) {
|
|
18110
|
-
result2.push(
|
|
18182
|
+
result2.push(arr8[j]);
|
|
18111
18183
|
break;
|
|
18112
18184
|
}
|
|
18113
18185
|
}
|
|
18114
|
-
if (result2.length < i + 1) result2.push(
|
|
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(
|
|
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
|
|
18844
|
+
let arr8 = array;
|
|
18773
18845
|
if (isNumber(array) || isBigNumber(array)) {
|
|
18774
|
-
|
|
18846
|
+
arr8 = [array];
|
|
18775
18847
|
}
|
|
18776
18848
|
const _defaultValue = defaultValue !== void 0 ? defaultValue : 0;
|
|
18777
|
-
_resize(
|
|
18778
|
-
return
|
|
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
|
|
18880
|
-
while (Array.isArray(
|
|
18881
|
-
|
|
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
|
-
|
|
18961
|
+
arr8 = _squeeze(arr8, dims, 0);
|
|
18890
18962
|
s.length = dims;
|
|
18891
18963
|
}
|
|
18892
|
-
return
|
|
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
|
|
18898
|
-
for (let i = 0, ii =
|
|
18899
|
-
|
|
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
|
|
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(
|
|
18925
|
-
for (let i = 0; i <
|
|
18926
|
-
const item =
|
|
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(
|
|
18935
|
-
if (Array.isArray(
|
|
18936
|
-
for (let i = 0; i <
|
|
18937
|
-
_flattenRectangular(
|
|
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 <
|
|
18941
|
-
flat.push(
|
|
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
|
|
19993
|
+
const arr8 = [0];
|
|
19922
19994
|
for (let i = 0; i < str.length; ) {
|
|
19923
|
-
let arrL =
|
|
19995
|
+
let arrL = arr8.length;
|
|
19924
19996
|
while (arrL--) {
|
|
19925
|
-
|
|
19997
|
+
arr8[arrL] *= 10;
|
|
19926
19998
|
}
|
|
19927
|
-
|
|
19928
|
-
for (let j2 = 0; j2 <
|
|
19929
|
-
if (
|
|
19930
|
-
if (
|
|
19931
|
-
|
|
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
|
-
|
|
19934
|
-
|
|
20005
|
+
arr8[j2 + 1] += arr8[j2] >> 1;
|
|
20006
|
+
arr8[j2] &= 1;
|
|
19935
20007
|
}
|
|
19936
20008
|
}
|
|
19937
20009
|
}
|
|
19938
|
-
return
|
|
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
|
|
20439
|
-
return offsets[arrayIndex] > depth ? array :
|
|
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
|
|
20450
|
-
return
|
|
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(
|
|
20732
|
+
Array: function(arr8) {
|
|
20661
20733
|
const wasm = wasmLoader.getModule();
|
|
20662
|
-
if (wasm &&
|
|
20734
|
+
if (wasm && arr8.length >= 100 && arr8.every((x) => typeof x === "number")) {
|
|
20663
20735
|
try {
|
|
20664
|
-
const input = new Float64Array(
|
|
20736
|
+
const input = new Float64Array(arr8);
|
|
20665
20737
|
const inputAlloc = wasmLoader.allocateFloat64Array(input);
|
|
20666
|
-
const resultAlloc = wasmLoader.allocateFloat64ArrayEmpty(
|
|
20738
|
+
const resultAlloc = wasmLoader.allocateFloat64ArrayEmpty(arr8.length);
|
|
20667
20739
|
try {
|
|
20668
|
-
wasm.lgammaArray(inputAlloc.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
|
|
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
|
|
21715
|
-
return
|
|
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(
|
|
22052
|
-
for (let i = 0; i <
|
|
22053
|
-
if (typeof
|
|
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(
|
|
22294
|
-
for (let i = 0; i <
|
|
22295
|
-
if (typeof
|
|
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
|
|
22885
|
+
const arr8 = [];
|
|
22814
22886
|
if (size2.length > 0) {
|
|
22815
|
-
return resize(
|
|
22887
|
+
return resize(arr8, size2, dflt);
|
|
22816
22888
|
}
|
|
22817
|
-
return
|
|
22889
|
+
return arr8;
|
|
22818
22890
|
}
|
|
22819
22891
|
}
|
|
22820
22892
|
function _normalize(size2) {
|
|
22821
22893
|
let hasBigNumbers = false;
|
|
22822
|
-
size2.forEach(function(value, index,
|
|
22894
|
+
size2.forEach(function(value, index, arr8) {
|
|
22823
22895
|
if (isBigNumber(value)) {
|
|
22824
22896
|
hasBigNumbers = true;
|
|
22825
|
-
|
|
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(
|
|
22953
|
-
for (let i = 0; i <
|
|
22954
|
-
const row2 =
|
|
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(
|
|
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] =
|
|
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(
|
|
23110
|
-
if (
|
|
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 =
|
|
23185
|
+
const allMatrix = arr8.every(
|
|
23114
23186
|
(item) => typeof item.toArray === "function"
|
|
23115
23187
|
);
|
|
23116
|
-
const hasArray =
|
|
23117
|
-
const arrays =
|
|
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(
|
|
23129
|
-
if (
|
|
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(
|
|
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
|
|
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(
|
|
23179
|
-
if (
|
|
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 =
|
|
23254
|
+
const allMatrix = arr8.every(
|
|
23183
23255
|
(item) => typeof item.toArray === "function"
|
|
23184
23256
|
);
|
|
23185
|
-
const hasArray =
|
|
23186
|
-
const arrays =
|
|
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(
|
|
23198
|
-
if (
|
|
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(
|
|
23272
|
+
const N = checkVectorTypeAndReturnLength(arr8[0]);
|
|
23201
23273
|
const result = [];
|
|
23202
|
-
for (const row2 of
|
|
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
|
|
26215
|
-
|
|
26216
|
-
const res = resize(
|
|
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(
|
|
27115
|
-
for (let i = 0; i <
|
|
27116
|
-
if (typeof
|
|
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(
|
|
27214
|
-
for (let i = 0; i <
|
|
27215
|
-
if (typeof
|
|
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(
|
|
30070
|
-
for (let i = 0; i <
|
|
30071
|
-
if (typeof
|
|
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(
|
|
30114
|
-
if (k >=
|
|
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 <
|
|
30118
|
-
if (isNumeric2(
|
|
30119
|
-
return
|
|
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 &&
|
|
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 ?
|
|
30129
|
-
const data = wasmLoader.allocateFloat64Array(
|
|
30130
|
-
const work = wasmLoader.allocateFloat64ArrayEmpty(
|
|
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,
|
|
30133
|
-
for (let i = 0; i <
|
|
30134
|
-
|
|
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 =
|
|
30218
|
+
let to3 = arr8.length - 1;
|
|
30147
30219
|
while (from < to3) {
|
|
30148
30220
|
let r = from;
|
|
30149
30221
|
let w = to3;
|
|
30150
|
-
const pivot =
|
|
30222
|
+
const pivot = arr8[Math.floor(Math.random() * (to3 - from + 1)) + from];
|
|
30151
30223
|
while (r < w) {
|
|
30152
|
-
if (compare3(
|
|
30153
|
-
const tmp =
|
|
30154
|
-
|
|
30155
|
-
|
|
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(
|
|
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
|
|
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(
|
|
30375
|
+
function _isZeros(arr8) {
|
|
30304
30376
|
return deepEqual3(
|
|
30305
|
-
add2(
|
|
30306
|
-
add2(multiply2(
|
|
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(
|
|
30695
|
+
function _out(arr8) {
|
|
30624
30696
|
if (config2.matrix === "Matrix") {
|
|
30625
|
-
return matrix2 ? matrix2(
|
|
30697
|
+
return matrix2 ? matrix2(arr8) : noMatrix();
|
|
30626
30698
|
}
|
|
30627
|
-
return
|
|
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(
|
|
30925
|
-
for (let i = 0; i <
|
|
30926
|
-
if (typeof
|
|
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(
|
|
31004
|
-
for (let i = 0; i <
|
|
31005
|
-
if (typeof
|
|
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 = (
|
|
31091
|
-
return matrix2(
|
|
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(
|
|
31404
|
-
if (!_pairwise(
|
|
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(
|
|
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
|
|
31418
|
-
return _isNumber(
|
|
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
|
|
31425
|
-
return _isNumber(
|
|
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
|
|
31438
|
-
return _isNumber(
|
|
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);
|
|
@@ -31765,9 +31837,9 @@ var dependencies187 = ["typed", "factorial"];
|
|
|
31765
31837
|
var createPermutations = /* @__PURE__ */ factory(
|
|
31766
31838
|
name187,
|
|
31767
31839
|
dependencies187,
|
|
31768
|
-
({ typed: typed3, factorial:
|
|
31840
|
+
({ typed: typed3, factorial: factorial5 }) => {
|
|
31769
31841
|
return typed3(name187, {
|
|
31770
|
-
"number | BigNumber":
|
|
31842
|
+
"number | BigNumber": factorial5,
|
|
31771
31843
|
"number, number": function(n, k) {
|
|
31772
31844
|
if (!isInteger(n) || n < 0) {
|
|
31773
31845
|
throw new TypeError("Positive integer value expected in function permutations");
|
|
@@ -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(
|
|
32758
|
-
const n =
|
|
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 =
|
|
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(
|
|
32824
|
-
const size2 = arraySize(
|
|
32825
|
-
if (size2.length === 1) return _fft(
|
|
32895
|
+
function _ndFft(arr8) {
|
|
32896
|
+
const size2 = arraySize(arr8);
|
|
32897
|
+
if (size2.length === 1) return _fft(arr8, size2[0]);
|
|
32826
32898
|
return _1dFft(
|
|
32827
|
-
|
|
32899
|
+
arr8.map((slice) => _ndFft(slice)),
|
|
32828
32900
|
0
|
|
32829
32901
|
);
|
|
32830
32902
|
}
|
|
32831
|
-
function _1dFft(
|
|
32832
|
-
const size2 = arraySize(
|
|
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(
|
|
32908
|
+
result.push(_1dFft(arr8[i], dim - 1));
|
|
32837
32909
|
}
|
|
32838
32910
|
return result;
|
|
32839
32911
|
}
|
|
32840
|
-
if (size2.length === 1) return _fft(
|
|
32841
|
-
function _transpose(
|
|
32842
|
-
const size3 = arraySize(
|
|
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(
|
|
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(
|
|
32925
|
+
return _transpose(_1dFft(_transpose(arr8), 1));
|
|
32854
32926
|
}
|
|
32855
|
-
function _czt(
|
|
32856
|
-
const n =
|
|
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(
|
|
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(
|
|
32891
|
-
const length = len ??
|
|
32892
|
-
if (length === 1) return [
|
|
32893
|
-
if (length ===
|
|
32894
|
-
const interleaved = complexToInterleaved(
|
|
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
|
-
|
|
32986
|
+
arr8.filter((_, i) => i % 2 === 0),
|
|
32915
32987
|
length / 2
|
|
32916
32988
|
),
|
|
32917
32989
|
..._fft(
|
|
32918
|
-
|
|
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(
|
|
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(
|
|
33205
|
-
const n =
|
|
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 =
|
|
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(
|
|
33237
|
-
const size2 = isMatrix(
|
|
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(
|
|
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(
|
|
33259
|
-
return
|
|
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(
|
|
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(
|
|
34230
|
-
if (isMatrix(
|
|
34231
|
-
return matrix2(_diff(
|
|
34301
|
+
"Array | Matrix": function(arr8) {
|
|
34302
|
+
if (isMatrix(arr8)) {
|
|
34303
|
+
return matrix2(_diff(arr8.toArray()));
|
|
34232
34304
|
} else {
|
|
34233
|
-
return _diff(
|
|
34305
|
+
return _diff(arr8);
|
|
34234
34306
|
}
|
|
34235
34307
|
},
|
|
34236
|
-
"Array | Matrix, number": function(
|
|
34308
|
+
"Array | Matrix, number": function(arr8, dim) {
|
|
34237
34309
|
if (!isInteger(dim)) throw new RangeError("Dimension must be a whole number");
|
|
34238
|
-
if (isMatrix(
|
|
34239
|
-
return matrix2(_recursive(
|
|
34310
|
+
if (isMatrix(arr8)) {
|
|
34311
|
+
return matrix2(_recursive(arr8.toArray(), dim));
|
|
34240
34312
|
} else {
|
|
34241
|
-
return _recursive(
|
|
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) => (
|
|
34248
|
-
"Matrix, BigNumber": typed3.referTo("Matrix,number", (selfMn) => (
|
|
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(
|
|
34251
|
-
if (isMatrix(
|
|
34252
|
-
|
|
34322
|
+
function _recursive(arr8, dim) {
|
|
34323
|
+
if (isMatrix(arr8)) {
|
|
34324
|
+
arr8 = arr8.toArray();
|
|
34253
34325
|
}
|
|
34254
|
-
if (!Array.isArray(
|
|
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
|
-
|
|
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(
|
|
34336
|
+
return _diff(arr8);
|
|
34265
34337
|
} else {
|
|
34266
34338
|
throw RangeError("Cannot have negative dimension");
|
|
34267
34339
|
}
|
|
34268
34340
|
}
|
|
34269
|
-
function _diff(
|
|
34341
|
+
function _diff(arr8) {
|
|
34270
34342
|
const result = [];
|
|
34271
|
-
const size2 =
|
|
34343
|
+
const size2 = arr8.length;
|
|
34272
34344
|
for (let i = 1; i < size2; i++) {
|
|
34273
|
-
result.push(_ElementDiff(
|
|
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
|
|
35431
|
+
const arr8 = _AAA(
|
|
35360
35432
|
x.valueOf(),
|
|
35361
35433
|
y.valueOf(),
|
|
35362
35434
|
plane.valueOf()
|
|
35363
35435
|
);
|
|
35364
|
-
return
|
|
35436
|
+
return arr8 === null ? null : matrix2(arr8);
|
|
35365
35437
|
},
|
|
35366
35438
|
"Matrix, Matrix, Matrix, Matrix": function(w, x, y, z) {
|
|
35367
|
-
const
|
|
35439
|
+
const arr8 = _AAAA(
|
|
35368
35440
|
w.valueOf(),
|
|
35369
35441
|
x.valueOf(),
|
|
35370
35442
|
y.valueOf(),
|
|
35371
35443
|
z.valueOf()
|
|
35372
35444
|
);
|
|
35373
|
-
return
|
|
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(
|
|
35440
|
-
if (
|
|
35441
|
-
if (
|
|
35442
|
-
if (
|
|
35443
|
-
return flatten4(
|
|
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
|
|
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(
|
|
35586
|
-
for (let i = 0; i <
|
|
35587
|
-
if (typeof
|
|
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(
|
|
35720
|
-
for (let i = 0; i <
|
|
35721
|
-
if (typeof
|
|
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
|
}
|
|
@@ -36033,7 +36105,7 @@ var dependencies224 = ["typed", "add", "divide", "multiply", "factorial", "isInt
|
|
|
36033
36105
|
var createMultinomial = /* @__PURE__ */ factory(
|
|
36034
36106
|
name224,
|
|
36035
36107
|
dependencies224,
|
|
36036
|
-
({ typed: typed3, add: add2, divide: divide2, multiply: multiply2, factorial:
|
|
36108
|
+
({ typed: typed3, add: add2, divide: divide2, multiply: multiply2, factorial: factorial5, isInteger: isInteger3, isPositive: isPositive2 }) => {
|
|
36037
36109
|
return typed3(name224, {
|
|
36038
36110
|
"Array | Matrix": function(a) {
|
|
36039
36111
|
let sum3 = 0;
|
|
@@ -36043,9 +36115,9 @@ var createMultinomial = /* @__PURE__ */ factory(
|
|
|
36043
36115
|
throw new TypeError("Positive integer value expected in function multinomial");
|
|
36044
36116
|
}
|
|
36045
36117
|
sum3 = add2(sum3, ai);
|
|
36046
|
-
denom = multiply2(denom,
|
|
36118
|
+
denom = multiply2(denom, factorial5(ai));
|
|
36047
36119
|
});
|
|
36048
|
-
return divide2(
|
|
36120
|
+
return divide2(factorial5(sum3), denom);
|
|
36049
36121
|
}
|
|
36050
36122
|
});
|
|
36051
36123
|
}
|
|
@@ -37102,7 +37174,7 @@ var createZeta = /* @__PURE__ */ factory(
|
|
|
37102
37174
|
multiply: multiply2,
|
|
37103
37175
|
pow: pow2,
|
|
37104
37176
|
divide: divide2,
|
|
37105
|
-
factorial:
|
|
37177
|
+
factorial: factorial5,
|
|
37106
37178
|
equal: equal2,
|
|
37107
37179
|
smallerEq: smallerEq2,
|
|
37108
37180
|
isBounded: isBounded2,
|
|
@@ -37180,8 +37252,8 @@ var createZeta = /* @__PURE__ */ factory(
|
|
|
37180
37252
|
let S = k;
|
|
37181
37253
|
for (let j = k; smallerEq2(j, n); j = add2(j, 1)) {
|
|
37182
37254
|
const factor2 = divide2(
|
|
37183
|
-
multiply2(
|
|
37184
|
-
multiply2(
|
|
37255
|
+
multiply2(factorial5(add2(n, subtract2(j, 1))), pow2(4, j)),
|
|
37256
|
+
multiply2(factorial5(subtract2(n, j)), factorial5(multiply2(2, j)))
|
|
37185
37257
|
);
|
|
37186
37258
|
S = add2(S, factor2);
|
|
37187
37259
|
}
|
|
@@ -37259,12 +37331,12 @@ function createComplexEigs({
|
|
|
37259
37331
|
matrixFromColumns: _matrixFromColumns,
|
|
37260
37332
|
dot: dot5
|
|
37261
37333
|
}) {
|
|
37262
|
-
function complexEigs(
|
|
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(
|
|
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(
|
|
37312
|
-
reduceToHessenberg(
|
|
37313
|
-
const { values, C } = iterateUntilTriangular(
|
|
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(
|
|
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(
|
|
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(
|
|
37341
|
-
rowNorm = addScalar2(rowNorm, abs2(
|
|
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
|
-
|
|
37368
|
-
|
|
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(
|
|
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 =
|
|
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 =
|
|
37401
|
-
|
|
37402
|
-
|
|
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 =
|
|
37405
|
-
|
|
37406
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
37521
|
+
const k = arr8[n - 1][n - 1];
|
|
37450
37522
|
for (let i = 0; i < n; i++) {
|
|
37451
|
-
|
|
37523
|
+
arr8[i][i] = subtract2(arr8[i][i], k);
|
|
37452
37524
|
}
|
|
37453
|
-
const { Q: Q2, R } = qr2(
|
|
37454
|
-
|
|
37525
|
+
const { Q: Q2, R } = qr2(arr8);
|
|
37526
|
+
arr8 = multiply2(R, Q2);
|
|
37455
37527
|
for (let i = 0; i < n; i++) {
|
|
37456
|
-
|
|
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(
|
|
37533
|
+
if (n === 1 || smaller2(abs2(arr8[n - 1][n - 2]), prec)) {
|
|
37462
37534
|
lastConvergenceBefore = 0;
|
|
37463
|
-
lambdas.push(
|
|
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
|
-
|
|
37545
|
+
arr8.pop();
|
|
37474
37546
|
for (let i = 0; i < n; i++) {
|
|
37475
|
-
|
|
37547
|
+
arr8[i].pop();
|
|
37476
37548
|
}
|
|
37477
|
-
} else if (n === 2 || smaller2(abs2(
|
|
37549
|
+
} else if (n === 2 || smaller2(abs2(arr8[n - 2][n - 3]), prec)) {
|
|
37478
37550
|
lastConvergenceBefore = 0;
|
|
37479
37551
|
const ll = eigenvalues2x2(
|
|
37480
|
-
|
|
37481
|
-
|
|
37482
|
-
|
|
37483
|
-
|
|
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
|
-
|
|
37490
|
-
|
|
37491
|
-
|
|
37492
|
-
|
|
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
|
-
|
|
37507
|
-
|
|
37578
|
+
arr8.pop();
|
|
37579
|
+
arr8.pop();
|
|
37508
37580
|
for (let i = 0; i < n; i++) {
|
|
37509
|
-
|
|
37510
|
-
|
|
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(
|
|
37616
|
-
for (let i = 0; i <
|
|
37617
|
-
|
|
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 =
|
|
37620
|
-
|
|
37621
|
-
|
|
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
|
|
37695
|
+
return arr8;
|
|
37624
37696
|
}
|
|
37625
|
-
function blockDiag(
|
|
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
|
|
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(
|
|
37643
|
-
for (let i = 0; i <
|
|
37644
|
-
if (fn(
|
|
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(
|
|
37829
|
+
function main(arr8, _N, prec = config2.relTol, type, computeVectors) {
|
|
37758
37830
|
if (type === "number") {
|
|
37759
|
-
return diag2(
|
|
37831
|
+
return diag2(arr8, prec, computeVectors);
|
|
37760
37832
|
}
|
|
37761
37833
|
if (type === "BigNumber") {
|
|
37762
|
-
return diagBig(
|
|
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
|
|
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(
|
|
38231
|
-
coerceReal(
|
|
38232
|
-
if (isSymmetric(
|
|
38233
|
-
const type2 = coerceTypes(mat,
|
|
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
|
-
|
|
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,
|
|
38244
|
-
return doComplexEigs(
|
|
38315
|
+
const type = coerceTypes(mat, arr8, N);
|
|
38316
|
+
return doComplexEigs(arr8, N, prec, type, computeVectors);
|
|
38245
38317
|
}
|
|
38246
|
-
function isSymmetric(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
38338
|
+
function coerceReal(arr8, N) {
|
|
38267
38339
|
for (let i = 0; i < N; i++) {
|
|
38268
38340
|
for (let j = 0; j < N; j++) {
|
|
38269
|
-
|
|
38341
|
+
arr8[i][j] = re3(arr8[i][j]);
|
|
38270
38342
|
}
|
|
38271
38343
|
}
|
|
38272
38344
|
}
|
|
38273
|
-
function coerceTypes(mat,
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
38536
|
-
for (let i = 0; i <
|
|
38537
|
-
if (typeof
|
|
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(
|
|
38613
|
-
for (let i = 0; i <
|
|
38614
|
-
if (typeof
|
|
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
|
|
40212
|
-
const n =
|
|
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
|
|
40216
|
-
data[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 {
|
|
@@ -44328,6 +44400,262 @@ function help(search) {
|
|
|
44328
44400
|
return new Help(doc);
|
|
44329
44401
|
}
|
|
44330
44402
|
|
|
44403
|
+
// src/numbertheory/extra.ts
|
|
44404
|
+
function continuedFraction(x, maxTerms = 20) {
|
|
44405
|
+
if (!Number.isFinite(x)) {
|
|
44406
|
+
throw new Error("continuedFraction requires a finite number");
|
|
44407
|
+
}
|
|
44408
|
+
const terms = [];
|
|
44409
|
+
let r = x;
|
|
44410
|
+
for (let i = 0; i < maxTerms; i++) {
|
|
44411
|
+
const a = Math.floor(r);
|
|
44412
|
+
terms.push(a);
|
|
44413
|
+
const frac = r - a;
|
|
44414
|
+
if (frac < 1e-12) break;
|
|
44415
|
+
r = 1 / frac;
|
|
44416
|
+
}
|
|
44417
|
+
return terms;
|
|
44418
|
+
}
|
|
44419
|
+
function binomialExact(n, k) {
|
|
44420
|
+
if (k < 0 || k > n) return 0;
|
|
44421
|
+
const kk = Math.min(k, n - k);
|
|
44422
|
+
let result = 1;
|
|
44423
|
+
for (let i = 0; i < kk; i++) {
|
|
44424
|
+
result = result * (n - i) / (i + 1);
|
|
44425
|
+
}
|
|
44426
|
+
return Math.round(result);
|
|
44427
|
+
}
|
|
44428
|
+
function eulerNumbers(n) {
|
|
44429
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
44430
|
+
throw new Error("eulerNumbers requires a non-negative integer");
|
|
44431
|
+
}
|
|
44432
|
+
const E = new Array(n + 1).fill(0);
|
|
44433
|
+
E[0] = 1;
|
|
44434
|
+
for (let m = 1; m <= n; m++) {
|
|
44435
|
+
if (m % 2 === 1) {
|
|
44436
|
+
E[m] = 0;
|
|
44437
|
+
continue;
|
|
44438
|
+
}
|
|
44439
|
+
let sum3 = 0;
|
|
44440
|
+
for (let k = 0; k < m / 2; k++) {
|
|
44441
|
+
sum3 += binomialExact(m, 2 * k) * E[2 * k];
|
|
44442
|
+
}
|
|
44443
|
+
E[m] = -sum3;
|
|
44444
|
+
}
|
|
44445
|
+
return E;
|
|
44446
|
+
}
|
|
44447
|
+
function stirlingS1(n, k) {
|
|
44448
|
+
if (!Number.isInteger(n) || !Number.isInteger(k) || n < 0 || k < 0) {
|
|
44449
|
+
throw new Error("stirlingS1 requires non-negative integers");
|
|
44450
|
+
}
|
|
44451
|
+
if (k > n) return 0;
|
|
44452
|
+
const s = Array.from({ length: n + 1 }, () => new Array(n + 1).fill(0));
|
|
44453
|
+
s[0][0] = 1;
|
|
44454
|
+
for (let i = 1; i <= n; i++) {
|
|
44455
|
+
for (let j = 0; j <= i; j++) {
|
|
44456
|
+
const prevDiag = j > 0 ? s[i - 1][j - 1] : 0;
|
|
44457
|
+
const prevSame = s[i - 1][j];
|
|
44458
|
+
s[i][j] = prevDiag - (i - 1) * prevSame;
|
|
44459
|
+
}
|
|
44460
|
+
}
|
|
44461
|
+
return s[n][k];
|
|
44462
|
+
}
|
|
44463
|
+
function modPowBig(base, exp2, mod2) {
|
|
44464
|
+
let b = (base % mod2 + mod2) % mod2;
|
|
44465
|
+
let e = exp2;
|
|
44466
|
+
let result = 1n;
|
|
44467
|
+
while (e > 0n) {
|
|
44468
|
+
if (e & 1n) result = result * b % mod2;
|
|
44469
|
+
b = b * b % mod2;
|
|
44470
|
+
e >>= 1n;
|
|
44471
|
+
}
|
|
44472
|
+
return result;
|
|
44473
|
+
}
|
|
44474
|
+
function modInverseBig(a, mod2) {
|
|
44475
|
+
let oldR = a;
|
|
44476
|
+
let r = mod2;
|
|
44477
|
+
let oldS = 1n;
|
|
44478
|
+
let s = 0n;
|
|
44479
|
+
while (r !== 0n) {
|
|
44480
|
+
const q = oldR / r;
|
|
44481
|
+
[oldR, r] = [r, oldR - q * r];
|
|
44482
|
+
[oldS, s] = [s, oldS - q * s];
|
|
44483
|
+
}
|
|
44484
|
+
return (oldS % mod2 + mod2) % mod2;
|
|
44485
|
+
}
|
|
44486
|
+
function discreteLog(g, h, p) {
|
|
44487
|
+
if (!Number.isInteger(g) || !Number.isInteger(h) || !Number.isInteger(p) || p < 2) {
|
|
44488
|
+
throw new Error("discreteLog requires integer g, h and a modulus p >= 2");
|
|
44489
|
+
}
|
|
44490
|
+
const P2 = BigInt(p);
|
|
44491
|
+
const G = (BigInt(g) % P2 + P2) % P2;
|
|
44492
|
+
const H = (BigInt(h) % P2 + P2) % P2;
|
|
44493
|
+
const m = BigInt(Math.max(1, Math.ceil(Math.sqrt(p - 1))));
|
|
44494
|
+
const table = /* @__PURE__ */ new Map();
|
|
44495
|
+
let cur = 1n;
|
|
44496
|
+
for (let j = 0n; j < m; j++) {
|
|
44497
|
+
const key = cur.toString();
|
|
44498
|
+
if (!table.has(key)) table.set(key, j);
|
|
44499
|
+
cur = cur * G % P2;
|
|
44500
|
+
}
|
|
44501
|
+
const gm = modPowBig(G, m, P2);
|
|
44502
|
+
const gInvM = modInverseBig(gm, P2);
|
|
44503
|
+
let gamma2 = H;
|
|
44504
|
+
for (let i = 0n; i < m; i++) {
|
|
44505
|
+
const key = gamma2.toString();
|
|
44506
|
+
const j = table.get(key);
|
|
44507
|
+
if (j !== void 0) {
|
|
44508
|
+
return Number(i * m + j);
|
|
44509
|
+
}
|
|
44510
|
+
gamma2 = gamma2 * gInvM % P2;
|
|
44511
|
+
}
|
|
44512
|
+
return -1;
|
|
44513
|
+
}
|
|
44514
|
+
function distinctPrimeFactors(nIn) {
|
|
44515
|
+
let n = nIn;
|
|
44516
|
+
const primes = [];
|
|
44517
|
+
for (let d = 2; d * d <= n; d++) {
|
|
44518
|
+
if (n % d === 0) {
|
|
44519
|
+
primes.push(d);
|
|
44520
|
+
while (n % d === 0) n /= d;
|
|
44521
|
+
}
|
|
44522
|
+
}
|
|
44523
|
+
if (n > 1) primes.push(n);
|
|
44524
|
+
return primes;
|
|
44525
|
+
}
|
|
44526
|
+
function primitiveRoot(p) {
|
|
44527
|
+
if (!Number.isInteger(p) || p < 2) {
|
|
44528
|
+
throw new Error("primitiveRoot requires an integer p >= 2");
|
|
44529
|
+
}
|
|
44530
|
+
if (p === 2) return 1;
|
|
44531
|
+
const phi = p - 1;
|
|
44532
|
+
const phiFactors = distinctPrimeFactors(phi);
|
|
44533
|
+
const P2 = BigInt(p);
|
|
44534
|
+
for (let g = 2; g < p; g++) {
|
|
44535
|
+
let isRoot = true;
|
|
44536
|
+
for (const q of phiFactors) {
|
|
44537
|
+
if (modPowBig(BigInt(g), BigInt(phi / q), P2) === 1n) {
|
|
44538
|
+
isRoot = false;
|
|
44539
|
+
break;
|
|
44540
|
+
}
|
|
44541
|
+
}
|
|
44542
|
+
if (isRoot) return g;
|
|
44543
|
+
}
|
|
44544
|
+
throw new Error("primitiveRoot: no primitive root found (p may not be prime)");
|
|
44545
|
+
}
|
|
44546
|
+
function gcdInt(aIn, bIn) {
|
|
44547
|
+
let a = Math.abs(aIn);
|
|
44548
|
+
let b = Math.abs(bIn);
|
|
44549
|
+
while (b !== 0) {
|
|
44550
|
+
[a, b] = [b, a % b];
|
|
44551
|
+
}
|
|
44552
|
+
return a;
|
|
44553
|
+
}
|
|
44554
|
+
function multiplicativeOrder(a, n) {
|
|
44555
|
+
if (!Number.isInteger(a) || !Number.isInteger(n) || n < 1) {
|
|
44556
|
+
throw new Error("multiplicativeOrder requires integers with modulus n >= 1");
|
|
44557
|
+
}
|
|
44558
|
+
const amod = (a % n + n) % n;
|
|
44559
|
+
if (gcdInt(amod, n) !== 1) return -1;
|
|
44560
|
+
if (n === 1) return 1;
|
|
44561
|
+
let cur = amod;
|
|
44562
|
+
let k = 1;
|
|
44563
|
+
while (cur !== 1) {
|
|
44564
|
+
cur = cur * amod % n;
|
|
44565
|
+
k++;
|
|
44566
|
+
}
|
|
44567
|
+
return k;
|
|
44568
|
+
}
|
|
44569
|
+
function kroneckerTwo(a) {
|
|
44570
|
+
if (a % 2 === 0) return 0;
|
|
44571
|
+
const r = (a % 8 + 8) % 8;
|
|
44572
|
+
return r === 1 || r === 7 ? 1 : -1;
|
|
44573
|
+
}
|
|
44574
|
+
function kroneckerSymbol(a, n) {
|
|
44575
|
+
if (!Number.isInteger(a) || !Number.isInteger(n)) {
|
|
44576
|
+
throw new Error("kroneckerSymbol requires integers");
|
|
44577
|
+
}
|
|
44578
|
+
if (n === 0) {
|
|
44579
|
+
return Math.abs(a) === 1 ? 1 : 0;
|
|
44580
|
+
}
|
|
44581
|
+
let sign3 = 1;
|
|
44582
|
+
let nn = n;
|
|
44583
|
+
if (nn < 0) {
|
|
44584
|
+
nn = -nn;
|
|
44585
|
+
if (a < 0) sign3 = -1;
|
|
44586
|
+
}
|
|
44587
|
+
let v = 0;
|
|
44588
|
+
while (nn % 2 === 0) {
|
|
44589
|
+
nn /= 2;
|
|
44590
|
+
v++;
|
|
44591
|
+
}
|
|
44592
|
+
if (v > 0) {
|
|
44593
|
+
const k2 = kroneckerTwo(a);
|
|
44594
|
+
if (k2 === 0) return 0;
|
|
44595
|
+
sign3 *= Math.pow(k2, v);
|
|
44596
|
+
}
|
|
44597
|
+
if (nn === 1) return sign3;
|
|
44598
|
+
let aa = (a % nn + nn) % nn;
|
|
44599
|
+
let N = nn;
|
|
44600
|
+
let jac = 1;
|
|
44601
|
+
while (aa !== 0) {
|
|
44602
|
+
while (aa % 2 === 0) {
|
|
44603
|
+
aa /= 2;
|
|
44604
|
+
if (N % 8 === 3 || N % 8 === 5) jac = -jac;
|
|
44605
|
+
}
|
|
44606
|
+
[aa, N] = [N, aa];
|
|
44607
|
+
if (aa % 4 === 3 && N % 4 === 3) jac = -jac;
|
|
44608
|
+
aa = aa % N;
|
|
44609
|
+
}
|
|
44610
|
+
return sign3 * (N === 1 ? jac : 0);
|
|
44611
|
+
}
|
|
44612
|
+
function combinationsGen(arr8, k) {
|
|
44613
|
+
const n = arr8.length;
|
|
44614
|
+
if (!Number.isInteger(k) || k < 0 || k > n) {
|
|
44615
|
+
throw new Error("combinationsGen: k must be an integer in [0, arr.length]");
|
|
44616
|
+
}
|
|
44617
|
+
const result = [];
|
|
44618
|
+
const combo = [];
|
|
44619
|
+
function backtrack(start) {
|
|
44620
|
+
if (combo.length === k) {
|
|
44621
|
+
result.push(combo.slice());
|
|
44622
|
+
return;
|
|
44623
|
+
}
|
|
44624
|
+
for (let i = start; i < n; i++) {
|
|
44625
|
+
combo.push(arr8[i]);
|
|
44626
|
+
backtrack(i + 1);
|
|
44627
|
+
combo.pop();
|
|
44628
|
+
}
|
|
44629
|
+
}
|
|
44630
|
+
backtrack(0);
|
|
44631
|
+
return result;
|
|
44632
|
+
}
|
|
44633
|
+
function permutationsGen(arr8, k = arr8.length) {
|
|
44634
|
+
const n = arr8.length;
|
|
44635
|
+
if (!Number.isInteger(k) || k < 0 || k > n) {
|
|
44636
|
+
throw new Error("permutationsGen: k must be an integer in [0, arr.length]");
|
|
44637
|
+
}
|
|
44638
|
+
const result = [];
|
|
44639
|
+
const used = new Array(n).fill(false);
|
|
44640
|
+
const perm = [];
|
|
44641
|
+
function backtrack() {
|
|
44642
|
+
if (perm.length === k) {
|
|
44643
|
+
result.push(perm.slice());
|
|
44644
|
+
return;
|
|
44645
|
+
}
|
|
44646
|
+
for (let i = 0; i < n; i++) {
|
|
44647
|
+
if (used[i]) continue;
|
|
44648
|
+
used[i] = true;
|
|
44649
|
+
perm.push(arr8[i]);
|
|
44650
|
+
backtrack();
|
|
44651
|
+
perm.pop();
|
|
44652
|
+
used[i] = false;
|
|
44653
|
+
}
|
|
44654
|
+
}
|
|
44655
|
+
backtrack();
|
|
44656
|
+
return result;
|
|
44657
|
+
}
|
|
44658
|
+
|
|
44331
44659
|
// src/grad-forward.ts
|
|
44332
44660
|
import { Dual as Dual3 } from "@danielsimonjr/mathts-core";
|
|
44333
44661
|
function derivativeAt(fn, x0) {
|
|
@@ -44515,9 +44843,9 @@ function kendallTau(x, y) {
|
|
|
44515
44843
|
}
|
|
44516
44844
|
}
|
|
44517
44845
|
const n0 = n * (n - 1) / 2;
|
|
44518
|
-
const tiePairs = (
|
|
44846
|
+
const tiePairs = (arr8) => {
|
|
44519
44847
|
const counts = /* @__PURE__ */ new Map();
|
|
44520
|
-
for (const v of
|
|
44848
|
+
for (const v of arr8) counts.set(v, (counts.get(v) ?? 0) + 1);
|
|
44521
44849
|
let s = 0;
|
|
44522
44850
|
for (const c of counts.values()) s += c * (c - 1) / 2;
|
|
44523
44851
|
return s;
|
|
@@ -44604,6 +44932,10 @@ function kendalltau(x, y) {
|
|
|
44604
44932
|
const z = 3 * tau2 * Math.sqrt(n * (n - 1)) / Math.sqrt(2 * (2 * n + 5));
|
|
44605
44933
|
return { coefficient: tau2, pValue: 2 * (1 - normalCDF(Math.abs(z))) };
|
|
44606
44934
|
}
|
|
44935
|
+
function kendallTauTest(x, y) {
|
|
44936
|
+
const { coefficient, pValue } = kendalltau(x, y);
|
|
44937
|
+
return { tau: coefficient, pValue };
|
|
44938
|
+
}
|
|
44607
44939
|
function ptp(x) {
|
|
44608
44940
|
const a = Array.from(x);
|
|
44609
44941
|
if (a.length === 0) return NaN;
|
|
@@ -45422,39 +45754,6 @@ function acf(x, nlags) {
|
|
|
45422
45754
|
return out;
|
|
45423
45755
|
}
|
|
45424
45756
|
|
|
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
45757
|
// src/ml/ols.ts
|
|
45459
45758
|
function transpose3(m) {
|
|
45460
45759
|
const rows = m.length;
|
|
@@ -45542,6 +45841,155 @@ function ols(X, y, opts) {
|
|
|
45542
45841
|
return { coefficients, stderr, tValues, pValues, r2, adjR2, fStat, residuals };
|
|
45543
45842
|
}
|
|
45544
45843
|
|
|
45844
|
+
// src/stats/timeseries.ts
|
|
45845
|
+
var arr5 = (x) => Array.isArray(x) ? x : Array.from(x);
|
|
45846
|
+
function pacf(x, nlags) {
|
|
45847
|
+
const r = acf(x, nlags);
|
|
45848
|
+
const out = new Array(nlags + 1);
|
|
45849
|
+
out[0] = 1;
|
|
45850
|
+
if (nlags === 0) return out;
|
|
45851
|
+
let phiPrev = [];
|
|
45852
|
+
for (let k = 1; k <= nlags; k++) {
|
|
45853
|
+
if (k === 1) {
|
|
45854
|
+
const phi11 = r[1];
|
|
45855
|
+
out[1] = phi11;
|
|
45856
|
+
phiPrev = [phi11];
|
|
45857
|
+
continue;
|
|
45858
|
+
}
|
|
45859
|
+
let num2 = r[k];
|
|
45860
|
+
let den = 1;
|
|
45861
|
+
for (let j = 1; j <= k - 1; j++) {
|
|
45862
|
+
num2 -= phiPrev[j - 1] * r[k - j];
|
|
45863
|
+
den -= phiPrev[j - 1] * r[j];
|
|
45864
|
+
}
|
|
45865
|
+
const phikk = den === 0 ? 0 : num2 / den;
|
|
45866
|
+
const phiCurr = new Array(k);
|
|
45867
|
+
for (let j = 1; j <= k - 1; j++) {
|
|
45868
|
+
phiCurr[j - 1] = phiPrev[j - 1] - phikk * phiPrev[k - 1 - j];
|
|
45869
|
+
}
|
|
45870
|
+
phiCurr[k - 1] = phikk;
|
|
45871
|
+
out[k] = phikk;
|
|
45872
|
+
phiPrev = phiCurr;
|
|
45873
|
+
}
|
|
45874
|
+
return out;
|
|
45875
|
+
}
|
|
45876
|
+
function ljungBox(x, lags) {
|
|
45877
|
+
const n = x.length;
|
|
45878
|
+
if (lags < 1 || lags >= n)
|
|
45879
|
+
throw new Error(`ljungBox: lags ${lags} out of range for series length ${n}`);
|
|
45880
|
+
const r = acf(x, lags);
|
|
45881
|
+
let sum3 = 0;
|
|
45882
|
+
for (let k = 1; k <= lags; k++) sum3 += r[k] * r[k] / (n - k);
|
|
45883
|
+
const statistic = n * (n + 2) * sum3;
|
|
45884
|
+
const pValue = 1 - chiSquaredCDF(statistic, lags);
|
|
45885
|
+
return { statistic, pValue };
|
|
45886
|
+
}
|
|
45887
|
+
function durbinWatson(residuals) {
|
|
45888
|
+
const e = arr5(residuals);
|
|
45889
|
+
const n = e.length;
|
|
45890
|
+
if (n < 2) throw new Error("durbinWatson: need at least 2 residuals");
|
|
45891
|
+
let num2 = 0;
|
|
45892
|
+
for (let t = 1; t < n; t++) num2 += (e[t] - e[t - 1]) * (e[t] - e[t - 1]);
|
|
45893
|
+
let den = 0;
|
|
45894
|
+
for (let t = 0; t < n; t++) den += e[t] * e[t];
|
|
45895
|
+
if (den === 0) throw new Error("durbinWatson: residuals have zero variance");
|
|
45896
|
+
return num2 / den;
|
|
45897
|
+
}
|
|
45898
|
+
var MACKINNON_C = {
|
|
45899
|
+
1: { betaInf: -3.4336, beta1: -5.999, beta2: -29.25 },
|
|
45900
|
+
5: { betaInf: -2.8621, beta1: -2.738, beta2: -8.36 },
|
|
45901
|
+
10: { betaInf: -2.5671, beta1: -1.438, beta2: -4.48 }
|
|
45902
|
+
};
|
|
45903
|
+
function adfCriticalValue(pct, n) {
|
|
45904
|
+
const { betaInf, beta1, beta2 } = MACKINNON_C[pct];
|
|
45905
|
+
return betaInf + beta1 / n + beta2 / (n * n);
|
|
45906
|
+
}
|
|
45907
|
+
function adfPValue(statistic, n) {
|
|
45908
|
+
const cv1 = adfCriticalValue(1, n);
|
|
45909
|
+
const cv5 = adfCriticalValue(5, n);
|
|
45910
|
+
const cv10 = adfCriticalValue(10, n);
|
|
45911
|
+
const clamp2 = (p) => Math.min(1, Math.max(0, p));
|
|
45912
|
+
if (statistic <= cv1) {
|
|
45913
|
+
const slope2 = (0.05 - 0.01) / (cv5 - cv1);
|
|
45914
|
+
return clamp2(0.01 + slope2 * (statistic - cv1));
|
|
45915
|
+
}
|
|
45916
|
+
if (statistic <= cv5) {
|
|
45917
|
+
const slope2 = (0.05 - 0.01) / (cv5 - cv1);
|
|
45918
|
+
return clamp2(0.01 + slope2 * (statistic - cv1));
|
|
45919
|
+
}
|
|
45920
|
+
if (statistic <= cv10) {
|
|
45921
|
+
const slope2 = (0.1 - 0.05) / (cv10 - cv5);
|
|
45922
|
+
return clamp2(0.05 + slope2 * (statistic - cv5));
|
|
45923
|
+
}
|
|
45924
|
+
const slope = (0.1 - 0.05) / (cv10 - cv5);
|
|
45925
|
+
return clamp2(0.1 + slope * (statistic - cv10));
|
|
45926
|
+
}
|
|
45927
|
+
function adfuller(x, maxlag) {
|
|
45928
|
+
const a = arr5(x);
|
|
45929
|
+
const n = a.length;
|
|
45930
|
+
if (n < 4) throw new Error(`adfuller: series too short (length ${n})`);
|
|
45931
|
+
const d = new Array(n - 1);
|
|
45932
|
+
for (let i = 0; i < n - 1; i++) d[i] = a[i + 1] - a[i];
|
|
45933
|
+
let lag = maxlag ?? Math.floor(12 * Math.pow(n / 100, 0.25));
|
|
45934
|
+
lag = Math.max(0, Math.min(lag, n - 4));
|
|
45935
|
+
for (; lag >= 0; lag--) {
|
|
45936
|
+
const rows = n - lag - 1;
|
|
45937
|
+
const params = lag + 2;
|
|
45938
|
+
if (rows <= params) continue;
|
|
45939
|
+
const X = [];
|
|
45940
|
+
const y = [];
|
|
45941
|
+
for (let i = lag; i <= n - 2; i++) {
|
|
45942
|
+
const row2 = [a[i]];
|
|
45943
|
+
for (let j = 1; j <= lag; j++) row2.push(d[i - j]);
|
|
45944
|
+
X.push(row2);
|
|
45945
|
+
y.push(d[i]);
|
|
45946
|
+
}
|
|
45947
|
+
try {
|
|
45948
|
+
const result = ols(X, y);
|
|
45949
|
+
const statistic = result.coefficients[1] / result.stderr[1];
|
|
45950
|
+
if (!Number.isFinite(statistic)) continue;
|
|
45951
|
+
const pValue = adfPValue(statistic, n);
|
|
45952
|
+
return { statistic, pValue, usedLag: lag };
|
|
45953
|
+
} catch {
|
|
45954
|
+
continue;
|
|
45955
|
+
}
|
|
45956
|
+
}
|
|
45957
|
+
throw new Error(`adfuller: could not construct a well-posed regression for series length ${n}`);
|
|
45958
|
+
}
|
|
45959
|
+
|
|
45960
|
+
// src/regression-extra.ts
|
|
45961
|
+
var arr6 = (x) => Array.isArray(x) ? x : Array.from(x);
|
|
45962
|
+
var mean5 = (x) => mean(x);
|
|
45963
|
+
function linearRegression(x, y) {
|
|
45964
|
+
const a = arr6(x);
|
|
45965
|
+
const b = arr6(y);
|
|
45966
|
+
const n = a.length;
|
|
45967
|
+
if (b.length !== n) throw new Error(`linearRegression: length mismatch ${n} vs ${b.length}`);
|
|
45968
|
+
if (n < 3)
|
|
45969
|
+
throw new Error("linearRegression: need at least 3 points for a slope significance test");
|
|
45970
|
+
const mx = mean5(a);
|
|
45971
|
+
const my = mean5(b);
|
|
45972
|
+
let sxx = 0;
|
|
45973
|
+
let syy = 0;
|
|
45974
|
+
let sxy = 0;
|
|
45975
|
+
for (let i = 0; i < n; i++) {
|
|
45976
|
+
const dx = a[i] - mx;
|
|
45977
|
+
const dy = b[i] - my;
|
|
45978
|
+
sxx += dx * dx;
|
|
45979
|
+
syy += dy * dy;
|
|
45980
|
+
sxy += dx * dy;
|
|
45981
|
+
}
|
|
45982
|
+
if (sxx === 0) throw new Error("linearRegression: predictor x has zero variance");
|
|
45983
|
+
const slope = sxy / sxx;
|
|
45984
|
+
const intercept = my - slope * mx;
|
|
45985
|
+
const rValue = sxy / Math.sqrt(sxx * syy);
|
|
45986
|
+
const df = n - 2;
|
|
45987
|
+
const stdErr = Math.sqrt((syy - slope * sxy) / df / sxx);
|
|
45988
|
+
const t = slope / stdErr;
|
|
45989
|
+
const pValue = 2 * (1 - studentTCDF(Math.abs(t), df));
|
|
45990
|
+
return { slope, intercept, rValue, rSquared: rValue * rValue, pValue, stdErr };
|
|
45991
|
+
}
|
|
45992
|
+
|
|
45545
45993
|
// src/ml/regularized-regression.ts
|
|
45546
45994
|
function validate(X, y, name254) {
|
|
45547
45995
|
const n = X.length;
|
|
@@ -46188,6 +46636,100 @@ function multipleTest(pValues, method) {
|
|
|
46188
46636
|
return adjusted;
|
|
46189
46637
|
}
|
|
46190
46638
|
|
|
46639
|
+
// src/stats/fit-distribution.ts
|
|
46640
|
+
var LOG_2PI = Math.log(2 * Math.PI);
|
|
46641
|
+
function meanOf(data) {
|
|
46642
|
+
return mean(data);
|
|
46643
|
+
}
|
|
46644
|
+
function popStd(data) {
|
|
46645
|
+
return std(data, "uncorrected");
|
|
46646
|
+
}
|
|
46647
|
+
function normalLogPdf(x, mu, sigma) {
|
|
46648
|
+
const z = (x - mu) / sigma;
|
|
46649
|
+
return -0.5 * z * z - Math.log(sigma) - 0.5 * LOG_2PI;
|
|
46650
|
+
}
|
|
46651
|
+
function fitNormal(data) {
|
|
46652
|
+
const mu = meanOf(data);
|
|
46653
|
+
const sigma = popStd(data);
|
|
46654
|
+
let logLikelihood = 0;
|
|
46655
|
+
for (const x of data) logLikelihood += normalLogPdf(x, mu, sigma);
|
|
46656
|
+
return { params: { mean: mu, std: sigma }, logLikelihood };
|
|
46657
|
+
}
|
|
46658
|
+
function fitExponential(data) {
|
|
46659
|
+
const lambda = 1 / meanOf(data);
|
|
46660
|
+
let logLikelihood = 0;
|
|
46661
|
+
for (const x of data) logLikelihood += Math.log(lambda) - lambda * x;
|
|
46662
|
+
return { params: { lambda }, logLikelihood };
|
|
46663
|
+
}
|
|
46664
|
+
function fitLognormal(data) {
|
|
46665
|
+
for (const x of data) {
|
|
46666
|
+
if (!(x > 0)) {
|
|
46667
|
+
throw new Error("fitDistribution: lognormal requires all data > 0");
|
|
46668
|
+
}
|
|
46669
|
+
}
|
|
46670
|
+
const logData = data.map((x) => Math.log(x));
|
|
46671
|
+
const mu = meanOf(logData);
|
|
46672
|
+
const sigma = popStd(logData);
|
|
46673
|
+
let logLikelihood = 0;
|
|
46674
|
+
for (const x of data) {
|
|
46675
|
+
logLikelihood += normalLogPdf(Math.log(x), mu, sigma) - Math.log(x);
|
|
46676
|
+
}
|
|
46677
|
+
return { params: { mu, sigma }, logLikelihood };
|
|
46678
|
+
}
|
|
46679
|
+
function logFactorial(k) {
|
|
46680
|
+
return lgamma(k + 1);
|
|
46681
|
+
}
|
|
46682
|
+
function fitPoisson(data) {
|
|
46683
|
+
const lambda = meanOf(data);
|
|
46684
|
+
let logLikelihood = 0;
|
|
46685
|
+
for (const k of data) logLikelihood += -lambda + k * Math.log(lambda) - logFactorial(k);
|
|
46686
|
+
return { params: { lambda }, logLikelihood };
|
|
46687
|
+
}
|
|
46688
|
+
function gammaLogPdf(x, shape, scale) {
|
|
46689
|
+
return (shape - 1) * Math.log(x) - x / scale - lgamma(shape) - shape * Math.log(scale);
|
|
46690
|
+
}
|
|
46691
|
+
function fitGamma(data) {
|
|
46692
|
+
for (const x of data) {
|
|
46693
|
+
if (!(x > 0)) {
|
|
46694
|
+
throw new Error("fitDistribution: gamma requires all data > 0");
|
|
46695
|
+
}
|
|
46696
|
+
}
|
|
46697
|
+
const xbar = meanOf(data);
|
|
46698
|
+
const meanLog = meanOf(data.map((x) => Math.log(x)));
|
|
46699
|
+
const s = Math.log(xbar) - meanLog;
|
|
46700
|
+
if (!(s > 0)) {
|
|
46701
|
+
throw new Error("fitDistribution: gamma requires data with positive spread (s <= 0)");
|
|
46702
|
+
}
|
|
46703
|
+
const k0 = (3 - s + Math.sqrt((s - 3) * (s - 3) + 24 * s)) / (12 * s);
|
|
46704
|
+
const f = (k) => Math.log(k) - digamma(k) - s;
|
|
46705
|
+
const shape = secant(f, k0, k0 * 1.1, { tol: 1e-12, maxIter: 200 });
|
|
46706
|
+
const scale = xbar / shape;
|
|
46707
|
+
let logLikelihood = 0;
|
|
46708
|
+
for (const x of data) logLikelihood += gammaLogPdf(x, shape, scale);
|
|
46709
|
+
return { params: { shape, scale }, logLikelihood };
|
|
46710
|
+
}
|
|
46711
|
+
function fitDistribution(name254, data) {
|
|
46712
|
+
if (data.length === 0) {
|
|
46713
|
+
throw new Error("fitDistribution: data must be non-empty");
|
|
46714
|
+
}
|
|
46715
|
+
switch (name254) {
|
|
46716
|
+
case "normal":
|
|
46717
|
+
return fitNormal(data);
|
|
46718
|
+
case "exponential":
|
|
46719
|
+
return fitExponential(data);
|
|
46720
|
+
case "lognormal":
|
|
46721
|
+
return fitLognormal(data);
|
|
46722
|
+
case "poisson":
|
|
46723
|
+
return fitPoisson(data);
|
|
46724
|
+
case "gamma":
|
|
46725
|
+
return fitGamma(data);
|
|
46726
|
+
default: {
|
|
46727
|
+
const _exhaustive = name254;
|
|
46728
|
+
throw new Error(`fitDistribution: unknown distribution '${_exhaustive}'`);
|
|
46729
|
+
}
|
|
46730
|
+
}
|
|
46731
|
+
}
|
|
46732
|
+
|
|
46191
46733
|
// src/numeric/bfgs.ts
|
|
46192
46734
|
var CBRT_EPS = Math.cbrt(2220446049250313e-31);
|
|
46193
46735
|
function numericGradient(f, x) {
|
|
@@ -46563,7 +47105,7 @@ function symbolicIntegral(expr, variable = "x") {
|
|
|
46563
47105
|
// src/signal-filter-extra.ts
|
|
46564
47106
|
import { Complex as Complex11 } from "@danielsimonjr/mathts-core";
|
|
46565
47107
|
var _inv3 = inv;
|
|
46566
|
-
var
|
|
47108
|
+
var arr7 = (x) => Array.isArray(x) ? x : Array.from(x);
|
|
46567
47109
|
var sinc = (x) => x === 0 ? 1 : Math.sin(Math.PI * x) / (Math.PI * x);
|
|
46568
47110
|
function firwin(numtaps, cutoff) {
|
|
46569
47111
|
if (!Number.isInteger(numtaps) || numtaps < 2)
|
|
@@ -46600,10 +47142,10 @@ function lfilterState(b, a, x, zi) {
|
|
|
46600
47142
|
return { y, zf: z };
|
|
46601
47143
|
}
|
|
46602
47144
|
function lfilter(b, a, x) {
|
|
46603
|
-
return lfilterState(
|
|
47145
|
+
return lfilterState(arr7(b), arr7(a), arr7(x)).y;
|
|
46604
47146
|
}
|
|
46605
47147
|
function lfilterZi(b, a) {
|
|
46606
|
-
const { b: bb, a: aa, n } = padCoeffs(
|
|
47148
|
+
const { b: bb, a: aa, n } = padCoeffs(arr7(b), arr7(a));
|
|
46607
47149
|
if (n < 2) return [];
|
|
46608
47150
|
const C = companion(aa);
|
|
46609
47151
|
const M = Array.from(
|
|
@@ -46623,9 +47165,9 @@ function lfilterZi(b, a) {
|
|
|
46623
47165
|
return zi;
|
|
46624
47166
|
}
|
|
46625
47167
|
function filtfilt(b, a, x) {
|
|
46626
|
-
const bb =
|
|
46627
|
-
const aa =
|
|
46628
|
-
const xx =
|
|
47168
|
+
const bb = arr7(b);
|
|
47169
|
+
const aa = arr7(a);
|
|
47170
|
+
const xx = arr7(x);
|
|
46629
47171
|
const n = xx.length;
|
|
46630
47172
|
const ntaps = Math.max(aa.length, bb.length);
|
|
46631
47173
|
const pad = 3 * ntaps;
|
|
@@ -46748,6 +47290,326 @@ function quaternionToRotationMatrix(q) {
|
|
|
46748
47290
|
[2 * (x * z - y * w), 2 * (y * z + x * w), 1 - 2 * (x * x + y * y)]
|
|
46749
47291
|
];
|
|
46750
47292
|
}
|
|
47293
|
+
|
|
47294
|
+
// src/stats/inference-extra2.ts
|
|
47295
|
+
var TWO_PI = 2 * Math.PI;
|
|
47296
|
+
function noncentralChi2CDF(x, df, nc) {
|
|
47297
|
+
if (df <= 0) throw new Error("noncentralChi2CDF: df must be positive");
|
|
47298
|
+
if (nc < 0) throw new Error("noncentralChi2CDF: nc must be non-negative");
|
|
47299
|
+
if (x <= 0) return 0;
|
|
47300
|
+
const halfNc = nc / 2;
|
|
47301
|
+
let sum3 = 0;
|
|
47302
|
+
let poissonCum = 0;
|
|
47303
|
+
let logWeight = -halfNc;
|
|
47304
|
+
for (let j = 0; j < 2e3; j++) {
|
|
47305
|
+
const weight = Math.exp(logWeight);
|
|
47306
|
+
sum3 += weight * chiSquaredCDF(x, df + 2 * j);
|
|
47307
|
+
poissonCum += weight;
|
|
47308
|
+
if (j > halfNc && 1 - poissonCum < 1e-12) break;
|
|
47309
|
+
logWeight += Math.log(halfNc) - Math.log(j + 1);
|
|
47310
|
+
}
|
|
47311
|
+
return sum3;
|
|
47312
|
+
}
|
|
47313
|
+
function noncentralFCDF(x, dfn, dfd, nc) {
|
|
47314
|
+
if (dfn <= 0 || dfd <= 0) throw new Error("noncentralFCDF: dfn and dfd must be positive");
|
|
47315
|
+
if (nc < 0) throw new Error("noncentralFCDF: nc must be non-negative");
|
|
47316
|
+
if (x <= 0) return 0;
|
|
47317
|
+
const halfNc = nc / 2;
|
|
47318
|
+
let sum3 = 0;
|
|
47319
|
+
let poissonCum = 0;
|
|
47320
|
+
let logWeight = -halfNc;
|
|
47321
|
+
for (let j = 0; j < 2e3; j++) {
|
|
47322
|
+
const weight = Math.exp(logWeight);
|
|
47323
|
+
const dfnj = dfn + 2 * j;
|
|
47324
|
+
sum3 += weight * fCDF(x * dfn / dfnj, dfnj, dfd);
|
|
47325
|
+
poissonCum += weight;
|
|
47326
|
+
if (j > halfNc && 1 - poissonCum < 1e-12) break;
|
|
47327
|
+
logWeight += Math.log(halfNc) - Math.log(j + 1);
|
|
47328
|
+
}
|
|
47329
|
+
return sum3;
|
|
47330
|
+
}
|
|
47331
|
+
function noncentralTCDF(t, df, nc) {
|
|
47332
|
+
if (df <= 0) throw new Error("noncentralTCDF: df must be positive");
|
|
47333
|
+
const chi2 = chiSquaredDist(df);
|
|
47334
|
+
const std2 = normalDist();
|
|
47335
|
+
const upper = df + 40 * Math.sqrt(2 * Math.max(df, 1)) + 100;
|
|
47336
|
+
const panels = 2e4;
|
|
47337
|
+
const a = 1e-10;
|
|
47338
|
+
const h = (upper - a) / panels;
|
|
47339
|
+
const integrand = (v) => {
|
|
47340
|
+
if (v <= 0) return 0;
|
|
47341
|
+
const z = t * Math.sqrt(v / df) - nc;
|
|
47342
|
+
return std2.cdf(z) * chi2.pdf(v);
|
|
47343
|
+
};
|
|
47344
|
+
let sum3 = integrand(a) + integrand(upper);
|
|
47345
|
+
for (let i = 1; i < panels; i++) {
|
|
47346
|
+
const v = a + i * h;
|
|
47347
|
+
sum3 += (i % 2 === 0 ? 2 : 4) * integrand(v);
|
|
47348
|
+
}
|
|
47349
|
+
return h / 3 * sum3;
|
|
47350
|
+
}
|
|
47351
|
+
function circularSums(angles, opts) {
|
|
47352
|
+
const { high = TWO_PI, low = 0 } = opts;
|
|
47353
|
+
const scale = TWO_PI / (high - low);
|
|
47354
|
+
let sinSum = 0;
|
|
47355
|
+
let cosSum = 0;
|
|
47356
|
+
for (const a of angles) {
|
|
47357
|
+
const theta = (a - low) * scale;
|
|
47358
|
+
sinSum += Math.sin(theta);
|
|
47359
|
+
cosSum += Math.cos(theta);
|
|
47360
|
+
}
|
|
47361
|
+
return { sinSum, cosSum, scale };
|
|
47362
|
+
}
|
|
47363
|
+
function circmean(angles, opts = {}) {
|
|
47364
|
+
const { low = 0 } = opts;
|
|
47365
|
+
const { sinSum, cosSum, scale } = circularSums(angles, opts);
|
|
47366
|
+
let mean7 = Math.atan2(sinSum, cosSum);
|
|
47367
|
+
if (mean7 < 0) mean7 += TWO_PI;
|
|
47368
|
+
return mean7 / scale + low;
|
|
47369
|
+
}
|
|
47370
|
+
function circvar(angles, opts = {}) {
|
|
47371
|
+
const n = angles.length;
|
|
47372
|
+
if (n === 0) throw new Error("circvar: angles must be non-empty");
|
|
47373
|
+
const { sinSum, cosSum } = circularSums(angles, opts);
|
|
47374
|
+
const R = Math.hypot(cosSum, sinSum) / n;
|
|
47375
|
+
return 1 - R;
|
|
47376
|
+
}
|
|
47377
|
+
function circstd(angles, opts = {}) {
|
|
47378
|
+
const n = angles.length;
|
|
47379
|
+
if (n === 0) throw new Error("circstd: angles must be non-empty");
|
|
47380
|
+
const { sinSum, cosSum } = circularSums(angles, opts);
|
|
47381
|
+
const R = Math.hypot(cosSum, sinSum) / n;
|
|
47382
|
+
return Math.sqrt(-2 * Math.log(R));
|
|
47383
|
+
}
|
|
47384
|
+
function vonMisesPDF(theta, mu, kappa) {
|
|
47385
|
+
if (kappa < 0) throw new Error("vonMisesPDF: kappa must be non-negative");
|
|
47386
|
+
return Math.exp(kappa * Math.cos(theta - mu)) / (TWO_PI * besselIScalar(0, kappa));
|
|
47387
|
+
}
|
|
47388
|
+
function mcnemar(table, opts = {}) {
|
|
47389
|
+
if (table.length !== 2 || table[0].length !== 2 || table[1].length !== 2) {
|
|
47390
|
+
throw new Error("mcnemar: table must be 2x2");
|
|
47391
|
+
}
|
|
47392
|
+
const b = table[0][1];
|
|
47393
|
+
const c = table[1][0];
|
|
47394
|
+
const correction = opts.correction !== false;
|
|
47395
|
+
const denom = b + c;
|
|
47396
|
+
const diff2 = Math.max(0, Math.abs(b - c) - (correction ? 1 : 0));
|
|
47397
|
+
const chi2 = denom > 0 ? diff2 * diff2 / denom : 0;
|
|
47398
|
+
const pValue = 1 - chiSquaredCDF(chi2, 1);
|
|
47399
|
+
return { chi2, pValue };
|
|
47400
|
+
}
|
|
47401
|
+
function cochranQ(data) {
|
|
47402
|
+
const n = data.length;
|
|
47403
|
+
if (n === 0) throw new Error("cochranQ: data must have at least one row");
|
|
47404
|
+
const k = data[0].length;
|
|
47405
|
+
if (k < 2) throw new Error("cochranQ: need at least 2 treatments (columns)");
|
|
47406
|
+
const colSums = new Array(k).fill(0);
|
|
47407
|
+
const rowSums = new Array(n).fill(0);
|
|
47408
|
+
let N = 0;
|
|
47409
|
+
for (let i = 0; i < n; i++) {
|
|
47410
|
+
if (data[i].length !== k) throw new Error("cochranQ: data must be rectangular");
|
|
47411
|
+
let rowSum = 0;
|
|
47412
|
+
for (let j = 0; j < k; j++) {
|
|
47413
|
+
colSums[j] += data[i][j];
|
|
47414
|
+
rowSum += data[i][j];
|
|
47415
|
+
}
|
|
47416
|
+
rowSums[i] = rowSum;
|
|
47417
|
+
N += rowSum;
|
|
47418
|
+
}
|
|
47419
|
+
let sumC2 = 0;
|
|
47420
|
+
for (let j = 0; j < k; j++) sumC2 += colSums[j] * colSums[j];
|
|
47421
|
+
let sumR2 = 0;
|
|
47422
|
+
for (let i = 0; i < n; i++) sumR2 += rowSums[i] * rowSums[i];
|
|
47423
|
+
const dof = k - 1;
|
|
47424
|
+
const denominator = k * N - sumR2;
|
|
47425
|
+
const Q2 = denominator !== 0 ? dof * (k * sumC2 - N * N) / denominator : 0;
|
|
47426
|
+
const pValue = 1 - chiSquaredCDF(Q2, dof);
|
|
47427
|
+
return { Q: Q2, pValue, dof };
|
|
47428
|
+
}
|
|
47429
|
+
|
|
47430
|
+
// src/special/hypergeometric.ts
|
|
47431
|
+
var MAX_TERMS = 500;
|
|
47432
|
+
var RELTOL = 1e-16;
|
|
47433
|
+
function pFq(a, b, z) {
|
|
47434
|
+
let sum3 = 1;
|
|
47435
|
+
let term = 1;
|
|
47436
|
+
for (let n = 0; n < MAX_TERMS; n++) {
|
|
47437
|
+
let ratio = z / (n + 1);
|
|
47438
|
+
for (const ai of a) ratio *= ai + n;
|
|
47439
|
+
for (const bj of b) ratio /= bj + n;
|
|
47440
|
+
term *= ratio;
|
|
47441
|
+
sum3 += term;
|
|
47442
|
+
if (Math.abs(term) < RELTOL * Math.abs(sum3)) break;
|
|
47443
|
+
}
|
|
47444
|
+
return sum3;
|
|
47445
|
+
}
|
|
47446
|
+
function hyp0f1(b, z) {
|
|
47447
|
+
return pFq([], [b], z);
|
|
47448
|
+
}
|
|
47449
|
+
function hyp1f1(a, b, z) {
|
|
47450
|
+
return pFq([a], [b], z);
|
|
47451
|
+
}
|
|
47452
|
+
function hyp2f1(a, b, c, z) {
|
|
47453
|
+
if (Math.abs(z) >= 1) {
|
|
47454
|
+
throw new Error("hyp2f1: |z| must be < 1 (analytic continuation not yet implemented)");
|
|
47455
|
+
}
|
|
47456
|
+
return pFq([a, b], [c], z);
|
|
47457
|
+
}
|
|
47458
|
+
|
|
47459
|
+
// src/special/polygamma-orthopoly.ts
|
|
47460
|
+
var SHIFT_THRESHOLD = 12;
|
|
47461
|
+
var BERNOULLI_EVEN = [1 / 6, -1 / 30, 1 / 42, -1 / 30];
|
|
47462
|
+
function factorial4(n) {
|
|
47463
|
+
let result = 1;
|
|
47464
|
+
for (let i = 2; i <= n; i++) result *= i;
|
|
47465
|
+
return result;
|
|
47466
|
+
}
|
|
47467
|
+
function polygamma(n, x) {
|
|
47468
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
47469
|
+
throw new Error("polygamma: n must be a nonnegative integer");
|
|
47470
|
+
}
|
|
47471
|
+
if (n === 0) {
|
|
47472
|
+
return digamma(x);
|
|
47473
|
+
}
|
|
47474
|
+
if (x <= 0 && Number.isInteger(x)) {
|
|
47475
|
+
return NaN;
|
|
47476
|
+
}
|
|
47477
|
+
const sign3 = n % 2 === 1 ? 1 : -1;
|
|
47478
|
+
const nFactorial = factorial4(n);
|
|
47479
|
+
let recurrenceSum = 0;
|
|
47480
|
+
let shifted = x;
|
|
47481
|
+
while (shifted < SHIFT_THRESHOLD) {
|
|
47482
|
+
recurrenceSum += 1 / Math.pow(shifted, n + 1);
|
|
47483
|
+
shifted += 1;
|
|
47484
|
+
}
|
|
47485
|
+
let bracket = factorial4(n - 1) / Math.pow(shifted, n) + nFactorial / (2 * Math.pow(shifted, n + 1));
|
|
47486
|
+
for (let j = 1; j <= BERNOULLI_EVEN.length; j++) {
|
|
47487
|
+
const twoJ = 2 * j;
|
|
47488
|
+
const term = BERNOULLI_EVEN[j - 1] * factorial4(twoJ + n - 1) / factorial4(twoJ) / Math.pow(shifted, twoJ + n);
|
|
47489
|
+
bracket += term;
|
|
47490
|
+
}
|
|
47491
|
+
return sign3 * (nFactorial * recurrenceSum + bracket);
|
|
47492
|
+
}
|
|
47493
|
+
function trigamma(x) {
|
|
47494
|
+
return polygamma(1, x);
|
|
47495
|
+
}
|
|
47496
|
+
function jacobiP(n, alpha, beta2, x) {
|
|
47497
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
47498
|
+
throw new Error("jacobiP: n must be a nonnegative integer");
|
|
47499
|
+
}
|
|
47500
|
+
if (n === 0) return 1;
|
|
47501
|
+
let pPrev = 1;
|
|
47502
|
+
let pCurr = alpha + 1 + (alpha + beta2 + 2) * (x - 1) / 2;
|
|
47503
|
+
if (n === 1) return pCurr;
|
|
47504
|
+
for (let k = 2; k <= n; k++) {
|
|
47505
|
+
const a1 = 2 * k * (k + alpha + beta2) * (2 * k + alpha + beta2 - 2);
|
|
47506
|
+
const a2 = (2 * k + alpha + beta2 - 1) * ((2 * k + alpha + beta2) * (2 * k + alpha + beta2 - 2) * x + alpha * alpha - beta2 * beta2);
|
|
47507
|
+
const a3 = 2 * (k + alpha - 1) * (k + beta2 - 1) * (2 * k + alpha + beta2);
|
|
47508
|
+
const pNext = (a2 * pCurr - a3 * pPrev) / a1;
|
|
47509
|
+
pPrev = pCurr;
|
|
47510
|
+
pCurr = pNext;
|
|
47511
|
+
}
|
|
47512
|
+
return pCurr;
|
|
47513
|
+
}
|
|
47514
|
+
function gegenbauerC(n, alpha, x) {
|
|
47515
|
+
if (!Number.isInteger(n) || n < 0) {
|
|
47516
|
+
throw new Error("gegenbauerC: n must be a nonnegative integer");
|
|
47517
|
+
}
|
|
47518
|
+
if (n === 0) return 1;
|
|
47519
|
+
let cPrev = 1;
|
|
47520
|
+
let cCurr = 2 * alpha * x;
|
|
47521
|
+
if (n === 1) return cCurr;
|
|
47522
|
+
for (let k = 2; k <= n; k++) {
|
|
47523
|
+
const cNext = (2 * x * (k + alpha - 1) * cCurr - (k + 2 * alpha - 2) * cPrev) / k;
|
|
47524
|
+
cPrev = cCurr;
|
|
47525
|
+
cCurr = cNext;
|
|
47526
|
+
}
|
|
47527
|
+
return cCurr;
|
|
47528
|
+
}
|
|
47529
|
+
|
|
47530
|
+
// src/special/jacobi-elliptic.ts
|
|
47531
|
+
var MAX_AGM_ITERATIONS = 12;
|
|
47532
|
+
var AGM_TOLERANCE = 1e-16;
|
|
47533
|
+
function jacobiElliptic(u, m) {
|
|
47534
|
+
if (m < 0 || m > 1) {
|
|
47535
|
+
throw new Error("jacobiElliptic: m (=k^2) must be in [0, 1]");
|
|
47536
|
+
}
|
|
47537
|
+
if (m === 0) {
|
|
47538
|
+
return { sn: Math.sin(u), cn: Math.cos(u), dn: 1 };
|
|
47539
|
+
}
|
|
47540
|
+
if (m === 1) {
|
|
47541
|
+
const sn2 = Math.tanh(u);
|
|
47542
|
+
const sech2 = 1 / Math.cosh(u);
|
|
47543
|
+
return { sn: sn2, cn: sech2, dn: sech2 };
|
|
47544
|
+
}
|
|
47545
|
+
const a = [1];
|
|
47546
|
+
const b = [Math.sqrt(1 - m)];
|
|
47547
|
+
const c = [Math.sqrt(m)];
|
|
47548
|
+
let n = 0;
|
|
47549
|
+
while (n < MAX_AGM_ITERATIONS && Math.abs(c[n]) > AGM_TOLERANCE) {
|
|
47550
|
+
a.push((a[n] + b[n]) / 2);
|
|
47551
|
+
b.push(Math.sqrt(a[n] * b[n]));
|
|
47552
|
+
c.push((a[n] - b[n]) / 2);
|
|
47553
|
+
n++;
|
|
47554
|
+
}
|
|
47555
|
+
let phi = Math.pow(2, n) * a[n] * u;
|
|
47556
|
+
for (let i = n; i >= 1; i--) {
|
|
47557
|
+
phi = (phi + Math.asin(c[i] / a[i] * Math.sin(phi))) / 2;
|
|
47558
|
+
}
|
|
47559
|
+
const sn = Math.sin(phi);
|
|
47560
|
+
const cn = Math.cos(phi);
|
|
47561
|
+
const dn = Math.sqrt(1 - m * sn * sn);
|
|
47562
|
+
return { sn, cn, dn };
|
|
47563
|
+
}
|
|
47564
|
+
function jacobiSN(u, m) {
|
|
47565
|
+
return jacobiElliptic(u, m).sn;
|
|
47566
|
+
}
|
|
47567
|
+
function jacobiCN(u, m) {
|
|
47568
|
+
return jacobiElliptic(u, m).cn;
|
|
47569
|
+
}
|
|
47570
|
+
function jacobiDN(u, m) {
|
|
47571
|
+
return jacobiElliptic(u, m).dn;
|
|
47572
|
+
}
|
|
47573
|
+
|
|
47574
|
+
// src/numeric/gauss-nodes.ts
|
|
47575
|
+
var NEWTON_MAX_ITERATIONS = 100;
|
|
47576
|
+
var NEWTON_TOLERANCE = 1e-15;
|
|
47577
|
+
function legendrePair(n, x) {
|
|
47578
|
+
let pPrev = 1;
|
|
47579
|
+
let pCurr = x;
|
|
47580
|
+
if (n === 0) return [1, x];
|
|
47581
|
+
for (let k = 2; k <= n; k++) {
|
|
47582
|
+
const pNext = ((2 * k - 1) * x * pCurr - (k - 1) * pPrev) / k;
|
|
47583
|
+
pPrev = pCurr;
|
|
47584
|
+
pCurr = pNext;
|
|
47585
|
+
}
|
|
47586
|
+
return [pCurr, pPrev];
|
|
47587
|
+
}
|
|
47588
|
+
function rootsLegendre(n) {
|
|
47589
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
47590
|
+
throw new Error("rootsLegendre: n must be a positive integer");
|
|
47591
|
+
}
|
|
47592
|
+
const nodes = [];
|
|
47593
|
+
const weights = [];
|
|
47594
|
+
for (let i = 0; i < n; i++) {
|
|
47595
|
+
let x = Math.cos(Math.PI * (i + 0.75) / (n + 0.5));
|
|
47596
|
+
let pn = 0;
|
|
47597
|
+
let dpn = 0;
|
|
47598
|
+
for (let iter = 0; iter < NEWTON_MAX_ITERATIONS; iter++) {
|
|
47599
|
+
const [pCurr, pPrev] = legendrePair(n, x);
|
|
47600
|
+
pn = pCurr;
|
|
47601
|
+
dpn = n * (x * pCurr - pPrev) / (x * x - 1);
|
|
47602
|
+
const dx = pn / dpn;
|
|
47603
|
+
x -= dx;
|
|
47604
|
+
if (Math.abs(dx) < NEWTON_TOLERANCE) break;
|
|
47605
|
+
}
|
|
47606
|
+
nodes.push(x);
|
|
47607
|
+
weights.push(2 / ((1 - x * x) * dpn * dpn));
|
|
47608
|
+
}
|
|
47609
|
+
nodes.reverse();
|
|
47610
|
+
weights.reverse();
|
|
47611
|
+
return { nodes, weights };
|
|
47612
|
+
}
|
|
46751
47613
|
export {
|
|
46752
47614
|
ARRAY_WORKER_THRESHOLD,
|
|
46753
47615
|
CAS_BATCH_THRESHOLD,
|
|
@@ -46770,6 +47632,7 @@ export {
|
|
|
46770
47632
|
acsch,
|
|
46771
47633
|
add,
|
|
46772
47634
|
addScalar,
|
|
47635
|
+
adfuller,
|
|
46773
47636
|
adjacencyMatrix,
|
|
46774
47637
|
airyAi,
|
|
46775
47638
|
airyBi,
|
|
@@ -46866,15 +47729,20 @@ export {
|
|
|
46866
47729
|
chineseRemainder,
|
|
46867
47730
|
chirpZTransform,
|
|
46868
47731
|
cholesky,
|
|
47732
|
+
circmean,
|
|
47733
|
+
circstd,
|
|
46869
47734
|
circulant,
|
|
47735
|
+
circvar,
|
|
46870
47736
|
clamp,
|
|
46871
47737
|
classicalElectronRadius,
|
|
46872
47738
|
clearAssumptions,
|
|
46873
47739
|
clone3 as clone,
|
|
47740
|
+
cochranQ,
|
|
46874
47741
|
coefficientList,
|
|
46875
47742
|
collect,
|
|
46876
47743
|
column,
|
|
46877
47744
|
combinations,
|
|
47745
|
+
combinationsGen,
|
|
46878
47746
|
combinationsWithRep,
|
|
46879
47747
|
combine,
|
|
46880
47748
|
companion,
|
|
@@ -46892,6 +47760,7 @@ export {
|
|
|
46892
47760
|
config,
|
|
46893
47761
|
conj,
|
|
46894
47762
|
connectedComponents,
|
|
47763
|
+
continuedFraction,
|
|
46895
47764
|
convexHull,
|
|
46896
47765
|
convexHull3D,
|
|
46897
47766
|
convolve,
|
|
@@ -46950,6 +47819,7 @@ export {
|
|
|
46950
47819
|
digamma,
|
|
46951
47820
|
directionalDerivative,
|
|
46952
47821
|
disableGpu,
|
|
47822
|
+
discreteLog,
|
|
46953
47823
|
discreteUniformDist,
|
|
46954
47824
|
discriminant,
|
|
46955
47825
|
distance,
|
|
@@ -46970,6 +47840,7 @@ export {
|
|
|
46970
47840
|
dotPow,
|
|
46971
47841
|
doubleFactorial,
|
|
46972
47842
|
dst,
|
|
47843
|
+
durbinWatson,
|
|
46973
47844
|
dwt,
|
|
46974
47845
|
efimovFactor,
|
|
46975
47846
|
eigenvectorCentrality,
|
|
@@ -46996,6 +47867,7 @@ export {
|
|
|
46996
47867
|
erfc,
|
|
46997
47868
|
erfcScalar,
|
|
46998
47869
|
erfi,
|
|
47870
|
+
eulerNumbers,
|
|
46999
47871
|
eulerPhi,
|
|
47000
47872
|
evaluate,
|
|
47001
47873
|
eventDetection,
|
|
@@ -47094,6 +47966,7 @@ export {
|
|
|
47094
47966
|
firstRadiation,
|
|
47095
47967
|
firwin,
|
|
47096
47968
|
fisherExact,
|
|
47969
|
+
fitDistribution,
|
|
47097
47970
|
fix,
|
|
47098
47971
|
flatten3 as flatten,
|
|
47099
47972
|
floor,
|
|
@@ -47124,6 +47997,7 @@ export {
|
|
|
47124
47997
|
gaussQuad,
|
|
47125
47998
|
gaussianKDE,
|
|
47126
47999
|
gcd,
|
|
48000
|
+
gegenbauerC,
|
|
47127
48001
|
generalizedEig,
|
|
47128
48002
|
geometricPMF,
|
|
47129
48003
|
getAssumptions,
|
|
@@ -47163,6 +48037,9 @@ export {
|
|
|
47163
48037
|
histogram,
|
|
47164
48038
|
hmean,
|
|
47165
48039
|
hotellingT2,
|
|
48040
|
+
hyp0f1,
|
|
48041
|
+
hyp1f1,
|
|
48042
|
+
hyp2f1,
|
|
47166
48043
|
hypergeometricDist,
|
|
47167
48044
|
hypot,
|
|
47168
48045
|
idct,
|
|
@@ -47202,6 +48079,10 @@ export {
|
|
|
47202
48079
|
isPositive,
|
|
47203
48080
|
isPrime,
|
|
47204
48081
|
isZero,
|
|
48082
|
+
jacobiCN,
|
|
48083
|
+
jacobiDN,
|
|
48084
|
+
jacobiP,
|
|
48085
|
+
jacobiSN,
|
|
47205
48086
|
jacobiSymbol,
|
|
47206
48087
|
jacobian,
|
|
47207
48088
|
jarqueBera,
|
|
@@ -47211,6 +48092,7 @@ export {
|
|
|
47211
48092
|
kdTree,
|
|
47212
48093
|
kdTreeNearest,
|
|
47213
48094
|
kendallTau,
|
|
48095
|
+
kendallTauTest,
|
|
47214
48096
|
kendalltau,
|
|
47215
48097
|
kldivergence,
|
|
47216
48098
|
klitzing,
|
|
@@ -47220,6 +48102,7 @@ export {
|
|
|
47220
48102
|
kolmogorovSmirnov2Test,
|
|
47221
48103
|
kolmogorovSmirnovTest,
|
|
47222
48104
|
kron,
|
|
48105
|
+
kroneckerSymbol,
|
|
47223
48106
|
kruskalWallis,
|
|
47224
48107
|
kurtosis,
|
|
47225
48108
|
lagrangeInterp,
|
|
@@ -47251,6 +48134,7 @@ export {
|
|
|
47251
48134
|
linprog,
|
|
47252
48135
|
linregress,
|
|
47253
48136
|
linsolve,
|
|
48137
|
+
ljungBox,
|
|
47254
48138
|
loess,
|
|
47255
48139
|
log,
|
|
47256
48140
|
log10,
|
|
@@ -47299,6 +48183,7 @@ export {
|
|
|
47299
48183
|
max,
|
|
47300
48184
|
maxSelect,
|
|
47301
48185
|
maximize,
|
|
48186
|
+
mcnemar,
|
|
47302
48187
|
mean,
|
|
47303
48188
|
meanCI,
|
|
47304
48189
|
medfilt,
|
|
@@ -47324,6 +48209,7 @@ export {
|
|
|
47324
48209
|
multinomial,
|
|
47325
48210
|
multipleComparison,
|
|
47326
48211
|
multipleTest,
|
|
48212
|
+
multiplicativeOrder,
|
|
47327
48213
|
multiply,
|
|
47328
48214
|
multiplyScalar,
|
|
47329
48215
|
multivariateNormal,
|
|
@@ -47338,7 +48224,10 @@ export {
|
|
|
47338
48224
|
nintegrate,
|
|
47339
48225
|
nnls,
|
|
47340
48226
|
nodeOperations,
|
|
48227
|
+
noncentralChi2CDF,
|
|
47341
48228
|
noncentralChi2PDF,
|
|
48229
|
+
noncentralFCDF,
|
|
48230
|
+
noncentralTCDF,
|
|
47342
48231
|
norm,
|
|
47343
48232
|
norm22 as norm2,
|
|
47344
48233
|
normFro,
|
|
@@ -47364,6 +48253,8 @@ export {
|
|
|
47364
48253
|
or,
|
|
47365
48254
|
orth,
|
|
47366
48255
|
outer,
|
|
48256
|
+
pFq,
|
|
48257
|
+
pacf,
|
|
47367
48258
|
padeApproximant,
|
|
47368
48259
|
pageRank,
|
|
47369
48260
|
parallelAutoCorr,
|
|
@@ -47404,6 +48295,7 @@ export {
|
|
|
47404
48295
|
periodogram,
|
|
47405
48296
|
permutationTest,
|
|
47406
48297
|
permutations,
|
|
48298
|
+
permutationsGen,
|
|
47407
48299
|
pickRandom,
|
|
47408
48300
|
piecewise,
|
|
47409
48301
|
pinv,
|
|
@@ -47420,6 +48312,7 @@ export {
|
|
|
47420
48312
|
polyFit,
|
|
47421
48313
|
polyadd,
|
|
47422
48314
|
polyder,
|
|
48315
|
+
polygamma,
|
|
47423
48316
|
polygonArea,
|
|
47424
48317
|
polygonPerimeter,
|
|
47425
48318
|
polymul,
|
|
@@ -47435,6 +48328,7 @@ export {
|
|
|
47435
48328
|
prime,
|
|
47436
48329
|
primeFactors,
|
|
47437
48330
|
primePi,
|
|
48331
|
+
primitiveRoot,
|
|
47438
48332
|
principalComponentAnalysis,
|
|
47439
48333
|
print,
|
|
47440
48334
|
prod,
|
|
@@ -47484,6 +48378,7 @@ export {
|
|
|
47484
48378
|
risingFactorial,
|
|
47485
48379
|
romberg,
|
|
47486
48380
|
root,
|
|
48381
|
+
rootsLegendre,
|
|
47487
48382
|
rotate,
|
|
47488
48383
|
rotateVector2D,
|
|
47489
48384
|
rotateVector3D,
|
|
@@ -47555,6 +48450,7 @@ export {
|
|
|
47555
48450
|
std,
|
|
47556
48451
|
stefanBoltzmann,
|
|
47557
48452
|
stiffODESolver,
|
|
48453
|
+
stirlingS1,
|
|
47558
48454
|
stirlingS2,
|
|
47559
48455
|
string,
|
|
47560
48456
|
stronglyConnectedComponents,
|
|
@@ -47604,6 +48500,7 @@ export {
|
|
|
47604
48500
|
trigExpand,
|
|
47605
48501
|
trigReduce,
|
|
47606
48502
|
trigToExp,
|
|
48503
|
+
trigamma,
|
|
47607
48504
|
tril,
|
|
47608
48505
|
trimmedMean,
|
|
47609
48506
|
triu,
|
|
@@ -47640,6 +48537,7 @@ export {
|
|
|
47640
48537
|
variables,
|
|
47641
48538
|
variance,
|
|
47642
48539
|
variation,
|
|
48540
|
+
vonMisesPDF,
|
|
47643
48541
|
voronoiDiagram,
|
|
47644
48542
|
weakMixingAngle,
|
|
47645
48543
|
weibullDist,
|