@danielsimonjr/mathts-functions 0.20.2 → 0.22.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/arithmetic/norm.d.ts.map +1 -1
- package/dist/gpu/elementwise-gpu.d.ts.map +1 -1
- package/dist/gpu/fft-gpu.d.ts +75 -0
- package/dist/gpu/fft-gpu.d.ts.map +1 -0
- package/dist/index.js +272 -91
- package/dist/statistics/sum.d.ts.map +1 -1
- package/dist/typed/arithmetic.d.ts +14 -0
- package/dist/typed/arithmetic.d.ts.map +1 -1
- package/dist/typed/index.d.ts +1 -0
- package/dist/typed/index.d.ts.map +1 -1
- package/dist/typed/signal.d.ts.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"norm.d.ts","sourceRoot":"","sources":["../../src/arithmetic/norm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"norm.d.ts","sourceRoot":"","sources":["../../src/arithmetic/norm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAO/D,UAAU,WAAW;IACnB,GAAG,IAAI,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACrB,GAAG,IAAI,aAAa,CAAC;CACtB;AAED,UAAU,UAAU;IAClB,IAAI,IAAI,MAAM,EAAE,CAAC;IACjB,OAAO,CACL,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,EAC3C,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,UAAU,KACf,IAAI,EACT,SAAS,CAAC,EAAE,OAAO,GAClB,IAAI,CAAC;IACR,OAAO,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,WAAW,CAAC,EAAE,CAAC;CACrD;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,aAAa,CAAC;IACrB,GAAG,EAAE,aAAa,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,aAAa,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,KAAK,OAAO,CAAC;IAC1E,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,KAAK,OAAO,CAAC;IAC3E,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,UAAU,CAAC;IACtC,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,UAAU,CAAC;CACrC;AAmBD,eAAO,MAAM,UAAU,gFAiXtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elementwise-gpu.d.ts","sourceRoot":"","sources":["../../src/gpu/elementwise-gpu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"elementwise-gpu.d.ts","sourceRoot":"","sources":["../../src/gpu/elementwise-gpu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAQL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AA+CnC,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;CAgCR,CAAC;AAEX,uEAAuE;AACvE,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,YAAY,CAAC;AAEzD,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAEpC,CAAC;AAExB,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,IAAI,SAAS,gBAAgB,EAAE,CAE9F;AAoCD,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAIhD,eAAO,MAAM,cAAc,gCAAkE,CAAC;AAwG9F,uEAAuE;AACvE,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAED,+CAA+C;AAC/C,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,EAAE,EAAE,YAAY,GAAG,YAAY,EAC/B,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAE9B;AA8ID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,EAAE,EAAE,YAAY,GAAG,YAAY,EAC/B,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAExB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebGPU FFT — Stockham autosort, radix-2, f32.
|
|
3
|
+
*
|
|
4
|
+
* Why Stockham rather than the textbook Cooley-Tukey the CPU core uses: it is
|
|
5
|
+
* **self-sorting**. Each pass reads one buffer and scatters into another, so the output
|
|
6
|
+
* comes out in natural order with **no bit-reversal permutation pass** — and a bit-reversal
|
|
7
|
+
* is a pure memory shuffle, which is the one thing a GPU is worst at. The ping-pong between
|
|
8
|
+
* two buffers is also exactly the access pattern the hardware wants.
|
|
9
|
+
*
|
|
10
|
+
* ### Is it worth it? (see `FFT_GPU_MIN_ELEMENTS` for the full table)
|
|
11
|
+
*
|
|
12
|
+
* Chrome / NVIDIA Pascal, warm JIT, against `fftCoreFloat64` — the flat f64 core that
|
|
13
|
+
* `parallelFFT` runs on this thread:
|
|
14
|
+
*
|
|
15
|
+
* | n | CPU f64 | GPU f32 | speedup |
|
|
16
|
+
* | --------- | -------- | -------- | --------- |
|
|
17
|
+
* | 65,536 | 16.8 ms | 14.4 ms | 1.17× |
|
|
18
|
+
* | 262,144 | 53.4 ms | 24.0 ms | **2.23×** |
|
|
19
|
+
* | 1,048,576 | 253.1 ms | 79.7 ms | **3.18×** |
|
|
20
|
+
* | 2,097,152 | 399.9 ms | 116.3 ms | **3.44×** |
|
|
21
|
+
*
|
|
22
|
+
* (~2.2-3.4x, and the ratio is genuinely noisy run to run — regenerate it with
|
|
23
|
+
* `gpu-fft-bench.browser.test.ts` rather than trusting a single hero number. f32 error is
|
|
24
|
+
* ~4e-7 peak-relative at every size above.)
|
|
25
|
+
*
|
|
26
|
+
* Two things decided the design:
|
|
27
|
+
*
|
|
28
|
+
* - **The threshold is 262,144, NOT `GPU_MIN_ELEMENTS`.** At 65,536 the GPU wins by 1.17×,
|
|
29
|
+
* which is inside the noise and nowhere near enough to justify dropping f64 for f32. An
|
|
30
|
+
* FFT makes log2(n) passes over the data, so it amortises the upload more slowly than the
|
|
31
|
+
* memory-bound element-wise chain does. Sharing one threshold would have been convenient
|
|
32
|
+
* and wrong.
|
|
33
|
+
* - **f32 accuracy holds.** Error growth across log2(n) stages was the real risk — it is why
|
|
34
|
+
* an f32 FFT is a harder sell than an f32 element-wise chain. Measured ~4e-7 relative to
|
|
35
|
+
* the spectrum's peak magnitude even at 20 stages, a few times f32 epsilon. Stockham is
|
|
36
|
+
* numerically well-behaved; the error did not compound.
|
|
37
|
+
*
|
|
38
|
+
* An earlier revision of this comment claimed 5.0-8.5x. That came from a COLD-JIT CPU
|
|
39
|
+
* baseline and from comparing against a CPU path `parallelFFT` did not actually take. Both
|
|
40
|
+
* are fixed; the numbers above are warm, and measured against the path it really runs.
|
|
41
|
+
*
|
|
42
|
+
* Same never-throw contract as the rest of the GPU surface: returns `null` — never rejects —
|
|
43
|
+
* whenever the GPU is unavailable, not opted into, the input is below threshold, not a power
|
|
44
|
+
* of two, or a device limit is exceeded. The caller then uses the exact f64 CPU path.
|
|
45
|
+
*
|
|
46
|
+
* @packageDocumentation
|
|
47
|
+
*/
|
|
48
|
+
import { type GPUContextOptions } from '@danielsimonjr/mathts-gpu';
|
|
49
|
+
/** Drop cached shaders/buffers (device loss, or between tests). */
|
|
50
|
+
export declare function resetGpuFft(): void;
|
|
51
|
+
/** Options for the GPU FFT. `gpu` overrides the process-global `enableGpu()` flag. */
|
|
52
|
+
export interface GpuFftOptions extends GPUContextOptions {
|
|
53
|
+
/** Force the GPU on/off for this call, ignoring the global flag. */
|
|
54
|
+
gpu?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/** Result of a GPU FFT: f32-precision values widened into the f64 container. */
|
|
57
|
+
export interface GpuFftResult {
|
|
58
|
+
real: Float64Array;
|
|
59
|
+
imag: Float64Array;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Run an FFT on the GPU.
|
|
63
|
+
*
|
|
64
|
+
* `real`/`imag` must be the same length, a power of two, and at least `FFT_GPU_MIN_ELEMENTS`
|
|
65
|
+
* (262,144) — below that the GPU's margin (1.17× at 65,536) does not justify dropping f64 for
|
|
66
|
+
* f32, so this declines and the caller keeps the exact CPU path.
|
|
67
|
+
*
|
|
68
|
+
* Returns `null` rather than throwing whenever it cannot or should not run, so the caller
|
|
69
|
+
* simply falls through to the exact f64 CPU path.
|
|
70
|
+
*
|
|
71
|
+
* Precision: f32 (~4e-7 relative to the spectrum's peak, measured through 20 stages).
|
|
72
|
+
* `enableGpu()` is how a caller consents to that.
|
|
73
|
+
*/
|
|
74
|
+
export declare function fftGpuDispatch(real: Float64Array, imag: Float64Array, inverse?: boolean, options?: GpuFftOptions): Promise<GpuFftResult | null>;
|
|
75
|
+
//# sourceMappingURL=fft-gpu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fft-gpu.d.ts","sourceRoot":"","sources":["../../src/gpu/fft-gpu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,2BAA2B,CAAC;AAqGnC,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,IAAI,CAKlC;AA6BD,sFAAsF;AACtF,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,oEAAoE;IACpE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE,YAAY,EAClB,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAe9B"}
|
package/dist/index.js
CHANGED
|
@@ -184,6 +184,7 @@ __export(typed_exports, {
|
|
|
184
184
|
factor: () => factor,
|
|
185
185
|
fallingFactorial: () => fallingFactorial,
|
|
186
186
|
fft2d: () => fft2d,
|
|
187
|
+
fftGpuDispatch: () => fftGpuDispatch,
|
|
187
188
|
fibonacci: () => fibonacci,
|
|
188
189
|
findRoot: () => findRoot,
|
|
189
190
|
fix: () => fix,
|
|
@@ -193,6 +194,7 @@ __export(typed_exports, {
|
|
|
193
194
|
fresnelC: () => fresnelC,
|
|
194
195
|
fresnelS: () => fresnelS,
|
|
195
196
|
friedmanTest: () => friedmanTest,
|
|
197
|
+
fsum: () => fsum,
|
|
196
198
|
fullSimplify: () => fullSimplify,
|
|
197
199
|
functionExpand: () => functionExpand,
|
|
198
200
|
fuseUnaryChain: () => fuseUnaryChain,
|
|
@@ -240,7 +242,7 @@ __export(typed_exports, {
|
|
|
240
242
|
invGaussDist: () => invGaussDist,
|
|
241
243
|
isConnected: () => isConnected,
|
|
242
244
|
isGpuChainSupported: () => isGpuChainSupported,
|
|
243
|
-
isGpuEnabled: () =>
|
|
245
|
+
isGpuEnabled: () => isGpuEnabled3,
|
|
244
246
|
jacobiSymbol: () => jacobiSymbol,
|
|
245
247
|
jordanForm: () => jordanForm,
|
|
246
248
|
jsDivergence: () => jsDivergence,
|
|
@@ -312,7 +314,7 @@ __export(typed_exports, {
|
|
|
312
314
|
nintegrate: () => nintegrate,
|
|
313
315
|
noncentralChi2PDF: () => noncentralChi2PDF,
|
|
314
316
|
norm: () => norm,
|
|
315
|
-
norm2: () =>
|
|
317
|
+
norm2: () => norm22,
|
|
316
318
|
normFro: () => normFro,
|
|
317
319
|
normalCDF: () => normalCDF,
|
|
318
320
|
normalDist: () => normalDist,
|
|
@@ -400,6 +402,7 @@ __export(typed_exports, {
|
|
|
400
402
|
reflectVector: () => reflectVector,
|
|
401
403
|
resample: () => resample,
|
|
402
404
|
resetGpuElementwise: () => resetGpuElementwise,
|
|
405
|
+
resetGpuFft: () => resetGpuFft,
|
|
403
406
|
residue: () => residue,
|
|
404
407
|
resultant: () => resultant,
|
|
405
408
|
rightArithShift: () => rightArithShift,
|
|
@@ -507,6 +510,7 @@ __export(typed_exports, {
|
|
|
507
510
|
|
|
508
511
|
// src/typed/arithmetic.ts
|
|
509
512
|
import { mathTyped as mathTyped2, Complex, Fraction, BigNumber, Dual } from "@danielsimonjr/mathts-core";
|
|
513
|
+
import { pairwiseSum, neumaierSum, norm2 } from "@danielsimonjr/mathts-core";
|
|
510
514
|
import { DenseMatrix as DenseMatrix2, backendManager as backendManager2, singularValues } from "@danielsimonjr/mathts-matrix";
|
|
511
515
|
|
|
512
516
|
// src/factories/matrix-bridge.ts
|
|
@@ -2018,11 +2022,10 @@ function vectorNorm(arr7, p = 2) {
|
|
|
2018
2022
|
if (p === Infinity) return Math.max(...arr7.map((x) => Math.abs(x)));
|
|
2019
2023
|
if (p === -Infinity) return Math.min(...arr7.map((x) => Math.abs(x)));
|
|
2020
2024
|
if (p === 0) return arr7.filter((x) => x !== 0).length;
|
|
2021
|
-
if (p === 2) return
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
);
|
|
2025
|
+
if (p === 2) return norm2(arr7);
|
|
2026
|
+
const terms = new Array(arr7.length);
|
|
2027
|
+
for (let i = 0; i < arr7.length; i++) terms[i] = Math.pow(Math.abs(arr7[i]), p);
|
|
2028
|
+
return Math.pow(pairwiseSum(terms), 1 / p);
|
|
2026
2029
|
}
|
|
2027
2030
|
function matrixNorm(data, p = "fro") {
|
|
2028
2031
|
const rows = data.length;
|
|
@@ -2079,9 +2082,7 @@ var norm = mathTyped2("norm", {
|
|
|
2079
2082
|
if (computePool.shouldParallelize(a.length, "norm")) {
|
|
2080
2083
|
return (await computePool.norm(a)).result;
|
|
2081
2084
|
}
|
|
2082
|
-
|
|
2083
|
-
for (let i = 0; i < a.length; i++) s += a[i] * a[i];
|
|
2084
|
-
return Math.sqrt(s);
|
|
2085
|
+
return norm2(a);
|
|
2085
2086
|
}
|
|
2086
2087
|
});
|
|
2087
2088
|
var sinh = mathTyped2("sinh", {
|
|
@@ -2213,15 +2214,28 @@ var max = mathTyped2("max", {
|
|
|
2213
2214
|
return m;
|
|
2214
2215
|
}
|
|
2215
2216
|
});
|
|
2217
|
+
var fsum = mathTyped2("fsum", {
|
|
2218
|
+
Array: (arr7) => neumaierSum(arr7),
|
|
2219
|
+
Float64Array: (a) => neumaierSum(a)
|
|
2220
|
+
});
|
|
2216
2221
|
var sum = mathTyped2("sum", {
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
//
|
|
2222
|
+
// PAIRWISE summation, not `total += arr[i]`.
|
|
2223
|
+
//
|
|
2224
|
+
// Naive accumulation lets the running total grow large while the addends stay small, so each
|
|
2225
|
+
// addition rounds off a bit more of the total: error grows as O(n)*eps. Measured on 1e6 copies
|
|
2226
|
+
// of 0.1 (exact answer 100000):
|
|
2227
|
+
//
|
|
2228
|
+
// naive (what shipped) relative error 1.3e-11
|
|
2229
|
+
// pairwise (this) relative error 2.9e-16 <- identical to NumPy's np.sum
|
|
2230
|
+
//
|
|
2231
|
+
// We were ~46,000x less accurate than NumPy on a bog-standard `sum`, and `mean`/`std`/`variance`
|
|
2232
|
+
// all inherit it. Pairwise costs the same number of additions — the naive loop was simply worse.
|
|
2233
|
+
// For catastrophic cancellation (e.g. [1e16, 1, -1e16], which pairwise AND np.sum both
|
|
2234
|
+
// annihilate to 0) use `fsum`.
|
|
2235
|
+
Array: (arr7) => pairwiseSum(arr7),
|
|
2236
|
+
// Float64Array: the pool's sequential branch is pairwise too (see ComputePool.sum), and its
|
|
2237
|
+
// parallel branch sums per-chunk then combines — blocked summation, which is pairwise-like.
|
|
2238
|
+
// Either way the O(n) drift is gone.
|
|
2225
2239
|
Float64Array: async (a) => {
|
|
2226
2240
|
const result = await computePool.sum(a);
|
|
2227
2241
|
return result.result;
|
|
@@ -2230,11 +2244,7 @@ var sum = mathTyped2("sum", {
|
|
|
2230
2244
|
var mean = mathTyped2("mean", {
|
|
2231
2245
|
Array: (arr7) => {
|
|
2232
2246
|
if (arr7.length === 0) return NaN;
|
|
2233
|
-
|
|
2234
|
-
for (let i = 0; i < arr7.length; i++) {
|
|
2235
|
-
total += arr7[i];
|
|
2236
|
-
}
|
|
2237
|
-
return total / arr7.length;
|
|
2247
|
+
return pairwiseSum(arr7) / arr7.length;
|
|
2238
2248
|
},
|
|
2239
2249
|
// Parallel Float64Array mean
|
|
2240
2250
|
Float64Array: async (a) => {
|
|
@@ -3256,6 +3266,179 @@ function fftCoreFloat64(realIn, imagIn, inverse = false) {
|
|
|
3256
3266
|
return { real, imag };
|
|
3257
3267
|
}
|
|
3258
3268
|
|
|
3269
|
+
// src/gpu/fft-gpu.ts
|
|
3270
|
+
import {
|
|
3271
|
+
getGpuDevice,
|
|
3272
|
+
getGlobalGPUContext,
|
|
3273
|
+
isGpuEnabled,
|
|
3274
|
+
ShaderManager,
|
|
3275
|
+
BufferPool,
|
|
3276
|
+
serializeGpu
|
|
3277
|
+
} from "@danielsimonjr/mathts-gpu";
|
|
3278
|
+
var WORKGROUP_SIZE = 64;
|
|
3279
|
+
var FFT_GPU_MIN_ELEMENTS = 262144;
|
|
3280
|
+
var SHADER_KEY = "fft:stockham";
|
|
3281
|
+
var STOCKHAM_WGSL = `
|
|
3282
|
+
@group(0) @binding(0) var<storage, read> src: array<vec2<f32>>;
|
|
3283
|
+
@group(0) @binding(1) var<storage, read_write> dst: array<vec2<f32>>;
|
|
3284
|
+
@group(0) @binding(2) var<uniform> params: vec4<u32>; // n, ns, inverse, _
|
|
3285
|
+
|
|
3286
|
+
fn cmul(a: vec2<f32>, b: vec2<f32>) -> vec2<f32> {
|
|
3287
|
+
return vec2<f32>(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
|
|
3288
|
+
}
|
|
3289
|
+
|
|
3290
|
+
@compute @workgroup_size(${WORKGROUP_SIZE})
|
|
3291
|
+
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
3292
|
+
let n = params.x;
|
|
3293
|
+
let ns = params.y;
|
|
3294
|
+
let half = n / 2u;
|
|
3295
|
+
let i = gid.x;
|
|
3296
|
+
if (i >= half) { return; }
|
|
3297
|
+
|
|
3298
|
+
// -1 forward, +1 inverse \u2014 the same sign convention as the CPU core, so the two
|
|
3299
|
+
// implementations agree on which direction is which.
|
|
3300
|
+
let sgn = select(-1.0, 1.0, params.z == 1u);
|
|
3301
|
+
let angle = sgn * 2.0 * 3.14159265358979323846 * f32(i % ns) / f32(ns * 2u);
|
|
3302
|
+
let tw = vec2<f32>(cos(angle), sin(angle));
|
|
3303
|
+
|
|
3304
|
+
let v0 = src[i];
|
|
3305
|
+
let v1 = cmul(src[i + half], tw);
|
|
3306
|
+
|
|
3307
|
+
let idxD = (i / ns) * ns * 2u + (i % ns);
|
|
3308
|
+
dst[idxD] = v0 + v1;
|
|
3309
|
+
dst[idxD + ns] = v0 - v1;
|
|
3310
|
+
}
|
|
3311
|
+
`;
|
|
3312
|
+
var resources = null;
|
|
3313
|
+
async function getResources(options) {
|
|
3314
|
+
const device = await getGpuDevice(options);
|
|
3315
|
+
if (!device) return null;
|
|
3316
|
+
if (resources && resources.device === device) return resources;
|
|
3317
|
+
if (resources) resetGpuFft();
|
|
3318
|
+
const ctx = getGlobalGPUContext();
|
|
3319
|
+
const shaders = new ShaderManager(ctx);
|
|
3320
|
+
shaders.registerShader(SHADER_KEY, STOCKHAM_WGSL);
|
|
3321
|
+
shaders.precompileRegistered();
|
|
3322
|
+
resources = { device, shaders, pool: new BufferPool(ctx), stageUniforms: /* @__PURE__ */ new Map() };
|
|
3323
|
+
return resources;
|
|
3324
|
+
}
|
|
3325
|
+
function resetGpuFft() {
|
|
3326
|
+
if (!resources) return;
|
|
3327
|
+
for (const bufs of resources.stageUniforms.values()) bufs.forEach((b) => b.destroy());
|
|
3328
|
+
resources.pool.destroy();
|
|
3329
|
+
resources = null;
|
|
3330
|
+
}
|
|
3331
|
+
function stageUniformsFor(res, n, inverse) {
|
|
3332
|
+
const key = `${n}:${inverse ? 1 : 0}`;
|
|
3333
|
+
const cached = res.stageUniforms.get(key);
|
|
3334
|
+
if (cached) return cached;
|
|
3335
|
+
const stages = Math.log2(n);
|
|
3336
|
+
const bufs = [];
|
|
3337
|
+
for (let s = 0, ns = 1; s < stages; s++, ns *= 2) {
|
|
3338
|
+
const u = res.device.createBuffer({
|
|
3339
|
+
size: 16,
|
|
3340
|
+
usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
|
|
3341
|
+
label: `fft-stage-${s}`
|
|
3342
|
+
});
|
|
3343
|
+
res.device.queue.writeBuffer(u, 0, new Uint32Array([n, ns, inverse ? 1 : 0, 0]));
|
|
3344
|
+
bufs.push(u);
|
|
3345
|
+
}
|
|
3346
|
+
res.stageUniforms.set(key, bufs);
|
|
3347
|
+
return bufs;
|
|
3348
|
+
}
|
|
3349
|
+
var isPowerOf2 = (n) => n > 0 && (n & n - 1) === 0;
|
|
3350
|
+
function fftGpuDispatch(real, imag, inverse = false, options) {
|
|
3351
|
+
const n = real.length;
|
|
3352
|
+
if (!(options?.gpu ?? isGpuEnabled())) return Promise.resolve(null);
|
|
3353
|
+
if (imag.length !== n) return Promise.resolve(null);
|
|
3354
|
+
if (n < FFT_GPU_MIN_ELEMENTS) return Promise.resolve(null);
|
|
3355
|
+
if (!isPowerOf2(n)) return Promise.resolve(null);
|
|
3356
|
+
return serializeGpu(() => fftGpuDispatchImpl(real, imag, inverse, options));
|
|
3357
|
+
}
|
|
3358
|
+
async function fftGpuDispatchImpl(real, imag, inverse, options) {
|
|
3359
|
+
const n = real.length;
|
|
3360
|
+
const bytes = n * 8;
|
|
3361
|
+
const workgroups = Math.ceil(n / 2 / WORKGROUP_SIZE);
|
|
3362
|
+
let res;
|
|
3363
|
+
let bufA;
|
|
3364
|
+
let bufB;
|
|
3365
|
+
let staging;
|
|
3366
|
+
let scopePushed = false;
|
|
3367
|
+
let scopePopped = false;
|
|
3368
|
+
try {
|
|
3369
|
+
const r = await getResources(options);
|
|
3370
|
+
if (!r) return null;
|
|
3371
|
+
res = r;
|
|
3372
|
+
const { device, shaders, pool } = r;
|
|
3373
|
+
const limits = device.limits;
|
|
3374
|
+
if (workgroups > limits.maxComputeWorkgroupsPerDimension) return null;
|
|
3375
|
+
if (bytes > limits.maxStorageBufferBindingSize) return null;
|
|
3376
|
+
if (bytes > limits.maxBufferSize) return null;
|
|
3377
|
+
const stageUniforms = stageUniformsFor(r, n, inverse);
|
|
3378
|
+
const input = new Float32Array(n * 2);
|
|
3379
|
+
for (let i = 0; i < n; i++) {
|
|
3380
|
+
input[i * 2] = real[i];
|
|
3381
|
+
input[i * 2 + 1] = imag[i];
|
|
3382
|
+
}
|
|
3383
|
+
device.pushErrorScope("validation");
|
|
3384
|
+
scopePushed = true;
|
|
3385
|
+
bufA = pool.acquireStorageBuffer(bytes, "fft-a", true, true);
|
|
3386
|
+
bufB = pool.acquireStorageBuffer(bytes, "fft-b", true, true);
|
|
3387
|
+
staging = pool.acquireStagingBuffer(bytes, "fft-staging");
|
|
3388
|
+
device.queue.writeBuffer(bufA, 0, input);
|
|
3389
|
+
const pipeline = shaders.getRegisteredPipeline(SHADER_KEY);
|
|
3390
|
+
const encoder = device.createCommandEncoder({ label: "fft-stockham" });
|
|
3391
|
+
let src = bufA;
|
|
3392
|
+
let dst2 = bufB;
|
|
3393
|
+
for (let s = 0; s < stageUniforms.length; s++) {
|
|
3394
|
+
const bindGroup = device.createBindGroup({
|
|
3395
|
+
layout: pipeline.getBindGroupLayout(0),
|
|
3396
|
+
entries: [
|
|
3397
|
+
{ binding: 0, resource: { buffer: src } },
|
|
3398
|
+
{ binding: 1, resource: { buffer: dst2 } },
|
|
3399
|
+
{ binding: 2, resource: { buffer: stageUniforms[s] } }
|
|
3400
|
+
]
|
|
3401
|
+
});
|
|
3402
|
+
const pass = encoder.beginComputePass({ label: `fft-stage-${s}` });
|
|
3403
|
+
pass.setPipeline(pipeline);
|
|
3404
|
+
pass.setBindGroup(0, bindGroup);
|
|
3405
|
+
pass.dispatchWorkgroups(workgroups);
|
|
3406
|
+
pass.end();
|
|
3407
|
+
[src, dst2] = [dst2, src];
|
|
3408
|
+
}
|
|
3409
|
+
encoder.copyBufferToBuffer(src, 0, staging, 0, bytes);
|
|
3410
|
+
device.queue.submit([encoder.finish()]);
|
|
3411
|
+
const validationError = await device.popErrorScope();
|
|
3412
|
+
scopePopped = true;
|
|
3413
|
+
if (validationError) return null;
|
|
3414
|
+
await staging.mapAsync(GPUMapMode.READ, 0, bytes);
|
|
3415
|
+
const packed = new Float32Array(staging.getMappedRange(0, bytes).slice(0));
|
|
3416
|
+
staging.unmap();
|
|
3417
|
+
const outRe = new Float64Array(n);
|
|
3418
|
+
const outIm = new Float64Array(n);
|
|
3419
|
+
const scale = inverse ? 1 / n : 1;
|
|
3420
|
+
for (let i = 0; i < n; i++) {
|
|
3421
|
+
outRe[i] = packed[i * 2] * scale;
|
|
3422
|
+
outIm[i] = packed[i * 2 + 1] * scale;
|
|
3423
|
+
}
|
|
3424
|
+
return { real: outRe, imag: outIm };
|
|
3425
|
+
} catch {
|
|
3426
|
+
return null;
|
|
3427
|
+
} finally {
|
|
3428
|
+
if (res && scopePushed && !scopePopped) {
|
|
3429
|
+
try {
|
|
3430
|
+
await res.device.popErrorScope();
|
|
3431
|
+
} catch {
|
|
3432
|
+
}
|
|
3433
|
+
}
|
|
3434
|
+
if (res) {
|
|
3435
|
+
if (bufA) res.pool.release(bufA);
|
|
3436
|
+
if (bufB) res.pool.release(bufB);
|
|
3437
|
+
if (staging) res.pool.release(staging);
|
|
3438
|
+
}
|
|
3439
|
+
}
|
|
3440
|
+
}
|
|
3441
|
+
|
|
3259
3442
|
// src/typed/signal.ts
|
|
3260
3443
|
import { computePool as computePool4 } from "@danielsimonjr/mathts-parallel";
|
|
3261
3444
|
|
|
@@ -3582,7 +3765,7 @@ function chirpZTransformDispatch(samples, m, phiStartRe, phiStartIm, phiStepRe,
|
|
|
3582
3765
|
|
|
3583
3766
|
// src/typed/signal.ts
|
|
3584
3767
|
var WASM_THRESHOLD = 64;
|
|
3585
|
-
function
|
|
3768
|
+
function isPowerOf22(n) {
|
|
3586
3769
|
return n > 0 && (n & n - 1) === 0;
|
|
3587
3770
|
}
|
|
3588
3771
|
function nextPowerOf2(n) {
|
|
@@ -3591,7 +3774,7 @@ function nextPowerOf2(n) {
|
|
|
3591
3774
|
}
|
|
3592
3775
|
async function fourStepFFT(real, imag, inverse) {
|
|
3593
3776
|
const N = real.length;
|
|
3594
|
-
if (N < 4 || !
|
|
3777
|
+
if (N < 4 || !isPowerOf22(N)) {
|
|
3595
3778
|
return fftCoreFloat64(real, imag, inverse);
|
|
3596
3779
|
}
|
|
3597
3780
|
const bits = Math.round(Math.log2(N));
|
|
@@ -3665,23 +3848,29 @@ var parallelFFT = mathTyped5("parallelFFT", {
|
|
|
3665
3848
|
const real = new Float64Array(paddedLength);
|
|
3666
3849
|
const imag = new Float64Array(paddedLength);
|
|
3667
3850
|
real.set(signal);
|
|
3668
|
-
const
|
|
3851
|
+
const gpu = await fftGpuDispatch(real, imag, false);
|
|
3852
|
+
if (gpu) return { real: gpu.real, imag: gpu.imag, originalLength: n };
|
|
3853
|
+
const result = computePool4.shouldParallelize(paddedLength, "parallelFFT") ? await fourStepFFT(real, imag, false) : fftCoreFloat64(real, imag, false);
|
|
3669
3854
|
return { ...result, originalLength: n };
|
|
3670
3855
|
}
|
|
3671
3856
|
});
|
|
3672
3857
|
var parallelIFFT = mathTyped5("parallelIFFT", {
|
|
3673
3858
|
// IFFT from real/imag arrays
|
|
3674
3859
|
"Float64Array, Float64Array": async (real, imag) => {
|
|
3675
|
-
|
|
3860
|
+
const gpu = await fftGpuDispatch(real, imag, true);
|
|
3861
|
+
if (gpu) return gpu;
|
|
3862
|
+
return computePool4.shouldParallelize(real.length, "parallelFFT") ? fourStepFFT(real, imag, true) : fftCoreFloat64(real, imag, true);
|
|
3676
3863
|
},
|
|
3677
3864
|
// IFFT from object with real/imag
|
|
3678
3865
|
Object: async (spectrum) => {
|
|
3679
|
-
|
|
3866
|
+
const gpu = await fftGpuDispatch(spectrum.real, spectrum.imag, true);
|
|
3867
|
+
if (gpu) return gpu;
|
|
3868
|
+
return computePool4.shouldParallelize(spectrum.real.length, "parallelFFT") ? fourStepFFT(spectrum.real, spectrum.imag, true) : fftCoreFloat64(spectrum.real, spectrum.imag, true);
|
|
3680
3869
|
}
|
|
3681
3870
|
});
|
|
3682
3871
|
var parallelFFTMagnitude = mathTyped5("parallelFFTMagnitude", {
|
|
3683
3872
|
"Float64Array, Float64Array": async (real, imag) => {
|
|
3684
|
-
if (computePool4.shouldParallelize(real.length)) {
|
|
3873
|
+
if (computePool4.shouldParallelize(real.length, "parallelFFT")) {
|
|
3685
3874
|
const r = await computePool4.applyKernel2(
|
|
3686
3875
|
real,
|
|
3687
3876
|
imag,
|
|
@@ -3701,7 +3890,7 @@ var parallelFFTMagnitude = mathTyped5("parallelFFTMagnitude", {
|
|
|
3701
3890
|
});
|
|
3702
3891
|
var parallelFFTPower = mathTyped5("parallelFFTPower", {
|
|
3703
3892
|
"Float64Array, Float64Array": async (real, imag) => {
|
|
3704
|
-
if (computePool4.shouldParallelize(real.length)) {
|
|
3893
|
+
if (computePool4.shouldParallelize(real.length, "parallelFFT")) {
|
|
3705
3894
|
const r = await computePool4.applyKernel2(real, imag, "(re, im) => re * re + im * im");
|
|
3706
3895
|
return r.result;
|
|
3707
3896
|
}
|
|
@@ -7348,12 +7537,13 @@ var typedSpecial = {
|
|
|
7348
7537
|
|
|
7349
7538
|
// src/gpu/elementwise-gpu.ts
|
|
7350
7539
|
import {
|
|
7351
|
-
getGpuDevice,
|
|
7352
|
-
getGlobalGPUContext,
|
|
7353
|
-
isGpuEnabled,
|
|
7540
|
+
getGpuDevice as getGpuDevice2,
|
|
7541
|
+
getGlobalGPUContext as getGlobalGPUContext2,
|
|
7542
|
+
isGpuEnabled as isGpuEnabled2,
|
|
7354
7543
|
GPU_MIN_ELEMENTS,
|
|
7355
|
-
ShaderManager,
|
|
7356
|
-
BufferPool
|
|
7544
|
+
ShaderManager as ShaderManager2,
|
|
7545
|
+
BufferPool as BufferPool2,
|
|
7546
|
+
serializeGpu as serializeGpu2
|
|
7357
7547
|
} from "@danielsimonjr/mathts-gpu";
|
|
7358
7548
|
var WGSL_IEEE = `
|
|
7359
7549
|
// NaN / \xB1Inf are supplied through the UNIFORM, not written as literals.
|
|
@@ -7426,7 +7616,7 @@ var GPU_ELEMENTWISE_OPS = Object.keys(
|
|
|
7426
7616
|
function isGpuChainSupported(ops) {
|
|
7427
7617
|
return ops.every((op) => op in WGSL_OP_BODY);
|
|
7428
7618
|
}
|
|
7429
|
-
var
|
|
7619
|
+
var WORKGROUP_SIZE2 = 256;
|
|
7430
7620
|
function wgslFor(op) {
|
|
7431
7621
|
return `
|
|
7432
7622
|
@group(0) @binding(0) var<storage, read> inp: array<f32>;
|
|
@@ -7439,7 +7629,7 @@ function wgslFor(op) {
|
|
|
7439
7629
|
${WGSL_OP_BODY[op]}
|
|
7440
7630
|
}
|
|
7441
7631
|
|
|
7442
|
-
@compute @workgroup_size(${
|
|
7632
|
+
@compute @workgroup_size(${WORKGROUP_SIZE2})
|
|
7443
7633
|
fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|
7444
7634
|
let i = gid.x;
|
|
7445
7635
|
if (i >= params.x) { return; }
|
|
@@ -7464,12 +7654,12 @@ function wgslForReduce(r) {
|
|
|
7464
7654
|
${WGSL_IEEE}
|
|
7465
7655
|
|
|
7466
7656
|
// NOTE: "shared" is a RESERVED WORD in WGSL \u2014 this must not be named that.
|
|
7467
|
-
var<workgroup> sdata: array<f32, ${
|
|
7657
|
+
var<workgroup> sdata: array<f32, ${WORKGROUP_SIZE2}>;
|
|
7468
7658
|
|
|
7469
7659
|
fn identity() -> f32 { return ${identity2}; }
|
|
7470
7660
|
fn combine(a: f32, b: f32) -> f32 { return ${combine2}; }
|
|
7471
7661
|
|
|
7472
|
-
@compute @workgroup_size(${
|
|
7662
|
+
@compute @workgroup_size(${WORKGROUP_SIZE2})
|
|
7473
7663
|
fn main(@builtin(global_invocation_id) gid: vec3<u32>,
|
|
7474
7664
|
@builtin(local_invocation_id) lid: vec3<u32>,
|
|
7475
7665
|
@builtin(workgroup_id) wid: vec3<u32>) {
|
|
@@ -7478,7 +7668,7 @@ function wgslForReduce(r) {
|
|
|
7478
7668
|
sdata[lid.x] = v;
|
|
7479
7669
|
workgroupBarrier();
|
|
7480
7670
|
|
|
7481
|
-
var s: u32 = ${
|
|
7671
|
+
var s: u32 = ${WORKGROUP_SIZE2}u / 2u;
|
|
7482
7672
|
loop {
|
|
7483
7673
|
if (s == 0u) { break; }
|
|
7484
7674
|
if (lid.x < s) { sdata[lid.x] = combine(sdata[lid.x], sdata[lid.x + s]); }
|
|
@@ -7489,13 +7679,13 @@ function wgslForReduce(r) {
|
|
|
7489
7679
|
}
|
|
7490
7680
|
`;
|
|
7491
7681
|
}
|
|
7492
|
-
var
|
|
7493
|
-
async function
|
|
7494
|
-
const device = await
|
|
7682
|
+
var resources2 = null;
|
|
7683
|
+
async function getResources2(options) {
|
|
7684
|
+
const device = await getGpuDevice2(options);
|
|
7495
7685
|
if (!device) return null;
|
|
7496
|
-
if (
|
|
7497
|
-
const ctx =
|
|
7498
|
-
const shaders = new
|
|
7686
|
+
if (resources2 && resources2.device === device) return resources2;
|
|
7687
|
+
const ctx = getGlobalGPUContext2();
|
|
7688
|
+
const shaders = new ShaderManager2(ctx);
|
|
7499
7689
|
for (const op of GPU_ELEMENTWISE_OPS) {
|
|
7500
7690
|
shaders.registerShader(op, wgslFor(op));
|
|
7501
7691
|
}
|
|
@@ -7503,31 +7693,25 @@ async function getResources(options) {
|
|
|
7503
7693
|
shaders.registerShader(reduceKey(r), wgslForReduce(r));
|
|
7504
7694
|
}
|
|
7505
7695
|
shaders.precompileRegistered();
|
|
7506
|
-
|
|
7507
|
-
return
|
|
7696
|
+
resources2 = { device, shaders, pool: new BufferPool2(ctx) };
|
|
7697
|
+
return resources2;
|
|
7508
7698
|
}
|
|
7509
7699
|
function resetGpuElementwise() {
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
}
|
|
7513
|
-
var gpuQueue = Promise.resolve();
|
|
7514
|
-
function serializeGpu(run) {
|
|
7515
|
-
const next = gpuQueue.then(run, run);
|
|
7516
|
-
gpuQueue = next.catch(() => void 0);
|
|
7517
|
-
return next;
|
|
7700
|
+
resources2?.pool.destroy();
|
|
7701
|
+
resources2 = null;
|
|
7518
7702
|
}
|
|
7519
7703
|
function elementwiseChainGpuDispatch(ops, xs, options) {
|
|
7520
|
-
return
|
|
7704
|
+
return serializeGpu2(() => chainGpuDispatchImpl(ops, xs, options));
|
|
7521
7705
|
}
|
|
7522
7706
|
async function chainGpuDispatchImpl(ops, xs, options) {
|
|
7523
7707
|
const n = xs.length;
|
|
7524
|
-
const enabled = options?.gpu ??
|
|
7708
|
+
const enabled = options?.gpu ?? isGpuEnabled2();
|
|
7525
7709
|
if (!enabled) return null;
|
|
7526
7710
|
if (ops.length === 0) return null;
|
|
7527
7711
|
if (n < GPU_MIN_ELEMENTS) return null;
|
|
7528
7712
|
if (!isGpuChainSupported(ops)) return null;
|
|
7529
7713
|
const bytes = n * 4;
|
|
7530
|
-
const workgroups = Math.ceil(n /
|
|
7714
|
+
const workgroups = Math.ceil(n / WORKGROUP_SIZE2);
|
|
7531
7715
|
let res;
|
|
7532
7716
|
let bufA;
|
|
7533
7717
|
let bufB;
|
|
@@ -7536,7 +7720,7 @@ async function chainGpuDispatchImpl(ops, xs, options) {
|
|
|
7536
7720
|
let scopePushed = false;
|
|
7537
7721
|
let scopePopped = false;
|
|
7538
7722
|
try {
|
|
7539
|
-
const r = await
|
|
7723
|
+
const r = await getResources2(options);
|
|
7540
7724
|
if (!r) return null;
|
|
7541
7725
|
res = r;
|
|
7542
7726
|
const { device, shaders, pool } = r;
|
|
@@ -7600,18 +7784,18 @@ async function chainGpuDispatchImpl(ops, xs, options) {
|
|
|
7600
7784
|
}
|
|
7601
7785
|
}
|
|
7602
7786
|
function elementwiseChainReduceGpuDispatch(ops, xs, reduce3, options) {
|
|
7603
|
-
return
|
|
7787
|
+
return serializeGpu2(() => chainReduceGpuDispatchImpl(ops, xs, reduce3, options));
|
|
7604
7788
|
}
|
|
7605
7789
|
async function chainReduceGpuDispatchImpl(ops, xs, reduce3, options) {
|
|
7606
7790
|
const n = xs.length;
|
|
7607
|
-
const enabled = options?.gpu ??
|
|
7791
|
+
const enabled = options?.gpu ?? isGpuEnabled2();
|
|
7608
7792
|
if (!enabled) return null;
|
|
7609
7793
|
if (ops.length === 0) return null;
|
|
7610
7794
|
if (n < GPU_MIN_ELEMENTS) return null;
|
|
7611
7795
|
if (!isGpuChainSupported(ops)) return null;
|
|
7612
7796
|
if (!GPU_REDUCE_OPS.includes(reduce3)) return null;
|
|
7613
7797
|
const bytes = n * 4;
|
|
7614
|
-
const workgroups = Math.ceil(n /
|
|
7798
|
+
const workgroups = Math.ceil(n / WORKGROUP_SIZE2);
|
|
7615
7799
|
const partialBytes = workgroups * 4;
|
|
7616
7800
|
let res;
|
|
7617
7801
|
let bufA;
|
|
@@ -7622,7 +7806,7 @@ async function chainReduceGpuDispatchImpl(ops, xs, reduce3, options) {
|
|
|
7622
7806
|
let scopePushed = false;
|
|
7623
7807
|
let scopePopped = false;
|
|
7624
7808
|
try {
|
|
7625
|
-
const r = await
|
|
7809
|
+
const r = await getResources2(options);
|
|
7626
7810
|
if (!r) return null;
|
|
7627
7811
|
res = r;
|
|
7628
7812
|
const { device, shaders, pool } = r;
|
|
@@ -16071,7 +16255,7 @@ var pinv = mathTyped13("pinv", {
|
|
|
16071
16255
|
var cond = mathTyped13("cond", {
|
|
16072
16256
|
Array: (A) => matrixCond(A)
|
|
16073
16257
|
});
|
|
16074
|
-
var
|
|
16258
|
+
var norm22 = mathTyped13("norm2", {
|
|
16075
16259
|
Array: (A) => matrixNorm2(A)
|
|
16076
16260
|
});
|
|
16077
16261
|
var normFro = mathTyped13("normFro", {
|
|
@@ -16135,7 +16319,7 @@ async function gpuScale(a, scalar) {
|
|
|
16135
16319
|
}
|
|
16136
16320
|
|
|
16137
16321
|
// src/typed/index.ts
|
|
16138
|
-
import { enableGpu, disableGpu, isGpuEnabled as
|
|
16322
|
+
import { enableGpu, disableGpu, isGpuEnabled as isGpuEnabled3, GPU_MIN_ELEMENTS as GPU_MIN_ELEMENTS2 } from "@danielsimonjr/mathts-gpu";
|
|
16139
16323
|
|
|
16140
16324
|
// src/typed/relational.ts
|
|
16141
16325
|
import naturalSort from "javascript-natural-sort";
|
|
@@ -26172,7 +26356,7 @@ var createCumSum = /* @__PURE__ */ factory(
|
|
|
26172
26356
|
);
|
|
26173
26357
|
|
|
26174
26358
|
// src/statistics/sum.ts
|
|
26175
|
-
|
|
26359
|
+
import { pairwiseSum as pairwiseSum2 } from "@danielsimonjr/mathts-core";
|
|
26176
26360
|
function isFlatNumberArray3(arr7) {
|
|
26177
26361
|
for (let i = 0; i < arr7.length; i++) {
|
|
26178
26362
|
if (typeof arr7[i] !== "number") {
|
|
@@ -26205,21 +26389,8 @@ var createSum = /* @__PURE__ */ factory(
|
|
|
26205
26389
|
}
|
|
26206
26390
|
});
|
|
26207
26391
|
function _sum(array) {
|
|
26208
|
-
if (Array.isArray(array) && array
|
|
26209
|
-
|
|
26210
|
-
const wasm = wasmLoader.getModule();
|
|
26211
|
-
if (wasm) {
|
|
26212
|
-
try {
|
|
26213
|
-
const alloc = wasmLoader.allocateFloat64Array(array);
|
|
26214
|
-
try {
|
|
26215
|
-
return wasm.statsSum(alloc.ptr, array.length);
|
|
26216
|
-
} finally {
|
|
26217
|
-
wasmLoader.free(alloc.ptr);
|
|
26218
|
-
}
|
|
26219
|
-
} catch {
|
|
26220
|
-
}
|
|
26221
|
-
}
|
|
26222
|
-
}
|
|
26392
|
+
if (Array.isArray(array) && isFlatNumberArray3(array)) {
|
|
26393
|
+
return pairwiseSum2(array);
|
|
26223
26394
|
}
|
|
26224
26395
|
let sum3;
|
|
26225
26396
|
deepForEach2(array, function(value) {
|
|
@@ -31758,7 +31929,7 @@ var createSplitUnit = /* @__PURE__ */ factory(
|
|
|
31758
31929
|
|
|
31759
31930
|
// src/matrix/fft.ts
|
|
31760
31931
|
var FAST_FFT_THRESHOLD = 64;
|
|
31761
|
-
function
|
|
31932
|
+
function isPowerOf23(n) {
|
|
31762
31933
|
return n > 0 && (n & n - 1) === 0;
|
|
31763
31934
|
}
|
|
31764
31935
|
function complexToInterleaved(arr7, _complex) {
|
|
@@ -31897,7 +32068,7 @@ var createFft = /* @__PURE__ */ factory(
|
|
|
31897
32068
|
function _fft(arr7, len) {
|
|
31898
32069
|
const length = len ?? arr7.length;
|
|
31899
32070
|
if (length === 1) return [arr7[0]];
|
|
31900
|
-
if (length === arr7.length && length >= FAST_FFT_THRESHOLD &&
|
|
32071
|
+
if (length === arr7.length && length >= FAST_FFT_THRESHOLD && isPowerOf23(length)) {
|
|
31901
32072
|
const interleaved = complexToInterleaved(arr7, complex2);
|
|
31902
32073
|
if (interleaved) {
|
|
31903
32074
|
const real = new Float64Array(length);
|
|
@@ -32205,7 +32376,7 @@ var createDivide = /* @__PURE__ */ factory(
|
|
|
32205
32376
|
|
|
32206
32377
|
// src/matrix/ifft.ts
|
|
32207
32378
|
var FAST_IFFT_THRESHOLD = 64;
|
|
32208
|
-
function
|
|
32379
|
+
function isPowerOf24(n) {
|
|
32209
32380
|
return n > 0 && (n & n - 1) === 0;
|
|
32210
32381
|
}
|
|
32211
32382
|
function complexToInterleaved2(arr7, _complex) {
|
|
@@ -32245,7 +32416,7 @@ var createIfft = /* @__PURE__ */ factory(
|
|
|
32245
32416
|
const totalSize = size2.reduce((acc, curr) => acc * curr, 1);
|
|
32246
32417
|
if (size2.length === 1) {
|
|
32247
32418
|
const length = size2[0];
|
|
32248
|
-
if (length >= FAST_IFFT_THRESHOLD &&
|
|
32419
|
+
if (length >= FAST_IFFT_THRESHOLD && isPowerOf24(length)) {
|
|
32249
32420
|
const arrData = isMatrix(arr7) ? arr7.valueOf() : arr7;
|
|
32250
32421
|
const interleaved = complexToInterleaved2(arrData, complex2);
|
|
32251
32422
|
if (interleaved) {
|
|
@@ -39550,6 +39721,7 @@ var createDerivative = /* @__PURE__ */ factory(
|
|
|
39550
39721
|
);
|
|
39551
39722
|
|
|
39552
39723
|
// src/arithmetic/norm.ts
|
|
39724
|
+
import { norm2 as norm23 } from "@danielsimonjr/mathts-core";
|
|
39553
39725
|
var WASM_NORM_THRESHOLD = 100;
|
|
39554
39726
|
var name245 = "norm";
|
|
39555
39727
|
var dependencies245 = [
|
|
@@ -39746,6 +39918,12 @@ var createNorm = /* @__PURE__ */ factory(
|
|
|
39746
39918
|
throw new Error("Unsupported parameter value " + p);
|
|
39747
39919
|
}
|
|
39748
39920
|
function _norm(x, p) {
|
|
39921
|
+
if ((p === 2 || p === "fro") && x.size().length === 1) {
|
|
39922
|
+
const v = x.valueOf();
|
|
39923
|
+
if (v.every((e) => typeof e === "number")) {
|
|
39924
|
+
return norm23(v);
|
|
39925
|
+
}
|
|
39926
|
+
}
|
|
39749
39927
|
const sizeX = x.size();
|
|
39750
39928
|
if (sizeX.length === 1) {
|
|
39751
39929
|
return _vectorNorm(x, p);
|
|
@@ -44678,7 +44856,7 @@ function levenbergMarquardt(residual, x0, opts = {}) {
|
|
|
44678
44856
|
let x = Array.from(x0);
|
|
44679
44857
|
let lambda = 1e-3;
|
|
44680
44858
|
const h = 1e-7;
|
|
44681
|
-
const
|
|
44859
|
+
const norm24 = (v) => v.reduce((s, c) => s + c * c, 0);
|
|
44682
44860
|
const jacobian2 = (xc, r0) => {
|
|
44683
44861
|
const m = r0.length;
|
|
44684
44862
|
const J = Array.from({ length: m }, () => new Array(n).fill(0));
|
|
@@ -44691,7 +44869,7 @@ function levenbergMarquardt(residual, x0, opts = {}) {
|
|
|
44691
44869
|
return J;
|
|
44692
44870
|
};
|
|
44693
44871
|
let r = residual(x);
|
|
44694
|
-
let cost =
|
|
44872
|
+
let cost = norm24(r);
|
|
44695
44873
|
let iter = 0;
|
|
44696
44874
|
for (; iter < maxIter; iter++) {
|
|
44697
44875
|
const J = jacobian2(x, r);
|
|
@@ -44722,7 +44900,7 @@ function levenbergMarquardt(residual, x0, opts = {}) {
|
|
|
44722
44900
|
}
|
|
44723
44901
|
const xNew = x.map((v, i) => v + delta[i]);
|
|
44724
44902
|
const rNew = residual(xNew);
|
|
44725
|
-
const costNew =
|
|
44903
|
+
const costNew = norm24(rNew);
|
|
44726
44904
|
if (costNew < cost) {
|
|
44727
44905
|
x = xNew;
|
|
44728
44906
|
r = rNew;
|
|
@@ -45464,6 +45642,7 @@ export {
|
|
|
45464
45642
|
fermiCoupling,
|
|
45465
45643
|
fft,
|
|
45466
45644
|
fft2d,
|
|
45645
|
+
fftGpuDispatch,
|
|
45467
45646
|
fibonacci,
|
|
45468
45647
|
filter2 as filter,
|
|
45469
45648
|
filtfilt,
|
|
@@ -45484,6 +45663,7 @@ export {
|
|
|
45484
45663
|
fresnelC,
|
|
45485
45664
|
fresnelS,
|
|
45486
45665
|
friedmanTest,
|
|
45666
|
+
fsum,
|
|
45487
45667
|
fullSimplify,
|
|
45488
45668
|
functionExpand,
|
|
45489
45669
|
fuseUnaryChain,
|
|
@@ -45568,7 +45748,7 @@ export {
|
|
|
45568
45748
|
isConnected,
|
|
45569
45749
|
isFinite2 as isFinite,
|
|
45570
45750
|
isGpuChainSupported,
|
|
45571
|
-
|
|
45751
|
+
isGpuEnabled3 as isGpuEnabled,
|
|
45572
45752
|
isInteger2 as isInteger,
|
|
45573
45753
|
isNaN2 as isNaN,
|
|
45574
45754
|
isNegative,
|
|
@@ -45705,7 +45885,7 @@ export {
|
|
|
45705
45885
|
nodeOperations,
|
|
45706
45886
|
noncentralChi2PDF,
|
|
45707
45887
|
norm,
|
|
45708
|
-
norm2,
|
|
45888
|
+
norm22 as norm2,
|
|
45709
45889
|
normFro,
|
|
45710
45890
|
normalCDF,
|
|
45711
45891
|
normalDist,
|
|
@@ -45832,6 +46012,7 @@ export {
|
|
|
45832
46012
|
replacer,
|
|
45833
46013
|
resample,
|
|
45834
46014
|
resetGpuElementwise,
|
|
46015
|
+
resetGpuFft,
|
|
45835
46016
|
reshape2 as reshape,
|
|
45836
46017
|
residue,
|
|
45837
46018
|
resize2 as resize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sum.d.ts","sourceRoot":"","sources":["../../src/statistics/sum.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"sum.d.ts","sourceRoot":"","sources":["../../src/statistics/sum.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AA0BvD,UAAU,eAAe;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,aAAa,CAAC;IACnB,OAAO,EAAE,aAAa,CAAC;IACvB,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CACnD;AAKD,eAAO,MAAM,SAAS,yEAmHrB,CAAC"}
|
|
@@ -186,6 +186,20 @@ export declare const max: import("typed-function").TypedFunction;
|
|
|
186
186
|
/**
|
|
187
187
|
* Sum with parallel array support
|
|
188
188
|
*/
|
|
189
|
+
/**
|
|
190
|
+
* Exactly-rounded sum — the equivalent of Python's `math.fsum` / NumPy's `math.fsum` idiom.
|
|
191
|
+
*
|
|
192
|
+
* `sum` uses pairwise summation, which is accurate to ~machine epsilon and free. But pairwise
|
|
193
|
+
* cannot recover a value that has already been annihilated by catastrophic cancellation:
|
|
194
|
+
*
|
|
195
|
+
* sum([1e16, 1, -1e16]) -> 0 (so does np.sum — the 1 is lost the moment it meets 1e16)
|
|
196
|
+
* fsum([1e16, 1, -1e16]) -> 1 (exact)
|
|
197
|
+
*
|
|
198
|
+
* Neumaier compensation tracks the low-order bits each addition discards and folds them back in.
|
|
199
|
+
* ~2-4x slower than `sum`, so it is opt-in. Reach for it when the result is a small difference of
|
|
200
|
+
* large terms: conservation checks, residuals, long-running accumulators.
|
|
201
|
+
*/
|
|
202
|
+
export declare const fsum: import("typed-function").TypedFunction;
|
|
189
203
|
export declare const sum: import("typed-function").TypedFunction;
|
|
190
204
|
/**
|
|
191
205
|
* Mean with parallel array support
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../src/typed/arithmetic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"arithmetic.d.ts","sourceRoot":"","sources":["../../src/typed/arithmetic.ts"],"names":[],"mappings":"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"}
|
package/dist/typed/index.d.ts
CHANGED
|
@@ -48,6 +48,7 @@ export { cond } from './matrix-ops.js';
|
|
|
48
48
|
export * from './gpu.js';
|
|
49
49
|
export { enableGpu, disableGpu, isGpuEnabled, GPU_MIN_ELEMENTS } from '@danielsimonjr/mathts-gpu';
|
|
50
50
|
export { elementwiseChainGpuDispatch, elementwiseChainReduceGpuDispatch, GPU_REDUCE_OPS, type GpuReduceOp, isGpuChainSupported, resetGpuElementwise, GPU_ELEMENTWISE_OPS, type GpuElementwiseOp, type GpuChainOptions, } from '../gpu/elementwise-gpu.js';
|
|
51
|
+
export { fftGpuDispatch, resetGpuFft, type GpuFftOptions, type GpuFftResult, } from '../gpu/fft-gpu.js';
|
|
51
52
|
export * from './relational.js';
|
|
52
53
|
export { typedRelational } from './relational.js';
|
|
53
54
|
export * from './string.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5C,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGpC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,cAAc,CAAC;AAG7B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,YAAY,CAAC;AAG3B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAWhC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,cAAc,UAAU,CAAC;AAIzB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,cAAc,EACd,KAAK,WAAW,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AAInC,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAsCtC;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/typed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5C,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGpC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,cAAc,CAAC;AAG7B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,YAAY,CAAC;AAG3B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAWhC,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,cAAc,UAAU,CAAC;AAIzB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EACL,2BAA2B,EAC3B,iCAAiC,EACjC,cAAc,EACd,KAAK,WAAW,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,2BAA2B,CAAC;AAInC,OAAO,EACL,cAAc,EACd,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAI3B,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGlD,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAsCtC;;;;;;GAMG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8B1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/typed/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/typed/signal.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danielsimonjr/mathts-functions",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.22.0",
|
|
4
4
|
"description": "Mathematical functions for MathTS - arithmetic, algebra, trigonometry, statistics, and more",
|
|
5
5
|
"author": "Daniel Simon Jr.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,11 +34,11 @@
|
|
|
34
34
|
"build:prod": "tsup src/index.ts --format esm --clean --minify --treeshake"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@danielsimonjr/mathts-core": "^0.
|
|
38
|
-
"@danielsimonjr/mathts-expression": "^0.6.
|
|
39
|
-
"@danielsimonjr/mathts-gpu": "^0.
|
|
40
|
-
"@danielsimonjr/mathts-matrix": "^0.4.
|
|
41
|
-
"@danielsimonjr/mathts-parallel": "^0.
|
|
37
|
+
"@danielsimonjr/mathts-core": "^0.7.0",
|
|
38
|
+
"@danielsimonjr/mathts-expression": "^0.6.1",
|
|
39
|
+
"@danielsimonjr/mathts-gpu": "^0.2.0",
|
|
40
|
+
"@danielsimonjr/mathts-matrix": "^0.4.2",
|
|
41
|
+
"@danielsimonjr/mathts-parallel": "^0.4.0",
|
|
42
42
|
"bignumber.js": "^9.1.2",
|
|
43
43
|
"complex.js": "^2.2.5",
|
|
44
44
|
"decimal.js": "^10.4.3",
|