velo-plot 1.11.1 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +35 -2
  2. package/dist/{index.core-CYu3tydL.js → ChartCore-BimVvUEg.js} +1936 -1588
  3. package/dist/ChartCore-BimVvUEg.js.map +1 -0
  4. package/dist/axisFormat-B7o_uIEA.js +127 -0
  5. package/dist/axisFormat-B7o_uIEA.js.map +1 -0
  6. package/dist/core/OverlayRenderer.d.ts +1 -2
  7. package/dist/core/chart/ChartCore.d.ts +18 -1
  8. package/dist/core/chart/ChartRenderLoop.d.ts +4 -0
  9. package/dist/core/chart/ChartScaling.d.ts +11 -0
  10. package/dist/core/chart/NavigationUtils.d.ts +12 -0
  11. package/dist/core/chart/exporter/SVGExporter.d.ts +7 -2
  12. package/dist/core/chart/types.d.ts +13 -1
  13. package/dist/core/format/axisFormat.d.ts +16 -0
  14. package/dist/core/indicator/buildIndicatorPane.d.ts +22 -0
  15. package/dist/core/indicator/buildIndicatorSeries.d.ts +14 -0
  16. package/dist/core/indicator/index.d.ts +3 -0
  17. package/dist/core/indicator/types.d.ts +74 -0
  18. package/dist/core/render/pixelSnap.d.ts +8 -0
  19. package/dist/core/series/SeriesBounds.d.ts +1 -1
  20. package/dist/core/stacked/createStackedChart.d.ts +3 -0
  21. package/dist/core/stacked/index.d.ts +6 -0
  22. package/dist/core/stacked/paneAxis.d.ts +20 -0
  23. package/dist/core/stacked/paneResize.d.ts +29 -0
  24. package/dist/core/stacked/stackExport.d.ts +18 -0
  25. package/dist/core/stacked/types.d.ts +120 -0
  26. package/dist/core/sync/index.d.ts +25 -70
  27. package/dist/createStackedChart-CjsKcOvX.js +1088 -0
  28. package/dist/createStackedChart-CjsKcOvX.js.map +1 -0
  29. package/dist/index-CUGS98p4.js +277 -0
  30. package/dist/index-CUGS98p4.js.map +1 -0
  31. package/dist/index-ChgIdk3N.js +229 -0
  32. package/dist/index-ChgIdk3N.js.map +1 -0
  33. package/dist/{index-D8ifudJH.js → index-DjeWClO9.js} +601 -561
  34. package/dist/index-DjeWClO9.js.map +1 -0
  35. package/dist/index.core-C_-CFftD.js +167 -0
  36. package/dist/index.core-C_-CFftD.js.map +1 -0
  37. package/dist/index.d.ts +2 -0
  38. package/dist/math-Ddm2EZjj.js +85 -0
  39. package/dist/math-Ddm2EZjj.js.map +1 -0
  40. package/dist/plugins/analysis.js +132 -130
  41. package/dist/plugins/analysis.js.map +1 -1
  42. package/dist/plugins/anomaly-detection.d.ts +1 -0
  43. package/dist/plugins/anomaly-detection.js +221 -0
  44. package/dist/plugins/anomaly-detection.js.map +1 -0
  45. package/dist/plugins/broken-axis.d.ts +3 -0
  46. package/dist/plugins/broken-axis.js +262 -0
  47. package/dist/plugins/broken-axis.js.map +1 -0
  48. package/dist/plugins/caching.d.ts +3 -0
  49. package/dist/plugins/caching.js +182 -0
  50. package/dist/plugins/caching.js.map +1 -0
  51. package/dist/plugins/data-transform.d.ts +3 -0
  52. package/dist/plugins/data-transform.js +146 -0
  53. package/dist/plugins/data-transform.js.map +1 -0
  54. package/dist/plugins/debug.js +12 -11
  55. package/dist/plugins/debug.js.map +1 -1
  56. package/dist/plugins/forecasting.d.ts +1 -0
  57. package/dist/plugins/forecasting.js +236 -0
  58. package/dist/plugins/forecasting.js.map +1 -0
  59. package/dist/plugins/latex.d.ts +1 -0
  60. package/dist/plugins/latex.js +454 -0
  61. package/dist/plugins/latex.js.map +1 -0
  62. package/dist/plugins/lazy-load.d.ts +3 -0
  63. package/dist/plugins/lazy-load.js +189 -0
  64. package/dist/plugins/lazy-load.js.map +1 -0
  65. package/dist/plugins/ml-integration.d.ts +3 -0
  66. package/dist/plugins/ml-integration.js +355 -0
  67. package/dist/plugins/ml-integration.js.map +1 -0
  68. package/dist/plugins/offscreen.d.ts +3 -0
  69. package/dist/plugins/offscreen.js +169 -0
  70. package/dist/plugins/offscreen.js.map +1 -0
  71. package/dist/plugins/pattern-recognition.d.ts +3 -0
  72. package/dist/plugins/pattern-recognition.js +690 -0
  73. package/dist/plugins/pattern-recognition.js.map +1 -0
  74. package/dist/plugins/radar.d.ts +3 -0
  75. package/dist/plugins/radar.js +103 -0
  76. package/dist/plugins/radar.js.map +1 -0
  77. package/dist/plugins/regression.d.ts +3 -0
  78. package/dist/plugins/regression.js +634 -0
  79. package/dist/plugins/regression.js.map +1 -0
  80. package/dist/plugins/roi.d.ts +1 -0
  81. package/dist/plugins/roi.js +223 -0
  82. package/dist/plugins/roi.js.map +1 -0
  83. package/dist/plugins/snapshot/types.d.ts +1 -1
  84. package/dist/plugins/snapshot.d.ts +3 -0
  85. package/dist/plugins/snapshot.js +90 -0
  86. package/dist/plugins/snapshot.js.map +1 -0
  87. package/dist/plugins/sync/index.d.ts +2 -1
  88. package/dist/plugins/sync.js +12 -244
  89. package/dist/plugins/sync.js.map +1 -1
  90. package/dist/plugins/tools/tooltip/TooltipManager.d.ts +9 -1
  91. package/dist/plugins/tools/tooltip/format.d.ts +7 -0
  92. package/dist/plugins/tools/tooltip/types.d.ts +6 -8
  93. package/dist/plugins/tools.js +1 -1
  94. package/dist/plugins/video-recorder.d.ts +3 -0
  95. package/dist/plugins/video-recorder.js +104 -0
  96. package/dist/plugins/video-recorder.js.map +1 -0
  97. package/dist/plugins/virtualization.d.ts +3 -0
  98. package/dist/plugins/virtualization.js +6 -0
  99. package/dist/plugins/virtualization.js.map +1 -0
  100. package/dist/react/index.d.ts +2 -1
  101. package/dist/react/useStackedPlot.d.ts +17 -0
  102. package/dist/react.d.ts +1 -0
  103. package/dist/react.js +31 -0
  104. package/dist/react.js.map +1 -0
  105. package/dist/types.d.ts +21 -1
  106. package/dist/utils-BK5UUXxj.js +172 -0
  107. package/dist/utils-BK5UUXxj.js.map +1 -0
  108. package/dist/velo-plot.full.js +1000 -5576
  109. package/dist/velo-plot.full.js.map +1 -1
  110. package/dist/velo-plot.js +23 -22
  111. package/dist/velo-plot.js.map +1 -1
  112. package/package.json +17 -3
  113. package/dist/EventEmitter-DAbs2K1C.js +0 -60
  114. package/dist/EventEmitter-DAbs2K1C.js.map +0 -1
  115. package/dist/index-D8ifudJH.js.map +0 -1
  116. package/dist/index.core-CYu3tydL.js.map +0 -1
  117. package/dist/utils-Dbro9-qM.js +0 -254
  118. package/dist/utils-Dbro9-qM.js.map +0 -1
