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