velo-plot 1.12.0 → 1.19.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.
Files changed (153) hide show
  1. package/README.md +14 -0
  2. package/dist/{index.core-xiNcuFfJ.js → ChartCore-DQ691eXH.js} +1807 -1287
  3. package/dist/ChartCore-DQ691eXH.js.map +1 -0
  4. package/dist/assets/downsample.worker-C70QJ04y.js +2 -0
  5. package/dist/assets/downsample.worker-C70QJ04y.js.map +1 -0
  6. package/dist/assets/indicator.worker-bv0zC4EX.js +2 -0
  7. package/dist/assets/indicator.worker-bv0zC4EX.js.map +1 -0
  8. package/dist/core/OverlayRenderer.d.ts +2 -0
  9. package/dist/core/chart/ChartAlerts.d.ts +42 -0
  10. package/dist/core/chart/ChartCore.d.ts +20 -1
  11. package/dist/core/chart/ChartRenderLoop.d.ts +4 -2
  12. package/dist/core/chart/ChartRenderer.d.ts +3 -2
  13. package/dist/core/chart/candlestickMarkers.d.ts +23 -0
  14. package/dist/core/chart/exporter/SVGExporter.d.ts +7 -2
  15. package/dist/core/chart/heikinAshi.d.ts +10 -0
  16. package/dist/core/chart/series/types.d.ts +2 -2
  17. package/dist/core/chart/types.d.ts +9 -0
  18. package/dist/core/indicator/addIndicator.d.ts +36 -0
  19. package/dist/core/indicator/index.d.ts +2 -0
  20. package/dist/core/indicator/indicatorPresets.d.ts +37 -0
  21. package/dist/core/render/pixelSnap.d.ts +8 -0
  22. package/dist/core/series/Series.d.ts +3 -0
  23. package/dist/core/stacked/index.d.ts +3 -1
  24. package/dist/core/stacked/paneResize.d.ts +15 -18
  25. package/dist/core/stacked/stackExport.d.ts +18 -0
  26. package/dist/core/stacked/types.d.ts +42 -5
  27. package/dist/core/time/TimeScale.d.ts +31 -0
  28. package/dist/createStackedChart-BPooTQ9z.js +1164 -0
  29. package/dist/createStackedChart-BPooTQ9z.js.map +1 -0
  30. package/dist/gpu/adapter/gpuRenderer.d.ts +21 -0
  31. package/dist/gpu/backends/webgpu/WebGPUBackend.d.ts +2 -1
  32. package/dist/gpuRenderer-BpaMYz-k.js +1848 -0
  33. package/dist/gpuRenderer-BpaMYz-k.js.map +1 -0
  34. package/dist/index-CUGS98p4.js +277 -0
  35. package/dist/index-CUGS98p4.js.map +1 -0
  36. package/dist/index-D7dTq6VB.js +503 -0
  37. package/dist/index-D7dTq6VB.js.map +1 -0
  38. package/dist/{index-Ce2JgkH_.js → index-DoYxf1cV.js} +86 -43
  39. package/dist/{index-Ce2JgkH_.js.map → index-DoYxf1cV.js.map} +1 -1
  40. package/dist/index.core-BtGFYMOu.js +167 -0
  41. package/dist/index.core-BtGFYMOu.js.map +1 -0
  42. package/dist/index.d.ts +12 -4
  43. package/dist/indicators--eJGmVox.js +302 -0
  44. package/dist/indicators--eJGmVox.js.map +1 -0
  45. package/dist/math-Ddm2EZjj.js +85 -0
  46. package/dist/math-Ddm2EZjj.js.map +1 -0
  47. package/dist/plugins/analysis.js +543 -818
  48. package/dist/plugins/analysis.js.map +1 -1
  49. package/dist/plugins/anomaly-detection.d.ts +1 -0
  50. package/dist/plugins/anomaly-detection.js +221 -0
  51. package/dist/plugins/anomaly-detection.js.map +1 -0
  52. package/dist/plugins/broken-axis.d.ts +3 -0
  53. package/dist/plugins/broken-axis.js +262 -0
  54. package/dist/plugins/broken-axis.js.map +1 -0
  55. package/dist/plugins/caching.d.ts +3 -0
  56. package/dist/plugins/caching.js +187 -0
  57. package/dist/plugins/caching.js.map +1 -0
  58. package/dist/plugins/data-transform.d.ts +3 -0
  59. package/dist/plugins/data-transform.js +146 -0
  60. package/dist/plugins/data-transform.js.map +1 -0
  61. package/dist/plugins/debug.js +12 -11
  62. package/dist/plugins/debug.js.map +1 -1
  63. package/dist/plugins/drawing-tools/index.d.ts +16 -0
  64. package/dist/plugins/forecasting.d.ts +1 -0
  65. package/dist/plugins/forecasting.js +236 -0
  66. package/dist/plugins/forecasting.js.map +1 -0
  67. package/dist/plugins/gpu.js +202 -1895
  68. package/dist/plugins/gpu.js.map +1 -1
  69. package/dist/plugins/index.d.ts +2 -0
  70. package/dist/plugins/keyboard/index.d.ts +1 -7
  71. package/dist/plugins/keyboard.js +1 -1
  72. package/dist/plugins/latex.d.ts +1 -0
  73. package/dist/plugins/latex.js +454 -0
  74. package/dist/plugins/latex.js.map +1 -0
  75. package/dist/plugins/lazy-load/types.d.ts +7 -0
  76. package/dist/plugins/lazy-load.d.ts +3 -0
  77. package/dist/plugins/lazy-load.js +212 -0
  78. package/dist/plugins/lazy-load.js.map +1 -0
  79. package/dist/plugins/ml-integration.d.ts +3 -0
  80. package/dist/plugins/ml-integration.js +355 -0
  81. package/dist/plugins/ml-integration.js.map +1 -0
  82. package/dist/plugins/offscreen.d.ts +3 -0
  83. package/dist/plugins/offscreen.js +169 -0
  84. package/dist/plugins/offscreen.js.map +1 -0
  85. package/dist/plugins/pattern-recognition.d.ts +3 -0
  86. package/dist/plugins/pattern-recognition.js +690 -0
  87. package/dist/plugins/pattern-recognition.js.map +1 -0
  88. package/dist/plugins/radar.d.ts +3 -0
  89. package/dist/plugins/radar.js +103 -0
  90. package/dist/plugins/radar.js.map +1 -0
  91. package/dist/plugins/regression.d.ts +3 -0
  92. package/dist/plugins/regression.js +634 -0
  93. package/dist/plugins/regression.js.map +1 -0
  94. package/dist/plugins/replay/index.d.ts +19 -0
  95. package/dist/plugins/roi.d.ts +1 -0
  96. package/dist/plugins/roi.js +223 -0
  97. package/dist/plugins/roi.js.map +1 -0
  98. package/dist/plugins/snapshot/types.d.ts +1 -1
  99. package/dist/plugins/snapshot.d.ts +3 -0
  100. package/dist/plugins/snapshot.js +90 -0
  101. package/dist/plugins/snapshot.js.map +1 -0
  102. package/dist/plugins/sync/index.d.ts +2 -1
  103. package/dist/plugins/sync.js +13 -269
  104. package/dist/plugins/sync.js.map +1 -1
  105. package/dist/plugins/video-recorder.d.ts +3 -0
  106. package/dist/plugins/video-recorder.js +104 -0
  107. package/dist/plugins/video-recorder.js.map +1 -0
  108. package/dist/plugins/virtualization/types.d.ts +12 -0
  109. package/dist/plugins/virtualization.d.ts +3 -0
  110. package/dist/plugins/virtualization.js +6 -0
  111. package/dist/plugins/virtualization.js.map +1 -0
  112. package/dist/pool-15HMCNv8.js +88 -0
  113. package/dist/pool-15HMCNv8.js.map +1 -0
  114. package/dist/react.d.ts +1 -0
  115. package/dist/react.js +31 -0
  116. package/dist/react.js.map +1 -0
  117. package/dist/renderer/CandlestickRenderer.d.ts +1 -1
  118. package/dist/renderer/ChartSeriesRenderer.d.ts +6 -0
  119. package/dist/renderer/GpuChartRenderer.d.ts +23 -0
  120. package/dist/renderer/index.d.ts +3 -0
  121. package/dist/renderer/spike/WebGLGridSpike.d.ts +40 -0
  122. package/dist/testing/baselines/v1.15.0.json.d.ts +51 -0
  123. package/dist/testing/gridSpikeBenchmark.d.ts +49 -0
  124. package/dist/testing/index.d.ts +5 -0
  125. package/dist/testing/rendererBenchmark.d.ts +13 -0
  126. package/dist/testing/stage1BrowserBench.d.ts +42 -0
  127. package/dist/types.d.ts +21 -1
  128. package/dist/utils-BK5UUXxj.js +172 -0
  129. package/dist/utils-BK5UUXxj.js.map +1 -0
  130. package/dist/velo-plot.full.js +1382 -5932
  131. package/dist/velo-plot.full.js.map +1 -1
  132. package/dist/velo-plot.js +26 -25
  133. package/dist/velo-plot.js.map +1 -1
  134. package/dist/workers/downsample.d.ts +38 -0
  135. package/dist/workers/downsampleAsync.d.ts +6 -0
  136. package/dist/workers/indicator.worker.d.ts +32 -0
  137. package/dist/workers/indicatorsAsync.d.ts +26 -0
  138. package/dist/workers/pool.d.ts +36 -0
  139. package/package.json +19 -2
  140. package/dist/core/OverlayRenderer.test.d.ts +0 -1
  141. package/dist/core/chart/ChartScaling.test.d.ts +0 -1
  142. package/dist/core/chart/NavigationUtils.test.d.ts +0 -1
  143. package/dist/core/format/axisFormat.test.d.ts +0 -1
  144. package/dist/core/indicator/buildIndicatorSeries.test.d.ts +0 -1
  145. package/dist/core/series/SeriesBounds.test.d.ts +0 -1
  146. package/dist/core/stacked/createStackedChart.test.d.ts +0 -1
  147. package/dist/core/stacked/paneAxis.test.d.ts +0 -1
  148. package/dist/core/stacked/paneResize.test.d.ts +0 -1
  149. package/dist/core/sync/index.test.d.ts +0 -1
  150. package/dist/index.core-xiNcuFfJ.js.map +0 -1
  151. package/dist/plugins/tools/tooltip/format.test.d.ts +0 -1
  152. package/dist/utils-Dbro9-qM.js +0 -254
  153. package/dist/utils-Dbro9-qM.js.map +0 -1