@@ -0,0 +1,189 @@
1
+ const w = {
2
+ name: "velo-plot-lazy-load",
3
+ version: "1.0.0",
4
+ description: "Lazy loading for large datasets with viewport-based chunking",
5
+ provides: ["lazy-load", "data-streaming"],
6
+ tags: ["performance", "data", "optimization"]
7
+ }, v = {
8
+ enabled: !0,
9
+ chunkSize: 1e4,
10
+ viewportBuffer: 2,
11
+ autoLoad: !0,
12
+ autoUnload: !0,
13
+ unloadThreshold: 5,
14
+ preloadAdjacent: !0,
15
+ maxLoadedChunks: 100,
16
+ onLoadStart: () => {
17
+ },
18
+ onLoadProgress: () => {
19
+ },
20
+ onLoadComplete: () => {
21
+ },
22
+ onLoadError: () => {
23
+ },
24
+ debug: !1
25
+ };
26
+ function A(p = {}) {
27
+ const n = { ...v, ...p };
28
+ let u = null;
29
+ const c = /* @__PURE__ */ new Map();
30
+ function x(t) {
31
+ return Math.floor(t / n.chunkSize);
32
+ }
33
+ function z() {
34
+ if (!u) return null;
35
+ const t = u.data.getViewBounds();
36
+ return t ? { xMin: t.xMin, xMax: t.xMax } : null;
37
+ }
38
+ async function k(t, o) {
39
+ if (!(t.chunks.has(o) || t.loading.has(o))) {
40
+ t.loading.add(o);
41
+ try {
42
+ const a = o * n.chunkSize, r = Math.min(
43
+ a + n.chunkSize,
44
+ t.totalPoints
45
+ );
46
+ n.debug && console.log(`[LazyLoad] Loading chunk ${o} for ${t.id} (${a}-${r})`);
47
+ const e = await t.provider.loadChunk(a, r);
48
+ t.chunks.set(o, e), t.loading.delete(o), await C(t);
49
+ const i = Array.from(t.chunks.values()).reduce(
50
+ (l, f) => l + (f.endIndex - f.startIndex),
51
+ 0
52
+ ), s = Math.ceil(t.totalPoints / n.chunkSize), h = {
53
+ seriesId: t.id,
54
+ loadedPoints: i,
55
+ totalPoints: t.totalPoints,
56
+ progress: i / t.totalPoints,
57
+ currentChunk: o,
58
+ totalChunks: s
59
+ };
60
+ i === t.totalPoints ? n.onLoadComplete(h) : n.onLoadProgress(h);
61
+ } catch (a) {
62
+ t.loading.delete(o), n.onLoadError(a, t.id), n.debug && console.error(`[LazyLoad] Error loading chunk ${o}:`, a);
63
+ }
64
+ }
65
+ }
66
+ async function C(t) {
67
+ var s, h;
68
+ if (!u) return;
69
+ const o = Array.from(t.chunks.entries()).sort((l, f) => l[0] - f[0]);
70
+ if (o.length === 0) return;
71
+ let a = 0;
72
+ for (const [, l] of o)
73
+ a += l.x.length;
74
+ const r = new Float32Array(a), e = new Float32Array(a);
75
+ let i = 0;
76
+ for (const [, l] of o)
77
+ r.set(l.x, i), e.set(l.y, i), i += l.x.length;
78
+ (h = (s = u.chart).updateSeries) == null || h.call(s, t.id, { x: r, y: e });
79
+ }
80
+ async function g() {
81
+ if (!n.enabled || !u) return;
82
+ const t = z();
83
+ if (!t) return;
84
+ const o = n.viewportBuffer, a = t.xMax - t.xMin, r = {
85
+ xMin: t.xMin - a * o,
86
+ xMax: t.xMax + a * o
87
+ };
88
+ for (const [, e] of c) {
89
+ const i = [], s = Math.ceil(e.totalPoints / n.chunkSize), h = Math.max(0, Math.floor(r.xMin / n.chunkSize)), l = Math.min(s - 1, Math.floor(r.xMax / n.chunkSize));
90
+ for (let d = h; d <= l; d++)
91
+ !e.chunks.has(d) && !e.loading.has(d) && i.push(d);
92
+ const f = Math.min(i.length, 10);
93
+ for (let d = 0; d < f; d++)
94
+ await k(e, i[d]);
95
+ if (n.preloadAdjacent && l + 1 < s) {
96
+ const d = l + 1;
97
+ !e.chunks.has(d) && !e.loading.has(d) && k(e, d);
98
+ }
99
+ }
100
+ }
101
+ function L() {
102
+ if (!n.autoUnload || !u || !z()) return 0;
103
+ let o = 0;
104
+ for (const [, a] of c)
105
+ if (a.chunks.size > n.maxLoadedChunks) {
106
+ const r = Array.from(a.chunks.entries()).sort(
107
+ (i, s) => i[1].loadedAt - s[1].loadedAt
108
+ ), e = a.chunks.size - n.maxLoadedChunks;
109
+ for (let i = 0; i < e; i++)
110
+ a.chunks.delete(r[i][0]), o++;
111
+ }
112
+ return n.debug && o > 0 && console.log(`[LazyLoad] Unloaded ${o} chunks`), o;
113
+ }
114
+ function m(t, o) {
115
+ const a = o.getTotalCount();
116
+ c.set(t, {
117
+ id: t,
118
+ provider: o,
119
+ chunks: /* @__PURE__ */ new Map(),
120
+ loading: /* @__PURE__ */ new Set(),
121
+ totalPoints: a
122
+ }), n.debug && console.log(`[LazyLoad] Registered series ${t} with ${a} points`), n.onLoadStart({
123
+ seriesId: t,
124
+ loadedPoints: 0,
125
+ totalPoints: a,
126
+ progress: 0,
127
+ currentChunk: 0,
128
+ totalChunks: Math.ceil(a / n.chunkSize)
129
+ }), n.autoLoad && g();
130
+ }
131
+ function S(t) {
132
+ c.delete(t), n.debug && console.log(`[LazyLoad] Unregistered series ${t}`);
133
+ }
134
+ async function b(t, o, a) {
135
+ const r = c.get(t);
136
+ if (!r) return;
137
+ const e = x(o), i = x(a);
138
+ for (let s = e; s <= i; s++)
139
+ await k(r, s);
140
+ }
141
+ function P(t) {
142
+ const o = c.get(t);
143
+ return o ? {
144
+ loadedPoints: Array.from(o.chunks.values()).reduce(
145
+ (r, e) => r + (e.endIndex - e.startIndex),
146
+ 0
147
+ ),
148
+ totalPoints: o.totalPoints,
149
+ loadedChunks: o.chunks.size,
150
+ totalChunks: Math.ceil(o.totalPoints / n.chunkSize)
151
+ } : null;
152
+ }
153
+ function y() {
154
+ for (const [, t] of c)
155
+ t.chunks.clear(), t.loading.clear();
156
+ }
157
+ const M = {
158
+ registerSeries: m,
159
+ unregisterSeries: S,
160
+ loadRange: b,
161
+ loadVisible: g,
162
+ unloadDistant: L,
163
+ getLoadingStatus: P,
164
+ clear: y,
165
+ updateConfig(t) {
166
+ Object.assign(n, t);
167
+ }
168
+ };
169
+ return {
170
+ manifest: w,
171
+ onInit(t) {
172
+ var o, a, r, e;
173
+ u = t, u.chart.lazyLoad = M, n.autoLoad && ((a = (o = u.chart).on) == null || a.call(o, "zoom", () => {
174
+ g(), n.autoUnload && L();
175
+ }), (e = (r = u.chart).on) == null || e.call(r, "pan", () => {
176
+ g(), n.autoUnload && L();
177
+ }));
178
+ },
179
+ onDestroy(t) {
180
+ y(), delete t.chart.lazyLoad, u = null;
181
+ },
182
+ api: M
183
+ };
184
+ }
185
+ export {
186
+ A as PluginLazyLoad,
187
+ A as default
188
+ };
189
+ //# sourceMappingURL=lazy-load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-load.js","sources":["../../src/plugins/lazy-load/index.ts"],"sourcesContent":["/**\n * @fileoverview Lazy loading plugin for large datasets\n * @module plugins/lazy-load\n */\n\nimport type {\n PluginLazyLoadConfig,\n LazyLoadAPI,\n DataProvider,\n LazyLoadedSeries,\n LoadProgressEvent,\n} from './types';\nimport type {\n ChartPlugin,\n PluginContext,\n PluginManifest,\n} from '../types';\n\nconst manifest: PluginManifest = {\n name: 'velo-plot-lazy-load',\n version: '1.0.0',\n description: 'Lazy loading for large datasets with viewport-based chunking',\n provides: ['lazy-load', 'data-streaming'],\n tags: ['performance', 'data', 'optimization'],\n};\n\nconst DEFAULT_CONFIG: Required<PluginLazyLoadConfig> = {\n enabled: true,\n chunkSize: 10000,\n viewportBuffer: 2,\n autoLoad: true,\n autoUnload: true,\n unloadThreshold: 5,\n preloadAdjacent: true,\n maxLoadedChunks: 100,\n onLoadStart: () => {},\n onLoadProgress: () => {},\n onLoadComplete: () => {},\n onLoadError: () => {},\n debug: false,\n};\n\nexport function PluginLazyLoad(\n userConfig: Partial<PluginLazyLoadConfig> = {}\n): ChartPlugin<PluginLazyLoadConfig> {\n const config = { ...DEFAULT_CONFIG, ...userConfig };\n let ctx: PluginContext | null = null;\n\n // Registered series\n const series = new Map<string, LazyLoadedSeries>();\n\n /**\n * Calculate chunk index from point index\n */\n function getChunkIndex(pointIndex: number): number {\n return Math.floor(pointIndex / config.chunkSize);\n }\n\n /**\n * Get visible range from chart\n */\n function getVisibleRange(): { xMin: number; xMax: number } | null {\n if (!ctx) return null;\n \n // Get current view bounds from data context\n const bounds = ctx.data.getViewBounds();\n if (bounds) {\n return { xMin: bounds.xMin, xMax: bounds.xMax };\n }\n \n return null;\n }\n\n /**\n * Load a specific chunk\n */\n async function loadChunk(\n seriesInfo: LazyLoadedSeries,\n chunkIndex: number\n ): Promise<void> {\n // Already loaded or loading\n if (seriesInfo.chunks.has(chunkIndex) || seriesInfo.loading.has(chunkIndex)) {\n return;\n }\n\n seriesInfo.loading.add(chunkIndex);\n\n try {\n const startIndex = chunkIndex * config.chunkSize;\n const endIndex = Math.min(\n startIndex + config.chunkSize,\n seriesInfo.totalPoints\n );\n\n if (config.debug) {\n console.log(`[LazyLoad] Loading chunk ${chunkIndex} for ${seriesInfo.id} (${startIndex}-${endIndex})`);\n }\n\n const chunk = await seriesInfo.provider.loadChunk(startIndex, endIndex);\n \n seriesInfo.chunks.set(chunkIndex, chunk);\n seriesInfo.loading.delete(chunkIndex);\n\n // Update chart data\n await updateSeriesData(seriesInfo);\n\n // Fire progress event\n const loadedPoints = Array.from(seriesInfo.chunks.values()).reduce(\n (sum, c) => sum + (c.endIndex - c.startIndex),\n 0\n );\n\n const totalChunks = Math.ceil(seriesInfo.totalPoints / config.chunkSize);\n \n const event: LoadProgressEvent = {\n seriesId: seriesInfo.id,\n loadedPoints,\n totalPoints: seriesInfo.totalPoints,\n progress: loadedPoints / seriesInfo.totalPoints,\n currentChunk: chunkIndex,\n totalChunks,\n };\n\n if (loadedPoints === seriesInfo.totalPoints) {\n config.onLoadComplete(event);\n } else {\n config.onLoadProgress(event);\n }\n\n } catch (error) {\n seriesInfo.loading.delete(chunkIndex);\n config.onLoadError(error as Error, seriesInfo.id);\n \n if (config.debug) {\n console.error(`[LazyLoad] Error loading chunk ${chunkIndex}:`, error);\n }\n }\n }\n\n /**\n * Update series data from loaded chunks\n */\n async function updateSeriesData(seriesInfo: LazyLoadedSeries): Promise<void> {\n if (!ctx) return;\n\n // Merge all loaded chunks\n const sortedChunks = Array.from(seriesInfo.chunks.entries()).sort((a, b) => a[0] - b[0]);\n \n if (sortedChunks.length === 0) return;\n\n // Calculate total size\n let totalSize = 0;\n for (const [, chunk] of sortedChunks) {\n totalSize += chunk.x.length;\n }\n\n // Allocate arrays\n const x = new Float32Array(totalSize);\n const y = new Float32Array(totalSize);\n\n // Copy data\n let offset = 0;\n for (const [, chunk] of sortedChunks) {\n x.set(chunk.x, offset);\n y.set(chunk.y, offset);\n offset += chunk.x.length;\n }\n\n // Update series\n (ctx.chart as any).updateSeries?.(seriesInfo.id, { x, y });\n }\n\n /**\n * Load visible data\n */\n async function loadVisible(): Promise<void> {\n if (!config.enabled || !ctx) return;\n\n const visibleRange = getVisibleRange();\n if (!visibleRange) return;\n\n const buffer = config.viewportBuffer;\n const rangeWidth = visibleRange.xMax - visibleRange.xMin;\n const buffered = {\n xMin: visibleRange.xMin - rangeWidth * buffer,\n xMax: visibleRange.xMax + rangeWidth * buffer,\n };\n\n for (const [, seriesInfo] of series) {\n const chunksToLoad: number[] = [];\n const totalChunks = Math.ceil(seriesInfo.totalPoints / config.chunkSize);\n\n // Identify chunks within the buffered viewport\n const startIdx = Math.max(0, Math.floor(buffered.xMin / config.chunkSize));\n const endIdx = Math.min(totalChunks - 1, Math.floor(buffered.xMax / config.chunkSize));\n\n for (let i = startIdx; i <= endIdx; i++) {\n if (!seriesInfo.chunks.has(i) && !seriesInfo.loading.has(i)) {\n chunksToLoad.push(i);\n }\n }\n\n // Load chunks sequentially (limit to avoid flood)\n const maxToLoad = Math.min(chunksToLoad.length, 10);\n for (let i = 0; i < maxToLoad; i++) {\n await loadChunk(seriesInfo, chunksToLoad[i]);\n }\n\n // Preload next adjacent chunk if enabled\n if (config.preloadAdjacent && endIdx + 1 < totalChunks) {\n const nextChunk = endIdx + 1;\n if (!seriesInfo.chunks.has(nextChunk) && !seriesInfo.loading.has(nextChunk)) {\n loadChunk(seriesInfo, nextChunk); // Fire and forget\n }\n }\n }\n }\n\n /**\n * Unload distant chunks\n */\n function unloadDistant(): number {\n if (!config.autoUnload || !ctx) return 0;\n\n const visibleRange = getVisibleRange();\n if (!visibleRange) return 0;\n\n let unloadedCount = 0;\n\n for (const [, seriesInfo] of series) {\n // TODO: Implement distance-based unloading logic\n // For now, only maxLoadedChunks handles eviction\n\n // Enforce max chunks limit\n if (seriesInfo.chunks.size > config.maxLoadedChunks) {\n const sortedChunks = Array.from(seriesInfo.chunks.entries()).sort(\n (a, b) => a[1].loadedAt - b[1].loadedAt\n );\n \n const toRemove = seriesInfo.chunks.size - config.maxLoadedChunks;\n for (let i = 0; i < toRemove; i++) {\n seriesInfo.chunks.delete(sortedChunks[i][0]);\n unloadedCount++;\n }\n }\n }\n\n if (config.debug && unloadedCount > 0) {\n console.log(`[LazyLoad] Unloaded ${unloadedCount} chunks`);\n }\n\n return unloadedCount;\n }\n\n /**\n * Register a series\n */\n function registerSeries(seriesId: string, provider: DataProvider): void {\n const totalPoints = provider.getTotalCount();\n \n series.set(seriesId, {\n id: seriesId,\n provider,\n chunks: new Map(),\n loading: new Set(),\n totalPoints,\n });\n\n if (config.debug) {\n console.log(`[LazyLoad] Registered series ${seriesId} with ${totalPoints} points`);\n }\n\n // Fire load start event\n config.onLoadStart({\n seriesId,\n loadedPoints: 0,\n totalPoints,\n progress: 0,\n currentChunk: 0,\n totalChunks: Math.ceil(totalPoints / config.chunkSize),\n });\n\n // Auto-load if enabled\n if (config.autoLoad) {\n loadVisible();\n }\n }\n\n /**\n * Unregister a series\n */\n function unregisterSeries(seriesId: string): void {\n series.delete(seriesId);\n \n if (config.debug) {\n console.log(`[LazyLoad] Unregistered series ${seriesId}`);\n }\n }\n\n /**\n * Load specific range\n */\n async function loadRange(\n seriesId: string,\n startIndex: number,\n endIndex: number\n ): Promise<void> {\n const seriesInfo = series.get(seriesId);\n if (!seriesInfo) return;\n\n const startChunk = getChunkIndex(startIndex);\n const endChunk = getChunkIndex(endIndex);\n\n for (let i = startChunk; i <= endChunk; i++) {\n await loadChunk(seriesInfo, i);\n }\n }\n\n /**\n * Get loading status\n */\n function getLoadingStatus(seriesId: string) {\n const seriesInfo = series.get(seriesId);\n if (!seriesInfo) return null;\n\n const loadedPoints = Array.from(seriesInfo.chunks.values()).reduce(\n (sum, c) => sum + (c.endIndex - c.startIndex),\n 0\n );\n\n return {\n loadedPoints,\n totalPoints: seriesInfo.totalPoints,\n loadedChunks: seriesInfo.chunks.size,\n totalChunks: Math.ceil(seriesInfo.totalPoints / config.chunkSize),\n };\n }\n\n /**\n * Clear all data\n */\n function clear(): void {\n for (const [, seriesInfo] of series) {\n seriesInfo.chunks.clear();\n seriesInfo.loading.clear();\n }\n }\n\n // API implementation\n const api: LazyLoadAPI & Record<string, unknown> = {\n registerSeries,\n unregisterSeries,\n loadRange,\n loadVisible,\n unloadDistant,\n getLoadingStatus,\n clear,\n updateConfig(newConfig: Partial<PluginLazyLoadConfig>) {\n Object.assign(config, newConfig);\n },\n };\n\n return {\n manifest,\n\n onInit(pluginCtx: PluginContext) {\n ctx = pluginCtx;\n\n // Attach to chart API\n (ctx.chart as any).lazyLoad = api;\n\n // Listen for zoom/pan if auto-load enabled\n if (config.autoLoad) {\n ctx.chart.on?.('zoom', () => {\n loadVisible();\n if (config.autoUnload) {\n unloadDistant();\n }\n });\n\n ctx.chart.on?.('pan', () => {\n loadVisible();\n if (config.autoUnload) {\n unloadDistant();\n }\n });\n }\n },\n\n onDestroy(pluginCtx: PluginContext) {\n // Clear all data\n clear();\n\n // Remove from chart API\n delete (pluginCtx.chart as any).lazyLoad;\n\n ctx = null;\n },\n\n api,\n };\n}\n\nexport default PluginLazyLoad;\n\n// Type exports\nexport type {\n PluginLazyLoadConfig,\n LazyLoadAPI,\n DataProvider,\n DataChunk,\n LoadProgressEvent,\n} from './types';\n"],"names":["manifest","DEFAULT_CONFIG","PluginLazyLoad","userConfig","config","ctx","series","getChunkIndex","pointIndex","getVisibleRange","bounds","loadChunk","seriesInfo","chunkIndex","startIndex","endIndex","chunk","updateSeriesData","loadedPoints","sum","c","totalChunks","event","error","_a","_b","sortedChunks","a","b","totalSize","x","y","offset","loadVisible","visibleRange","buffer","rangeWidth","buffered","chunksToLoad","startIdx","endIdx","i","maxToLoad","nextChunk","unloadDistant","unloadedCount","toRemove","registerSeries","seriesId","provider","totalPoints","unregisterSeries","loadRange","startChunk","endChunk","getLoadingStatus","clear","api","newConfig","pluginCtx","_c","_d"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './ml-integration/index'
2
+ import SciPlot from './ml-integration/index'
3
+ export default SciPlot
@@ -0,0 +1,355 @@
1
+ var A = Object.defineProperty;
2
+ var X = (i, t, n) => t in i ? A(i, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : i[t] = n;
3
+ var h = (i, t, n) => X(i, typeof t != "symbol" ? t + "" : t, n);
4
+ class b {
5
+ constructor(t) {
6
+ h(this, "network");
7
+ h(this, "config");
8
+ h(this, "ready", !1);
9
+ this.config = t, this.network = {
10
+ layers: [],
11
+ learningRate: 0.01,
12
+ epochs: 100
13
+ };
14
+ }
15
+ get id() {
16
+ return this.config.id;
17
+ }
18
+ get name() {
19
+ return this.config.name;
20
+ }
21
+ get type() {
22
+ return this.config.type;
23
+ }
24
+ async predict(t) {
25
+ const n = performance.now(), e = Array.from(t.data), r = this.forwardPass(e), o = performance.now() - n;
26
+ return {
27
+ modelId: this.config.id,
28
+ output: new Float32Array(r),
29
+ outputShape: [r.length],
30
+ timestamp: Date.now(),
31
+ processingTime: o
32
+ };
33
+ }
34
+ forwardPass(t) {
35
+ let n = t;
36
+ for (const e of this.network.layers)
37
+ e.type === "dense" && (n = this.denseLayer(n, e.weights, e.biases)), e.activation && (n = this.applyActivation(n, e.activation));
38
+ return n;
39
+ }
40
+ denseLayer(t, n, e) {
41
+ const r = [];
42
+ for (let o = 0; o < n.length; o++) {
43
+ let s = e[o];
44
+ for (let l = 0; l < t.length; l++)
45
+ s += t[l] * n[o][l];
46
+ r.push(s);
47
+ }
48
+ return r;
49
+ }
50
+ applyActivation(t, n) {
51
+ switch (n) {
52
+ case "relu":
53
+ return t.map((e) => Math.max(0, e));
54
+ case "sigmoid":
55
+ return t.map((e) => 1 / (1 + Math.exp(-e)));
56
+ case "tanh":
57
+ return t.map((e) => Math.tanh(e));
58
+ default:
59
+ return t;
60
+ }
61
+ }
62
+ getInfo() {
63
+ return { ...this.config };
64
+ }
65
+ isReady() {
66
+ return this.ready;
67
+ }
68
+ async warmup() {
69
+ const t = new Array(10).fill(0.1);
70
+ await this.predict({ data: t }), this.ready = !0;
71
+ }
72
+ dispose() {
73
+ this.ready = !1;
74
+ }
75
+ }
76
+ class R {
77
+ constructor(t) {
78
+ h(this, "config");
79
+ h(this, "coefficients", []);
80
+ h(this, "intercept", 0);
81
+ h(this, "ready", !1);
82
+ this.config = t;
83
+ }
84
+ get id() {
85
+ return this.config.id;
86
+ }
87
+ get name() {
88
+ return this.config.name;
89
+ }
90
+ get type() {
91
+ return this.config.type;
92
+ }
93
+ async predict(t) {
94
+ const n = performance.now(), r = Array.from(t.data).map((s) => {
95
+ let l = this.intercept;
96
+ for (let a = 0; a < this.coefficients.length && a < s; a++)
97
+ l += this.coefficients[a] * s;
98
+ return l;
99
+ }), o = performance.now() - n;
100
+ return {
101
+ modelId: this.config.id,
102
+ output: new Float32Array(r),
103
+ outputShape: [r.length],
104
+ timestamp: Date.now(),
105
+ processingTime: o
106
+ };
107
+ }
108
+ train(t) {
109
+ const n = t.x.length, e = [];
110
+ for (let a = 0; a < n; a++)
111
+ e.push([1, ...t.x[a]]);
112
+ const r = this.matrixMultiply(this.transpose(e), e), o = this.matrixMultiply(this.transpose(e), t.y.map((a) => [a])), s = this.matrixInverse(r), l = this.matrixMultiply(s, o);
113
+ this.intercept = l[0][0], this.coefficients = l.slice(1).map((a) => a[0]), this.ready = !0;
114
+ }
115
+ transpose(t) {
116
+ return t[0].map((n, e) => t.map((r) => r[e]));
117
+ }
118
+ matrixMultiply(t, n) {
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));
143
+ }
144
+ getInfo() {
145
+ return { ...this.config };
146
+ }
147
+ isReady() {
148
+ return this.ready;
149
+ }
150
+ async warmup() {
151
+ this.coefficients = [1], this.intercept = 0, this.ready = !0;
152
+ }
153
+ dispose() {
154
+ this.ready = !1;
155
+ }
156
+ }
157
+ class k {
158
+ constructor(t) {
159
+ h(this, "config");
160
+ h(this, "filterType");
161
+ h(this, "cutoffFrequency");
162
+ h(this, "sampleRate");
163
+ h(this, "ready", !1);
164
+ var n, e, r;
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 = ((r = t.metadata) == null ? void 0 : r.sampleRate) || 44100;
166
+ }
167
+ get id() {
168
+ return this.config.id;
169
+ }
170
+ get name() {
171
+ return this.config.name;
172
+ }
173
+ get type() {
174
+ return this.config.type;
175
+ }
176
+ async predict(t) {
177
+ const n = performance.now(), e = Array.from(t.data), r = this.applyFilter(e), o = performance.now() - n;
178
+ return {
179
+ modelId: this.config.id,
180
+ output: new Float32Array(r),
181
+ outputShape: [r.length],
182
+ timestamp: Date.now(),
183
+ processingTime: o
184
+ };
185
+ }
186
+ applyFilter(t) {
187
+ switch (this.filterType) {
188
+ case "lowpass":
189
+ return this.lowpassFilter(t);
190
+ case "highpass":
191
+ return this.highpassFilter(t);
192
+ case "bandpass":
193
+ return this.bandpassFilter(t);
194
+ default:
195
+ return t;
196
+ }
197
+ }
198
+ lowpassFilter(t) {
199
+ const n = 2 * Math.PI * this.cutoffFrequency / this.sampleRate, e = n / (1 + n), r = [t[0]];
200
+ for (let o = 1; o < t.length; o++)
201
+ r.push(e * t[o] + (1 - e) * r[o - 1]);
202
+ return r;
203
+ }
204
+ highpassFilter(t) {
205
+ const n = [];
206
+ for (let e = 1; e < t.length; e++)
207
+ n.push(t[e] - t[e - 1]);
208
+ return n;
209
+ }
210
+ bandpassFilter(t) {
211
+ const n = this.lowpassFilter(t);
212
+ return this.highpassFilter(n);
213
+ }
214
+ getInfo() {
215
+ return { ...this.config };
216
+ }
217
+ isReady() {
218
+ return this.ready;
219
+ }
220
+ async warmup() {
221
+ this.ready = !0;
222
+ }
223
+ dispose() {
224
+ this.ready = !1;
225
+ }
226
+ }
227
+ function q(i) {
228
+ switch (i.type) {
229
+ case "neural-network":
230
+ return new b(i);
231
+ case "linear-regression":
232
+ return new R(i);
233
+ case "signal-processor":
234
+ return new k(i);
235
+ default:
236
+ return new R(i);
237
+ }
238
+ }
239
+ function L(i) {
240
+ const t = i.length, n = new Array(t), e = new Array(t);
241
+ for (let r = 0; r < t; r++) {
242
+ let o = 0, s = 0;
243
+ for (let l = 0; l < t; l++) {
244
+ const a = -2 * Math.PI * r * l / t;
245
+ o += i[l] * Math.cos(a), s += i[l] * Math.sin(a);
246
+ }
247
+ n[r] = o, e[r] = s;
248
+ }
249
+ return { real: n, imag: e };
250
+ }
251
+ function F(i) {
252
+ return i.reduce((t, n) => t + n, 0) / i.length;
253
+ }
254
+ function Y(i) {
255
+ const t = F(i), n = i.reduce((e, r) => e + Math.pow(r - t, 2), 0) / i.length;
256
+ return Math.sqrt(n);
257
+ }
258
+ function z(i, t) {
259
+ const n = i.length, e = F(i), r = F(t);
260
+ let o = 0, s = 0, l = 0;
261
+ for (let a = 0; a < n; a++) {
262
+ const c = i[a] - e, f = t[a] - r;
263
+ o += c * f, s += c * c, l += f * f;
264
+ }
265
+ return o / Math.sqrt(s * l);
266
+ }
267
+ const N = {
268
+ name: "velo-plot-ml-integration",
269
+ version: "1.0.0",
270
+ description: "Machine Learning Integration Bridge for Sci Plot",
271
+ provides: ["ml", "prediction", "inference"],
272
+ tags: ["ml", "ai", "analysis"]
273
+ };
274
+ function $(i = {}) {
275
+ let t = null;
276
+ const n = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map();
277
+ i.models && i.models.forEach((s) => n.set(s.id, q(s)));
278
+ const r = {
279
+ registerModel(s) {
280
+ if (!s.id) {
281
+ t == null || t.log.error("Cannot register model without id");
282
+ return;
283
+ }
284
+ n.set(s.id, s), t == null || t.log.info(`Model registered: ${s.name || "Unnamed"} (${s.id})`);
285
+ },
286
+ async runInference(s, l) {
287
+ const a = n.get(s);
288
+ if (!a) throw new Error(`Model not found: ${s}`);
289
+ const c = t == null ? void 0 : t.data.getSeriesData(l);
290
+ if (!c) throw new Error(`Series not found: ${l}`);
291
+ const f = new Float32Array(c.y), m = await a.predict({ data: f });
292
+ return m.xValues = c.x, m;
293
+ },
294
+ visualizeResults(s, l = {}) {
295
+ const a = `ml-viz-${Math.random().toString(36).substr(2, 9)}`;
296
+ return e.set(a, {
297
+ result: s,
298
+ config: { ...i.defaultVisualization, ...l }
299
+ }), t == null || t.requestRender(), a;
300
+ },
301
+ clearResults(s) {
302
+ s ? e.delete(s) : e.clear(), t == null || t.requestRender();
303
+ },
304
+ stats: {
305
+ fft: L,
306
+ mean: F,
307
+ standardDeviation: Y,
308
+ correlation: z
309
+ }
310
+ };
311
+ function o(s) {
312
+ const { render: l, coords: a } = s, { ctx2d: c } = l;
313
+ c && e.forEach((f) => {
314
+ var S, I, P, D;
315
+ const { result: m, config: p } = f, { output: w, xValues: y, confidence: v } = m;
316
+ if (!y) return;
317
+ const M = Math.min(y.length, w.length);
318
+ if (c.save(), p.showConfidenceInterval && v && v.length === M) {
319
+ c.beginPath();
320
+ const d = p.intervalOpacity ?? 0.2;
321
+ c.fillStyle = (((S = p.lineStyle) == null ? void 0 : S.color) || "#3b82f6") + Math.floor(d * 255).toString(16).padStart(2, "0");
322
+ for (let u = 0; u < M; u++) {
323
+ const g = a.dataToPixelX(y[u]), T = a.dataToPixelY(w[u] + v[u]);
324
+ u === 0 ? c.moveTo(g, T) : c.lineTo(g, T);
325
+ }
326
+ for (let u = M - 1; u >= 0; u--) {
327
+ const g = a.dataToPixelX(y[u]), T = a.dataToPixelY(w[u] - v[u]);
328
+ c.lineTo(g, T);
329
+ }
330
+ c.closePath(), c.fill();
331
+ }
332
+ c.beginPath(), c.strokeStyle = ((I = p.lineStyle) == null ? void 0 : I.color) || "#3b82f6", c.lineWidth = ((P = p.lineStyle) == null ? void 0 : P.width) || 2, (D = p.lineStyle) != null && D.dash && c.setLineDash(p.lineStyle.dash);
333
+ for (let d = 0; d < M; d++) {
334
+ const u = a.dataToPixelX(y[d]), g = a.dataToPixelY(w[d]);
335
+ d === 0 ? c.moveTo(u, g) : c.lineTo(u, g);
336
+ }
337
+ c.stroke(), c.restore();
338
+ });
339
+ }
340
+ return {
341
+ manifest: N,
342
+ onInit(s) {
343
+ t = s;
344
+ },
345
+ onRenderOverlay(s, l) {
346
+ o(s);
347
+ },
348
+ api: r
349
+ };
350
+ }
351
+ export {
352
+ $ as PluginMLIntegration,
353
+ $ as default
354
+ };
355
+ //# sourceMappingURL=ml-integration.js.map
@@ -0,0 +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":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './offscreen/index'
2
+ import SciPlot from './offscreen/index'
3
+ export default SciPlot