@danielsimonjr/mathts-functions 0.43.0 → 0.43.2

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.
@@ -5,96 +5,14 @@ var __export = (target, all) => {
5
5
  };
6
6
 
7
7
  // src/wasm/integrity.ts
8
- var ALGO = "sha384";
9
- async function sha384OfBuffer(buffer) {
10
- const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
11
- const isNode = typeof process !== "undefined" && process.versions?.node !== void 0;
12
- let digest;
13
- if (isNode) {
14
- const { createHash } = await import("crypto");
15
- const hash = createHash(ALGO);
16
- hash.update(bytes);
17
- digest = new Uint8Array(hash.digest());
18
- } else {
19
- const copy = new ArrayBuffer(bytes.byteLength);
20
- new Uint8Array(copy).set(bytes);
21
- const out = await crypto.subtle.digest("SHA-384", copy);
22
- digest = new Uint8Array(out);
23
- }
24
- let binary = "";
25
- for (let i = 0; i < digest.length; i++) binary += String.fromCharCode(digest[i]);
26
- const b64 = typeof btoa === "function" ? btoa(binary) : Buffer.from(digest).toString("base64");
27
- return `sha384-${b64}`;
28
- }
29
- async function loadWasmManifest(wasmPath) {
30
- const isNode = typeof process !== "undefined" && process.versions?.node !== void 0;
31
- const manifestPath = wasmPath.replace(/[^/\\]+$/, "wasm-manifest.json");
32
- try {
33
- if (isNode) {
34
- const fs = await import("fs");
35
- const { promisify } = await import("util");
36
- const readFile = promisify(fs.readFile);
37
- const text = await readFile(manifestPath, "utf8");
38
- return JSON.parse(text);
39
- } else {
40
- const res = await fetch(manifestPath);
41
- if (!res.ok) return null;
42
- return await res.json();
43
- }
44
- } catch {
45
- return null;
46
- }
47
- }
48
- async function verifyWasmIntegrity(buffer, wasmPath, options = {}) {
49
- const fileName = wasmPath.split(/[/\\]/).pop() || wasmPath;
50
- const manifest = options.manifest !== void 0 ? options.manifest : await loadWasmManifest(wasmPath);
51
- if (!manifest) {
52
- if (options.required) {
53
- throw new Error(
54
- `WASM integrity check failed: no manifest at sibling of "${wasmPath}" (required)`
55
- );
56
- }
57
- if (typeof console !== "undefined") {
58
- console.warn(
59
- `[wasm-integrity] no manifest found beside "${wasmPath}"; skipping SHA-384 verification (set options.required=true to fail closed)`
60
- );
61
- }
62
- return;
63
- }
64
- const expected = manifest[fileName];
65
- if (!expected) {
66
- if (options.required) {
67
- throw new Error(`WASM integrity check failed: manifest has no entry for "${fileName}"`);
68
- }
69
- return;
70
- }
71
- const actual = await sha384OfBuffer(buffer);
72
- if (actual !== expected) {
73
- throw new Error(
74
- `WASM integrity check failed for "${fileName}": expected ${expected}, got ${actual}`
75
- );
76
- }
77
- }
8
+ import {
9
+ sha384OfBuffer,
10
+ loadWasmManifest,
11
+ verifyWasmIntegrity
12
+ } from "@danielsimonjr/mathts-core/internal";
78
13
 
79
14
  // src/wasm/resolve.ts
