velo-plot 3.1.0 → 4.0.0-alpha.1
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-AnR_3Xkb.js → ChartCore-KYG2HTcK.js} +1349 -1213
- package/dist/ChartCore-KYG2HTcK.js.map +1 -0
- package/dist/{PluginRegistry-CzMHebYP.js → PluginRegistry-CDf_jcnp.js} +2 -2
- package/dist/{PluginRegistry-CzMHebYP.js.map → PluginRegistry-CDf_jcnp.js.map} +1 -1
- package/dist/SVGDocumentBuilder-C-uLkcFW.js +83 -0
- package/dist/SVGDocumentBuilder-C-uLkcFW.js.map +1 -0
- package/dist/angular-hooks.js +1 -1
- package/dist/angular.js +4 -4
- package/dist/{chartSyncBridge-D_rCtbFq.js → chartSyncBridge-C1uRy0ZS.js} +3 -3
- package/dist/{chartSyncBridge-D_rCtbFq.js.map → chartSyncBridge-C1uRy0ZS.js.map} +1 -1
- package/dist/core/chart/ChartCore.d.ts +7 -3
- package/dist/core/chart/ChartRenderLoop.d.ts +5 -0
- package/dist/core/chart/ChartRenderer.d.ts +9 -0
- package/dist/core/chart/ChartSetup.d.ts +1 -0
- package/dist/core/chart/exporter/SVGExporter.d.ts +9 -7
- package/dist/core/chart/exporter/svg/SVGDocumentBuilder.d.ts +27 -0
- package/dist/core/chart/exporter/svg/SVGExportContext.d.ts +147 -0
- package/dist/core/chart/exporter/svg/SVGOrchestrator.d.ts +3 -0
- package/dist/core/chart/exporter/svg/SVGThemeAdapter.d.ts +22 -0
- package/dist/core/chart/exporter/svg/__tests__/testFixtures.d.ts +46 -0
- package/dist/core/chart/exporter/svg/__tests__/visualTestUtils.d.ts +12 -0
- package/dist/core/chart/exporter/svg/overlay/axes.d.ts +4 -0
- package/dist/core/chart/exporter/svg/overlay/border.d.ts +4 -0
- package/dist/core/chart/exporter/svg/overlay/errorBars.d.ts +7 -0
- package/dist/core/chart/exporter/svg/overlay/grid.d.ts +4 -0
- package/dist/core/chart/exporter/svg/overlay/index.d.ts +12 -0
- package/dist/core/chart/exporter/svg/overlay/legend.d.ts +4 -0
- package/dist/core/chart/exporter/svg/overlay/pluginCharts.d.ts +6 -0
- package/dist/core/chart/exporter/svg/overlay/polarGrid.d.ts +4 -0
- package/dist/core/chart/exporter/svg/overlay/specialChart.d.ts +15 -0
- package/dist/core/chart/exporter/svg/overlay/title.d.ts +4 -0
- package/dist/core/chart/exporter/svg/plugins/annotations.d.ts +5 -0
- package/dist/core/chart/exporter/svg/plugins/brokenAxis.d.ts +20 -0
- package/dist/core/chart/exporter/svg/plugins/latex.d.ts +9 -0
- package/dist/core/chart/exporter/svg/plugins/register.d.ts +8 -0
- package/dist/core/chart/exporter/svg/plugins/regression.d.ts +33 -0
- package/dist/core/chart/exporter/svg/plugins/roi.d.ts +12 -0
- package/dist/core/chart/exporter/svg/plugins/tradeMarkers.d.ts +3 -0
- package/dist/core/chart/exporter/svg/plugins/types.d.ts +28 -0
- package/dist/core/chart/exporter/svg/plugins/watermark.d.ts +13 -0
- package/dist/core/chart/exporter/svg/series/band.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/bar.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/boxplot.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/candlestick.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/finitePoints.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/gauge.d.ts +5 -0
- package/dist/core/chart/exporter/svg/series/heatmap.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/indicator.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/line.d.ts +12 -0
- package/dist/core/chart/exporter/svg/series/polar.d.ts +6 -0
- package/dist/core/chart/exporter/svg/series/radar.d.ts +5 -0
- package/dist/core/chart/exporter/svg/series/registry.d.ts +10 -0
- package/dist/core/chart/exporter/svg/series/sankey.d.ts +5 -0
- package/dist/core/chart/exporter/svg/series/scatter.d.ts +1 -0
- package/dist/core/chart/exporter/svg/series/ternary.d.ts +7 -0
- package/dist/core/chart/exporter/svg/series/waterfall.d.ts +6 -0
- package/dist/core/chart/exporter/svg/seriesAtTimestamp.d.ts +4 -0
- package/dist/core/chart/exporter/svg/seriesUtils.d.ts +3 -0
- package/dist/core/chart/exporter/svg/symbols.d.ts +5 -0
- package/dist/core/chart/exporter/svg/tickUtils.d.ts +9 -0
- package/dist/core/chart/mountSVGString.d.ts +5 -0
- package/dist/core/chart/types.d.ts +2 -2
- package/dist/core/stacked/StackSVGComposer.d.ts +14 -0
- package/dist/core/stacked/index.d.ts +3 -2
- package/dist/core/stacked/types.d.ts +12 -4
- package/dist/createStackedChart-DjA3aJAu.js +2761 -0
- package/dist/createStackedChart-DjA3aJAu.js.map +1 -0
- package/dist/{hooks-DH-3bewj.js → hooks-4wQH27r9.js} +3 -3
- package/dist/{hooks-DH-3bewj.js.map → hooks-4wQH27r9.js.map} +1 -1
- package/dist/index-Bj-xyXY6.js +582 -0
- package/dist/index-Bj-xyXY6.js.map +1 -0
- package/dist/plugins/PluginManager.d.ts +5 -0
- package/dist/plugins/annotations.js +8 -7
- package/dist/plugins/annotations.js.map +1 -1
- package/dist/plugins/broken-axis.js +198 -152
- package/dist/plugins/broken-axis.js.map +1 -1
- package/dist/plugins/forecasting.js +273 -258
- package/dist/plugins/forecasting.js.map +1 -1
- package/dist/plugins/ml-integration.js +107 -93
- package/dist/plugins/ml-integration.js.map +1 -1
- package/dist/plugins/radar/types.d.ts +11 -0
- package/dist/plugins/radar.js +64 -53
- package/dist/plugins/radar.js.map +1 -1
- package/dist/plugins/roi/index.d.ts +2 -0
- package/dist/plugins/roi.js +184 -145
- package/dist/plugins/roi.js.map +1 -1
- package/dist/plugins/snapshot.js +20 -15
- package/dist/plugins/snapshot.js.map +1 -1
- package/dist/plugins/types.d.ts +4 -0
- package/dist/react.js +2 -2
- package/dist/regression-HNdyk1Dm.js +28 -0
- package/dist/regression-HNdyk1Dm.js.map +1 -0
- package/dist/renderer/ChartSeriesRenderer.d.ts +3 -2
- package/dist/renderer/SVGChartRenderer.d.ts +15 -0
- package/dist/renderer/SankeyRenderer.d.ts +1 -0
- package/dist/renderer/registerSVG.d.ts +5 -0
- package/dist/renderer/sankeyLayout.d.ts +29 -0
- package/dist/scientific.js +2 -2
- package/dist/solid.js +2 -2
- package/dist/svelte.js +2 -2
- package/dist/tickUtils-B_X-ha13.js +41 -0
- package/dist/tickUtils-B_X-ha13.js.map +1 -0
- package/dist/trading.js +3 -3
- package/dist/types.d.ts +2 -1
- package/dist/velo-plot.full.js +1107 -1292
- package/dist/velo-plot.full.js.map +1 -1
- package/dist/velo-plot.js +2 -2
- package/dist/vue/VeloPlot.vue.d.ts +1 -1
- package/dist/vue/index.d.ts +33 -33
- package/dist/vue.js +2 -2
- package/package.json +6 -1
- package/dist/ChartCore-AnR_3Xkb.js.map +0 -1
- package/dist/createStackedChart-DqcLCFGS.js +0 -1338
- package/dist/createStackedChart-DqcLCFGS.js.map +0 -1
- package/dist/index-Cv6ZDLWf.js +0 -521
- package/dist/index-Cv6ZDLWf.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { e as D } from "../regression-HNdyk1Dm.js";
|
|
2
|
+
function P(l) {
|
|
2
3
|
return Array.from(l);
|
|
3
4
|
}
|
|
4
|
-
function
|
|
5
|
-
const
|
|
5
|
+
function I(l) {
|
|
6
|
+
const i = [
|
|
6
7
|
[0.5, 0.674],
|
|
7
8
|
[0.68, 0.994],
|
|
8
9
|
[0.8, 1.282],
|
|
@@ -12,41 +13,41 @@ function D(l) {
|
|
|
12
13
|
[0.99, 2.576],
|
|
13
14
|
[0.995, 2.807]
|
|
14
15
|
];
|
|
15
|
-
let
|
|
16
|
-
for (const c of
|
|
16
|
+
let s = i[0], n = 1 / 0;
|
|
17
|
+
for (const c of i) {
|
|
17
18
|
const t = Math.abs(c[0] - l);
|
|
18
|
-
t <
|
|
19
|
+
t < n && (n = t, s = c);
|
|
19
20
|
}
|
|
20
|
-
return
|
|
21
|
+
return s[1];
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
+
function B(l, i, s, n, c = {}, t = 0.95) {
|
|
23
24
|
const r = l.length;
|
|
24
25
|
if (r === 0) throw new Error("Dataset is empty");
|
|
25
|
-
const
|
|
26
|
-
let
|
|
27
|
-
switch (
|
|
26
|
+
const o = P(i), e = P(l), a = r > 1 ? (e[r - 1] - e[0]) / (r - 1) : 1, w = e[r - 1];
|
|
27
|
+
let u;
|
|
28
|
+
switch (s) {
|
|
28
29
|
case "sma":
|
|
29
|
-
|
|
30
|
+
u = C(o, n, c.windowSize || 10);
|
|
30
31
|
break;
|
|
31
32
|
case "ema":
|
|
32
|
-
|
|
33
|
+
u = R(o, n, c.alpha ?? 0.3);
|
|
33
34
|
break;
|
|
34
35
|
case "linear":
|
|
35
|
-
|
|
36
|
+
u = j(e, o, n);
|
|
36
37
|
break;
|
|
37
38
|
case "expSmoothing":
|
|
38
|
-
|
|
39
|
+
u = Y(o, n, c.alpha ?? 0.3);
|
|
39
40
|
break;
|
|
40
41
|
case "holt":
|
|
41
|
-
|
|
42
|
+
u = F(o, n, c.alpha ?? 0.3, c.beta ?? 0.1);
|
|
42
43
|
break;
|
|
43
44
|
case "wma":
|
|
44
|
-
|
|
45
|
+
u = X(o, n, c.windowSize || 10);
|
|
45
46
|
break;
|
|
46
47
|
case "holtWinters":
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
u = H(
|
|
49
|
+
o,
|
|
50
|
+
n,
|
|
50
51
|
c.period || 12,
|
|
51
52
|
c.alpha ?? 0.3,
|
|
52
53
|
c.beta ?? 0.1,
|
|
@@ -54,363 +55,377 @@ function C(l, a, o, e, c = {}, t = 0.95) {
|
|
|
54
55
|
);
|
|
55
56
|
break;
|
|
56
57
|
case "arima":
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
u = O(
|
|
59
|
+
o,
|
|
60
|
+
n,
|
|
60
61
|
c.p ?? 1,
|
|
61
62
|
c.d ?? 1,
|
|
62
63
|
c.q ?? 0
|
|
63
64
|
);
|
|
64
65
|
break;
|
|
65
66
|
default:
|
|
66
|
-
throw new Error(`Method ${
|
|
67
|
+
throw new Error(`Method ${s} not implemented yet`);
|
|
67
68
|
}
|
|
68
|
-
const
|
|
69
|
-
for (let
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
69
|
+
const g = new Array(n);
|
|
70
|
+
for (let p = 0; p < n; p++)
|
|
71
|
+
g[p] = w + (p + 1) * a;
|
|
72
|
+
const f = K(o, u.fitted), y = I(t), h = f.rmse, { lower: v, upper: b } = W(
|
|
73
|
+
u.yValues,
|
|
73
74
|
h,
|
|
74
75
|
y,
|
|
75
|
-
|
|
76
|
+
u.accumulates
|
|
76
77
|
);
|
|
77
78
|
return {
|
|
78
|
-
xValues:
|
|
79
|
-
yValues:
|
|
79
|
+
xValues: g,
|
|
80
|
+
yValues: u.yValues,
|
|
80
81
|
lowerBound: v,
|
|
81
|
-
upperBound:
|
|
82
|
-
method:
|
|
83
|
-
metadata: { ...
|
|
82
|
+
upperBound: b,
|
|
83
|
+
method: s,
|
|
84
|
+
metadata: { ...f, confidence: t }
|
|
84
85
|
};
|
|
85
86
|
}
|
|
86
|
-
function
|
|
87
|
+
function W(l, i, s, n) {
|
|
87
88
|
const c = new Array(l.length), t = new Array(l.length);
|
|
88
89
|
for (let r = 0; r < l.length; r++) {
|
|
89
|
-
const
|
|
90
|
-
c[r] = l[r] -
|
|
90
|
+
const o = n ? Math.sqrt(r + 1) : 1, e = s * i * o;
|
|
91
|
+
c[r] = l[r] - e, t[r] = l[r] + e;
|
|
91
92
|
}
|
|
92
93
|
return { lower: c, upper: t };
|
|
93
94
|
}
|
|
94
|
-
function
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
let
|
|
98
|
-
for (let
|
|
99
|
-
const
|
|
100
|
-
|
|
95
|
+
function X(l, i, s) {
|
|
96
|
+
const n = l.length, c = Math.min(s, n), t = (e) => {
|
|
97
|
+
const a = Math.min(c, e);
|
|
98
|
+
let w = 0, u = 0;
|
|
99
|
+
for (let g = 0; g < a; g++) {
|
|
100
|
+
const f = g + 1;
|
|
101
|
+
w += l[e - a + g] * f, u += f;
|
|
101
102
|
}
|
|
102
|
-
return
|
|
103
|
-
}, r = new Array(
|
|
104
|
-
for (let
|
|
105
|
-
const
|
|
106
|
-
return { yValues: new Array(
|
|
103
|
+
return w / u;
|
|
104
|
+
}, r = new Array(n).fill(null);
|
|
105
|
+
for (let e = 1; e < n; e++) r[e] = t(e);
|
|
106
|
+
const o = t(n);
|
|
107
|
+
return { yValues: new Array(i).fill(o), fitted: r, accumulates: !1 };
|
|
107
108
|
}
|
|
108
|
-
function
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
let
|
|
112
|
-
for (let
|
|
113
|
-
return
|
|
114
|
-
}, r = new Array(
|
|
115
|
-
for (let
|
|
116
|
-
const
|
|
117
|
-
return { yValues: new Array(
|
|
109
|
+
function C(l, i, s) {
|
|
110
|
+
const n = l.length, c = Math.min(s, n), t = (e) => {
|
|
111
|
+
const a = Math.min(c, e);
|
|
112
|
+
let w = 0;
|
|
113
|
+
for (let u = e - a; u < e; u++) w += l[u];
|
|
114
|
+
return w / a;
|
|
115
|
+
}, r = new Array(n).fill(null);
|
|
116
|
+
for (let e = 1; e < n; e++) r[e] = t(e);
|
|
117
|
+
const o = t(n);
|
|
118
|
+
return { yValues: new Array(i).fill(o), fitted: r, accumulates: !1 };
|
|
118
119
|
}
|
|
119
|
-
function R(l,
|
|
120
|
-
const
|
|
120
|
+
function R(l, i, s) {
|
|
121
|
+
const n = l.length;
|
|
121
122
|
let c = l[0];
|
|
122
|
-
const t = new Array(
|
|
123
|
-
for (let r = 1; r <
|
|
124
|
-
t[r] = c, c =
|
|
125
|
-
return { yValues: new Array(
|
|
123
|
+
const t = new Array(n).fill(null);
|
|
124
|
+
for (let r = 1; r < n; r++)
|
|
125
|
+
t[r] = c, c = s * l[r] + (1 - s) * c;
|
|
126
|
+
return { yValues: new Array(i).fill(c), fitted: t, accumulates: !1 };
|
|
126
127
|
}
|
|
127
|
-
function j(l,
|
|
128
|
-
const
|
|
129
|
-
let c = 0, t = 0, r = 0,
|
|
130
|
-
for (let h = 0; h <
|
|
131
|
-
c += l[h], t +=
|
|
132
|
-
const
|
|
133
|
-
for (let h = 0; h <
|
|
134
|
-
const
|
|
135
|
-
for (let h = 0; h <
|
|
136
|
-
const v =
|
|
137
|
-
y[h] =
|
|
128
|
+
function j(l, i, s) {
|
|
129
|
+
const n = l.length;
|
|
130
|
+
let c = 0, t = 0, r = 0, o = 0;
|
|
131
|
+
for (let h = 0; h < n; h++)
|
|
132
|
+
c += l[h], t += i[h], r += l[h] * i[h], o += l[h] * l[h];
|
|
133
|
+
const e = n * o - c * c, a = e !== 0 ? (n * r - c * t) / e : 0, w = (t - a * c) / n, u = new Array(n);
|
|
134
|
+
for (let h = 0; h < n; h++) u[h] = a * l[h] + w;
|
|
135
|
+
const g = l[n - 1], f = n > 1 ? (l[n - 1] - l[0]) / (n - 1) : 1, y = new Array(s);
|
|
136
|
+
for (let h = 0; h < s; h++) {
|
|
137
|
+
const v = g + (h + 1) * f;
|
|
138
|
+
y[h] = a * v + w;
|
|
138
139
|
}
|
|
139
|
-
return { yValues: y, fitted:
|
|
140
|
+
return { yValues: y, fitted: u, accumulates: !0 };
|
|
140
141
|
}
|
|
141
|
-
function
|
|
142
|
-
const
|
|
142
|
+
function Y(l, i, s) {
|
|
143
|
+
const n = l.length;
|
|
143
144
|
let c = l[0];
|
|
144
|
-
const t = new Array(
|
|
145
|
-
for (let r = 1; r <
|
|
146
|
-
t[r] = c, c =
|
|
147
|
-
return { yValues: new Array(
|
|
145
|
+
const t = new Array(n).fill(null);
|
|
146
|
+
for (let r = 1; r < n; r++)
|
|
147
|
+
t[r] = c, c = s * l[r] + (1 - s) * c;
|
|
148
|
+
return { yValues: new Array(i).fill(c), fitted: t, accumulates: !1 };
|
|
148
149
|
}
|
|
149
|
-
function F(l,
|
|
150
|
+
function F(l, i, s, n) {
|
|
150
151
|
const c = l.length;
|
|
151
152
|
if (c < 2)
|
|
152
|
-
return { yValues: new Array(
|
|
153
|
+
return { yValues: new Array(i).fill(l[0] || 0), fitted: [], accumulates: !0 };
|
|
153
154
|
let t = l[0], r = l[1] - l[0];
|
|
154
|
-
const
|
|
155
|
-
for (let
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
t =
|
|
155
|
+
const o = new Array(c).fill(null);
|
|
156
|
+
for (let a = 1; a < c; a++) {
|
|
157
|
+
o[a] = t + r;
|
|
158
|
+
const w = t;
|
|
159
|
+
t = s * l[a] + (1 - s) * (t + r), r = n * (t - w) + (1 - n) * r;
|
|
159
160
|
}
|
|
160
|
-
const
|
|
161
|
-
for (let
|
|
162
|
-
return { yValues:
|
|
161
|
+
const e = new Array(i);
|
|
162
|
+
for (let a = 0; a < i; a++) e[a] = t + (a + 1) * r;
|
|
163
|
+
return { yValues: e, fitted: o, accumulates: !0 };
|
|
163
164
|
}
|
|
164
|
-
function
|
|
165
|
+
function H(l, i, s, n, c, t) {
|
|
165
166
|
const r = l.length;
|
|
166
|
-
if (r <
|
|
167
|
-
return F(l,
|
|
168
|
-
const
|
|
169
|
-
for (let
|
|
167
|
+
if (r < s * 2)
|
|
168
|
+
return F(l, i, n, c);
|
|
169
|
+
const o = new Array(s), e = new Array(Math.floor(r / s));
|
|
170
|
+
for (let f = 0; f < e.length; f++) {
|
|
170
171
|
let y = 0;
|
|
171
|
-
for (let h = 0; h <
|
|
172
|
-
|
|
172
|
+
for (let h = 0; h < s; h++) y += l[f * s + h];
|
|
173
|
+
e[f] = y / s;
|
|
173
174
|
}
|
|
174
|
-
for (let
|
|
175
|
+
for (let f = 0; f < s; f++) {
|
|
175
176
|
let y = 0;
|
|
176
|
-
for (let h = 0; h <
|
|
177
|
-
y += l[h *
|
|
178
|
-
|
|
177
|
+
for (let h = 0; h < e.length; h++)
|
|
178
|
+
y += l[h * s + f] - e[h];
|
|
179
|
+
o[f] = y / e.length;
|
|
179
180
|
}
|
|
180
|
-
let
|
|
181
|
-
const
|
|
182
|
-
for (let
|
|
183
|
-
const y =
|
|
184
|
-
|
|
185
|
-
const h =
|
|
186
|
-
|
|
181
|
+
let a = e[0], w = (e[e.length - 1] - e[0]) / ((e.length - 1) * s);
|
|
182
|
+
const u = new Array(r).fill(null);
|
|
183
|
+
for (let f = 0; f < r; f++) {
|
|
184
|
+
const y = o[f % s];
|
|
185
|
+
f > 0 && (u[f] = a + w + y);
|
|
186
|
+
const h = a, v = l[f];
|
|
187
|
+
a = n * (v - y) + (1 - n) * (a + w), w = c * (a - h) + (1 - c) * w, o[f % s] = t * (v - a) + (1 - t) * y;
|
|
187
188
|
}
|
|
188
|
-
const
|
|
189
|
-
for (let
|
|
190
|
-
const y =
|
|
191
|
-
|
|
189
|
+
const g = new Array(i);
|
|
190
|
+
for (let f = 0; f < i; f++) {
|
|
191
|
+
const y = f + 1;
|
|
192
|
+
g[f] = a + y * w + o[(r + f) % s];
|
|
192
193
|
}
|
|
193
|
-
return { yValues:
|
|
194
|
+
return { yValues: g, fitted: u, accumulates: !0 };
|
|
194
195
|
}
|
|
195
|
-
function
|
|
196
|
-
const t = l.length, r = Math.max(
|
|
197
|
-
if (t <
|
|
198
|
-
return F(l,
|
|
199
|
-
const
|
|
200
|
-
for (let
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
let
|
|
196
|
+
function O(l, i, s, n, c) {
|
|
197
|
+
const t = l.length, r = Math.max(s, c);
|
|
198
|
+
if (t < n + r + 2 || t < 4)
|
|
199
|
+
return F(l, i, 0.3, 0.1);
|
|
200
|
+
const o = [l.slice()];
|
|
201
|
+
for (let m = 0; m < n; m++)
|
|
202
|
+
o.push(_(o[m]));
|
|
203
|
+
const e = o[n], a = e.length, w = e.reduce((m, A) => m + A, 0) / a, u = e.map((m) => m - w);
|
|
204
|
+
let g = new Array(a).fill(0);
|
|
204
205
|
if (c > 0) {
|
|
205
|
-
const
|
|
206
|
-
|
|
206
|
+
const m = Math.min(Math.max(s + c + 2, 5), Math.floor(a / 2)), { residuals: A } = G(u, m);
|
|
207
|
+
g = A;
|
|
207
208
|
}
|
|
208
|
-
const
|
|
209
|
-
for (let
|
|
209
|
+
const f = Math.max(s, c), y = [], h = [];
|
|
210
|
+
for (let m = f; m < a; m++) {
|
|
210
211
|
const A = [];
|
|
211
|
-
for (let d = 1; d <=
|
|
212
|
-
for (let d = 1; d <= c; d++) A.push(
|
|
213
|
-
y.push(A), h.push(
|
|
212
|
+
for (let d = 1; d <= s; d++) A.push(u[m - d]);
|
|
213
|
+
for (let d = 1; d <= c; d++) A.push(g[m - d]);
|
|
214
|
+
y.push(A), h.push(u[m]);
|
|
214
215
|
}
|
|
215
216
|
let v = [];
|
|
216
|
-
if (y.length > 0 && y[0].length > 0 && (v = L(y, h)), v.length !==
|
|
217
|
-
return F(l,
|
|
218
|
-
const
|
|
219
|
-
for (let
|
|
217
|
+
if (y.length > 0 && y[0].length > 0 && (v = L(y, h)), v.length !== s + c || v.some((m) => !Number.isFinite(m)))
|
|
218
|
+
return F(l, i, 0.3, 0.1);
|
|
219
|
+
const b = v.slice(0, s), p = v.slice(s, s + c), k = new Array(t).fill(null), V = new Array(a).fill(0);
|
|
220
|
+
for (let m = f; m < a; m++) {
|
|
220
221
|
let A = 0;
|
|
221
|
-
for (let d = 1; d <=
|
|
222
|
-
for (let d = 1; d <= c; d++) A +=
|
|
223
|
-
|
|
222
|
+
for (let d = 1; d <= s; d++) A += b[d - 1] * u[m - d];
|
|
223
|
+
for (let d = 1; d <= c; d++) A += p[d - 1] * V[m - d];
|
|
224
|
+
V[m] = u[m] - A, k[m + (t - a)] = N(o, n, m, A + w);
|
|
224
225
|
}
|
|
225
|
-
const
|
|
226
|
-
for (let
|
|
226
|
+
const T = u.slice(), S = V.slice(), x = [];
|
|
227
|
+
for (let m = 0; m < i; m++) {
|
|
227
228
|
let A = 0;
|
|
228
|
-
for (let d = 1; d <=
|
|
229
|
-
A +=
|
|
229
|
+
for (let d = 1; d <= s; d++)
|
|
230
|
+
A += b[d - 1] * T[T.length - d];
|
|
230
231
|
for (let d = 1; d <= c; d++)
|
|
231
|
-
A +=
|
|
232
|
-
|
|
232
|
+
A += p[d - 1] * S[S.length - d];
|
|
233
|
+
T.push(A), S.push(0), x.push(A + w);
|
|
233
234
|
}
|
|
234
|
-
return { yValues:
|
|
235
|
+
return { yValues: $(o, n, x), fitted: k, accumulates: !0 };
|
|
235
236
|
}
|
|
236
|
-
function
|
|
237
|
-
const
|
|
238
|
-
for (let
|
|
239
|
-
return
|
|
237
|
+
function _(l) {
|
|
238
|
+
const i = new Array(l.length - 1);
|
|
239
|
+
for (let s = 1; s < l.length; s++) i[s - 1] = l[s] - l[s - 1];
|
|
240
|
+
return i;
|
|
240
241
|
}
|
|
241
|
-
function
|
|
242
|
-
let
|
|
243
|
-
for (let c =
|
|
242
|
+
function $(l, i, s) {
|
|
243
|
+
let n = s.slice();
|
|
244
|
+
for (let c = i; c >= 1; c--) {
|
|
244
245
|
const t = l[c - 1];
|
|
245
246
|
let r = t[t.length - 1];
|
|
246
|
-
const
|
|
247
|
-
for (let
|
|
248
|
-
r += e
|
|
249
|
-
|
|
247
|
+
const o = new Array(n.length);
|
|
248
|
+
for (let e = 0; e < n.length; e++)
|
|
249
|
+
r += n[e], o[e] = r;
|
|
250
|
+
n = o;
|
|
250
251
|
}
|
|
251
|
-
return
|
|
252
|
+
return n;
|
|
252
253
|
}
|
|
253
|
-
function
|
|
254
|
-
return
|
|
254
|
+
function N(l, i, s, n) {
|
|
255
|
+
return i === 0 ? n : l[i - 1][s] + n;
|
|
255
256
|
}
|
|
256
|
-
function
|
|
257
|
-
const
|
|
258
|
-
for (let
|
|
259
|
-
const
|
|
260
|
-
for (let
|
|
261
|
-
|
|
257
|
+
function G(l, i) {
|
|
258
|
+
const s = l.length, n = [], c = [];
|
|
259
|
+
for (let o = i; o < s; o++) {
|
|
260
|
+
const e = [];
|
|
261
|
+
for (let a = 1; a <= i; a++) e.push(l[o - a]);
|
|
262
|
+
n.push(e), c.push(l[o]);
|
|
262
263
|
}
|
|
263
|
-
const t =
|
|
264
|
-
for (let
|
|
265
|
-
let
|
|
266
|
-
for (let
|
|
267
|
-
r[
|
|
264
|
+
const t = n.length > 0 ? L(n, c) : new Array(i).fill(0), r = new Array(s).fill(0);
|
|
265
|
+
for (let o = i; o < s; o++) {
|
|
266
|
+
let e = 0;
|
|
267
|
+
for (let a = 1; a <= i; a++) e += (t[a - 1] || 0) * l[o - a];
|
|
268
|
+
r[o] = l[o] - e;
|
|
268
269
|
}
|
|
269
270
|
return { coeffs: t, residuals: r };
|
|
270
271
|
}
|
|
271
|
-
function L(l,
|
|
272
|
-
const
|
|
273
|
-
for (let r = 0; r <
|
|
274
|
-
for (let
|
|
275
|
-
t[
|
|
276
|
-
for (let
|
|
277
|
-
c[
|
|
272
|
+
function L(l, i) {
|
|
273
|
+
const s = l.length, n = l[0].length, c = Array.from({ length: n }, () => new Array(n).fill(0)), t = new Array(n).fill(0);
|
|
274
|
+
for (let r = 0; r < s; r++)
|
|
275
|
+
for (let o = 0; o < n; o++) {
|
|
276
|
+
t[o] += l[r][o] * i[r];
|
|
277
|
+
for (let e = 0; e < n; e++)
|
|
278
|
+
c[o][e] += l[r][o] * l[r][e];
|
|
278
279
|
}
|
|
279
|
-
for (let r = 0; r <
|
|
280
|
-
return
|
|
280
|
+
for (let r = 0; r < n; r++) c[r][r] += 1e-8;
|
|
281
|
+
return J(c, t);
|
|
281
282
|
}
|
|
282
|
-
function
|
|
283
|
-
const
|
|
284
|
-
for (let t = 0; t <
|
|
283
|
+
function J(l, i) {
|
|
284
|
+
const s = i.length, n = l.map((t, r) => [...t, i[r]]);
|
|
285
|
+
for (let t = 0; t < s; t++) {
|
|
285
286
|
let r = t;
|
|
286
|
-
for (let
|
|
287
|
-
Math.abs(
|
|
288
|
-
if (Math.abs(
|
|
289
|
-
[
|
|
290
|
-
for (let
|
|
291
|
-
if (
|
|
292
|
-
const
|
|
293
|
-
for (let
|
|
287
|
+
for (let o = t + 1; o < s; o++)
|
|
288
|
+
Math.abs(n[o][t]) > Math.abs(n[r][t]) && (r = o);
|
|
289
|
+
if (Math.abs(n[r][t]) < 1e-12) return [];
|
|
290
|
+
[n[t], n[r]] = [n[r], n[t]];
|
|
291
|
+
for (let o = 0; o < s; o++) {
|
|
292
|
+
if (o === t) continue;
|
|
293
|
+
const e = n[o][t] / n[t][t];
|
|
294
|
+
for (let a = t; a <= s; a++) n[o][a] -= e * n[t][a];
|
|
294
295
|
}
|
|
295
296
|
}
|
|
296
|
-
const c = new Array(
|
|
297
|
-
for (let t = 0; t <
|
|
297
|
+
const c = new Array(s);
|
|
298
|
+
for (let t = 0; t < s; t++) c[t] = n[t][s] / n[t][t];
|
|
298
299
|
return c;
|
|
299
300
|
}
|
|
300
|
-
function
|
|
301
|
-
if (!
|
|
301
|
+
function K(l, i) {
|
|
302
|
+
if (!i || i.length === 0)
|
|
302
303
|
return { mse: 0, rmse: 0, mae: 0, r2: 0 };
|
|
303
|
-
let
|
|
304
|
+
let s = 0, n = 0, c = 0;
|
|
304
305
|
const t = [];
|
|
305
|
-
for (let
|
|
306
|
-
const
|
|
307
|
-
if (
|
|
308
|
-
const y = l[
|
|
309
|
-
|
|
306
|
+
for (let g = 0; g < i.length && g < l.length; g++) {
|
|
307
|
+
const f = i[g];
|
|
308
|
+
if (f == null || !Number.isFinite(f)) continue;
|
|
309
|
+
const y = l[g] - f;
|
|
310
|
+
s += y * y, n += Math.abs(y), t.push(l[g]), c++;
|
|
310
311
|
}
|
|
311
312
|
if (c === 0) return { mse: 0, rmse: 0, mae: 0, r2: 0 };
|
|
312
|
-
const r =
|
|
313
|
+
const r = s / c, o = Math.sqrt(r), e = n / c, a = t.reduce((g, f) => g + f, 0) / t.length, w = t.reduce((g, f) => g + (f - a) * (f - a), 0), u = w > 0 ? 1 - s / w : 0;
|
|
313
314
|
return {
|
|
314
|
-
mse:
|
|
315
|
-
rmse:
|
|
316
|
-
mae:
|
|
317
|
-
r2:
|
|
315
|
+
mse: E(r),
|
|
316
|
+
rmse: E(o),
|
|
317
|
+
mae: E(e),
|
|
318
|
+
r2: E(u)
|
|
318
319
|
};
|
|
319
320
|
}
|
|
320
|
-
function
|
|
321
|
+
function E(l) {
|
|
321
322
|
return Math.round(l * 1e6) / 1e6;
|
|
322
323
|
}
|
|
323
|
-
const
|
|
324
|
+
const Q = {
|
|
324
325
|
name: "velo-plot-forecasting",
|
|
325
326
|
version: "1.0.0",
|
|
326
327
|
description: "Time series forecasting for velo-plot",
|
|
327
328
|
provides: ["analysis", "forecasting"],
|
|
328
329
|
tags: ["statistics", "forecasting", "analysis"]
|
|
329
330
|
};
|
|
330
|
-
function
|
|
331
|
-
let
|
|
332
|
-
const
|
|
331
|
+
function Z(l = {}) {
|
|
332
|
+
let i = null;
|
|
333
|
+
const s = /* @__PURE__ */ new Map(), n = {
|
|
333
334
|
forecast(t, r) {
|
|
334
|
-
let
|
|
335
|
+
let o, e;
|
|
335
336
|
if (typeof t == "string") {
|
|
336
|
-
if (!
|
|
337
|
-
const
|
|
338
|
-
if (!
|
|
339
|
-
const
|
|
340
|
-
|
|
337
|
+
if (!i) throw new Error("Plugin not initialized");
|
|
338
|
+
const a = i.data.getAllSeries().find((u) => u.getId() === t);
|
|
339
|
+
if (!a) throw new Error(`Series not found: ${t}`);
|
|
340
|
+
const w = a.getData();
|
|
341
|
+
o = w.x, e = w.y;
|
|
341
342
|
} else if (Array.isArray(t))
|
|
342
|
-
|
|
343
|
+
e = t, o = t.map((a, w) => w);
|
|
343
344
|
else if (t.x && t.y)
|
|
344
|
-
|
|
345
|
+
o = t.x, e = t.y;
|
|
345
346
|
else
|
|
346
347
|
throw new Error("Invalid data format for forecasting");
|
|
347
|
-
return
|
|
348
|
+
return B(o, e, r.method, r.horizon, r.params, r.confidence);
|
|
348
349
|
},
|
|
349
350
|
async forecastSeries(t, r) {
|
|
350
|
-
if (!
|
|
351
|
-
const
|
|
352
|
-
if (!
|
|
353
|
-
const
|
|
354
|
-
return this.forecast(
|
|
351
|
+
if (!i) throw new Error("Plugin not initialized");
|
|
352
|
+
const o = i.data.getAllSeries().find((a) => a.getId() === t);
|
|
353
|
+
if (!o) throw new Error(`Series not found: ${t}`);
|
|
354
|
+
const e = o.getData();
|
|
355
|
+
return this.forecast(e, r);
|
|
355
356
|
},
|
|
356
357
|
visualize(t, r = {}) {
|
|
357
|
-
const
|
|
358
|
+
const o = `forecast-${Math.random().toString(36).substr(2, 9)}`, e = {
|
|
358
359
|
showLine: !0,
|
|
359
360
|
showConfidenceInterval: !0,
|
|
360
361
|
...l.defaultVisualization,
|
|
361
362
|
...r
|
|
362
363
|
};
|
|
363
|
-
return
|
|
364
|
+
return s.set(o, { result: t, config: e }), i == null || i.requestRender(), o;
|
|
364
365
|
},
|
|
365
366
|
clear(t) {
|
|
366
|
-
t ?
|
|
367
|
+
t ? s.delete(t) : s.clear(), i == null || i.requestRender();
|
|
367
368
|
}
|
|
368
369
|
};
|
|
369
370
|
function c(t) {
|
|
370
|
-
const { render: r, coords:
|
|
371
|
-
|
|
372
|
-
var v,
|
|
373
|
-
const { result:
|
|
374
|
-
if (
|
|
375
|
-
|
|
376
|
-
const
|
|
377
|
-
|
|
378
|
-
for (let M = 0; M <
|
|
379
|
-
const
|
|
380
|
-
M === 0 ?
|
|
371
|
+
const { render: r, coords: o } = t, { ctx2d: e } = r;
|
|
372
|
+
e && s.forEach((a) => {
|
|
373
|
+
var v, b, p, k, V, T;
|
|
374
|
+
const { result: w, config: u } = a, { xValues: g, yValues: f, lowerBound: y, upperBound: h } = w;
|
|
375
|
+
if (e.save(), u.showConfidenceInterval && y && h) {
|
|
376
|
+
e.beginPath();
|
|
377
|
+
const S = ((v = u.intervalStyle) == null ? void 0 : v.opacity) ?? 0.15, x = ((b = u.intervalStyle) == null ? void 0 : b.fillColor) || ((p = u.lineStyle) == null ? void 0 : p.color) || "#3b82f6";
|
|
378
|
+
e.fillStyle = x.startsWith("rgba") ? x : x + Math.floor(S * 255).toString(16).padStart(2, "0");
|
|
379
|
+
for (let M = 0; M < g.length; M++) {
|
|
380
|
+
const m = o.dataToPixelX(g[M]), A = o.dataToPixelY(h[M]);
|
|
381
|
+
M === 0 ? e.moveTo(m, A) : e.lineTo(m, A);
|
|
381
382
|
}
|
|
382
|
-
for (let M =
|
|
383
|
-
const
|
|
384
|
-
|
|
383
|
+
for (let M = g.length - 1; M >= 0; M--) {
|
|
384
|
+
const m = o.dataToPixelX(g[M]), A = o.dataToPixelY(y[M]);
|
|
385
|
+
e.lineTo(m, A);
|
|
385
386
|
}
|
|
386
|
-
|
|
387
|
+
e.closePath(), e.fill();
|
|
387
388
|
}
|
|
388
|
-
if (
|
|
389
|
-
|
|
390
|
-
for (let
|
|
391
|
-
const
|
|
392
|
-
|
|
389
|
+
if (u.showLine) {
|
|
390
|
+
e.beginPath(), e.strokeStyle = ((k = u.lineStyle) == null ? void 0 : k.color) || "#3b82f6", e.lineWidth = ((V = u.lineStyle) == null ? void 0 : V.width) || 2, (T = u.lineStyle) != null && T.dash ? e.setLineDash(u.lineStyle.dash) : e.setLineDash([5, 5]);
|
|
391
|
+
for (let S = 0; S < g.length; S++) {
|
|
392
|
+
const x = o.dataToPixelX(g[S]), M = o.dataToPixelY(f[S]);
|
|
393
|
+
S === 0 ? e.moveTo(x, M) : e.lineTo(x, M);
|
|
393
394
|
}
|
|
394
|
-
|
|
395
|
+
e.stroke();
|
|
395
396
|
}
|
|
396
|
-
|
|
397
|
+
e.restore();
|
|
397
398
|
});
|
|
398
399
|
}
|
|
399
400
|
return {
|
|
400
|
-
manifest:
|
|
401
|
+
manifest: Q,
|
|
401
402
|
onInit(t) {
|
|
402
|
-
|
|
403
|
+
i = t;
|
|
403
404
|
},
|
|
404
405
|
onRenderOverlay(t, r) {
|
|
405
406
|
c(t);
|
|
406
407
|
},
|
|
407
|
-
|
|
408
|
+
onExportSVG(t) {
|
|
409
|
+
var r;
|
|
410
|
+
!t.builder || ((r = t.exportContext) == null ? void 0 : r.options.includeOverlays) === !1 || s.forEach(({ result: o, config: e }) => {
|
|
411
|
+
var v;
|
|
412
|
+
const { xValues: a, yValues: w, lowerBound: u, upperBound: g } = o, f = a.length, y = [];
|
|
413
|
+
for (let b = 0; b < f; b++)
|
|
414
|
+
y.push({ x: a[b], y: w[b] });
|
|
415
|
+
const h = e.showConfidenceInterval && u && g ? {
|
|
416
|
+
upper: Array.from({ length: f }, (b, p) => ({ x: a[p], y: g[p] })),
|
|
417
|
+
lower: Array.from({ length: f }, (b, p) => ({ x: a[p], y: u[p] }))
|
|
418
|
+
} : void 0;
|
|
419
|
+
D(t, y, h, ((v = e.lineStyle) == null ? void 0 : v.color) ?? "#3b82f6");
|
|
420
|
+
});
|
|
421
|
+
},
|
|
422
|
+
api: n
|
|
408
423
|
};
|
|
409
424
|
}
|
|
410
425
|
export {
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
426
|
+
Z as PluginForecasting,
|
|
427
|
+
B as calculateForecast,
|
|
428
|
+
J as gaussianSolve,
|
|
429
|
+
Q as manifestForecasting
|
|
415
430
|
};
|
|
416
431
|
//# sourceMappingURL=forecasting.js.map
|