@@ -1,306 +1,310 @@
1
- import { a as I, s as _, g as z, f as E, d as T, b as V, m as H, e as X, h as Y, v as G, c as O, j as Z, i as U } from "../utils-Dbro9-qM.js";
2
- import { o as Mn, l as bn, k as pn, n as In } from "../utils-Dbro9-qM.js";
3
- function K(e, o, r, t = {}) {
4
- const n = e.series.get(o);
5
- if (!n) throw new Error(`Series ${o} not found`);
1
+ import { a as A, s as W, d as _, i as z } from "../math-Ddm2EZjj.js";
2
+ import { c as on } from "../math-Ddm2EZjj.js";
3
+ import { g as E, f as T, d as H, s as X, m as Y, a as N, b as O, v as Z, c as G } from "../utils-BK5UUXxj.js";
4
+ import { h as sn, e as cn, i as an } from "../utils-BK5UUXxj.js";
5
+ import { r as K, e as Q, s as U } from "../indicators--eJGmVox.js";
6
+ import { i as fn, j as un, g as hn, f as mn, k as gn, d as dn, m as Mn, c as wn, n as pn, o as yn, p as Fn, b as An, h as bn, a as In, t as qn, v as xn, w as Pn } from "../indicators--eJGmVox.js";
7
+ function J(e, r, o, t = {}) {
8
+ const n = e.series.get(r);
9
+ if (!n) throw new Error(`Series ${r} not found`);
6
10
  const s = n.getData();
7
11
  if (!s || s.x.length < 2) return "";
8
- const c = D(s.x, s.y, r, t), a = n.getBounds(), l = (a == null ? void 0 : a.xMin) ?? 0, i = ((a == null ? void 0 : a.xMax) ?? 1) - l, u = 200, h = new Float32Array(u), m = new Float32Array(u);
9
- for (let g = 0; g < u; g++) {
10
- const F = l + g / (u - 1) * i;
11
- h[g] = F, m[g] = c.predict(F);
12
+ const c = L(s.x, s.y, o, t), i = n.getBounds(), l = (i == null ? void 0 : i.xMin) ?? 0, a = ((i == null ? void 0 : i.xMax) ?? 1) - l, u = 200, h = new Float32Array(u), m = new Float32Array(u);
13
+ for (let d = 0; d < u; d++) {
14
+ const w = l + d / (u - 1) * a;
15
+ h[d] = w, m[d] = c.predict(w);
12
16
  }
13
- const y = `${o}-fit-${Date.now()}`, w = n.getStyle();
17
+ const g = `${r}-fit-${Date.now()}`, M = n.getStyle();
14
18
  return e.addSeries({
15
- id: y,
19
+ id: g,
16
20
  type: "line",
17
21
  yAxisId: n.getYAxisId(),
18
22
  data: { x: h, y: m },
19
23
  style: {
20
- color: w.color,
21
- width: (w.width || 1) * 1.5,
24
+ color: M.color,
25
+ width: (M.width || 1) * 1.5,
22
26
  opacity: 0.8,
23
27
  lineDash: [5, 5]
24
28
  }
25
29
  }), e.addAnnotation({
26
30
  type: "text",
27
- x: l + i * 0.05,
28
- y: c.predict(l + i * 0.05),
31
+ x: l + a * 0.05,
32
+ y: c.predict(l + a * 0.05),
29
33
  text: `${c.equation}
30
34
  (R² = ${c.rSquared.toFixed(4)})`,
31
35
  fontSize: 12,
32
36
  backgroundColor: "rgba(0,0,0,0.7)",
33
- color: w.color || "#ffffff",
37
+ color: M.color || "#ffffff",
34
38
  padding: 4,
35
39
  anchor: "bottom-left",
36
40
  interactive: !0
37
- }), y;
41
+ }), g;
38
42
  }