80
- async function resolvePackagedWasm(metaUrl, wasmFile) {
81
- const isNode = typeof process !== "undefined" && process.versions?.node !== void 0;
82
- if (!isNode) return null;
83
- const { fileURLToPath } = await import("url");
84
- const { dirname, join } = await import("path");
85
- const { existsSync } = await import("fs");
86
- let dir = dirname(fileURLToPath(metaUrl));
87
- for (let depth = 0; depth < 8; depth++) {
88
- const candidates = [join(dir, "wasm", wasmFile), join(dir, "dist", "wasm", wasmFile)];
89
- for (const candidate of candidates) {
90
- if (existsSync(candidate)) return candidate;
91
- }
92
- const parent = dirname(dir);
93
- if (parent === dir) break;
94
- dir = parent;
95
- }
96
- return null;
97
- }
15
+ import { resolvePackagedWasm, defaultWasmLocation } from "@danielsimonjr/mathts-core/internal";
98
16
  async function resolveBrowserWasm(metaUrl, wasmFile) {
99
17
  let dir = new URL(".", metaUrl);
100
18
  for (let depth = 0; depth < 8; depth++) {
@@ -112,24 +30,6 @@ async function resolveBrowserWasm(metaUrl, wasmFile) {
112
30
  }
113
31
  return new URL(`./wasm/${wasmFile}`, metaUrl).href;
114
32
  }
115
- async function defaultWasmLocation(metaUrl, wasmFile, opts) {
116
- if (opts?.browser) {
117
- return new URL(`./wasm/${wasmFile}`, metaUrl).href;
118
- }
119
- const { fileURLToPath } = await import("url");
120
- const { dirname, join } = await import("path");
121
- const { existsSync } = await import("fs");
122
- let dir = dirname(fileURLToPath(metaUrl));
123
- for (let depth = 0; depth < 8; depth++) {
124
- if (existsSync(join(dir, "package.json"))) {
125
- return join(dir, "dist", "wasm", wasmFile);
126
- }
127
- const parent = dirname(dir);
128
- if (parent === dir) break;
129
- dir = parent;
130
- }
131
- return join(dirname(fileURLToPath(metaUrl)), "wasm", wasmFile);
132
- }
133
33
 
134
34
  // src/wasm/WasmLoader.ts
135
35
  var WasmLoader = class _WasmLoader {
@@ -1,17 +1,14 @@
1
1
  /**
2
2
  * Configuration interface for math.js
3
+ *
4
+ * Consolidated onto core: this file used to duplicate
5
+ * `core/src/config.ts`'s `ConfigOptions`/`MathJsConfig`/`DEFAULT_CONFIG`
6
+ * byte-for-byte. The implementation now lives once in
7
+ * `@danielsimonjr/mathts-core/internal` (see the `project-all-libraries-build-on-core`
8
+ * principle and the cross-package dedup pass, docs/Architecture/duplicate-symbols.json).
9
+ * Thin re-export so existing `../core/config.js` / `./config.js` imports across
10
+ * `functions/src/` keep working unchanged.
3
11
  */
4
- export interface ConfigOptions {
5
- relTol: number;
6
- absTol: number;
7
- matrix: 'Matrix' | 'Array';
8
- number: 'number' | 'BigNumber' | 'bigint' | 'Fraction';
9
- numberFallback: 'number' | 'BigNumber';
10
- precision: number;
11
- predictable: boolean;
12
- randomSeed: string | null;
13
- legacySubset: boolean;
14
- }
15
- export type MathJsConfig = ConfigOptions;
16
- export declare const DEFAULT_CONFIG: ConfigOptions;
12
+ export type { ConfigOptions, MathJsConfig } from '@danielsimonjr/mathts-core/internal';
13
+ export { DEFAULT_CONFIG } from '@danielsimonjr/mathts-core/internal';
17
14
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAG5B,MAAM,EAAE,MAAM,CAAC;IAIf,MAAM,EAAE,MAAM,CAAC;IAGf,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAG3B,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAIvD,cAAc,EAAE,QAAQ,GAAG,WAAW,CAAC;IAGvC,SAAS,EAAE,MAAM,CAAC;IAMlB,WAAW,EAAE,OAAO,CAAC;IAIrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAK1B,YAAY,EAAE,OAAO,CAAC;CACvB;AAGD,MAAM,MAAM,YAAY,GAAG,aAAa,CAAC;AAEzC,eAAO,MAAM,cAAc,EAAE,aAoC5B,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC"}
@@ -8,6 +8,7 @@ import { isAccessorNode, isArray, isArrayNode, isAssignmentNode, isBigInt, isBig
8
8
  import { isObjectWrappingMap } from '../utils/map.js';
9
9
  import type { ConfigOptions, MathJsConfig } from './config.js';
10
10
  export type { MathJsConfig };
11
+ import type { ImportOptions } from './function/import.js';
11
12
  /**
12
13
  * Type for the mathjs instance
13
14
  */
@@ -83,14 +84,7 @@ export interface MathJsInstance {
83
84
  * Input type for factories
84
85
  */
85
86
  export type FactoriesInput = Record<string, FactoryFunction | LegacyFactory> | Array<FactoryFunction | LegacyFactory> | FactoryFunction | LegacyFactory;
86
- /**
87
- * Options for the import function
88
- */
89
- export interface ImportOptions {
90
- override?: boolean;
91
- silent?: boolean;
92
- wrap?: boolean;
93
- }
87
+ export type { ImportOptions };
94
88
  /**
95
89
  * Create a mathjs instance from given factory functions and optionally config
96
90
  *
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/core/create.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/core/create.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  wasmLoader,
14
14
  withAsF64,
15
15
  withAsI32
16
- } from "./chunk-K6FSIGFM.js";
16
+ } from "./chunk-UMUT2YEC.js";
17
17
 
18
18
  // src/typed/index.ts
19
19
  var typed_exports = {};
@@ -16589,7 +16589,7 @@ async function mannWhitneyTest(sample1, sample2, opts) {
16589
16589
  if (nTotal >= WASM_SORT_THRESHOLD) {
16590
16590
  const vals = new Float64Array(nTotal);
16591
16591
  for (let k = 0; k < nTotal; k++) vals[k] = combined[k].value;
16592
- const { argsortF64Dispatch: argsortF64Dispatch2 } = await import("./wasm-bridge-P6BRFY46.js");
16592
+ const { argsortF64Dispatch: argsortF64Dispatch2 } = await import("./wasm-bridge-C44GQ3DS.js");
16593
16593
  const idx = argsortF64Dispatch2(vals);
16594
16594
  const sortedCombined = new Array(nTotal);
16595
16595
  for (let k = 0; k < nTotal; k++) sortedCombined[k] = combined[idx[k]];
@@ -17335,6 +17335,7 @@ function hotellingT2(data, mu0) {
17335
17335
  import {
17336
17336
  eig,
17337
17337
  svd,
17338
+ cholesky as matrixCholesky,
17338
17339
  cond as matrixCond,
17339
17340
  norm2 as matrixNorm2,
17340
17341
  normFro as matrixNormFro,
@@ -17493,25 +17494,8 @@ function cholesky(A) {
17493
17494
  }
17494
17495
  }
17495
17496
  }
17496
- const L = Array.from({ length: n }, () => new Array(n).fill(0));
17497
- for (let i = 0; i < n; i++) {
17498
- for (let j = 0; j <= i; j++) {
17499
- let sum3 = 0;
17500
- for (let k = 0; k < j; k++) {
17501
- sum3 += L[i][k] * L[j][k];
17502
- }
17503
- if (i === j) {
17504
- const diag2 = A[i][i] - sum3;
17505
- if (diag2 <= 0) {
17506
- throw new Error("cholesky: matrix is not positive definite");
17507
- }
17508
- L[i][j] = Math.sqrt(diag2);
17509
- } else {
17510
- L[i][j] = (A[i][j] - sum3) / L[j][j];
17511
- }
17512
- }
17513
- }
17514
- return { L };
17497
+ const { L } = matrixCholesky(DenseMatrix3.fromArray(A));
17498
+ return { L: L.toArray() };
17515
17499
  }
17516
17500
  function hessenbergForm(A) {
17517
17501
  const n = assertSquare(A, "hessenbergForm");
@@ -18670,35 +18654,7 @@ function initTypeBridge() {
18670
18654
  }
18671
18655
 
18672
18656
  // src/core/config.ts
18673
- var DEFAULT_CONFIG = {
18674
- // minimum relative difference between two compared values,
18675
- // used by all comparison functions
18676
- relTol: 1e-12,
18677
- // minimum absolute difference between two compared values,
18678
- // used by all comparison functions
18679
- absTol: 1e-15,
18680
- // type of default matrix output. Choose 'matrix' (default) or 'array'
18681
- matrix: "Matrix",
18682
- // type of default number output. Choose 'number' (default) 'BigNumber', 'bigint', or 'Fraction'
18683
- number: "number",
18684
- // type of fallback used for config { number: 'bigint' } when a value cannot be represented
18685
- // in the configured numeric type. Choose 'number' (default) or 'BigNumber'.
18686
- numberFallback: "number",
18687
- // number of significant digits in BigNumbers
18688
- precision: 64,
18689
- // predictable output type of functions. When true, output type depends only
18690
- // on the input types. When false (default), output type can vary depending
18691
- // on input values. For example `math.sqrt(-4)` returns `complex('2i')` when
18692
- // predictable is false, and returns `NaN` when true.
18693
- predictable: false,
18694
- // random seed for seeded pseudo random number generation
18695
- // null = randomly seed
18696
- randomSeed: null,
18697
- // legacy behavior for matrix subset. When true, the subset function
18698
- // returns a matrix or array with the same size as the index (except for scalars).
18699
- // When false, it returns a matrix or array with a size depending on the type of index.
18700
- legacySubset: false
18701
- };
18657
+ import { DEFAULT_CONFIG } from "@danielsimonjr/mathts-core/internal";
18702
18658
 
18703
18659
  // src/factories/scope.ts
18704
18660
  initTypeBridge();
@@ -26919,21 +26875,7 @@ var createZpk2tf = /* @__PURE__ */ factory(
26919
26875
  );
26920
26876
 
26921
26877
  // src/utils/switch.ts
26922
- function _switch2(mat) {
26923
- const rows = mat;
26924
- const I2 = rows.length;
26925
- const J = rows[0].length;
26926
- let i, j;
26927
- const ret = [];
26928
- for (j = 0; j < J; j++) {
26929
- const tmp = [];
26930
- for (i = 0; i < I2; i++) {
26931
- tmp.push(rows[i][j]);
26932
- }
26933
- ret.push(tmp);
26934
- }
26935
- return ret;
26936
- }
26878
+ import { _switch as _switch2 } from "@danielsimonjr/mathts-core/internal";
26937
26879
 
26938
26880
  // src/statistics/cumsum.ts
26939
26881
  import { neumaierCumsum as neumaierCumsum2 } from "@danielsimonjr/mathts-core";
@@ -48491,6 +48433,97 @@ function butter(N, Wn, btype = "low") {
48491
48433
  return analogToDigital(buttap(N), Wn, btype);
48492
48434
  }
48493
48435
 
48436
+ // src/signal/fft.ts
48437
+ function complex2(re3, im3 = 0) {
48438
+ return { re: re3, im: im3 };
48439
+ }
48440
+ function isPowerOf25(n) {
48441
+ return n > 0 && (n & n - 1) === 0;
48442
+ }
48443
+ function nextPowerOf22(n) {
48444
+ if (n <= 1) return 1;
48445
+ return Math.pow(2, Math.ceil(Math.log2(n)));
48446
+ }
48447
+ function fftCore(data, inverse = false) {
48448
+ const n = data.length;
48449
+ if (!isPowerOf25(n)) {
48450
+ throw new Error(`FFT length must be power of 2, got ${n}`);
48451
+ }
48452
+ if (n === 1) {
48453
+ return [{ ...data[0] }];
48454
+ }
48455
+ const real = new Float64Array(n);
48456
+ const imag = new Float64Array(n);
48457
+ for (let i = 0; i < n; i++) {
48458
+ real[i] = data[i].re;
48459
+ imag[i] = data[i].im;
48460
+ }
48461
+ const out = fftCoreFloat64(real, imag, inverse);
48462
+ const spectrum = new Array(n);
48463
+ for (let i = 0; i < n; i++) {
48464
+ spectrum[i] = { re: out.real[i], im: out.imag[i] };
48465
+ }
48466
+ return spectrum;
48467
+ }
48468
+ function fft2(signal) {
48469
+ const originalLength = signal.length;
48470
+ if (originalLength === 0) {
48471
+ return {
48472
+ spectrum: [],
48473
+ originalLength: 0,
48474
+ paddedLength: 0
48475
+ };
48476
+ }
48477
+ let complexSignal;
48478
+ if (signal instanceof Float64Array) {
48479
+ complexSignal = Array.from(signal).map((x) => complex2(x, 0));
48480
+ } else if (typeof signal[0] === "number") {
48481
+ complexSignal = signal.map((x) => complex2(x, 0));
48482
+ } else {
48483
+ complexSignal = signal;
48484
+ }
48485
+ const paddedLength = nextPowerOf22(originalLength);
48486
+ if (paddedLength > originalLength) {
48487
+ const padding = new Array(paddedLength - originalLength).fill(complex2(0, 0));
48488
+ complexSignal = [...complexSignal, ...padding];
48489
+ }
48490
+ const spectrum = fftCore(complexSignal, false);
48491
+ return {
48492
+ spectrum,
48493
+ originalLength,
48494
+ paddedLength
48495
+ };
48496
+ }
48497
+ function ifft2(spectrum, originalLength) {
48498
+ if (spectrum.length === 0) {
48499
+ return [];
48500
+ }
48501
+ const paddedLength = nextPowerOf22(spectrum.length);
48502
+ let paddedSpectrum = spectrum;
48503
+ if (paddedLength > spectrum.length) {
48504
+ const padding = new Array(paddedLength - spectrum.length).fill(complex2(0, 0));
48505
+ paddedSpectrum = [...spectrum, ...padding];
48506
+ }
48507
+ const result = fftCore(paddedSpectrum, true);
48508
+ if (originalLength !== void 0 && originalLength < result.length) {
48509
+ return result.slice(0, originalLength);
48510
+ }
48511
+ return result;
48512
+ }
48513
+ function ifftReal(spectrum, originalLength) {
48514
+ const complex3 = ifft2(spectrum, originalLength);
48515
+ return complex3.map((c) => c.re);
48516
+ }
48517
+ function rollBy(arr10, count2) {
48518
+ return [...arr10.slice(count2), ...arr10.slice(0, count2)];
48519
+ }
48520
+ function fftshift(spectrum) {
48521
+ return rollBy(spectrum, Math.floor(spectrum.length / 2));
48522
+ }
48523
+ function ifftshift(spectrum) {
48524
+ return rollBy(spectrum, Math.ceil(spectrum.length / 2));
48525
+ }
48526
+
48494
48527
  // src/signal/fft-helpers.ts
48495
48528
  var callFft = fft;
48496
48529
  var callIfft = ifft;
@@ -48527,15 +48560,11 @@ function irfft(spec, n) {
48527
48560
  const result = callIfft(full);
48528
48561
  return result.map((v) => toReIm(v).re);
48529
48562
  }
48530
- function fftshift(x) {
48531
- const n = x.length;
48532
- const half = Math.floor(n / 2);
48533
- return [...x.slice(half), ...x.slice(0, half)];
48563
+ function fftshift2(x) {
48564
+ return fftshift(x);
48534
48565
  }
48535
- function ifftshift(x) {
48536
- const n = x.length;
48537
- const half = Math.ceil(n / 2);
48538
- return [...x.slice(half), ...x.slice(0, half)];
48566
+ function ifftshift2(x) {
48567
+ return ifftshift(x);
48539
48568
  }
48540
48569
  function fftfreq(n, d = 1) {
48541
48570
  const result = new Array(n);
@@ -48913,88 +48942,6 @@ function sosfilt(sos, x) {
48913
48942
  return y;
48914
48943
  }
48915
48944
 
48916
- // src/signal/fft.ts
48917
- function complex2(re3, im3 = 0) {
48918
- return { re: re3, im: im3 };
48919
- }
48920
- function isPowerOf25(n) {
48921
- return n > 0 && (n & n - 1) === 0;
48922
- }
48923
- function nextPowerOf22(n) {
48924
- if (n <= 1) return 1;
48925
- return Math.pow(2, Math.ceil(Math.log2(n)));
48926
- }
48927
- function fftCore(data, inverse = false) {
48928
- const n = data.length;
48929
- if (!isPowerOf25(n)) {
48930
- throw new Error(`FFT length must be power of 2, got ${n}`);
48931
- }
48932
- if (n === 1) {
48933
- return [{ ...data[0] }];
48934
- }
48935
- const real = new Float64Array(n);
48936
- const imag = new Float64Array(n);
48937
- for (let i = 0; i < n; i++) {
48938
- real[i] = data[i].re;
48939
- imag[i] = data[i].im;
48940
- }
48941
- const out = fftCoreFloat64(real, imag, inverse);
48942
- const spectrum = new Array(n);
48943
- for (let i = 0; i < n; i++) {
48944
- spectrum[i] = { re: out.real[i], im: out.imag[i] };
48945
- }
48946
- return spectrum;
48947
- }
48948
- function fft2(signal) {
48949
- const originalLength = signal.length;
48950
- if (originalLength === 0) {
48951
- return {
48952
- spectrum: [],
48953
- originalLength: 0,
48954
- paddedLength: 0
48955
- };
48956
- }
48957
- let complexSignal;
48958
- if (signal instanceof Float64Array) {
48959
- complexSignal = Array.from(signal).map((x) => complex2(x, 0));
48960
- } else if (typeof signal[0] === "number") {
48961
- complexSignal = signal.map((x) => complex2(x, 0));
48962
- } else {
48963
- complexSignal = signal;
48964
- }
48965
- const paddedLength = nextPowerOf22(originalLength);
48966
- if (paddedLength > originalLength) {
48967
- const padding = new Array(paddedLength - originalLength).fill(complex2(0, 0));
48968
- complexSignal = [...complexSignal, ...padding];
48969
- }
48970
- const spectrum = fftCore(complexSignal, false);
48971
- return {
48972
- spectrum,
48973
- originalLength,
48974
- paddedLength
48975
- };
48976
- }
48977
- function ifft2(spectrum, originalLength) {
48978
- if (spectrum.length === 0) {
48979
- return [];
48980
- }
48981
- const paddedLength = nextPowerOf22(spectrum.length);
48982
- let paddedSpectrum = spectrum;
48983
- if (paddedLength > spectrum.length) {
48984
- const padding = new Array(paddedLength - spectrum.length).fill(complex2(0, 0));
48985
- paddedSpectrum = [...spectrum, ...padding];
48986
- }
48987
- const result = fftCore(paddedSpectrum, true);
48988
- if (originalLength !== void 0 && originalLength < result.length) {
48989
- return result.slice(0, originalLength);
48990
- }
48991
- return result;
48992
- }
48993
- function ifftReal(spectrum, originalLength) {
48994
- const complex3 = ifft2(spectrum, originalLength);
48995
- return complex3.map((c) => c.re);
48996
- }
48997
-
48998
48945
  // src/signal/conv.ts
48999
48946
  function convDirect(x, h, mode2 = "full") {
49000
48947
  const xArr = Array.isArray(x) ? x : Array.from(x);
@@ -51570,7 +51517,7 @@ export {
51570
51517
  fftGpuDispatch,
51571
51518
  fftfreq,
51572
51519
  fftn,
51573
- fftshift,
51520
+ fftshift2 as fftshift,
51574
51521
  fibonacci,
51575
51522
  filter2 as filter,
51576
51523
  filtfilt,
@@ -51670,7 +51617,7 @@ export {
51670
51617
  idst,
51671
51618
  idwt,
51672
51619
  ifft,
51673
- ifftshift,
51620
+ ifftshift2 as ifftshift,
51674
51621
  im,
51675
51622
  implicitDiff,
51676
51623
  indexFn as index,
@@ -44,11 +44,13 @@
44
44
  *
45
45
  * @packageDocumentation
46
46
  */
47
- /** A complex number as a plain `{re, im}` pair. */
48
- export interface ComplexValue {
49
- re: number;
50
- im: number;
51
- }
47
+ /**
48
+ * A complex number as a plain `{re, im}` pair. Consolidated onto
49
+ * `@danielsimonjr/mathts-core/internal`'s byte-identical `ComplexValue` (see
50
+ * docs/Architecture/duplicate-symbols.json) rather than redeclared locally.
51
+ */
52
+ import type { ComplexValue } from '@danielsimonjr/mathts-core/internal';
53
+ export type { ComplexValue };
52
54
  /** A complex-valued dense matrix, stored as parallel real/imaginary 2-D arrays. */
53
55
  export interface ComplexMatrix {
54
56
  re: number[][];
@@ -1 +1 @@
1
- {"version":3,"file":"matrix-functions.d.ts","sourceRoot":"","sources":["../../src/numeric/matrix-functions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAIH,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IACf,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;CAChB;AAED,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,CAAC;AA0PtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,IAAI,CAClB,CAAC,EAAE,MAAM,EAAE,EAAE,EACb,CAAC,EAAE,qBAAqB,EACxB,OAAO,CAAC,EAAE,qBAAqB,EAAE,GAChC,aAAa,CAmGf;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAKxD;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAKxD;AAeD;2EAC2E;AAC3E,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,CAEjD;AAED;2EAC2E;AAC3E,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,CAEjD"}
1
+ {"version":3,"file":"matrix-functions.d.ts","sourceRoot":"","sources":["../../src/numeric/matrix-functions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAGH;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IACf,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;CAChB;AAED,uEAAuE;AACvE,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,EAAE,YAAY,KAAK,YAAY,CAAC;AA0PtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,IAAI,CAClB,CAAC,EAAE,MAAM,EAAE,EAAE,EACb,CAAC,EAAE,qBAAqB,EACxB,OAAO,CAAC,EAAE,qBAAqB,EAAE,GAChC,aAAa,CAmGf;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAKxD;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,YAAY,CAKxD;AAeD;2EAC2E;AAC3E,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,CAEjD;AAED;2EAC2E;AAC3E,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,CAEjD"}
@@ -24,10 +24,16 @@ export declare function irfft(spec: {
24
24
  }, n: number): number[];
25
25
  /**
26
26
  * Shift the zero-frequency component to the center of the spectrum (roll by `floor(n/2)`).
27
+ *
28
+ * Thin `number[]` public surface over the package's single roll algorithm
29
+ * (`fftshift<T>` in `./fft.ts`) — same behavior, delegated to keep one
30
+ * implementation.
27
31
  */
28
32
  export declare function fftshift(x: number[]): number[];
29
33
  /**
30
34
  * Inverse of {@link fftshift} (roll by `ceil(n/2)`).
35
+ *
36
+ * Thin `number[]` public surface over `ifftshift<T>` in `./fft.ts`.
31
37
  */
32
38
  export declare function ifftshift(x: number[]): number[];
33
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fft-helpers.d.ts","sourceRoot":"","sources":["../../src/signal/fft-helpers.ts"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,CAYhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAY/E;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAI/C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,MAAM,EAAE,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,MAAM,EAAE,CAO3D;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG;IAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,CAKtE"}
1
+ {"version":3,"file":"fft-helpers.d.ts","sourceRoot":"","sources":["../../src/signal/fft-helpers.ts"],"names":[],"mappings":"AAgCA;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,CAYhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAY/E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,MAAM,EAAE,CAW1D;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAU,GAAG,MAAM,EAAE,CAO3D;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG;IAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAA;CAAE,CAKtE"}
@@ -122,6 +122,15 @@ export declare function fft2(matrix: number[][] | ComplexNumber[][]): ComplexNum
122
122
  * @returns 2D spatial domain result
123
123
  */
124
124
  export declare function ifft2(spectrum: ComplexNumber[][]): ComplexNumber[][];
125
+ /**
126
+ * The single roll algorithm shared by every fftshift/ifftshift surface in the
127
+ * package (the generic `<T>` toolkit members below and the public `number[]`
128
+ * helpers in `./fft-helpers.ts` both route through this). Rotates `arr` left by
129
+ * `count`: the first `count` elements move to the end. numpy.fft uses
130
+ * `floor(n/2)` for fftshift and `ceil(n/2)` for ifftshift so the two are exact
131
+ * inverses on odd lengths.
132
+ */
133
+ export declare function rollBy<T>(arr: T[], count: number): T[];
125
134
  /**
126
135
  * Shift zero-frequency component to center of spectrum
127
136
  *
@@ -1 +1 @@
1
- {"version":3,"file":"fft.d.ts","sourceRoot":"","sources":["../../src/signal/fft.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,GAAG,aAAa,CAEjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAEnD;AA0DD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,aAAa,EAAE,GAAG,SAAS,CAqChF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAuBxF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGrF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAEhE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAE5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,EAAE,CAa1E;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,CAoC9E;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,CA8BpE;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAI9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAI/C"}
1
+ {"version":3,"file":"fft.d.ts","sourceRoot":"","sources":["../../src/signal/fft.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,GAAG,aAAa,CAEjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE3D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAEnD;AA0DD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,GAAG,aAAa,EAAE,GAAG,SAAS,CAqChF;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE,CAuBxF;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAGrF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAEhE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAE5D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,CAE5D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAE,MAAU,GAAG,MAAM,EAAE,CAa1E;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,CAoC9E;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,GAAG,aAAa,EAAE,EAAE,CA8BpE;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE9C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE/C"}