velo-plot 2.0.0 → 3.0.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 +15 -8
- package/dist/{ChartCore-BhQ4j7f5.js → ChartCore-BpzRvN4Y.js} +998 -855
- package/dist/ChartCore-BpzRvN4Y.js.map +1 -0
- package/dist/a11y-Bw6urYpr.js +105 -0
- package/dist/a11y-Bw6urYpr.js.map +1 -0
- package/dist/angular/hooks-entry.d.ts +1 -0
- package/dist/angular/hooks.d.ts +26 -0
- package/dist/angular/index.d.ts +8 -0
- package/dist/angular/velo-plot.component.d.ts +46 -0
- package/dist/angular-hooks.d.ts +1 -0
- package/dist/angular-hooks.js +9 -0
- package/dist/angular-hooks.js.map +1 -0
- package/dist/angular.d.ts +1 -0
- package/dist/angular.js +166 -0
- package/dist/angular.js.map +1 -0
- package/dist/assets/indicator.worker-bv0zC4EX.js.map +1 -1
- package/dist/astro/StackedPlot.astro +19 -0
- package/dist/astro/VeloPlot.astro +23 -0
- package/dist/{axisFormat-SPX-CD5s.js → axisFormat-CzumxpCL.js} +3 -3
- package/dist/axisFormat-CzumxpCL.js.map +1 -0
- package/dist/bindings/shared/a11y.d.ts +26 -0
- package/dist/bindings/shared/chartLifecycle.d.ts +16 -0
- package/dist/bindings/shared/chartSyncBridge.d.ts +8 -0
- package/dist/bindings/shared/dimensions.d.ts +1 -0
- package/dist/bindings/shared/index.d.ts +9 -0
- package/dist/bindings/shared/indicatorBridge.d.ts +11 -0
- package/dist/bindings/shared/optionsSync.d.ts +7 -0
- package/dist/bindings/shared/seriesDiff.d.ts +8 -0
- package/dist/bindings/shared/stackedSync.d.ts +9 -0
- package/dist/bindings/shared/types.d.ts +46 -0
- package/dist/bindings/test-utils/index.d.ts +35 -0
- package/dist/bindings/test-utils/mockLifecycle.d.ts +120 -0
- package/dist/bindings/test-utils/vitestSveltePlugin.d.ts +3 -0
- package/dist/chartSyncBridge-DbWrwtyP.js +57 -0
- package/dist/chartSyncBridge-DbWrwtyP.js.map +1 -0
- package/dist/core/Chart.d.ts +1 -1
- package/dist/core/InteractionManager.d.ts +7 -1
- package/dist/core/OverlayRenderer.d.ts +5 -0
- package/dist/core/annotations/types.d.ts +1 -1
- package/dist/core/chart/ChartAxisManager.d.ts +2 -0
- package/dist/core/chart/ChartCore.d.ts +17 -2
- package/dist/core/chart/ChartPluginBridge.d.ts +1 -0
- package/dist/core/chart/ChartRenderLoop.d.ts +2 -0
- package/dist/core/chart/ChartStateManager.d.ts +2 -0
- package/dist/core/chart/types.d.ts +6 -1
- package/dist/core/clipboard/index.d.ts +1 -1
- package/dist/core/debug/index.d.ts +1 -1
- package/dist/core/keybindings/index.d.ts +1 -1
- package/dist/core/loading/index.d.ts +1 -1
- package/dist/core/locale/index.d.ts +1 -1
- package/dist/core/stacked/paneResize.d.ts +3 -0
- package/dist/core/stacked/types.d.ts +10 -0
- package/dist/core/sync/index.d.ts +0 -1
- package/dist/core/theme-editor/index.d.ts +1 -1
- package/dist/createStackedChart-Dm-YqUT7.js +756 -0
- package/dist/createStackedChart-Dm-YqUT7.js.map +1 -0
- package/dist/examples/PluginDemonstration.d.ts +1 -1
- package/dist/gpuRenderer-BpaMYz-k.js.map +1 -1
- package/dist/hooks-CYPCxoZx.js +69 -0
- package/dist/hooks-CYPCxoZx.js.map +1 -0
- package/dist/{index-D7dTq6VB.js → index-0InEyj0q.js} +130 -134
- package/dist/index-0InEyj0q.js.map +1 -0
- package/dist/index-BMiZoKmm.js.map +1 -1
- package/dist/{index-DoYxf1cV.js → index-CWxIHdwX.js} +38 -98
- package/dist/index-CWxIHdwX.js.map +1 -0
- package/dist/{index-CUGS98p4.js → index-CaXWSOTk.js} +3 -6
- package/dist/index-CaXWSOTk.js.map +1 -0
- package/dist/index-Dag88bW4.js.map +1 -1
- package/dist/index-qhscKTDy.js.map +1 -1
- package/dist/{index-CWipqOLP.js → index-qunX30Xu.js} +2 -2
- package/dist/index-qunX30Xu.js.map +1 -0
- package/dist/index-x4stH3jD.js.map +1 -1
- package/dist/{index.core-fpZ1dYN0.js → index.core-BmZe2jRQ.js} +30 -29
- package/dist/index.core-BmZe2jRQ.js.map +1 -0
- package/dist/index.core.d.ts +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/indicators--eJGmVox.js.map +1 -1
- package/dist/{mockDatafeed-Cdg5hKEo.js → mockDatafeed-DHIDPcpX.js} +150 -146
- package/dist/mockDatafeed-DHIDPcpX.js.map +1 -0
- package/dist/optionsSync-QUiN4Inw.js +119 -0
- package/dist/optionsSync-QUiN4Inw.js.map +1 -0
- package/dist/plugins/3d/index.d.ts +2 -2
- package/dist/plugins/3d.d.ts +2 -2
- package/dist/plugins/3d.js.map +1 -1
- package/dist/plugins/analysis/contours.d.ts +31 -0
- package/dist/plugins/analysis/index.d.ts +1 -1
- package/dist/plugins/analysis/indicators.d.ts +1 -1
- package/dist/plugins/analysis.d.ts +2 -2
- package/dist/plugins/analysis.js +495 -408
- package/dist/plugins/analysis.js.map +1 -1
- package/dist/plugins/annotations/index.d.ts +1 -1
- package/dist/plugins/annotations.d.ts +2 -2
- package/dist/plugins/annotations.js.map +1 -1
- package/dist/plugins/anomaly-detection.js +1 -1
- package/dist/plugins/anomaly-detection.js.map +1 -1
- package/dist/plugins/broken-axis.d.ts +2 -2
- package/dist/plugins/broken-axis.js +170 -181
- package/dist/plugins/broken-axis.js.map +1 -1
- package/dist/plugins/builtins/crosshair/CrosshairPlugin.d.ts +1 -1
- package/dist/plugins/builtins/index.d.ts +1 -1
- package/dist/plugins/caching.d.ts +2 -2
- package/dist/plugins/clipboard/index.d.ts +2 -2
- package/dist/plugins/clipboard.d.ts +2 -2
- package/dist/plugins/clipboard.js.map +1 -1
- package/dist/plugins/context-menu/index.d.ts +1 -1
- package/dist/plugins/context-menu.d.ts +2 -2
- package/dist/plugins/context-menu.js +1 -1
- package/dist/plugins/context-menu.js.map +1 -1
- package/dist/plugins/data-export/index.d.ts +1 -1
- package/dist/plugins/data-export.d.ts +2 -2
- package/dist/plugins/data-export.js +2 -2
- package/dist/plugins/data-export.js.map +1 -1
- package/dist/plugins/data-transform.d.ts +2 -2
- package/dist/plugins/data-transform.js +19 -19
- package/dist/plugins/data-transform.js.map +1 -1
- package/dist/plugins/debug/index.d.ts +2 -2
- package/dist/plugins/debug.d.ts +2 -2
- package/dist/plugins/debug.js +2 -2
- package/dist/plugins/debug.js.map +1 -1
- package/dist/plugins/forecasting/algorithms.d.ts +7 -2
- package/dist/plugins/forecasting/index.d.ts +1 -1
- package/dist/plugins/forecasting/types.d.ts +13 -3
- package/dist/plugins/forecasting.js +355 -175
- package/dist/plugins/forecasting.js.map +1 -1
- package/dist/plugins/gpu/index.d.ts +2 -2
- package/dist/plugins/gpu.d.ts +2 -2
- package/dist/plugins/gpu.js.map +1 -1
- package/dist/plugins/i18n/index.d.ts +2 -2
- package/dist/plugins/i18n.d.ts +2 -2
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/index.d.ts +1 -1
- package/dist/plugins/keyboard.d.ts +2 -2
- package/dist/plugins/keyboard.js +65 -5
- package/dist/plugins/keyboard.js.map +1 -1
- package/dist/plugins/latex/symbols.d.ts +50 -0
- package/dist/plugins/latex/types.d.ts +13 -1
- package/dist/plugins/latex.js +351 -331
- package/dist/plugins/latex.js.map +1 -1
- package/dist/plugins/lazy-load.d.ts +2 -2
- package/dist/plugins/loading/index.d.ts +1 -1
- package/dist/plugins/loading.d.ts +2 -2
- package/dist/plugins/ml-integration/native-algorithms.d.ts +24 -4
- package/dist/plugins/ml-integration/types.d.ts +19 -0
- package/dist/plugins/ml-integration.d.ts +2 -2
- package/dist/plugins/ml-integration.js +190 -139
- package/dist/plugins/ml-integration.js.map +1 -1
- package/dist/plugins/offscreen.d.ts +2 -2
- package/dist/plugins/pattern-recognition/types.d.ts +28 -1
- package/dist/plugins/pattern-recognition.d.ts +2 -2
- package/dist/plugins/pattern-recognition.js +417 -344
- package/dist/plugins/pattern-recognition.js.map +1 -1
- package/dist/plugins/radar.d.ts +2 -2
- package/dist/plugins/regression.d.ts +2 -2
- package/dist/plugins/regression.js +1 -1
- package/dist/plugins/regression.js.map +1 -1
- package/dist/plugins/roi.js +9 -9
- package/dist/plugins/roi.js.map +1 -1
- package/dist/plugins/snapshot/index.d.ts +1 -1
- package/dist/plugins/snapshot/types.d.ts +1 -1
- package/dist/plugins/snapshot.d.ts +2 -2
- package/dist/plugins/snapshot.js +36 -36
- package/dist/plugins/snapshot.js.map +1 -1
- package/dist/plugins/streaming/index.d.ts +2 -2
- package/dist/plugins/streaming.d.ts +2 -2
- package/dist/plugins/sync/index.d.ts +3 -2
- package/dist/plugins/sync.d.ts +2 -2
- package/dist/plugins/sync.js +1 -1
- package/dist/plugins/sync.js.map +1 -1
- package/dist/plugins/theme-editor/index.d.ts +1 -1
- package/dist/plugins/theme-editor.d.ts +2 -2
- package/dist/plugins/tools/index.d.ts +1 -1
- package/dist/plugins/tools/tooltip/index.d.ts +1 -1
- package/dist/plugins/tools.d.ts +2 -2
- package/dist/plugins/tools.js +1 -1
- package/dist/plugins/types.d.ts +1 -1
- package/dist/plugins/video-recorder.d.ts +2 -2
- package/dist/plugins/virtualization.d.ts +2 -2
- package/dist/plugins/virtualization.js +1 -1
- package/dist/pool-DZ8shSqv.js +109 -0
- package/dist/pool-DZ8shSqv.js.map +1 -0
- package/dist/react/StackedPlot.d.ts +31 -0
- package/dist/react/VeloPlot.d.ts +29 -0
- package/dist/react/index.d.ts +25 -3
- package/dist/react/useChartSync.d.ts +8 -0
- package/dist/react/useIndicator.d.ts +12 -0
- package/dist/react/useVeloPlot.d.ts +19 -0
- package/dist/react.js +328 -24
- package/dist/react.js.map +1 -1
- package/dist/scientific/index.d.ts +48 -0
- package/dist/scientific.d.ts +1 -0
- package/dist/scientific.js +91 -0
- package/dist/scientific.js.map +1 -0
- package/dist/solid/VeloPlot.d.ts +16 -0
- package/dist/solid/index.d.ts +13 -0
- package/dist/solid/useChartSync.d.ts +6 -0
- package/dist/solid/useIndicator.d.ts +11 -0
- package/dist/solid/useStackedPlot.d.ts +14 -0
- package/dist/solid/useVeloPlot.d.ts +18 -0
- package/dist/solid.d.ts +1 -0
- package/dist/solid.js +172 -0
- package/dist/solid.js.map +1 -0
- package/dist/stackedSync-tnrunZMt.js +100 -0
- package/dist/stackedSync-tnrunZMt.js.map +1 -0
- package/dist/svelte/StackedPlot.svelte +29 -0
- package/dist/svelte/StackedPlot.test.ts +114 -0
- package/dist/svelte/VeloPlot.svelte +44 -0
- package/dist/svelte/VeloPlot.test.ts +105 -0
- package/dist/svelte/index.d.ts +11 -0
- package/dist/svelte/index.test.ts +20 -0
- package/dist/svelte/index.ts +15 -0
- package/dist/svelte/useChartSync.d.ts +8 -0
- package/dist/svelte/useChartSync.test.ts +49 -0
- package/dist/svelte/useChartSync.ts +29 -0
- package/dist/svelte/useIndicator.d.ts +13 -0
- package/dist/svelte/useIndicator.test.ts +67 -0
- package/dist/svelte/useIndicator.ts +43 -0
- package/dist/svelte/useStackedPlot.d.ts +16 -0
- package/dist/svelte/useStackedPlot.test.ts +76 -0
- package/dist/svelte/useStackedPlot.ts +54 -0
- package/dist/svelte/useVeloPlot.d.ts +21 -0
- package/dist/svelte/useVeloPlot.test.ts +100 -0
- package/dist/svelte/useVeloPlot.ts +81 -0
- package/dist/svelte.d.ts +1 -0
- package/dist/svelte.js +143 -0
- package/dist/svelte.js.map +1 -0
- package/dist/symbols-DT0eLlpW.js +568 -0
- package/dist/symbols-DT0eLlpW.js.map +1 -0
- package/dist/testing/index.d.ts +1 -1
- package/dist/theme/index.d.ts +2 -1
- package/dist/trading.js +7 -7
- package/dist/types.d.ts +1 -1
- package/dist/{utils-BK5UUXxj.js → utils-Dx0h0bgQ.js} +9 -9
- package/dist/{utils-BK5UUXxj.js.map → utils-Dx0h0bgQ.js.map} +1 -1
- package/dist/velo-plot.full.js +444 -433
- package/dist/velo-plot.full.js.map +1 -1
- package/dist/velo-plot.js +15 -15
- package/dist/vue/StackedPlot.vue.d.ts +48 -0
- package/dist/vue/VeloPlot.vue.d.ts +64 -0
- package/dist/vue/index.d.ts +250 -0
- package/dist/vue/useChartSync.d.ts +52 -0
- package/dist/vue/useIndicator.d.ts +23 -0
- package/dist/vue/useStackedPlot.d.ts +15 -0
- package/dist/vue/useVeloPlot.d.ts +20 -0
- package/dist/vue.d.ts +1 -0
- package/dist/vue.js +312 -0
- package/dist/vue.js.map +1 -0
- package/dist/workers/indicatorsAsync.d.ts +26 -0
- package/dist/workers/pool.d.ts +9 -0
- package/package.json +88 -10
- package/dist/ChartCore-BhQ4j7f5.js.map +0 -1
- package/dist/SciPlot-GJvw7GJo.js +0 -463
- package/dist/SciPlot-GJvw7GJo.js.map +0 -1
- package/dist/axisFormat-SPX-CD5s.js.map +0 -1
- package/dist/createStackedChart-DJSmqerD.js +0 -706
- package/dist/createStackedChart-DJSmqerD.js.map +0 -1
- package/dist/index-CUGS98p4.js.map +0 -1
- package/dist/index-CWipqOLP.js.map +0 -1
- package/dist/index-D7dTq6VB.js.map +0 -1
- package/dist/index-DoYxf1cV.js.map +0 -1
- package/dist/index.core-fpZ1dYN0.js.map +0 -1
- package/dist/mockDatafeed-Cdg5hKEo.js.map +0 -1
- package/dist/pool-15HMCNv8.js +0 -88
- package/dist/pool-15HMCNv8.js.map +0 -1
- package/dist/react/SciPlot.d.ts +0 -60
- package/dist/react/useSciPlot.d.ts +0 -56
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var h = (i, t, n) =>
|
|
4
|
-
class
|
|
1
|
+
var k = Object.defineProperty;
|
|
2
|
+
var q = (i, t, n) => t in i ? k(i, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : i[t] = n;
|
|
3
|
+
var h = (i, t, n) => q(i, typeof t != "symbol" ? t + "" : t, n);
|
|
4
|
+
class x {
|
|
5
5
|
constructor(t) {
|
|
6
6
|
h(this, "network");
|
|
7
7
|
h(this, "config");
|
|
@@ -22,13 +22,13 @@ class b {
|
|
|
22
22
|
return this.config.type;
|
|
23
23
|
}
|
|
24
24
|
async predict(t) {
|
|
25
|
-
const n = performance.now(), e = Array.from(t.data),
|
|
25
|
+
const n = performance.now(), e = Array.from(t.data), s = this.forwardPass(e), l = performance.now() - n;
|
|
26
26
|
return {
|
|
27
27
|
modelId: this.config.id,
|
|
28
|
-
output: new Float32Array(
|
|
29
|
-
outputShape: [
|
|
28
|
+
output: new Float32Array(s),
|
|
29
|
+
outputShape: [s.length],
|
|
30
30
|
timestamp: Date.now(),
|
|
31
|
-
processingTime:
|
|
31
|
+
processingTime: l
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
forwardPass(t) {
|
|
@@ -38,14 +38,14 @@ class b {
|
|
|
38
38
|
return n;
|
|
39
39
|
}
|
|
40
40
|
denseLayer(t, n, e) {
|
|
41
|
-
const
|
|
42
|
-
for (let
|
|
43
|
-
let
|
|
44
|
-
for (let
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
const s = [];
|
|
42
|
+
for (let l = 0; l < n.length; l++) {
|
|
43
|
+
let r = e[l];
|
|
44
|
+
for (let o = 0; o < t.length; o++)
|
|
45
|
+
r += t[o] * n[l][o];
|
|
46
|
+
s.push(r);
|
|
47
47
|
}
|
|
48
|
-
return
|
|
48
|
+
return s;
|
|
49
49
|
}
|
|
50
50
|
applyActivation(t, n) {
|
|
51
51
|
switch (n) {
|
|
@@ -73,12 +73,13 @@ class b {
|
|
|
73
73
|
this.ready = !1;
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
class
|
|
76
|
+
class I {
|
|
77
77
|
constructor(t) {
|
|
78
78
|
h(this, "config");
|
|
79
79
|
h(this, "coefficients", []);
|
|
80
80
|
h(this, "intercept", 0);
|
|
81
81
|
h(this, "ready", !1);
|
|
82
|
+
h(this, "lastTraining", null);
|
|
82
83
|
this.config = t;
|
|
83
84
|
}
|
|
84
85
|
get id() {
|
|
@@ -91,55 +92,39 @@ class R {
|
|
|
91
92
|
return this.config.type;
|
|
92
93
|
}
|
|
93
94
|
async predict(t) {
|
|
94
|
-
const n = performance.now(),
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}), o = performance.now() - n;
|
|
95
|
+
const n = performance.now(), s = Array.from(t.data).map((r) => {
|
|
96
|
+
const o = r;
|
|
97
|
+
let a = this.intercept;
|
|
98
|
+
return this.coefficients.length > 0 && (a += this.coefficients[0] * o), a;
|
|
99
|
+
}), l = performance.now() - n;
|
|
100
100
|
return {
|
|
101
101
|
modelId: this.config.id,
|
|
102
|
-
output: new Float32Array(
|
|
103
|
-
outputShape: [
|
|
102
|
+
output: new Float32Array(s),
|
|
103
|
+
outputShape: [s.length],
|
|
104
104
|
timestamp: Date.now(),
|
|
105
|
-
processingTime:
|
|
105
|
+
processingTime: l
|
|
106
106
|
};
|
|
107
107
|
}
|
|
108
|
+
/** Predict from full feature rows (multivariate). */
|
|
109
|
+
predictRows(t) {
|
|
110
|
+
return t.map((n) => {
|
|
111
|
+
let e = this.intercept;
|
|
112
|
+
for (let s = 0; s < this.coefficients.length && s < n.length; s++)
|
|
113
|
+
e += this.coefficients[s] * n[s];
|
|
114
|
+
return e;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
108
117
|
train(t) {
|
|
109
118
|
const n = t.x.length, e = [];
|
|
110
|
-
for (let
|
|
111
|
-
e.push([1, ...t.x[
|
|
112
|
-
const
|
|
113
|
-
this.intercept =
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const e = [];
|
|
120
|
-
for (let r = 0; r < t.length; r++) {
|
|
121
|
-
e[r] = [];
|
|
122
|
-
for (let o = 0; o < n[0].length; o++) {
|
|
123
|
-
let s = 0;
|
|
124
|
-
for (let l = 0; l < n.length; l++)
|
|
125
|
-
s += t[r][l] * n[l][o];
|
|
126
|
-
e[r][o] = s;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return e;
|
|
130
|
-
}
|
|
131
|
-
matrixInverse(t) {
|
|
132
|
-
if (t.length === 2 && t[0].length === 2) {
|
|
133
|
-
const n = t[0][0] * t[1][1] - t[0][1] * t[1][0];
|
|
134
|
-
if (Math.abs(n) < 1e-10)
|
|
135
|
-
return [[1, 0], [0, 1]];
|
|
136
|
-
const e = 1 / n;
|
|
137
|
-
return [
|
|
138
|
-
[e * t[1][1], -e * t[0][1]],
|
|
139
|
-
[-e * t[1][0], e * t[0][0]]
|
|
140
|
-
];
|
|
141
|
-
}
|
|
142
|
-
return t.map((n, e) => n.map((r, o) => e === o ? 1 : 0));
|
|
119
|
+
for (let u = 0; u < n; u++)
|
|
120
|
+
e.push([1, ...t.x[u]]);
|
|
121
|
+
const s = F(b(e), e), l = F(b(e), t.y.map((u) => [u])), r = L(s), o = F(r, l);
|
|
122
|
+
this.intercept = o[0][0], this.coefficients = o.slice(1).map((u) => u[0]), this.ready = !0;
|
|
123
|
+
const a = this.predictRows(t.x), c = t.y.map((u, p) => u - a[p]), g = t.y.reduce((u, p) => u + p, 0) / (n || 1), m = c.reduce((u, p) => u + p * p, 0), d = t.y.reduce((u, p) => u + (p - g) ** 2, 0), M = d > 0 ? 1 - m / d : 0, y = Math.sqrt(m / (n || 1));
|
|
124
|
+
return this.lastTraining = { coefficients: this.coefficients, intercept: this.intercept, fitted: a, residuals: c, r2: M, rmse: y }, this.lastTraining;
|
|
125
|
+
}
|
|
126
|
+
getTrainingResult() {
|
|
127
|
+
return this.lastTraining;
|
|
143
128
|
}
|
|
144
129
|
getInfo() {
|
|
145
130
|
return { ...this.config };
|
|
@@ -151,18 +136,56 @@ class R {
|
|
|
151
136
|
this.coefficients = [1], this.intercept = 0, this.ready = !0;
|
|
152
137
|
}
|
|
153
138
|
dispose() {
|
|
154
|
-
this.ready = !1;
|
|
139
|
+
this.ready = !1, this.lastTraining = null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function b(i) {
|
|
143
|
+
return i[0].map((t, n) => i.map((e) => e[n]));
|
|
144
|
+
}
|
|
145
|
+
function F(i, t) {
|
|
146
|
+
const n = [];
|
|
147
|
+
for (let e = 0; e < i.length; e++) {
|
|
148
|
+
n[e] = [];
|
|
149
|
+
for (let s = 0; s < t[0].length; s++) {
|
|
150
|
+
let l = 0;
|
|
151
|
+
for (let r = 0; r < t.length; r++)
|
|
152
|
+
l += i[e][r] * t[r][s];
|
|
153
|
+
n[e][s] = l;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return n;
|
|
157
|
+
}
|
|
158
|
+
function L(i) {
|
|
159
|
+
const t = i.length, n = i.map((e, s) => [
|
|
160
|
+
...e,
|
|
161
|
+
...Array.from({ length: t }, (l, r) => s === r ? 1 : 0)
|
|
162
|
+
]);
|
|
163
|
+
for (let e = 0; e < t; e++) {
|
|
164
|
+
let s = e;
|
|
165
|
+
for (let r = e + 1; r < t; r++)
|
|
166
|
+
Math.abs(n[r][e]) > Math.abs(n[s][e]) && (s = r);
|
|
167
|
+
if (Math.abs(n[s][e]) < 1e-12)
|
|
168
|
+
return i.map((r, o) => r.map((a, c) => o === c ? 1 : 0));
|
|
169
|
+
[n[e], n[s]] = [n[s], n[e]];
|
|
170
|
+
const l = n[e][e];
|
|
171
|
+
for (let r = 0; r < 2 * t; r++) n[e][r] /= l;
|
|
172
|
+
for (let r = 0; r < t; r++) {
|
|
173
|
+
if (r === e) continue;
|
|
174
|
+
const o = n[r][e];
|
|
175
|
+
for (let a = 0; a < 2 * t; a++) n[r][a] -= o * n[e][a];
|
|
176
|
+
}
|
|
155
177
|
}
|
|
178
|
+
return n.map((e) => e.slice(t));
|
|
156
179
|
}
|
|
157
|
-
class
|
|
180
|
+
class z {
|
|
158
181
|
constructor(t) {
|
|
159
182
|
h(this, "config");
|
|
160
183
|
h(this, "filterType");
|
|
161
184
|
h(this, "cutoffFrequency");
|
|
162
185
|
h(this, "sampleRate");
|
|
163
186
|
h(this, "ready", !1);
|
|
164
|
-
var n, e,
|
|
165
|
-
this.config = t, this.filterType = ((n = t.metadata) == null ? void 0 : n.filterType) || "lowpass", this.cutoffFrequency = ((e = t.metadata) == null ? void 0 : e.cutoffFrequency) || 1e3, this.sampleRate = ((
|
|
187
|
+
var n, e, s;
|
|
188
|
+
this.config = t, this.filterType = ((n = t.metadata) == null ? void 0 : n.filterType) || "lowpass", this.cutoffFrequency = ((e = t.metadata) == null ? void 0 : e.cutoffFrequency) || 1e3, this.sampleRate = ((s = t.metadata) == null ? void 0 : s.sampleRate) || 44100;
|
|
166
189
|
}
|
|
167
190
|
get id() {
|
|
168
191
|
return this.config.id;
|
|
@@ -174,13 +197,13 @@ class k {
|
|
|
174
197
|
return this.config.type;
|
|
175
198
|
}
|
|
176
199
|
async predict(t) {
|
|
177
|
-
const n = performance.now(), e = Array.from(t.data),
|
|
200
|
+
const n = performance.now(), e = Array.from(t.data), s = this.applyFilter(e), l = performance.now() - n;
|
|
178
201
|
return {
|
|
179
202
|
modelId: this.config.id,
|
|
180
|
-
output: new Float32Array(
|
|
181
|
-
outputShape: [
|
|
203
|
+
output: new Float32Array(s),
|
|
204
|
+
outputShape: [s.length],
|
|
182
205
|
timestamp: Date.now(),
|
|
183
|
-
processingTime:
|
|
206
|
+
processingTime: l
|
|
184
207
|
};
|
|
185
208
|
}
|
|
186
209
|
applyFilter(t) {
|
|
@@ -196,10 +219,10 @@ class k {
|
|
|
196
219
|
}
|
|
197
220
|
}
|
|
198
221
|
lowpassFilter(t) {
|
|
199
|
-
const n = 2 * Math.PI * this.cutoffFrequency / this.sampleRate, e = n / (1 + n),
|
|
200
|
-
for (let
|
|
201
|
-
|
|
202
|
-
return
|
|
222
|
+
const n = 2 * Math.PI * this.cutoffFrequency / this.sampleRate, e = n / (1 + n), s = [t[0]];
|
|
223
|
+
for (let l = 1; l < t.length; l++)
|
|
224
|
+
s.push(e * t[l] + (1 - e) * s[l - 1]);
|
|
225
|
+
return s;
|
|
203
226
|
}
|
|
204
227
|
highpassFilter(t) {
|
|
205
228
|
const n = [];
|
|
@@ -224,132 +247,160 @@ class k {
|
|
|
224
247
|
this.ready = !1;
|
|
225
248
|
}
|
|
226
249
|
}
|
|
227
|
-
function
|
|
250
|
+
function X(i) {
|
|
228
251
|
switch (i.type) {
|
|
229
252
|
case "neural-network":
|
|
230
|
-
return new
|
|
253
|
+
return new x(i);
|
|
231
254
|
case "linear-regression":
|
|
232
|
-
return new
|
|
255
|
+
return new I(i);
|
|
233
256
|
case "signal-processor":
|
|
234
|
-
return new
|
|
257
|
+
return new z(i);
|
|
235
258
|
default:
|
|
236
|
-
return new
|
|
259
|
+
return new I(i);
|
|
237
260
|
}
|
|
238
261
|
}
|
|
239
|
-
function
|
|
262
|
+
function V(i) {
|
|
240
263
|
const t = i.length, n = new Array(t), e = new Array(t);
|
|
241
|
-
for (let
|
|
242
|
-
let
|
|
243
|
-
for (let
|
|
244
|
-
const a = -2 * Math.PI *
|
|
245
|
-
|
|
264
|
+
for (let s = 0; s < t; s++) {
|
|
265
|
+
let l = 0, r = 0;
|
|
266
|
+
for (let o = 0; o < t; o++) {
|
|
267
|
+
const a = -2 * Math.PI * s * o / t;
|
|
268
|
+
l += i[o] * Math.cos(a), r += i[o] * Math.sin(a);
|
|
246
269
|
}
|
|
247
|
-
n[
|
|
270
|
+
n[s] = l, e[s] = r;
|
|
248
271
|
}
|
|
249
272
|
return { real: n, imag: e };
|
|
250
273
|
}
|
|
251
|
-
function
|
|
274
|
+
function R(i) {
|
|
252
275
|
return i.reduce((t, n) => t + n, 0) / i.length;
|
|
253
276
|
}
|
|
254
277
|
function Y(i) {
|
|
255
|
-
const t =
|
|
278
|
+
const t = R(i), n = i.reduce((e, s) => e + Math.pow(s - t, 2), 0) / i.length;
|
|
256
279
|
return Math.sqrt(n);
|
|
257
280
|
}
|
|
258
|
-
function
|
|
259
|
-
const n = i.length, e =
|
|
260
|
-
let
|
|
281
|
+
function $(i, t) {
|
|
282
|
+
const n = i.length, e = R(i), s = R(t);
|
|
283
|
+
let l = 0, r = 0, o = 0;
|
|
261
284
|
for (let a = 0; a < n; a++) {
|
|
262
|
-
const c = i[a] - e,
|
|
263
|
-
|
|
285
|
+
const c = i[a] - e, g = t[a] - s;
|
|
286
|
+
l += c * g, r += c * c, o += g * g;
|
|
264
287
|
}
|
|
265
|
-
return
|
|
288
|
+
return l / Math.sqrt(r * o);
|
|
266
289
|
}
|
|
267
|
-
const
|
|
290
|
+
const E = {
|
|
268
291
|
name: "velo-plot-ml-integration",
|
|
269
292
|
version: "1.0.0",
|
|
270
|
-
description: "Machine Learning Integration Bridge for
|
|
293
|
+
description: "Machine Learning Integration Bridge for Velo Plot",
|
|
271
294
|
provides: ["ml", "prediction", "inference"],
|
|
272
295
|
tags: ["ml", "ai", "analysis"]
|
|
273
296
|
};
|
|
274
|
-
function
|
|
297
|
+
function _(i = {}) {
|
|
275
298
|
let t = null;
|
|
276
299
|
const n = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map();
|
|
277
|
-
i.models && i.models.forEach((
|
|
278
|
-
const
|
|
279
|
-
registerModel(
|
|
280
|
-
if (!
|
|
300
|
+
i.models && i.models.forEach((r) => n.set(r.id, X(r)));
|
|
301
|
+
const s = {
|
|
302
|
+
registerModel(r) {
|
|
303
|
+
if (!r.id) {
|
|
281
304
|
t == null || t.log.error("Cannot register model without id");
|
|
282
305
|
return;
|
|
283
306
|
}
|
|
284
|
-
n.set(
|
|
307
|
+
n.set(r.id, r), t == null || t.log.info(`Model registered: ${r.name || "Unnamed"} (${r.id})`);
|
|
285
308
|
},
|
|
286
|
-
async runInference(
|
|
287
|
-
const a = n.get(
|
|
288
|
-
if (!a) throw new Error(`Model not found: ${
|
|
289
|
-
const c = t == null ? void 0 : t.data.getSeriesData(
|
|
290
|
-
if (!c) throw new Error(`Series not found: ${
|
|
291
|
-
const
|
|
309
|
+
async runInference(r, o) {
|
|
310
|
+
const a = n.get(r);
|
|
311
|
+
if (!a) throw new Error(`Model not found: ${r}`);
|
|
312
|
+
const c = t == null ? void 0 : t.data.getSeriesData(o);
|
|
313
|
+
if (!c) throw new Error(`Series not found: ${o}`);
|
|
314
|
+
const g = new Float32Array(c.y), m = await a.predict({ data: g });
|
|
292
315
|
return m.xValues = c.x, m;
|
|
293
316
|
},
|
|
294
|
-
visualizeResults(
|
|
317
|
+
visualizeResults(r, o = {}) {
|
|
295
318
|
const a = `ml-viz-${Math.random().toString(36).substr(2, 9)}`;
|
|
296
319
|
return e.set(a, {
|
|
297
|
-
result:
|
|
298
|
-
config: { ...i.defaultVisualization, ...
|
|
320
|
+
result: r,
|
|
321
|
+
config: { ...i.defaultVisualization, ...o }
|
|
299
322
|
}), t == null || t.requestRender(), a;
|
|
300
323
|
},
|
|
301
|
-
clearResults(
|
|
302
|
-
|
|
324
|
+
clearResults(r) {
|
|
325
|
+
r ? e.delete(r) : e.clear(), t == null || t.requestRender();
|
|
326
|
+
},
|
|
327
|
+
/**
|
|
328
|
+
* Alias for {@link visualizeResults} that reads as an intent-revealing
|
|
329
|
+
* name for the prediction-overlay use case (task 3.18).
|
|
330
|
+
*/
|
|
331
|
+
visualizePredictions(r, o = {}) {
|
|
332
|
+
return s.visualizeResults(r, o);
|
|
333
|
+
},
|
|
334
|
+
/**
|
|
335
|
+
* Train a small regression model on the fly (task 3.17). Creates a native
|
|
336
|
+
* linear-regression model when the id does not yet exist. Returns fit
|
|
337
|
+
* diagnostics including residuals for a residual plot.
|
|
338
|
+
*/
|
|
339
|
+
trainModel(r, o) {
|
|
340
|
+
let a = n.get(r);
|
|
341
|
+
if (a || (a = X({ id: r, name: r, type: "linear-regression" }), n.set(r, a)), typeof a.train != "function")
|
|
342
|
+
throw new Error(`Model '${r}' does not support training`);
|
|
343
|
+
return a.train(o);
|
|
344
|
+
},
|
|
345
|
+
/** Retrieve the last training diagnostics for a model, if any. */
|
|
346
|
+
getTrainingResult(r) {
|
|
347
|
+
var a;
|
|
348
|
+
const o = n.get(r);
|
|
349
|
+
return ((a = o == null ? void 0 : o.getTrainingResult) == null ? void 0 : a.call(o)) ?? null;
|
|
350
|
+
},
|
|
351
|
+
/** List registered model descriptors (for the ML audit / introspection). */
|
|
352
|
+
listModels() {
|
|
353
|
+
return Array.from(n.values()).map((r) => r.getInfo());
|
|
303
354
|
},
|
|
304
355
|
stats: {
|
|
305
|
-
fft:
|
|
306
|
-
mean:
|
|
356
|
+
fft: V,
|
|
357
|
+
mean: R,
|
|
307
358
|
standardDeviation: Y,
|
|
308
|
-
correlation:
|
|
359
|
+
correlation: $
|
|
309
360
|
}
|
|
310
361
|
};
|
|
311
|
-
function
|
|
312
|
-
const { render:
|
|
313
|
-
c && e.forEach((
|
|
314
|
-
var S,
|
|
315
|
-
const { result: m, config:
|
|
362
|
+
function l(r) {
|
|
363
|
+
const { render: o, coords: a } = r, { ctx2d: c } = o;
|
|
364
|
+
c && e.forEach((g) => {
|
|
365
|
+
var S, P, A, D;
|
|
366
|
+
const { result: m, config: d } = g, { output: M, xValues: y, confidence: u } = m;
|
|
316
367
|
if (!y) return;
|
|
317
|
-
const
|
|
318
|
-
if (c.save(),
|
|
368
|
+
const p = Math.min(y.length, M.length);
|
|
369
|
+
if (c.save(), d.showConfidenceInterval && u && u.length === p) {
|
|
319
370
|
c.beginPath();
|
|
320
|
-
const
|
|
321
|
-
c.fillStyle = (((S =
|
|
322
|
-
for (let
|
|
323
|
-
const
|
|
324
|
-
|
|
371
|
+
const w = d.intervalOpacity ?? 0.2;
|
|
372
|
+
c.fillStyle = (((S = d.lineStyle) == null ? void 0 : S.color) || "#3b82f6") + Math.floor(w * 255).toString(16).padStart(2, "0");
|
|
373
|
+
for (let f = 0; f < p; f++) {
|
|
374
|
+
const v = a.dataToPixelX(y[f]), T = a.dataToPixelY(M[f] + u[f]);
|
|
375
|
+
f === 0 ? c.moveTo(v, T) : c.lineTo(v, T);
|
|
325
376
|
}
|
|
326
|
-
for (let
|
|
327
|
-
const
|
|
328
|
-
c.lineTo(
|
|
377
|
+
for (let f = p - 1; f >= 0; f--) {
|
|
378
|
+
const v = a.dataToPixelX(y[f]), T = a.dataToPixelY(M[f] - u[f]);
|
|
379
|
+
c.lineTo(v, T);
|
|
329
380
|
}
|
|
330
381
|
c.closePath(), c.fill();
|
|
331
382
|
}
|
|
332
|
-
c.beginPath(), c.strokeStyle = ((
|
|
333
|
-
for (let
|
|
334
|
-
const
|
|
335
|
-
|
|
383
|
+
c.beginPath(), c.strokeStyle = ((P = d.lineStyle) == null ? void 0 : P.color) || "#3b82f6", c.lineWidth = ((A = d.lineStyle) == null ? void 0 : A.width) || 2, (D = d.lineStyle) != null && D.dash && c.setLineDash(d.lineStyle.dash);
|
|
384
|
+
for (let w = 0; w < p; w++) {
|
|
385
|
+
const f = a.dataToPixelX(y[w]), v = a.dataToPixelY(M[w]);
|
|
386
|
+
w === 0 ? c.moveTo(f, v) : c.lineTo(f, v);
|
|
336
387
|
}
|
|
337
388
|
c.stroke(), c.restore();
|
|
338
389
|
});
|
|
339
390
|
}
|
|
340
391
|
return {
|
|
341
|
-
manifest:
|
|
342
|
-
onInit(
|
|
343
|
-
t =
|
|
392
|
+
manifest: E,
|
|
393
|
+
onInit(r) {
|
|
394
|
+
t = r;
|
|
344
395
|
},
|
|
345
|
-
onRenderOverlay(
|
|
346
|
-
|
|
396
|
+
onRenderOverlay(r, o) {
|
|
397
|
+
l(r);
|
|
347
398
|
},
|
|
348
|
-
api:
|
|
399
|
+
api: s
|
|
349
400
|
};
|
|
350
401
|
}
|
|
351
402
|
export {
|
|
352
|
-
|
|
353
|
-
|
|
403
|
+
_ as PluginMLIntegration,
|
|
404
|
+
_ as default
|
|
354
405
|
};
|
|
355
406
|
//# sourceMappingURL=ml-integration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ml-integration.js","sources":["../../src/plugins/ml-integration/native-algorithms.ts","../../src/plugins/ml-integration/index.ts"],"sourcesContent":["/**\n * Native ML Integration Plugin - Core Algorithms\n * \n * Implements machine learning algorithms natively without third-party dependencies.\n * Includes simple neural networks, statistical models, and signal processing.\n * \n * @packageDocumentation\n * @module plugins/ml-integration\n */\n\nimport type {\n MLModelAPI,\n ModelConfig,\n PredictionInput,\n PredictionResult\n} from './types';\n\n// ============================================\n// Native Neural Network Implementation\n// ============================================\n\ninterface NativeNeuralNetwork {\n layers: NeuralLayer[];\n learningRate: number;\n epochs: number;\n}\n\ninterface NeuralLayer {\n type: 'dense' | 'activation';\n weights: number[][];\n biases: number[];\n activation?: 'relu' | 'sigmoid' | 'tanh' | 'linear';\n}\n\nexport class SimpleNeuralNetwork implements MLModelAPI {\n private network: NativeNeuralNetwork;\n private config: ModelConfig;\n private ready = false;\n\n constructor(config: ModelConfig) {\n this.config = config;\n this.network = {\n layers: [],\n learningRate: 0.01,\n epochs: 100\n };\n }\n\n get id(): string { return this.config.id; }\n get name(): string { return this.config.name; }\n get type(): string { return this.config.type; }\n\n async predict(input: PredictionInput): Promise<PredictionResult> {\n const startTime = performance.now();\n \n const inputData = Array.from(input.data as number[]);\n const outputData = this.forwardPass(inputData);\n \n const processingTime = performance.now() - startTime;\n\n return {\n modelId: this.config.id,\n output: new Float32Array(outputData),\n outputShape: [outputData.length],\n timestamp: Date.now(),\n processingTime\n };\n }\n\n private forwardPass(input: number[]): number[] {\n let activations = input;\n \n for (const layer of this.network.layers) {\n if (layer.type === 'dense') {\n activations = this.denseLayer(activations, layer.weights, layer.biases);\n }\n \n if (layer.activation) {\n activations = this.applyActivation(activations, layer.activation);\n }\n }\n \n return activations;\n }\n\n private denseLayer(input: number[], weights: number[][], biases: number[]): number[] {\n const output: number[] = [];\n for (let i = 0; i < weights.length; i++) {\n let sum = biases[i];\n for (let j = 0; j < input.length; j++) {\n sum += input[j] * weights[i][j];\n }\n output.push(sum);\n }\n return output;\n }\n\n private applyActivation(input: number[], activation: string): number[] {\n switch (activation) {\n case 'relu':\n return input.map(x => Math.max(0, x));\n case 'sigmoid':\n return input.map(x => 1 / (1 + Math.exp(-x)));\n case 'tanh':\n return input.map(x => Math.tanh(x));\n default:\n return input;\n }\n }\n\n getInfo(): ModelConfig {\n return { ...this.config };\n }\n\n isReady(): boolean {\n return this.ready;\n }\n\n async warmup(): Promise<void> {\n const dummyInput = new Array(10).fill(0.1);\n await this.predict({ data: dummyInput });\n this.ready = true;\n }\n\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================\n// Native Statistical Models\n// ============================================\n\nexport class NativeLinearRegression implements MLModelAPI {\n private config: ModelConfig;\n private coefficients: number[] = [];\n private intercept = 0;\n private ready = false;\n\n constructor(config: ModelConfig) {\n this.config = config;\n }\n\n get id(): string { return this.config.id; }\n get name(): string { return this.config.name; }\n get type(): string { return this.config.type; }\n\n async predict(input: PredictionInput): Promise<PredictionResult> {\n const startTime = performance.now();\n \n const inputData = Array.from(input.data);\n const predictions = inputData.map(x => {\n let result = this.intercept;\n for (let i = 0; i < this.coefficients.length && i < (x as number); i++) {\n result += this.coefficients[i] * (x as number);\n }\n return result;\n });\n \n const processingTime = performance.now() - startTime;\n\n return {\n modelId: this.config.id,\n output: new Float32Array(predictions),\n outputShape: [predictions.length],\n timestamp: Date.now(),\n processingTime\n };\n }\n\n train(data: { x: number[][], y: number[] }): void {\n // Simple linear regression using least squares\n const n = data.x.length;\n \n // Create design matrix\n const X: number[][] = [];\n for (let i = 0; i < n; i++) {\n X.push([1, ...data.x[i]]);\n }\n \n // Calculate coefficients using normal equation: β = (X^T X)^(-1) X^T y\n const XtX = this.matrixMultiply(this.transpose(X), X);\n const XtY = this.matrixMultiply(this.transpose(X), data.y.map(y => [y]));\n \n const XtXInv = this.matrixInverse(XtX);\n const beta = this.matrixMultiply(XtXInv, XtY);\n \n this.intercept = beta[0][0];\n this.coefficients = beta.slice(1).map(row => row[0]);\n this.ready = true;\n }\n\n private transpose(matrix: number[][]): number[][] {\n return matrix[0].map((_, colIndex) => matrix.map(row => row[colIndex]));\n }\n\n private matrixMultiply(a: number[][], b: number[][]): number[][] {\n const result: number[][] = [];\n for (let i = 0; i < a.length; i++) {\n result[i] = [];\n for (let j = 0; j < b[0].length; j++) {\n let sum = 0;\n for (let k = 0; k < b.length; k++) {\n sum += a[i][k] * b[k][j];\n }\n result[i][j] = sum;\n }\n }\n return result;\n }\n\n private matrixInverse(matrix: number[][]): number[][] {\n // Simplified 2x2 matrix inverse for demonstration\n if (matrix.length === 2 && matrix[0].length === 2) {\n const det = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];\n if (Math.abs(det) < 1e-10) {\n return [[1, 0], [0, 1]]; // Identity matrix if singular\n }\n const invDet = 1 / det;\n return [\n [invDet * matrix[1][1], -invDet * matrix[0][1]],\n [-invDet * matrix[1][0], invDet * matrix[0][0]]\n ];\n }\n \n // For larger matrices, return identity (simplified)\n return matrix.map((row, i) => row.map((_, j) => i === j ? 1 : 0));\n }\n\n getInfo(): ModelConfig {\n return { ...this.config };\n }\n\n isReady(): boolean {\n return this.ready;\n }\n\n async warmup(): Promise<void> {\n this.coefficients = [1.0];\n this.intercept = 0.0;\n this.ready = true;\n }\n\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================\n// Native Signal Processing\n// ============================================\n\nexport class NativeSignalProcessor implements MLModelAPI {\n private config: ModelConfig;\n private filterType: 'lowpass' | 'highpass' | 'bandpass';\n private cutoffFrequency: number;\n private sampleRate: number;\n private ready = false;\n\n constructor(config: ModelConfig) {\n this.config = config;\n // Extract parameters from metadata\n this.filterType = (config.metadata?.filterType as any) || 'lowpass';\n this.cutoffFrequency = config.metadata?.cutoffFrequency || 1000;\n this.sampleRate = config.metadata?.sampleRate || 44100;\n }\n\n get id(): string { return this.config.id; }\n get name(): string { return this.config.name; }\n get type(): string { return this.config.type; }\n\n async predict(input: PredictionInput): Promise<PredictionResult> {\n const startTime = performance.now();\n \n const inputData = Array.from(input.data as number[]);\n const filteredData = this.applyFilter(inputData);\n \n const processingTime = performance.now() - startTime;\n\n return {\n modelId: this.config.id,\n output: new Float32Array(filteredData),\n outputShape: [filteredData.length],\n timestamp: Date.now(),\n processingTime\n };\n }\n\n private applyFilter(data: number[]): number[] {\n switch (this.filterType) {\n case 'lowpass':\n return this.lowpassFilter(data);\n case 'highpass':\n return this.highpassFilter(data);\n case 'bandpass':\n return this.bandpassFilter(data);\n default:\n return data;\n }\n }\n\n private lowpassFilter(data: number[]): number[] {\n // Simple exponential moving average low-pass filter\n const alpha = 2 * Math.PI * this.cutoffFrequency / this.sampleRate;\n const smoothedAlpha = alpha / (1 + alpha);\n \n const filtered: number[] = [data[0]];\n for (let i = 1; i < data.length; i++) {\n filtered.push(smoothedAlpha * data[i] + (1 - smoothedAlpha) * filtered[i - 1]);\n }\n return filtered;\n }\n\n private highpassFilter(data: number[]): number[] {\n // High-pass filter using difference\n const filtered: number[] = [];\n for (let i = 1; i < data.length; i++) {\n filtered.push(data[i] - data[i - 1]);\n }\n return filtered;\n }\n\n private bandpassFilter(data: number[]): number[] {\n // Band-pass filter using combination of low-pass and high-pass\n const lowpass = this.lowpassFilter(data);\n return this.highpassFilter(lowpass);\n }\n\n getInfo(): ModelConfig {\n return { ...this.config };\n }\n\n isReady(): boolean {\n return this.ready;\n }\n\n async warmup(): Promise<void> {\n this.ready = true;\n }\n\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================\n// Native Model Factory\n// ============================================\n\nexport function createNativeModel(config: ModelConfig): MLModelAPI {\n switch (config.type) {\n case 'neural-network':\n return new SimpleNeuralNetwork(config);\n case 'linear-regression':\n return new NativeLinearRegression(config);\n case 'signal-processor':\n return new NativeSignalProcessor(config);\n default:\n // Default to simple linear model\n return new NativeLinearRegression(config);\n }\n}\n\n// ============================================\n// Native FFT Implementation\n// ============================================\n\nexport function nativeFFT(data: number[]): { real: number[]; imag: number[] } {\n const n = data.length;\n const real: number[] = new Array(n);\n const imag: number[] = new Array(n);\n \n // Simplified DFT (not optimized FFT)\n for (let k = 0; k < n; k++) {\n let sumReal = 0;\n let sumImag = 0;\n \n for (let t = 0; t < n; t++) {\n const angle = -2 * Math.PI * k * t / n;\n sumReal += data[t] * Math.cos(angle);\n sumImag += data[t] * Math.sin(angle);\n }\n \n real[k] = sumReal;\n imag[k] = sumImag;\n }\n \n return { real, imag };\n}\n\n// ============================================\n// Native Statistical Functions\n// ============================================\n\nexport function nativeMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n}\n\nexport function nativeStandardDeviation(data: number[]): number {\n const mean = nativeMean(data);\n const variance = data.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / data.length;\n return Math.sqrt(variance);\n}\n\nexport function nativeCorrelation(x: number[], y: number[]): number {\n const n = x.length;\n const meanX = nativeMean(x);\n const meanY = nativeMean(y);\n \n let numerator = 0;\n let denomX = 0;\n let denomY = 0;\n \n for (let i = 0; i < n; i++) {\n const dx = x[i] - meanX;\n const dy = y[i] - meanY;\n numerator += dx * dy;\n denomX += dx * dx;\n denomY += dy * dy;\n }\n \n return numerator / Math.sqrt(denomX * denomY);\n}","import type { \n PluginMLIntegrationConfig, \n MLIntegrationAPI, \n MLModelAPI, \n PredictionResult, \n VisualizationConfig\n} from './types';\nimport { \n createNativeModel,\n nativeFFT, \n nativeMean, \n nativeStandardDeviation, \n nativeCorrelation \n} from './native-algorithms';\nimport type { \n PluginManifest, \n ChartPlugin, \n PluginContext,\n AfterRenderEvent\n} from '../types';\n\nconst manifestML: PluginManifest = {\n name: \"velo-plot-ml-integration\",\n version: \"1.0.0\",\n description: \"Machine Learning Integration Bridge for Sci Plot\",\n provides: [\"ml\", \"prediction\", \"inference\"],\n tags: [\"ml\", \"ai\", \"analysis\"],\n};\n\nexport function PluginMLIntegration(\n userConfig: Partial<PluginMLIntegrationConfig> = {}\n): ChartPlugin<PluginMLIntegrationConfig> {\n let ctx: PluginContext | null = null;\n const models = new Map<string, MLModelAPI>();\n const activeVisualizations = new Map<string, { result: PredictionResult, config: VisualizationConfig }>();\n\n // Register initial models from config\n if (userConfig.models) {\n userConfig.models.forEach(m => models.set(m.id, createNativeModel(m)));\n }\n\n const api: MLIntegrationAPI & Record<string, unknown> = {\n registerModel(model: MLModelAPI) {\n if (!model.id) {\n ctx?.log.error(\"Cannot register model without id\");\n return;\n }\n models.set(model.id, model);\n ctx?.log.info(`Model registered: ${model.name || 'Unnamed'} (${model.id})`);\n },\n\n async runInference(modelId: string, seriesId: string) {\n const model = models.get(modelId);\n if (!model) throw new Error(`Model not found: ${modelId}`);\n\n const seriesData = ctx?.data.getSeriesData(seriesId);\n if (!seriesData) throw new Error(`Series not found: ${seriesId}`);\n\n // Convert to Float32Array for model compatibility\n const data = new Float32Array(seriesData.y);\n\n const result = await model.predict({ data });\n // Attach X values for visualization\n result.xValues = seriesData.x;\n return result;\n },\n\n visualizeResults(result: PredictionResult, config: VisualizationConfig = {}) {\n const vizId = `ml-viz-${Math.random().toString(36).substr(2, 9)}`;\n activeVisualizations.set(vizId, { \n result, \n config: { ...userConfig.defaultVisualization, ...config } \n });\n ctx?.requestRender();\n return vizId;\n },\n\n clearResults(visualizationId?: string) {\n if (visualizationId) {\n activeVisualizations.delete(visualizationId);\n } else {\n activeVisualizations.clear();\n }\n ctx?.requestRender();\n },\n\n stats: {\n fft: nativeFFT,\n mean: nativeMean,\n standardDeviation: nativeStandardDeviation,\n correlation: nativeCorrelation\n }\n };\n\n function drawMLVisualizations(pCtx: PluginContext) {\n const { render, coords } = pCtx;\n const { ctx2d } = render;\n if (!ctx2d) return;\n\n activeVisualizations.forEach((viz) => {\n const { result, config } = viz;\n const { output, xValues, confidence } = result;\n if (!xValues) return;\n\n const n = Math.min(xValues.length, output.length);\n\n ctx2d.save();\n\n // 1. Draw Confidence Interval (as filled area)\n if (config.showConfidenceInterval && confidence && confidence.length === n) {\n ctx2d.beginPath();\n const opacity = config.intervalOpacity ?? 0.2;\n ctx2d.fillStyle = (config.lineStyle?.color || '#3b82f6') + Math.floor(opacity * 255).toString(16).padStart(2, '0');\n \n // Forward: upper bound\n for (let i = 0; i < n; i++) {\n const px = coords.dataToPixelX(xValues[i]);\n const py = coords.dataToPixelY(output[i] + confidence[i]);\n if (i === 0) ctx2d.moveTo(px, py);\n else ctx2d.lineTo(px, py);\n }\n \n // Backward: lower bound\n for (let i = n - 1; i >= 0; i--) {\n const px = coords.dataToPixelX(xValues[i]);\n const py = coords.dataToPixelY(output[i] - confidence[i]);\n ctx2d.lineTo(px, py);\n }\n \n ctx2d.closePath();\n ctx2d.fill();\n }\n\n // 2. Draw Prediction Line\n ctx2d.beginPath();\n ctx2d.strokeStyle = config.lineStyle?.color || '#3b82f6';\n ctx2d.lineWidth = config.lineStyle?.width || 2;\n if (config.lineStyle?.dash) ctx2d.setLineDash(config.lineStyle.dash);\n\n for (let i = 0; i < n; i++) {\n const px = coords.dataToPixelX(xValues[i]);\n const py = coords.dataToPixelY(output[i]);\n if (i === 0) ctx2d.moveTo(px, py);\n else ctx2d.lineTo(px, py);\n }\n ctx2d.stroke();\n\n ctx2d.restore();\n });\n }\n\n return {\n manifest: manifestML,\n\n onInit(c: PluginContext) {\n ctx = c;\n },\n\n onRenderOverlay(pCtx: PluginContext, _event: AfterRenderEvent) {\n drawMLVisualizations(pCtx);\n },\n\n api\n };\n}\n\nexport default PluginMLIntegration;\n\nexport type { \n PluginMLIntegrationConfig, \n MLIntegrationAPI, \n MLModelAPI, \n PredictionResult, \n VisualizationConfig \n} from './types';"],"names":["SimpleNeuralNetwork","config","__publicField","input","startTime","inputData","outputData","processingTime","activations","layer","weights","biases","output","i","sum","j","activation","x","dummyInput","NativeLinearRegression","predictions","result","data","X","XtX","XtY","y","XtXInv","beta","row","matrix","_","colIndex","a","b","k","det","invDet","NativeSignalProcessor","_a","_b","_c","filteredData","alpha","smoothedAlpha","filtered","lowpass","createNativeModel","nativeFFT","n","real","imag","sumReal","sumImag","t","angle","nativeMean","val","nativeStandardDeviation","mean","variance","nativeCorrelation","meanX","meanY","numerator","denomX","denomY","dx","dy","manifestML","PluginMLIntegration","userConfig","ctx","models","activeVisualizations","m","api","model","modelId","seriesId","seriesData","vizId","visualizationId","drawMLVisualizations","pCtx","render","coords","ctx2d","viz","_d","xValues","confidence","opacity","px","py","c","_event"],"mappings":";;;AAkCO,MAAMA,EAA0C;AAAA,EAKrD,YAAYC,GAAqB;AAJzB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,eAAQ;AAGd,SAAK,SAASD,GACd,KAAK,UAAU;AAAA,MACb,QAAQ,CAAA;AAAA,MACR,cAAc;AAAA,MACd,QAAQ;AAAA,IAAA;AAAA,EAEZ;AAAA,EAEA,IAAI,KAAa;AAAE,WAAO,KAAK,OAAO;AAAA,EAAI;AAAA,EAC1C,IAAI,OAAe;AAAE,WAAO,KAAK,OAAO;AAAA,EAAM;AAAA,EAC9C,IAAI,OAAe;AAAE,WAAO,KAAK,OAAO;AAAA,EAAM;AAAA,EAE9C,MAAM,QAAQE,GAAmD;AAC/D,UAAMC,IAAY,YAAY,IAAA,GAExBC,IAAY,MAAM,KAAKF,EAAM,IAAgB,GAC7CG,IAAa,KAAK,YAAYD,CAAS,GAEvCE,IAAiB,YAAY,IAAA,IAAQH;AAE3C,WAAO;AAAA,MACL,SAAS,KAAK,OAAO;AAAA,MACrB,QAAQ,IAAI,aAAaE,CAAU;AAAA,MACnC,aAAa,CAACA,EAAW,MAAM;AAAA,MAC/B,WAAW,KAAK,IAAA;AAAA,MAChB,gBAAAC;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,YAAYJ,GAA2B;AAC7C,QAAIK,IAAcL;AAElB,eAAWM,KAAS,KAAK,QAAQ;AAC/B,MAAIA,EAAM,SAAS,YACjBD,IAAc,KAAK,WAAWA,GAAaC,EAAM,SAASA,EAAM,MAAM,IAGpEA,EAAM,eACRD,IAAc,KAAK,gBAAgBA,GAAaC,EAAM,UAAU;AAIpE,WAAOD;AAAA,EACT;AAAA,EAEQ,WAAWL,GAAiBO,GAAqBC,GAA4B;AACnF,UAAMC,IAAmB,CAAA;AACzB,aAASC,IAAI,GAAGA,IAAIH,EAAQ,QAAQG,KAAK;AACvC,UAAIC,IAAMH,EAAOE,CAAC;AAClB,eAASE,IAAI,GAAGA,IAAIZ,EAAM,QAAQY;AAChC,QAAAD,KAAOX,EAAMY,CAAC,IAAIL,EAAQG,CAAC,EAAEE,CAAC;AAEhC,MAAAH,EAAO,KAAKE,CAAG;AAAA,IACjB;AACA,WAAOF;AAAA,EACT;AAAA,EAEQ,gBAAgBT,GAAiBa,GAA8B;AACrE,YAAQA,GAAA;AAAA,MACN,KAAK;AACH,eAAOb,EAAM,IAAI,CAAAc,MAAK,KAAK,IAAI,GAAGA,CAAC,CAAC;AAAA,MACtC,KAAK;AACH,eAAOd,EAAM,IAAI,CAAAc,MAAK,KAAK,IAAI,KAAK,IAAI,CAACA,CAAC,EAAE;AAAA,MAC9C,KAAK;AACH,eAAOd,EAAM,IAAI,CAAAc,MAAK,KAAK,KAAKA,CAAC,CAAC;AAAA,MACpC;AACE,eAAOd;AAAA,IAAA;AAAA,EAEb;AAAA,EAEA,UAAuB;AACrB,WAAO,EAAE,GAAG,KAAK,OAAA;AAAA,EACnB;AAAA,EAEA,UAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,SAAwB;AAC5B,UAAMe,IAAa,IAAI,MAAM,EAAE,EAAE,KAAK,GAAG;AACzC,UAAM,KAAK,QAAQ,EAAE,MAAMA,GAAY,GACvC,KAAK,QAAQ;AAAA,EACf;AAAA,EAEA,UAAgB;AACd,SAAK,QAAQ;AAAA,EACf;AACF;AAMO,MAAMC,EAA6C;AAAA,EAMxD,YAAYlB,GAAqB;AALzB,IAAAC,EAAA;AACA,IAAAA,EAAA,sBAAyB,CAAA;AACzB,IAAAA,EAAA,mBAAY;AACZ,IAAAA,EAAA,eAAQ;AAGd,SAAK,SAASD;AAAA,EAChB;AAAA,EAEA,IAAI,KAAa;AAAE,WAAO,KAAK,OAAO;AAAA,EAAI;AAAA,EAC1C,IAAI,OAAe;AAAE,WAAO,KAAK,OAAO;AAAA,EAAM;AAAA,EAC9C,IAAI,OAAe;AAAE,WAAO,KAAK,OAAO;AAAA,EAAM;AAAA,EAE9C,MAAM,QAAQE,GAAmD;AAC/D,UAAMC,IAAY,YAAY,IAAA,GAGxBgB,IADY,MAAM,KAAKjB,EAAM,IAAI,EACT,IAAI,CAAAc,MAAK;AACrC,UAAII,IAAS,KAAK;AAClB,eAASR,IAAI,GAAGA,IAAI,KAAK,aAAa,UAAUA,IAAKI,GAAcJ;AACjE,QAAAQ,KAAU,KAAK,aAAaR,CAAC,IAAKI;AAEpC,aAAOI;AAAA,IACT,CAAC,GAEKd,IAAiB,YAAY,IAAA,IAAQH;AAE3C,WAAO;AAAA,MACL,SAAS,KAAK,OAAO;AAAA,MACrB,QAAQ,IAAI,aAAagB,CAAW;AAAA,MACpC,aAAa,CAACA,EAAY,MAAM;AAAA,MAChC,WAAW,KAAK,IAAA;AAAA,MAChB,gBAAAb;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAMe,GAA4C;AAEhD,UAAM,IAAIA,EAAK,EAAE,QAGXC,IAAgB,CAAA;AACtB,aAASV,IAAI,GAAGA,IAAI,GAAGA;AACrB,MAAAU,EAAE,KAAK,CAAC,GAAG,GAAGD,EAAK,EAAET,CAAC,CAAC,CAAC;AAI1B,UAAMW,IAAM,KAAK,eAAe,KAAK,UAAUD,CAAC,GAAGA,CAAC,GAC9CE,IAAM,KAAK,eAAe,KAAK,UAAUF,CAAC,GAAGD,EAAK,EAAE,IAAI,CAAAI,MAAK,CAACA,CAAC,CAAC,CAAC,GAEjEC,IAAS,KAAK,cAAcH,CAAG,GAC/BI,IAAO,KAAK,eAAeD,GAAQF,CAAG;AAE5C,SAAK,YAAYG,EAAK,CAAC,EAAE,CAAC,GAC1B,KAAK,eAAeA,EAAK,MAAM,CAAC,EAAE,IAAI,CAAAC,MAAOA,EAAI,CAAC,CAAC,GACnD,KAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAUC,GAAgC;AAChD,WAAOA,EAAO,CAAC,EAAE,IAAI,CAACC,GAAGC,MAAaF,EAAO,IAAI,CAAAD,MAAOA,EAAIG,CAAQ,CAAC,CAAC;AAAA,EACxE;AAAA,EAEQ,eAAeC,GAAeC,GAA2B;AAC/D,UAAMb,IAAqB,CAAA;AAC3B,aAASR,IAAI,GAAGA,IAAIoB,EAAE,QAAQpB,KAAK;AACjC,MAAAQ,EAAOR,CAAC,IAAI,CAAA;AACZ,eAASE,IAAI,GAAGA,IAAImB,EAAE,CAAC,EAAE,QAAQnB,KAAK;AACpC,YAAID,IAAM;AACV,iBAASqB,IAAI,GAAGA,IAAID,EAAE,QAAQC;AAC5B,UAAArB,KAAOmB,EAAEpB,CAAC,EAAEsB,CAAC,IAAID,EAAEC,CAAC,EAAEpB,CAAC;AAEzB,QAAAM,EAAOR,CAAC,EAAEE,CAAC,IAAID;AAAA,MACjB;AAAA,IACF;AACA,WAAOO;AAAA,EACT;AAAA,EAEQ,cAAcS,GAAgC;AAEpD,QAAIA,EAAO,WAAW,KAAKA,EAAO,CAAC,EAAE,WAAW,GAAG;AACjD,YAAMM,IAAMN,EAAO,CAAC,EAAE,CAAC,IAAIA,EAAO,CAAC,EAAE,CAAC,IAAIA,EAAO,CAAC,EAAE,CAAC,IAAIA,EAAO,CAAC,EAAE,CAAC;AACpE,UAAI,KAAK,IAAIM,CAAG,IAAI;AAClB,eAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAExB,YAAMC,IAAS,IAAID;AACnB,aAAO;AAAA,QACL,CAACC,IAASP,EAAO,CAAC,EAAE,CAAC,GAAG,CAACO,IAASP,EAAO,CAAC,EAAE,CAAC,CAAC;AAAA,QAC9C,CAAC,CAACO,IAASP,EAAO,CAAC,EAAE,CAAC,GAAGO,IAASP,EAAO,CAAC,EAAE,CAAC,CAAC;AAAA,MAAA;AAAA,IAElD;AAGA,WAAOA,EAAO,IAAI,CAACD,GAAKhB,MAAMgB,EAAI,IAAI,CAACE,GAAGhB,MAAMF,MAAME,IAAI,IAAI,CAAC,CAAC;AAAA,EAClE;AAAA,EAEA,UAAuB;AACrB,WAAO,EAAE,GAAG,KAAK,OAAA;AAAA,EACnB;AAAA,EAEA,UAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,SAAwB;AAC5B,SAAK,eAAe,CAAC,CAAG,GACxB,KAAK,YAAY,GACjB,KAAK,QAAQ;AAAA,EACf;AAAA,EAEA,UAAgB;AACd,SAAK,QAAQ;AAAA,EACf;AACF;AAMO,MAAMuB,EAA4C;AAAA,EAOvD,YAAYrC,GAAqB;AANzB,IAAAC,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA;AACA,IAAAA,EAAA,eAAQ;AA/NX,QAAAqC,GAAAC,GAAAC;AAkOH,SAAK,SAASxC,GAEd,KAAK,eAAcsC,IAAAtC,EAAO,aAAP,gBAAAsC,EAAiB,eAAsB,WAC1D,KAAK,oBAAkBC,IAAAvC,EAAO,aAAP,gBAAAuC,EAAiB,oBAAmB,KAC3D,KAAK,eAAaC,IAAAxC,EAAO,aAAP,gBAAAwC,EAAiB,eAAc;AAAA,EACnD;AAAA,EAEA,IAAI,KAAa;AAAE,WAAO,KAAK,OAAO;AAAA,EAAI;AAAA,EAC1C,IAAI,OAAe;AAAE,WAAO,KAAK,OAAO;AAAA,EAAM;AAAA,EAC9C,IAAI,OAAe;AAAE,WAAO,KAAK,OAAO;AAAA,EAAM;AAAA,EAE9C,MAAM,QAAQtC,GAAmD;AAC/D,UAAMC,IAAY,YAAY,IAAA,GAExBC,IAAY,MAAM,KAAKF,EAAM,IAAgB,GAC7CuC,IAAe,KAAK,YAAYrC,CAAS,GAEzCE,IAAiB,YAAY,IAAA,IAAQH;AAE3C,WAAO;AAAA,MACL,SAAS,KAAK,OAAO;AAAA,MACrB,QAAQ,IAAI,aAAasC,CAAY;AAAA,MACrC,aAAa,CAACA,EAAa,MAAM;AAAA,MACjC,WAAW,KAAK,IAAA;AAAA,MAChB,gBAAAnC;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,YAAYe,GAA0B;AAC5C,YAAQ,KAAK,YAAA;AAAA,MACX,KAAK;AACH,eAAO,KAAK,cAAcA,CAAI;AAAA,MAChC,KAAK;AACH,eAAO,KAAK,eAAeA,CAAI;AAAA,MACjC,KAAK;AACH,eAAO,KAAK,eAAeA,CAAI;AAAA,MACjC;AACE,eAAOA;AAAA,IAAA;AAAA,EAEb;AAAA,EAEQ,cAAcA,GAA0B;AAE9C,UAAMqB,IAAQ,IAAI,KAAK,KAAK,KAAK,kBAAkB,KAAK,YAClDC,IAAgBD,KAAS,IAAIA,IAE7BE,IAAqB,CAACvB,EAAK,CAAC,CAAC;AACnC,aAAST,IAAI,GAAGA,IAAIS,EAAK,QAAQT;AAC/B,MAAAgC,EAAS,KAAKD,IAAgBtB,EAAKT,CAAC,KAAK,IAAI+B,KAAiBC,EAAShC,IAAI,CAAC,CAAC;AAE/E,WAAOgC;AAAA,EACT;AAAA,EAEQ,eAAevB,GAA0B;AAE/C,UAAMuB,IAAqB,CAAA;AAC3B,aAAShC,IAAI,GAAGA,IAAIS,EAAK,QAAQT;AAC/B,MAAAgC,EAAS,KAAKvB,EAAKT,CAAC,IAAIS,EAAKT,IAAI,CAAC,CAAC;AAErC,WAAOgC;AAAA,EACT;AAAA,EAEQ,eAAevB,GAA0B;AAE/C,UAAMwB,IAAU,KAAK,cAAcxB,CAAI;AACvC,WAAO,KAAK,eAAewB,CAAO;AAAA,EACpC;AAAA,EAEA,UAAuB;AACrB,WAAO,EAAE,GAAG,KAAK,OAAA;AAAA,EACnB;AAAA,EAEA,UAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,SAAwB;AAC5B,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,UAAgB;AACd,SAAK,QAAQ;AAAA,EACf;AACF;AAMO,SAASC,EAAkB9C,GAAiC;AACjE,UAAQA,EAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO,IAAID,EAAoBC,CAAM;AAAA,IACvC,KAAK;AACH,aAAO,IAAIkB,EAAuBlB,CAAM;AAAA,IAC1C,KAAK;AACH,aAAO,IAAIqC,EAAsBrC,CAAM;AAAA,IACzC;AAEE,aAAO,IAAIkB,EAAuBlB,CAAM;AAAA,EAAA;AAE9C;AAMO,SAAS+C,EAAU1B,GAAoD;AAC5E,QAAM2B,IAAI3B,EAAK,QACT4B,IAAiB,IAAI,MAAMD,CAAC,GAC5BE,IAAiB,IAAI,MAAMF,CAAC;AAGlC,WAASd,IAAI,GAAGA,IAAIc,GAAGd,KAAK;AAC1B,QAAIiB,IAAU,GACVC,IAAU;AAEd,aAASC,IAAI,GAAGA,IAAIL,GAAGK,KAAK;AAC1B,YAAMC,IAAQ,KAAK,KAAK,KAAKpB,IAAImB,IAAIL;AACrC,MAAAG,KAAW9B,EAAKgC,CAAC,IAAI,KAAK,IAAIC,CAAK,GACnCF,KAAW/B,EAAKgC,CAAC,IAAI,KAAK,IAAIC,CAAK;AAAA,IACrC;AAEA,IAAAL,EAAKf,CAAC,IAAIiB,GACVD,EAAKhB,CAAC,IAAIkB;AAAA,EACZ;AAEA,SAAO,EAAE,MAAAH,GAAM,MAAAC,EAAA;AACjB;AAMO,SAASK,EAAWlC,GAAwB;AACjD,SAAOA,EAAK,OAAO,CAACR,GAAK2C,MAAQ3C,IAAM2C,GAAK,CAAC,IAAInC,EAAK;AACxD;AAEO,SAASoC,EAAwBpC,GAAwB;AAC9D,QAAMqC,IAAOH,EAAWlC,CAAI,GACtBsC,IAAWtC,EAAK,OAAO,CAACR,GAAK2C,MAAQ3C,IAAM,KAAK,IAAI2C,IAAME,GAAM,CAAC,GAAG,CAAC,IAAIrC,EAAK;AACpF,SAAO,KAAK,KAAKsC,CAAQ;AAC3B;AAEO,SAASC,EAAkB5C,GAAaS,GAAqB;AAClE,QAAM,IAAIT,EAAE,QACN6C,IAAQN,EAAWvC,CAAC,GACpB8C,IAAQP,EAAW9B,CAAC;AAE1B,MAAIsC,IAAY,GACZC,IAAS,GACTC,IAAS;AAEb,WAASrD,IAAI,GAAGA,IAAI,GAAGA,KAAK;AAC1B,UAAMsD,IAAKlD,EAAEJ,CAAC,IAAIiD,GACZM,IAAK1C,EAAEb,CAAC,IAAIkD;AAClB,IAAAC,KAAaG,IAAKC,GAClBH,KAAUE,IAAKA,GACfD,KAAUE,IAAKA;AAAA,EACjB;AAEA,SAAOJ,IAAY,KAAK,KAAKC,IAASC,CAAM;AAC9C;ACjZA,MAAMG,IAA6B;AAAA,EACjC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU,CAAC,MAAM,cAAc,WAAW;AAAA,EAC1C,MAAM,CAAC,MAAM,MAAM,UAAU;AAC/B;AAEO,SAASC,EACdC,IAAiD,IACT;AACxC,MAAIC,IAA4B;AAChC,QAAMC,wBAAa,IAAA,GACbC,wBAA2B,IAAA;AAGjC,EAAIH,EAAW,UACbA,EAAW,OAAO,QAAQ,CAAAI,MAAKF,EAAO,IAAIE,EAAE,IAAI5B,EAAkB4B,CAAC,CAAC,CAAC;AAGvE,QAAMC,IAAkD;AAAA,IACtD,cAAcC,GAAmB;AAC/B,UAAI,CAACA,EAAM,IAAI;AACb,QAAAL,KAAA,QAAAA,EAAK,IAAI,MAAM;AACf;AAAA,MACF;AACA,MAAAC,EAAO,IAAII,EAAM,IAAIA,CAAK,GAC1BL,KAAA,QAAAA,EAAK,IAAI,KAAK,qBAAqBK,EAAM,QAAQ,SAAS,KAAKA,EAAM,EAAE;AAAA,IACzE;AAAA,IAEA,MAAM,aAAaC,GAAiBC,GAAkB;AACpD,YAAMF,IAAQJ,EAAO,IAAIK,CAAO;AAChC,UAAI,CAACD,EAAO,OAAM,IAAI,MAAM,oBAAoBC,CAAO,EAAE;AAEzD,YAAME,IAAaR,KAAA,gBAAAA,EAAK,KAAK,cAAcO;AAC3C,UAAI,CAACC,EAAY,OAAM,IAAI,MAAM,qBAAqBD,CAAQ,EAAE;AAGhE,YAAMzD,IAAO,IAAI,aAAa0D,EAAW,CAAC,GAEpC3D,IAAS,MAAMwD,EAAM,QAAQ,EAAE,MAAAvD,GAAM;AAE3C,aAAAD,EAAO,UAAU2D,EAAW,GACrB3D;AAAA,IACT;AAAA,IAEA,iBAAiBA,GAA0BpB,IAA8B,IAAI;AAC3E,YAAMgF,IAAQ,UAAU,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAC/D,aAAAP,EAAqB,IAAIO,GAAO;AAAA,QAC9B,QAAA5D;AAAA,QACA,QAAQ,EAAE,GAAGkD,EAAW,sBAAsB,GAAGtE,EAAA;AAAA,MAAO,CACzD,GACDuE,KAAA,QAAAA,EAAK,iBACES;AAAA,IACT;AAAA,IAEA,aAAaC,GAA0B;AACrC,MAAIA,IACFR,EAAqB,OAAOQ,CAAe,IAE3CR,EAAqB,MAAA,GAEvBF,KAAA,QAAAA,EAAK;AAAA,IACP;AAAA,IAEA,OAAO;AAAA,MACL,KAAKxB;AAAA,MACL,MAAMQ;AAAA,MACN,mBAAmBE;AAAA,MACnB,aAAaG;AAAA,IAAA;AAAA,EACf;AAGF,WAASsB,EAAqBC,GAAqB;AACjD,UAAM,EAAE,QAAAC,GAAQ,QAAAC,EAAA,IAAWF,GACrB,EAAE,OAAAG,MAAUF;AAClB,IAAKE,KAELb,EAAqB,QAAQ,CAACc,MAAQ;ADjEnC,UAAAjD,GAAAC,GAAAC,GAAAgD;ACkED,YAAM,EAAE,QAAApE,GAAQ,QAAApB,EAAA,IAAWuF,GACrB,EAAE,QAAA5E,GAAQ,SAAA8E,GAAS,YAAAC,EAAA,IAAetE;AACxC,UAAI,CAACqE,EAAS;AAEd,YAAMzC,IAAI,KAAK,IAAIyC,EAAQ,QAAQ9E,EAAO,MAAM;AAKhD,UAHA2E,EAAM,KAAA,GAGFtF,EAAO,0BAA0B0F,KAAcA,EAAW,WAAW1C,GAAG;AAC1E,QAAAsC,EAAM,UAAA;AACN,cAAMK,IAAU3F,EAAO,mBAAmB;AAC1C,QAAAsF,EAAM,eAAahD,IAAAtC,EAAO,cAAP,gBAAAsC,EAAkB,UAAS,aAAa,KAAK,MAAMqD,IAAU,GAAG,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAGjH,iBAAS/E,IAAI,GAAGA,IAAIoC,GAAGpC,KAAK;AAC1B,gBAAMgF,IAAKP,EAAO,aAAaI,EAAQ7E,CAAC,CAAC,GACnCiF,IAAKR,EAAO,aAAa1E,EAAOC,CAAC,IAAI8E,EAAW9E,CAAC,CAAC;AACxD,UAAIA,MAAM,IAAG0E,EAAM,OAAOM,GAAIC,CAAE,IAC3BP,EAAM,OAAOM,GAAIC,CAAE;AAAA,QAC1B;AAGA,iBAASjF,IAAIoC,IAAI,GAAGpC,KAAK,GAAGA,KAAK;AAC/B,gBAAMgF,IAAKP,EAAO,aAAaI,EAAQ7E,CAAC,CAAC,GACnCiF,IAAKR,EAAO,aAAa1E,EAAOC,CAAC,IAAI8E,EAAW9E,CAAC,CAAC;AACxD,UAAA0E,EAAM,OAAOM,GAAIC,CAAE;AAAA,QACrB;AAEA,QAAAP,EAAM,UAAA,GACNA,EAAM,KAAA;AAAA,MACR;AAGA,MAAAA,EAAM,UAAA,GACNA,EAAM,gBAAc/C,IAAAvC,EAAO,cAAP,gBAAAuC,EAAkB,UAAS,WAC/C+C,EAAM,cAAY9C,IAAAxC,EAAO,cAAP,gBAAAwC,EAAkB,UAAS,IACzCgD,IAAAxF,EAAO,cAAP,QAAAwF,EAAkB,UAAY,YAAYxF,EAAO,UAAU,IAAI;AAEnE,eAASY,IAAI,GAAGA,IAAIoC,GAAGpC,KAAK;AAC1B,cAAMgF,IAAKP,EAAO,aAAaI,EAAQ7E,CAAC,CAAC,GACnCiF,IAAKR,EAAO,aAAa1E,EAAOC,CAAC,CAAC;AACxC,QAAIA,MAAM,IAAG0E,EAAM,OAAOM,GAAIC,CAAE,IAC3BP,EAAM,OAAOM,GAAIC,CAAE;AAAA,MAC1B;AACA,MAAAP,EAAM,OAAA,GAENA,EAAM,QAAA;AAAA,IACR,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,UAAUlB;AAAA,IAEV,OAAO0B,GAAkB;AACvB,MAAAvB,IAAMuB;AAAA,IACR;AAAA,IAEA,gBAAgBX,GAAqBY,GAA0B;AAC7D,MAAAb,EAAqBC,CAAI;AAAA,IAC3B;AAAA,IAEA,KAAAR;AAAA,EAAA;AAEJ;"}
|
|
1
|
+
{"version":3,"file":"ml-integration.js","sources":["../../src/plugins/ml-integration/native-algorithms.ts","../../src/plugins/ml-integration/index.ts"],"sourcesContent":["/**\n * Native ML Integration Plugin - Core Algorithms\n * \n * Implements machine learning algorithms natively without third-party dependencies.\n * Includes simple neural networks, statistical models, and signal processing.\n * \n * @packageDocumentation\n * @module plugins/ml-integration\n */\n\nimport type {\n MLModelAPI,\n ModelConfig,\n PredictionInput,\n PredictionResult\n} from './types';\n\n// ============================================\n// Native Neural Network Implementation\n// ============================================\n\ninterface NativeNeuralNetwork {\n layers: NeuralLayer[];\n learningRate: number;\n epochs: number;\n}\n\ninterface NeuralLayer {\n type: 'dense' | 'activation';\n weights: number[][];\n biases: number[];\n activation?: 'relu' | 'sigmoid' | 'tanh' | 'linear';\n}\n\nexport class SimpleNeuralNetwork implements MLModelAPI {\n private network: NativeNeuralNetwork;\n private config: ModelConfig;\n private ready = false;\n\n constructor(config: ModelConfig) {\n this.config = config;\n this.network = {\n layers: [],\n learningRate: 0.01,\n epochs: 100\n };\n }\n\n get id(): string { return this.config.id; }\n get name(): string { return this.config.name; }\n get type(): string { return this.config.type; }\n\n async predict(input: PredictionInput): Promise<PredictionResult> {\n const startTime = performance.now();\n \n const inputData = Array.from(input.data as number[]);\n const outputData = this.forwardPass(inputData);\n \n const processingTime = performance.now() - startTime;\n\n return {\n modelId: this.config.id,\n output: new Float32Array(outputData),\n outputShape: [outputData.length],\n timestamp: Date.now(),\n processingTime\n };\n }\n\n private forwardPass(input: number[]): number[] {\n let activations = input;\n \n for (const layer of this.network.layers) {\n if (layer.type === 'dense') {\n activations = this.denseLayer(activations, layer.weights, layer.biases);\n }\n \n if (layer.activation) {\n activations = this.applyActivation(activations, layer.activation);\n }\n }\n \n return activations;\n }\n\n private denseLayer(input: number[], weights: number[][], biases: number[]): number[] {\n const output: number[] = [];\n for (let i = 0; i < weights.length; i++) {\n let sum = biases[i];\n for (let j = 0; j < input.length; j++) {\n sum += input[j] * weights[i][j];\n }\n output.push(sum);\n }\n return output;\n }\n\n private applyActivation(input: number[], activation: string): number[] {\n switch (activation) {\n case 'relu':\n return input.map(x => Math.max(0, x));\n case 'sigmoid':\n return input.map(x => 1 / (1 + Math.exp(-x)));\n case 'tanh':\n return input.map(x => Math.tanh(x));\n default:\n return input;\n }\n }\n\n getInfo(): ModelConfig {\n return { ...this.config };\n }\n\n isReady(): boolean {\n return this.ready;\n }\n\n async warmup(): Promise<void> {\n const dummyInput = new Array(10).fill(0.1);\n await this.predict({ data: dummyInput });\n this.ready = true;\n }\n\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================\n// Native Statistical Models\n// ============================================\n\n/** Result returned when training a small on-chart model (task 3.17). */\nexport interface TrainingResult {\n coefficients: number[];\n intercept: number;\n /** Fitted values for the training inputs. */\n fitted: number[];\n /** Residuals (observed - fitted), suitable for a residual plot. */\n residuals: number[];\n /** Coefficient of determination on the training set. */\n r2: number;\n /** Root mean squared error on the training set. */\n rmse: number;\n}\n\nexport class NativeLinearRegression implements MLModelAPI {\n private config: ModelConfig;\n private coefficients: number[] = [];\n private intercept = 0;\n private ready = false;\n private lastTraining: TrainingResult | null = null;\n\n constructor(config: ModelConfig) {\n this.config = config;\n }\n\n get id(): string { return this.config.id; }\n get name(): string { return this.config.name; }\n get type(): string { return this.config.type; }\n\n async predict(input: PredictionInput): Promise<PredictionResult> {\n const startTime = performance.now();\n\n // Each input entry is treated as a single-feature observation.\n const inputData = Array.from(input.data);\n const predictions = inputData.map((x) => {\n const feat = x as number;\n let result = this.intercept;\n // Univariate: only the first coefficient multiplies the scalar input.\n // Multivariate models should call `predictRows`.\n if (this.coefficients.length > 0) {\n result += this.coefficients[0] * feat;\n }\n return result;\n });\n\n const processingTime = performance.now() - startTime;\n\n return {\n modelId: this.config.id,\n output: new Float32Array(predictions),\n outputShape: [predictions.length],\n timestamp: Date.now(),\n processingTime\n };\n }\n\n /** Predict from full feature rows (multivariate). */\n predictRows(rows: number[][]): number[] {\n return rows.map((row) => {\n let result = this.intercept;\n for (let i = 0; i < this.coefficients.length && i < row.length; i++) {\n result += this.coefficients[i] * row[i];\n }\n return result;\n });\n }\n\n train(data: { x: number[][], y: number[] }): TrainingResult {\n const n = data.x.length;\n\n // Design matrix with an intercept column.\n const X: number[][] = [];\n for (let i = 0; i < n; i++) {\n X.push([1, ...data.x[i]]);\n }\n\n // Normal equation: β = (XᵀX)⁻¹ Xᵀy\n const XtX = matrixMultiply(transpose(X), X);\n const XtY = matrixMultiply(transpose(X), data.y.map((y) => [y]));\n\n const XtXInv = matrixInverse(XtX);\n const beta = matrixMultiply(XtXInv, XtY);\n\n this.intercept = beta[0][0];\n this.coefficients = beta.slice(1).map((row) => row[0]);\n this.ready = true;\n\n // Fit diagnostics for a residual plot.\n const fitted = this.predictRows(data.x);\n const residuals = data.y.map((y, i) => y - fitted[i]);\n const meanY = data.y.reduce((s, v) => s + v, 0) / (n || 1);\n const sse = residuals.reduce((s, r) => s + r * r, 0);\n const sst = data.y.reduce((s, y) => s + (y - meanY) ** 2, 0);\n const r2 = sst > 0 ? 1 - sse / sst : 0;\n const rmse = Math.sqrt(sse / (n || 1));\n\n this.lastTraining = { coefficients: this.coefficients, intercept: this.intercept, fitted, residuals, r2, rmse };\n return this.lastTraining;\n }\n\n getTrainingResult(): TrainingResult | null {\n return this.lastTraining;\n }\n\n getInfo(): ModelConfig {\n return { ...this.config };\n }\n\n isReady(): boolean {\n return this.ready;\n }\n\n async warmup(): Promise<void> {\n this.coefficients = [1.0];\n this.intercept = 0.0;\n this.ready = true;\n }\n\n dispose(): void {\n this.ready = false;\n this.lastTraining = null;\n }\n}\n\n// ============================================\n// Matrix utilities (general purpose)\n// ============================================\n\nfunction transpose(matrix: number[][]): number[][] {\n return matrix[0].map((_, colIndex) => matrix.map((row) => row[colIndex]));\n}\n\nfunction matrixMultiply(a: number[][], b: number[][]): number[][] {\n const result: number[][] = [];\n for (let i = 0; i < a.length; i++) {\n result[i] = [];\n for (let j = 0; j < b[0].length; j++) {\n let sum = 0;\n for (let k = 0; k < b.length; k++) {\n sum += a[i][k] * b[k][j];\n }\n result[i][j] = sum;\n }\n }\n return result;\n}\n\n/**\n * General square-matrix inverse via Gauss-Jordan elimination with partial\n * pivoting. Falls back to the identity for singular matrices so callers never\n * receive NaNs. Replaces the previous 2x2-only stub (task 3.17 fix).\n */\nexport function matrixInverse(matrix: number[][]): number[][] {\n const n = matrix.length;\n // Augment [A | I]\n const M = matrix.map((row, i) => [\n ...row,\n ...Array.from({ length: n }, (_, j) => (i === j ? 1 : 0)),\n ]);\n\n for (let col = 0; col < n; col++) {\n // Partial pivot\n let pivot = col;\n for (let r = col + 1; r < n; r++) {\n if (Math.abs(M[r][col]) > Math.abs(M[pivot][col])) pivot = r;\n }\n if (Math.abs(M[pivot][col]) < 1e-12) {\n // Singular - return identity as a safe fallback.\n return matrix.map((row, i) => row.map((_, j) => (i === j ? 1 : 0)));\n }\n [M[col], M[pivot]] = [M[pivot], M[col]];\n\n const pivotVal = M[col][col];\n for (let c = 0; c < 2 * n; c++) M[col][c] /= pivotVal;\n\n for (let r = 0; r < n; r++) {\n if (r === col) continue;\n const factor = M[r][col];\n for (let c = 0; c < 2 * n; c++) M[r][c] -= factor * M[col][c];\n }\n }\n\n return M.map((row) => row.slice(n));\n}\n\n// ============================================\n// Native Signal Processing\n// ============================================\n\nexport class NativeSignalProcessor implements MLModelAPI {\n private config: ModelConfig;\n private filterType: 'lowpass' | 'highpass' | 'bandpass';\n private cutoffFrequency: number;\n private sampleRate: number;\n private ready = false;\n\n constructor(config: ModelConfig) {\n this.config = config;\n // Extract parameters from metadata\n this.filterType = (config.metadata?.filterType as any) || 'lowpass';\n this.cutoffFrequency = config.metadata?.cutoffFrequency || 1000;\n this.sampleRate = config.metadata?.sampleRate || 44100;\n }\n\n get id(): string { return this.config.id; }\n get name(): string { return this.config.name; }\n get type(): string { return this.config.type; }\n\n async predict(input: PredictionInput): Promise<PredictionResult> {\n const startTime = performance.now();\n \n const inputData = Array.from(input.data as number[]);\n const filteredData = this.applyFilter(inputData);\n \n const processingTime = performance.now() - startTime;\n\n return {\n modelId: this.config.id,\n output: new Float32Array(filteredData),\n outputShape: [filteredData.length],\n timestamp: Date.now(),\n processingTime\n };\n }\n\n private applyFilter(data: number[]): number[] {\n switch (this.filterType) {\n case 'lowpass':\n return this.lowpassFilter(data);\n case 'highpass':\n return this.highpassFilter(data);\n case 'bandpass':\n return this.bandpassFilter(data);\n default:\n return data;\n }\n }\n\n private lowpassFilter(data: number[]): number[] {\n // Simple exponential moving average low-pass filter\n const alpha = 2 * Math.PI * this.cutoffFrequency / this.sampleRate;\n const smoothedAlpha = alpha / (1 + alpha);\n \n const filtered: number[] = [data[0]];\n for (let i = 1; i < data.length; i++) {\n filtered.push(smoothedAlpha * data[i] + (1 - smoothedAlpha) * filtered[i - 1]);\n }\n return filtered;\n }\n\n private highpassFilter(data: number[]): number[] {\n // High-pass filter using difference\n const filtered: number[] = [];\n for (let i = 1; i < data.length; i++) {\n filtered.push(data[i] - data[i - 1]);\n }\n return filtered;\n }\n\n private bandpassFilter(data: number[]): number[] {\n // Band-pass filter using combination of low-pass and high-pass\n const lowpass = this.lowpassFilter(data);\n return this.highpassFilter(lowpass);\n }\n\n getInfo(): ModelConfig {\n return { ...this.config };\n }\n\n isReady(): boolean {\n return this.ready;\n }\n\n async warmup(): Promise<void> {\n this.ready = true;\n }\n\n dispose(): void {\n this.ready = false;\n }\n}\n\n// ============================================\n// Native Model Factory\n// ============================================\n\nexport function createNativeModel(config: ModelConfig): MLModelAPI {\n switch (config.type) {\n case 'neural-network':\n return new SimpleNeuralNetwork(config);\n case 'linear-regression':\n return new NativeLinearRegression(config);\n case 'signal-processor':\n return new NativeSignalProcessor(config);\n default:\n // Default to simple linear model\n return new NativeLinearRegression(config);\n }\n}\n\n// ============================================\n// Native FFT Implementation\n// ============================================\n\nexport function nativeFFT(data: number[]): { real: number[]; imag: number[] } {\n const n = data.length;\n const real: number[] = new Array(n);\n const imag: number[] = new Array(n);\n \n // Simplified DFT (not optimized FFT)\n for (let k = 0; k < n; k++) {\n let sumReal = 0;\n let sumImag = 0;\n \n for (let t = 0; t < n; t++) {\n const angle = -2 * Math.PI * k * t / n;\n sumReal += data[t] * Math.cos(angle);\n sumImag += data[t] * Math.sin(angle);\n }\n \n real[k] = sumReal;\n imag[k] = sumImag;\n }\n \n return { real, imag };\n}\n\n// ============================================\n// Native Statistical Functions\n// ============================================\n\nexport function nativeMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n}\n\nexport function nativeStandardDeviation(data: number[]): number {\n const mean = nativeMean(data);\n const variance = data.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / data.length;\n return Math.sqrt(variance);\n}\n\nexport function nativeCorrelation(x: number[], y: number[]): number {\n const n = x.length;\n const meanX = nativeMean(x);\n const meanY = nativeMean(y);\n \n let numerator = 0;\n let denomX = 0;\n let denomY = 0;\n \n for (let i = 0; i < n; i++) {\n const dx = x[i] - meanX;\n const dy = y[i] - meanY;\n numerator += dx * dy;\n denomX += dx * dx;\n denomY += dy * dy;\n }\n \n return numerator / Math.sqrt(denomX * denomY);\n}","import type { \n PluginMLIntegrationConfig, \n MLIntegrationAPI, \n MLModelAPI, \n PredictionResult, \n VisualizationConfig\n} from './types';\nimport { \n createNativeModel,\n nativeFFT, \n nativeMean, \n nativeStandardDeviation, \n nativeCorrelation \n} from './native-algorithms';\nimport type { \n PluginManifest, \n ChartPlugin, \n PluginContext,\n AfterRenderEvent\n} from '../types';\n\nconst manifestML: PluginManifest = {\n name: \"velo-plot-ml-integration\",\n version: \"1.0.0\",\n description: \"Machine Learning Integration Bridge for Velo Plot\",\n provides: [\"ml\", \"prediction\", \"inference\"],\n tags: [\"ml\", \"ai\", \"analysis\"],\n};\n\nexport function PluginMLIntegration(\n userConfig: Partial<PluginMLIntegrationConfig> = {}\n): ChartPlugin<PluginMLIntegrationConfig> {\n let ctx: PluginContext | null = null;\n const models = new Map<string, MLModelAPI>();\n const activeVisualizations = new Map<string, { result: PredictionResult, config: VisualizationConfig }>();\n\n // Register initial models from config\n if (userConfig.models) {\n userConfig.models.forEach(m => models.set(m.id, createNativeModel(m)));\n }\n\n const api: MLIntegrationAPI & Record<string, unknown> = {\n registerModel(model: MLModelAPI) {\n if (!model.id) {\n ctx?.log.error(\"Cannot register model without id\");\n return;\n }\n models.set(model.id, model);\n ctx?.log.info(`Model registered: ${model.name || 'Unnamed'} (${model.id})`);\n },\n\n async runInference(modelId: string, seriesId: string) {\n const model = models.get(modelId);\n if (!model) throw new Error(`Model not found: ${modelId}`);\n\n const seriesData = ctx?.data.getSeriesData(seriesId);\n if (!seriesData) throw new Error(`Series not found: ${seriesId}`);\n\n // Convert to Float32Array for model compatibility\n const data = new Float32Array(seriesData.y);\n\n const result = await model.predict({ data });\n // Attach X values for visualization\n result.xValues = seriesData.x;\n return result;\n },\n\n visualizeResults(result: PredictionResult, config: VisualizationConfig = {}) {\n const vizId = `ml-viz-${Math.random().toString(36).substr(2, 9)}`;\n activeVisualizations.set(vizId, { \n result, \n config: { ...userConfig.defaultVisualization, ...config } \n });\n ctx?.requestRender();\n return vizId;\n },\n\n clearResults(visualizationId?: string) {\n if (visualizationId) {\n activeVisualizations.delete(visualizationId);\n } else {\n activeVisualizations.clear();\n }\n ctx?.requestRender();\n },\n\n /**\n * Alias for {@link visualizeResults} that reads as an intent-revealing\n * name for the prediction-overlay use case (task 3.18).\n */\n visualizePredictions(result: PredictionResult, config: VisualizationConfig = {}) {\n return api.visualizeResults(result, config);\n },\n\n /**\n * Train a small regression model on the fly (task 3.17). Creates a native\n * linear-regression model when the id does not yet exist. Returns fit\n * diagnostics including residuals for a residual plot.\n */\n trainModel(modelId: string, data: { x: number[][]; y: number[] }) {\n let model = models.get(modelId) as any;\n if (!model) {\n model = createNativeModel({ id: modelId, name: modelId, type: 'linear-regression' });\n models.set(modelId, model);\n }\n if (typeof model.train !== 'function') {\n throw new Error(`Model '${modelId}' does not support training`);\n }\n return model.train(data);\n },\n\n /** Retrieve the last training diagnostics for a model, if any. */\n getTrainingResult(modelId: string) {\n const model = models.get(modelId) as any;\n return model?.getTrainingResult?.() ?? null;\n },\n\n /** List registered model descriptors (for the ML audit / introspection). */\n listModels() {\n return Array.from(models.values()).map((m) => m.getInfo());\n },\n\n stats: {\n fft: nativeFFT,\n mean: nativeMean,\n standardDeviation: nativeStandardDeviation,\n correlation: nativeCorrelation\n }\n };\n\n function drawMLVisualizations(pCtx: PluginContext) {\n const { render, coords } = pCtx;\n const { ctx2d } = render;\n if (!ctx2d) return;\n\n activeVisualizations.forEach((viz) => {\n const { result, config } = viz;\n const { output, xValues, confidence } = result;\n if (!xValues) return;\n\n const n = Math.min(xValues.length, output.length);\n\n ctx2d.save();\n\n // 1. Draw Confidence Interval (as filled area)\n if (config.showConfidenceInterval && confidence && confidence.length === n) {\n ctx2d.beginPath();\n const opacity = config.intervalOpacity ?? 0.2;\n ctx2d.fillStyle = (config.lineStyle?.color || '#3b82f6') + Math.floor(opacity * 255).toString(16).padStart(2, '0');\n \n // Forward: upper bound\n for (let i = 0; i < n; i++) {\n const px = coords.dataToPixelX(xValues[i]);\n const py = coords.dataToPixelY(output[i] + confidence[i]);\n if (i === 0) ctx2d.moveTo(px, py);\n else ctx2d.lineTo(px, py);\n }\n \n // Backward: lower bound\n for (let i = n - 1; i >= 0; i--) {\n const px = coords.dataToPixelX(xValues[i]);\n const py = coords.dataToPixelY(output[i] - confidence[i]);\n ctx2d.lineTo(px, py);\n }\n \n ctx2d.closePath();\n ctx2d.fill();\n }\n\n // 2. Draw Prediction Line\n ctx2d.beginPath();\n ctx2d.strokeStyle = config.lineStyle?.color || '#3b82f6';\n ctx2d.lineWidth = config.lineStyle?.width || 2;\n if (config.lineStyle?.dash) ctx2d.setLineDash(config.lineStyle.dash);\n\n for (let i = 0; i < n; i++) {\n const px = coords.dataToPixelX(xValues[i]);\n const py = coords.dataToPixelY(output[i]);\n if (i === 0) ctx2d.moveTo(px, py);\n else ctx2d.lineTo(px, py);\n }\n ctx2d.stroke();\n\n ctx2d.restore();\n });\n }\n\n return {\n manifest: manifestML,\n\n onInit(c: PluginContext) {\n ctx = c;\n },\n\n onRenderOverlay(pCtx: PluginContext, _event: AfterRenderEvent) {\n drawMLVisualizations(pCtx);\n },\n\n api\n };\n}\n\nexport default PluginMLIntegration;\n\nexport type { \n PluginMLIntegrationConfig, \n MLIntegrationAPI, \n MLModelAPI, \n PredictionResult, \n VisualizationConfig \n} from './types';"],"names":["SimpleNeuralNetwork","config","__publicField","input","startTime","inputData","outputData","processingTime","activations","layer","weights","biases","output","i","sum","j","activation","x","dummyInput","NativeLinearRegression","predictions","feat","result","rows","row","data","X","XtX","matrixMultiply","transpose","XtY","y","XtXInv","matrixInverse","beta","fitted","residuals","meanY","s","v","sse","r","sst","r2","rmse","matrix","_","colIndex","a","b","k","n","M","col","pivot","pivotVal","c","factor","NativeSignalProcessor","_a","_b","_c","filteredData","alpha","smoothedAlpha","filtered","lowpass","createNativeModel","nativeFFT","real","imag","sumReal","sumImag","t","angle","nativeMean","val","nativeStandardDeviation","mean","variance","nativeCorrelation","meanX","numerator","denomX","denomY","dx","dy","manifestML","PluginMLIntegration","userConfig","ctx","models","activeVisualizations","m","api","model","modelId","seriesId","seriesData","vizId","visualizationId","drawMLVisualizations","pCtx","render","coords","ctx2d","viz","_d","xValues","confidence","opacity","px","py","_event"],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './offscreen/index'
|
|
2
|
-
import
|
|
3
|
-
export default
|
|
2
|
+
import VeloPlot from './offscreen/index'
|
|
3
|
+
export default VeloPlot
|