39
- function v(e) {
40
- const o = e.length, r = S(o), t = new Float64Array(r);
41
- for (let s = 0; s < o; s++)
42
- t[s] = e[s];
43
- const n = new Array(r);
43
+ function x(e) {
44
+ const r = e.length, o = C(r), t = new Float64Array(o);
44
45
  for (let s = 0; s < r; s++)
46
+ t[s] = e[s];
47
+ const n = new Array(o);
48
+ for (let s = 0; s < o; s++)
45
49
  n[s] = { re: t[s], im: 0 };
46
- q(n);
47
- for (let s = 2; s <= r; s *= 2) {
48
- const c = s / 2, a = -2 * Math.PI / s;
49
- for (let l = 0; l < r; l += s)
50
+ b(n);
51
+ for (let s = 2; s <= o; s *= 2) {
52
+ const c = s / 2, i = -2 * Math.PI / s;
53
+ for (let l = 0; l < o; l += s)
50
54
  for (let f = 0; f < c; f++) {
51
- const i = a * f, u = Math.cos(i), h = Math.sin(i), m = l + f, y = l + f + c, w = u * n[y].re - h * n[y].im, g = u * n[y].im + h * n[y].re;
52
- n[y].re = n[m].re - w, n[y].im = n[m].im - g, n[m].re = n[m].re + w, n[m].im = n[m].im + g;
55
+ const a = i * f, u = Math.cos(a), h = Math.sin(a), m = l + f, g = l + f + c, M = u * n[g].re - h * n[g].im, d = u * n[g].im + h * n[g].re;
56
+ n[g].re = n[m].re - M, n[g].im = n[m].im - d, n[m].re = n[m].re + M, n[m].im = n[m].im + d;
53
57
  }
54
58
  }
55
59
  return n;
56
60
  }
57
- function Q(e) {
58
- const o = e.length, r = e.map((s) => ({ re: s.re, im: -s.im })), t = J(r), n = new Float32Array(o);
59
- for (let s = 0; s < o; s++)
60
- n[s] = t[s].re / o;
61
+ function V(e) {
62
+ const r = e.length, o = e.map((s) => ({ re: s.re, im: -s.im })), t = tt(o), n = new Float32Array(r);
63
+ for (let s = 0; s < r; s++)
64
+ n[s] = t[s].re / r;
61
65
  return n;
62
66
  }
63
- function J(e) {
64
- const o = e.length, r = e.map((t) => ({ ...t }));
65
- q(r);
66
- for (let t = 2; t <= o; t *= 2) {
67
+ function tt(e) {
68
+ const r = e.length, o = e.map((t) => ({ ...t }));
69
+ b(o);
70
+ for (let t = 2; t <= r; t *= 2) {
67
71
  const n = t / 2, s = -2 * Math.PI / t;
68
- for (let c = 0; c < o; c += t)
69
- for (let a = 0; a < n; a++) {
70
- const l = s * a, f = Math.cos(l), i = Math.sin(l), u = c + a, h = c + a + n, m = f * r[h].re - i * r[h].im, y = f * r[h].im + i * r[h].re;
71
- r[h].re = r[u].re - m, r[h].im = r[u].im - y, r[u].re = r[u].re + m, r[u].im = r[u].im + y;
72
+ for (let c = 0; c < r; c += t)
73
+ for (let i = 0; i < n; i++) {
74
+ const l = s * i, f = Math.cos(l), a = Math.sin(l), u = c + i, h = c + i + n, m = f * o[h].re - a * o[h].im, g = f * o[h].im + a * o[h].re;
75
+ o[h].re = o[u].re - m, o[h].im = o[u].im - g, o[u].re = o[u].re + m, o[u].im = o[u].im + g;
72
76
  }
73
77
  }
74
- return r;
78
+ return o;
75
79
  }
76
- function q(e) {
77
- const o = e.length, r = Math.log2(o);
78
- for (let t = 0; t < o; t++) {
79
- const n = tt(t, r);
80
+ function b(e) {
81
+ const r = e.length, o = Math.log2(r);
82
+ for (let t = 0; t < r; t++) {
83
+ const n = nt(t, o);
80
84
  if (n > t) {
81
85
  const s = e[t];
82
86
  e[t] = e[n], e[n] = s;
83
87
  }
84
88
  }
85
89
  }
86
- function tt(e, o) {
87
- let r = 0;
88
- for (let t = 0; t < o; t++)
89
- r = r << 1 | e & 1, e >>= 1;
90
- return r;
91
- }
92
- function S(e) {
93
- let o = 1;
94
- for (; o < e; ) o *= 2;
90
+ function nt(e, r) {
91
+ let o = 0;
92
+ for (let t = 0; t < r; t++)
93
+ o = o << 1 | e & 1, e >>= 1;
95
94
  return o;
96
95
  }
97
- function C(e, o = 1) {
98
- const r = v(e), t = r.length, n = t / 2, s = new Float32Array(n), c = new Float32Array(n), a = new Float32Array(n), l = new Float32Array(t), f = new Float32Array(t);
99
- for (let i = 0; i < t; i++)
100
- l[i] = r[i].re, f[i] = r[i].im;
101
- for (let i = 0; i < n; i++)
102
- s[i] = i * o / t, c[i] = Math.sqrt(r[i].re * r[i].re + r[i].im * r[i].im) / t, a[i] = Math.atan2(r[i].im, r[i].re);
103
- for (let i = 1; i < n; i++)
104
- c[i] *= 2;
96
+ function C(e) {
97
+ let r = 1;
98
+ for (; r < e; ) r *= 2;
99
+ return r;
100
+ }
101
+ function j(e, r = 1) {
102
+ const o = x(e), t = o.length, n = t / 2, s = new Float32Array(n), c = new Float32Array(n), i = new Float32Array(n), l = new Float32Array(t), f = new Float32Array(t);
103
+ for (let a = 0; a < t; a++)
104
+ l[a] = o[a].re, f[a] = o[a].im;
105
+ for (let a = 0; a < n; a++)
106
+ s[a] = a * r / t, c[a] = Math.sqrt(o[a].re * o[a].re + o[a].im * o[a].im) / t, i[a] = Math.atan2(o[a].im, o[a].re);
107
+ for (let a = 1; a < n; a++)
108
+ c[a] *= 2;
105
109
  return {
106
110
  frequency: s,
107
111
  magnitude: c,
108
- phase: a,
109
- complex: r,
112
+ phase: i,
113
+ complex: o,
110
114
  real: l,
111
115
  imag: f
112
116
  };
113
117
  }
114
- function Pt(e, o = 1) {
115
- const r = C(e, o), t = r.frequency.length, n = new Float32Array(t), s = new Float32Array(t);
118
+ function kt(e, r = 1) {
119
+ const o = j(e, r), t = o.frequency.length, n = new Float32Array(t), s = new Float32Array(t);
116
120
  for (let c = 0; c < t; c++)
117
- n[c] = r.magnitude[c] * r.magnitude[c], s[c] = 10 * Math.log10(Math.max(n[c], 1e-20));
121
+ n[c] = o.magnitude[c] * o.magnitude[c], s[c] = 10 * Math.log10(Math.max(n[c], 1e-20));
118
122
  return {
119
- frequency: r.frequency,
123
+ frequency: o.frequency,
120
124
  power: n,
121
125
  powerDb: s
122
126
  };
123
127
  }
124
- function vt(e, o = 1, r = 0) {
125
- const t = C(e, o);
128
+ function Rt(e, r = 1, o = 0) {
129
+ const t = j(e, r);
126
130
  let n = 0, s = 0;
127
131
  for (let c = 0; c < t.magnitude.length; c++)
128
- t.frequency[c] >= r && t.magnitude[c] > n && (n = t.magnitude[c], s = c);
132
+ t.frequency[c] >= o && t.magnitude[c] > n && (n = t.magnitude[c], s = c);
129
133
  return {
130
134
  frequency: t.frequency[s],
131
135
  magnitude: n
132
136
  };
133
137
  }
134
- function $t(e) {
135
- const o = e.length, r = new Float32Array(o);
136
- for (let t = 0; t < o; t++) {
137
- const n = 0.5 * (1 - Math.cos(2 * Math.PI * t / (o - 1)));
138
- r[t] = e[t] * n;
138
+ function Ct(e) {
139
+ const r = e.length, o = new Float32Array(r);
140
+ for (let t = 0; t < r; t++) {
141
+ const n = 0.5 * (1 - Math.cos(2 * Math.PI * t / (r - 1)));
142
+ o[t] = e[t] * n;
139
143
  }
140
- return r;
144
+ return o;
141
145
  }
142
146
  function jt(e) {
143
- const o = e.length, r = new Float32Array(o);
144
- for (let t = 0; t < o; t++) {
145
- const n = 0.54 - 0.46 * Math.cos(2 * Math.PI * t / (o - 1));
146
- r[t] = e[t] * n;
147
+ const r = e.length, o = new Float32Array(r);
148
+ for (let t = 0; t < r; t++) {
149
+ const n = 0.54 - 0.46 * Math.cos(2 * Math.PI * t / (r - 1));
150
+ o[t] = e[t] * n;
147
151
  }
148
- return r;
152
+ return o;
149
153
  }
150
- function Rt(e) {
151
- const o = e.length, r = new Float32Array(o), t = 0.42, n = 0.5, s = 0.08;
152
- for (let c = 0; c < o; c++) {
153
- const a = t - n * Math.cos(2 * Math.PI * c / (o - 1)) + s * Math.cos(4 * Math.PI * c / (o - 1));
154
- r[c] = e[c] * a;
154
+ function Lt(e) {
155
+ const r = e.length, o = new Float32Array(r), t = 0.42, n = 0.5, s = 0.08;
156
+ for (let c = 0; c < r; c++) {
157
+ const i = t - n * Math.cos(2 * Math.PI * c / (r - 1)) + s * Math.cos(4 * Math.PI * c / (r - 1));
158
+ o[c] = e[c] * i;
155
159
  }
156
- return r;
160
+ return o;
157
161
  }
158
- function kt(e, o = 1) {
159
- const r = v(e), t = r.length, n = t / 2, s = new Float32Array(t), c = new Float32Array(t), a = new Float32Array(t), l = new Float32Array(t), f = new Float32Array(t);
160
- for (let i = 0; i < t; i++)
161
- s[i] = r[i].re, c[i] = r[i].im, a[i] = i * o / t, l[i] = Math.sqrt(r[i].re * r[i].re + r[i].im * r[i].im), f[i] = Math.atan2(r[i].im, r[i].re);
162
+ function St(e, r = 1) {
163
+ const o = x(e), t = o.length, n = t / 2, s = new Float32Array(t), c = new Float32Array(t), i = new Float32Array(t), l = new Float32Array(t), f = new Float32Array(t);
164
+ for (let a = 0; a < t; a++)
165
+ s[a] = o[a].re, c[a] = o[a].im, i[a] = a * r / t, l[a] = Math.sqrt(o[a].re * o[a].re + o[a].im * o[a].im), f[a] = Math.atan2(o[a].im, o[a].re);
162
166
  return {
163
167
  real: s,
164
168
  imag: c,
165
- frequency: a,
169
+ frequency: i,
166
170
  magnitude: l,
167
171
  phase: f,
168
172
  length: t,
169
173
  nyquist: n
170
174
  };
171
175
  }
172
- function St(e, o) {
173
- const r = e.length;
174
- if (o.length !== r)
176
+ function Bt(e, r) {
177
+ const o = e.length;
178
+ if (r.length !== o)
175
179
  throw new Error("Real and imaginary arrays must have the same length");
176
- const t = S(r), n = new Array(t);
177
- for (let i = 0; i < t; i++)
178
- n[i] = {
179
- re: i < r ? e[i] : 0,
180
- im: i < r ? o[i] : 0
180
+ const t = C(o), n = new Array(t);
181
+ for (let a = 0; a < t; a++)
182
+ n[a] = {
183
+ re: a < o ? e[a] : 0,
184
+ im: a < o ? r[a] : 0
181
185
  };
182
- q(n);
183
- for (let i = 2; i <= t; i *= 2) {
184
- const u = i / 2, h = -2 * Math.PI / i;
185
- for (let m = 0; m < t; m += i)
186
- for (let y = 0; y < u; y++) {
187
- const w = h * y, g = Math.cos(w), F = Math.sin(w), A = m + y, b = m + y + u, p = g * n[b].re - F * n[b].im, d = g * n[b].im + F * n[b].re;
188
- n[b].re = n[A].re - p, n[b].im = n[A].im - d, n[A].re = n[A].re + p, n[A].im = n[A].im + d;
186
+ b(n);
187
+ for (let a = 2; a <= t; a *= 2) {
188
+ const u = a / 2, h = -2 * Math.PI / a;
189
+ for (let m = 0; m < t; m += a)
190
+ for (let g = 0; g < u; g++) {
191
+ const M = h * g, d = Math.cos(M), w = Math.sin(M), p = m + g, y = m + g + u, F = d * n[y].re - w * n[y].im, P = d * n[y].im + w * n[y].re;
192
+ n[y].re = n[p].re - F, n[y].im = n[p].im - P, n[p].re = n[p].re + F, n[p].im = n[p].im + P;
189
193
  }
190
194
  }
191
- const s = new Float32Array(t), c = new Float32Array(t), a = new Float32Array(t), l = new Float32Array(t), f = new Float32Array(t);
192
- for (let i = 0; i < t; i++)
193
- s[i] = n[i].re, c[i] = n[i].im, a[i] = i / t, l[i] = Math.sqrt(n[i].re * n[i].re + n[i].im * n[i].im), f[i] = Math.atan2(n[i].im, n[i].re);
195
+ const s = new Float32Array(t), c = new Float32Array(t), i = new Float32Array(t), l = new Float32Array(t), f = new Float32Array(t);
196
+ for (let a = 0; a < t; a++)
197
+ s[a] = n[a].re, c[a] = n[a].im, i[a] = a / t, l[a] = Math.sqrt(n[a].re * n[a].re + n[a].im * n[a].im), f[a] = Math.atan2(n[a].im, n[a].re);
194
198
  return {
195
199
  real: s,
196
200
  imag: c,
197
- frequency: a,
201
+ frequency: i,
198
202
  magnitude: l,
199
203
  phase: f,
200
204
  length: t,
201
205
  nyquist: t / 2
202
206
  };
203
207
  }
204
- function Ct(e) {
205
- const o = e.length, r = new Float32Array(o), t = new Float32Array(o);
206
- for (let n = 0; n < o; n++)
207
- r[n] = e[n].re, t[n] = e[n].im;
208
- return { real: r, imag: t };
208
+ function Dt(e) {
209
+ const r = e.length, o = new Float32Array(r), t = new Float32Array(r);
210
+ for (let n = 0; n < r; n++)
211
+ o[n] = e[n].re, t[n] = e[n].im;
212
+ return { real: o, imag: t };
209
213
  }
210
- function nt(e, o) {
211
- const r = e.length;
212
- if (o.length !== r)
214
+ function et(e, r) {
215
+ const o = e.length;
216
+ if (r.length !== o)
213
217
  throw new Error("Real and imaginary arrays must have the same length");
214
- const t = new Array(r);
215
- for (let n = 0; n < r; n++)
216
- t[n] = { re: e[n], im: o[n] };
218
+ const t = new Array(o);
219
+ for (let n = 0; n < o; n++)
220
+ t[n] = { re: e[n], im: r[n] };
217
221
  return t;
218
222
  }
219
- function Dt(e, o) {
220
- const r = nt(e, o);
221
- return Q(r);
222
- }
223
- function Lt(e) {
224
- const o = e.length, t = e.map((c) => ({ re: c.re, im: -c.im })).map((c) => ({ ...c }));
225
- q(t);
226
- for (let c = 2; c <= o; c *= 2) {
227
- const a = c / 2, l = -2 * Math.PI / c;
228
- for (let f = 0; f < o; f += c)
229
- for (let i = 0; i < a; i++) {
230
- const u = l * i, h = Math.cos(u), m = Math.sin(u), y = f + i, w = f + i + a, g = h * t[w].re - m * t[w].im, F = h * t[w].im + m * t[w].re;
231
- t[w].re = t[y].re - g, t[w].im = t[y].im - F, t[y].re = t[y].re + g, t[y].im = t[y].im + F;
223
+ function Wt(e, r) {
224
+ const o = et(e, r);
225
+ return V(o);
226
+ }
227
+ function _t(e) {
228
+ const r = e.length, t = e.map((c) => ({ re: c.re, im: -c.im })).map((c) => ({ ...c }));
229
+ b(t);
230
+ for (let c = 2; c <= r; c *= 2) {
231
+ const i = c / 2, l = -2 * Math.PI / c;
232
+ for (let f = 0; f < r; f += c)
233
+ for (let a = 0; a < i; a++) {
234
+ const u = l * a, h = Math.cos(u), m = Math.sin(u), g = f + a, M = f + a + i, d = h * t[M].re - m * t[M].im, w = h * t[M].im + m * t[M].re;
235
+ t[M].re = t[g].re - d, t[M].im = t[g].im - w, t[g].re = t[g].re + d, t[g].im = t[g].im + w;
232
236
  }
233
237
  }
234
- const n = new Float32Array(o), s = new Float32Array(o);
235
- for (let c = 0; c < o; c++)
236
- n[c] = t[c].re / o, s[c] = -t[c].im / o;
238
+ const n = new Float32Array(r), s = new Float32Array(r);
239
+ for (let c = 0; c < r; c++)
240
+ n[c] = t[c].re / r, s[c] = -t[c].im / r;
237
241
  return { real: n, imag: s };
238
242
  }
239
- function Bt(e) {
240
- const o = e.nyquist;
243
+ function zt(e) {
244
+ const r = e.nyquist;
241
245
  return {
242
- real: e.real.slice(0, o),
243
- imag: e.imag.slice(0, o),
244
- frequency: e.frequency.slice(0, o),
245
- magnitude: e.magnitude.slice(0, o),
246
- phase: e.phase.slice(0, o)
246
+ real: e.real.slice(0, r),
247
+ imag: e.imag.slice(0, r),
248
+ frequency: e.frequency.slice(0, r),
249
+ magnitude: e.magnitude.slice(0, r),
250
+ phase: e.phase.slice(0, r)
247
251
  };
248
252
  }
249
- function D(e, o, r, t = {}) {
253
+ function L(e, r, o, t = {}) {
250
254
  if (e.length < 2) throw new Error("At least 2 points are required for fitting");
251
- switch (r) {
255
+ switch (o) {
252
256
  case "linear":
253
- return x(e, o, t);
257
+ return I(e, r, t);
254
258
  case "polynomial":
255
- return et(e, o, t.degree ?? 2, t);
259
+ return ot(e, r, t.degree ?? 2, t);
256
260
  case "exponential":
257
- return ot(e, o, t);
261
+ return rt(e, r, t);
258
262
  case "logarithmic":
259
- return rt(e, o, t);
263
+ return st(e, r, t);
260
264
  case "power":
261
- return st(e, o, t);
265
+ return ct(e, r, t);
262
266
  default:
263
- throw new Error(`Unsupported fit type: ${r}`);
267
+ throw new Error(`Unsupported fit type: ${o}`);
264
268
  }
265
269
  }
266
- function x(e, o, r) {
270
+ function I(e, r, o) {
267
271
  const t = e.length;
268
- let n = 0, s = 0, c = 0, a = 0;
272
+ let n = 0, s = 0, c = 0, i = 0;
269
273
  for (let m = 0; m < t; m++)
270
- n += e[m], s += o[m], c += e[m] * o[m], a += e[m] * e[m];
271
- const l = (t * c - n * s) / (t * a - n * n), f = (s - l * n) / t, i = (m) => l * m + f, u = r.precision ?? 4, h = r.label || "y";
274
+ n += e[m], s += r[m], c += e[m] * r[m], i += e[m] * e[m];
275
+ const l = (t * c - n * s) / (t * i - n * n), f = (s - l * n) / t, a = (m) => l * m + f, u = o.precision ?? 4, h = o.label || "y";
272
276
  return {
273
277
  type: "linear",
274
278
  coefficients: [l, f],
275
279
  equation: `${h} = ${l.toFixed(u)}x ${f >= 0 ? "+" : "-"} ${Math.abs(f).toFixed(u)}`,
276
- rSquared: I(e, o, i),
277
- predict: i
280
+ rSquared: A(e, r, a),
281
+ predict: a
278
282
  };
279
283
  }
280
- function et(e, o, r, t) {
281
- const n = e.length, s = r + 1, c = Array.from({ length: s }, () => new Array(s).fill(0)), a = new Array(s).fill(0);
284
+ function ot(e, r, o, t) {
285
+ const n = e.length, s = o + 1, c = Array.from({ length: s }, () => new Array(s).fill(0)), i = new Array(s).fill(0);
282
286
  for (let m = 0; m < s; m++) {
283
- for (let w = 0; w < s; w++) {
284
- let g = 0;
285
- for (let F = 0; F < n; F++)
286
- g += Math.pow(e[F], m + w);
287
- c[m][w] = g;
287
+ for (let M = 0; M < s; M++) {
288
+ let d = 0;
289
+ for (let w = 0; w < n; w++)
290
+ d += Math.pow(e[w], m + M);
291
+ c[m][M] = d;
288
292
  }
289
- let y = 0;
290
- for (let w = 0; w < n; w++)
291
- y += o[w] * Math.pow(e[w], m);
292
- a[m] = y;
293
- }
294
- const l = _(c, a), f = (m) => {
295
- let y = 0;
296
- for (let w = 0; w < l.length; w++)
297
- y += l[w] * Math.pow(m, w);
298
- return y;
299
- }, i = t.precision ?? 4;
293
+ let g = 0;
294
+ for (let M = 0; M < n; M++)
295
+ g += r[M] * Math.pow(e[M], m);
296
+ i[m] = g;
297
+ }
298
+ const l = W(c, i), f = (m) => {
299
+ let g = 0;
300
+ for (let M = 0; M < l.length; M++)
301
+ g += l[M] * Math.pow(m, M);
302
+ return g;
303
+ }, a = t.precision ?? 4;
300
304
  let u = "y = ";
301
305
  for (let m = l.length - 1; m >= 0; m--) {
302
- const y = l[m];
303
- m < l.length - 1 ? u += y >= 0 ? " + " : " - " : y < 0 && (u += "-"), u += `${Math.abs(y).toFixed(i)}${m > 0 ? m > 1 ? `x^${m}` : "x" : ""}`;
306
+ const g = l[m];
307
+ m < l.length - 1 ? u += g >= 0 ? " + " : " - " : g < 0 && (u += "-"), u += `${Math.abs(g).toFixed(a)}${m > 0 ? m > 1 ? `x^${m}` : "x" : ""}`;
304
308
  }
305
309
  const h = t.label || "y";
306
310
  return {
@@ -308,763 +312,484 @@ function et(e, o, r, t) {
308
312
  coefficients: l,
309
313
  equation: `${h} = ${u.substring(4)}`,
310
314
  // replace "y = " with custom label
311
- rSquared: I(e, o, f),
315
+ rSquared: A(e, r, f),
312
316
  predict: f
313
317
  };
314
318
  }
315
- function ot(e, o, r) {
319
+ function rt(e, r, o) {
316
320
  const t = e.length, n = [], s = [];
317
321
  for (let h = 0; h < t; h++)
318
- o[h] > 0 && (n.push(e[h]), s.push(Math.log(o[h])));
319
- const c = x(n, s, r), a = c.coefficients[0], l = Math.exp(c.coefficients[1]), f = (h) => l * Math.exp(a * h), i = r.precision ?? 4, u = r.label || "y";
322
+ r[h] > 0 && (n.push(e[h]), s.push(Math.log(r[h])));
323
+ const c = I(n, s, o), i = c.coefficients[0], l = Math.exp(c.coefficients[1]), f = (h) => l * Math.exp(i * h), a = o.precision ?? 4, u = o.label || "y";
320
324
  return {
321
325
  type: "exponential",
322
- coefficients: [l, a],
323
- equation: `${u} = ${l.toFixed(i)} * e^(${a.toFixed(i)}x)`,
324
- rSquared: I(e, o, f),
326
+ coefficients: [l, i],
327
+ equation: `${u} = ${l.toFixed(a)} * e^(${i.toFixed(a)}x)`,
328
+ rSquared: A(e, r, f),
325
329
  predict: f
326
330
  };
327
331
  }
328
- function rt(e, o, r) {
332
+ function st(e, r, o) {
329
333
  const t = e.length, n = [], s = [];
330
334
  for (let h = 0; h < t; h++)
331
- e[h] > 0 && (n.push(Math.log(e[h])), s.push(o[h]));
332
- const c = x(n, s, r), a = c.coefficients[0], l = c.coefficients[1], f = (h) => l + a * Math.log(h), i = r.precision ?? 4, u = r.label || "y";
335
+ e[h] > 0 && (n.push(Math.log(e[h])), s.push(r[h]));
336
+ const c = I(n, s, o), i = c.coefficients[0], l = c.coefficients[1], f = (h) => l + i * Math.log(h), a = o.precision ?? 4, u = o.label || "y";
333
337
  return {
334
338
  type: "logarithmic",
335
- coefficients: [l, a],
336
- equation: `${u} = ${l.toFixed(i)} ${a >= 0 ? "+" : "-"} ${Math.abs(a).toFixed(i)} * ln(x)`,
337
- rSquared: I(e, o, f),
339
+ coefficients: [l, i],
340
+ equation: `${u} = ${l.toFixed(a)} ${i >= 0 ? "+" : "-"} ${Math.abs(i).toFixed(a)} * ln(x)`,
341
+ rSquared: A(e, r, f),
338
342
  predict: f
339
343
  };
340
344
  }
341
- function st(e, o, r) {
345
+ function ct(e, r, o) {
342
346
  const t = e.length, n = [], s = [];
343
347
  for (let h = 0; h < t; h++)
344
- e[h] > 0 && o[h] > 0 && (n.push(Math.log(e[h])), s.push(Math.log(o[h])));
345
- const c = x(n, s, r), a = c.coefficients[0], l = Math.exp(c.coefficients[1]), f = (h) => l * Math.pow(h, a), i = r.precision ?? 4, u = r.label || "y";
348
+ e[h] > 0 && r[h] > 0 && (n.push(Math.log(e[h])), s.push(Math.log(r[h])));
349
+ const c = I(n, s, o), i = c.coefficients[0], l = Math.exp(c.coefficients[1]), f = (h) => l * Math.pow(h, i), a = o.precision ?? 4, u = o.label || "y";
346
350
  return {
347
351
  type: "power",
348
- coefficients: [l, a],
349
- equation: `${u} = ${l.toFixed(i)} * x^(${a.toFixed(i)})`,
350
- rSquared: I(e, o, f),
352
+ coefficients: [l, i],
353
+ equation: `${u} = ${l.toFixed(a)} * x^(${i.toFixed(a)})`,
354
+ rSquared: A(e, r, f),
351
355
  predict: f
352
356
  };
353
357
  }
354
- function N(e, o) {
355
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
356
- if (o < 1 || o > r.length)
357
- return t.fill(NaN), t;
358
- for (let s = 0; s < o - 1; s++)
359
- t[s] = NaN;
360
- let n = 0;
361
- for (let s = 0; s < o; s++)
362
- n += r[s];
363
- t[o - 1] = n / o;
364
- for (let s = o; s < r.length; s++)
365
- n = n - r[s - o] + r[s], t[s] = n / o;
366
- return t;
367
- }
368
- function M(e, o) {
369
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
370
- if (o < 1 || o > r.length)
371
- return t.fill(NaN), t;
372
- const n = 2 / (o + 1);
373
- for (let c = 0; c < o - 1; c++)
374
- t[c] = NaN;
375
- let s = 0;
376
- for (let c = 0; c < o; c++)
377
- s += r[c];
378
- t[o - 1] = s / o;
379
- for (let c = o; c < r.length; c++)
380
- t[c] = (r[c] - t[c - 1]) * n + t[c - 1];
381
- return t;
382
- }
383
- function Wt(e, o) {
384
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
385
- if (o < 1 || o > r.length)
386
- return t.fill(NaN), t;
387
- const n = o * (o + 1) / 2;
388
- for (let s = 0; s < o - 1; s++)
389
- t[s] = NaN;
390
- for (let s = o - 1; s < r.length; s++) {
391
- let c = 0;
392
- for (let a = 0; a < o; a++)
393
- c += r[s - o + 1 + a] * (a + 1);
394
- t[s] = c / n;
395
- }
396
- return t;
397
- }
398
- function _t(e, o) {
399
- const r = M(e, o), t = M(r, o), n = new Float32Array(e.length);
400
- for (let s = 0; s < e.length; s++)
401
- n[s] = 2 * r[s] - t[s];
402
- return n;
403
- }
404
- function zt(e, o) {
405
- const r = M(e, o), t = M(r, o), n = M(t, o), s = new Float32Array(e.length);
406
- for (let c = 0; c < e.length; c++)
407
- s[c] = 3 * r[c] - 3 * t[c] + n[c];
408
- return s;
409
- }
410
- function ct(e, o = 14) {
411
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
412
- if (o < 1 || r.length < o + 1)
413
- return t.fill(NaN), t;
414
- for (let c = 0; c < o; c++)
415
- t[c] = NaN;
416
- let n = 0, s = 0;
417
- for (let c = 1; c <= o; c++) {
418
- const a = r[c] - r[c - 1];
419
- a > 0 ? n += a : s += Math.abs(a);
420
- }
421
- if (n /= o, s /= o, s === 0)
422
- t[o] = 100;
423
- else {
424
- const c = n / s;
425
- t[o] = 100 - 100 / (1 + c);
426
- }
427
- for (let c = o + 1; c < r.length; c++) {
428
- const a = r[c] - r[c - 1];
429
- let l = 0, f = 0;
430
- if (a > 0 ? l = a : f = Math.abs(a), n = (n * (o - 1) + l) / o, s = (s * (o - 1) + f) / o, s === 0)
431
- t[c] = 100;
432
- else {
433
- const i = n / s;
434
- t[c] = 100 - 100 / (1 + i);
435
- }
436
- }
437
- return t;
438
- }
439
- function Et(e, o = 12, r = 26, t = 9) {
440
- const n = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), s = M(n, o), c = M(n, r), a = new Float32Array(n.length);
441
- for (let i = 0; i < n.length; i++)
442
- a[i] = s[i] - c[i];
443
- const l = M(a, t), f = new Float32Array(n.length);
444
- for (let i = 0; i < n.length; i++)
445
- f[i] = a[i] - l[i];
446
- return {
447
- values: a,
448
- signal: l,
449
- histogram: f
450
- };
451
- }
452
- function Tt(e, o = 14, r = 3) {
453
- const { high: t, low: n, close: s } = e, c = s.length, a = new Float32Array(c);
454
- for (let f = 0; f < c; f++) {
455
- if (f < o - 1) {
456
- a[f] = NaN;
457
- continue;
458
- }
459
- let i = -1 / 0, u = 1 / 0;
460
- for (let m = f - o + 1; m <= f; m++)
461
- t[m] > i && (i = t[m]), n[m] < u && (u = n[m]);
462
- const h = i - u;
463
- h === 0 ? a[f] = 50 : a[f] = (s[f] - u) / h * 100;
464
- }
465
- const l = N(a, r);
466
- return {
467
- values: a,
468
- // %K
469
- signal: l
470
- // %D
471
- };
472
- }
473
- function Vt(e, o = 10) {
474
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
475
- for (let n = 0; n < o; n++)
476
- t[n] = NaN;
477
- for (let n = o; n < r.length; n++) {
478
- const s = r[n - o];
479
- s === 0 ? t[n] = NaN : t[n] = (r[n] - s) / s * 100;
480
- }
481
- return t;
482
- }
483
- function Ht(e, o = 10) {
484
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
485
- for (let n = 0; n < o; n++)
486
- t[n] = NaN;
487
- for (let n = o; n < r.length; n++)
488
- t[n] = r[n] - r[n - o];
489
- return t;
490
- }
491
- function Xt(e, o = 20, r = 2) {
492
- const t = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), n = N(t, o), s = new Float32Array(t.length), c = new Float32Array(t.length);
493
- for (let a = 0; a < t.length; a++) {
494
- if (a < o - 1) {
495
- s[a] = NaN, c[a] = NaN;
496
- continue;
497
- }
498
- let l = 0;
499
- for (let i = a - o + 1; i <= a; i++) {
500
- const u = t[i] - n[a];
501
- l += u * u;
502
- }
503
- const f = Math.sqrt(l / o);
504
- s[a] = n[a] + r * f, c[a] = n[a] - r * f;
505
- }
506
- return {
507
- values: n,
508
- upper: s,
509
- lower: c
510
- };
511
- }
512
- function Yt(e, o = 14) {
513
- const { high: r, low: t, close: n } = e, s = n.length, c = new Float32Array(s);
514
- c[0] = r[0] - t[0];
515
- for (let a = 1; a < s; a++) {
516
- const l = r[a] - t[a], f = Math.abs(r[a] - n[a - 1]), i = Math.abs(t[a] - n[a - 1]);
517
- c[a] = Math.max(l, f, i);
518
- }
519
- return M(c, o);
520
- }
521
- function Gt(e, o = 20) {
522
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length), n = N(r, o);
523
- for (let s = 0; s < r.length; s++) {
524
- if (s < o - 1) {
525
- t[s] = NaN;
526
- continue;
527
- }
528
- let c = 0;
529
- for (let a = s - o + 1; a <= s; a++) {
530
- const l = r[a] - n[s];
531
- c += l * l;
532
- }
533
- t[s] = Math.sqrt(c / o);
534
- }
535
- return t;
536
- }
537
- function Ot(e) {
538
- const { high: o, low: r, close: t, volume: n } = e;
539
- if (!n)
540
- throw new Error("VWAP requires volume data");
541
- const s = t.length, c = new Float32Array(s);
542
- let a = 0, l = 0;
543
- for (let f = 0; f < s; f++) {
544
- const i = (o[f] + r[f] + t[f]) / 3;
545
- a += i * n[f], l += n[f], l === 0 ? c[f] = i : c[f] = a / l;
546
- }
547
- return c;
548
- }
549
- function Zt(e, o) {
550
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = o instanceof Float32Array || o instanceof Float64Array ? o : Float32Array.from(o), n = new Float32Array(r.length);
551
- n[0] = t[0];
552
- for (let s = 1; s < r.length; s++)
553
- r[s] > r[s - 1] ? n[s] = n[s - 1] + t[s] : r[s] < r[s - 1] ? n[s] = n[s - 1] - t[s] : n[s] = n[s - 1];
554
- return n;
555
- }
556
- function Ut(e, o = 14) {
557
- const { high: r, low: t, close: n } = e, s = n.length, c = new Float32Array(s), a = new Float32Array(s), l = new Float32Array(s);
558
- l[0] = r[0] - t[0], c[0] = 0, a[0] = 0;
559
- for (let g = 1; g < s; g++) {
560
- const F = r[g] - r[g - 1], A = t[g - 1] - t[g];
561
- c[g] = F > A && F > 0 ? F : 0, a[g] = A > F && A > 0 ? A : 0;
562
- const b = r[g] - t[g], p = Math.abs(r[g] - n[g - 1]), d = Math.abs(t[g] - n[g - 1]);
563
- l[g] = Math.max(b, p, d);
564
- }
565
- const f = M(l, o), i = M(c, o), u = M(a, o), h = new Float32Array(s), m = new Float32Array(s), y = new Float32Array(s);
566
- for (let g = 0; g < s; g++)
567
- if (f[g] === 0 || isNaN(f[g]))
568
- h[g] = NaN, m[g] = NaN, y[g] = NaN;
569
- else {
570
- h[g] = i[g] / f[g] * 100, m[g] = u[g] / f[g] * 100;
571
- const F = h[g] + m[g];
572
- y[g] = F === 0 ? 0 : Math.abs(h[g] - m[g]) / F * 100;
573
- }
574
- return {
575
- values: M(y, o),
576
- upper: h,
577
- // +DI
578
- lower: m
579
- // -DI
580
- };
581
- }
582
- function Kt(e, o = 25) {
583
- const { high: r, low: t } = e, n = r.length, s = new Float32Array(n), c = new Float32Array(n);
584
- for (let l = 0; l < n; l++) {
585
- if (l < o) {
586
- s[l] = NaN, c[l] = NaN;
587
- continue;
588
- }
589
- let f = l, i = l, u = -1 / 0, h = 1 / 0;
590
- for (let m = l - o; m <= l; m++)
591
- r[m] > u && (u = r[m], f = m), t[m] < h && (h = t[m], i = m);
592
- s[l] = (o - (l - f)) / o * 100, c[l] = (o - (l - i)) / o * 100;
593
- }
594
- const a = new Float32Array(n);
595
- for (let l = 0; l < n; l++)
596
- a[l] = s[l] - c[l];
597
- return {
598
- values: a,
599
- upper: s,
600
- lower: c
601
- };
358
+ function Et(e, r, o, t = 5) {
359
+ const n = r / (o / 2), s = S(Math.min(n, 0.99), t);
360
+ return q(e, s);
602
361
  }
603
- function Qt(e, o = 1) {
604
- const r = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), t = new Float32Array(r.length);
605
- for (let n = 0; n < o; n++)
606
- t[n] = NaN;
607
- for (let n = o; n < r.length; n++) {
608
- const s = r[n - o];
609
- s === 0 ? t[n] = NaN : t[n] = (r[n] - s) / s * 100;
610
- }
611
- return t;
612
- }
613
- function Jt(e) {
614
- const o = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), r = new Float32Array(o.length);
615
- r[0] = o[0];
616
- for (let t = 1; t < o.length; t++)
617
- r[t] = r[t - 1] + o[t];
618
- return r;
362
+ function Tt(e, r, o, t = 5) {
363
+ const n = r / (o / 2), s = it(Math.min(n, 0.99), t);
364
+ return q(e, s);
619
365
  }
620
- function tn(e) {
621
- const o = e instanceof Float32Array || e instanceof Float64Array ? e : Float32Array.from(e), r = new Float32Array(o.length);
622
- let t = 1 / 0, n = -1 / 0;
623
- for (let c = 0; c < o.length; c++)
624
- isNaN(o[c]) || (o[c] < t && (t = o[c]), o[c] > n && (n = o[c]));
625
- const s = n - t;
626
- if (s === 0)
627
- r.fill(50);
628
- else
629
- for (let c = 0; c < o.length; c++)
630
- r[c] = (o[c] - t) / s * 100;
631
- return r;
632
- }
633
- function nn(e, o, r, t = 5) {
634
- const n = o / (r / 2), s = L(Math.min(n, 0.99), t);
635
- return P(e, s);
636
- }
637
- function en(e, o, r, t = 5) {
638
- const n = o / (r / 2), s = at(Math.min(n, 0.99), t);
639
- return P(e, s);
640
- }
641
- function on(e, o, r, t, n = 5) {
642
- const s = o / (t / 2), c = r / (t / 2), a = B(
366
+ function Ht(e, r, o, t, n = 5) {
367
+ const s = r / (t / 2), c = o / (t / 2), i = B(
643
368
  Math.max(s, 0.01),
644
369
  Math.min(c, 0.99),
645
370
  n
646
371
  );
647
- return P(e, a);
372
+ return q(e, i);
648
373
  }
649
- function rn(e, o, r, t, n = 5) {
650
- const s = o / (t / 2), c = r / (t / 2), a = lt(
374
+ function Xt(e, r, o, t, n = 5) {
375
+ const s = r / (t / 2), c = o / (t / 2), i = at(
651
376
  Math.max(s, 0.01),
652
377
  Math.min(c, 0.99),
653
378
  n
654
379
  );
655
- return P(e, a);
380
+ return q(e, i);
656
381
  }
657
- function L(e, o) {
658
- const r = 2 * o + 1, t = new Float32Array(r), n = e;
659
- for (let c = 0; c < r; c++) {
660
- const a = c - o;
661
- a === 0 ? t[c] = 2 * n : t[c] = Math.sin(2 * Math.PI * n * a) / (Math.PI * a), t[c] *= 0.54 - 0.46 * Math.cos(2 * Math.PI * c / (r - 1));
382
+ function S(e, r) {
383
+ const o = 2 * r + 1, t = new Float32Array(o), n = e;
384
+ for (let c = 0; c < o; c++) {
385
+ const i = c - r;
386
+ i === 0 ? t[c] = 2 * n : t[c] = Math.sin(2 * Math.PI * n * i) / (Math.PI * i), t[c] *= 0.54 - 0.46 * Math.cos(2 * Math.PI * c / (o - 1));
662
387
  }
663
388
  let s = 0;
664
- for (let c = 0; c < r; c++) s += t[c];
665
- for (let c = 0; c < r; c++) t[c] /= s;
389
+ for (let c = 0; c < o; c++) s += t[c];
390
+ for (let c = 0; c < o; c++) t[c] /= s;
666
391
  return t;
667
392
  }
668
- function at(e, o) {
669
- const r = L(e, o), t = r.length, n = new Float32Array(t);
393
+ function it(e, r) {
394
+ const o = S(e, r), t = o.length, n = new Float32Array(t);
670
395
  for (let s = 0; s < t; s++)
671
- n[s] = -r[s];
672
- return n[o] += 1, n;
673
- }
674
- function B(e, o, r) {
675
- const t = 2 * r + 1, n = new Float32Array(t), s = e, c = o;
676
- for (let a = 0; a < t; a++) {
677
- const l = a - r;
678
- l === 0 ? n[a] = 2 * (c - s) : n[a] = (Math.sin(2 * Math.PI * c * l) - Math.sin(2 * Math.PI * s * l)) / (Math.PI * l), n[a] *= 0.54 - 0.46 * Math.cos(2 * Math.PI * a / (t - 1));
396
+ n[s] = -o[s];
397
+ return n[r] += 1, n;
398
+ }
399
+ function B(e, r, o) {
400
+ const t = 2 * o + 1, n = new Float32Array(t), s = e, c = r;
401
+ for (let i = 0; i < t; i++) {
402
+ const l = i - o;
403
+ l === 0 ? n[i] = 2 * (c - s) : n[i] = (Math.sin(2 * Math.PI * c * l) - Math.sin(2 * Math.PI * s * l)) / (Math.PI * l), n[i] *= 0.54 - 0.46 * Math.cos(2 * Math.PI * i / (t - 1));
679
404
  }
680
405
  return n;
681
406
  }
682
- function lt(e, o, r) {
683
- const t = B(e, o, r), n = t.length, s = new Float32Array(n);
407
+ function at(e, r, o) {
408
+ const t = B(e, r, o), n = t.length, s = new Float32Array(n);
684
409
  for (let c = 0; c < n; c++)
685
410
  s[c] = -t[c];
686
- return s[r] += 1, s;
411
+ return s[o] += 1, s;
687
412
  }
688
- function P(e, o) {
689
- const r = e.length, t = o.length, n = Math.floor(t / 2), s = new Float32Array(r);
690
- for (let c = 0; c < r; c++) {
691
- let a = 0;
413
+ function q(e, r) {
414
+ const o = e.length, t = r.length, n = Math.floor(t / 2), s = new Float32Array(o);
415
+ for (let c = 0; c < o; c++) {
416
+ let i = 0;
692
417
  for (let l = 0; l < t; l++) {
693
418
  const f = c - n + l;
694
- f >= 0 && f < r && (a += e[f] * o[l]);
419
+ f >= 0 && f < o && (i += e[f] * r[l]);
695
420
  }
696
- s[c] = a;
421
+ s[c] = i;
697
422
  }
698
423
  return s;
699
424
  }
700
- function sn(e, o) {
701
- const { type: r, cutoff: t, cutoffHigh: n, sampleRate: s = 1, order: c = 2 } = o, a = 2 * t / s, l = n ? 2 * n / s : void 0, { b: f, a: i } = ut(r, a, l);
702
- return W(e, f, i);
425
+ function Yt(e, r) {
426
+ const { type: o, cutoff: t, cutoffHigh: n, sampleRate: s = 1, order: c = 2 } = r, i = 2 * t / s, l = n ? 2 * n / s : void 0, { b: f, a } = ut(o, i, l);
427
+ return D(e, f, a);
703
428
  }
704
- function it(e, o) {
705
- const { frequency: r, sampleRate: t, bandwidth: n = 1 } = o, { b: s, a: c } = ft(r, t, n);
706
- return W(e, s, c);
429
+ function lt(e, r) {
430
+ const { frequency: o, sampleRate: t, bandwidth: n = 1 } = r, { b: s, a: c } = ft(o, t, n);
431
+ return D(e, s, c);
707
432
  }
708
- function ft(e, o, r) {
709
- const t = 2 * Math.PI * e / o, s = 1 - 2 * Math.PI * r / o / 2, c = Math.cos(t), a = [1, -2 * c, 1], l = [1, -2 * s * c, s * s];
710
- return { b: a, a: l };
433
+ function ft(e, r, o) {
434
+ const t = 2 * Math.PI * e / r, s = 1 - 2 * Math.PI * o / r / 2, c = Math.cos(t), i = [1, -2 * c, 1], l = [1, -2 * s * c, s * s];
435
+ return { b: i, a: l };
711
436
  }
712
- function ut(e, o, r, t) {
713
- const n = Math.tan(Math.PI * o / 2);
437
+ function ut(e, r, o, t) {
438
+ const n = Math.tan(Math.PI * r / 2);
714
439
  if (e === "lowpass")
715
- return $(n);
440
+ return v(n);
716
441
  if (e === "highpass")
717
442
  return ht(n);
718
- if (e === "bandpass" && r) {
719
- const s = Math.tan(Math.PI * r / 2);
443
+ if (e === "bandpass" && o) {
444
+ const s = Math.tan(Math.PI * o / 2);
720
445
  return mt(n, s);
721
- } else if (e === "bandstop" && r) {
722
- const s = Math.tan(Math.PI * r / 2);
446
+ } else if (e === "bandstop" && o) {
447
+ const s = Math.tan(Math.PI * o / 2);
723
448
  return gt(n, s);
724
449
  }
725
- return $(n);
450
+ return v(n);
726
451
  }
727
- function $(e, o) {
728
- const r = e, t = r * r, n = Math.sqrt(2), s = 1 / (1 + n * r + t);
452
+ function v(e, r) {
453
+ const o = e, t = o * o, n = Math.sqrt(2), s = 1 / (1 + n * o + t);
729
454
  return {
730
455
  b: [t * s, 2 * t * s, t * s],
731
- a: [1, 2 * (t - 1) * s, (1 - n * r + t) * s]
456
+ a: [1, 2 * (t - 1) * s, (1 - n * o + t) * s]
732
457
  };
733
458
  }
734
- function ht(e, o) {
735
- const r = e, t = r * r, n = Math.sqrt(2), s = 1 / (1 + n * r + t);
459
+ function ht(e, r) {
460
+ const o = e, t = o * o, n = Math.sqrt(2), s = 1 / (1 + n * o + t);
736
461
  return {
737
462
  b: [s, -2 * s, s],
738
- a: [1, 2 * (t - 1) * s, (1 - n * r + t) * s]
463
+ a: [1, 2 * (t - 1) * s, (1 - n * o + t) * s]
739
464
  };
740
465
  }
741
- function mt(e, o, r) {
742
- const t = Math.sqrt(e * o), n = o - e, s = t / n, c = 1 / (1 + t / s + t * t);
466
+ function mt(e, r, o) {
467
+ const t = Math.sqrt(e * r), n = r - e, s = t / n, c = 1 / (1 + t / s + t * t);
743
468
  return {
744
469
  b: [t / s * c, 0, -t / s * c],
745
470
  a: [1, 2 * (t * t - 1) * c, (1 - t / s + t * t) * c]
746
471
  };
747
472
  }
748
- function gt(e, o, r) {
749
- const t = Math.sqrt(e * o), n = o - e, s = t / n, c = 1 / (1 + t / s + t * t);
473
+ function gt(e, r, o) {
474
+ const t = Math.sqrt(e * r), n = r - e, s = t / n, c = 1 / (1 + t / s + t * t);
750
475
  return {
751
476
  b: [(1 + t * t) * c, 2 * (t * t - 1) * c, (1 + t * t) * c],
752
477
  a: [1, 2 * (t * t - 1) * c, (1 - t / s + t * t) * c]
753
478
  };
754
479
  }
755
- function j(e, o, r) {
480
+ function $(e, r, o) {
756
481
  const t = e.length, n = new Float32Array(t);
757
482
  for (let s = 0; s < t; s++) {
758
- n[s] = o[0] * e[s];
759
- for (let c = 1; c < o.length; c++)
760
- s - c >= 0 && (n[s] += o[c] * e[s - c], n[s] -= r[c] * n[s - c]);
483
+ n[s] = r[0] * e[s];
484
+ for (let c = 1; c < r.length; c++)
485
+ s - c >= 0 && (n[s] += r[c] * e[s - c], n[s] -= o[c] * n[s - c]);
761
486
  }
762
487
  return n;
763
488
  }
764
- function W(e, o, r) {
765
- const t = j(e, o, r), n = new Float32Array(t.length);
766
- for (let a = 0; a < t.length; a++)
767
- n[a] = t[t.length - 1 - a];
768
- const s = j(n, o, r), c = new Float32Array(s.length);
769
- for (let a = 0; a < s.length; a++)
770
- c[a] = s[s.length - 1 - a];
489
+ function D(e, r, o) {
490
+ const t = $(e, r, o), n = new Float32Array(t.length);
491
+ for (let i = 0; i < t.length; i++)
492
+ n[i] = t[t.length - 1 - i];
493
+ const s = $(n, r, o), c = new Float32Array(s.length);
494
+ for (let i = 0; i < s.length; i++)
495
+ c[i] = s[s.length - 1 - i];
771
496
  return c;
772
497
  }
773
- function cn(e, o = 0.3) {
774
- const r = e.length, t = new Float32Array(r);
498
+ function Nt(e, r = 0.3) {
499
+ const o = e.length, t = new Float32Array(o);
775
500
  t[0] = e[0];
776
- for (let n = 1; n < r; n++)
777
- t[n] = o * e[n] + (1 - o) * t[n - 1];
501
+ for (let n = 1; n < o; n++)
502
+ t[n] = r * e[n] + (1 - r) * t[n - 1];
778
503
  return t;
779
504
  }
780
- function an(e, o = 2) {
781
- const r = e.length, t = new Float32Array(r), n = Math.ceil(o * 3) * 2 + 1, s = Math.floor(n / 2), c = new Float32Array(n);
782
- let a = 0;
505
+ function Ot(e, r = 2) {
506
+ const o = e.length, t = new Float32Array(o), n = Math.ceil(r * 3) * 2 + 1, s = Math.floor(n / 2), c = new Float32Array(n);
507
+ let i = 0;
783
508
  for (let l = 0; l < n; l++) {
784
509
  const f = l - s;
785
- c[l] = Math.exp(-(f * f) / (2 * o * o)), a += c[l];
510
+ c[l] = Math.exp(-(f * f) / (2 * r * r)), i += c[l];
786
511
  }
787
512
  for (let l = 0; l < n; l++)
788
- c[l] /= a;
789
- for (let l = 0; l < r; l++) {
513
+ c[l] /= i;
514
+ for (let l = 0; l < o; l++) {
790
515
  let f = 0;
791
- for (let i = 0; i < n; i++) {
792
- const u = l - s + i;
793
- u >= 0 && u < r && (f += e[u] * c[i]);
516
+ for (let a = 0; a < n; a++) {
517
+ const u = l - s + a;
518
+ u >= 0 && u < o && (f += e[u] * c[a]);
794
519
  }
795
520
  t[l] = f;
796
521
  }
797
522
  return t;
798
523
  }
799
- function ln(e, o = 5, r = 2) {
800
- const t = e.length, n = new Float32Array(t), s = Math.floor(o / 2), c = yt(o);
801
- for (let a = 0; a < t; a++) {
524
+ function Zt(e, r = 5, o = 2) {
525
+ const t = e.length, n = new Float32Array(t), s = Math.floor(r / 2), c = dt(r);
526
+ for (let i = 0; i < t; i++) {
802
527
  let l = 0;
803
528
  for (let f = -s; f <= s; f++) {
804
- const i = a + f;
805
- i >= 0 && i < t ? l += e[i] * c[f + s] : i < 0 ? l += e[0] * c[f + s] : l += e[t - 1] * c[f + s];
529
+ const a = i + f;
530
+ a >= 0 && a < t ? l += e[a] * c[f + s] : a < 0 ? l += e[0] * c[f + s] : l += e[t - 1] * c[f + s];
806
531
  }
807
- n[a] = l;
532
+ n[i] = l;
808
533
  }
809
534
  return n;
810
535
  }
811
- function yt(e, o) {
812
- const r = Math.floor(e / 2), t = new Float32Array(e), n = 1 / e;
536
+ function dt(e, r) {
537
+ const o = Math.floor(e / 2), t = new Float32Array(e), n = 1 / e;
813
538
  for (let c = 0; c < e; c++) {
814
- const a = c - r;
815
- t[c] = n * (1 - a * a / ((r + 1) * (r + 1)));
539
+ const i = c - o;
540
+ t[c] = n * (1 - i * i / ((o + 1) * (o + 1)));
816
541
  }
817
542
  let s = 0;
818
543
  for (let c = 0; c < e; c++) s += t[c];
819
544
  for (let c = 0; c < e; c++) t[c] /= s;
820
545
  return t;
821
546
  }
822
- function fn(e, o = 5) {
823
- const r = e.length, t = new Float32Array(r), n = Math.floor(o / 2);
824
- for (let s = 0; s < r; s++) {
547
+ function Gt(e, r = 5) {
548
+ const o = e.length, t = new Float32Array(o), n = Math.floor(r / 2);
549
+ for (let s = 0; s < o; s++) {
825
550
  const c = [];
826
- for (let a = -n; a <= n; a++) {
827
- const l = s + a;
828
- l >= 0 && l < r && c.push(e[l]);
551
+ for (let i = -n; i <= n; i++) {
552
+ const l = s + i;
553
+ l >= 0 && l < o && c.push(e[l]);
829
554
  }
830
- c.sort((a, l) => a - l), t[s] = c[Math.floor(c.length / 2)];
555
+ c.sort((i, l) => i - l), t[s] = c[Math.floor(c.length / 2)];
831
556
  }
832
557
  return t;
833
558
  }
834
- function un(e, o, r, t = {}) {
835
- const n = o.length, s = r.length, c = Math.min(...e), a = Math.max(...e), l = t.levels || wt(c, a, t.numLevels || 10), f = [];
836
- for (const i of l) {
559
+ function Kt(e, r, o, t = {}) {
560
+ const n = r.length, s = o.length, c = Math.min(...e), i = Math.max(...e), l = t.levels || Mt(c, i, t.numLevels || 10), f = [];
561
+ for (const a of l) {
837
562
  const u = [];
838
563
  for (let h = 0; h < s - 1; h++)
839
564
  for (let m = 0; m < n - 1; m++) {
840
- const y = e[h * n + m], w = e[h * n + (m + 1)], g = e[(h + 1) * n + (m + 1)], F = e[(h + 1) * n + m];
841
- Ft(m, h, y, w, g, F, i, o, r, u);
565
+ const g = e[h * n + m], M = e[h * n + (m + 1)], d = e[(h + 1) * n + (m + 1)], w = e[(h + 1) * n + m];
566
+ wt(m, h, g, M, d, w, a, r, o, u);
842
567
  }
843
568
  if (u.length > 0) {
844
569
  const h = [];
845
570
  for (const m of u)
846
571
  h.push({ x: m[0], y: m[1] }), h.push({ x: m[2], y: m[3] });
847
- f.push({ level: i, points: h });
572
+ f.push({ level: a, points: h });
848
573
  }
849
574
  }
850
575
  return f;
851
576
  }
852
- function wt(e, o, r) {
853
- const t = [], n = (o - e) / (r + 1);
854
- for (let s = 1; s <= r; s++)
577
+ function Mt(e, r, o) {
578
+ const t = [], n = (r - e) / (o + 1);
579
+ for (let s = 1; s <= o; s++)
855
580
  t.push(e + s * n);
856
581
  return t;
857
582
  }
858
- function Ft(e, o, r, t, n, s, c, a, l, f) {
859
- let i = 0;
860
- if (r >= c && (i |= 1), t >= c && (i |= 2), n >= c && (i |= 4), s >= c && (i |= 8), i === 0 || i === 15) return;
861
- const u = (w, g, F) => w + (g - w) * F, h = (w, g) => (c - w) / (g - w), m = (w) => {
862
- switch (w) {
583
+ function wt(e, r, o, t, n, s, c, i, l, f) {
584
+ let a = 0;
585
+ if (o >= c && (a |= 1), t >= c && (a |= 2), n >= c && (a |= 4), s >= c && (a |= 8), a === 0 || a === 15) return;
586
+ const u = (M, d, w) => M + (d - M) * w, h = (M, d) => (c - M) / (d - M), m = (M) => {
587
+ switch (M) {
863
588
  case 0:
864
- return [u(a[e], a[e + 1], h(r, t)), l[o]];
589
+ return [u(i[e], i[e + 1], h(o, t)), l[r]];
865
590
  case 1:
866
- return [a[e + 1], u(l[o], l[o + 1], h(t, n))];
591
+ return [i[e + 1], u(l[r], l[r + 1], h(t, n))];
867
592
  case 2:
868
- return [u(a[e], a[e + 1], h(s, n)), l[o + 1]];
593
+ return [u(i[e], i[e + 1], h(s, n)), l[r + 1]];
869
594
  case 3:
870
- return [a[e], u(l[o], l[o + 1], h(r, s))];
595
+ return [i[e], u(l[r], l[r + 1], h(o, s))];
871
596
  default:
872
597
  return [0, 0];
873
598
  }
874
- }, y = (w, g) => {
875
- const F = m(w), A = m(g);
876
- f.push([F[0], F[1], A[0], A[1]]);
599
+ }, g = (M, d) => {
600
+ const w = m(M), p = m(d);
601
+ f.push([w[0], w[1], p[0], p[1]]);
877
602
  };
878
- switch (i) {
603
+ switch (a) {
879
604
  case 1:
880
605
  case 14:
881
- y(0, 3);
606
+ g(0, 3);
882
607
  break;
883
608
  case 2:
884
609
  case 13:
885
- y(0, 1);
610
+ g(0, 1);
886
611
  break;
887
612
  case 3:
888
613
  case 12:
889
- y(1, 3);
614
+ g(1, 3);
890
615
  break;
891
616
  case 4:
892
617
  case 11:
893
- y(1, 2);
618
+ g(1, 2);
894
619
  break;
895
620
  case 5:
896
- y(0, 1), y(2, 3);
621
+ g(0, 1), g(2, 3);
897
622
  break;
898
623
  case 6:
899
624
  case 9:
900
- y(0, 2);
625
+ g(0, 2);
901
626
  break;
902
627
  case 7:
903
628
  case 8:
904
- y(2, 3);
629
+ g(2, 3);
905
630
  break;
906
631
  case 10:
907
- y(0, 3), y(1, 2);
632
+ g(0, 3), g(1, 2);
908
633
  break;
909
634
  }
910
635
  }
911
- function At(e, o, r) {
912
- const t = e.length, n = o.length, s = r ?? Math.min(t, n) - 1, c = 2 * s + 1, a = new Float32Array(c), l = new Float32Array(c);
913
- let f = 0, i = 0;
914
- for (let g = 0; g < t; g++) f += e[g];
915
- for (let g = 0; g < n; g++) i += o[g];
916
- f /= t, i /= n;
636
+ function pt(e, r, o) {
637
+ const t = e.length, n = r.length, s = o ?? Math.min(t, n) - 1, c = 2 * s + 1, i = new Float32Array(c), l = new Float32Array(c);
638
+ let f = 0, a = 0;
639
+ for (let d = 0; d < t; d++) f += e[d];
640
+ for (let d = 0; d < n; d++) a += r[d];
641
+ f /= t, a /= n;
917
642
  let u = 0, h = 0;
918
- for (let g = 0; g < t; g++) u += (e[g] - f) ** 2;
919
- for (let g = 0; g < n; g++) h += (o[g] - i) ** 2;
643
+ for (let d = 0; d < t; d++) u += (e[d] - f) ** 2;
644
+ for (let d = 0; d < n; d++) h += (r[d] - a) ** 2;
920
645
  u = Math.sqrt(u / t), h = Math.sqrt(h / n);
921
646
  const m = u * h * Math.min(t, n);
922
- let y = -1 / 0, w = 0;
923
- for (let g = 0; g < c; g++) {
924
- const F = g - s;
925
- l[g] = F;
926
- let A = 0;
927
- for (let b = 0; b < t; b++) {
928
- const p = b + F;
929
- p >= 0 && p < n && (A += (e[b] - f) * (o[p] - i));
647
+ let g = -1 / 0, M = 0;
648
+ for (let d = 0; d < c; d++) {
649
+ const w = d - s;
650
+ l[d] = w;
651
+ let p = 0;
652
+ for (let y = 0; y < t; y++) {
653
+ const F = y + w;
654
+ F >= 0 && F < n && (p += (e[y] - f) * (r[F] - a));
930
655
  }
931
- a[g] = m > 0 ? A / m : 0, a[g] > y && (y = a[g], w = g);
656
+ i[d] = m > 0 ? p / m : 0, i[d] > g && (g = i[d], M = d);
932
657
  }
933
658
  return {
934
- correlation: a,
659
+ correlation: i,
935
660
  lags: l,
936
- maxCorrelation: y,
937
- lagAtMax: l[w]
661
+ maxCorrelation: g,
662
+ lagAtMax: l[M]
938
663
  };
939
664
  }
940
- function hn(e, o) {
941
- return At(e, e, o);
665
+ function Qt(e, r) {
666
+ return pt(e, e, r);
942
667
  }
943
- function mn(e, o = {}) {
944
- const { method: r = "zscore", windowSize: t } = o;
945
- switch (r) {
668
+ function Ut(e, r = {}) {
669
+ const { method: o = "zscore", windowSize: t } = r;
670
+ switch (o) {
946
671
  case "zscore":
947
- return R(e, o.threshold ?? 3, t);
672
+ return k(e, r.threshold ?? 3, t);
948
673
  case "mad":
949
- return Mt(e, o.threshold ?? 2.5);
674
+ return yt(e, r.threshold ?? 2.5);
950
675
  case "iqr":
951
- return bt(e, o.threshold ?? 1.5);
676
+ return Ft(e, r.threshold ?? 1.5);
952
677
  case "isolation":
953
- return pt(e, o.threshold ?? 0.5);
678
+ return At(e, r.threshold ?? 0.5);
954
679
  default:
955
- return R(e, 3, t);
680
+ return k(e, 3, t);
956
681
  }
957
682
  }
958
- function R(e, o, r) {
683
+ function k(e, r, o) {
959
684
  const t = e.length, n = new Float32Array(t), s = [];
960
- if (r && r < t) {
961
- const c = Math.floor(r / 2);
962
- for (let a = 0; a < t; a++) {
963
- const l = Math.max(0, a - c), f = Math.min(t, a + c + 1);
964
- let i = 0;
965
- for (let h = l; h < f; h++) i += e[h];
966
- i /= f - l;
685
+ if (o && o < t) {
686
+ const c = Math.floor(o / 2);
687
+ for (let i = 0; i < t; i++) {
688
+ const l = Math.max(0, i - c), f = Math.min(t, i + c + 1);
689
+ let a = 0;
690
+ for (let h = l; h < f; h++) a += e[h];
691
+ a /= f - l;
967
692
  let u = 0;
968
- for (let h = l; h < f; h++) u += (e[h] - i) ** 2;
969
- u = Math.sqrt(u / (f - l)), n[a] = u > 0 ? Math.abs(e[a] - i) / u : 0, n[a] > o && s.push(a);
693
+ for (let h = l; h < f; h++) u += (e[h] - a) ** 2;
694
+ u = Math.sqrt(u / (f - l)), n[i] = u > 0 ? Math.abs(e[i] - a) / u : 0, n[i] > r && s.push(i);
970
695
  }
971
696
  } else {
972
697
  let c = 0;
973
698
  for (let l = 0; l < t; l++) c += e[l];
974
699
  c /= t;
975
- let a = 0;
976
- for (let l = 0; l < t; l++) a += (e[l] - c) ** 2;
977
- a = Math.sqrt(a / t);
700
+ let i = 0;
701
+ for (let l = 0; l < t; l++) i += (e[l] - c) ** 2;
702
+ i = Math.sqrt(i / t);
978
703
  for (let l = 0; l < t; l++)
979
- n[l] = a > 0 ? Math.abs(e[l] - c) / a : 0, n[l] > o && s.push(l);
704
+ n[l] = i > 0 ? Math.abs(e[l] - c) / i : 0, n[l] > r && s.push(l);
980
705
  }
981
- return { indices: s, scores: n, threshold: o };
706
+ return { indices: s, scores: n, threshold: r };
982
707
  }
983
- function Mt(e, o, r) {
984
- const t = e.length, n = new Float32Array(t), s = [], c = Array.from(e).sort((u, h) => u - h), a = c[Math.floor(t / 2)], i = 1.4826 * c.map((u) => Math.abs(u - a)).sort((u, h) => u - h)[Math.floor(t / 2)];
708
+ function yt(e, r, o) {
709
+ const t = e.length, n = new Float32Array(t), s = [], c = Array.from(e).sort((u, h) => u - h), i = c[Math.floor(t / 2)], a = 1.4826 * c.map((u) => Math.abs(u - i)).sort((u, h) => u - h)[Math.floor(t / 2)];
985
710
  for (let u = 0; u < t; u++)
986
- n[u] = i > 0 ? Math.abs(e[u] - a) / i : 0, n[u] > o && s.push(u);
987
- return { indices: s, scores: n, threshold: o };
988
- }
989
- function bt(e, o) {
990
- const r = e.length, t = new Float32Array(r), n = [], s = Array.from(e).sort((u, h) => u - h), c = s[Math.floor(r * 0.25)], a = s[Math.floor(r * 0.75)], l = a - c, f = c - o * l, i = a + o * l;
991
- for (let u = 0; u < r; u++)
992
- e[u] < f ? (t[u] = (f - e[u]) / l, n.push(u)) : e[u] > i ? (t[u] = (e[u] - i) / l, n.push(u)) : t[u] = 0;
993
- return { indices: n, scores: t, threshold: o };
994
- }
995
- function pt(e, o, r) {
996
- const t = e.length, n = new Float32Array(t), s = [], c = It(e);
997
- for (let a = 0; a < t; a++) {
711
+ n[u] = a > 0 ? Math.abs(e[u] - i) / a : 0, n[u] > r && s.push(u);
712
+ return { indices: s, scores: n, threshold: r };
713
+ }
714
+ function Ft(e, r) {
715
+ const o = e.length, t = new Float32Array(o), n = [], s = Array.from(e).sort((u, h) => u - h), c = s[Math.floor(o * 0.25)], i = s[Math.floor(o * 0.75)], l = i - c, f = c - r * l, a = i + r * l;
716
+ for (let u = 0; u < o; u++)
717
+ e[u] < f ? (t[u] = (f - e[u]) / l, n.push(u)) : e[u] > a ? (t[u] = (e[u] - a) / l, n.push(u)) : t[u] = 0;
718
+ return { indices: n, scores: t, threshold: r };
719
+ }
720
+ function At(e, r, o) {
721
+ const t = e.length, n = new Float32Array(t), s = [], c = bt(e);
722
+ for (let i = 0; i < t; i++) {
998
723
  let l = 0;
999
724
  for (let f = 0; f < t; f++)
1000
- a !== f && Math.abs(e[a] - e[f]) < c && l++;
1001
- n[a] = 1 - l / t, n[a] > o && s.push(a);
725
+ i !== f && Math.abs(e[i] - e[f]) < c && l++;
726
+ n[i] = 1 - l / t, n[i] > r && s.push(i);
1002
727
  }
1003
- return { indices: s, scores: n, threshold: o };
728
+ return { indices: s, scores: n, threshold: r };
1004
729
  }
1005
- function It(e) {
1006
- let o = 1 / 0, r = -1 / 0;
730
+ function bt(e) {
731
+ let r = 1 / 0, o = -1 / 0;
1007
732
  for (let t = 0; t < e.length; t++)
1008
- e[t] < o && (o = e[t]), e[t] > r && (r = e[t]);
1009
- return (r - o) * 0.1;
733
+ e[t] < r && (r = e[t]), e[t] > o && (o = e[t]);
734
+ return (o - r) * 0.1;
1010
735
  }
1011
- function k(e, o) {
1012
- const r = e.length;
1013
- if (r < 2) return 0;
736
+ function R(e, r) {
737
+ const o = e.length;
738
+ if (o < 2) return 0;
1014
739
  let t = 0;
1015
- if (typeof o == "number") {
1016
- const n = o;
1017
- for (let s = 1; s < r; s++)
740
+ if (typeof r == "number") {
741
+ const n = r;
742
+ for (let s = 1; s < o; s++)
1018
743
  t += (e[s - 1] + e[s]) * n / 2;
1019
- } else if (o)
1020
- for (let n = 1; n < r; n++)
1021
- t += (e[n - 1] + e[n]) * (o[n] - o[n - 1]) / 2;
744
+ } else if (r)
745
+ for (let n = 1; n < o; n++)
746
+ t += (e[n - 1] + e[n]) * (r[n] - r[n - 1]) / 2;
1022
747
  else
1023
- for (let n = 1; n < r; n++)
748
+ for (let n = 1; n < o; n++)
1024
749
  t += (e[n - 1] + e[n]) / 2;
1025
750
  return t;
1026
751
  }
1027
- function dt(e, o) {
1028
- const r = e.length;
1029
- if (r < 3) return k(e, o);
1030
- const t = r % 2 === 0 ? r - 1 : r;
752
+ function It(e, r) {
753
+ const o = e.length;
754
+ if (o < 3) return R(e, r);
755
+ const t = o % 2 === 0 ? o - 1 : o;
1031
756
  let n = 0;
1032
- if (typeof o == "number") {
1033
- const s = o;
757
+ if (typeof r == "number") {
758
+ const s = r;
1034
759
  n = e[0] + e[t - 1];
1035
760
  for (let c = 1; c < t - 1; c++)
1036
761
  n += (c % 2 === 0 ? 2 : 4) * e[c];
1037
- n *= s / 3, r !== t && (n += (e[r - 2] + e[r - 1]) * s / 2);
1038
- } else return o ? k(e, o) : dt(e, 1);
762
+ n *= s / 3, o !== t && (n += (e[o - 2] + e[o - 1]) * s / 2);
763
+ } else return r ? R(e, r) : It(e, 1);
1039
764
  return n;
1040
765
  }
1041
- function gn(e, o) {
1042
- const r = e.length, t = new Float32Array(r);
1043
- if (r < 2)
766
+ function Jt(e, r) {
767
+ const o = e.length, t = new Float32Array(o);
768
+ if (o < 2)
1044
769
  return t[0] = 0, t;
1045
- if (t[0] = 0, typeof o == "number") {
1046
- const n = o;
1047
- for (let s = 1; s < r; s++)
770
+ if (t[0] = 0, typeof r == "number") {
771
+ const n = r;
772
+ for (let s = 1; s < o; s++)
1048
773
  t[s] = t[s - 1] + (e[s - 1] + e[s]) * n / 2;
1049
- } else if (o)
1050
- for (let n = 1; n < r; n++)
1051
- t[n] = t[n - 1] + (e[n - 1] + e[n]) * (o[n] - o[n - 1]) / 2;
774
+ } else if (r)
775
+ for (let n = 1; n < o; n++)
776
+ t[n] = t[n - 1] + (e[n - 1] + e[n]) * (r[n] - r[n - 1]) / 2;
1052
777
  else
1053
- for (let n = 1; n < r; n++)
778
+ for (let n = 1; n < o; n++)
1054
779
  t[n] = t[n - 1] + (e[n - 1] + e[n]) / 2;
1055
780
  return t;
1056
781
  }
1057
- function yn(e, o) {
1058
- const r = e.length, t = o.length;
782
+ function Vt(e, r) {
783
+ const o = e.length, t = r.length;
1059
784
  let n = 0, s = 0;
1060
- for (let y = 0; y < r; y++) n += e[y];
1061
- for (let y = 0; y < t; y++) s += o[y];
1062
- n /= r, s /= t;
1063
- let c = 0, a = 0;
1064
- for (let y = 0; y < r; y++) c += (e[y] - n) ** 2;
1065
- for (let y = 0; y < t; y++) a += (o[y] - s) ** 2;
1066
- c /= r - 1, a /= t - 1;
1067
- const l = Math.sqrt(c / r + a / t), f = (n - s) / l, i = (c / r + a / t) ** 2, u = (c / r) ** 2 / (r - 1) + (a / t) ** 2 / (t - 1), h = i / u, m = 2 * (1 - qt(Math.abs(f)));
785
+ for (let g = 0; g < o; g++) n += e[g];
786
+ for (let g = 0; g < t; g++) s += r[g];
787
+ n /= o, s /= t;
788
+ let c = 0, i = 0;
789
+ for (let g = 0; g < o; g++) c += (e[g] - n) ** 2;
790
+ for (let g = 0; g < t; g++) i += (r[g] - s) ** 2;
791
+ c /= o - 1, i /= t - 1;
792
+ const l = Math.sqrt(c / o + i / t), f = (n - s) / l, a = (c / o + i / t) ** 2, u = (c / o) ** 2 / (o - 1) + (i / t) ** 2 / (t - 1), h = a / u, m = 2 * (1 - qt(Math.abs(f)));
1068
793
  return {
1069
794
  tStatistic: f,
1070
795
  degreesOfFreedom: h,
@@ -1073,10 +798,10 @@ function yn(e, o) {
1073
798
  };
1074
799
  }
1075
800
  function qt(e) {
1076
- const o = 0.254829592, r = -0.284496736, t = 1.421413741, n = -1.453152027, s = 1.061405429, c = 0.3275911, a = e < 0 ? -1 : 1;
801
+ const r = 0.254829592, o = -0.284496736, t = 1.421413741, n = -1.453152027, s = 1.061405429, c = 0.3275911, i = e < 0 ? -1 : 1;
1077
802
  e = Math.abs(e) / Math.sqrt(2);
1078
- const l = 1 / (1 + c * e), f = 1 - ((((s * l + n) * l + t) * l + r) * l + o) * l * Math.exp(-e * e);
1079
- return 0.5 * (1 + a * f);
803
+ const l = 1 / (1 + c * e), f = 1 - ((((s * l + n) * l + t) * l + o) * l + r) * l * Math.exp(-e * e);
804
+ return 0.5 * (1 + i * f);
1080
805
  }
1081
806
  const xt = {
1082
807
  name: "velo-plot-analysis",
@@ -1085,118 +810,118 @@ const xt = {
1085
810
  provides: ["analysis"],
1086
811
  tags: ["fft", "filters", "statistics", "math"]
1087
812
  };
1088
- function wn(e = {}) {
1089
- let o;
813
+ function tn(e = {}) {
814
+ let r;
1090
815
  return {
1091
816
  manifest: xt,
1092
- onInit(r) {
1093
- o = r;
817
+ onInit(o) {
818
+ r = o;
1094
819
  },
1095
- onDestroy(r) {
820
+ onDestroy(o) {
1096
821
  },
1097
822
  api: {
1098
- addFitLine(r, t, n) {
1099
- return K(o.chart, r, t, n);
823
+ addFitLine(o, t, n) {
824
+ return J(r.chart, o, t, n);
1100
825
  },
1101
826
  // Math & Stats
1102
- integrate: U,
1103
- derivative: Z,
1104
- calculateStats: O,
1105
- validateData: G,
827
+ integrate: z,
828
+ derivative: _,
829
+ calculateStats: G,
830
+ validateData: Z,
1106
831
  // Signal Processing
1107
- fft: (r) => v(r),
1108
- detectPeaks: Y,
1109
- detectCycles: X,
1110
- movingAverage: H,
1111
- subtractBaseline: V,
1112
- downsampleLTTB: T,
1113
- singleFrequencyFilter: it,
832
+ fft: (o) => x(o),
833
+ detectPeaks: O,
834
+ detectCycles: N,
835
+ movingAverage: Y,
836
+ subtractBaseline: X,
837
+ downsampleLTTB: H,
838
+ singleFrequencyFilter: lt,
1114
839
  // Fitting
1115
- fitData: D,
840
+ fitData: L,
1116
841
  // Indicators
1117
- sma: N,
1118
- ema: M,
1119
- rsi: ct,
842
+ sma: U,
843
+ ema: Q,
844
+ rsi: K,
1120
845
  // Utils
1121
- formatWithPrefix: E,
1122
- generateCycleColors: z
846
+ formatWithPrefix: T,
847
+ generateCycleColors: E
1123
848
  }
1124
849
  };
1125
850
  }
1126
851
  export {
1127
- wn as PluginAnalysis,
1128
- Ut as adx,
1129
- kt as analyzeComplexSpectrum,
1130
- C as analyzeSpectrum,
1131
- Kt as aroon,
1132
- nt as arraysToComplex,
1133
- Yt as atr,
1134
- hn as autoCorrelation,
1135
- on as bandPassFilter,
1136
- rn as bandStopFilter,
1137
- Rt as blackmanWindow,
1138
- Xt as bollingerBands,
1139
- sn as butterworth,
1140
- I as calculateR2,
1141
- O as calculateStats,
1142
- Ct as complexToArrays,
1143
- At as crossCorrelation,
1144
- Jt as cumsum,
1145
- Mn as cumulativeIntegral,
1146
- gn as cumulativeIntegral2,
1147
- wn as default,
1148
- _t as dema,
1149
- Z as derivative,
1150
- mn as detectAnomalies,
1151
- X as detectCycles,
1152
- Y as detectPeaks,
1153
- vt as dominantFrequency,
1154
- T as downsampleLTTB,
1155
- M as ema,
1156
- cn as exponentialMovingAverage,
1157
- v as fft,
1158
- St as fftFromComplexInput,
1159
- D as fitData,
1160
- bn as formatScientific,
1161
- pn as formatValue,
1162
- E as formatWithPrefix,
1163
- an as gaussianSmooth,
1164
- un as generateContours,
1165
- z as generateCycleColors,
1166
- In as getBestPrefix,
1167
- Bt as getPositiveFrequencies,
852
+ tn as PluginAnalysis,
853
+ fn as adx,
854
+ St as analyzeComplexSpectrum,
855
+ j as analyzeSpectrum,
856
+ un as aroon,
857
+ et as arraysToComplex,
858
+ hn as atr,
859
+ Qt as autoCorrelation,
860
+ Ht as bandPassFilter,
861
+ Xt as bandStopFilter,
862
+ Lt as blackmanWindow,
863
+ mn as bollingerBands,
864
+ Yt as butterworth,
865
+ A as calculateR2,
866
+ G as calculateStats,
867
+ Dt as complexToArrays,
868
+ pt as crossCorrelation,
869
+ gn as cumsum,
870
+ on as cumulativeIntegral,
871
+ Jt as cumulativeIntegral2,
872
+ tn as default,
873
+ dn as dema,
874
+ _ as derivative,
875
+ Ut as detectAnomalies,
876
+ N as detectCycles,
877
+ O as detectPeaks,
878
+ Rt as dominantFrequency,
879
+ H as downsampleLTTB,
880
+ Q as ema,
881
+ Nt as exponentialMovingAverage,
882
+ x as fft,
883
+ Bt as fftFromComplexInput,
884
+ L as fitData,
885
+ sn as formatScientific,
886
+ cn as formatValue,
887
+ T as formatWithPrefix,
888
+ Ot as gaussianSmooth,
889
+ Kt as generateContours,
890
+ E as generateCycleColors,
891
+ an as getBestPrefix,
892
+ zt as getPositiveFrequencies,
1168
893
  jt as hammingWindow,
1169
- $t as hanningWindow,
1170
- en as highPassFilter,
1171
- Q as ifft,
1172
- Lt as ifftComplex,
1173
- Dt as ifftFromArrays,
1174
- U as integrate,
1175
- nn as lowPassFilter,
1176
- Et as macd,
1177
- fn as medianFilter,
1178
- Ht as momentum,
1179
- H as movingAverage,
1180
- S as nextPowerOf2,
1181
- tn as normalize,
1182
- Zt as obv,
1183
- Qt as percentChange,
1184
- Pt as powerSpectrum,
1185
- Vt as roc,
1186
- ct as rsi,
1187
- ln as savitzkyGolay,
1188
- dt as simpsonsIntegration,
1189
- it as singleFrequencyFilter,
1190
- N as sma,
1191
- _ as solveLinearSystem,
1192
- Gt as standardDeviation,
1193
- Tt as stochastic,
1194
- V as subtractBaseline,
1195
- yn as tTest,
1196
- zt as tema,
1197
- k as trapezoidalIntegration,
1198
- G as validateData,
1199
- Ot as vwap,
1200
- Wt as wma
894
+ Ct as hanningWindow,
895
+ Tt as highPassFilter,
896
+ V as ifft,
897
+ _t as ifftComplex,
898
+ Wt as ifftFromArrays,
899
+ z as integrate,
900
+ Et as lowPassFilter,
901
+ Mn as macd,
902
+ Gt as medianFilter,
903
+ wn as momentum,
904
+ Y as movingAverage,
905
+ C as nextPowerOf2,
906
+ pn as normalize,
907
+ yn as obv,
908
+ Fn as percentChange,
909
+ kt as powerSpectrum,
910
+ An as roc,
911
+ K as rsi,
912
+ Zt as savitzkyGolay,
913
+ It as simpsonsIntegration,
914
+ lt as singleFrequencyFilter,
915
+ U as sma,
916
+ W as solveLinearSystem,
917
+ bn as standardDeviation,
918
+ In as stochastic,
919
+ X as subtractBaseline,
920
+ Vt as tTest,
921
+ qn as tema,
922
+ R as trapezoidalIntegration,
923
+ Z as validateData,
924
+ xn as vwap,
925
+ Pn as wma
1201
926
  };
1202
927
  //# sourceMappingURL=analysis.js.map