velo-plot 3.0.0 → 3.1.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/README.md +22 -15
- package/dist/ChartCore-AnR_3Xkb.js +7338 -0
- package/dist/ChartCore-AnR_3Xkb.js.map +1 -0
- package/dist/GpuChartRenderer-Dxc0hrQA.js +75 -0
- package/dist/GpuChartRenderer-Dxc0hrQA.js.map +1 -0
- package/dist/{index.core-BmZe2jRQ.js → PluginRegistry-CzMHebYP.js} +19 -33
- package/dist/PluginRegistry-CzMHebYP.js.map +1 -0
- package/dist/angular-hooks.js +1 -1
- package/dist/angular.js +8 -8
- package/dist/{axisFormat-CzumxpCL.js → axisFormat-Sz4WIJfQ.js} +2 -2
- package/dist/{axisFormat-CzumxpCL.js.map → axisFormat-Sz4WIJfQ.js.map} +1 -1
- package/dist/{chartSyncBridge-DbWrwtyP.js → chartSyncBridge-D_rCtbFq.js} +12 -11
- package/dist/{chartSyncBridge-DbWrwtyP.js.map → chartSyncBridge-D_rCtbFq.js.map} +1 -1
- package/dist/core/ChartStatistics.d.ts +1 -1
- package/dist/core/chart/ChartCore.d.ts +12 -17
- package/dist/core/chart/ChartFeatureHooks.d.ts +7 -0
- package/dist/core/chart/chartExportPatch.d.ts +2 -0
- package/dist/core/chart/overlaySeriesRegistry.d.ts +7 -0
- package/dist/core/chart/series/SeriesActions.d.ts +1 -0
- package/dist/core/chart/series/SeriesBufferLite.d.ts +13 -0
- package/dist/core/chart/series/seriesOptionsRegistry.d.ts +8 -0
- package/dist/core/chart/series/seriesTypeRegistry.d.ts +5 -0
- package/dist/createStackedChart-DqcLCFGS.js +1338 -0
- package/dist/createStackedChart-DqcLCFGS.js.map +1 -0
- package/dist/{hooks-CYPCxoZx.js → hooks-DH-3bewj.js} +7 -7
- package/dist/{hooks-CYPCxoZx.js.map → hooks-DH-3bewj.js.map} +1 -1
- package/dist/{index-qunX30Xu.js → index-B7PTX94B.js} +2133 -2133
- package/dist/index-B7PTX94B.js.map +1 -0
- package/dist/{index-BMiZoKmm.js → index-BgrvqltV.js} +67 -67
- package/dist/index-BgrvqltV.js.map +1 -0
- package/dist/index-Cv6ZDLWf.js +521 -0
- package/dist/index-Cv6ZDLWf.js.map +1 -0
- package/dist/index-qhscKTDy.js.map +1 -1
- package/dist/index.core.d.ts +8 -6
- package/dist/index.d.ts +1 -14
- package/dist/plugins/3d.js +3 -1
- package/dist/plugins/3d.js.map +1 -1
- package/dist/plugins/analysis.js.map +1 -1
- package/dist/plugins/createPlugin.d.ts +8 -0
- package/dist/plugins/debug.js +32 -32
- package/dist/plugins/debug.js.map +1 -1
- package/dist/plugins/gpu.js +2033 -209
- package/dist/plugins/gpu.js.map +1 -1
- package/dist/plugins/i18n.js +286 -23
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/latex.js +766 -207
- package/dist/plugins/latex.js.map +1 -1
- package/dist/plugins/loading/index.d.ts +1 -2
- package/dist/plugins/loading.js +3 -4
- package/dist/plugins/offscreen.js +11 -10
- package/dist/plugins/offscreen.js.map +1 -1
- package/dist/plugins/regression.js +254 -256
- package/dist/plugins/regression.js.map +1 -1
- package/dist/plugins/streaming.js +1 -1
- package/dist/plugins/tools.js +1 -1
- package/dist/react.js +55 -58
- package/dist/react.js.map +1 -1
- package/dist/renderer/NativeWebGLRenderer.d.ts +2 -1
- package/dist/renderer/native/NativeWebGLRenderer.d.ts +5 -1
- package/dist/renderer/native/draw.d.ts +2 -47
- package/dist/renderer/native/drawCore.d.ts +27 -0
- package/dist/renderer/native/drawExtended.d.ts +29 -0
- package/dist/renderer/native/frameRenderExtended.d.ts +1 -0
- package/dist/renderer/native/frameRenderRegistry.d.ts +27 -0
- package/dist/renderer/native/programFactoryCore.d.ts +6 -0
- package/dist/renderer/native/programFactoryExtended.d.ts +4 -0
- package/dist/renderer/native/utils.d.ts +3 -29
- package/dist/renderer/native/utilsCore.d.ts +14 -0
- package/dist/renderer/native/utilsExtended.d.ts +17 -0
- package/dist/renderer/overlaySeriesExtended.d.ts +1 -0
- package/dist/renderer/registerExtendedSeries.d.ts +1 -0
- package/dist/renderer/registerWebGPU.d.ts +2 -0
- package/dist/renderer/seriesBufferExtended.d.ts +4 -0
- package/dist/scientific/index.d.ts +1 -5
- package/dist/scientific/registerScientific.d.ts +1 -0
- package/dist/scientific.js +41 -41
- package/dist/solid.js +56 -59
- package/dist/solid.js.map +1 -1
- package/dist/svelte.js +26 -29
- package/dist/svelte.js.map +1 -1
- package/dist/trading/index.d.ts +1 -4
- package/dist/trading/registerTrading.d.ts +3 -0
- package/dist/trading.js +42 -42
- package/dist/types.d.ts +3 -3
- package/dist/velo-plot.full.js +2212 -1351
- package/dist/velo-plot.full.js.map +1 -1
- package/dist/velo-plot.js +33 -28
- package/dist/velo-plot.js.map +1 -1
- package/dist/vue/index.d.ts +2 -2
- package/dist/vue.js +17 -20
- package/dist/vue.js.map +1 -1
- package/package.json +9 -1
- package/dist/ChartCore-BpzRvN4Y.js +0 -8467
- package/dist/ChartCore-BpzRvN4Y.js.map +0 -1
- package/dist/createStackedChart-Dm-YqUT7.js +0 -756
- package/dist/createStackedChart-Dm-YqUT7.js.map +0 -1
- package/dist/gpuRenderer-BpaMYz-k.js +0 -1848
- package/dist/gpuRenderer-BpaMYz-k.js.map +0 -1
- package/dist/index-BMiZoKmm.js.map +0 -1
- package/dist/index-qunX30Xu.js.map +0 -1
- package/dist/index-x4stH3jD.js +0 -282
- package/dist/index-x4stH3jD.js.map +0 -1
- package/dist/index.core-BmZe2jRQ.js.map +0 -1
- package/dist/mockDatafeed-DHIDPcpX.js +0 -515
- package/dist/mockDatafeed-DHIDPcpX.js.map +0 -1
- package/dist/symbols-DT0eLlpW.js +0 -568
- package/dist/symbols-DT0eLlpW.js.map +0 -1
|
@@ -1,200 +1,198 @@
|
|
|
1
1
|
import { s as P } from "../math-Ddm2EZjj.js";
|
|
2
|
-
function T(
|
|
3
|
-
return Array.from(
|
|
2
|
+
function T(u) {
|
|
3
|
+
return Array.from(u);
|
|
4
4
|
}
|
|
5
|
-
function v(
|
|
6
|
-
return new Float32Array(
|
|
5
|
+
function v(u) {
|
|
6
|
+
return new Float32Array(u);
|
|
7
7
|
}
|
|
8
|
-
function _(
|
|
9
|
-
return
|
|
8
|
+
function _(u) {
|
|
9
|
+
return u.reduce((h, i) => h + i, 0) / u.length;
|
|
10
10
|
}
|
|
11
|
-
function z(
|
|
12
|
-
const h = _(
|
|
13
|
-
return
|
|
11
|
+
function z(u) {
|
|
12
|
+
const h = _(u);
|
|
13
|
+
return u.reduce((i, l) => i + Math.pow(l - h, 2), 0) / u.length;
|
|
14
14
|
}
|
|
15
|
-
function O(
|
|
16
|
-
const i = _(
|
|
17
|
-
let
|
|
18
|
-
for (let
|
|
19
|
-
|
|
20
|
-
return 1 -
|
|
15
|
+
function O(u, h) {
|
|
16
|
+
const i = _(u);
|
|
17
|
+
let l = 0, c = 0;
|
|
18
|
+
for (let m = 0; m < u.length; m++)
|
|
19
|
+
l += Math.pow(u[m] - h[m], 2), c += Math.pow(u[m] - i, 2);
|
|
20
|
+
return 1 - l / c;
|
|
21
21
|
}
|
|
22
|
-
function C(
|
|
23
|
-
return 1 - (1 -
|
|
22
|
+
function C(u, h, i) {
|
|
23
|
+
return 1 - (1 - u) * (h - 1) / (h - i - 1);
|
|
24
24
|
}
|
|
25
|
-
function E(
|
|
25
|
+
function E(u, h) {
|
|
26
26
|
let i = 0;
|
|
27
|
-
for (let
|
|
28
|
-
i += Math.pow(
|
|
29
|
-
return Math.sqrt(i /
|
|
27
|
+
for (let l = 0; l < u.length; l++)
|
|
28
|
+
i += Math.pow(u[l] - h[l], 2);
|
|
29
|
+
return Math.sqrt(i / u.length);
|
|
30
30
|
}
|
|
31
|
-
function V(
|
|
32
|
-
const i = performance.now(),
|
|
33
|
-
if (
|
|
31
|
+
function V(u, h = {}) {
|
|
32
|
+
const i = performance.now(), l = T(u.x), c = T(u.y), m = u.weights ? T(u.weights) : null, { forceOrigin: S = !1 } = h, f = l.length;
|
|
33
|
+
if (S) {
|
|
34
34
|
let w = 0, p = 0;
|
|
35
|
-
for (let t = 0; t <
|
|
36
|
-
const e =
|
|
37
|
-
w += e *
|
|
35
|
+
for (let t = 0; t < f; t++) {
|
|
36
|
+
const e = m ? m[t] : 1;
|
|
37
|
+
w += e * l[t] * c[t], p += e * l[t] * l[t];
|
|
38
38
|
}
|
|
39
|
-
const R = w / p, $ =
|
|
39
|
+
const R = w / p, $ = l.map((t) => R * t), y = c.map((t, e) => t - $[e]), x = O(c, $), q = C(x, f, 1), M = E(c, $);
|
|
40
40
|
return {
|
|
41
41
|
method: "linear",
|
|
42
42
|
parameters: {
|
|
43
43
|
parameters: [R],
|
|
44
|
-
uncertainties: [Math.sqrt(p / (
|
|
44
|
+
uncertainties: [Math.sqrt(p / (f * w))],
|
|
45
45
|
// Simplified
|
|
46
46
|
correlationMatrix: [[1]]
|
|
47
47
|
},
|
|
48
48
|
statistics: {
|
|
49
|
-
rSquared:
|
|
49
|
+
rSquared: x,
|
|
50
50
|
adjustedRSquared: q,
|
|
51
|
-
rmse:
|
|
52
|
-
rss:
|
|
53
|
-
tss:
|
|
54
|
-
n:
|
|
51
|
+
rmse: M,
|
|
52
|
+
rss: y.reduce((t, e) => t + e * e, 0),
|
|
53
|
+
tss: c.reduce((t, e) => t + Math.pow(e - _(c), 2), 0),
|
|
54
|
+
n: f,
|
|
55
55
|
k: 1
|
|
56
56
|
},
|
|
57
57
|
fittedValues: v($),
|
|
58
|
-
residuals: v(
|
|
59
|
-
goodnessOfFit:
|
|
58
|
+
residuals: v(y),
|
|
59
|
+
goodnessOfFit: x > 0.9 ? "excellent" : x > 0.7 ? "good" : x > 0.5 ? "fair" : "poor",
|
|
60
60
|
converged: !0,
|
|
61
61
|
iterations: 1,
|
|
62
62
|
processingTime: performance.now() - i
|
|
63
63
|
};
|
|
64
64
|
} else {
|
|
65
|
-
let w = 0, p = 0, R = 0, $ = 0,
|
|
66
|
-
for (let
|
|
67
|
-
const
|
|
68
|
-
w +=
|
|
65
|
+
let w = 0, p = 0, R = 0, $ = 0, y = 0;
|
|
66
|
+
for (let r = 0; r < f; r++) {
|
|
67
|
+
const d = m ? m[r] : 1;
|
|
68
|
+
w += d * l[r], p += d * c[r], R += d * l[r] * c[r], $ += d * l[r] * l[r], y += d;
|
|
69
69
|
}
|
|
70
|
-
const
|
|
70
|
+
const x = w / y, q = p / y, M = (R - y * x * q) / ($ - y * x * x), t = q - M * x, e = l.map((r) => M * r + t), s = c.map((r, d) => r - e[d]), o = O(c, e), n = C(o, f, 2), a = E(c, e);
|
|
71
71
|
return {
|
|
72
72
|
method: "linear",
|
|
73
73
|
parameters: {
|
|
74
|
-
parameters: [
|
|
74
|
+
parameters: [M, t],
|
|
75
75
|
uncertainties: [0.1, 0.1],
|
|
76
76
|
// Simplified
|
|
77
77
|
correlationMatrix: [[1, -0.5], [-0.5, 1]]
|
|
78
78
|
// Simplified
|
|
79
79
|
},
|
|
80
80
|
statistics: {
|
|
81
|
-
rSquared:
|
|
81
|
+
rSquared: o,
|
|
82
82
|
adjustedRSquared: n,
|
|
83
83
|
rmse: a,
|
|
84
|
-
rss:
|
|
85
|
-
tss:
|
|
86
|
-
n:
|
|
84
|
+
rss: s.reduce((r, d) => r + d * d, 0),
|
|
85
|
+
tss: c.reduce((r, d) => r + Math.pow(d - q, 2), 0),
|
|
86
|
+
n: f,
|
|
87
87
|
k: 2
|
|
88
88
|
},
|
|
89
|
-
fittedValues: v(
|
|
90
|
-
residuals: v(
|
|
91
|
-
goodnessOfFit:
|
|
89
|
+
fittedValues: v(e),
|
|
90
|
+
residuals: v(s),
|
|
91
|
+
goodnessOfFit: o > 0.9 ? "excellent" : o > 0.7 ? "good" : o > 0.5 ? "fair" : "poor",
|
|
92
92
|
converged: !0,
|
|
93
93
|
iterations: 1,
|
|
94
94
|
processingTime: performance.now() - i
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
function U(
|
|
99
|
-
const i = performance.now(),
|
|
100
|
-
for (let
|
|
98
|
+
function U(u, h) {
|
|
99
|
+
const i = performance.now(), l = T(u.x), c = T(u.y), { degree: m } = h, S = l.length, f = m + 1, w = [];
|
|
100
|
+
for (let M = 0; M < S; M++) {
|
|
101
101
|
const t = [];
|
|
102
|
-
for (let e = 0; e <=
|
|
103
|
-
t.push(Math.pow(
|
|
102
|
+
for (let e = 0; e <= m; e++)
|
|
103
|
+
t.push(Math.pow(l[M], e));
|
|
104
104
|
w.push(t);
|
|
105
105
|
}
|
|
106
|
-
const p =
|
|
106
|
+
const p = L(w, c, 0), R = l.map((M) => {
|
|
107
107
|
let t = 0;
|
|
108
|
-
for (let e = 0; e <=
|
|
109
|
-
t += p[e] * Math.pow(
|
|
108
|
+
for (let e = 0; e <= m; e++)
|
|
109
|
+
t += p[e] * Math.pow(M, e);
|
|
110
110
|
return t;
|
|
111
|
-
}), $ =
|
|
111
|
+
}), $ = c.map((M, t) => M - R[t]), y = O(c, R), x = C(y, S, f), q = E(c, R);
|
|
112
112
|
return {
|
|
113
113
|
method: "polynomial",
|
|
114
114
|
parameters: {
|
|
115
115
|
parameters: p,
|
|
116
|
-
uncertainties: new Array(
|
|
116
|
+
uncertainties: new Array(f).fill(0.1),
|
|
117
117
|
// Simplified
|
|
118
|
-
correlationMatrix: Array(
|
|
118
|
+
correlationMatrix: Array(f).fill(0).map(() => Array(f).fill(0))
|
|
119
119
|
// Simplified
|
|
120
120
|
},
|
|
121
121
|
statistics: {
|
|
122
|
-
rSquared:
|
|
123
|
-
adjustedRSquared:
|
|
122
|
+
rSquared: y,
|
|
123
|
+
adjustedRSquared: x,
|
|
124
124
|
rmse: q,
|
|
125
|
-
rss: $.reduce((
|
|
126
|
-
tss:
|
|
127
|
-
n:
|
|
128
|
-
k:
|
|
125
|
+
rss: $.reduce((M, t) => M + t * t, 0),
|
|
126
|
+
tss: c.reduce((M, t) => M + Math.pow(t - _(c), 2), 0),
|
|
127
|
+
n: S,
|
|
128
|
+
k: f
|
|
129
129
|
},
|
|
130
130
|
fittedValues: v(R),
|
|
131
131
|
residuals: v($),
|
|
132
|
-
goodnessOfFit:
|
|
132
|
+
goodnessOfFit: y > 0.9 ? "excellent" : y > 0.7 ? "good" : y > 0.5 ? "fair" : "poor",
|
|
133
133
|
converged: !0,
|
|
134
134
|
iterations: 10,
|
|
135
135
|
// Simplified
|
|
136
136
|
processingTime: performance.now() - i
|
|
137
137
|
};
|
|
138
138
|
}
|
|
139
|
-
function N(
|
|
140
|
-
const i = performance.now(),
|
|
141
|
-
|
|
142
|
-
const M = l.map((t) => {
|
|
143
|
-
const e = t - g;
|
|
139
|
+
function N(u, h = {}) {
|
|
140
|
+
const i = performance.now(), l = T(u.x), c = T(u.y), m = Math.min(...c) - 1, S = c.map((t) => {
|
|
141
|
+
const e = t - m;
|
|
144
142
|
return e > 0 ? Math.log(e) : 0;
|
|
145
|
-
}),
|
|
146
|
-
{ x:
|
|
143
|
+
}), f = V(
|
|
144
|
+
{ x: l, y: S },
|
|
147
145
|
{ forceOrigin: !1 }
|
|
148
|
-
), [w, p] =
|
|
146
|
+
), [w, p] = f.parameters.parameters, R = Math.exp(p), $ = l.map((t) => R * Math.exp(w * t) + m), y = c.map((t, e) => t - $[e]), x = O(c, $), q = C(x, l.length, 3), M = E(c, $);
|
|
149
147
|
return {
|
|
150
148
|
method: "exponential",
|
|
151
149
|
parameters: {
|
|
152
|
-
parameters: [R, w,
|
|
150
|
+
parameters: [R, w, m],
|
|
153
151
|
uncertainties: [0.1, 0.01, 0.1],
|
|
154
152
|
// Simplified
|
|
155
153
|
correlationMatrix: [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]]
|
|
156
154
|
// Simplified
|
|
157
155
|
},
|
|
158
156
|
statistics: {
|
|
159
|
-
rSquared:
|
|
157
|
+
rSquared: x,
|
|
160
158
|
adjustedRSquared: q,
|
|
161
|
-
rmse:
|
|
162
|
-
rss:
|
|
163
|
-
tss:
|
|
164
|
-
n:
|
|
159
|
+
rmse: M,
|
|
160
|
+
rss: y.reduce((t, e) => t + e * e, 0),
|
|
161
|
+
tss: c.reduce((t, e) => t + Math.pow(e - _(c), 2), 0),
|
|
162
|
+
n: l.length,
|
|
165
163
|
k: 3
|
|
166
164
|
},
|
|
167
165
|
fittedValues: v($),
|
|
168
|
-
residuals: v(
|
|
169
|
-
goodnessOfFit:
|
|
166
|
+
residuals: v(y),
|
|
167
|
+
goodnessOfFit: x > 0.9 ? "excellent" : x > 0.7 ? "good" : x > 0.5 ? "fair" : "poor",
|
|
170
168
|
converged: !0,
|
|
171
169
|
iterations: 5,
|
|
172
170
|
// Simplified
|
|
173
171
|
processingTime: performance.now() - i
|
|
174
172
|
};
|
|
175
173
|
}
|
|
176
|
-
function X(
|
|
177
|
-
const i = performance.now(),
|
|
178
|
-
let
|
|
174
|
+
function X(u, h = {}) {
|
|
175
|
+
const i = performance.now(), l = T(u.x), c = T(u.y);
|
|
176
|
+
let m = Math.max(...c), S = l.reduce((e, s) => e + s, 0) / l.length, f = Math.sqrt(z(l)), w = Math.min(...c);
|
|
179
177
|
const p = 1e-3, R = 100, $ = 1e-6;
|
|
180
178
|
for (let e = 0; e < R; e++) {
|
|
181
|
-
let s = 0, o = 0,
|
|
182
|
-
for (let
|
|
183
|
-
const
|
|
184
|
-
|
|
179
|
+
let s = 0, o = 0, n = 0, a = 0, r = 0;
|
|
180
|
+
for (let d = 0; d < l.length; d++) {
|
|
181
|
+
const g = l[d], A = c[d], b = -Math.pow(g - S, 2) / (2 * f * f), j = m * Math.exp(b) + w, F = A - j;
|
|
182
|
+
r += F * F;
|
|
185
183
|
const k = Math.exp(b);
|
|
186
|
-
s += F * k, o += F *
|
|
184
|
+
s += F * k, o += F * m * k * (g - S) / (f * f), n += F * m * k * Math.pow(g - S, 2) / Math.pow(f, 3), a += F;
|
|
187
185
|
}
|
|
188
|
-
if (
|
|
186
|
+
if (m += p * s, S += p * o, f += p * n, w += p * a, f = Math.max(f, 0.01), r < $) break;
|
|
189
187
|
}
|
|
190
|
-
const
|
|
191
|
-
const s = -Math.pow(e -
|
|
192
|
-
return
|
|
193
|
-
}),
|
|
188
|
+
const y = l.map((e) => {
|
|
189
|
+
const s = -Math.pow(e - S, 2) / (2 * f * f);
|
|
190
|
+
return m * Math.exp(s) + w;
|
|
191
|
+
}), x = c.map((e, s) => e - y[s]), q = O(c, y), M = C(q, l.length, 4), t = E(c, y);
|
|
194
192
|
return {
|
|
195
193
|
method: "gaussian",
|
|
196
194
|
parameters: {
|
|
197
|
-
parameters: [
|
|
195
|
+
parameters: [m, S, f, w],
|
|
198
196
|
uncertainties: [0.1, 0.1, 0.01, 0.1],
|
|
199
197
|
// Simplified
|
|
200
198
|
correlationMatrix: Array(4).fill(0).map(() => Array(4).fill(0))
|
|
@@ -202,35 +200,35 @@ function X(f, h = {}) {
|
|
|
202
200
|
},
|
|
203
201
|
statistics: {
|
|
204
202
|
rSquared: q,
|
|
205
|
-
adjustedRSquared:
|
|
203
|
+
adjustedRSquared: M,
|
|
206
204
|
rmse: t,
|
|
207
|
-
rss:
|
|
208
|
-
tss:
|
|
209
|
-
n:
|
|
205
|
+
rss: x.reduce((e, s) => e + s * s, 0),
|
|
206
|
+
tss: c.reduce((e, s) => e + Math.pow(s - _(c), 2), 0),
|
|
207
|
+
n: l.length,
|
|
210
208
|
k: 4
|
|
211
209
|
},
|
|
212
|
-
fittedValues: v(
|
|
213
|
-
residuals: v(
|
|
210
|
+
fittedValues: v(y),
|
|
211
|
+
residuals: v(x),
|
|
214
212
|
goodnessOfFit: q > 0.9 ? "excellent" : q > 0.7 ? "good" : q > 0.5 ? "fair" : "poor",
|
|
215
213
|
converged: !0,
|
|
216
214
|
iterations: R,
|
|
217
215
|
processingTime: performance.now() - i
|
|
218
216
|
};
|
|
219
217
|
}
|
|
220
|
-
function
|
|
221
|
-
const
|
|
222
|
-
for (let
|
|
223
|
-
for (let w = 0; w <
|
|
224
|
-
for (let p = 0; p <
|
|
225
|
-
|
|
226
|
-
|
|
218
|
+
function L(u, h, i = 0) {
|
|
219
|
+
const l = u.length, c = u[0].length, m = Array(c).fill(0).map(() => Array(c).fill(0)), S = Array(c).fill(0);
|
|
220
|
+
for (let f = 0; f < l; f++)
|
|
221
|
+
for (let w = 0; w < c; w++) {
|
|
222
|
+
for (let p = 0; p < c; p++)
|
|
223
|
+
m[w][p] += u[f][w] * u[f][p];
|
|
224
|
+
S[w] += u[f][w] * h[f];
|
|
227
225
|
}
|
|
228
226
|
if (i > 0)
|
|
229
|
-
for (let
|
|
230
|
-
|
|
231
|
-
return P(
|
|
227
|
+
for (let f = 0; f < c; f++)
|
|
228
|
+
m[f][f] += i;
|
|
229
|
+
return P(m, S);
|
|
232
230
|
}
|
|
233
|
-
const
|
|
231
|
+
const Y = {
|
|
234
232
|
name: "regression",
|
|
235
233
|
version: "1.0.0",
|
|
236
234
|
description: "Advanced scientific regression and curve fitting",
|
|
@@ -249,87 +247,87 @@ const L = {
|
|
|
249
247
|
enableParallelProcessing: !1,
|
|
250
248
|
parallelChunkSize: 1e3
|
|
251
249
|
};
|
|
252
|
-
function B(
|
|
253
|
-
const h = { ...J, ...
|
|
250
|
+
function B(u = {}) {
|
|
251
|
+
const h = { ...J, ...u };
|
|
254
252
|
let i = null;
|
|
255
|
-
const
|
|
256
|
-
async function
|
|
253
|
+
const l = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set(), m = /* @__PURE__ */ new Map();
|
|
254
|
+
async function S(t, e, s = h.defaultMethod, o = {}) {
|
|
257
255
|
try {
|
|
258
256
|
p.hideVisualization(t);
|
|
259
|
-
let
|
|
257
|
+
let n;
|
|
260
258
|
switch (s) {
|
|
261
259
|
case "linear":
|
|
262
|
-
|
|
260
|
+
n = V(e, o);
|
|
263
261
|
break;
|
|
264
262
|
case "polynomial":
|
|
265
|
-
|
|
263
|
+
n = U(e, o);
|
|
266
264
|
break;
|
|
267
265
|
case "exponential":
|
|
268
|
-
|
|
266
|
+
n = N(e, o);
|
|
269
267
|
break;
|
|
270
268
|
case "gaussian":
|
|
271
|
-
|
|
269
|
+
n = X(e, o);
|
|
272
270
|
break;
|
|
273
271
|
case "logarithmic":
|
|
274
|
-
const
|
|
275
|
-
|
|
272
|
+
const a = Array.from(e.x).map((g) => Math.log(g));
|
|
273
|
+
n = V({ ...e, x: new Float32Array(a) }, o), n.method = "logarithmic";
|
|
276
274
|
break;
|
|
277
275
|
case "power":
|
|
278
|
-
const
|
|
279
|
-
|
|
276
|
+
const r = Array.from(e.y).map((g) => Math.log(g)), d = Array.from(e.x).map((g) => Math.log(g));
|
|
277
|
+
n = V({ ...e, x: new Float32Array(d), y: new Float32Array(r) }, o), n.method = "power";
|
|
280
278
|
break;
|
|
281
279
|
case "lorentzian":
|
|
282
280
|
case "sigmoid":
|
|
283
281
|
case "custom":
|
|
284
|
-
|
|
282
|
+
n = V(e, o);
|
|
285
283
|
break;
|
|
286
284
|
default:
|
|
287
285
|
throw new Error(`Unsupported regression method: ${s}`);
|
|
288
286
|
}
|
|
289
|
-
return
|
|
290
|
-
result:
|
|
287
|
+
return l.set(t, [n]), i && i.events.emit("regression:completed", {
|
|
288
|
+
result: n,
|
|
291
289
|
seriesId: t,
|
|
292
290
|
method: s,
|
|
293
291
|
timestamp: Date.now()
|
|
294
|
-
}), i == null || i.log.info(`Regression completed for ${t}: ${s} (R² = ${
|
|
295
|
-
} catch (
|
|
292
|
+
}), i == null || i.log.info(`Regression completed for ${t}: ${s} (R² = ${n.statistics.rSquared.toFixed(3)})`), n;
|
|
293
|
+
} catch (n) {
|
|
296
294
|
throw i && i.events.emit("regression:failed", {
|
|
297
|
-
error:
|
|
295
|
+
error: n,
|
|
298
296
|
seriesId: t,
|
|
299
297
|
method: s,
|
|
300
|
-
reason: `Fitting failed: ${
|
|
298
|
+
reason: `Fitting failed: ${n}`,
|
|
301
299
|
timestamp: Date.now()
|
|
302
|
-
}),
|
|
300
|
+
}), n;
|
|
303
301
|
}
|
|
304
302
|
}
|
|
305
|
-
async function
|
|
306
|
-
const
|
|
307
|
-
for (let
|
|
308
|
-
const
|
|
303
|
+
async function f(t, e, s, o) {
|
|
304
|
+
const n = [];
|
|
305
|
+
for (let r = 0; r < s.length; r++) {
|
|
306
|
+
const d = s[r], g = o ? o[r] : {};
|
|
309
307
|
try {
|
|
310
|
-
const A = await
|
|
311
|
-
|
|
308
|
+
const A = await S(t, e, d, g);
|
|
309
|
+
n.push(A);
|
|
312
310
|
} catch (A) {
|
|
313
|
-
i == null || i.log.warn(`Regression failed for ${
|
|
311
|
+
i == null || i.log.warn(`Regression failed for ${d}: ${A}`);
|
|
314
312
|
}
|
|
315
313
|
}
|
|
316
|
-
const
|
|
317
|
-
return
|
|
318
|
-
switch (
|
|
314
|
+
const a = h.modelSelectionCriteria;
|
|
315
|
+
return n.sort((r, d) => {
|
|
316
|
+
switch (a) {
|
|
319
317
|
case "aic":
|
|
320
|
-
return (
|
|
318
|
+
return (r.statistics.aic || 0) - (d.statistics.aic || 0);
|
|
321
319
|
case "bic":
|
|
322
|
-
return (
|
|
320
|
+
return (r.statistics.bic || 0) - (d.statistics.bic || 0);
|
|
323
321
|
case "adjusted-r2":
|
|
324
|
-
return
|
|
322
|
+
return d.statistics.adjustedRSquared - r.statistics.adjustedRSquared;
|
|
325
323
|
default:
|
|
326
|
-
return
|
|
324
|
+
return d.statistics.rSquared - r.statistics.rSquared;
|
|
327
325
|
}
|
|
328
|
-
}),
|
|
326
|
+
}), n;
|
|
329
327
|
}
|
|
330
328
|
async function w(t, e, s = ["linear", "polynomial", "exponential", "gaussian"]) {
|
|
331
|
-
const o = s.map((
|
|
332
|
-
switch (
|
|
329
|
+
const o = s.map((r) => {
|
|
330
|
+
switch (r) {
|
|
333
331
|
case "polynomial":
|
|
334
332
|
return { degree: 2 };
|
|
335
333
|
case "exponential":
|
|
@@ -339,122 +337,122 @@ function B(f = {}) {
|
|
|
339
337
|
default:
|
|
340
338
|
return {};
|
|
341
339
|
}
|
|
342
|
-
}),
|
|
343
|
-
if (
|
|
340
|
+
}), n = await f(t, e, s, o);
|
|
341
|
+
if (n.length === 0)
|
|
344
342
|
throw new Error("No regression methods succeeded");
|
|
345
|
-
const
|
|
343
|
+
const a = n[0];
|
|
346
344
|
return i && i.events.emit("model:selected", {
|
|
347
|
-
selectedMethod:
|
|
348
|
-
candidateResults:
|
|
345
|
+
selectedMethod: a.method,
|
|
346
|
+
candidateResults: n,
|
|
349
347
|
selectionCriteria: h.modelSelectionCriteria,
|
|
350
348
|
seriesId: t,
|
|
351
349
|
timestamp: Date.now()
|
|
352
|
-
}), i == null || i.log.info(`Auto-fit selected ${
|
|
350
|
+
}), i == null || i.log.info(`Auto-fit selected ${a.method} for ${t} (R² = ${a.statistics.rSquared.toFixed(3)})`), a;
|
|
353
351
|
}
|
|
354
352
|
const p = {
|
|
355
|
-
fit:
|
|
356
|
-
fitAndCompare:
|
|
353
|
+
fit: S,
|
|
354
|
+
fitAndCompare: f,
|
|
357
355
|
autoFit: w,
|
|
358
356
|
getResults(t) {
|
|
359
|
-
return
|
|
357
|
+
return l.get(t) || [];
|
|
360
358
|
},
|
|
361
359
|
clearResults(t) {
|
|
362
|
-
|
|
360
|
+
l.delete(t), i == null || i.log.info(`Regression results cleared for series: ${t}`);
|
|
363
361
|
},
|
|
364
362
|
predict(t, e, s = 0) {
|
|
365
|
-
const o =
|
|
363
|
+
const o = l.get(t);
|
|
366
364
|
if (!o || o.length === 0)
|
|
367
365
|
throw new Error(`No regression results found for series: ${t}`);
|
|
368
|
-
const
|
|
369
|
-
switch (
|
|
366
|
+
const n = o[Math.min(s, o.length - 1)], a = Array.from(e), r = n.parameters.parameters, d = a.map((g) => {
|
|
367
|
+
switch (n.method) {
|
|
370
368
|
case "linear":
|
|
371
|
-
return
|
|
369
|
+
return r[0] * g + (r[1] || 0);
|
|
372
370
|
case "polynomial":
|
|
373
371
|
let A = 0;
|
|
374
|
-
for (let j = 0; j <
|
|
375
|
-
A +=
|
|
372
|
+
for (let j = 0; j < r.length; j++)
|
|
373
|
+
A += r[j] * Math.pow(g, j);
|
|
376
374
|
return A;
|
|
377
375
|
case "exponential":
|
|
378
|
-
return
|
|
376
|
+
return r[0] * Math.exp(r[1] * g) + (r[2] || 0);
|
|
379
377
|
case "gaussian":
|
|
380
|
-
const b = -Math.pow(
|
|
381
|
-
return
|
|
378
|
+
const b = -Math.pow(g - r[1], 2) / (2 * r[2] * r[2]);
|
|
379
|
+
return r[0] * Math.exp(b) + (r[3] || 0);
|
|
382
380
|
case "logarithmic":
|
|
383
|
-
return
|
|
381
|
+
return r[0] * Math.log(g) + (r[1] || 0);
|
|
384
382
|
case "power":
|
|
385
|
-
return
|
|
383
|
+
return r[0] * Math.pow(g, r[1]);
|
|
386
384
|
default:
|
|
387
385
|
return 0;
|
|
388
386
|
}
|
|
389
387
|
});
|
|
390
|
-
return new Float32Array(
|
|
388
|
+
return new Float32Array(d);
|
|
391
389
|
},
|
|
392
390
|
getConfidenceIntervals(t, e, s = h.defaultConfidenceLevel, o = 0) {
|
|
393
|
-
const
|
|
391
|
+
const n = this.predict(t, e, o), a = 0.1, r = n.map((g) => g - a), d = n.map((g) => g + a);
|
|
394
392
|
return {
|
|
395
|
-
lower: new Float32Array(
|
|
396
|
-
upper: new Float32Array(
|
|
393
|
+
lower: new Float32Array(r),
|
|
394
|
+
upper: new Float32Array(d)
|
|
397
395
|
};
|
|
398
396
|
},
|
|
399
397
|
evaluate(t, e, s = 0) {
|
|
400
|
-
const o =
|
|
398
|
+
const o = l.get(t);
|
|
401
399
|
if (!o || o.length === 0)
|
|
402
400
|
throw new Error(`No regression results found for series: ${t}`);
|
|
403
|
-
const
|
|
401
|
+
const n = o[Math.min(s, o.length - 1)], a = Array.from(e.x), r = Array.from(e.y), d = p.predict(t, a, s), g = Array.from(d), A = $(r, g), b = y(A, r.length, n.parameters.parameters.length), j = x(r, g);
|
|
404
402
|
return {
|
|
405
403
|
rSquared: A,
|
|
406
404
|
adjustedRSquared: b,
|
|
407
405
|
rmse: j,
|
|
408
|
-
rss:
|
|
409
|
-
tss:
|
|
410
|
-
n:
|
|
411
|
-
k:
|
|
406
|
+
rss: r.reduce((F, k, D) => F + Math.pow(k - g[D], 2), 0),
|
|
407
|
+
tss: r.reduce((F, k) => F + Math.pow(k - R(r), 2), 0),
|
|
408
|
+
n: r.length,
|
|
409
|
+
k: n.parameters.parameters.length
|
|
412
410
|
};
|
|
413
411
|
},
|
|
414
412
|
enableRealtimeFitting(t, e = h.defaultMethod, s = {}) {
|
|
415
|
-
|
|
413
|
+
c.add(t);
|
|
416
414
|
const o = i == null ? void 0 : i.chart;
|
|
417
415
|
if (o) {
|
|
418
|
-
const
|
|
419
|
-
if (
|
|
420
|
-
const
|
|
421
|
-
|
|
422
|
-
x:
|
|
423
|
-
y:
|
|
416
|
+
const n = o.getSeries(t);
|
|
417
|
+
if (n) {
|
|
418
|
+
const a = n.getData();
|
|
419
|
+
a && a.x.length > 0 && S(t, {
|
|
420
|
+
x: a.x,
|
|
421
|
+
y: a.y
|
|
424
422
|
}, e, s);
|
|
425
423
|
}
|
|
426
424
|
}
|
|
427
425
|
i == null || i.log.info(`Real-time regression fitting enabled for series: ${t}`);
|
|
428
426
|
},
|
|
429
427
|
disableRealtimeFitting(t) {
|
|
430
|
-
|
|
431
|
-
const e =
|
|
432
|
-
e && (clearTimeout(e),
|
|
428
|
+
c.delete(t);
|
|
429
|
+
const e = m.get(t);
|
|
430
|
+
e && (clearTimeout(e), m.delete(t)), i == null || i.log.info(`Real-time regression fitting disabled for series: ${t}`);
|
|
433
431
|
},
|
|
434
432
|
getStatistics(t) {
|
|
435
433
|
if (t) {
|
|
436
|
-
const e =
|
|
434
|
+
const e = l.get(t) || [], s = {};
|
|
437
435
|
for (const o of e)
|
|
438
436
|
s[o.method] = (s[o.method] || 0) + 1;
|
|
439
437
|
return {
|
|
440
438
|
totalFittings: e.length,
|
|
441
439
|
methodsUsed: s,
|
|
442
|
-
averageRSquared: e.length > 0 ? e.reduce((o,
|
|
443
|
-
averageProcessingTime: e.length > 0 ? e.reduce((o,
|
|
440
|
+
averageRSquared: e.length > 0 ? e.reduce((o, n) => o + n.statistics.rSquared, 0) / e.length : 0,
|
|
441
|
+
averageProcessingTime: e.length > 0 ? e.reduce((o, n) => o + n.processingTime, 0) / e.length : 0
|
|
444
442
|
};
|
|
445
443
|
} else {
|
|
446
444
|
let e = 0;
|
|
447
|
-
const s = {}, o = [],
|
|
448
|
-
for (const
|
|
449
|
-
e +=
|
|
450
|
-
for (const
|
|
451
|
-
s[
|
|
445
|
+
const s = {}, o = [], n = [];
|
|
446
|
+
for (const a of l.values()) {
|
|
447
|
+
e += a.length, o.push(...a.map((r) => r.statistics.rSquared)), n.push(...a.map((r) => r.processingTime));
|
|
448
|
+
for (const r of a)
|
|
449
|
+
s[r.method] = (s[r.method] || 0) + 1;
|
|
452
450
|
}
|
|
453
451
|
return {
|
|
454
452
|
totalFittings: e,
|
|
455
453
|
methodsUsed: s,
|
|
456
|
-
averageRSquared: o.length > 0 ? o.reduce((
|
|
457
|
-
averageProcessingTime:
|
|
454
|
+
averageRSquared: o.length > 0 ? o.reduce((a, r) => a + r, 0) / o.length : 0,
|
|
455
|
+
averageProcessingTime: n.length > 0 ? n.reduce((a, r) => a + r, 0) / n.length : 0
|
|
458
456
|
};
|
|
459
457
|
}
|
|
460
458
|
},
|
|
@@ -465,20 +463,20 @@ function B(f = {}) {
|
|
|
465
463
|
visualizeFit(t, e = 0) {
|
|
466
464
|
const s = i == null ? void 0 : i.chart;
|
|
467
465
|
if (!s) return;
|
|
468
|
-
const o =
|
|
466
|
+
const o = l.get(t);
|
|
469
467
|
if (!o || o.length === 0) return;
|
|
470
|
-
const
|
|
471
|
-
if (!n) return;
|
|
472
|
-
const a = n.getData();
|
|
468
|
+
const n = o[Math.min(e, o.length - 1)], a = s.getSeries(t);
|
|
473
469
|
if (!a) return;
|
|
470
|
+
const r = a.getData();
|
|
471
|
+
if (!r) return;
|
|
474
472
|
this.hideVisualization(t);
|
|
475
|
-
const
|
|
473
|
+
const d = `${t}_fit_${n.method}`, g = p.predict(t, r.x, e);
|
|
476
474
|
s.addSeries({
|
|
477
|
-
id:
|
|
475
|
+
id: d,
|
|
478
476
|
type: "line",
|
|
479
477
|
data: {
|
|
480
|
-
x: new Float32Array(Array.from(
|
|
481
|
-
y: new Float32Array(
|
|
478
|
+
x: new Float32Array(Array.from(r.x)),
|
|
479
|
+
y: new Float32Array(g)
|
|
482
480
|
},
|
|
483
481
|
style: {
|
|
484
482
|
color: "#ff6b6b",
|
|
@@ -487,13 +485,13 @@ function B(f = {}) {
|
|
|
487
485
|
lineDash: [5, 5]
|
|
488
486
|
}
|
|
489
487
|
});
|
|
490
|
-
const A = q(
|
|
488
|
+
const A = q(n), b = `${t}_equation_${n.method}`;
|
|
491
489
|
s.addAnnotation({
|
|
492
490
|
id: b,
|
|
493
491
|
type: "text",
|
|
494
|
-
text: `${
|
|
495
|
-
x:
|
|
496
|
-
y: Math.max(...Array.from(
|
|
492
|
+
text: `${n.method.toUpperCase()}: ${A}\\nR² = ${n.statistics.rSquared.toFixed(3)}`,
|
|
493
|
+
x: r.x[0],
|
|
494
|
+
y: Math.max(...Array.from(g)),
|
|
497
495
|
style: {
|
|
498
496
|
color: "#ff6b6b",
|
|
499
497
|
fontSize: 12,
|
|
@@ -516,35 +514,35 @@ function B(f = {}) {
|
|
|
516
514
|
"custom"
|
|
517
515
|
];
|
|
518
516
|
for (const o of s) {
|
|
519
|
-
const
|
|
520
|
-
e.getSeries(
|
|
521
|
-
const
|
|
522
|
-
e.getAnnotation(
|
|
517
|
+
const n = `${t}_fit_${o}`;
|
|
518
|
+
e.getSeries(n) && e.removeSeries(n);
|
|
519
|
+
const a = `${t}_equation_${o}`;
|
|
520
|
+
e.getAnnotation(a) && e.removeAnnotation(a);
|
|
523
521
|
}
|
|
524
522
|
},
|
|
525
523
|
exportResults(t, e = "json") {
|
|
526
|
-
const s =
|
|
524
|
+
const s = l.get(t) || [];
|
|
527
525
|
switch (e) {
|
|
528
526
|
case "json":
|
|
529
527
|
return JSON.stringify(s, null, 2);
|
|
530
528
|
case "csv":
|
|
531
529
|
let o = `Method,R²,RMSE,Parameters,ProcessingTime
|
|
532
530
|
`;
|
|
533
|
-
for (const
|
|
534
|
-
o += `${
|
|
531
|
+
for (const a of s)
|
|
532
|
+
o += `${a.method},${a.statistics.rSquared},${a.statistics.rmse},"${a.parameters.parameters.join(", ")}",${a.processingTime}
|
|
535
533
|
`;
|
|
536
534
|
return o;
|
|
537
535
|
case "matlab":
|
|
538
|
-
let
|
|
536
|
+
let n = `% Regression results for ${t}
|
|
539
537
|
`;
|
|
540
|
-
for (let
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
`,
|
|
544
|
-
`,
|
|
538
|
+
for (let a = 0; a < s.length; a++) {
|
|
539
|
+
const r = s[a];
|
|
540
|
+
n += `result${a + 1}.method = '${r.method}';
|
|
541
|
+
`, n += `result${a + 1}.rSquared = ${r.statistics.rSquared};
|
|
542
|
+
`, n += `result${a + 1}.parameters = [${r.parameters.parameters.join(", ")}];
|
|
545
543
|
`;
|
|
546
544
|
}
|
|
547
|
-
return
|
|
545
|
+
return n;
|
|
548
546
|
default:
|
|
549
547
|
return JSON.stringify(s, null, 2);
|
|
550
548
|
}
|
|
@@ -555,15 +553,15 @@ function B(f = {}) {
|
|
|
555
553
|
}
|
|
556
554
|
function $(t, e) {
|
|
557
555
|
const s = R(t);
|
|
558
|
-
let o = 0,
|
|
559
|
-
for (let
|
|
560
|
-
o += Math.pow(t[
|
|
561
|
-
return 1 - o /
|
|
556
|
+
let o = 0, n = 0;
|
|
557
|
+
for (let a = 0; a < t.length; a++)
|
|
558
|
+
o += Math.pow(t[a] - e[a], 2), n += Math.pow(t[a] - s, 2);
|
|
559
|
+
return 1 - o / n;
|
|
562
560
|
}
|
|
563
|
-
function
|
|
561
|
+
function y(t, e, s) {
|
|
564
562
|
return 1 - (1 - t) * (e - 1) / (e - s - 1);
|
|
565
563
|
}
|
|
566
|
-
function
|
|
564
|
+
function x(t, e) {
|
|
567
565
|
let s = 0;
|
|
568
566
|
for (let o = 0; o < t.length; o++)
|
|
569
567
|
s += Math.pow(t[o] - e[o], 2);
|
|
@@ -576,10 +574,10 @@ function B(f = {}) {
|
|
|
576
574
|
case "linear":
|
|
577
575
|
return e.length === 1 ? `y = ${e[0].toFixed(3)}x` : `y = ${e[0].toFixed(3)}x + ${e[1].toFixed(3)}`;
|
|
578
576
|
case "polynomial":
|
|
579
|
-
let
|
|
580
|
-
for (let
|
|
581
|
-
e[
|
|
582
|
-
return
|
|
577
|
+
let n = "y = ";
|
|
578
|
+
for (let a = e.length - 1; a >= 0; a--)
|
|
579
|
+
e[a] !== 0 && (a === 0 ? n += e[a].toFixed(3) : a === 1 ? n += `${e[a].toFixed(3)}x + ` : n += `${e[a].toFixed(3)}x^${a} + `);
|
|
580
|
+
return n.replace(" + ", "").trim();
|
|
583
581
|
case "exponential":
|
|
584
582
|
return `y = ${e[0].toFixed(3)} * exp(${e[1].toFixed(3)}x) + ${((s = e[2]) == null ? void 0 : s.toFixed(3)) || 0}`;
|
|
585
583
|
case "gaussian":
|
|
@@ -588,29 +586,29 @@ function B(f = {}) {
|
|
|
588
586
|
return "y = f(x, parameters)";
|
|
589
587
|
}
|
|
590
588
|
}
|
|
591
|
-
function
|
|
589
|
+
function M(t, e) {
|
|
592
590
|
const { seriesId: s } = e;
|
|
593
|
-
if (
|
|
594
|
-
const o =
|
|
591
|
+
if (c.has(s)) {
|
|
592
|
+
const o = m.get(s);
|
|
595
593
|
o && clearTimeout(o);
|
|
596
|
-
const
|
|
597
|
-
const
|
|
598
|
-
if (
|
|
599
|
-
const
|
|
600
|
-
if (
|
|
601
|
-
const
|
|
602
|
-
|
|
603
|
-
x:
|
|
604
|
-
y:
|
|
594
|
+
const n = setTimeout(() => {
|
|
595
|
+
const a = t.chart;
|
|
596
|
+
if (a) {
|
|
597
|
+
const r = a.getSeries(s);
|
|
598
|
+
if (r) {
|
|
599
|
+
const d = r.getData();
|
|
600
|
+
d && d.x.length > 0 && (S(s, {
|
|
601
|
+
x: d.x,
|
|
602
|
+
y: d.y
|
|
605
603
|
}), p.visualizeFit(s));
|
|
606
604
|
}
|
|
607
605
|
}
|
|
608
606
|
}, 500);
|
|
609
|
-
|
|
607
|
+
m.set(s, n);
|
|
610
608
|
}
|
|
611
609
|
}
|
|
612
610
|
return {
|
|
613
|
-
manifest:
|
|
611
|
+
manifest: Y,
|
|
614
612
|
onInit(t) {
|
|
615
613
|
i = t, i.log.info("Regression plugin initialized");
|
|
616
614
|
},
|
|
@@ -618,11 +616,11 @@ function B(f = {}) {
|
|
|
618
616
|
},
|
|
619
617
|
onBeforeRender(t, e) {
|
|
620
618
|
},
|
|
621
|
-
onDataUpdate:
|
|
619
|
+
onDataUpdate: M,
|
|
622
620
|
onDestroy(t) {
|
|
623
|
-
for (const e of
|
|
621
|
+
for (const e of m.values())
|
|
624
622
|
clearTimeout(e);
|
|
625
|
-
|
|
623
|
+
m.clear(), l.clear(), c.clear();
|
|
626
624
|
},
|
|
627
625
|
api: p
|
|
628
626
|
};
|