@danielsimonjr/mathts-functions 0.38.0 → 0.40.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/geometry/geometry-extra.d.ts +30 -0
- package/dist/geometry/geometry-extra.d.ts.map +1 -1
- package/dist/geometry/intersect3d.d.ts +57 -0
- package/dist/geometry/intersect3d.d.ts.map +1 -0
- package/dist/graph/community-coloring.d.ts +129 -0
- package/dist/graph/community-coloring.d.ts.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +947 -319
- package/dist/numeric/matrix-functions.d.ts +42 -17
- package/dist/numeric/matrix-functions.d.ts.map +1 -1
- package/dist/signal/wavelet-filters.d.ts +72 -0
- package/dist/signal/wavelet-filters.d.ts.map +1 -0
- package/dist/signal/wavelets.d.ts +13 -11
- package/dist/signal/wavelets.d.ts.map +1 -1
- package/dist/typed/graph.d.ts +12 -2
- package/dist/typed/graph.d.ts.map +1 -1
- package/dist/typed/signal.d.ts +10 -3
- package/dist/typed/signal.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3402,10 +3402,10 @@ async function fftGpuDispatchImpl(real, imag, inverse, options) {
|
|
|
3402
3402
|
staging.unmap();
|
|
3403
3403
|
const outRe = new Float64Array(n);
|
|
3404
3404
|
const outIm = new Float64Array(n);
|
|
3405
|
-
const
|
|
3405
|
+
const scale4 = inverse ? 1 / n : 1;
|
|
3406
3406
|
for (let i = 0; i < n; i++) {
|
|
3407
|
-
outRe[i] = packed[i * 2] *
|
|
3408
|
-
outIm[i] = packed[i * 2 + 1] *
|
|
3407
|
+
outRe[i] = packed[i * 2] * scale4;
|
|
3408
|
+
outIm[i] = packed[i * 2 + 1] * scale4;
|
|
3409
3409
|
}
|
|
3410
3410
|
return { real: outRe, imag: outIm };
|
|
3411
3411
|
} catch {
|
|
@@ -3636,9 +3636,9 @@ function applyWindowDispatch(samples, windowName) {
|
|
|
3636
3636
|
const wasm = getWasm();
|
|
3637
3637
|
if (wasm && isAsWasm(wasm)) {
|
|
3638
3638
|
try {
|
|
3639
|
-
const out = withAsF64(wasm, [samples], (
|
|
3640
|
-
|
|
3641
|
-
return asReadReturnedF64(
|
|
3639
|
+
const out = withAsF64(wasm, [samples], (mod3, [h]) => {
|
|
3640
|
+
mod3["apply_window_f64"](h, wt);
|
|
3641
|
+
return asReadReturnedF64(mod3, h);
|
|
3642
3642
|
});
|
|
3643
3643
|
if (out && out.length === samples.length) {
|
|
3644
3644
|
samples.set(out);
|
|
@@ -3659,9 +3659,9 @@ function welchPSDDispatch(samples, frameLength, overlap, windowName) {
|
|
|
3659
3659
|
const out = withAsF64(
|
|
3660
3660
|
wasm,
|
|
3661
3661
|
[samples],
|
|
3662
|
-
(
|
|
3663
|
-
|
|
3664
|
-
|
|
3662
|
+
(mod3, [h]) => asReadReturnedF64(
|
|
3663
|
+
mod3,
|
|
3664
|
+
mod3["welch_psd_f64"](
|
|
3665
3665
|
h,
|
|
3666
3666
|
frameLength,
|
|
3667
3667
|
overlap,
|
|
@@ -3685,9 +3685,9 @@ function bartlettPSDDispatch(samples, frameLength) {
|
|
|
3685
3685
|
const out = withAsF64(
|
|
3686
3686
|
wasm,
|
|
3687
3687
|
[samples],
|
|
3688
|
-
(
|
|
3689
|
-
|
|
3690
|
-
|
|
3688
|
+
(mod3, [h]) => asReadReturnedF64(
|
|
3689
|
+
mod3,
|
|
3690
|
+
mod3["bartlett_psd_f64"](h, frameLength)
|
|
3691
3691
|
)
|
|
3692
3692
|
);
|
|
3693
3693
|
if (out && out.length > 0) return out;
|
|
@@ -3706,7 +3706,7 @@ function goertzelDispatch(samples, targetFreq, sampleRate) {
|
|
|
3706
3706
|
const r = withAsF64(
|
|
3707
3707
|
wasm,
|
|
3708
3708
|
[samples],
|
|
3709
|
-
(
|
|
3709
|
+
(mod3, [h]) => mod3["goertzel_f64"](
|
|
3710
3710
|
h,
|
|
3711
3711
|
targetFreq,
|
|
3712
3712
|
sampleRate
|
|
@@ -3728,9 +3728,9 @@ function chirpZTransformDispatch(samples, m, phiStartRe, phiStartIm, phiStepRe,
|
|
|
3728
3728
|
const interleaved = withAsF64(
|
|
3729
3729
|
wasm,
|
|
3730
3730
|
[samples],
|
|
3731
|
-
(
|
|
3732
|
-
|
|
3733
|
-
|
|
3731
|
+
(mod3, [h]) => asReadReturnedF64(
|
|
3732
|
+
mod3,
|
|
3733
|
+
mod3["chirp_z_transform_f64"](h, m, phiStartRe, phiStartIm, phiStepRe, phiStepIm)
|
|
3734
3734
|
)
|
|
3735
3735
|
);
|
|
3736
3736
|
if (interleaved && interleaved.length === 2 * m) {
|
|
@@ -3749,6 +3749,139 @@ function chirpZTransformDispatch(samples, m, phiStartRe, phiStartIm, phiStepRe,
|
|
|
3749
3749
|
return chirpZTransformJS(samples, m, phiStartRe, phiStartIm, phiStepRe, phiStepIm);
|
|
3750
3750
|
}
|
|
3751
3751
|
|
|
3752
|
+
// src/signal/wavelet-filters.ts
|
|
3753
|
+
var DEC_LO_TABLE = {
|
|
3754
|
+
haar: [0.7071067811865476, 0.7071067811865476],
|
|
3755
|
+
db1: [0.7071067811865476, 0.7071067811865476],
|
|
3756
|
+
db2: [-0.12940952255126037, 0.2241438680420134, 0.8365163037378079, 0.48296291314453416],
|
|
3757
|
+
db3: [
|
|
3758
|
+
0.03522629188570953,
|
|
3759
|
+
-0.08544127388202666,
|
|
3760
|
+
-0.13501102001025458,
|
|
3761
|
+
0.45987750211849154,
|
|
3762
|
+
0.8068915093110925,
|
|
3763
|
+
0.33267055295008263
|
|
3764
|
+
],
|
|
3765
|
+
db4: [
|
|
3766
|
+
-0.010597401785069032,
|
|
3767
|
+
0.0328830116668852,
|
|
3768
|
+
0.030841381835560764,
|
|
3769
|
+
-0.18703481171909309,
|
|
3770
|
+
-0.027983769416859854,
|
|
3771
|
+
0.6308807679298589,
|
|
3772
|
+
0.7148465705529157,
|
|
3773
|
+
0.2303778133088965
|
|
3774
|
+
],
|
|
3775
|
+
sym2: [-0.12940952255092145, 0.22414386804185735, 0.836516303737469, 0.48296291314469025],
|
|
3776
|
+
sym3: [
|
|
3777
|
+
0.035226291882100656,
|
|
3778
|
+
-0.08544127388224149,
|
|
3779
|
+
-0.13501102001039084,
|
|
3780
|
+
0.4598775021193313,
|
|
3781
|
+
0.8068915093133388,
|
|
3782
|
+
0.3326705529509569
|
|
3783
|
+
],
|
|
3784
|
+
sym4: [
|
|
3785
|
+
-0.07576571478927333,
|
|
3786
|
+
-0.02963552764599851,
|
|
3787
|
+
0.49761866763201545,
|
|
3788
|
+
0.8037387518059161,
|
|
3789
|
+
0.29785779560527736,
|
|
3790
|
+
-0.09921954357684722,
|
|
3791
|
+
-0.012603967262037833,
|
|
3792
|
+
0.0322231006040427
|
|
3793
|
+
],
|
|
3794
|
+
coif1: [
|
|
3795
|
+
-0.015655728135791993,
|
|
3796
|
+
-0.07273261951252645,
|
|
3797
|
+
0.3848648468648578,
|
|
3798
|
+
0.8525720202116004,
|
|
3799
|
+
0.3378976624574818,
|
|
3800
|
+
-0.07273261951252645
|
|
3801
|
+
],
|
|
3802
|
+
coif2: [
|
|
3803
|
+
-720549445520347e-18,
|
|
3804
|
+
-0.0018232088709110323,
|
|
3805
|
+
0.005611434819368834,
|
|
3806
|
+
0.02368017194684777,
|
|
3807
|
+
-0.05943441864643109,
|
|
3808
|
+
-0.07648859907828076,
|
|
3809
|
+
0.4170051844232391,
|
|
3810
|
+
0.8127236354494135,
|
|
3811
|
+
0.3861100668227629,
|
|
3812
|
+
-0.0673725547237256,
|
|
3813
|
+
-0.04146493678687178,
|
|
3814
|
+
0.01638733646320364
|
|
3815
|
+
]
|
|
3816
|
+
};
|
|
3817
|
+
var SUPPORTED_WAVELETS = Object.keys(DEC_LO_TABLE);
|
|
3818
|
+
function getWaveletFilters(wavelet) {
|
|
3819
|
+
const decLo = DEC_LO_TABLE[wavelet];
|
|
3820
|
+
if (!decLo) {
|
|
3821
|
+
throw new Error(
|
|
3822
|
+
`unsupported wavelet "${wavelet}". Supported families: ${SUPPORTED_WAVELETS.join(", ")}`
|
|
3823
|
+
);
|
|
3824
|
+
}
|
|
3825
|
+
const L = decLo.length;
|
|
3826
|
+
const decHi = new Array(L);
|
|
3827
|
+
for (let k = 0; k < L; k++) {
|
|
3828
|
+
decHi[k] = (k % 2 === 0 ? -1 : 1) * decLo[L - 1 - k];
|
|
3829
|
+
}
|
|
3830
|
+
const recLo = decLo.slice().reverse();
|
|
3831
|
+
const recHi = decHi.slice().reverse();
|
|
3832
|
+
return { decLo, decHi, recLo, recHi };
|
|
3833
|
+
}
|
|
3834
|
+
function mod2(a, m) {
|
|
3835
|
+
const r = a % m;
|
|
3836
|
+
return r < 0 ? r + m : r;
|
|
3837
|
+
}
|
|
3838
|
+
function dwtPeriodization(x, wavelet) {
|
|
3839
|
+
const n = x.length;
|
|
3840
|
+
if (n < 2) throw new Error("signal must have at least 2 samples");
|
|
3841
|
+
const { decLo, decHi } = getWaveletFilters(wavelet);
|
|
3842
|
+
const L = decLo.length;
|
|
3843
|
+
const offset = Math.floor(L / 2);
|
|
3844
|
+
const half = Math.ceil(n / 2);
|
|
3845
|
+
const approx = new Array(half);
|
|
3846
|
+
const detail = new Array(half);
|
|
3847
|
+
for (let i = 0; i < half; i++) {
|
|
3848
|
+
let sa = 0;
|
|
3849
|
+
let sd = 0;
|
|
3850
|
+
for (let k = 0; k < L; k++) {
|
|
3851
|
+
const idx = mod2(2 * i - k + offset, n);
|
|
3852
|
+
const xi = x[idx];
|
|
3853
|
+
sa += decLo[k] * xi;
|
|
3854
|
+
sd += decHi[k] * xi;
|
|
3855
|
+
}
|
|
3856
|
+
approx[i] = sa;
|
|
3857
|
+
detail[i] = sd;
|
|
3858
|
+
}
|
|
3859
|
+
return { approx, detail };
|
|
3860
|
+
}
|
|
3861
|
+
function idwtPeriodization(approx, detail, wavelet) {
|
|
3862
|
+
if (approx.length !== detail.length) {
|
|
3863
|
+
throw new Error("approx and detail must have equal length");
|
|
3864
|
+
}
|
|
3865
|
+
const { recLo, recHi } = getWaveletFilters(wavelet);
|
|
3866
|
+
const half = approx.length;
|
|
3867
|
+
const n = half * 2;
|
|
3868
|
+
const L = recLo.length;
|
|
3869
|
+
const shift = Math.floor(L / 2) - 1;
|
|
3870
|
+
const x = new Array(n);
|
|
3871
|
+
for (let m = 0; m < n; m++) {
|
|
3872
|
+
let s = 0;
|
|
3873
|
+
for (let k = 0; k < L; k++) {
|
|
3874
|
+
const idx = mod2(m - k + shift, n);
|
|
3875
|
+
if (idx % 2 === 0) {
|
|
3876
|
+
const j = idx / 2;
|
|
3877
|
+
s += recLo[k] * approx[j] + recHi[k] * detail[j];
|
|
3878
|
+
}
|
|
3879
|
+
}
|
|
3880
|
+
x[m] = s;
|
|
3881
|
+
}
|
|
3882
|
+
return x;
|
|
3883
|
+
}
|
|
3884
|
+
|
|
3752
3885
|
// src/typed/signal.ts
|
|
3753
3886
|
var WASM_THRESHOLD = 64;
|
|
3754
3887
|
function isPowerOf22(n) {
|
|
@@ -4182,7 +4315,11 @@ function dwt(x, wavelet = "haar") {
|
|
|
4182
4315
|
}
|
|
4183
4316
|
return { approx, detail };
|
|
4184
4317
|
} else {
|
|
4185
|
-
|
|
4318
|
+
try {
|
|
4319
|
+
return dwtPeriodization(x, wavelet);
|
|
4320
|
+
} catch (err) {
|
|
4321
|
+
throw new Error(`dwt: ${err instanceof Error ? err.message : String(err)}`);
|
|
4322
|
+
}
|
|
4186
4323
|
}
|
|
4187
4324
|
}
|
|
4188
4325
|
async function fft2d(x) {
|
|
@@ -4737,9 +4874,9 @@ function runBinaryBitwiseWasm(op, a, b) {
|
|
|
4737
4874
|
const n = a.length;
|
|
4738
4875
|
const names = BINARY_OPS[op];
|
|
4739
4876
|
try {
|
|
4740
|
-
return withAsI32(wasm, [a, b, new Int32Array(n)], (
|
|
4741
|
-
|
|
4742
|
-
return asReadReturnedI32(
|
|
4877
|
+
return withAsI32(wasm, [a, b, new Int32Array(n)], (mod3, [ha, hb, hr]) => {
|
|
4878
|
+
mod3[names.as](ha, hb, hr);
|
|
4879
|
+
return asReadReturnedI32(mod3, hr);
|
|
4743
4880
|
});
|
|
4744
4881
|
} catch {
|
|
4745
4882
|
return null;
|
|
@@ -4751,9 +4888,9 @@ function runUnaryBitwiseWasm(op, a) {
|
|
|
4751
4888
|
const n = a.length;
|
|
4752
4889
|
const names = UNARY_OPS[op];
|
|
4753
4890
|
try {
|
|
4754
|
-
return withAsI32(wasm, [a, new Int32Array(n)], (
|
|
4755
|
-
|
|
4756
|
-
return asReadReturnedI32(
|
|
4891
|
+
return withAsI32(wasm, [a, new Int32Array(n)], (mod3, [ha, hr]) => {
|
|
4892
|
+
mod3[names.as](ha, hr);
|
|
4893
|
+
return asReadReturnedI32(mod3, hr);
|
|
4757
4894
|
});
|
|
4758
4895
|
} catch {
|
|
4759
4896
|
return null;
|
|
@@ -6479,7 +6616,7 @@ function besselOrderDispatch(order, xs, asName, js) {
|
|
|
6479
6616
|
const out = withAsF64(
|
|
6480
6617
|
wasm,
|
|
6481
6618
|
[xs],
|
|
6482
|
-
(
|
|
6619
|
+
(mod3, [h]) => asReadReturnedF64(mod3, mod3[asName](order, h))
|
|
6483
6620
|
);
|
|
6484
6621
|
if (out) return out;
|
|
6485
6622
|
} catch {
|
|
@@ -6741,7 +6878,7 @@ function multiArrayDispatch(name254, inputs, js) {
|
|
|
6741
6878
|
const out = withAsF64(
|
|
6742
6879
|
wasm,
|
|
6743
6880
|
inputs,
|
|
6744
|
-
(
|
|
6881
|
+
(mod3, headers) => asReadReturnedF64(mod3, mod3[name254](...headers))
|
|
6745
6882
|
);
|
|
6746
6883
|
if (out) return out;
|
|
6747
6884
|
} catch {
|
|
@@ -6877,7 +7014,7 @@ function digammaScalar(x) {
|
|
|
6877
7014
|
return result;
|
|
6878
7015
|
}
|
|
6879
7016
|
function besselK01(x) {
|
|
6880
|
-
const
|
|
7017
|
+
const EPS5 = 1e-16;
|
|
6881
7018
|
const xi = 1 / x;
|
|
6882
7019
|
const xi2 = 2 * xi;
|
|
6883
7020
|
let rkmu;
|
|
@@ -6900,7 +7037,7 @@ function besselK01(x) {
|
|
|
6900
7037
|
const del = c * ff;
|
|
6901
7038
|
sum3 += del;
|
|
6902
7039
|
sum1 += c * (p - i * ff);
|
|
6903
|
-
if (Math.abs(del) < Math.abs(sum3) *
|
|
7040
|
+
if (Math.abs(del) < Math.abs(sum3) * EPS5) break;
|
|
6904
7041
|
}
|
|
6905
7042
|
rkmu = sum3;
|
|
6906
7043
|
rk1 = sum1 * xi2;
|
|
@@ -6929,7 +7066,7 @@ function besselK01(x) {
|
|
|
6929
7066
|
h += delh;
|
|
6930
7067
|
const dels = q * delh;
|
|
6931
7068
|
s += dels;
|
|
6932
|
-
if (Math.abs(dels / s) <
|
|
7069
|
+
if (Math.abs(dels / s) < EPS5) break;
|
|
6933
7070
|
}
|
|
6934
7071
|
h = a1 * h;
|
|
6935
7072
|
rkmu = Math.sqrt(Math.PI / (2 * x)) * Math.exp(-x) / s;
|
|
@@ -8266,26 +8403,26 @@ var betaPDF = mathTyped11("betaPDF", {
|
|
|
8266
8403
|
return Promise.resolve(out);
|
|
8267
8404
|
}
|
|
8268
8405
|
});
|
|
8269
|
-
function gammaPDFScalar(x, shape,
|
|
8270
|
-
if (shape <= 0 ||
|
|
8406
|
+
function gammaPDFScalar(x, shape, scale4) {
|
|
8407
|
+
if (shape <= 0 || scale4 <= 0) return NaN;
|
|
8271
8408
|
if (x <= 0) return 0;
|
|
8272
8409
|
return Math.exp(
|
|
8273
|
-
(shape - 1) * Math.log(x) - x /
|
|
8410
|
+
(shape - 1) * Math.log(x) - x / scale4 - _lgammaD(shape) - shape * Math.log(scale4)
|
|
8274
8411
|
);
|
|
8275
8412
|
}
|
|
8276
8413
|
var gammaPDF = mathTyped11("gammaPDF", {
|
|
8277
|
-
"number, number, number": (x, shape,
|
|
8278
|
-
"Float64Array, number, number": (x, shape,
|
|
8414
|
+
"number, number, number": (x, shape, scale4) => gammaPDFScalar(x, shape, scale4),
|
|
8415
|
+
"Float64Array, number, number": (x, shape, scale4) => {
|
|
8279
8416
|
const out = new Float64Array(x.length);
|
|
8280
8417
|
const lgShape = _lgammaD(shape);
|
|
8281
|
-
const logScale = Math.log(
|
|
8418
|
+
const logScale = Math.log(scale4);
|
|
8282
8419
|
const logConstant = lgShape + shape * logScale;
|
|
8283
8420
|
for (let i = 0; i < x.length; i++) {
|
|
8284
8421
|
const xi = x[i];
|
|
8285
8422
|
if (xi <= 0) {
|
|
8286
8423
|
out[i] = 0;
|
|
8287
8424
|
} else {
|
|
8288
|
-
out[i] = Math.exp((shape - 1) * Math.log(xi) - xi /
|
|
8425
|
+
out[i] = Math.exp((shape - 1) * Math.log(xi) - xi / scale4 - logConstant);
|
|
8289
8426
|
}
|
|
8290
8427
|
}
|
|
8291
8428
|
return Promise.resolve(out);
|
|
@@ -8391,18 +8528,18 @@ import { computePool as computePool7 } from "@danielsimonjr/mathts-parallel";
|
|
|
8391
8528
|
var GEOMETRY_WASM_THRESHOLD = 32;
|
|
8392
8529
|
var HULL3D_WASM_THRESHOLD = 1024;
|
|
8393
8530
|
function angle2D(v1, v2) {
|
|
8394
|
-
const
|
|
8531
|
+
const dot8 = v1[0] * v2[0] + v1[1] * v2[1];
|
|
8395
8532
|
const mag1 = Math.sqrt(v1[0] ** 2 + v1[1] ** 2);
|
|
8396
8533
|
const mag2 = Math.sqrt(v2[0] ** 2 + v2[1] ** 2);
|
|
8397
8534
|
if (mag1 === 0 || mag2 === 0) return NaN;
|
|
8398
|
-
return Math.acos(Math.max(-1, Math.min(1,
|
|
8535
|
+
return Math.acos(Math.max(-1, Math.min(1, dot8 / (mag1 * mag2))));
|
|
8399
8536
|
}
|
|
8400
8537
|
function angle3D(v1, v2) {
|
|
8401
|
-
const
|
|
8538
|
+
const dot8 = v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
|
|
8402
8539
|
const mag1 = Math.sqrt(v1[0] ** 2 + v1[1] ** 2 + v1[2] ** 2);
|
|
8403
8540
|
const mag2 = Math.sqrt(v2[0] ** 2 + v2[1] ** 2 + v2[2] ** 2);
|
|
8404
8541
|
if (mag1 === 0 || mag2 === 0) return NaN;
|
|
8405
|
-
return Math.acos(Math.max(-1, Math.min(1,
|
|
8542
|
+
return Math.acos(Math.max(-1, Math.min(1, dot8 / (mag1 * mag2))));
|
|
8406
8543
|
}
|
|
8407
8544
|
function cross3D(a, b) {
|
|
8408
8545
|
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
@@ -8446,12 +8583,12 @@ function convexHull(points) {
|
|
|
8446
8583
|
} else {
|
|
8447
8584
|
sorted = points.slice().sort((a, b) => a[0] - b[0] || a[1] - b[1]);
|
|
8448
8585
|
}
|
|
8449
|
-
function
|
|
8586
|
+
function cross3(o, a, b) {
|
|
8450
8587
|
return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
|
|
8451
8588
|
}
|
|
8452
8589
|
const lower = [];
|
|
8453
8590
|
for (const p of sorted) {
|
|
8454
|
-
while (lower.length >= 2 &&
|
|
8591
|
+
while (lower.length >= 2 && cross3(lower[lower.length - 2], lower[lower.length - 1], p) <= 0) {
|
|
8455
8592
|
lower.pop();
|
|
8456
8593
|
}
|
|
8457
8594
|
lower.push(p);
|
|
@@ -8459,7 +8596,7 @@ function convexHull(points) {
|
|
|
8459
8596
|
const upper = [];
|
|
8460
8597
|
for (let i = sorted.length - 1; i >= 0; i--) {
|
|
8461
8598
|
const p = sorted[i];
|
|
8462
|
-
while (upper.length >= 2 &&
|
|
8599
|
+
while (upper.length >= 2 && cross3(upper[upper.length - 2], upper[upper.length - 1], p) <= 0) {
|
|
8463
8600
|
upper.pop();
|
|
8464
8601
|
}
|
|
8465
8602
|
upper.push(p);
|
|
@@ -8507,15 +8644,15 @@ function reflectVector(v, normal) {
|
|
|
8507
8644
|
const mag = Math.sqrt(normal.reduce((s, c) => s + c * c, 0));
|
|
8508
8645
|
if (mag === 0) return v.slice();
|
|
8509
8646
|
const n = normal.map((c) => c / mag);
|
|
8510
|
-
const
|
|
8511
|
-
return v.map((c, i) => c - 2 *
|
|
8647
|
+
const dot8 = v.reduce((s, c, i) => s + c * n[i], 0);
|
|
8648
|
+
return v.map((c, i) => c - 2 * dot8 * n[i]);
|
|
8512
8649
|
}
|
|
8513
8650
|
function projectVector(v, onto) {
|
|
8514
|
-
const
|
|
8651
|
+
const dot8 = v.reduce((s, c, i) => s + c * onto[i], 0);
|
|
8515
8652
|
const magSq = onto.reduce((s, c) => s + c * c, 0);
|
|
8516
8653
|
if (magSq === 0) return onto.map(() => 0);
|
|
8517
|
-
const
|
|
8518
|
-
return onto.map((c) => c *
|
|
8654
|
+
const scale4 = dot8 / magSq;
|
|
8655
|
+
return onto.map((c) => c * scale4);
|
|
8519
8656
|
}
|
|
8520
8657
|
function distance2D(a, b) {
|
|
8521
8658
|
return Math.sqrt((b[0] - a[0]) ** 2 + (b[1] - a[1]) ** 2);
|
|
@@ -8590,10 +8727,10 @@ function centroid(vertices) {
|
|
|
8590
8727
|
let cy = 0;
|
|
8591
8728
|
for (let i = 0; i < n; i++) {
|
|
8592
8729
|
const j = (i + 1) % n;
|
|
8593
|
-
const
|
|
8594
|
-
signedArea +=
|
|
8595
|
-
cx += (vertices[i][0] + vertices[j][0]) *
|
|
8596
|
-
cy += (vertices[i][1] + vertices[j][1]) *
|
|
8730
|
+
const cross3 = vertices[i][0] * vertices[j][1] - vertices[j][0] * vertices[i][1];
|
|
8731
|
+
signedArea += cross3;
|
|
8732
|
+
cx += (vertices[i][0] + vertices[j][0]) * cross3;
|
|
8733
|
+
cy += (vertices[i][1] + vertices[j][1]) * cross3;
|
|
8597
8734
|
}
|
|
8598
8735
|
signedArea /= 2;
|
|
8599
8736
|
cx /= 6 * signedArea;
|
|
@@ -9162,7 +9299,7 @@ function polyMulDispatch(a, b) {
|
|
|
9162
9299
|
const out = withAsF64(
|
|
9163
9300
|
wasm,
|
|
9164
9301
|
[a, b],
|
|
9165
|
-
(
|
|
9302
|
+
(mod3, [ha, hb]) => asReadReturnedF64(mod3, mod3["poly_mul_f64"](ha, hb))
|
|
9166
9303
|
);
|
|
9167
9304
|
if (out) return out;
|
|
9168
9305
|
} catch {
|
|
@@ -9181,9 +9318,9 @@ function polyDivModDispatch(num2, den) {
|
|
|
9181
9318
|
const flat = withAsF64(
|
|
9182
9319
|
wasm,
|
|
9183
9320
|
[num2, den],
|
|
9184
|
-
(
|
|
9185
|
-
|
|
9186
|
-
|
|
9321
|
+
(mod3, [hn, hd]) => asReadReturnedF64(
|
|
9322
|
+
mod3,
|
|
9323
|
+
mod3["poly_div_mod_f64"](hn, hd)
|
|
9187
9324
|
)
|
|
9188
9325
|
);
|
|
9189
9326
|
if (flat) {
|
|
@@ -9284,7 +9421,7 @@ function resultantDispatch(p, q) {
|
|
|
9284
9421
|
const r = withAsF64(
|
|
9285
9422
|
wasm,
|
|
9286
9423
|
[p, q],
|
|
9287
|
-
(
|
|
9424
|
+
(mod3, [hp, hq]) => mod3["poly_resultant_f64"](hp, hq)
|
|
9288
9425
|
);
|
|
9289
9426
|
if (r !== null) return r;
|
|
9290
9427
|
} catch {
|
|
@@ -9302,7 +9439,7 @@ function discriminantDispatch(p) {
|
|
|
9302
9439
|
const r = withAsF64(
|
|
9303
9440
|
wasm,
|
|
9304
9441
|
[p],
|
|
9305
|
-
(
|
|
9442
|
+
(mod3, [hp]) => mod3["poly_discriminant_f64"](hp)
|
|
9306
9443
|
);
|
|
9307
9444
|
if (r !== null) return r;
|
|
9308
9445
|
} catch {
|
|
@@ -9415,9 +9552,9 @@ function fitDispatch(xs, ys, degree2, asName, jsFallback) {
|
|
|
9415
9552
|
const out = withAsF64(
|
|
9416
9553
|
wasm,
|
|
9417
9554
|
[xs, ys],
|
|
9418
|
-
(
|
|
9419
|
-
|
|
9420
|
-
|
|
9555
|
+
(mod3, [hx, hy]) => asReadReturnedF64(
|
|
9556
|
+
mod3,
|
|
9557
|
+
mod3[asName](hx, hy, degree2)
|
|
9421
9558
|
)
|
|
9422
9559
|
);
|
|
9423
9560
|
if (out && out.length === degree2 + 1 && out.every((v) => Number.isFinite(v))) {
|
|
@@ -10948,9 +11085,9 @@ function tridiagSolveDispatch(diag2, lower, upper, rhs) {
|
|
|
10948
11085
|
const result = withAsF64(
|
|
10949
11086
|
wasm,
|
|
10950
11087
|
[diag2, lower, upper, rhs],
|
|
10951
|
-
(
|
|
10952
|
-
|
|
10953
|
-
|
|
11088
|
+
(mod3, [hd, hl, hu, hr]) => asReadReturnedF64(
|
|
11089
|
+
mod3,
|
|
11090
|
+
mod3["tridiag_solve_f64"](
|
|
10954
11091
|
hd,
|
|
10955
11092
|
hl,
|
|
10956
11093
|
hu,
|
|
@@ -10989,9 +11126,9 @@ function dividedDifferenceDispatch(xs, ys) {
|
|
|
10989
11126
|
const result = withAsF64(
|
|
10990
11127
|
wasm,
|
|
10991
11128
|
[xs, ys],
|
|
10992
|
-
(
|
|
10993
|
-
|
|
10994
|
-
|
|
11129
|
+
(mod3, [hx, hy]) => asReadReturnedF64(
|
|
11130
|
+
mod3,
|
|
11131
|
+
mod3["divided_difference_f64"](hx, hy)
|
|
10995
11132
|
)
|
|
10996
11133
|
);
|
|
10997
11134
|
if (result && result.length === n) return result;
|
|
@@ -11762,7 +11899,7 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11762
11899
|
dependencies,
|
|
11763
11900
|
({
|
|
11764
11901
|
typed: typed3,
|
|
11765
|
-
add:
|
|
11902
|
+
add: add4,
|
|
11766
11903
|
subtract: subtract3,
|
|
11767
11904
|
multiply: multiply2,
|
|
11768
11905
|
divide: divide2,
|
|
@@ -11981,7 +12118,7 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11981
12118
|
const m = Math.min(coeffs.length, stages.length);
|
|
11982
12119
|
let acc = multiply2(coeffs[0], stages[0]);
|
|
11983
12120
|
for (let j = 1; j < m; j++) {
|
|
11984
|
-
acc =
|
|
12121
|
+
acc = add4(acc, multiply2(coeffs[j], stages[j]));
|
|
11985
12122
|
}
|
|
11986
12123
|
return acc;
|
|
11987
12124
|
}
|
|
@@ -11994,14 +12131,14 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
11994
12131
|
h = trimStep(t[n], tf, h);
|
|
11995
12132
|
k.push(f(t[n], y[n]));
|
|
11996
12133
|
for (let i = 1; i < c.length; ++i) {
|
|
11997
|
-
k.push(f(
|
|
12134
|
+
k.push(f(add4(t[n], multiply2(c[i], h)), add4(y[n], multiply2(h, stageCombo(a[i], k)))));
|
|
11998
12135
|
}
|
|
11999
12136
|
const errComb = stageCombo(deltaB, k);
|
|
12000
12137
|
const errArr = Array.isArray(errComb) ? errComb : [errComb];
|
|
12001
12138
|
const TE = max2(abs2(map2(errArr, (X) => isUnit(X) ? X.value : X)));
|
|
12002
12139
|
if (TE < tol && tol / TE > 1 / 4) {
|
|
12003
|
-
t.push(
|
|
12004
|
-
y.push(
|
|
12140
|
+
t.push(add4(t[n], h));
|
|
12141
|
+
y.push(add4(y[n], multiply2(h, stageCombo(b, k))));
|
|
12005
12142
|
n++;
|
|
12006
12143
|
}
|
|
12007
12144
|
let delta = 0.84 * (tol / TE) ** (1 / 5);
|
|
@@ -12082,7 +12219,7 @@ var createSolveODE = /* @__PURE__ */ factory(
|
|
|
12082
12219
|
function _createTrimStep(isForwards) {
|
|
12083
12220
|
const outOfBounds = isForwards ? larger2 : smaller2;
|
|
12084
12221
|
return function(t, tf, h) {
|
|
12085
|
-
const next =
|
|
12222
|
+
const next = add4(t, h);
|
|
12086
12223
|
return outOfBounds(next, tf) ? subtract3(tf, t) : h;
|
|
12087
12224
|
};
|
|
12088
12225
|
}
|
|
@@ -13371,8 +13508,8 @@ function quadprog(H, f, A, b) {
|
|
|
13371
13508
|
let aNorm = 0;
|
|
13372
13509
|
for (let j = 0; j < n; j++) aNorm += A[c][j] * A[c][j];
|
|
13373
13510
|
if (aNorm > 1e-15) {
|
|
13374
|
-
const
|
|
13375
|
-
for (let j = 0; j < n; j++) xNew[j] -=
|
|
13511
|
+
const scale4 = (ax - b[c]) / aNorm;
|
|
13512
|
+
for (let j = 0; j < n; j++) xNew[j] -= scale4 * A[c][j];
|
|
13376
13513
|
}
|
|
13377
13514
|
}
|
|
13378
13515
|
}
|
|
@@ -14579,7 +14716,7 @@ function _betweennessOnce(adj, directed, normalise, seed) {
|
|
|
14579
14716
|
for (let i = 0; i < n; i++) cb[i] *= scaleFactor;
|
|
14580
14717
|
}
|
|
14581
14718
|
if (normalise) {
|
|
14582
|
-
const denom =
|
|
14719
|
+
const denom = (n - 1) * (n - 2);
|
|
14583
14720
|
if (denom > 0) {
|
|
14584
14721
|
for (let i = 0; i < n; i++) cb[i] /= denom;
|
|
14585
14722
|
}
|
|
@@ -14613,7 +14750,7 @@ function _aggregateBetweenness(vectors, aggregation) {
|
|
|
14613
14750
|
}
|
|
14614
14751
|
async function betweennessCentrality(adj, opts) {
|
|
14615
14752
|
const directed = opts?.directed ?? false;
|
|
14616
|
-
const normalise = opts?.normalise ?? true;
|
|
14753
|
+
const normalise = opts?.normalized ?? opts?.normalise ?? true;
|
|
14617
14754
|
const restarts = opts?.restarts ?? 1;
|
|
14618
14755
|
const baseSeed = opts?.restartSeed ?? 0;
|
|
14619
14756
|
const aggregation = opts?.aggregation ?? "mean";
|
|
@@ -14672,9 +14809,9 @@ function _aggregateEigenvector(vectors, aggregation) {
|
|
|
14672
14809
|
const count2 = vectors.length;
|
|
14673
14810
|
const ref = vectors[0];
|
|
14674
14811
|
const aligned = vectors.map((v) => {
|
|
14675
|
-
let
|
|
14676
|
-
for (let i = 0; i < n; i++)
|
|
14677
|
-
if (
|
|
14812
|
+
let dot8 = 0;
|
|
14813
|
+
for (let i = 0; i < n; i++) dot8 += v[i] * ref[i];
|
|
14814
|
+
if (dot8 < 0) {
|
|
14678
14815
|
const flipped = new Float64Array(n);
|
|
14679
14816
|
for (let i = 0; i < n; i++) flipped[i] = -v[i];
|
|
14680
14817
|
return flipped;
|
|
@@ -15210,7 +15347,7 @@ function fDist(d1, d2) {
|
|
|
15210
15347
|
}
|
|
15211
15348
|
function gammaDist(shape, rate = 1) {
|
|
15212
15349
|
if (shape <= 0 || rate <= 0) throw new Error("gammaDist: shape and rate must be positive");
|
|
15213
|
-
const
|
|
15350
|
+
const scale4 = 1 / rate;
|
|
15214
15351
|
return {
|
|
15215
15352
|
pdf: (x) => {
|
|
15216
15353
|
if (x < 0) return 0;
|
|
@@ -15231,7 +15368,7 @@ function gammaDist(shape, rate = 1) {
|
|
|
15231
15368
|
if (p <= 0) return 0;
|
|
15232
15369
|
if (p >= 1) return Infinity;
|
|
15233
15370
|
let lo = 0;
|
|
15234
|
-
let hi = shape *
|
|
15371
|
+
let hi = shape * scale4 * 20;
|
|
15235
15372
|
while (_gammainc(shape, hi * rate) < p) hi *= 2;
|
|
15236
15373
|
for (let i = 0; i < 100; i++) {
|
|
15237
15374
|
const mid = (lo + hi) / 2;
|
|
@@ -15241,13 +15378,13 @@ function gammaDist(shape, rate = 1) {
|
|
|
15241
15378
|
}
|
|
15242
15379
|
return (lo + hi) / 2;
|
|
15243
15380
|
},
|
|
15244
|
-
mean: shape *
|
|
15245
|
-
variance: shape *
|
|
15246
|
-
sample: () => _gammaRandom(shape) *
|
|
15247
|
-
sampleN: (n, opts) => _sampleNDispatch("gamma", [shape,
|
|
15381
|
+
mean: shape * scale4,
|
|
15382
|
+
variance: shape * scale4 * scale4,
|
|
15383
|
+
sample: () => _gammaRandom(shape) * scale4,
|
|
15384
|
+
sampleN: (n, opts) => _sampleNDispatch("gamma", [shape, scale4], n, opts, (count2, rng) => {
|
|
15248
15385
|
const out = new Float64Array(count2);
|
|
15249
15386
|
for (let i = 0; i < count2; i++) {
|
|
15250
|
-
out[i] = _gammaRandomRng(shape, rng) *
|
|
15387
|
+
out[i] = _gammaRandomRng(shape, rng) * scale4;
|
|
15251
15388
|
}
|
|
15252
15389
|
return out;
|
|
15253
15390
|
})
|
|
@@ -16638,9 +16775,9 @@ function principalComponentAnalysis(data, k) {
|
|
|
16638
16775
|
const explained = eigenvalues.map((ev) => totalVar > 0 ? Math.abs(ev) / totalVar : 0);
|
|
16639
16776
|
const scores = centered.map((row2) => {
|
|
16640
16777
|
return eigenvectors.map((ev) => {
|
|
16641
|
-
let
|
|
16642
|
-
for (let j = 0; j < p; j++)
|
|
16643
|
-
return
|
|
16778
|
+
let dot8 = 0;
|
|
16779
|
+
for (let j = 0; j < p; j++) dot8 += row2[j] * ev[j];
|
|
16780
|
+
return dot8;
|
|
16644
16781
|
});
|
|
16645
16782
|
});
|
|
16646
16783
|
return { components: eigenvectors, explained, scores };
|
|
@@ -17167,9 +17304,9 @@ function rowReduce(A, tol = 1e-10) {
|
|
|
17167
17304
|
if (maxRow !== pivotRow) {
|
|
17168
17305
|
[M[pivotRow], M[maxRow]] = [M[maxRow], M[pivotRow]];
|
|
17169
17306
|
}
|
|
17170
|
-
const
|
|
17307
|
+
const scale4 = M[pivotRow][col];
|
|
17171
17308
|
for (let j = col; j < n; j++) {
|
|
17172
|
-
M[pivotRow][j] /=
|
|
17309
|
+
M[pivotRow][j] /= scale4;
|
|
17173
17310
|
}
|
|
17174
17311
|
for (let row2 = 0; row2 < m; row2++) {
|
|
17175
17312
|
if (row2 === pivotRow) continue;
|
|
@@ -17255,30 +17392,30 @@ function hessenbergForm(A) {
|
|
|
17255
17392
|
if (normV < 1e-30) continue;
|
|
17256
17393
|
const beta2 = 2 / normV;
|
|
17257
17394
|
for (let j = k; j < n; j++) {
|
|
17258
|
-
let
|
|
17395
|
+
let dot8 = 0;
|
|
17259
17396
|
for (let i = 0; i < len; i++) {
|
|
17260
|
-
|
|
17397
|
+
dot8 += v[i] * H[k + 1 + i][j];
|
|
17261
17398
|
}
|
|
17262
17399
|
for (let i = 0; i < len; i++) {
|
|
17263
|
-
H[k + 1 + i][j] -= beta2 * v[i] *
|
|
17400
|
+
H[k + 1 + i][j] -= beta2 * v[i] * dot8;
|
|
17264
17401
|
}
|
|
17265
17402
|
}
|
|
17266
17403
|
for (let i = 0; i < n; i++) {
|
|
17267
|
-
let
|
|
17404
|
+
let dot8 = 0;
|
|
17268
17405
|
for (let j = 0; j < len; j++) {
|
|
17269
|
-
|
|
17406
|
+
dot8 += H[i][k + 1 + j] * v[j];
|
|
17270
17407
|
}
|
|
17271
17408
|
for (let j = 0; j < len; j++) {
|
|
17272
|
-
H[i][k + 1 + j] -= beta2 *
|
|
17409
|
+
H[i][k + 1 + j] -= beta2 * dot8 * v[j];
|
|
17273
17410
|
}
|
|
17274
17411
|
}
|
|
17275
17412
|
for (let i = 0; i < n; i++) {
|
|
17276
|
-
let
|
|
17413
|
+
let dot8 = 0;
|
|
17277
17414
|
for (let j = 0; j < len; j++) {
|
|
17278
|
-
|
|
17415
|
+
dot8 += Q2[i][k + 1 + j] * v[j];
|
|
17279
17416
|
}
|
|
17280
17417
|
for (let j = 0; j < len; j++) {
|
|
17281
|
-
Q2[i][k + 1 + j] -= beta2 *
|
|
17418
|
+
Q2[i][k + 1 + j] -= beta2 * dot8 * v[j];
|
|
17282
17419
|
}
|
|
17283
17420
|
}
|
|
17284
17421
|
}
|
|
@@ -17337,8 +17474,8 @@ function matrixInverse(A) {
|
|
|
17337
17474
|
}
|
|
17338
17475
|
if (maxVal < 1e-15) throw new Error("matrixPower: singular matrix cannot be inverted");
|
|
17339
17476
|
if (maxRow !== col) [M[col], M[maxRow]] = [M[maxRow], M[col]];
|
|
17340
|
-
const
|
|
17341
|
-
for (let j = 0; j < 2 * n; j++) M[col][j] /=
|
|
17477
|
+
const scale4 = M[col][col];
|
|
17478
|
+
for (let j = 0; j < 2 * n; j++) M[col][j] /= scale4;
|
|
17342
17479
|
for (let row2 = 0; row2 < n; row2++) {
|
|
17343
17480
|
if (row2 === col) continue;
|
|
17344
17481
|
const factor2 = M[row2][col];
|
|
@@ -17412,10 +17549,10 @@ async function matLogScalingSquaring(A) {
|
|
|
17412
17549
|
}
|
|
17413
17550
|
}
|
|
17414
17551
|
}
|
|
17415
|
-
const
|
|
17552
|
+
const scale4 = Math.pow(2, numSquares);
|
|
17416
17553
|
for (let i = 0; i < n; i++) {
|
|
17417
17554
|
for (let j = 0; j < n; j++) {
|
|
17418
|
-
logM[i][j] *=
|
|
17555
|
+
logM[i][j] *= scale4;
|
|
17419
17556
|
}
|
|
17420
17557
|
}
|
|
17421
17558
|
return logM;
|
|
@@ -17678,9 +17815,9 @@ async function solveApprox(A, b, n) {
|
|
|
17678
17815
|
}
|
|
17679
17816
|
}
|
|
17680
17817
|
if (maxRow !== col) [M[col], M[maxRow]] = [M[maxRow], M[col]];
|
|
17681
|
-
const
|
|
17682
|
-
if (Math.abs(
|
|
17683
|
-
for (let j = 0; j <= n; j++) M[col][j] /=
|
|
17818
|
+
const scale4 = M[col][col];
|
|
17819
|
+
if (Math.abs(scale4) < 1e-30) continue;
|
|
17820
|
+
for (let j = 0; j <= n; j++) M[col][j] /= scale4;
|
|
17684
17821
|
for (let row2 = 0; row2 < n; row2++) {
|
|
17685
17822
|
if (row2 === col) continue;
|
|
17686
17823
|
const factor2 = M[row2][col];
|
|
@@ -22491,41 +22628,41 @@ var createDot = /* @__PURE__ */ factory(
|
|
|
22491
22628
|
const bdt = isMatrix(b) ? b._datatype || b.getDataType() : void 0;
|
|
22492
22629
|
const aIsColumn = _size(a).length === 2;
|
|
22493
22630
|
const bIsColumn = _size(b).length === 2;
|
|
22494
|
-
let
|
|
22631
|
+
let add4 = addScalar2;
|
|
22495
22632
|
let mul = multiplyScalar2;
|
|
22496
22633
|
if (adt && bdt && adt === bdt && typeof adt === "string" && adt !== "mixed") {
|
|
22497
22634
|
const dt = adt;
|
|
22498
|
-
|
|
22635
|
+
add4 = typed3.find(addScalar2, [dt, dt]);
|
|
22499
22636
|
mul = typed3.find(multiplyScalar2, [dt, dt]);
|
|
22500
22637
|
}
|
|
22501
|
-
if (!aIsColumn && !bIsColumn &&
|
|
22638
|
+
if (!aIsColumn && !bIsColumn && add4 === addScalar2 && mul === multiplyScalar2 && _isFlatNumbers(adata) && _isFlatNumbers(bdata)) {
|
|
22502
22639
|
return pairwiseDot2(adata, bdata);
|
|
22503
22640
|
}
|
|
22504
22641
|
if (!aIsColumn && !bIsColumn) {
|
|
22505
22642
|
let c = mul(conj3(adata[0]), bdata[0]);
|
|
22506
22643
|
for (let i = 1; i < N; i++) {
|
|
22507
|
-
c =
|
|
22644
|
+
c = add4(c, mul(conj3(adata[i]), bdata[i]));
|
|
22508
22645
|
}
|
|
22509
22646
|
return c;
|
|
22510
22647
|
}
|
|
22511
22648
|
if (!aIsColumn && bIsColumn) {
|
|
22512
22649
|
let c = mul(conj3(adata[0]), bdata[0][0]);
|
|
22513
22650
|
for (let i = 1; i < N; i++) {
|
|
22514
|
-
c =
|
|
22651
|
+
c = add4(c, mul(conj3(adata[i]), bdata[i][0]));
|
|
22515
22652
|
}
|
|
22516
22653
|
return c;
|
|
22517
22654
|
}
|
|
22518
22655
|
if (aIsColumn && !bIsColumn) {
|
|
22519
22656
|
let c = mul(conj3(adata[0][0]), bdata[0]);
|
|
22520
22657
|
for (let i = 1; i < N; i++) {
|
|
22521
|
-
c =
|
|
22658
|
+
c = add4(c, mul(conj3(adata[i][0]), bdata[i]));
|
|
22522
22659
|
}
|
|
22523
22660
|
return c;
|
|
22524
22661
|
}
|
|
22525
22662
|
{
|
|
22526
22663
|
let c = mul(conj3(adata[0][0]), bdata[0][0]);
|
|
22527
22664
|
for (let i = 1; i < N; i++) {
|
|
22528
|
-
c =
|
|
22665
|
+
c = add4(c, mul(conj3(adata[i][0]), bdata[i][0]));
|
|
22529
22666
|
}
|
|
22530
22667
|
return c;
|
|
22531
22668
|
}
|
|
@@ -22537,7 +22674,7 @@ var createDot = /* @__PURE__ */ factory(
|
|
|
22537
22674
|
const yindex = y._index;
|
|
22538
22675
|
const yvalues = y._values;
|
|
22539
22676
|
let c = 0;
|
|
22540
|
-
const
|
|
22677
|
+
const add4 = addScalar2;
|
|
22541
22678
|
const mul = multiplyScalar2;
|
|
22542
22679
|
let i = 0;
|
|
22543
22680
|
let j = 0;
|
|
@@ -22553,7 +22690,7 @@ var createDot = /* @__PURE__ */ factory(
|
|
|
22553
22690
|
continue;
|
|
22554
22691
|
}
|
|
22555
22692
|
if (I2 === J) {
|
|
22556
|
-
c =
|
|
22693
|
+
c = add4(c, mul(xvalues[i], yvalues[j]));
|
|
22557
22694
|
i++;
|
|
22558
22695
|
j++;
|
|
22559
22696
|
}
|
|
@@ -23645,7 +23782,7 @@ var dependencies95 = ["typed", "matrix", "add"];
|
|
|
23645
23782
|
var createTrace = /* @__PURE__ */ factory(
|
|
23646
23783
|
name95,
|
|
23647
23784
|
dependencies95,
|
|
23648
|
-
({ typed: typed3, matrix: matrix2, add:
|
|
23785
|
+
({ typed: typed3, matrix: matrix2, add: add4 }) => {
|
|
23649
23786
|
return typed3("trace", {
|
|
23650
23787
|
Array: function _arrayTrace(x) {
|
|
23651
23788
|
return _denseTrace(matrix2(x));
|
|
@@ -23669,7 +23806,7 @@ var createTrace = /* @__PURE__ */ factory(
|
|
|
23669
23806
|
if (rows === cols) {
|
|
23670
23807
|
let sum3 = 0;
|
|
23671
23808
|
for (let i = 0; i < rows; i++) {
|
|
23672
|
-
sum3 =
|
|
23809
|
+
sum3 = add4(sum3, data[i][i]);
|
|
23673
23810
|
}
|
|
23674
23811
|
return sum3;
|
|
23675
23812
|
} else {
|
|
@@ -23696,7 +23833,7 @@ var createTrace = /* @__PURE__ */ factory(
|
|
|
23696
23833
|
for (let k = k0; k < k1; k++) {
|
|
23697
23834
|
const i = index[k];
|
|
23698
23835
|
if (i === j) {
|
|
23699
|
-
sum3 =
|
|
23836
|
+
sum3 = add4(sum3, values[k]);
|
|
23700
23837
|
break;
|
|
23701
23838
|
}
|
|
23702
23839
|
if (i > j) {
|
|
@@ -24063,7 +24200,7 @@ var dependencies98 = ["add", "multiply", "transpose"];
|
|
|
24063
24200
|
var createCsAmd = /* @__PURE__ */ factory(
|
|
24064
24201
|
name98,
|
|
24065
24202
|
dependencies98,
|
|
24066
|
-
({ add:
|
|
24203
|
+
({ add: add4, multiply: multiply2, transpose: transpose5 }) => {
|
|
24067
24204
|
function _tryWasmAmd(a, n) {
|
|
24068
24205
|
const wasm = wasmLoader.getModule();
|
|
24069
24206
|
if (!wasm || !a._ptr || !a._index) return null;
|
|
@@ -24359,7 +24496,7 @@ var createCsAmd = /* @__PURE__ */ factory(
|
|
|
24359
24496
|
function _createTargetMatrix(order, a, m, n, dense) {
|
|
24360
24497
|
const at = transpose5(a);
|
|
24361
24498
|
if (order === 1 && n === m) {
|
|
24362
|
-
return
|
|
24499
|
+
return add4(a, at);
|
|
24363
24500
|
}
|
|
24364
24501
|
if (order === 2) {
|
|
24365
24502
|
const tindex = at._index;
|
|
@@ -24708,8 +24845,8 @@ var dependencies100 = ["add", "multiply", "transpose"];
|
|
|
24708
24845
|
var createCsSqr = /* @__PURE__ */ factory(
|
|
24709
24846
|
name100,
|
|
24710
24847
|
dependencies100,
|
|
24711
|
-
({ add:
|
|
24712
|
-
const csAmd2 = createCsAmd({ add:
|
|
24848
|
+
({ add: add4, multiply: multiply2, transpose: transpose5 }) => {
|
|
24849
|
+
const csAmd2 = createCsAmd({ add: add4, multiply: multiply2, transpose: transpose5 });
|
|
24713
24850
|
const csCounts2 = createCsCounts({ transpose: transpose5 });
|
|
24714
24851
|
return function csSqr2(order, a, qr2) {
|
|
24715
24852
|
const aptr = a._ptr;
|
|
@@ -26715,7 +26852,7 @@ var createSubset = /* @__PURE__ */ factory(
|
|
|
26715
26852
|
typed: typed3,
|
|
26716
26853
|
matrix: matrix2,
|
|
26717
26854
|
zeros: zeros4,
|
|
26718
|
-
add:
|
|
26855
|
+
add: add4
|
|
26719
26856
|
}) => {
|
|
26720
26857
|
const referTo = typed3.referTo;
|
|
26721
26858
|
return typed3(name119, {
|
|
@@ -26774,7 +26911,7 @@ var createSubset = /* @__PURE__ */ factory(
|
|
|
26774
26911
|
const indexSize = index.size();
|
|
26775
26912
|
if (indexSize.every((d) => d > 0)) {
|
|
26776
26913
|
try {
|
|
26777
|
-
return
|
|
26914
|
+
return add4(replacement, zeros4(indexSize));
|
|
26778
26915
|
} catch {
|
|
26779
26916
|
return replacement;
|
|
26780
26917
|
}
|
|
@@ -27447,7 +27584,7 @@ var dependencies127 = ["typed", "add", "multiply", "Complex", "number"];
|
|
|
27447
27584
|
var createZpk2tf = /* @__PURE__ */ factory(
|
|
27448
27585
|
name127,
|
|
27449
27586
|
dependencies127,
|
|
27450
|
-
({ typed: typed3, add:
|
|
27587
|
+
({ typed: typed3, add: add4, multiply: multiply2, Complex: Complex13, number: number2 }) => {
|
|
27451
27588
|
return typed3(name127, {
|
|
27452
27589
|
"Array,Array,number": function(z, p, k) {
|
|
27453
27590
|
return _zpk2tf(z, p, k);
|
|
@@ -27492,7 +27629,7 @@ var createZpk2tf = /* @__PURE__ */ factory(
|
|
|
27492
27629
|
c[i] = Complex13(0, 0);
|
|
27493
27630
|
for (let j = 0; j < a.length; j++) {
|
|
27494
27631
|
if (i - j >= 0 && i - j < b.length) {
|
|
27495
|
-
c[i] =
|
|
27632
|
+
c[i] = add4(c[i], multiply2(a[j], b[i - j]));
|
|
27496
27633
|
}
|
|
27497
27634
|
}
|
|
27498
27635
|
}
|
|
@@ -27516,7 +27653,7 @@ var dependencies128 = ["typed", "add", "unaryPlus"];
|
|
|
27516
27653
|
var createCumSum = /* @__PURE__ */ factory(
|
|
27517
27654
|
name128,
|
|
27518
27655
|
dependencies128,
|
|
27519
|
-
({ typed: typed3, add:
|
|
27656
|
+
({ typed: typed3, add: add4, unaryPlus: unaryPlus2 }) => {
|
|
27520
27657
|
return typed3(name128, {
|
|
27521
27658
|
// sum([a, b, c, d, ...])
|
|
27522
27659
|
Array: _cumsum,
|
|
@@ -27557,7 +27694,7 @@ var createCumSum = /* @__PURE__ */ factory(
|
|
|
27557
27694
|
}
|
|
27558
27695
|
const sums = [unaryPlus2(array[0])];
|
|
27559
27696
|
for (let i = 1; i < array.length; ++i) {
|
|
27560
|
-
sums.push(
|
|
27697
|
+
sums.push(add4(sums[i - 1], array[i]));
|
|
27561
27698
|
}
|
|
27562
27699
|
return sums;
|
|
27563
27700
|
}
|
|
@@ -27615,7 +27752,7 @@ var dependencies129 = ["typed", "config", "add", "numeric", "parseNumberWithConf
|
|
|
27615
27752
|
var createSum = /* @__PURE__ */ factory(
|
|
27616
27753
|
name129,
|
|
27617
27754
|
dependencies129,
|
|
27618
|
-
({ typed: typed3, config: config2, add:
|
|
27755
|
+
({ typed: typed3, config: config2, add: add4, numeric: numeric2, parseNumberWithConfig: parseNumberWithConfig2 }) => {
|
|
27619
27756
|
return typed3(name129, {
|
|
27620
27757
|
// sum(string) - single string input
|
|
27621
27758
|
string: function(x) {
|
|
@@ -27641,7 +27778,7 @@ var createSum = /* @__PURE__ */ factory(
|
|
|
27641
27778
|
deepForEach2(array, function(value) {
|
|
27642
27779
|
try {
|
|
27643
27780
|
const converted = typeof value === "string" ? parseNumberWithConfig2(value) : value;
|
|
27644
|
-
sum3 = sum3 === void 0 ? converted :
|
|
27781
|
+
sum3 = sum3 === void 0 ? converted : add4(sum3, converted);
|
|
27645
27782
|
} catch (err) {
|
|
27646
27783
|
throw improveErrorMessage(err, "sum", value);
|
|
27647
27784
|
}
|
|
@@ -27654,7 +27791,7 @@ var createSum = /* @__PURE__ */ factory(
|
|
|
27654
27791
|
function _nsumDim(array, dim) {
|
|
27655
27792
|
try {
|
|
27656
27793
|
const dimValue = typeof dim === "number" ? dim : dim.valueOf();
|
|
27657
|
-
const sum3 = reduce2(array, dimValue,
|
|
27794
|
+
const sum3 = reduce2(array, dimValue, add4);
|
|
27658
27795
|
return sum3;
|
|
27659
27796
|
} catch (err) {
|
|
27660
27797
|
throw improveErrorMessage(err, "sum", void 0);
|
|
@@ -28446,7 +28583,7 @@ var createGcd = /* @__PURE__ */ factory(
|
|
|
28446
28583
|
DenseMatrix: DenseMatrix6,
|
|
28447
28584
|
concat: concat3
|
|
28448
28585
|
}) => {
|
|
28449
|
-
const
|
|
28586
|
+
const mod3 = createMod({
|
|
28450
28587
|
typed: typed3,
|
|
28451
28588
|
config: config2,
|
|
28452
28589
|
round: round2,
|
|
@@ -28532,7 +28669,7 @@ var createGcd = /* @__PURE__ */ factory(
|
|
|
28532
28669
|
}
|
|
28533
28670
|
let r;
|
|
28534
28671
|
while (b !== 0) {
|
|
28535
|
-
r =
|
|
28672
|
+
r = mod3(a, b);
|
|
28536
28673
|
a = b;
|
|
28537
28674
|
b = r;
|
|
28538
28675
|
}
|
|
@@ -28544,7 +28681,7 @@ var createGcd = /* @__PURE__ */ factory(
|
|
|
28544
28681
|
}
|
|
28545
28682
|
const zero = new BigNumber9(0);
|
|
28546
28683
|
while (!b.isZero()) {
|
|
28547
|
-
const r =
|
|
28684
|
+
const r = mod3(a, b);
|
|
28548
28685
|
a = b;
|
|
28549
28686
|
b = r;
|
|
28550
28687
|
}
|
|
@@ -30315,8 +30452,8 @@ var createInvmod = /* @__PURE__ */ factory(
|
|
|
30315
30452
|
xgcd: xgcd2,
|
|
30316
30453
|
equal: equal2,
|
|
30317
30454
|
smaller: smaller2,
|
|
30318
|
-
mod:
|
|
30319
|
-
add:
|
|
30455
|
+
mod: mod3,
|
|
30456
|
+
add: add4,
|
|
30320
30457
|
isInteger: isInteger3
|
|
30321
30458
|
}) => {
|
|
30322
30459
|
return typed3(name168, {
|
|
@@ -30326,14 +30463,14 @@ var createInvmod = /* @__PURE__ */ factory(
|
|
|
30326
30463
|
function invmod2(a, b) {
|
|
30327
30464
|
if (!isInteger3(a) || !isInteger3(b))
|
|
30328
30465
|
throw new Error("Parameters in function invmod must be integer numbers");
|
|
30329
|
-
a =
|
|
30466
|
+
a = mod3(a, b);
|
|
30330
30467
|
if (equal2(b, 0)) throw new Error("Divisor must be non zero");
|
|
30331
30468
|
const res = xgcd2(a, b);
|
|
30332
30469
|
const resVal = res.valueOf();
|
|
30333
30470
|
const [gcd2, invValue] = resVal;
|
|
30334
30471
|
if (!equal2(gcd2, 1)) return NaN;
|
|
30335
|
-
let inv3 =
|
|
30336
|
-
if (smaller2(inv3, 0)) inv3 =
|
|
30472
|
+
let inv3 = mod3(invValue, b);
|
|
30473
|
+
if (smaller2(inv3, 0)) inv3 = add4(inv3, b);
|
|
30337
30474
|
return inv3;
|
|
30338
30475
|
}
|
|
30339
30476
|
}
|
|
@@ -30590,11 +30727,11 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30590
30727
|
deepEqual: deepEqual3,
|
|
30591
30728
|
equal: equal2,
|
|
30592
30729
|
dotDivide: dotDivide2,
|
|
30593
|
-
dot:
|
|
30730
|
+
dot: dot8,
|
|
30594
30731
|
ctranspose: ctranspose2,
|
|
30595
30732
|
divideScalar: divideScalar2,
|
|
30596
30733
|
multiply: multiply2,
|
|
30597
|
-
add:
|
|
30734
|
+
add: add4,
|
|
30598
30735
|
Complex: Complex13
|
|
30599
30736
|
}) => {
|
|
30600
30737
|
return typed3(name172, {
|
|
@@ -30606,7 +30743,7 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30606
30743
|
if (size2[0] === 1) {
|
|
30607
30744
|
return inv3(x);
|
|
30608
30745
|
} else {
|
|
30609
|
-
return dotDivide2(ctranspose2(x),
|
|
30746
|
+
return dotDivide2(ctranspose2(x), dot8(x, x));
|
|
30610
30747
|
}
|
|
30611
30748
|
case 2: {
|
|
30612
30749
|
if (_isZeros(x)) return ctranspose2(x);
|
|
@@ -30676,7 +30813,7 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30676
30813
|
if (i2 === r) continue;
|
|
30677
30814
|
val = M[i2][lead];
|
|
30678
30815
|
for (let j = 0; j < cols; j++) {
|
|
30679
|
-
M[i2][j] =
|
|
30816
|
+
M[i2][j] = add4(M[i2][j], multiply2(-1, multiply2(val, M[r][j])));
|
|
30680
30817
|
}
|
|
30681
30818
|
}
|
|
30682
30819
|
lead++;
|
|
@@ -30685,17 +30822,17 @@ var createPinv = /* @__PURE__ */ factory(
|
|
|
30685
30822
|
}
|
|
30686
30823
|
function _rankFact(mat, rows, cols) {
|
|
30687
30824
|
const rref = _rref(mat, rows, cols);
|
|
30688
|
-
const C = mat.map((row2) => row2.filter((_, j) => j < rows && !_isZero(
|
|
30689
|
-
const F = rref.filter((_, i) => !_isZero(
|
|
30825
|
+
const C = mat.map((row2) => row2.filter((_, j) => j < rows && !_isZero(dot8(rref[j], rref[j]))));
|
|
30826
|
+
const F = rref.filter((_, i) => !_isZero(dot8(rref[i], rref[i])));
|
|
30690
30827
|
return { C, F };
|
|
30691
30828
|
}
|
|
30692
30829
|
function _isZero(x) {
|
|
30693
|
-
return equal2(
|
|
30830
|
+
return equal2(add4(x, Complex13(1, 1)), add4(0, Complex13(1, 1)));
|
|
30694
30831
|
}
|
|
30695
30832
|
function _isZeros(arr10) {
|
|
30696
30833
|
return deepEqual3(
|
|
30697
|
-
|
|
30698
|
-
|
|
30834
|
+
add4(arr10, Complex13(1, 1)),
|
|
30835
|
+
add4(multiply2(arr10, 0), Complex13(1, 1))
|
|
30699
30836
|
);
|
|
30700
30837
|
}
|
|
30701
30838
|
}
|
|
@@ -30926,7 +31063,7 @@ var createRange = /* @__PURE__ */ factory(
|
|
|
30926
31063
|
smallerEq: smallerEq2,
|
|
30927
31064
|
larger: larger2,
|
|
30928
31065
|
largerEq: largerEq2,
|
|
30929
|
-
add:
|
|
31066
|
+
add: add4,
|
|
30930
31067
|
isZero: isZero2,
|
|
30931
31068
|
isPositive: isPositive2
|
|
30932
31069
|
}) => {
|
|
@@ -31039,7 +31176,7 @@ var createRange = /* @__PURE__ */ factory(
|
|
|
31039
31176
|
let x = start;
|
|
31040
31177
|
while (ongoing(x, end)) {
|
|
31041
31178
|
array.push(x);
|
|
31042
|
-
x =
|
|
31179
|
+
x = add4(x, step);
|
|
31043
31180
|
}
|
|
31044
31181
|
return array;
|
|
31045
31182
|
}
|
|
@@ -34712,7 +34849,7 @@ var dependencies211 = [
|
|
|
34712
34849
|
var createSqrtm = /* @__PURE__ */ factory(
|
|
34713
34850
|
name211,
|
|
34714
34851
|
dependencies211,
|
|
34715
|
-
({ typed: typed3, abs: abs2, add:
|
|
34852
|
+
({ typed: typed3, abs: abs2, add: add4, multiply: multiply2, map: map2, sqrt: sqrt2, subtract: subtract3, inv: inv3, size: size2, max: max2, identity: identity2 }) => {
|
|
34716
34853
|
const _maxIterations = 1e3;
|
|
34717
34854
|
const _tolerance = 1e-6;
|
|
34718
34855
|
function _tryWasmSqrtm(A, n) {
|
|
@@ -34778,8 +34915,8 @@ var createSqrtm = /* @__PURE__ */ factory(
|
|
|
34778
34915
|
let Z = identity2(size2(A));
|
|
34779
34916
|
do {
|
|
34780
34917
|
const Yk = Y;
|
|
34781
|
-
Y = multiply2(0.5,
|
|
34782
|
-
Z = multiply2(0.5,
|
|
34918
|
+
Y = multiply2(0.5, add4(Yk, inv3(Z)));
|
|
34919
|
+
Z = multiply2(0.5, add4(Z, inv3(Yk)));
|
|
34783
34920
|
error = max2(abs2(subtract3(Y, Yk)));
|
|
34784
34921
|
if (error > _tolerance && ++iterations > _maxIterations) {
|
|
34785
34922
|
throw new Error("computing square root of matrix: iterative method could not converge");
|
|
@@ -35417,7 +35554,7 @@ var createSlu = /* @__PURE__ */ factory(
|
|
|
35417
35554
|
({
|
|
35418
35555
|
typed: typed3,
|
|
35419
35556
|
abs: abs2,
|
|
35420
|
-
add:
|
|
35557
|
+
add: add4,
|
|
35421
35558
|
multiply: multiply2,
|
|
35422
35559
|
transpose: transpose5,
|
|
35423
35560
|
divideScalar: divideScalar2,
|
|
@@ -35426,7 +35563,7 @@ var createSlu = /* @__PURE__ */ factory(
|
|
|
35426
35563
|
largerEq: largerEq2,
|
|
35427
35564
|
SparseMatrix
|
|
35428
35565
|
}) => {
|
|
35429
|
-
const csSqr2 = createCsSqr({ add:
|
|
35566
|
+
const csSqr2 = createCsSqr({ add: add4, multiply: multiply2, transpose: transpose5 });
|
|
35430
35567
|
const csLu2 = createCsLu({
|
|
35431
35568
|
abs: abs2,
|
|
35432
35569
|
divideScalar: divideScalar2,
|
|
@@ -35731,7 +35868,7 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35731
35868
|
typed: typed3,
|
|
35732
35869
|
config: config2,
|
|
35733
35870
|
abs: abs2,
|
|
35734
|
-
add:
|
|
35871
|
+
add: add4,
|
|
35735
35872
|
addScalar: addScalar2,
|
|
35736
35873
|
matrix: matrix2,
|
|
35737
35874
|
multiply: multiply2,
|
|
@@ -35871,7 +36008,7 @@ var createIntersect = /* @__PURE__ */ factory(
|
|
|
35871
36008
|
),
|
|
35872
36009
|
det2
|
|
35873
36010
|
);
|
|
35874
|
-
return
|
|
36011
|
+
return add4(multiply2(d1, t), o1);
|
|
35875
36012
|
}
|
|
35876
36013
|
function _tryWasmIntersect2d(p1a, p1b, p2a, p2b) {
|
|
35877
36014
|
const wasm = wasmLoader.getModule();
|
|
@@ -35987,7 +36124,7 @@ var dependencies219 = ["typed", "add", "divide"];
|
|
|
35987
36124
|
var createMean = /* @__PURE__ */ factory(
|
|
35988
36125
|
name219,
|
|
35989
36126
|
dependencies219,
|
|
35990
|
-
({ typed: typed3, add:
|
|
36127
|
+
({ typed: typed3, add: add4, divide: divide2 }) => {
|
|
35991
36128
|
return typed3(name219, {
|
|
35992
36129
|
// mean([a, b, c, d, ...])
|
|
35993
36130
|
"Array | Matrix": _mean2,
|
|
@@ -36004,7 +36141,7 @@ var createMean = /* @__PURE__ */ factory(
|
|
|
36004
36141
|
function _nmeanDim(array, dim) {
|
|
36005
36142
|
try {
|
|
36006
36143
|
const dimValue = typeof dim === "number" ? dim : dim.valueOf();
|
|
36007
|
-
const sum3 = reduce2(array, dimValue,
|
|
36144
|
+
const sum3 = reduce2(array, dimValue, add4);
|
|
36008
36145
|
const s = Array.isArray(array) ? arraySize(array) : array.size();
|
|
36009
36146
|
return divide2(sum3, s[dimValue]);
|
|
36010
36147
|
} catch (err) {
|
|
@@ -36032,7 +36169,7 @@ var createMean = /* @__PURE__ */ factory(
|
|
|
36032
36169
|
let num2 = 0;
|
|
36033
36170
|
deepForEach2(array, function(value) {
|
|
36034
36171
|
try {
|
|
36035
|
-
sum3 = sum3 === void 0 ? value :
|
|
36172
|
+
sum3 = sum3 === void 0 ? value : add4(sum3, value);
|
|
36036
36173
|
num2++;
|
|
36037
36174
|
} catch (err) {
|
|
36038
36175
|
throw improveErrorMessage(err, "mean", value);
|
|
@@ -36052,7 +36189,7 @@ var dependencies220 = ["typed", "add", "divide", "compare", "partitionSelect"];
|
|
|
36052
36189
|
var createMedian = /* @__PURE__ */ factory(
|
|
36053
36190
|
name220,
|
|
36054
36191
|
dependencies220,
|
|
36055
|
-
({ typed: typed3, add:
|
|
36192
|
+
({ typed: typed3, add: add4, divide: divide2, compare: compare2, partitionSelect: partitionSelect2 }) => {
|
|
36056
36193
|
function _median2(array) {
|
|
36057
36194
|
try {
|
|
36058
36195
|
const flat = flatten2(array.valueOf());
|
|
@@ -36085,7 +36222,7 @@ var createMedian = /* @__PURE__ */ factory(
|
|
|
36085
36222
|
});
|
|
36086
36223
|
const middle2 = typed3({
|
|
36087
36224
|
"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit": function(left, right) {
|
|
36088
|
-
return divide2(
|
|
36225
|
+
return divide2(add4(left, right), 2);
|
|
36089
36226
|
}
|
|
36090
36227
|
});
|
|
36091
36228
|
return typed3(name220, {
|
|
@@ -36124,7 +36261,7 @@ var createVariance = /* @__PURE__ */ factory(
|
|
|
36124
36261
|
dependencies221,
|
|
36125
36262
|
({
|
|
36126
36263
|
typed: typed3,
|
|
36127
|
-
add:
|
|
36264
|
+
add: add4,
|
|
36128
36265
|
subtract: subtract3,
|
|
36129
36266
|
multiply: multiply2,
|
|
36130
36267
|
divide: divide2,
|
|
@@ -36173,7 +36310,7 @@ var createVariance = /* @__PURE__ */ factory(
|
|
|
36173
36310
|
let num2 = 0;
|
|
36174
36311
|
deepForEach2(array, function(value) {
|
|
36175
36312
|
try {
|
|
36176
|
-
sum3 = sum3 === void 0 ? value :
|
|
36313
|
+
sum3 = sum3 === void 0 ? value : add4(sum3, value);
|
|
36177
36314
|
num2++;
|
|
36178
36315
|
} catch (err) {
|
|
36179
36316
|
throw improveErrorMessage(err, "variance", value);
|
|
@@ -36184,7 +36321,7 @@ var createVariance = /* @__PURE__ */ factory(
|
|
|
36184
36321
|
sum3 = void 0;
|
|
36185
36322
|
deepForEach2(array, function(value) {
|
|
36186
36323
|
const diff2 = subtract3(value, mean7);
|
|
36187
|
-
sum3 = sum3 === void 0 ? multiply2(diff2, diff2) :
|
|
36324
|
+
sum3 = sum3 === void 0 ? multiply2(diff2, diff2) : add4(sum3, multiply2(diff2, diff2));
|
|
36188
36325
|
});
|
|
36189
36326
|
if (mathIsNaN(sum3)) {
|
|
36190
36327
|
return sum3;
|
|
@@ -36259,7 +36396,7 @@ var createQuantileSeq = /* @__PURE__ */ factory(
|
|
|
36259
36396
|
({
|
|
36260
36397
|
typed: typed3,
|
|
36261
36398
|
bignumber: bignumber2,
|
|
36262
|
-
add:
|
|
36399
|
+
add: add4,
|
|
36263
36400
|
subtract: subtract3,
|
|
36264
36401
|
divide: divide2,
|
|
36265
36402
|
multiply: multiply2,
|
|
@@ -36307,7 +36444,7 @@ var createQuantileSeq = /* @__PURE__ */ factory(
|
|
|
36307
36444
|
"N must be less than or equal to 2^32-1, as that is the maximum length of an Array"
|
|
36308
36445
|
);
|
|
36309
36446
|
}
|
|
36310
|
-
const nPlusOne =
|
|
36447
|
+
const nPlusOne = add4(probOrN, 1);
|
|
36311
36448
|
probArr = [];
|
|
36312
36449
|
for (let i = 0; smaller2(i, probOrN); i++) {
|
|
36313
36450
|
const prob = divide2(i + 1, nPlusOne);
|
|
@@ -36364,11 +36501,11 @@ var createQuantileSeq = /* @__PURE__ */ factory(
|
|
|
36364
36501
|
return integerPart % 2 === 0 ? left : right;
|
|
36365
36502
|
}
|
|
36366
36503
|
case "midpoint":
|
|
36367
|
-
return divide2(
|
|
36504
|
+
return divide2(add4(left, right), 2);
|
|
36368
36505
|
case "linear":
|
|
36369
36506
|
default: {
|
|
36370
36507
|
const fracPartConverted = isBigNumber(left) && isNumber(fracPart) ? bignumber2(fracPart) : fracPart;
|
|
36371
|
-
return
|
|
36508
|
+
return add4(
|
|
36372
36509
|
multiply2(left, subtract3(1, fracPartConverted)),
|
|
36373
36510
|
multiply2(right, fracPartConverted)
|
|
36374
36511
|
);
|
|
@@ -36462,7 +36599,7 @@ var dependencies224 = ["typed", "add", "divide", "multiply", "factorial", "isInt
|
|
|
36462
36599
|
var createMultinomial = /* @__PURE__ */ factory(
|
|
36463
36600
|
name224,
|
|
36464
36601
|
dependencies224,
|
|
36465
|
-
({ typed: typed3, add:
|
|
36602
|
+
({ typed: typed3, add: add4, divide: divide2, multiply: multiply2, factorial: factorial5, isInteger: isInteger3, isPositive: isPositive2 }) => {
|
|
36466
36603
|
return typed3(name224, {
|
|
36467
36604
|
"Array | Matrix": function(a) {
|
|
36468
36605
|
let sum3 = 0;
|
|
@@ -36471,7 +36608,7 @@ var createMultinomial = /* @__PURE__ */ factory(
|
|
|
36471
36608
|
if (!isInteger3(ai) || !isPositive2(ai)) {
|
|
36472
36609
|
throw new TypeError("Positive integer value expected in function multinomial");
|
|
36473
36610
|
}
|
|
36474
|
-
sum3 =
|
|
36611
|
+
sum3 = add4(sum3, ai);
|
|
36475
36612
|
denom = multiply2(denom, factorial5(ai));
|
|
36476
36613
|
});
|
|
36477
36614
|
return divide2(factorial5(sum3), denom);
|
|
@@ -36487,7 +36624,7 @@ var dependencies225 = ["typed", "add", "multiply", "Complex", "divide", "matrix"
|
|
|
36487
36624
|
var createFreqz = /* @__PURE__ */ factory(
|
|
36488
36625
|
name225,
|
|
36489
36626
|
dependencies225,
|
|
36490
|
-
({ typed: typed3, add:
|
|
36627
|
+
({ typed: typed3, add: add4, multiply: multiply2, Complex: Complex13, divide: divide2, matrix: matrix2 }) => {
|
|
36491
36628
|
return typed3(name225, {
|
|
36492
36629
|
"Array, Array": function(b, a) {
|
|
36493
36630
|
const w = createBins(512);
|
|
@@ -36581,13 +36718,13 @@ var createFreqz = /* @__PURE__ */ factory(
|
|
|
36581
36718
|
let sumNum = Complex13(0, 0);
|
|
36582
36719
|
let sumDen = Complex13(0, 0);
|
|
36583
36720
|
for (let j = 0; j < b.length; j++) {
|
|
36584
|
-
sumNum =
|
|
36721
|
+
sumNum = add4(
|
|
36585
36722
|
sumNum,
|
|
36586
36723
|
multiply2(b[j], Complex13(Math.cos(-j * w[i]), Math.sin(-j * w[i])))
|
|
36587
36724
|
);
|
|
36588
36725
|
}
|
|
36589
36726
|
for (let j = 0; j < a.length; j++) {
|
|
36590
|
-
sumDen =
|
|
36727
|
+
sumDen = add4(
|
|
36591
36728
|
sumDen,
|
|
36592
36729
|
multiply2(a[j], Complex13(Math.cos(-j * w[i]), Math.sin(-j * w[i])))
|
|
36593
36730
|
);
|
|
@@ -37404,7 +37541,7 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37404
37541
|
typed: typed3,
|
|
37405
37542
|
isZero: isZero2,
|
|
37406
37543
|
equalScalar: equalScalar3,
|
|
37407
|
-
add:
|
|
37544
|
+
add: add4,
|
|
37408
37545
|
subtract: subtract3,
|
|
37409
37546
|
multiply: multiply2,
|
|
37410
37547
|
divide: divide2,
|
|
@@ -37446,15 +37583,15 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37446
37583
|
const denom = unaryMinus2(multiply2(3, a));
|
|
37447
37584
|
const D0_1 = multiply2(b, b);
|
|
37448
37585
|
const D0_2 = multiply2(3, a, c);
|
|
37449
|
-
const D1_1 =
|
|
37586
|
+
const D1_1 = add4(multiply2(2, b, b, b), multiply2(27, a, a, d));
|
|
37450
37587
|
const D1_2 = multiply2(9, a, b, c);
|
|
37451
37588
|
if (equalScalar3(D0_1, D0_2) && equalScalar3(D1_1, D1_2)) {
|
|
37452
37589
|
return [divide2(b, denom)];
|
|
37453
37590
|
}
|
|
37454
37591
|
const Delta0 = subtract3(D0_1, D0_2);
|
|
37455
37592
|
const Delta1 = subtract3(D1_1, D1_2);
|
|
37456
|
-
const discriminant1 =
|
|
37457
|
-
const discriminant2 =
|
|
37593
|
+
const discriminant1 = add4(multiply2(18, a, b, c, d), multiply2(b, b, c, c));
|
|
37594
|
+
const discriminant2 = add4(
|
|
37458
37595
|
multiply2(4, b, b, b, d),
|
|
37459
37596
|
multiply2(4, a, c, c, c),
|
|
37460
37597
|
multiply2(27, a, a, d, d)
|
|
@@ -37462,7 +37599,7 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37462
37599
|
if (equalScalar3(discriminant1, discriminant2)) {
|
|
37463
37600
|
return [
|
|
37464
37601
|
divide2(
|
|
37465
|
-
subtract3(multiply2(4, a, b, c),
|
|
37602
|
+
subtract3(multiply2(4, a, b, c), add4(multiply2(9, a, a, d), multiply2(b, b, b))),
|
|
37466
37603
|
multiply2(a, Delta0)
|
|
37467
37604
|
),
|
|
37468
37605
|
// simple root
|
|
@@ -37475,7 +37612,7 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37475
37612
|
Ccubed = Delta1;
|
|
37476
37613
|
} else {
|
|
37477
37614
|
Ccubed = divide2(
|
|
37478
|
-
|
|
37615
|
+
add4(
|
|
37479
37616
|
Delta1,
|
|
37480
37617
|
sqrt2(subtract3(multiply2(Delta1, Delta1), multiply2(4, Delta0, Delta0, Delta0)))
|
|
37481
37618
|
),
|
|
@@ -37483,7 +37620,7 @@ var createPolynomialRoot = /* @__PURE__ */ factory(
|
|
|
37483
37620
|
);
|
|
37484
37621
|
}
|
|
37485
37622
|
const allRoots = true;
|
|
37486
|
-
const rawRoots = cbrt3(Ccubed, allRoots).toArray().map((C) => divide2(
|
|
37623
|
+
const rawRoots = cbrt3(Ccubed, allRoots).toArray().map((C) => divide2(add4(b, C, divide2(Delta0, C)), denom));
|
|
37487
37624
|
return rawRoots.map((r) => {
|
|
37488
37625
|
if (typeOf3(r) === "Complex" && equalScalar3(re3(r), re3(r) + im3(r))) {
|
|
37489
37626
|
return re3(r);
|
|
@@ -37539,7 +37676,7 @@ var createZeta = /* @__PURE__ */ factory(
|
|
|
37539
37676
|
gamma: gamma2,
|
|
37540
37677
|
sin: sin2,
|
|
37541
37678
|
subtract: subtract3,
|
|
37542
|
-
add:
|
|
37679
|
+
add: add4,
|
|
37543
37680
|
Complex: Complex13,
|
|
37544
37681
|
BigNumber: BigNumber9,
|
|
37545
37682
|
pi
|
|
@@ -37607,20 +37744,20 @@ var createZeta = /* @__PURE__ */ factory(
|
|
|
37607
37744
|
}
|
|
37608
37745
|
function d(k, n) {
|
|
37609
37746
|
let S = k;
|
|
37610
|
-
for (let j = k; smallerEq2(j, n); j =
|
|
37747
|
+
for (let j = k; smallerEq2(j, n); j = add4(j, 1)) {
|
|
37611
37748
|
const factor2 = divide2(
|
|
37612
|
-
multiply2(factorial5(
|
|
37749
|
+
multiply2(factorial5(add4(n, subtract3(j, 1))), pow2(4, j)),
|
|
37613
37750
|
multiply2(factorial5(subtract3(n, j)), factorial5(multiply2(2, j)))
|
|
37614
37751
|
);
|
|
37615
|
-
S =
|
|
37752
|
+
S = add4(S, factor2);
|
|
37616
37753
|
}
|
|
37617
37754
|
return multiply2(n, S);
|
|
37618
37755
|
}
|
|
37619
37756
|
function f(s, n, createValue) {
|
|
37620
37757
|
const c = divide2(1, multiply2(d(createValue(0), n), subtract3(1, pow2(2, subtract3(1, s)))));
|
|
37621
37758
|
let S = createValue(0);
|
|
37622
|
-
for (let k = createValue(1); smallerEq2(k, n); k =
|
|
37623
|
-
S =
|
|
37759
|
+
for (let k = createValue(1); smallerEq2(k, n); k = add4(k, 1)) {
|
|
37760
|
+
S = add4(S, divide2(multiply2((-1) ** (k - 1), d(k, n)), pow2(k, s)));
|
|
37624
37761
|
}
|
|
37625
37762
|
return multiply2(c, S);
|
|
37626
37763
|
}
|
|
@@ -37686,7 +37823,7 @@ function createComplexEigs({
|
|
|
37686
37823
|
larger: larger2,
|
|
37687
37824
|
smaller: smaller2,
|
|
37688
37825
|
matrixFromColumns: _matrixFromColumns,
|
|
37689
|
-
dot:
|
|
37826
|
+
dot: dot8
|
|
37690
37827
|
}) {
|
|
37691
37828
|
function complexEigs(arr10, N, prec, type, findVectors = true) {
|
|
37692
37829
|
if (!findVectors && type === "number" && N * N >= WASM_EIGS_THRESHOLD) {
|
|
@@ -38057,11 +38194,11 @@ function createComplexEigs({
|
|
|
38057
38194
|
M[i] = Array(N).fill(0);
|
|
38058
38195
|
}
|
|
38059
38196
|
let I2 = 0;
|
|
38060
|
-
for (const
|
|
38061
|
-
const n =
|
|
38197
|
+
for (const sub2 of arr10) {
|
|
38198
|
+
const n = sub2.length;
|
|
38062
38199
|
for (let i = 0; i < n; i++) {
|
|
38063
38200
|
for (let j = 0; j < n; j++) {
|
|
38064
|
-
M[I2 + i][I2 + j] =
|
|
38201
|
+
M[I2 + i][I2 + j] = sub2[i][j];
|
|
38065
38202
|
}
|
|
38066
38203
|
}
|
|
38067
38204
|
I2 += n;
|
|
@@ -38127,7 +38264,7 @@ function createComplexEigs({
|
|
|
38127
38264
|
v = subtract3(
|
|
38128
38265
|
v,
|
|
38129
38266
|
multiply2(
|
|
38130
|
-
divideScalar2(
|
|
38267
|
+
divideScalar2(dot8(w, v), dot8(w, w)),
|
|
38131
38268
|
w
|
|
38132
38269
|
)
|
|
38133
38270
|
);
|
|
@@ -38135,7 +38272,7 @@ function createComplexEigs({
|
|
|
38135
38272
|
return v;
|
|
38136
38273
|
}
|
|
38137
38274
|
function norm4(v) {
|
|
38138
|
-
return abs2(sqrt2(
|
|
38275
|
+
return abs2(sqrt2(dot8(v, v)));
|
|
38139
38276
|
}
|
|
38140
38277
|
function normalize2(v, type) {
|
|
38141
38278
|
const big = type === "BigNumber";
|
|
@@ -38169,7 +38306,7 @@ function createRealSymmetric({
|
|
|
38169
38306
|
inv: inv3,
|
|
38170
38307
|
bignumber: bignumber2,
|
|
38171
38308
|
multiply: multiply2,
|
|
38172
|
-
add:
|
|
38309
|
+
add: add4
|
|
38173
38310
|
}) {
|
|
38174
38311
|
function bigGte(a, b) {
|
|
38175
38312
|
if (typeof a === "number" && typeof b === "number") return a >= b;
|
|
@@ -38366,7 +38503,7 @@ function createRealSymmetric({
|
|
|
38366
38503
|
subtract3(multiplyScalar2(c2, Hij[i][i]), csHij),
|
|
38367
38504
|
multiplyScalar2(s2, Hij[j][j])
|
|
38368
38505
|
);
|
|
38369
|
-
const Ajj =
|
|
38506
|
+
const Ajj = add4(
|
|
38370
38507
|
multiplyScalar2(s2, Hij[i][i]),
|
|
38371
38508
|
csHij,
|
|
38372
38509
|
multiplyScalar2(c2, Hij[j][j])
|
|
@@ -38538,7 +38675,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38538
38675
|
inv: inv3,
|
|
38539
38676
|
bignumber: bignumber2,
|
|
38540
38677
|
multiply: multiply2,
|
|
38541
|
-
add:
|
|
38678
|
+
add: add4,
|
|
38542
38679
|
larger: larger2,
|
|
38543
38680
|
column: _column,
|
|
38544
38681
|
flatten: flatten5,
|
|
@@ -38555,7 +38692,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38555
38692
|
re: re3,
|
|
38556
38693
|
smaller: smaller2,
|
|
38557
38694
|
matrixFromColumns: matrixFromColumns2,
|
|
38558
|
-
dot:
|
|
38695
|
+
dot: dot8
|
|
38559
38696
|
}) => {
|
|
38560
38697
|
const doRealSymmetric = createRealSymmetric({
|
|
38561
38698
|
config: config2,
|
|
@@ -38570,7 +38707,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38570
38707
|
bignumber: bignumber2,
|
|
38571
38708
|
complex: complex3,
|
|
38572
38709
|
multiply: multiply2,
|
|
38573
|
-
add:
|
|
38710
|
+
add: add4
|
|
38574
38711
|
});
|
|
38575
38712
|
const doComplexEigs = createComplexEigs({
|
|
38576
38713
|
addScalar: addScalar2,
|
|
@@ -38594,7 +38731,7 @@ var createEigs = /* @__PURE__ */ factory(
|
|
|
38594
38731
|
larger: larger2,
|
|
38595
38732
|
smaller: smaller2,
|
|
38596
38733
|
matrixFromColumns: matrixFromColumns2,
|
|
38597
|
-
dot:
|
|
38734
|
+
dot: dot8
|
|
38598
38735
|
});
|
|
38599
38736
|
return typed3("eigs", {
|
|
38600
38737
|
// The conversion to matrix in the first two implementations,
|
|
@@ -40596,7 +40733,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40596
40733
|
({
|
|
40597
40734
|
typed: typed3,
|
|
40598
40735
|
abs: abs2,
|
|
40599
|
-
add:
|
|
40736
|
+
add: add4,
|
|
40600
40737
|
pow: pow2,
|
|
40601
40738
|
conj: conj3,
|
|
40602
40739
|
sqrt: sqrt2,
|
|
@@ -40701,7 +40838,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40701
40838
|
if (!equalScalar3(p, 0)) {
|
|
40702
40839
|
let n = 0;
|
|
40703
40840
|
x.forEach(function(value) {
|
|
40704
|
-
n =
|
|
40841
|
+
n = add4(pow2(abs2(value), p), n);
|
|
40705
40842
|
}, true);
|
|
40706
40843
|
return pow2(n, 1 / p);
|
|
40707
40844
|
}
|
|
@@ -40712,7 +40849,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40712
40849
|
function _matrixNormFrobenius(x) {
|
|
40713
40850
|
let fro = 0;
|
|
40714
40851
|
x.forEach(function(value) {
|
|
40715
|
-
fro =
|
|
40852
|
+
fro = add4(fro, multiply2(value, conj3(value)));
|
|
40716
40853
|
});
|
|
40717
40854
|
return abs2(sqrt2(fro));
|
|
40718
40855
|
}
|
|
@@ -40721,7 +40858,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40721
40858
|
let maxc = 0;
|
|
40722
40859
|
x.forEach(function(value, index) {
|
|
40723
40860
|
const j = index[1];
|
|
40724
|
-
const cj =
|
|
40861
|
+
const cj = add4(c[j] || 0, abs2(value));
|
|
40725
40862
|
if (larger2(cj, maxc)) {
|
|
40726
40863
|
maxc = cj;
|
|
40727
40864
|
}
|
|
@@ -40745,7 +40882,7 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
40745
40882
|
let maxr = 0;
|
|
40746
40883
|
x.forEach(function(value, index) {
|
|
40747
40884
|
const i = index[0];
|
|
40748
|
-
const ri =
|
|
40885
|
+
const ri = add4(r[i] || 0, abs2(value));
|
|
40749
40886
|
if (larger2(ri, maxr)) {
|
|
40750
40887
|
maxr = ri;
|
|
40751
40888
|
}
|
|
@@ -41579,7 +41716,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41579
41716
|
transpose: transpose5,
|
|
41580
41717
|
index,
|
|
41581
41718
|
subset: subset2,
|
|
41582
|
-
add:
|
|
41719
|
+
add: add4,
|
|
41583
41720
|
subtract: subtract3,
|
|
41584
41721
|
identity: identity2,
|
|
41585
41722
|
lusolve: lusolve2,
|
|
@@ -41627,7 +41764,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41627
41764
|
if (k < n - 1 && abs2(subset2(G, index(k + 1, k))) > 1e-5) {
|
|
41628
41765
|
let RHS = vc(subset2(D, index(all, [k])), subset2(D, index(all, [k + 1])));
|
|
41629
41766
|
for (let j = 0; j < k; j++) {
|
|
41630
|
-
RHS =
|
|
41767
|
+
RHS = add4(
|
|
41631
41768
|
RHS,
|
|
41632
41769
|
vc(multiply2(y[j], subset2(G, index(j, k))), multiply2(y[j], subset2(G, index(j, k + 1))))
|
|
41633
41770
|
);
|
|
@@ -41636,7 +41773,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41636
41773
|
const gmk = multiply2(identity2(m), multiply2(-1, subset2(G, index(k + 1, k))));
|
|
41637
41774
|
const gkm = multiply2(identity2(m), multiply2(-1, subset2(G, index(k, k + 1))));
|
|
41638
41775
|
const gmm = multiply2(identity2(m), multiply2(-1, subset2(G, index(k + 1, k + 1))));
|
|
41639
|
-
const LHS = vc(hc(
|
|
41776
|
+
const LHS = vc(hc(add4(F, gkk), gmk), hc(gkm, add4(F, gmm)));
|
|
41640
41777
|
const yAux = lusolve2(LHS, RHS);
|
|
41641
41778
|
y[k] = yAux.subset(index(range2(0, m), [0]));
|
|
41642
41779
|
y[k + 1] = yAux.subset(index(range2(m, 2 * m), [0]));
|
|
@@ -41644,7 +41781,7 @@ var createSylvester = /* @__PURE__ */ factory(
|
|
|
41644
41781
|
} else {
|
|
41645
41782
|
let RHS = subset2(D, index(all, [k]));
|
|
41646
41783
|
for (let j = 0; j < k; j++) {
|
|
41647
|
-
RHS =
|
|
41784
|
+
RHS = add4(RHS, multiply2(y[j], subset2(G, index(j, k))));
|
|
41648
41785
|
}
|
|
41649
41786
|
const gkk = subset2(G, index(k, k));
|
|
41650
41787
|
const LHS = subtract3(F, multiply2(gkk, identity2(m)));
|
|
@@ -43452,11 +43589,11 @@ function multivariateTaylor(expr, vars, x0, n = 1) {
|
|
|
43452
43589
|
const fmp = evalWith(expr, s);
|
|
43453
43590
|
s[vars[j]] = x0[j] - h;
|
|
43454
43591
|
const fmm = evalWith(expr, s);
|
|
43455
|
-
const
|
|
43456
|
-
if (Math.abs(
|
|
43592
|
+
const cross3 = (fpp - fpm - fmp + fmm) / (4 * h * h);
|
|
43593
|
+
if (Math.abs(cross3) < 1e-12) continue;
|
|
43457
43594
|
const xi = x0[i] === 0 ? vars[i] : `(${vars[i]} - ${formatCoeff(x0[i])})`;
|
|
43458
43595
|
const xj = x0[j] === 0 ? vars[j] : `(${vars[j]} - ${formatCoeff(x0[j])})`;
|
|
43459
|
-
terms.push(`${formatCoeff(
|
|
43596
|
+
terms.push(`${formatCoeff(cross3)}*${xi}*${xj}`);
|
|
43460
43597
|
}
|
|
43461
43598
|
}
|
|
43462
43599
|
}
|
|
@@ -43483,8 +43620,8 @@ function polyCoeffsDeg3(expr, varName) {
|
|
|
43483
43620
|
const d2 = f[2] - 2 * f[1] + f[0];
|
|
43484
43621
|
const d3 = f[3] - 3 * f[2] + 3 * f[1] - f[0];
|
|
43485
43622
|
const d4 = f[4] - 4 * f[3] + 6 * f[2] - 4 * f[1] + f[0];
|
|
43486
|
-
const
|
|
43487
|
-
if (Math.abs(d4) > 1e-7 *
|
|
43623
|
+
const scale4 = Math.max(1, ...f.map(Math.abs));
|
|
43624
|
+
if (Math.abs(d4) > 1e-7 * scale4) return null;
|
|
43488
43625
|
const c3 = d3 / 6;
|
|
43489
43626
|
const c2 = d2 / 2 - d3 / 2;
|
|
43490
43627
|
const c1 = d1 - d2 / 2 + d3 / 3;
|
|
@@ -44817,20 +44954,20 @@ function stirlingS1(n, k) {
|
|
|
44817
44954
|
}
|
|
44818
44955
|
return s[n][k];
|
|
44819
44956
|
}
|
|
44820
|
-
function modPowBig(base, exp2,
|
|
44821
|
-
let b = (base %
|
|
44957
|
+
function modPowBig(base, exp2, mod3) {
|
|
44958
|
+
let b = (base % mod3 + mod3) % mod3;
|
|
44822
44959
|
let e = exp2;
|
|
44823
44960
|
let result = 1n;
|
|
44824
44961
|
while (e > 0n) {
|
|
44825
|
-
if (e & 1n) result = result * b %
|
|
44826
|
-
b = b * b %
|
|
44962
|
+
if (e & 1n) result = result * b % mod3;
|
|
44963
|
+
b = b * b % mod3;
|
|
44827
44964
|
e >>= 1n;
|
|
44828
44965
|
}
|
|
44829
44966
|
return result;
|
|
44830
44967
|
}
|
|
44831
|
-
function modInverseBig(a,
|
|
44968
|
+
function modInverseBig(a, mod3) {
|
|
44832
44969
|
let oldR = a;
|
|
44833
|
-
let r =
|
|
44970
|
+
let r = mod3;
|
|
44834
44971
|
let oldS = 1n;
|
|
44835
44972
|
let s = 0n;
|
|
44836
44973
|
while (r !== 0n) {
|
|
@@ -44838,7 +44975,7 @@ function modInverseBig(a, mod2) {
|
|
|
44838
44975
|
[oldR, r] = [r, oldR - q * r];
|
|
44839
44976
|
[oldS, s] = [s, oldS - q * s];
|
|
44840
44977
|
}
|
|
44841
|
-
return (oldS %
|
|
44978
|
+
return (oldS % mod3 + mod3) % mod3;
|
|
44842
44979
|
}
|
|
44843
44980
|
function discreteLog(g, h, p) {
|
|
44844
44981
|
if (!Number.isInteger(g) || !Number.isInteger(h) || !Number.isInteger(p) || p < 2) {
|
|
@@ -46484,12 +46621,12 @@ function eigsh(a, k = 1, opts) {
|
|
|
46484
46621
|
}
|
|
46485
46622
|
|
|
46486
46623
|
// src/numeric/structured-solvers.ts
|
|
46487
|
-
function thomasSolve(
|
|
46624
|
+
function thomasSolve(sub2, diag2, sup, d) {
|
|
46488
46625
|
const n = diag2.length;
|
|
46489
46626
|
if (n === 0) return [];
|
|
46490
|
-
if (
|
|
46627
|
+
if (sub2.length !== n - 1 || sup.length !== n - 1 || d.length !== n) {
|
|
46491
46628
|
throw new Error(
|
|
46492
|
-
`thomasSolve: expected sub/sup of length ${n - 1} and d of length ${n}, got sub=${
|
|
46629
|
+
`thomasSolve: expected sub/sup of length ${n - 1} and d of length ${n}, got sub=${sub2.length}, sup=${sup.length}, d=${d.length}`
|
|
46493
46630
|
);
|
|
46494
46631
|
}
|
|
46495
46632
|
const cp = new Array(n).fill(0);
|
|
@@ -46498,12 +46635,12 @@ function thomasSolve(sub, diag2, sup, d) {
|
|
|
46498
46635
|
cp[0] = n > 1 ? sup[0] / diag2[0] : 0;
|
|
46499
46636
|
dp[0] = d[0] / diag2[0];
|
|
46500
46637
|
for (let i = 1; i < n; i++) {
|
|
46501
|
-
const m = diag2[i] -
|
|
46638
|
+
const m = diag2[i] - sub2[i - 1] * cp[i - 1];
|
|
46502
46639
|
if (m === 0) {
|
|
46503
46640
|
throw new Error(`thomasSolve: zero pivot at row ${i} (no pivoting is performed)`);
|
|
46504
46641
|
}
|
|
46505
46642
|
cp[i] = i < n - 1 ? sup[i] / m : 0;
|
|
46506
|
-
dp[i] = (d[i] -
|
|
46643
|
+
dp[i] = (d[i] - sub2[i - 1] * dp[i - 1]) / m;
|
|
46507
46644
|
}
|
|
46508
46645
|
const x = new Array(n);
|
|
46509
46646
|
x[n - 1] = dp[n - 1];
|
|
@@ -46716,6 +46853,12 @@ import { eig as eig3 } from "@danielsimonjr/mathts-matrix";
|
|
|
46716
46853
|
function cSub(a, b) {
|
|
46717
46854
|
return { re: a.re - b.re, im: a.im - b.im };
|
|
46718
46855
|
}
|
|
46856
|
+
function cAdd(a, b) {
|
|
46857
|
+
return { re: a.re + b.re, im: a.im + b.im };
|
|
46858
|
+
}
|
|
46859
|
+
function cScale(a, s) {
|
|
46860
|
+
return { re: a.re * s, im: a.im * s };
|
|
46861
|
+
}
|
|
46719
46862
|
function cMul(a, b) {
|
|
46720
46863
|
return { re: a.re * b.re - a.im * b.im, im: a.re * b.im + a.im * b.re };
|
|
46721
46864
|
}
|
|
@@ -46732,6 +46875,11 @@ function cZeros(n) {
|
|
|
46732
46875
|
im: Array.from({ length: n }, () => new Array(n).fill(0))
|
|
46733
46876
|
};
|
|
46734
46877
|
}
|
|
46878
|
+
function cIdentity(n) {
|
|
46879
|
+
const m = cZeros(n);
|
|
46880
|
+
for (let i = 0; i < n; i++) m.re[i][i] = 1;
|
|
46881
|
+
return m;
|
|
46882
|
+
}
|
|
46735
46883
|
function cFromReal(A) {
|
|
46736
46884
|
const n = A.length;
|
|
46737
46885
|
return {
|
|
@@ -46798,7 +46946,81 @@ function isDiagonal(A, n) {
|
|
|
46798
46946
|
}
|
|
46799
46947
|
return true;
|
|
46800
46948
|
}
|
|
46801
|
-
function
|
|
46949
|
+
function clusterEigenvalues(values, tol) {
|
|
46950
|
+
const acc = [];
|
|
46951
|
+
for (const v of values) {
|
|
46952
|
+
let placed = false;
|
|
46953
|
+
for (const c of acc) {
|
|
46954
|
+
const rep = { re: c.sumRe / c.count, im: c.sumIm / c.count };
|
|
46955
|
+
if (cAbs(cSub(v, rep)) < tol) {
|
|
46956
|
+
c.sumRe += v.re;
|
|
46957
|
+
c.sumIm += v.im;
|
|
46958
|
+
c.count += 1;
|
|
46959
|
+
placed = true;
|
|
46960
|
+
break;
|
|
46961
|
+
}
|
|
46962
|
+
}
|
|
46963
|
+
if (!placed) acc.push({ sumRe: v.re, sumIm: v.im, count: 1 });
|
|
46964
|
+
}
|
|
46965
|
+
return acc.map((c) => ({
|
|
46966
|
+
value: { re: c.sumRe / c.count, im: c.sumIm / c.count },
|
|
46967
|
+
count: c.count
|
|
46968
|
+
}));
|
|
46969
|
+
}
|
|
46970
|
+
function factorialNum(k) {
|
|
46971
|
+
let r = 1;
|
|
46972
|
+
for (let i = 2; i <= k; i++) r *= i;
|
|
46973
|
+
return r;
|
|
46974
|
+
}
|
|
46975
|
+
function numericalDerivative2(f, z, order) {
|
|
46976
|
+
const at = (dx) => f({ re: z.re + dx, im: z.im });
|
|
46977
|
+
switch (order) {
|
|
46978
|
+
case 1: {
|
|
46979
|
+
const h = 1e-6;
|
|
46980
|
+
return cScale(cSub(at(h), at(-h)), 1 / (2 * h));
|
|
46981
|
+
}
|
|
46982
|
+
case 2: {
|
|
46983
|
+
const h = 1e-4;
|
|
46984
|
+
const t = cSub(cAdd(at(h), at(-h)), cScale(at(0), 2));
|
|
46985
|
+
return cScale(t, 1 / (h * h));
|
|
46986
|
+
}
|
|
46987
|
+
case 3: {
|
|
46988
|
+
const h = 1e-3;
|
|
46989
|
+
const t = cSub(cAdd(at(2 * h), cScale(at(-h), 2)), cAdd(cScale(at(h), 2), at(-2 * h)));
|
|
46990
|
+
return cScale(t, 1 / (2 * h * h * h));
|
|
46991
|
+
}
|
|
46992
|
+
case 4: {
|
|
46993
|
+
const h = 0.01;
|
|
46994
|
+
let t = at(2 * h);
|
|
46995
|
+
t = cSub(t, cScale(at(h), 4));
|
|
46996
|
+
t = cAdd(t, cScale(at(0), 6));
|
|
46997
|
+
t = cSub(t, cScale(at(-h), 4));
|
|
46998
|
+
t = cAdd(t, at(-2 * h));
|
|
46999
|
+
return cScale(t, 1 / (h * h * h * h));
|
|
47000
|
+
}
|
|
47001
|
+
default:
|
|
47002
|
+
throw new Error(
|
|
47003
|
+
`funm: numerical derivatives of order ${order} are not supported (eigenvalue multiplicity ${order + 1} exceeds the finite-difference stencils); supply analytic derivatives via the fDerivs argument (fDerivs[k] = f^(k+1))`
|
|
47004
|
+
);
|
|
47005
|
+
}
|
|
47006
|
+
}
|
|
47007
|
+
function taylorCoeffs(f, fDerivs, z, maxOrder) {
|
|
47008
|
+
const coeffs = [f(z)];
|
|
47009
|
+
for (let L = 1; L <= maxOrder; L++) {
|
|
47010
|
+
const deriv = fDerivs && fDerivs.length >= L ? fDerivs[L - 1](z) : numericalDerivative2(f, z, L);
|
|
47011
|
+
coeffs.push(cScale(deriv, 1 / factorialNum(L)));
|
|
47012
|
+
}
|
|
47013
|
+
return coeffs;
|
|
47014
|
+
}
|
|
47015
|
+
function cIsFinite(M) {
|
|
47016
|
+
for (let i = 0; i < M.re.length; i++) {
|
|
47017
|
+
for (let j = 0; j < M.re.length; j++) {
|
|
47018
|
+
if (!Number.isFinite(M.re[i][j]) || !Number.isFinite(M.im[i][j])) return false;
|
|
47019
|
+
}
|
|
47020
|
+
}
|
|
47021
|
+
return true;
|
|
47022
|
+
}
|
|
47023
|
+
function funm(A, f, fDerivs) {
|
|
46802
47024
|
const n = A.length;
|
|
46803
47025
|
if (n === 0) return { re: [], im: [] };
|
|
46804
47026
|
for (const row2 of A) {
|
|
@@ -46816,29 +47038,59 @@ function funm(A, f) {
|
|
|
46816
47038
|
const { values } = eig3(A, { computeVectors: false });
|
|
46817
47039
|
const maxAbs = values.reduce((m, v) => Math.max(m, cAbs(v)), 0);
|
|
46818
47040
|
const tol = EIGENVALUE_DISTINCT_REL_TOL * Math.max(1, maxAbs);
|
|
46819
|
-
|
|
46820
|
-
|
|
46821
|
-
|
|
46822
|
-
|
|
46823
|
-
|
|
46824
|
-
|
|
47041
|
+
const clusters = clusterEigenvalues(values, tol);
|
|
47042
|
+
if (clusters.length === n) {
|
|
47043
|
+
const F2 = cZeros(n);
|
|
47044
|
+
for (let i = 0; i < n; i++) {
|
|
47045
|
+
const lambdaI = values[i];
|
|
47046
|
+
let numerator = cFromReal(A);
|
|
47047
|
+
let denom = { re: 1, im: 0 };
|
|
47048
|
+
let first = true;
|
|
47049
|
+
for (let j = 0; j < n; j++) {
|
|
47050
|
+
if (j === i) continue;
|
|
47051
|
+
const factor2 = cShiftedReal(A, values[j]);
|
|
47052
|
+
numerator = first ? factor2 : cMatMul(numerator, factor2);
|
|
47053
|
+
first = false;
|
|
47054
|
+
denom = cMul(denom, cSub(lambdaI, values[j]));
|
|
46825
47055
|
}
|
|
47056
|
+
cAccumulate(F2, f(lambdaI), cMatScalarDiv(numerator, denom));
|
|
46826
47057
|
}
|
|
47058
|
+
return F2;
|
|
46827
47059
|
}
|
|
46828
|
-
const
|
|
46829
|
-
|
|
46830
|
-
|
|
46831
|
-
|
|
46832
|
-
|
|
46833
|
-
|
|
46834
|
-
for (let
|
|
46835
|
-
|
|
46836
|
-
|
|
46837
|
-
|
|
46838
|
-
|
|
46839
|
-
|
|
47060
|
+
const nodes = [];
|
|
47061
|
+
const clusterIdx = [];
|
|
47062
|
+
const taylor2 = clusters.map(
|
|
47063
|
+
(c) => taylorCoeffs(f, fDerivs, c.value, c.count - 1)
|
|
47064
|
+
);
|
|
47065
|
+
clusters.forEach((c, ci) => {
|
|
47066
|
+
for (let r = 0; r < c.count; r++) {
|
|
47067
|
+
nodes.push(c.value);
|
|
47068
|
+
clusterIdx.push(ci);
|
|
47069
|
+
}
|
|
47070
|
+
});
|
|
47071
|
+
const dd = Array.from({ length: n }, () => new Array(n));
|
|
47072
|
+
for (let i = 0; i < n; i++) dd[i][i] = taylor2[clusterIdx[i]][0];
|
|
47073
|
+
for (let L = 1; L < n; L++) {
|
|
47074
|
+
for (let i = 0; i + L < n; i++) {
|
|
47075
|
+
const j = i + L;
|
|
47076
|
+
if (clusterIdx[i] === clusterIdx[j]) {
|
|
47077
|
+
dd[i][j] = taylor2[clusterIdx[i]][L];
|
|
47078
|
+
} else {
|
|
47079
|
+
dd[i][j] = cDiv(cSub(dd[i + 1][j], dd[i][j - 1]), cSub(nodes[j], nodes[i]));
|
|
47080
|
+
}
|
|
46840
47081
|
}
|
|
46841
|
-
|
|
47082
|
+
}
|
|
47083
|
+
const F = cZeros(n);
|
|
47084
|
+
let P2 = cIdentity(n);
|
|
47085
|
+
cAccumulate(F, dd[0][0], P2);
|
|
47086
|
+
for (let k = 1; k < n; k++) {
|
|
47087
|
+
P2 = cMatMul(P2, cShiftedReal(A, nodes[k - 1]));
|
|
47088
|
+
cAccumulate(F, dd[0][k], P2);
|
|
47089
|
+
}
|
|
47090
|
+
if (!cIsFinite(F)) {
|
|
47091
|
+
throw new Error(
|
|
47092
|
+
"funm: result is non-finite \u2014 f (or one of its derivatives) is singular at a repeated eigenvalue (e.g. sqrt/log at 0), so the matrix function is undefined there"
|
|
47093
|
+
);
|
|
46842
47094
|
}
|
|
46843
47095
|
return F;
|
|
46844
47096
|
}
|
|
@@ -46854,11 +47106,17 @@ function complexSin(z) {
|
|
|
46854
47106
|
im: Math.cos(z.re) * Math.sinh(z.im)
|
|
46855
47107
|
};
|
|
46856
47108
|
}
|
|
47109
|
+
function trigDerivs(base, n) {
|
|
47110
|
+
return Array.from({ length: Math.max(0, n - 1) }, (_unused, k) => {
|
|
47111
|
+
const shift = (k + 1) * Math.PI / 2;
|
|
47112
|
+
return (z) => base({ re: z.re + shift, im: z.im });
|
|
47113
|
+
});
|
|
47114
|
+
}
|
|
46857
47115
|
function cosm(A) {
|
|
46858
|
-
return funm(A, complexCos);
|
|
47116
|
+
return funm(A, complexCos, trigDerivs(complexCos, A.length));
|
|
46859
47117
|
}
|
|
46860
47118
|
function sinm(A) {
|
|
46861
|
-
return funm(A, complexSin);
|
|
47119
|
+
return funm(A, complexSin, trigDerivs(complexSin, A.length));
|
|
46862
47120
|
}
|
|
46863
47121
|
|
|
46864
47122
|
// src/numeric/control-equations.ts
|
|
@@ -47579,15 +47837,15 @@ function ridge(X, y, alpha, opts) {
|
|
|
47579
47837
|
return { coefficients, intercept };
|
|
47580
47838
|
}
|
|
47581
47839
|
function standardize(Xc, n, p) {
|
|
47582
|
-
const
|
|
47840
|
+
const scale4 = new Array(p);
|
|
47583
47841
|
for (let j = 0; j < p; j++) {
|
|
47584
47842
|
let ss = 0;
|
|
47585
47843
|
for (let i = 0; i < n; i++) ss += Xc[i][j] * Xc[i][j];
|
|
47586
47844
|
const meanSq = ss / n;
|
|
47587
|
-
|
|
47845
|
+
scale4[j] = meanSq > 1e-15 ? Math.sqrt(meanSq) : 1;
|
|
47588
47846
|
}
|
|
47589
|
-
const Xs = Xc.map((row2) => row2.map((v, j) => v /
|
|
47590
|
-
return { Xs, scale:
|
|
47847
|
+
const Xs = Xc.map((row2) => row2.map((v, j) => v / scale4[j]));
|
|
47848
|
+
return { Xs, scale: scale4 };
|
|
47591
47849
|
}
|
|
47592
47850
|
function coordinateDescent(Xs, yc, n, p, l1, l2, maxIter, tol) {
|
|
47593
47851
|
const beta2 = new Array(p).fill(0);
|
|
@@ -47619,9 +47877,9 @@ function lasso(X, y, alpha, opts) {
|
|
|
47619
47877
|
const maxIter = opts?.maxIter ?? 1e3;
|
|
47620
47878
|
const tol = opts?.tol ?? 1e-7;
|
|
47621
47879
|
const { Xc, yc, xMean, yMean } = center(X, y, n, p, useIntercept);
|
|
47622
|
-
const { Xs, scale:
|
|
47880
|
+
const { Xs, scale: scale4 } = standardize(Xc, n, p);
|
|
47623
47881
|
const betaStd = coordinateDescent(Xs, yc, n, p, alpha, 0, maxIter, tol);
|
|
47624
|
-
const coefficients = betaStd.map((b, j) => b /
|
|
47882
|
+
const coefficients = betaStd.map((b, j) => b / scale4[j]);
|
|
47625
47883
|
const intercept = useIntercept ? yMean - dot4(xMean, coefficients) : 0;
|
|
47626
47884
|
return { coefficients, intercept };
|
|
47627
47885
|
}
|
|
@@ -47633,11 +47891,11 @@ function elasticNet(X, y, alpha, l1Ratio, opts) {
|
|
|
47633
47891
|
const maxIter = opts?.maxIter ?? 1e3;
|
|
47634
47892
|
const tol = opts?.tol ?? 1e-7;
|
|
47635
47893
|
const { Xc, yc, xMean, yMean } = center(X, y, n, p, useIntercept);
|
|
47636
|
-
const { Xs, scale:
|
|
47894
|
+
const { Xs, scale: scale4 } = standardize(Xc, n, p);
|
|
47637
47895
|
const l1 = alpha * l1Ratio;
|
|
47638
47896
|
const l2 = alpha * (1 - l1Ratio);
|
|
47639
47897
|
const betaStd = coordinateDescent(Xs, yc, n, p, l1, l2, maxIter, tol);
|
|
47640
|
-
const coefficients = betaStd.map((b, j) => b /
|
|
47898
|
+
const coefficients = betaStd.map((b, j) => b / scale4[j]);
|
|
47641
47899
|
const intercept = useIntercept ? yMean - dot4(xMean, coefficients) : 0;
|
|
47642
47900
|
return { coefficients, intercept };
|
|
47643
47901
|
}
|
|
@@ -47705,8 +47963,8 @@ function logisticRegression(X, y, opts) {
|
|
|
47705
47963
|
let stepNorm = 0;
|
|
47706
47964
|
for (const d of delta) stepNorm = Math.max(stepNorm, Math.abs(d));
|
|
47707
47965
|
if (stepNorm > MAX_STEP_NORM) {
|
|
47708
|
-
const
|
|
47709
|
-
delta = delta.map((d) => d *
|
|
47966
|
+
const scale4 = MAX_STEP_NORM / stepNorm;
|
|
47967
|
+
delta = delta.map((d) => d * scale4);
|
|
47710
47968
|
stepNorm = MAX_STEP_NORM;
|
|
47711
47969
|
}
|
|
47712
47970
|
beta2 = beta2.map((b, j) => b + delta[j]);
|
|
@@ -47744,18 +48002,18 @@ function nelderMead(f, x0, opts = {}) {
|
|
|
47744
48002
|
for (let i = 0; i < n; i++) for (let j = 0; j < n; j++) c[j] += pts[i][j] / n;
|
|
47745
48003
|
return c;
|
|
47746
48004
|
};
|
|
47747
|
-
const
|
|
47748
|
-
const
|
|
48005
|
+
const add4 = (a, b, s) => a.map((v, i) => v + s * b[i]);
|
|
48006
|
+
const sub2 = (a, b) => a.map((v, i) => v - b[i]);
|
|
47749
48007
|
for (; iter < maxIter; iter++) {
|
|
47750
48008
|
const order = fv.map((_, i) => i).sort((i, j) => fv[i] - fv[j]);
|
|
47751
48009
|
simplex = order.map((i) => simplex[i]);
|
|
47752
48010
|
fv = order.map((i) => fv[i]);
|
|
47753
48011
|
if (Math.abs(fv[n] - fv[0]) <= tol * (Math.abs(fv[0]) + tol)) break;
|
|
47754
48012
|
const c = centroid2(simplex.slice(0, n));
|
|
47755
|
-
const xr =
|
|
48013
|
+
const xr = add4(c, sub2(c, simplex[n]), alpha);
|
|
47756
48014
|
const fr = f(xr);
|
|
47757
48015
|
if (fr < fv[0]) {
|
|
47758
|
-
const xe =
|
|
48016
|
+
const xe = add4(c, sub2(c, simplex[n]), gamma2);
|
|
47759
48017
|
const fe = f(xe);
|
|
47760
48018
|
if (fe < fr) {
|
|
47761
48019
|
simplex[n] = xe;
|
|
@@ -47768,14 +48026,14 @@ function nelderMead(f, x0, opts = {}) {
|
|
|
47768
48026
|
simplex[n] = xr;
|
|
47769
48027
|
fv[n] = fr;
|
|
47770
48028
|
} else {
|
|
47771
|
-
const xc =
|
|
48029
|
+
const xc = add4(c, sub2(simplex[n], c), rho);
|
|
47772
48030
|
const fc = f(xc);
|
|
47773
48031
|
if (fc < fv[n]) {
|
|
47774
48032
|
simplex[n] = xc;
|
|
47775
48033
|
fv[n] = fc;
|
|
47776
48034
|
} else {
|
|
47777
48035
|
for (let i = 1; i <= n; i++) {
|
|
47778
|
-
simplex[i] =
|
|
48036
|
+
simplex[i] = add4(simplex[0], sub2(simplex[i], simplex[0]), sigma);
|
|
47779
48037
|
fv[i] = f(simplex[i]);
|
|
47780
48038
|
}
|
|
47781
48039
|
}
|
|
@@ -48148,8 +48406,8 @@ function fitPoisson(data) {
|
|
|
48148
48406
|
for (const k of data) logLikelihood += -lambda + k * Math.log(lambda) - logFactorial(k);
|
|
48149
48407
|
return { params: { lambda }, logLikelihood };
|
|
48150
48408
|
}
|
|
48151
|
-
function gammaLogPdf(x, shape,
|
|
48152
|
-
return (shape - 1) * Math.log(x) - x /
|
|
48409
|
+
function gammaLogPdf(x, shape, scale4) {
|
|
48410
|
+
return (shape - 1) * Math.log(x) - x / scale4 - lgamma(shape) - shape * Math.log(scale4);
|
|
48153
48411
|
}
|
|
48154
48412
|
function fitGamma(data) {
|
|
48155
48413
|
for (const x of data) {
|
|
@@ -48166,10 +48424,10 @@ function fitGamma(data) {
|
|
|
48166
48424
|
const k0 = (3 - s + Math.sqrt((s - 3) * (s - 3) + 24 * s)) / (12 * s);
|
|
48167
48425
|
const f = (k) => Math.log(k) - digamma(k) - s;
|
|
48168
48426
|
const shape = secant(f, k0, k0 * 1.1, { tol: 1e-12, maxIter: 200 });
|
|
48169
|
-
const
|
|
48427
|
+
const scale4 = xbar / shape;
|
|
48170
48428
|
let logLikelihood = 0;
|
|
48171
|
-
for (const x of data) logLikelihood += gammaLogPdf(x, shape,
|
|
48172
|
-
return { params: { shape, scale:
|
|
48429
|
+
for (const x of data) logLikelihood += gammaLogPdf(x, shape, scale4);
|
|
48430
|
+
return { params: { shape, scale: scale4 }, logLikelihood };
|
|
48173
48431
|
}
|
|
48174
48432
|
function fitDistribution(name254, data) {
|
|
48175
48433
|
if (data.length === 0) {
|
|
@@ -48658,17 +48916,17 @@ function filtfilt(b, a, x) {
|
|
|
48658
48916
|
).y.reverse();
|
|
48659
48917
|
return back.slice(pad, pad + n);
|
|
48660
48918
|
}
|
|
48661
|
-
var
|
|
48919
|
+
var cAdd2 = (p, q) => p.add(q);
|
|
48662
48920
|
var cSub2 = (p, q) => p.sub(q);
|
|
48663
48921
|
var cMul2 = (p, q) => p.multiply(q);
|
|
48664
48922
|
var cDiv2 = (p, q) => p.divide(q);
|
|
48665
|
-
var
|
|
48923
|
+
var cScale2 = (p, s) => cMul2(p, new Complex11(s, 0));
|
|
48666
48924
|
function polyFromRoots(roots) {
|
|
48667
48925
|
let c = [new Complex11(1, 0)];
|
|
48668
48926
|
for (const r of roots) {
|
|
48669
48927
|
const next = Array.from({ length: c.length + 1 }, () => new Complex11(0, 0));
|
|
48670
48928
|
for (let i = 0; i < c.length; i++) {
|
|
48671
|
-
next[i] =
|
|
48929
|
+
next[i] = cAdd2(next[i], c[i]);
|
|
48672
48930
|
next[i + 1] = cSub2(next[i + 1], cMul2(c[i], r));
|
|
48673
48931
|
}
|
|
48674
48932
|
c = next;
|
|
@@ -48683,8 +48941,8 @@ function relativeDegree(z, p) {
|
|
|
48683
48941
|
function lp2lpZpk(z, p, k, wo) {
|
|
48684
48942
|
const degree2 = relativeDegree(z, p);
|
|
48685
48943
|
return {
|
|
48686
|
-
z: z.map((zv) =>
|
|
48687
|
-
p: p.map((pv) =>
|
|
48944
|
+
z: z.map((zv) => cScale2(zv, wo)),
|
|
48945
|
+
p: p.map((pv) => cScale2(pv, wo)),
|
|
48688
48946
|
k: k * Math.pow(wo, degree2)
|
|
48689
48947
|
};
|
|
48690
48948
|
}
|
|
@@ -48703,8 +48961,8 @@ function lp2bpZpk(z, p, k, wo, bw) {
|
|
|
48703
48961
|
const degree2 = relativeDegree(z, p);
|
|
48704
48962
|
const wo2 = new Complex11(wo * wo, 0);
|
|
48705
48963
|
const shift = (roots) => {
|
|
48706
|
-
const lp = roots.map((r) =>
|
|
48707
|
-
const plus = lp.map((r) =>
|
|
48964
|
+
const lp = roots.map((r) => cScale2(r, bw / 2));
|
|
48965
|
+
const plus = lp.map((r) => cAdd2(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
48708
48966
|
const minus = lp.map((r) => cSub2(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
48709
48967
|
return plus.concat(minus);
|
|
48710
48968
|
};
|
|
@@ -48718,7 +48976,7 @@ function lp2bsZpk(z, p, k, wo, bw) {
|
|
|
48718
48976
|
const bw2 = new Complex11(bw / 2, 0);
|
|
48719
48977
|
const shift = (roots) => {
|
|
48720
48978
|
const hp = roots.map((r) => cDiv2(bw2, r));
|
|
48721
|
-
const plus = hp.map((r) =>
|
|
48979
|
+
const plus = hp.map((r) => cAdd2(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
48722
48980
|
const minus = hp.map((r) => cSub2(r, cSub2(cMul2(r, r), wo2).sqrt()));
|
|
48723
48981
|
return plus.concat(minus);
|
|
48724
48982
|
};
|
|
@@ -48734,7 +48992,7 @@ function lp2bsZpk(z, p, k, wo, bw) {
|
|
|
48734
48992
|
function bilinearZpk(z, p, k, fs) {
|
|
48735
48993
|
const degree2 = relativeDegree(z, p);
|
|
48736
48994
|
const fs2 = new Complex11(2 * fs, 0);
|
|
48737
|
-
const zZ = z.map((zv) => cDiv2(
|
|
48995
|
+
const zZ = z.map((zv) => cDiv2(cAdd2(fs2, zv), cSub2(fs2, zv)));
|
|
48738
48996
|
for (let i = 0; i < degree2; i++) zZ.push(new Complex11(-1, 0));
|
|
48739
48997
|
let prodZ = new Complex11(1, 0);
|
|
48740
48998
|
for (const zv of z) prodZ = cMul2(prodZ, cSub2(fs2, zv));
|
|
@@ -48742,7 +49000,7 @@ function bilinearZpk(z, p, k, fs) {
|
|
|
48742
49000
|
for (const pv of p) prodP = cMul2(prodP, cSub2(fs2, pv));
|
|
48743
49001
|
return {
|
|
48744
49002
|
z: zZ,
|
|
48745
|
-
p: p.map((pv) => cDiv2(
|
|
49003
|
+
p: p.map((pv) => cDiv2(cAdd2(fs2, pv), cSub2(fs2, pv))),
|
|
48746
49004
|
k: k * cDiv2(prodZ, prodP).re
|
|
48747
49005
|
};
|
|
48748
49006
|
}
|
|
@@ -49008,10 +49266,10 @@ function arcJacSn(w, m) {
|
|
|
49008
49266
|
let wn = w;
|
|
49009
49267
|
for (let i = 0; i < ks.length - 1; i++) {
|
|
49010
49268
|
const knext = ks[i + 1];
|
|
49011
|
-
const comp = complementComplex(
|
|
49012
|
-
wn = cDiv2(
|
|
49269
|
+
const comp = complementComplex(cScale2(wn, ks[i]));
|
|
49270
|
+
wn = cDiv2(cScale2(wn, 2), cMul2(new Complex12(1 + knext, 0), new Complex12(1, 0).add(comp)));
|
|
49013
49271
|
}
|
|
49014
|
-
return
|
|
49272
|
+
return cScale2(cScale2(wn.asin(), 2 / Math.PI), K);
|
|
49015
49273
|
}
|
|
49016
49274
|
function arcJacSc1(w, m) {
|
|
49017
49275
|
const z = arcJacSn(new Complex12(0, w), m);
|
|
@@ -49570,20 +49828,11 @@ function remez(numtaps, bands, desired) {
|
|
|
49570
49828
|
|
|
49571
49829
|
// src/signal/wavelets.ts
|
|
49572
49830
|
function idwt(approx, detail, wavelet = "haar") {
|
|
49573
|
-
|
|
49574
|
-
|
|
49575
|
-
}
|
|
49576
|
-
|
|
49577
|
-
throw new Error("idwt: approx and detail must have equal length");
|
|
49578
|
-
}
|
|
49579
|
-
const half = approx.length;
|
|
49580
|
-
const s = 1 / Math.SQRT2;
|
|
49581
|
-
const x = new Array(half * 2);
|
|
49582
|
-
for (let i = 0; i < half; i++) {
|
|
49583
|
-
x[2 * i] = s * (approx[i] + detail[i]);
|
|
49584
|
-
x[2 * i + 1] = s * (approx[i] - detail[i]);
|
|
49831
|
+
try {
|
|
49832
|
+
return idwtPeriodization(approx, detail, wavelet);
|
|
49833
|
+
} catch (err) {
|
|
49834
|
+
throw new Error(`idwt: ${err instanceof Error ? err.message : String(err)}`);
|
|
49585
49835
|
}
|
|
49586
|
-
return x;
|
|
49587
49836
|
}
|
|
49588
49837
|
function wavedec(x, wavelet = "haar", level = 1) {
|
|
49589
49838
|
if (!Number.isInteger(level) || level < 1) {
|
|
@@ -49609,23 +49858,23 @@ function waverec(coeffs, wavelet = "haar") {
|
|
|
49609
49858
|
}
|
|
49610
49859
|
return approx;
|
|
49611
49860
|
}
|
|
49612
|
-
function rickerWavelet(points,
|
|
49613
|
-
const amplitude = 2 / (Math.sqrt(3 *
|
|
49861
|
+
function rickerWavelet(points, scale4) {
|
|
49862
|
+
const amplitude = 2 / (Math.sqrt(3 * scale4) * Math.pow(Math.PI, 0.25));
|
|
49614
49863
|
const out = new Array(points);
|
|
49615
49864
|
const center3 = (points - 1) / 2;
|
|
49616
49865
|
for (let i = 0; i < points; i++) {
|
|
49617
|
-
const t = (i - center3) /
|
|
49866
|
+
const t = (i - center3) / scale4;
|
|
49618
49867
|
const t2 = t * t;
|
|
49619
49868
|
out[i] = amplitude * (1 - t2) * Math.exp(-t2 / 2);
|
|
49620
49869
|
}
|
|
49621
49870
|
return out;
|
|
49622
49871
|
}
|
|
49623
|
-
function morletWavelet(points,
|
|
49624
|
-
const norm4 = 1 / (Math.sqrt(
|
|
49872
|
+
function morletWavelet(points, scale4) {
|
|
49873
|
+
const norm4 = 1 / (Math.sqrt(scale4) * Math.pow(Math.PI, 0.25));
|
|
49625
49874
|
const out = new Array(points);
|
|
49626
49875
|
const center3 = (points - 1) / 2;
|
|
49627
49876
|
for (let i = 0; i < points; i++) {
|
|
49628
|
-
const t = (i - center3) /
|
|
49877
|
+
const t = (i - center3) / scale4;
|
|
49629
49878
|
out[i] = norm4 * Math.cos(5 * t) * Math.exp(-(t * t) / 2);
|
|
49630
49879
|
}
|
|
49631
49880
|
return out;
|
|
@@ -49635,10 +49884,10 @@ function cwt(x, scales, wavelet = "ricker") {
|
|
|
49635
49884
|
throw new Error(`cwt: unsupported wavelet "${wavelet}"`);
|
|
49636
49885
|
}
|
|
49637
49886
|
const n = x.length;
|
|
49638
|
-
return scales.map((
|
|
49639
|
-
if (
|
|
49640
|
-
const points = Math.max(1, Math.min(Math.round(10 *
|
|
49641
|
-
const psi = wavelet === "ricker" ? rickerWavelet(points,
|
|
49887
|
+
return scales.map((scale4) => {
|
|
49888
|
+
if (scale4 <= 0) throw new Error("cwt: scales must be positive");
|
|
49889
|
+
const points = Math.max(1, Math.min(Math.round(10 * scale4), n));
|
|
49890
|
+
const psi = wavelet === "ricker" ? rickerWavelet(points, scale4) : morletWavelet(points, scale4);
|
|
49642
49891
|
return convDirect(x, psi, "same");
|
|
49643
49892
|
});
|
|
49644
49893
|
}
|
|
@@ -49756,10 +50005,10 @@ function crossPower(x, y, opts) {
|
|
|
49756
50005
|
im3[k] += X.im * Y.re - X.re * Y.im;
|
|
49757
50006
|
}
|
|
49758
50007
|
}
|
|
49759
|
-
const
|
|
50008
|
+
const scale4 = 1 / (fs * winSum2 * nSeg);
|
|
49760
50009
|
for (let k = 0; k < half; k++) {
|
|
49761
|
-
re3[k] *=
|
|
49762
|
-
im3[k] *=
|
|
50010
|
+
re3[k] *= scale4;
|
|
50011
|
+
im3[k] *= scale4;
|
|
49763
50012
|
}
|
|
49764
50013
|
const frequencies = Array.from({ length: half }, (_, k) => k * fs / nfft);
|
|
49765
50014
|
return { frequencies, re: re3, im: im3 };
|
|
@@ -49946,6 +50195,27 @@ function quaternionToEuler(q) {
|
|
|
49946
50195
|
const yaw = Math.atan2(2 * (w * z + x * y), 1 - 2 * (y * y + z * z));
|
|
49947
50196
|
return [roll, pitch, yaw];
|
|
49948
50197
|
}
|
|
50198
|
+
var QUAT_VECTOR_EPS = 1e-15;
|
|
50199
|
+
function quaternionLog(q) {
|
|
50200
|
+
const [w, x, y, z] = q;
|
|
50201
|
+
const vNorm = Math.sqrt(x * x + y * y + z * z);
|
|
50202
|
+
if (vNorm < QUAT_VECTOR_EPS) return [0, 0, 0, 0];
|
|
50203
|
+
const theta = Math.atan2(vNorm, w);
|
|
50204
|
+
const s = theta / vNorm;
|
|
50205
|
+
return [0, x * s, y * s, z * s];
|
|
50206
|
+
}
|
|
50207
|
+
function quaternionExp(q) {
|
|
50208
|
+
const [w, x, y, z] = q;
|
|
50209
|
+
const vNorm = Math.sqrt(x * x + y * y + z * z);
|
|
50210
|
+
const ew = Math.exp(w);
|
|
50211
|
+
if (vNorm < QUAT_VECTOR_EPS) return [ew, 0, 0, 0];
|
|
50212
|
+
const s = ew * Math.sin(vNorm) / vNorm;
|
|
50213
|
+
return [ew * Math.cos(vNorm), x * s, y * s, z * s];
|
|
50214
|
+
}
|
|
50215
|
+
function quaternionPow(q, t) {
|
|
50216
|
+
const logQ = quaternionLog(q);
|
|
50217
|
+
return quaternionExp(logQ.map((v) => v * t));
|
|
50218
|
+
}
|
|
49949
50219
|
function boundingBox(points) {
|
|
49950
50220
|
if (points.length === 0) throw new Error("boundingBox: requires at least one point");
|
|
49951
50221
|
const dims = points[0].length;
|
|
@@ -50011,8 +50281,8 @@ function procrustes(A, B) {
|
|
|
50011
50281
|
const M = matMul2(matTranspose(A0), B0);
|
|
50012
50282
|
const { U, S, V } = svd3(M);
|
|
50013
50283
|
const R = matMul2(V, matTranspose(U));
|
|
50014
|
-
const
|
|
50015
|
-
const transformed = matMul2(B0, R).map((row2) => row2.map((v) => v *
|
|
50284
|
+
const scale4 = S.reduce((s, v) => s + v, 0);
|
|
50285
|
+
const transformed = matMul2(B0, R).map((row2) => row2.map((v) => v * scale4));
|
|
50016
50286
|
let disparity = 0;
|
|
50017
50287
|
for (let i = 0; i < A0.length; i++) {
|
|
50018
50288
|
for (let j = 0; j < A0[i].length; j++) {
|
|
@@ -50020,7 +50290,7 @@ function procrustes(A, B) {
|
|
|
50020
50290
|
disparity += diff2 * diff2;
|
|
50021
50291
|
}
|
|
50022
50292
|
}
|
|
50023
|
-
return { R, scale:
|
|
50293
|
+
return { R, scale: scale4, disparity };
|
|
50024
50294
|
}
|
|
50025
50295
|
function euclideanDist(a, b) {
|
|
50026
50296
|
let sum3 = 0;
|
|
@@ -50069,6 +50339,89 @@ function setDisjoint(a, b) {
|
|
|
50069
50339
|
return true;
|
|
50070
50340
|
}
|
|
50071
50341
|
|
|
50342
|
+
// src/geometry/intersect3d.ts
|
|
50343
|
+
var EPS3 = 1e-12;
|
|
50344
|
+
function sub(a, b) {
|
|
50345
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
50346
|
+
}
|
|
50347
|
+
function add3(a, b) {
|
|
50348
|
+
return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
50349
|
+
}
|
|
50350
|
+
function scale3(a, s) {
|
|
50351
|
+
return [a[0] * s, a[1] * s, a[2] * s];
|
|
50352
|
+
}
|
|
50353
|
+
function dot7(a, b) {
|
|
50354
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
50355
|
+
}
|
|
50356
|
+
function cross2(a, b) {
|
|
50357
|
+
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
50358
|
+
}
|
|
50359
|
+
function rayTriangleIntersect(origin, dir, v0, v1, v2) {
|
|
50360
|
+
const e1 = sub(v1, v0);
|
|
50361
|
+
const e2 = sub(v2, v0);
|
|
50362
|
+
const pvec = cross2(dir, e2);
|
|
50363
|
+
const det2 = dot7(e1, pvec);
|
|
50364
|
+
if (Math.abs(det2) < EPS3) return null;
|
|
50365
|
+
const invDet = 1 / det2;
|
|
50366
|
+
const tvec = sub(origin, v0);
|
|
50367
|
+
const u = dot7(tvec, pvec) * invDet;
|
|
50368
|
+
if (u < 0 || u > 1) return null;
|
|
50369
|
+
const qvec = cross2(tvec, e1);
|
|
50370
|
+
const v = dot7(dir, qvec) * invDet;
|
|
50371
|
+
if (v < 0 || u + v > 1) return null;
|
|
50372
|
+
const t = dot7(e2, qvec) * invDet;
|
|
50373
|
+
if (t < 0) return null;
|
|
50374
|
+
return { point: add3(origin, scale3(dir, t)), t };
|
|
50375
|
+
}
|
|
50376
|
+
function rayPlaneIntersect(origin, dir, planePoint, planeNormal) {
|
|
50377
|
+
const denom = dot7(dir, planeNormal);
|
|
50378
|
+
if (Math.abs(denom) < EPS3) return null;
|
|
50379
|
+
const t = dot7(sub(planePoint, origin), planeNormal) / denom;
|
|
50380
|
+
return { point: add3(origin, scale3(dir, t)), t };
|
|
50381
|
+
}
|
|
50382
|
+
function clamp01(x) {
|
|
50383
|
+
return x < 0 ? 0 : x > 1 ? 1 : x;
|
|
50384
|
+
}
|
|
50385
|
+
function segmentSegmentClosest(p1, p2, q1, q2) {
|
|
50386
|
+
const d1 = sub(p2, p1);
|
|
50387
|
+
const d2 = sub(q2, q1);
|
|
50388
|
+
const r = sub(p1, q1);
|
|
50389
|
+
const a = dot7(d1, d1);
|
|
50390
|
+
const e = dot7(d2, d2);
|
|
50391
|
+
const f = dot7(d2, r);
|
|
50392
|
+
let s;
|
|
50393
|
+
let t;
|
|
50394
|
+
if (a <= EPS3 && e <= EPS3) {
|
|
50395
|
+
s = 0;
|
|
50396
|
+
t = 0;
|
|
50397
|
+
} else if (a <= EPS3) {
|
|
50398
|
+
s = 0;
|
|
50399
|
+
t = clamp01(f / e);
|
|
50400
|
+
} else {
|
|
50401
|
+
const c = dot7(d1, r);
|
|
50402
|
+
if (e <= EPS3) {
|
|
50403
|
+
t = 0;
|
|
50404
|
+
s = clamp01(-c / a);
|
|
50405
|
+
} else {
|
|
50406
|
+
const b = dot7(d1, d2);
|
|
50407
|
+
const denom = a * e - b * b;
|
|
50408
|
+
s = denom !== 0 ? clamp01((b * f - c * e) / denom) : 0;
|
|
50409
|
+
t = (b * s + f) / e;
|
|
50410
|
+
if (t < 0) {
|
|
50411
|
+
t = 0;
|
|
50412
|
+
s = clamp01(-c / a);
|
|
50413
|
+
} else if (t > 1) {
|
|
50414
|
+
t = 1;
|
|
50415
|
+
s = clamp01((b - c) / a);
|
|
50416
|
+
}
|
|
50417
|
+
}
|
|
50418
|
+
}
|
|
50419
|
+
const point1 = add3(p1, scale3(d1, s));
|
|
50420
|
+
const point2 = add3(q1, scale3(d2, t));
|
|
50421
|
+
const distance2 = Math.sqrt(dot7(sub(point1, point2), sub(point1, point2)));
|
|
50422
|
+
return { point1, point2, distance: distance2 };
|
|
50423
|
+
}
|
|
50424
|
+
|
|
50072
50425
|
// src/stats/inference-extra2.ts
|
|
50073
50426
|
var TWO_PI = 2 * Math.PI;
|
|
50074
50427
|
function noncentralChi2CDF(x, df, nc) {
|
|
@@ -50128,22 +50481,22 @@ function noncentralTCDF(t, df, nc) {
|
|
|
50128
50481
|
}
|
|
50129
50482
|
function circularSums(angles, opts) {
|
|
50130
50483
|
const { high = TWO_PI, low = 0 } = opts;
|
|
50131
|
-
const
|
|
50484
|
+
const scale4 = TWO_PI / (high - low);
|
|
50132
50485
|
let sinSum = 0;
|
|
50133
50486
|
let cosSum = 0;
|
|
50134
50487
|
for (const a of angles) {
|
|
50135
|
-
const theta = (a - low) *
|
|
50488
|
+
const theta = (a - low) * scale4;
|
|
50136
50489
|
sinSum += Math.sin(theta);
|
|
50137
50490
|
cosSum += Math.cos(theta);
|
|
50138
50491
|
}
|
|
50139
|
-
return { sinSum, cosSum, scale:
|
|
50492
|
+
return { sinSum, cosSum, scale: scale4 };
|
|
50140
50493
|
}
|
|
50141
50494
|
function circmean(angles, opts = {}) {
|
|
50142
50495
|
const { low = 0 } = opts;
|
|
50143
|
-
const { sinSum, cosSum, scale:
|
|
50496
|
+
const { sinSum, cosSum, scale: scale4 } = circularSums(angles, opts);
|
|
50144
50497
|
let mean7 = Math.atan2(sinSum, cosSum);
|
|
50145
50498
|
if (mean7 < 0) mean7 += TWO_PI;
|
|
50146
|
-
return mean7 /
|
|
50499
|
+
return mean7 / scale4 + low;
|
|
50147
50500
|
}
|
|
50148
50501
|
function circvar(angles, opts = {}) {
|
|
50149
50502
|
const n = angles.length;
|
|
@@ -50675,10 +51028,10 @@ function hungarian(cost) {
|
|
|
50675
51028
|
}
|
|
50676
51029
|
|
|
50677
51030
|
// src/numeric/interval.ts
|
|
50678
|
-
var
|
|
51031
|
+
var EPS4 = Number.EPSILON;
|
|
50679
51032
|
function outward(lo, hi) {
|
|
50680
|
-
const loOut = lo - Math.abs(lo) *
|
|
50681
|
-
const hiOut = hi + Math.abs(hi) *
|
|
51033
|
+
const loOut = lo - Math.abs(lo) * EPS4 - Number.MIN_VALUE;
|
|
51034
|
+
const hiOut = hi + Math.abs(hi) * EPS4 + Number.MIN_VALUE;
|
|
50682
51035
|
return new Interval(loOut, hiOut);
|
|
50683
51036
|
}
|
|
50684
51037
|
var Interval = class {
|
|
@@ -50813,6 +51166,270 @@ var Interval = class {
|
|
|
50813
51166
|
function interval(lo, hi) {
|
|
50814
51167
|
return new Interval(lo, hi);
|
|
50815
51168
|
}
|
|
51169
|
+
|
|
51170
|
+
// src/graph/community-coloring.ts
|
|
51171
|
+
function _edgeExists(adj, i, j) {
|
|
51172
|
+
const w = adj[i][j];
|
|
51173
|
+
return Number.isFinite(w) && w !== 0;
|
|
51174
|
+
}
|
|
51175
|
+
function _undirectedEdgeExists(adj, i, j) {
|
|
51176
|
+
return _edgeExists(adj, i, j) || _edgeExists(adj, j, i);
|
|
51177
|
+
}
|
|
51178
|
+
function graphColoring(adj) {
|
|
51179
|
+
const n = adj.length;
|
|
51180
|
+
const colors = new Array(n).fill(-1);
|
|
51181
|
+
if (n === 0) return colors;
|
|
51182
|
+
const degree2 = new Array(n).fill(0);
|
|
51183
|
+
for (let i = 0; i < n; i++) {
|
|
51184
|
+
for (let j = 0; j < n; j++) {
|
|
51185
|
+
if (i !== j && _undirectedEdgeExists(adj, i, j)) degree2[i]++;
|
|
51186
|
+
}
|
|
51187
|
+
}
|
|
51188
|
+
const order = Array.from({ length: n }, (_, i) => i).sort(
|
|
51189
|
+
(a, b) => degree2[b] - degree2[a] || a - b
|
|
51190
|
+
);
|
|
51191
|
+
for (const v of order) {
|
|
51192
|
+
const usedByNeighbor = /* @__PURE__ */ new Set();
|
|
51193
|
+
for (let u = 0; u < n; u++) {
|
|
51194
|
+
if (u !== v && _undirectedEdgeExists(adj, v, u) && colors[u] !== -1) {
|
|
51195
|
+
usedByNeighbor.add(colors[u]);
|
|
51196
|
+
}
|
|
51197
|
+
}
|
|
51198
|
+
let c = 0;
|
|
51199
|
+
while (usedByNeighbor.has(c)) c++;
|
|
51200
|
+
colors[v] = c;
|
|
51201
|
+
}
|
|
51202
|
+
return colors;
|
|
51203
|
+
}
|
|
51204
|
+
function maxClique(adj) {
|
|
51205
|
+
const n = adj.length;
|
|
51206
|
+
if (n === 0) return [];
|
|
51207
|
+
const hasEdge = (i, j) => i !== j && _undirectedEdgeExists(adj, i, j);
|
|
51208
|
+
let best = [];
|
|
51209
|
+
function bronKerbosch(R, P2, X) {
|
|
51210
|
+
if (P2.size === 0 && X.size === 0) {
|
|
51211
|
+
if (R.length > best.length) best = R.slice();
|
|
51212
|
+
return;
|
|
51213
|
+
}
|
|
51214
|
+
let pivot = -1;
|
|
51215
|
+
let pivotCount = -1;
|
|
51216
|
+
for (const u of [...P2, ...X]) {
|
|
51217
|
+
let cnt = 0;
|
|
51218
|
+
for (const w of P2) if (hasEdge(u, w)) cnt++;
|
|
51219
|
+
if (cnt > pivotCount) {
|
|
51220
|
+
pivotCount = cnt;
|
|
51221
|
+
pivot = u;
|
|
51222
|
+
}
|
|
51223
|
+
}
|
|
51224
|
+
const candidates = pivot === -1 ? [...P2] : [...P2].filter((v) => !hasEdge(pivot, v));
|
|
51225
|
+
for (const v of candidates) {
|
|
51226
|
+
const newP = /* @__PURE__ */ new Set();
|
|
51227
|
+
const newX = /* @__PURE__ */ new Set();
|
|
51228
|
+
for (const w of P2) if (hasEdge(v, w)) newP.add(w);
|
|
51229
|
+
for (const w of X) if (hasEdge(v, w)) newX.add(w);
|
|
51230
|
+
bronKerbosch([...R, v], newP, newX);
|
|
51231
|
+
P2.delete(v);
|
|
51232
|
+
X.add(v);
|
|
51233
|
+
}
|
|
51234
|
+
}
|
|
51235
|
+
const initialP = new Set(Array.from({ length: n }, (_, i) => i));
|
|
51236
|
+
bronKerbosch([], initialP, /* @__PURE__ */ new Set());
|
|
51237
|
+
return best.sort((a, b) => a - b);
|
|
51238
|
+
}
|
|
51239
|
+
function _louvainLocalMoving(W) {
|
|
51240
|
+
const n = W.length;
|
|
51241
|
+
const kDeg = new Array(n).fill(0);
|
|
51242
|
+
for (let i = 0; i < n; i++) {
|
|
51243
|
+
let s = 0;
|
|
51244
|
+
for (let j = 0; j < n; j++) s += W[i][j];
|
|
51245
|
+
kDeg[i] = s;
|
|
51246
|
+
}
|
|
51247
|
+
const m2 = kDeg.reduce((a, b) => a + b, 0);
|
|
51248
|
+
const m = m2 / 2;
|
|
51249
|
+
const community = Array.from({ length: n }, (_, i) => i);
|
|
51250
|
+
const sigmaTot = kDeg.slice();
|
|
51251
|
+
if (m === 0) return community;
|
|
51252
|
+
let improved = true;
|
|
51253
|
+
while (improved) {
|
|
51254
|
+
improved = false;
|
|
51255
|
+
for (let i = 0; i < n; i++) {
|
|
51256
|
+
const ci = community[i];
|
|
51257
|
+
sigmaTot[ci] -= kDeg[i];
|
|
51258
|
+
const neighborWeight = /* @__PURE__ */ new Map();
|
|
51259
|
+
for (let j = 0; j < n; j++) {
|
|
51260
|
+
if (j === i) continue;
|
|
51261
|
+
const w = W[i][j];
|
|
51262
|
+
if (w > 0) {
|
|
51263
|
+
const cj = community[j];
|
|
51264
|
+
neighborWeight.set(cj, (neighborWeight.get(cj) ?? 0) + w);
|
|
51265
|
+
}
|
|
51266
|
+
}
|
|
51267
|
+
const candidates = new Set(neighborWeight.keys());
|
|
51268
|
+
candidates.add(ci);
|
|
51269
|
+
const sortedCandidates = [...candidates].sort((a, b) => a - b);
|
|
51270
|
+
let bestC = ci;
|
|
51271
|
+
let bestGain = (neighborWeight.get(ci) ?? 0) / m - kDeg[i] * sigmaTot[ci] / (2 * m * m);
|
|
51272
|
+
for (const c of sortedCandidates) {
|
|
51273
|
+
if (c === ci) continue;
|
|
51274
|
+
const gain = (neighborWeight.get(c) ?? 0) / m - kDeg[i] * sigmaTot[c] / (2 * m * m);
|
|
51275
|
+
if (gain > bestGain + 1e-12) {
|
|
51276
|
+
bestGain = gain;
|
|
51277
|
+
bestC = c;
|
|
51278
|
+
}
|
|
51279
|
+
}
|
|
51280
|
+
community[i] = bestC;
|
|
51281
|
+
sigmaTot[bestC] += kDeg[i];
|
|
51282
|
+
if (bestC !== ci) improved = true;
|
|
51283
|
+
}
|
|
51284
|
+
}
|
|
51285
|
+
return community;
|
|
51286
|
+
}
|
|
51287
|
+
function _louvainAggregate(W, community) {
|
|
51288
|
+
const distinct = [...new Set(community)].sort((a, b) => a - b);
|
|
51289
|
+
const remap = new Map(distinct.map((c, idx) => [c, idx]));
|
|
51290
|
+
const k = distinct.length;
|
|
51291
|
+
const n = W.length;
|
|
51292
|
+
const newW = Array.from({ length: k }, () => new Array(k).fill(0));
|
|
51293
|
+
for (let i = 0; i < n; i++) {
|
|
51294
|
+
const ci = remap.get(community[i]);
|
|
51295
|
+
for (let j = 0; j < n; j++) {
|
|
51296
|
+
const cj = remap.get(community[j]);
|
|
51297
|
+
newW[ci][cj] += W[i][j];
|
|
51298
|
+
}
|
|
51299
|
+
}
|
|
51300
|
+
return { newW, remap };
|
|
51301
|
+
}
|
|
51302
|
+
function louvainCommunities(adj) {
|
|
51303
|
+
const n = adj.length;
|
|
51304
|
+
if (n === 0) return [];
|
|
51305
|
+
if (n === 1) return [[0]];
|
|
51306
|
+
let curW = adj.map((row2) => row2.slice());
|
|
51307
|
+
let membership = Array.from({ length: n }, (_, i) => i);
|
|
51308
|
+
for (; ; ) {
|
|
51309
|
+
const community = _louvainLocalMoving(curW);
|
|
51310
|
+
const isIdentity = community.every((c, i) => c === i);
|
|
51311
|
+
if (isIdentity) break;
|
|
51312
|
+
const { newW, remap } = _louvainAggregate(curW, community);
|
|
51313
|
+
membership = membership.map((c) => remap.get(community[c]));
|
|
51314
|
+
curW = newW;
|
|
51315
|
+
if (curW.length === 1) break;
|
|
51316
|
+
}
|
|
51317
|
+
const groups = /* @__PURE__ */ new Map();
|
|
51318
|
+
for (let i = 0; i < n; i++) {
|
|
51319
|
+
const c = membership[i];
|
|
51320
|
+
const group = groups.get(c);
|
|
51321
|
+
if (group) group.push(i);
|
|
51322
|
+
else groups.set(c, [i]);
|
|
51323
|
+
}
|
|
51324
|
+
return [...groups.entries()].sort((a, b) => a[0] - b[0]).map(([, group]) => group);
|
|
51325
|
+
}
|
|
51326
|
+
function _solveLinearSystem(A, b) {
|
|
51327
|
+
const n = A.length;
|
|
51328
|
+
const M = A.map((row2, i) => [...row2, b[i]]);
|
|
51329
|
+
for (let col = 0; col < n; col++) {
|
|
51330
|
+
let pivotRow = col;
|
|
51331
|
+
let maxVal = Math.abs(M[col][col]);
|
|
51332
|
+
for (let r = col + 1; r < n; r++) {
|
|
51333
|
+
if (Math.abs(M[r][col]) > maxVal) {
|
|
51334
|
+
maxVal = Math.abs(M[r][col]);
|
|
51335
|
+
pivotRow = r;
|
|
51336
|
+
}
|
|
51337
|
+
}
|
|
51338
|
+
if (maxVal < 1e-14) {
|
|
51339
|
+
throw new Error(
|
|
51340
|
+
"katzCentrality: singular system \u2014 reduce alpha (must be < 1/largest eigenvalue)"
|
|
51341
|
+
);
|
|
51342
|
+
}
|
|
51343
|
+
if (pivotRow !== col) {
|
|
51344
|
+
const tmp = M[col];
|
|
51345
|
+
M[col] = M[pivotRow];
|
|
51346
|
+
M[pivotRow] = tmp;
|
|
51347
|
+
}
|
|
51348
|
+
const pivotVal = M[col][col];
|
|
51349
|
+
for (let j = col; j <= n; j++) M[col][j] /= pivotVal;
|
|
51350
|
+
for (let r = 0; r < n; r++) {
|
|
51351
|
+
if (r === col) continue;
|
|
51352
|
+
const factor2 = M[r][col];
|
|
51353
|
+
if (factor2 === 0) continue;
|
|
51354
|
+
for (let j = col; j <= n; j++) M[r][j] -= factor2 * M[col][j];
|
|
51355
|
+
}
|
|
51356
|
+
}
|
|
51357
|
+
return M.map((row2) => row2[n]);
|
|
51358
|
+
}
|
|
51359
|
+
function katzCentrality(adj, alpha, beta2 = 1) {
|
|
51360
|
+
const n = adj.length;
|
|
51361
|
+
if (n === 0) return [];
|
|
51362
|
+
const M = Array.from(
|
|
51363
|
+
{ length: n },
|
|
51364
|
+
(_, i) => Array.from({ length: n }, (_2, j) => (i === j ? 1 : 0) - alpha * adj[j][i])
|
|
51365
|
+
);
|
|
51366
|
+
const b = new Array(n).fill(beta2);
|
|
51367
|
+
const x = _solveLinearSystem(M, b);
|
|
51368
|
+
let sum3 = 0;
|
|
51369
|
+
let sumSq = 0;
|
|
51370
|
+
for (const xi of x) {
|
|
51371
|
+
sum3 += xi;
|
|
51372
|
+
sumSq += xi * xi;
|
|
51373
|
+
}
|
|
51374
|
+
const norm4 = Math.sign(sum3) * Math.sqrt(sumSq);
|
|
51375
|
+
if (norm4 === 0) return x;
|
|
51376
|
+
return x.map((xi) => xi / norm4);
|
|
51377
|
+
}
|
|
51378
|
+
function isIsomorphic(graphA, graphB) {
|
|
51379
|
+
const n = graphA.length;
|
|
51380
|
+
if (graphB.length !== n) return false;
|
|
51381
|
+
if (n === 0) return true;
|
|
51382
|
+
const degreeSequence = (adj) => {
|
|
51383
|
+
const size2 = adj.length;
|
|
51384
|
+
const seq = [];
|
|
51385
|
+
for (let i = 0; i < size2; i++) {
|
|
51386
|
+
let outDeg = 0;
|
|
51387
|
+
let inDeg = 0;
|
|
51388
|
+
for (let j = 0; j < size2; j++) {
|
|
51389
|
+
if (_edgeExists(adj, i, j)) outDeg++;
|
|
51390
|
+
if (_edgeExists(adj, j, i)) inDeg++;
|
|
51391
|
+
}
|
|
51392
|
+
seq.push(outDeg * (size2 + 1) + inDeg);
|
|
51393
|
+
}
|
|
51394
|
+
return seq.sort((a, b) => a - b);
|
|
51395
|
+
};
|
|
51396
|
+
const degA = degreeSequence(graphA);
|
|
51397
|
+
const degB = degreeSequence(graphB);
|
|
51398
|
+
for (let i = 0; i < n; i++) {
|
|
51399
|
+
if (degA[i] !== degB[i]) return false;
|
|
51400
|
+
}
|
|
51401
|
+
const mapAtoB = new Array(n).fill(-1);
|
|
51402
|
+
const usedB = new Array(n).fill(false);
|
|
51403
|
+
const order = Array.from({ length: n }, (_, i) => i);
|
|
51404
|
+
function backtrack(pos) {
|
|
51405
|
+
if (pos === n) return true;
|
|
51406
|
+
const a = order[pos];
|
|
51407
|
+
for (let b = 0; b < n; b++) {
|
|
51408
|
+
if (usedB[b]) continue;
|
|
51409
|
+
let consistent = true;
|
|
51410
|
+
for (let k = 0; k < pos; k++) {
|
|
51411
|
+
const a2 = order[k];
|
|
51412
|
+
const b2 = mapAtoB[a2];
|
|
51413
|
+
if (_edgeExists(graphA, a, a2) !== _edgeExists(graphB, b, b2)) {
|
|
51414
|
+
consistent = false;
|
|
51415
|
+
break;
|
|
51416
|
+
}
|
|
51417
|
+
if (_edgeExists(graphA, a2, a) !== _edgeExists(graphB, b2, b)) {
|
|
51418
|
+
consistent = false;
|
|
51419
|
+
break;
|
|
51420
|
+
}
|
|
51421
|
+
}
|
|
51422
|
+
if (!consistent) continue;
|
|
51423
|
+
mapAtoB[a] = b;
|
|
51424
|
+
usedB[b] = true;
|
|
51425
|
+
if (backtrack(pos + 1)) return true;
|
|
51426
|
+
usedB[b] = false;
|
|
51427
|
+
mapAtoB[a] = -1;
|
|
51428
|
+
}
|
|
51429
|
+
return false;
|
|
51430
|
+
}
|
|
51431
|
+
return backtrack(0);
|
|
51432
|
+
}
|
|
50816
51433
|
export {
|
|
50817
51434
|
ARRAY_WORKER_THRESHOLD,
|
|
50818
51435
|
CAS_BATCH_THRESHOLD,
|
|
@@ -51252,6 +51869,7 @@ export {
|
|
|
51252
51869
|
gradientAt,
|
|
51253
51870
|
gradientDescent,
|
|
51254
51871
|
gradientSymbolic,
|
|
51872
|
+
graphColoring,
|
|
51255
51873
|
graphDistance,
|
|
51256
51874
|
gravitationConstant,
|
|
51257
51875
|
gravity,
|
|
@@ -51318,6 +51936,7 @@ export {
|
|
|
51318
51936
|
isGpuChainSupported,
|
|
51319
51937
|
isGpuEnabled3 as isGpuEnabled,
|
|
51320
51938
|
isInteger2 as isInteger,
|
|
51939
|
+
isIsomorphic,
|
|
51321
51940
|
isNaN2 as isNaN,
|
|
51322
51941
|
isNegative,
|
|
51323
51942
|
isNumeric,
|
|
@@ -51335,6 +51954,7 @@ export {
|
|
|
51335
51954
|
jordanForm,
|
|
51336
51955
|
josephson,
|
|
51337
51956
|
jsDivergence,
|
|
51957
|
+
katzCentrality,
|
|
51338
51958
|
kdTree,
|
|
51339
51959
|
kdTreeKNN,
|
|
51340
51960
|
kdTreeNearest,
|
|
@@ -51399,6 +52019,7 @@ export {
|
|
|
51399
52019
|
logisticRegression,
|
|
51400
52020
|
logsumexp,
|
|
51401
52021
|
loschmidt,
|
|
52022
|
+
louvainCommunities,
|
|
51402
52023
|
lowRankApprox,
|
|
51403
52024
|
lowpassFilter,
|
|
51404
52025
|
lsolve,
|
|
@@ -51430,6 +52051,7 @@ export {
|
|
|
51430
52051
|
matrixSqrtm,
|
|
51431
52052
|
matvec,
|
|
51432
52053
|
max,
|
|
52054
|
+
maxClique,
|
|
51433
52055
|
maxFlow,
|
|
51434
52056
|
maxSelect,
|
|
51435
52057
|
maximize,
|
|
@@ -51597,10 +52219,13 @@ export {
|
|
|
51597
52219
|
quantileSeq,
|
|
51598
52220
|
quantumOfCirculation,
|
|
51599
52221
|
quaternionConjugate,
|
|
52222
|
+
quaternionExp,
|
|
51600
52223
|
quaternionFromAxisAngle,
|
|
51601
52224
|
quaternionInverse,
|
|
52225
|
+
quaternionLog,
|
|
51602
52226
|
quaternionMultiply,
|
|
51603
52227
|
quaternionNormalize,
|
|
52228
|
+
quaternionPow,
|
|
51604
52229
|
quaternionRotate,
|
|
51605
52230
|
quaternionSlerp,
|
|
51606
52231
|
quaternionToEuler,
|
|
@@ -51613,6 +52238,8 @@ export {
|
|
|
51613
52238
|
rank,
|
|
51614
52239
|
rankdata,
|
|
51615
52240
|
rationalize,
|
|
52241
|
+
rayPlaneIntersect,
|
|
52242
|
+
rayTriangleIntersect,
|
|
51616
52243
|
rayleighDist,
|
|
51617
52244
|
rbfInterpolate,
|
|
51618
52245
|
re,
|
|
@@ -51655,6 +52282,7 @@ export {
|
|
|
51655
52282
|
sech,
|
|
51656
52283
|
secondRadiation,
|
|
51657
52284
|
seedProbabilityRng,
|
|
52285
|
+
segmentSegmentClosest,
|
|
51658
52286
|
sem,
|
|
51659
52287
|
series,
|
|
51660
52288
|
seriesCoefficient,
|