@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/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 scale3 = inverse ? 1 / n : 1;
3405
+ const scale4 = inverse ? 1 / n : 1;
3406
3406
  for (let i = 0; i < n; i++) {
3407
- outRe[i] = packed[i * 2] * scale3;
3408
- outIm[i] = packed[i * 2 + 1] * scale3;
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], (mod2, [h]) => {
3640
- mod2["apply_window_f64"](h, wt);
3641
- return asReadReturnedF64(mod2, h);
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
- (mod2, [h]) => asReadReturnedF64(
3663
- mod2,
3664
- mod2["welch_psd_f64"](
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
- (mod2, [h]) => asReadReturnedF64(
3689
- mod2,
3690
- mod2["bartlett_psd_f64"](h, frameLength)
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
- (mod2, [h]) => mod2["goertzel_f64"](
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
- (mod2, [h]) => asReadReturnedF64(
3732
- mod2,
3733
- mod2["chirp_z_transform_f64"](h, m, phiStartRe, phiStartIm, phiStepRe, phiStepIm)
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
- throw new Error(`dwt: unsupported wavelet "${wavelet}"`);
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)], (mod2, [ha, hb, hr]) => {
4741
- mod2[names.as](ha, hb, hr);
4742
- return asReadReturnedI32(mod2, hr);
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)], (mod2, [ha, hr]) => {
4755
- mod2[names.as](ha, hr);
4756
- return asReadReturnedI32(mod2, hr);
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
- (mod2, [h]) => asReadReturnedF64(mod2, mod2[asName](order, h))
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
- (mod2, headers) => asReadReturnedF64(mod2, mod2[name254](...headers))
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 EPS4 = 1e-16;
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) * EPS4) break;
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) < EPS4) break;
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, scale3) {
8270
- if (shape <= 0 || scale3 <= 0) return NaN;
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 / scale3 - _lgammaD(shape) - shape * Math.log(scale3)
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, scale3) => gammaPDFScalar(x, shape, scale3),
8278
- "Float64Array, number, number": (x, shape, scale3) => {
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(scale3);
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 / scale3 - logConstant);
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 dot7 = v1[0] * v2[0] + v1[1] * v2[1];
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, dot7 / (mag1 * mag2))));
8535
+ return Math.acos(Math.max(-1, Math.min(1, dot8 / (mag1 * mag2))));
8399
8536
  }
8400
8537
  function angle3D(v1, v2) {
8401
- const dot7 = v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
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, dot7 / (mag1 * mag2))));
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 cross2(o, a, b) {
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 && cross2(lower[lower.length - 2], lower[lower.length - 1], p) <= 0) {
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 && cross2(upper[upper.length - 2], upper[upper.length - 1], p) <= 0) {
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 dot7 = v.reduce((s, c, i) => s + c * n[i], 0);
8511
- return v.map((c, i) => c - 2 * dot7 * n[i]);
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 dot7 = v.reduce((s, c, i) => s + c * onto[i], 0);
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 scale3 = dot7 / magSq;
8518
- return onto.map((c) => c * scale3);
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 cross2 = vertices[i][0] * vertices[j][1] - vertices[j][0] * vertices[i][1];
8594
- signedArea += cross2;
8595
- cx += (vertices[i][0] + vertices[j][0]) * cross2;
8596
- cy += (vertices[i][1] + vertices[j][1]) * cross2;
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
- (mod2, [ha, hb]) => asReadReturnedF64(mod2, mod2["poly_mul_f64"](ha, hb))
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
- (mod2, [hn, hd]) => asReadReturnedF64(
9185
- mod2,
9186
- mod2["poly_div_mod_f64"](hn, hd)
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
- (mod2, [hp, hq]) => mod2["poly_resultant_f64"](hp, hq)
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
- (mod2, [hp]) => mod2["poly_discriminant_f64"](hp)
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
- (mod2, [hx, hy]) => asReadReturnedF64(
9419
- mod2,
9420
- mod2[asName](hx, hy, degree2)
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
- (mod2, [hd, hl, hu, hr]) => asReadReturnedF64(
10952
- mod2,
10953
- mod2["tridiag_solve_f64"](
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
- (mod2, [hx, hy]) => asReadReturnedF64(
10993
- mod2,
10994
- mod2["divided_difference_f64"](hx, hy)
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: add3,
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 = add3(acc, multiply2(coeffs[j], stages[j]));
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(add3(t[n], multiply2(c[i], h)), add3(y[n], multiply2(h, stageCombo(a[i], k)))));
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(add3(t[n], h));
12004
- y.push(add3(y[n], multiply2(h, stageCombo(b, k))));
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 = add3(t, h);
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 scale3 = (ax - b[c]) / aNorm;
13375
- for (let j = 0; j < n; j++) xNew[j] -= scale3 * A[c][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 = directed ? (n - 1) * (n - 2) : (n - 1) * (n - 2) / 2;
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 dot7 = 0;
14676
- for (let i = 0; i < n; i++) dot7 += v[i] * ref[i];
14677
- if (dot7 < 0) {
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 scale3 = 1 / rate;
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 * scale3 * 20;
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 * scale3,
15245
- variance: shape * scale3 * scale3,
15246
- sample: () => _gammaRandom(shape) * scale3,
15247
- sampleN: (n, opts) => _sampleNDispatch("gamma", [shape, scale3], n, opts, (count2, rng) => {
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) * scale3;
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 dot7 = 0;
16642
- for (let j = 0; j < p; j++) dot7 += row2[j] * ev[j];
16643
- return dot7;
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 scale3 = M[pivotRow][col];
17307
+ const scale4 = M[pivotRow][col];
17171
17308
  for (let j = col; j < n; j++) {
17172
- M[pivotRow][j] /= scale3;
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 dot7 = 0;
17395
+ let dot8 = 0;
17259
17396
  for (let i = 0; i < len; i++) {
17260
- dot7 += v[i] * H[k + 1 + i][j];
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] * dot7;
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 dot7 = 0;
17404
+ let dot8 = 0;
17268
17405
  for (let j = 0; j < len; j++) {
17269
- dot7 += H[i][k + 1 + j] * v[j];
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 * dot7 * v[j];
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 dot7 = 0;
17413
+ let dot8 = 0;
17277
17414
  for (let j = 0; j < len; j++) {
17278
- dot7 += Q2[i][k + 1 + j] * v[j];
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 * dot7 * v[j];
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 scale3 = M[col][col];
17341
- for (let j = 0; j < 2 * n; j++) M[col][j] /= scale3;
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 scale3 = Math.pow(2, numSquares);
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] *= scale3;
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 scale3 = M[col][col];
17682
- if (Math.abs(scale3) < 1e-30) continue;
17683
- for (let j = 0; j <= n; j++) M[col][j] /= scale3;
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 add3 = addScalar2;
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
- add3 = typed3.find(addScalar2, [dt, dt]);
22635
+ add4 = typed3.find(addScalar2, [dt, dt]);
22499
22636
  mul = typed3.find(multiplyScalar2, [dt, dt]);
22500
22637
  }
22501
- if (!aIsColumn && !bIsColumn && add3 === addScalar2 && mul === multiplyScalar2 && _isFlatNumbers(adata) && _isFlatNumbers(bdata)) {
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 = add3(c, mul(conj3(adata[i]), bdata[i]));
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 = add3(c, mul(conj3(adata[i]), bdata[i][0]));
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 = add3(c, mul(conj3(adata[i][0]), bdata[i]));
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 = add3(c, mul(conj3(adata[i][0]), bdata[i][0]));
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 add3 = addScalar2;
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 = add3(c, mul(xvalues[i], yvalues[j]));
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: add3 }) => {
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 = add3(sum3, data[i][i]);
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 = add3(sum3, values[k]);
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: add3, multiply: multiply2, transpose: transpose5 }) => {
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 add3(a, at);
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: add3, multiply: multiply2, transpose: transpose5 }) => {
24712
- const csAmd2 = createCsAmd({ add: add3, multiply: multiply2, transpose: transpose5 });
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: add3
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 add3(replacement, zeros4(indexSize));
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: add3, multiply: multiply2, Complex: Complex13, number: number2 }) => {
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] = add3(c[i], multiply2(a[j], b[i - j]));
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: add3, unaryPlus: unaryPlus2 }) => {
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(add3(sums[i - 1], array[i]));
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: add3, numeric: numeric2, parseNumberWithConfig: parseNumberWithConfig2 }) => {
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 : add3(sum3, 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, add3);
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 mod2 = createMod({
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 = mod2(a, b);
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 = mod2(a, b);
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: mod2,
30319
- add: add3,
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 = mod2(a, b);
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 = mod2(invValue, b);
30336
- if (smaller2(inv3, 0)) inv3 = add3(inv3, b);
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: dot7,
30730
+ dot: dot8,
30594
30731
  ctranspose: ctranspose2,
30595
30732
  divideScalar: divideScalar2,
30596
30733
  multiply: multiply2,
30597
- add: add3,
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), dot7(x, 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] = add3(M[i2][j], multiply2(-1, multiply2(val, M[r][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(dot7(rref[j], rref[j]))));
30689
- const F = rref.filter((_, i) => !_isZero(dot7(rref[i], rref[i])));
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(add3(x, Complex13(1, 1)), add3(0, Complex13(1, 1)));
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
- add3(arr10, Complex13(1, 1)),
30698
- add3(multiply2(arr10, 0), Complex13(1, 1))
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: add3,
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 = add3(x, step);
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: add3, multiply: multiply2, map: map2, sqrt: sqrt2, subtract: subtract3, inv: inv3, size: size2, max: max2, identity: identity2 }) => {
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, add3(Yk, inv3(Z)));
34782
- Z = multiply2(0.5, add3(Z, inv3(Yk)));
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: add3,
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: add3, multiply: multiply2, transpose: transpose5 });
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: add3,
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 add3(multiply2(d1, t), o1);
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: add3, divide: divide2 }) => {
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, add3);
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 : add3(sum3, 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: add3, divide: divide2, compare: compare2, partitionSelect: partitionSelect2 }) => {
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(add3(left, right), 2);
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: add3,
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 : add3(sum3, 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) : add3(sum3, 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: add3,
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 = add3(probOrN, 1);
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(add3(left, right), 2);
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 add3(
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: add3, divide: divide2, multiply: multiply2, factorial: factorial5, isInteger: isInteger3, isPositive: isPositive2 }) => {
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 = add3(sum3, ai);
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: add3, multiply: multiply2, Complex: Complex13, divide: divide2, matrix: matrix2 }) => {
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 = add3(
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 = add3(
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: add3,
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 = add3(multiply2(2, b, b, b), multiply2(27, a, a, d));
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 = add3(multiply2(18, a, b, c, d), multiply2(b, b, c, c));
37457
- const discriminant2 = add3(
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), add3(multiply2(9, a, a, d), multiply2(b, b, b))),
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
- add3(
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(add3(b, C, divide2(Delta0, C)), denom));
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: add3,
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 = add3(j, 1)) {
37747
+ for (let j = k; smallerEq2(j, n); j = add4(j, 1)) {
37611
37748
  const factor2 = divide2(
37612
- multiply2(factorial5(add3(n, subtract3(j, 1))), pow2(4, j)),
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 = add3(S, factor2);
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 = add3(k, 1)) {
37623
- S = add3(S, divide2(multiply2((-1) ** (k - 1), d(k, n)), pow2(k, 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: dot7
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 sub of arr10) {
38061
- const n = sub.length;
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] = sub[i][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(dot7(w, v), dot7(w, w)),
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(dot7(v, v)));
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: add3
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 = add3(
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: add3,
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: dot7
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: add3
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: dot7
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: add3,
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 = add3(pow2(abs2(value), p), 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 = add3(fro, multiply2(value, conj3(value)));
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 = add3(c[j] || 0, abs2(value));
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 = add3(r[i] || 0, abs2(value));
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: add3,
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 = add3(
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(add3(F, gkk), gmk), hc(gkm, add3(F, gmm)));
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 = add3(RHS, multiply2(y[j], subset2(G, index(j, k))));
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 cross2 = (fpp - fpm - fmp + fmm) / (4 * h * h);
43456
- if (Math.abs(cross2) < 1e-12) continue;
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(cross2)}*${xi}*${xj}`);
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 scale3 = Math.max(1, ...f.map(Math.abs));
43487
- if (Math.abs(d4) > 1e-7 * scale3) return null;
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, mod2) {
44821
- let b = (base % mod2 + mod2) % mod2;
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 % mod2;
44826
- b = b * b % mod2;
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, mod2) {
44968
+ function modInverseBig(a, mod3) {
44832
44969
  let oldR = a;
44833
- let r = mod2;
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 % mod2 + mod2) % mod2;
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(sub, diag2, sup, d) {
46624
+ function thomasSolve(sub2, diag2, sup, d) {
46488
46625
  const n = diag2.length;
46489
46626
  if (n === 0) return [];
46490
- if (sub.length !== n - 1 || sup.length !== n - 1 || d.length !== n) {
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=${sub.length}, sup=${sup.length}, d=${d.length}`
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] - sub[i - 1] * cp[i - 1];
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] - sub[i - 1] * dp[i - 1]) / m;
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 funm(A, f) {
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
- for (let i = 0; i < n; i++) {
46820
- for (let j = i + 1; j < n; j++) {
46821
- if (cAbs(cSub(values[i], values[j])) < tol) {
46822
- throw new Error(
46823
- "funm: matrix has repeated (or numerically indistinguishable) eigenvalues and is not diagonal \u2014 defective/non-diagonalizable matrices are not supported (Schur-Parlett block recurrence not yet implemented)"
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 F = cZeros(n);
46829
- for (let i = 0; i < n; i++) {
46830
- const lambdaI = values[i];
46831
- let numerator = cFromReal(A);
46832
- let denom = { re: 1, im: 0 };
46833
- let first = true;
46834
- for (let j = 0; j < n; j++) {
46835
- if (j === i) continue;
46836
- const factor2 = cShiftedReal(A, values[j]);
46837
- numerator = first ? factor2 : cMatMul(numerator, factor2);
46838
- first = false;
46839
- denom = cMul(denom, cSub(lambdaI, values[j]));
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
- cAccumulate(F, f(lambdaI), cMatScalarDiv(numerator, denom));
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 scale3 = new Array(p);
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
- scale3[j] = meanSq > 1e-15 ? Math.sqrt(meanSq) : 1;
47845
+ scale4[j] = meanSq > 1e-15 ? Math.sqrt(meanSq) : 1;
47588
47846
  }
47589
- const Xs = Xc.map((row2) => row2.map((v, j) => v / scale3[j]));
47590
- return { Xs, scale: scale3 };
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: scale3 } = standardize(Xc, n, p);
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 / scale3[j]);
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: scale3 } = standardize(Xc, n, p);
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 / scale3[j]);
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 scale3 = MAX_STEP_NORM / stepNorm;
47709
- delta = delta.map((d) => d * scale3);
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 add3 = (a, b, s) => a.map((v, i) => v + s * b[i]);
47748
- const sub = (a, b) => a.map((v, i) => v - b[i]);
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 = add3(c, sub(c, simplex[n]), alpha);
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 = add3(c, sub(c, simplex[n]), gamma2);
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 = add3(c, sub(simplex[n], c), rho);
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] = add3(simplex[0], sub(simplex[i], simplex[0]), sigma);
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, scale3) {
48152
- return (shape - 1) * Math.log(x) - x / scale3 - lgamma(shape) - shape * Math.log(scale3);
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 scale3 = xbar / shape;
48427
+ const scale4 = xbar / shape;
48170
48428
  let logLikelihood = 0;
48171
- for (const x of data) logLikelihood += gammaLogPdf(x, shape, scale3);
48172
- return { params: { shape, scale: scale3 }, logLikelihood };
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 cAdd = (p, q) => p.add(q);
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 cScale = (p, s) => cMul2(p, new Complex11(s, 0));
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] = cAdd(next[i], c[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) => cScale(zv, wo)),
48687
- p: p.map((pv) => cScale(pv, wo)),
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) => cScale(r, bw / 2));
48707
- const plus = lp.map((r) => cAdd(r, cSub2(cMul2(r, r), wo2).sqrt()));
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) => cAdd(r, cSub2(cMul2(r, r), wo2).sqrt()));
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(cAdd(fs2, zv), cSub2(fs2, zv)));
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(cAdd(fs2, pv), cSub2(fs2, pv))),
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(cScale(wn, ks[i]));
49012
- wn = cDiv2(cScale(wn, 2), cMul2(new Complex12(1 + knext, 0), new Complex12(1, 0).add(comp)));
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 cScale(cScale(wn.asin(), 2 / Math.PI), K);
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
- if (wavelet !== "haar" && wavelet !== "db1") {
49574
- throw new Error(`idwt: unsupported wavelet "${wavelet}"`);
49575
- }
49576
- if (approx.length !== detail.length) {
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, scale3) {
49613
- const amplitude = 2 / (Math.sqrt(3 * scale3) * Math.pow(Math.PI, 0.25));
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) / scale3;
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, scale3) {
49624
- const norm4 = 1 / (Math.sqrt(scale3) * Math.pow(Math.PI, 0.25));
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) / scale3;
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((scale3) => {
49639
- if (scale3 <= 0) throw new Error("cwt: scales must be positive");
49640
- const points = Math.max(1, Math.min(Math.round(10 * scale3), n));
49641
- const psi = wavelet === "ricker" ? rickerWavelet(points, scale3) : morletWavelet(points, scale3);
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 scale3 = 1 / (fs * winSum2 * nSeg);
50008
+ const scale4 = 1 / (fs * winSum2 * nSeg);
49760
50009
  for (let k = 0; k < half; k++) {
49761
- re3[k] *= scale3;
49762
- im3[k] *= scale3;
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 scale3 = S.reduce((s, v) => s + v, 0);
50015
- const transformed = matMul2(B0, R).map((row2) => row2.map((v) => v * scale3));
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: scale3, disparity };
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 scale3 = TWO_PI / (high - low);
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) * scale3;
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: scale3 };
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: scale3 } = circularSums(angles, opts);
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 / scale3 + low;
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 EPS3 = Number.EPSILON;
51031
+ var EPS4 = Number.EPSILON;
50679
51032
  function outward(lo, hi) {
50680
- const loOut = lo - Math.abs(lo) * EPS3 - Number.MIN_VALUE;
50681
- const hiOut = hi + Math.abs(hi) * EPS3 + Number.MIN_VALUE;
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,