velo-plot 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/EventEmitter-DAbs2K1C.js +60 -0
  4. package/dist/EventEmitter-DAbs2K1C.js.map +1 -0
  5. package/dist/core/Chart.d.ts +15 -0
  6. package/dist/core/ChartControls.d.ts +41 -0
  7. package/dist/core/ChartInitQueue.d.ts +50 -0
  8. package/dist/core/ChartLegend.d.ts +74 -0
  9. package/dist/core/ChartStatistics.d.ts +18 -0
  10. package/dist/core/EventEmitter.d.ts +30 -0
  11. package/dist/core/InteractionManager.d.ts +96 -0
  12. package/dist/core/OverlayRenderer.d.ts +89 -0
  13. package/dist/core/Series.d.ts +4 -0
  14. package/dist/core/animation/AnimationEngine.d.ts +156 -0
  15. package/dist/core/animation/index.d.ts +6 -0
  16. package/dist/core/annotations/AnnotationManager.d.ts +61 -0
  17. package/dist/core/annotations/index.d.ts +5 -0
  18. package/dist/core/annotations/types.d.ts +159 -0
  19. package/dist/core/chart/ChartAnimatedNavigation.d.ts +53 -0
  20. package/dist/core/chart/ChartAxisManager.d.ts +61 -0
  21. package/dist/core/chart/ChartCore.d.ts +336 -0
  22. package/dist/core/chart/ChartExporter.d.ts +18 -0
  23. package/dist/core/chart/ChartNavigation.d.ts +33 -0
  24. package/dist/core/chart/ChartPluginBridge.d.ts +34 -0
  25. package/dist/core/chart/ChartRenderLoop.d.ts +100 -0
  26. package/dist/core/chart/ChartRenderer.d.ts +52 -0
  27. package/dist/core/chart/ChartScaling.d.ts +31 -0
  28. package/dist/core/chart/ChartSeries.d.ts +4 -0
  29. package/dist/core/chart/ChartSetup.d.ts +67 -0
  30. package/dist/core/chart/ChartStateManager.d.ts +54 -0
  31. package/dist/core/chart/ChartUI.d.ts +40 -0
  32. package/dist/core/chart/exporter/SVGExporter.d.ts +6 -0
  33. package/dist/core/chart/exporter/index.d.ts +5 -0
  34. package/dist/core/chart/index.d.ts +14 -0
  35. package/dist/core/chart/series/SeriesActions.d.ts +7 -0
  36. package/dist/core/chart/series/SeriesBuffer.d.ts +4 -0
  37. package/dist/core/chart/series/index.d.ts +6 -0
  38. package/dist/core/chart/series/types.d.ts +22 -0
  39. package/dist/core/chart/types.d.ts +188 -0
  40. package/dist/core/clipboard/index.d.ts +137 -0
  41. package/dist/core/debug/index.d.ts +143 -0
  42. package/dist/core/index.d.ts +17 -0
  43. package/dist/core/keybindings/index.d.ts +157 -0
  44. package/dist/core/layout/index.d.ts +12 -0
  45. package/dist/core/layout/types.d.ts +165 -0
  46. package/dist/core/loading/index.d.ts +104 -0
  47. package/dist/core/locale/index.d.ts +91 -0
  48. package/dist/core/responsive/ResponsiveManager.d.ts +133 -0
  49. package/dist/core/responsive/index.d.ts +4 -0
  50. package/dist/core/selection/SelectionManager.d.ts +165 -0
  51. package/dist/core/selection/index.d.ts +4 -0
  52. package/dist/core/series/Series.d.ts +73 -0
  53. package/dist/core/series/SeriesBounds.d.ts +3 -0
  54. package/dist/core/series/SeriesDataUtils.d.ts +7 -0
  55. package/dist/core/series/index.d.ts +6 -0
  56. package/dist/core/sync/index.d.ts +147 -0
  57. package/dist/core/theme-editor/index.d.ts +122 -0
  58. package/dist/examples/PluginDemonstration.d.ts +20 -0
  59. package/dist/examples.d.ts +25 -0
  60. package/dist/gpu/adapter/gpuRenderer.d.ts +135 -0
  61. package/dist/gpu/adapter/index.d.ts +7 -0
  62. package/dist/gpu/adapter/seriesAdapter.d.ts +88 -0
  63. package/dist/gpu/backends/webgl/WebGLBackend.d.ts +42 -0
  64. package/dist/gpu/backends/webgl/index.d.ts +5 -0
  65. package/dist/gpu/backends/webgl/programFactory.d.ts +30 -0
  66. package/dist/gpu/backends/webgl/shaders.d.ts +14 -0
  67. package/dist/gpu/backends/webgpu/MassiveDataRenderer.d.ts +111 -0
  68. package/dist/gpu/backends/webgpu/WebGPUBackend.d.ts +58 -0
  69. package/dist/gpu/backends/webgpu/pipelines/bandPipeline.d.ts +24 -0
  70. package/dist/gpu/backends/webgpu/pipelines/heatmapPipeline.d.ts +28 -0
  71. package/dist/gpu/backends/webgpu/pipelines/index.d.ts +10 -0
  72. package/dist/gpu/backends/webgpu/pipelines/instancedLinePipeline.d.ts +23 -0
  73. package/dist/gpu/backends/webgpu/pipelines/instancedPointPipeline.d.ts +25 -0
  74. package/dist/gpu/backends/webgpu/pipelines/linePipeline.d.ts +23 -0
  75. package/dist/gpu/backends/webgpu/pipelines/pointPipeline.d.ts +28 -0
  76. package/dist/gpu/backends/webgpu/pipelines/trianglePipeline.d.ts +5 -0
  77. package/dist/gpu/backends/webgpu/pipelines/triangleShader.d.ts +1 -0
  78. package/dist/gpu/backends/webgpu/shaders/heatmap.wgsl.d.ts +8 -0
  79. package/dist/gpu/backends/webgpu/shaders/index.d.ts +8 -0
  80. package/dist/gpu/backends/webgpu/shaders/instanced.wgsl.d.ts +16 -0
  81. package/dist/gpu/backends/webgpu/shaders/line.wgsl.d.ts +8 -0
  82. package/dist/gpu/backends/webgpu/shaders/point.wgsl.d.ts +9 -0
  83. package/dist/gpu/benchmark/benchmark.d.ts +74 -0
  84. package/dist/gpu/benchmark/index.d.ts +5 -0
  85. package/dist/gpu/compute/gpuCompute.d.ts +72 -0
  86. package/dist/gpu/compute/index.d.ts +6 -0
  87. package/dist/gpu/compute/shaders.d.ts +9 -0
  88. package/dist/gpu/drawList.d.ts +77 -0
  89. package/dist/gpu/examples/gallery.d.ts +20 -0
  90. package/dist/gpu/examples/index.d.ts +3 -0
  91. package/dist/gpu/examples/webgpu-line-demo.d.ts +8 -0
  92. package/dist/gpu/examples/webgpu-triangle.d.ts +1 -0
  93. package/dist/gpu/frame.d.ts +25 -0
  94. package/dist/gpu/index.d.ts +24 -0
  95. package/dist/gpu/resources/bufferStore.d.ts +40 -0
  96. package/dist/gpu/resources/index.d.ts +9 -0
  97. package/dist/gpu/resources/pipelineCache.d.ts +33 -0
  98. package/dist/gpu/resources/textureStore.d.ts +41 -0
  99. package/dist/gpu/types.d.ts +47 -0
  100. package/dist/index-BMiZoKmm.js +536 -0
  101. package/dist/index-BMiZoKmm.js.map +1 -0
  102. package/dist/index-Ce2JgkH_.js +282 -0
  103. package/dist/index-Ce2JgkH_.js.map +1 -0
  104. package/dist/index-D8ifudJH.js +2431 -0
  105. package/dist/index-D8ifudJH.js.map +1 -0
  106. package/dist/index-Dag88bW4.js +499 -0
  107. package/dist/index-Dag88bW4.js.map +1 -0
  108. package/dist/index-qhscKTDy.js +309 -0
  109. package/dist/index-qhscKTDy.js.map +1 -0
  110. package/dist/index-x4stH3jD.js +282 -0
  111. package/dist/index-x4stH3jD.js.map +1 -0
  112. package/dist/index.core-CYu3tydL.js +7252 -0
  113. package/dist/index.core-CYu3tydL.js.map +1 -0
  114. package/dist/index.core.d.ts +20 -0
  115. package/dist/index.d.ts +51 -0
  116. package/dist/overlay/CanvasOverlay.d.ts +102 -0
  117. package/dist/overlay/index.d.ts +4 -0
  118. package/dist/plugins/3d/Area3DRenderer.d.ts +122 -0
  119. package/dist/plugins/3d/Axes3D.d.ts +104 -0
  120. package/dist/plugins/3d/Bubble3DRenderer.d.ts +198 -0
  121. package/dist/plugins/3d/Impulse3DRenderer.d.ts +130 -0
  122. package/dist/plugins/3d/Line3DRenderer.d.ts +118 -0
  123. package/dist/plugins/3d/PointCloud3DRenderer.d.ts +84 -0
  124. package/dist/plugins/3d/Raycaster3D.d.ts +137 -0
  125. package/dist/plugins/3d/Ribbon3DRenderer.d.ts +83 -0
  126. package/dist/plugins/3d/SurfaceBar3DRenderer.d.ts +92 -0
  127. package/dist/plugins/3d/SurfaceMesh3DRenderer.d.ts +130 -0
  128. package/dist/plugins/3d/Tooltip3D.d.ts +71 -0
  129. package/dist/plugins/3d/VectorField3DRenderer.d.ts +86 -0
  130. package/dist/plugins/3d/Voxel3DRenderer.d.ts +89 -0
  131. package/dist/plugins/3d/Waterfall3DRenderer.d.ts +94 -0
  132. package/dist/plugins/3d/camera/OrbitCamera.d.ts +99 -0
  133. package/dist/plugins/3d/camera/index.d.ts +1 -0
  134. package/dist/plugins/3d/colorThemes.d.ts +39 -0
  135. package/dist/plugins/3d/controls/OrbitController.d.ts +69 -0
  136. package/dist/plugins/3d/controls/index.d.ts +1 -0
  137. package/dist/plugins/3d/index.d.ts +50 -0
  138. package/dist/plugins/3d/math/Mat4.d.ts +33 -0
  139. package/dist/plugins/3d/math/Vec3.d.ts +37 -0
  140. package/dist/plugins/3d/math/index.d.ts +4 -0
  141. package/dist/plugins/3d/mesh/InstancedMesh.d.ts +42 -0
  142. package/dist/plugins/3d/mesh/geometry.d.ts +34 -0
  143. package/dist/plugins/3d/mesh/index.d.ts +2 -0
  144. package/dist/plugins/3d/series/Area3D.d.ts +17 -0
  145. package/dist/plugins/3d/series/Column3D.d.ts +20 -0
  146. package/dist/plugins/3d/series/Heatmap3D.d.ts +17 -0
  147. package/dist/plugins/3d/series/Impulse3D.d.ts +16 -0
  148. package/dist/plugins/3d/series/PointLine3D.d.ts +20 -0
  149. package/dist/plugins/3d/series/Ribbon3D.d.ts +17 -0
  150. package/dist/plugins/3d/series/Scatter3D.d.ts +21 -0
  151. package/dist/plugins/3d/series/SurfaceMesh3D.d.ts +35 -0
  152. package/dist/plugins/3d/series/Waterfall3D.d.ts +38 -0
  153. package/dist/plugins/3d/series/index.d.ts +13 -0
  154. package/dist/plugins/3d/series/types.d.ts +143 -0
  155. package/dist/plugins/3d/shader/index.d.ts +2 -0
  156. package/dist/plugins/3d/shader/programs.d.ts +24 -0
  157. package/dist/plugins/3d/shader/sources.d.ts +27 -0
  158. package/dist/plugins/3d/types.d.ts +71 -0
  159. package/dist/plugins/3d.d.ts +3 -0
  160. package/dist/plugins/3d.js +5498 -0
  161. package/dist/plugins/3d.js.map +1 -0
  162. package/dist/plugins/PluginContext.d.ts +53 -0
  163. package/dist/plugins/PluginManager.d.ts +129 -0
  164. package/dist/plugins/PluginRegistry.d.ts +38 -0
  165. package/dist/plugins/analysis/SeriesFit.d.ts +3 -0
  166. package/dist/plugins/analysis/contours.d.ts +20 -0
  167. package/dist/plugins/analysis/fft.d.ts +138 -0
  168. package/dist/plugins/analysis/filters.d.ts +76 -0
  169. package/dist/plugins/analysis/fitting.d.ts +24 -0
  170. package/dist/plugins/analysis/index.d.ts +29 -0
  171. package/dist/plugins/analysis/indicators.d.ts +148 -0
  172. package/dist/plugins/analysis/math.d.ts +32 -0
  173. package/dist/plugins/analysis/statistics.d.ts +78 -0
  174. package/dist/plugins/analysis/utils.d.ts +150 -0
  175. package/dist/plugins/analysis.d.ts +3 -0
  176. package/dist/plugins/analysis.js +1202 -0
  177. package/dist/plugins/analysis.js.map +1 -0
  178. package/dist/plugins/annotations/index.d.ts +16 -0
  179. package/dist/plugins/annotations.d.ts +3 -0
  180. package/dist/plugins/annotations.js +438 -0
  181. package/dist/plugins/annotations.js.map +1 -0
  182. package/dist/plugins/anomaly-detection/algorithms.d.ts +38 -0
  183. package/dist/plugins/anomaly-detection/index.d.ts +16 -0
  184. package/dist/plugins/anomaly-detection/types.d.ts +57 -0
  185. package/dist/plugins/broken-axis/BrokenAxisScale.d.ts +24 -0
  186. package/dist/plugins/broken-axis/exports.d.ts +6 -0
  187. package/dist/plugins/broken-axis/index.d.ts +6 -0
  188. package/dist/plugins/broken-axis/types.d.ts +50 -0
  189. package/dist/plugins/builtins/crosshair/CrosshairPlugin.d.ts +40 -0
  190. package/dist/plugins/builtins/crosshair/index.d.ts +1 -0
  191. package/dist/plugins/builtins/data-logger/DataLoggerPlugin.d.ts +11 -0
  192. package/dist/plugins/builtins/data-logger/index.d.ts +1 -0
  193. package/dist/plugins/builtins/direction-indicator/DirectionIndicatorPlugin.d.ts +17 -0
  194. package/dist/plugins/builtins/direction-indicator/index.d.ts +2 -0
  195. package/dist/plugins/builtins/grid-highlight/GridHighlightPlugin.d.ts +17 -0
  196. package/dist/plugins/builtins/grid-highlight/index.d.ts +1 -0
  197. package/dist/plugins/builtins/index.d.ts +25 -0
  198. package/dist/plugins/builtins/stats/StatsPlugin.d.ts +11 -0
  199. package/dist/plugins/builtins/stats/index.d.ts +1 -0
  200. package/dist/plugins/builtins/watermark/WatermarkPlugin.d.ts +15 -0
  201. package/dist/plugins/builtins/watermark/index.d.ts +1 -0
  202. package/dist/plugins/caching/exports.d.ts +6 -0
  203. package/dist/plugins/caching/index.d.ts +6 -0
  204. package/dist/plugins/caching/types.d.ts +120 -0
  205. package/dist/plugins/clipboard/index.d.ts +20 -0
  206. package/dist/plugins/clipboard.d.ts +3 -0
  207. package/dist/plugins/clipboard.js +270 -0
  208. package/dist/plugins/clipboard.js.map +1 -0
  209. package/dist/plugins/context-menu/index.d.ts +12 -0
  210. package/dist/plugins/context-menu/renderer.d.ts +43 -0
  211. package/dist/plugins/context-menu/types.d.ts +202 -0
  212. package/dist/plugins/context-menu.d.ts +3 -0
  213. package/dist/plugins/context-menu.js +621 -0
  214. package/dist/plugins/context-menu.js.map +1 -0
  215. package/dist/plugins/data-export/formatters.d.ts +34 -0
  216. package/dist/plugins/data-export/index.d.ts +15 -0
  217. package/dist/plugins/data-export/types.d.ts +166 -0
  218. package/dist/plugins/data-export.d.ts +3 -0
  219. package/dist/plugins/data-export.js +463 -0
  220. package/dist/plugins/data-export.js.map +1 -0
  221. package/dist/plugins/data-transform/index.d.ts +6 -0
  222. package/dist/plugins/data-transform/types.d.ts +34 -0
  223. package/dist/plugins/debug/index.d.ts +24 -0
  224. package/dist/plugins/debug.d.ts +3 -0
  225. package/dist/plugins/debug.js +330 -0
  226. package/dist/plugins/debug.js.map +1 -0
  227. package/dist/plugins/drag-edit/exports.d.ts +6 -0
  228. package/dist/plugins/drag-edit/index.d.ts +6 -0
  229. package/dist/plugins/drag-edit/types.d.ts +118 -0
  230. package/dist/plugins/forecasting/algorithms.d.ts +6 -0
  231. package/dist/plugins/forecasting/exports.d.ts +3 -0
  232. package/dist/plugins/forecasting/index.d.ts +11 -0
  233. package/dist/plugins/forecasting/types.d.ts +88 -0
  234. package/dist/plugins/gpu/index.d.ts +24 -0
  235. package/dist/plugins/gpu.d.ts +3 -0
  236. package/dist/plugins/gpu.js +2430 -0
  237. package/dist/plugins/gpu.js.map +1 -0
  238. package/dist/plugins/i18n/index.d.ts +22 -0
  239. package/dist/plugins/i18n.d.ts +3 -0
  240. package/dist/plugins/i18n.js +37 -0
  241. package/dist/plugins/i18n.js.map +1 -0
  242. package/dist/plugins/index.d.ts +110 -0
  243. package/dist/plugins/keyboard/index.d.ts +15 -0
  244. package/dist/plugins/keyboard.d.ts +3 -0
  245. package/dist/plugins/keyboard.js +8 -0
  246. package/dist/plugins/keyboard.js.map +1 -0
  247. package/dist/plugins/latex/exports.d.ts +6 -0
  248. package/dist/plugins/latex/index.d.ts +8 -0
  249. package/dist/plugins/latex/parser.d.ts +6 -0
  250. package/dist/plugins/latex/renderer.d.ts +6 -0
  251. package/dist/plugins/latex/symbols.d.ts +28 -0
  252. package/dist/plugins/latex/types.d.ts +88 -0
  253. package/dist/plugins/lazy-load/exports.d.ts +6 -0
  254. package/dist/plugins/lazy-load/index.d.ts +6 -0
  255. package/dist/plugins/lazy-load/types.d.ts +121 -0
  256. package/dist/plugins/loading/index.d.ts +15 -0
  257. package/dist/plugins/loading.d.ts +3 -0
  258. package/dist/plugins/loading.js +7 -0
  259. package/dist/plugins/loading.js.map +1 -0
  260. package/dist/plugins/ml-integration/exports.d.ts +11 -0
  261. package/dist/plugins/ml-integration/index.d.ts +6 -0
  262. package/dist/plugins/ml-integration/native-algorithms.d.ts +69 -0
  263. package/dist/plugins/ml-integration/types.d.ts +74 -0
  264. package/dist/plugins/offscreen/exports.d.ts +6 -0
  265. package/dist/plugins/offscreen/index.d.ts +6 -0
  266. package/dist/plugins/offscreen/pool.d.ts +32 -0
  267. package/dist/plugins/offscreen/types.d.ts +35 -0
  268. package/dist/plugins/pattern-recognition/index.d.ts +6 -0
  269. package/dist/plugins/pattern-recognition/patterns.d.ts +3 -0
  270. package/dist/plugins/pattern-recognition/types.d.ts +245 -0
  271. package/dist/plugins/radar/index.d.ts +6 -0
  272. package/dist/plugins/radar/types.d.ts +40 -0
  273. package/dist/plugins/regression/algorithms.d.ts +6 -0
  274. package/dist/plugins/regression/index.d.ts +6 -0
  275. package/dist/plugins/regression/types.d.ts +261 -0
  276. package/dist/plugins/roi/exports.d.ts +6 -0
  277. package/dist/plugins/roi/index.d.ts +49 -0
  278. package/dist/plugins/roi/types.d.ts +60 -0
  279. package/dist/plugins/snapshot/index.d.ts +11 -0
  280. package/dist/plugins/snapshot/types.d.ts +38 -0
  281. package/dist/plugins/streaming/index.d.ts +32 -0
  282. package/dist/plugins/streaming.d.ts +3 -0
  283. package/dist/plugins/streaming.js +13 -0
  284. package/dist/plugins/streaming.js.map +1 -0
  285. package/dist/plugins/sync/index.d.ts +22 -0
  286. package/dist/plugins/sync.d.ts +3 -0
  287. package/dist/plugins/sync.js +261 -0
  288. package/dist/plugins/sync.js.map +1 -0
  289. package/dist/plugins/theme-editor/index.d.ts +18 -0
  290. package/dist/plugins/theme-editor.d.ts +3 -0
  291. package/dist/plugins/theme-editor.js +7 -0
  292. package/dist/plugins/theme-editor.js.map +1 -0
  293. package/dist/plugins/tools/delta-tool/index.d.ts +159 -0
  294. package/dist/plugins/tools/index.d.ts +21 -0
  295. package/dist/plugins/tools/peak-tool/index.d.ts +159 -0
  296. package/dist/plugins/tools/tooltip/TooltipManager.d.ts +213 -0
  297. package/dist/plugins/tools/tooltip/TooltipPositioner.d.ts +83 -0
  298. package/dist/plugins/tools/tooltip/TooltipRenderer.d.ts +64 -0
  299. package/dist/plugins/tools/tooltip/index.d.ts +18 -0
  300. package/dist/plugins/tools/tooltip/templates/AnnotationTemplate.d.ts +18 -0
  301. package/dist/plugins/tools/tooltip/templates/CrosshairTemplate.d.ts +39 -0
  302. package/dist/plugins/tools/tooltip/templates/DefaultTemplate.d.ts +30 -0
  303. package/dist/plugins/tools/tooltip/templates/HeatmapTemplate.d.ts +34 -0
  304. package/dist/plugins/tools/tooltip/templates/MinimalTemplate.d.ts +26 -0
  305. package/dist/plugins/tools/tooltip/templates/RangeTemplate.d.ts +18 -0
  306. package/dist/plugins/tools/tooltip/templates/ScientificTemplate.d.ts +34 -0
  307. package/dist/plugins/tools/tooltip/templates/index.d.ts +27 -0
  308. package/dist/plugins/tools/tooltip/themes.d.ts +48 -0
  309. package/dist/plugins/tools/tooltip/types.d.ts +396 -0
  310. package/dist/plugins/tools.d.ts +3 -0
  311. package/dist/plugins/tools.js +9 -0
  312. package/dist/plugins/tools.js.map +1 -0
  313. package/dist/plugins/types.d.ts +451 -0
  314. package/dist/plugins/video-recorder/exports.d.ts +6 -0
  315. package/dist/plugins/video-recorder/index.d.ts +6 -0
  316. package/dist/plugins/video-recorder/types.d.ts +55 -0
  317. package/dist/plugins/virtualization/exports.d.ts +6 -0
  318. package/dist/plugins/virtualization/index.d.ts +6 -0
  319. package/dist/plugins/virtualization/types.d.ts +48 -0
  320. package/dist/react/SciPlot.d.ts +60 -0
  321. package/dist/react/index.d.ts +5 -0
  322. package/dist/react/useSciPlot.d.ts +56 -0
  323. package/dist/renderer/BarRenderer.d.ts +14 -0
  324. package/dist/renderer/CandlestickRenderer.d.ts +12 -0
  325. package/dist/renderer/GaugeRenderer.d.ts +3 -0
  326. package/dist/renderer/HeatmapRenderer.d.ts +15 -0
  327. package/dist/renderer/NativeWebGLRenderer.d.ts +16 -0
  328. package/dist/renderer/PolarRenderer.d.ts +64 -0
  329. package/dist/renderer/RendererInterface.d.ts +70 -0
  330. package/dist/renderer/SankeyRenderer.d.ts +3 -0
  331. package/dist/renderer/WebGPURenderer.d.ts +16 -0
  332. package/dist/renderer/index.d.ts +13 -0
  333. package/dist/renderer/native/NativeWebGLRenderer.d.ts +31 -0
  334. package/dist/renderer/native/bufferStore.d.ts +11 -0
  335. package/dist/renderer/native/draw.d.ts +47 -0
  336. package/dist/renderer/native/programFactory.d.ts +3 -0
  337. package/dist/renderer/native/renderFrame.d.ts +3 -0
  338. package/dist/renderer/native/shaderSources.d.ts +6 -0
  339. package/dist/renderer/native/textureStore.d.ts +8 -0
  340. package/dist/renderer/native/types.d.ts +77 -0
  341. package/dist/renderer/native/utils.d.ts +31 -0
  342. package/dist/renderer/radar/RadarRenderer.d.ts +71 -0
  343. package/dist/renderer/radar/index.d.ts +10 -0
  344. package/dist/renderer/shaders.d.ts +77 -0
  345. package/dist/renderer/ternary/TernaryRenderer.d.ts +39 -0
  346. package/dist/renderer/ternary/index.d.ts +6 -0
  347. package/dist/renderer/ternary/types.d.ts +56 -0
  348. package/dist/scales/index.d.ts +54 -0
  349. package/dist/serialization/index.d.ts +153 -0
  350. package/dist/streaming/backpressure.d.ts +179 -0
  351. package/dist/streaming/index.d.ts +7 -0
  352. package/dist/streaming/mock.d.ts +12 -0
  353. package/dist/streaming/types.d.ts +57 -0
  354. package/dist/streaming/utils.d.ts +19 -0
  355. package/dist/streaming/websocket.d.ts +6 -0
  356. package/dist/testing/index.d.ts +225 -0
  357. package/dist/theme/colorSchemes.d.ts +56 -0
  358. package/dist/theme/index.d.ts +138 -0
  359. package/dist/types.d.ts +753 -0
  360. package/dist/utils-Dbro9-qM.js +254 -0
  361. package/dist/utils-Dbro9-qM.js.map +1 -0
  362. package/dist/velo-plot.d.ts +1 -0
  363. package/dist/velo-plot.full.d.ts +1 -0
  364. package/dist/velo-plot.full.js +5804 -0
  365. package/dist/velo-plot.full.js.map +1 -0
  366. package/dist/velo-plot.js +31 -0
  367. package/dist/velo-plot.js.map +1 -0
  368. package/dist/workers/downsample.d.ts +34 -0
  369. package/dist/workers/downsample.worker.d.ts +46 -0
  370. package/package.json +185 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sources":["../../src/plugins/analysis/SeriesFit.ts","../../src/plugins/analysis/fft.ts","../../src/plugins/analysis/fitting.ts","../../src/plugins/analysis/indicators.ts","../../src/plugins/analysis/filters.ts","../../src/plugins/analysis/contours.ts","../../src/plugins/analysis/statistics.ts","../../src/plugins/analysis/index.ts"],"sourcesContent":["/**\n * Series Curve Fitting Support\n */\nimport { fitData, type FitType, type FitOptions } from \"./index\";\n\nexport function addFitLine(\n ctx: any,\n seriesId: string,\n type: FitType,\n options: FitOptions = {}\n): string {\n const s = ctx.series.get(seriesId);\n if (!s) throw new Error(`Series ${seriesId} not found`);\n\n const data = s.getData();\n if (!data || data.x.length < 2) return \"\";\n\n const result = fitData(data.x as any, data.y as any, type, options);\n const bounds = s.getBounds();\n const xMin = bounds?.xMin ?? 0;\n const xMax = bounds?.xMax ?? 1;\n const dataWidth = xMax - xMin;\n const fitResolution = 200;\n const fitX = new Float32Array(fitResolution);\n const fitY = new Float32Array(fitResolution);\n\n for (let i = 0; i < fitResolution; i++) {\n const x = xMin + (i / (fitResolution - 1)) * dataWidth;\n fitX[i] = x;\n fitY[i] = result.predict(x);\n }\n\n const fitId = `${seriesId}-fit-${Date.now()}`;\n const sourceStyle = s.getStyle();\n\n ctx.addSeries({\n id: fitId,\n type: 'line',\n yAxisId: s.getYAxisId(),\n data: { x: fitX, y: fitY },\n style: {\n color: sourceStyle.color,\n width: (sourceStyle.width || 1) * 1.5,\n opacity: 0.8,\n lineDash: [5, 5]\n }\n });\n\n ctx.addAnnotation({\n type: 'text',\n x: xMin + dataWidth * 0.05,\n y: result.predict(xMin + dataWidth * 0.05),\n text: `${result.equation}\\n(R² = ${result.rSquared.toFixed(4)})`,\n fontSize: 12,\n backgroundColor: 'rgba(0,0,0,0.7)',\n color: sourceStyle.color || '#ffffff',\n padding: 4,\n anchor: 'bottom-left',\n interactive: true\n });\n\n return fitId;\n}\n","/**\n * Fast Fourier Transform (FFT) Implementation\n * \n * Provides:\n * - FFT for spectral analysis\n * - Inverse FFT\n * - Power spectrum\n * - Frequency bins calculation\n */\n\n// ============================================\n// Complex Number Type\n// ============================================\n\n/** Complex number representation */\nexport interface Complex {\n re: number;\n im: number;\n}\n\n/** FFT Result */\nexport interface FFTResult {\n /** Frequency bins in Hz (if sample rate provided) or normalized */\n frequency: Float32Array;\n /** Magnitude spectrum */\n magnitude: Float32Array;\n /** Phase spectrum in radians */\n phase: Float32Array;\n /** Full complex spectrum as Complex[] array */\n complex: Complex[];\n /** Real part of full spectrum as Float32Array */\n real: Float32Array;\n /** Imaginary part of full spectrum as Float32Array */\n imag: Float32Array;\n}\n\n/** Complex FFT Result - full spectrum with separate real/imag arrays */\nexport interface ComplexFFTResult {\n /** Real part of spectrum */\n real: Float32Array;\n /** Imaginary part of spectrum */\n imag: Float32Array;\n /** Frequency bins in Hz (if sample rate provided) */\n frequency: Float32Array;\n /** Magnitude spectrum (sqrt(real² + imag²)) */\n magnitude: Float32Array;\n /** Phase spectrum in radians (atan2(imag, real)) */\n phase: Float32Array;\n /** Original spectrum length (power of 2) */\n length: number;\n /** Nyquist index (length / 2) */\n nyquist: number;\n}\n\n/** Power spectrum result */\nexport interface PowerSpectrumResult {\n /** Frequency bins */\n frequency: Float32Array;\n /** Power values (magnitude squared) */\n power: Float32Array;\n /** Power in dB */\n powerDb: Float32Array;\n}\n\n// ============================================\n// FFT Implementation (Cooley-Tukey)\n// ============================================\n\n/**\n * Compute FFT using Cooley-Tukey algorithm\n * Input length must be a power of 2\n */\nexport function fft(input: Float32Array | Float64Array | number[]): Complex[] {\n const n = input.length;\n\n // Pad to power of 2 if necessary\n const paddedLength = nextPowerOf2(n);\n const padded = new Float64Array(paddedLength);\n for (let i = 0; i < n; i++) {\n padded[i] = input[i];\n }\n\n // Convert to complex\n const data: Complex[] = new Array(paddedLength);\n for (let i = 0; i < paddedLength; i++) {\n data[i] = { re: padded[i], im: 0 };\n }\n\n // Bit-reversal permutation\n bitReversePermutation(data);\n\n // Cooley-Tukey iterative FFT\n for (let size = 2; size <= paddedLength; size *= 2) {\n const halfSize = size / 2;\n const angle = -2 * Math.PI / size;\n\n for (let i = 0; i < paddedLength; i += size) {\n for (let j = 0; j < halfSize; j++) {\n const theta = angle * j;\n const wRe = Math.cos(theta);\n const wIm = Math.sin(theta);\n\n const evenIdx = i + j;\n const oddIdx = i + j + halfSize;\n\n const tRe = wRe * data[oddIdx].re - wIm * data[oddIdx].im;\n const tIm = wRe * data[oddIdx].im + wIm * data[oddIdx].re;\n\n data[oddIdx].re = data[evenIdx].re - tRe;\n data[oddIdx].im = data[evenIdx].im - tIm;\n data[evenIdx].re = data[evenIdx].re + tRe;\n data[evenIdx].im = data[evenIdx].im + tIm;\n }\n }\n }\n\n return data;\n}\n\n/**\n * Compute inverse FFT\n */\nexport function ifft(spectrum: Complex[]): Float32Array {\n const n = spectrum.length;\n\n // Conjugate\n const conjugated = spectrum.map(c => ({ re: c.re, im: -c.im }));\n\n // Forward FFT\n const transformed = fftComplex(conjugated);\n\n // Conjugate and scale\n const result = new Float32Array(n);\n for (let i = 0; i < n; i++) {\n result[i] = transformed[i].re / n;\n }\n\n return result;\n}\n\n/**\n * FFT on complex input\n */\nfunction fftComplex(input: Complex[]): Complex[] {\n const n = input.length;\n const data = input.map(c => ({ ...c }));\n\n bitReversePermutation(data);\n\n for (let size = 2; size <= n; size *= 2) {\n const halfSize = size / 2;\n const angle = -2 * Math.PI / size;\n\n for (let i = 0; i < n; i += size) {\n for (let j = 0; j < halfSize; j++) {\n const theta = angle * j;\n const wRe = Math.cos(theta);\n const wIm = Math.sin(theta);\n\n const evenIdx = i + j;\n const oddIdx = i + j + halfSize;\n\n const tRe = wRe * data[oddIdx].re - wIm * data[oddIdx].im;\n const tIm = wRe * data[oddIdx].im + wIm * data[oddIdx].re;\n\n data[oddIdx].re = data[evenIdx].re - tRe;\n data[oddIdx].im = data[evenIdx].im - tIm;\n data[evenIdx].re = data[evenIdx].re + tRe;\n data[evenIdx].im = data[evenIdx].im + tIm;\n }\n }\n }\n\n return data;\n}\n\n/**\n * Bit-reversal permutation in-place\n */\nfunction bitReversePermutation(data: Complex[]): void {\n const n = data.length;\n const bits = Math.log2(n);\n\n for (let i = 0; i < n; i++) {\n const reversed = reverseBits(i, bits);\n if (reversed > i) {\n const temp = data[i];\n data[i] = data[reversed];\n data[reversed] = temp;\n }\n }\n}\n\n/**\n * Reverse bits of a number\n */\nfunction reverseBits(num: number, bits: number): number {\n let result = 0;\n for (let i = 0; i < bits; i++) {\n result = (result << 1) | (num & 1);\n num >>= 1;\n }\n return result;\n}\n\n/**\n * Find next power of 2\n */\nexport function nextPowerOf2(n: number): number {\n let p = 1;\n while (p < n) p *= 2;\n return p;\n}\n\n// ============================================\n// High-Level Analysis Functions\n// ============================================\n\n/**\n * Compute full FFT analysis with frequencies and magnitudes\n */\nexport function analyzeSpectrum(\n data: Float32Array | Float64Array | number[],\n sampleRate: number = 1.0\n): FFTResult {\n const spectrum = fft(data);\n const n = spectrum.length;\n const nyquist = n / 2;\n\n const frequency = new Float32Array(nyquist);\n const magnitude = new Float32Array(nyquist);\n const phase = new Float32Array(nyquist);\n\n // Full spectrum real and imaginary parts\n const real = new Float32Array(n);\n const imag = new Float32Array(n);\n\n // Extract real and imaginary for full spectrum\n for (let i = 0; i < n; i++) {\n real[i] = spectrum[i].re;\n imag[i] = spectrum[i].im;\n }\n\n // Compute only positive frequencies (up to Nyquist)\n for (let i = 0; i < nyquist; i++) {\n frequency[i] = (i * sampleRate) / n;\n magnitude[i] = Math.sqrt(spectrum[i].re * spectrum[i].re + spectrum[i].im * spectrum[i].im) / n;\n phase[i] = Math.atan2(spectrum[i].im, spectrum[i].re);\n }\n\n // Normalize (except DC)\n for (let i = 1; i < nyquist; i++) {\n magnitude[i] *= 2;\n }\n\n return {\n frequency,\n magnitude,\n phase,\n complex: spectrum,\n real,\n imag,\n };\n}\n\n/**\n * Compute power spectrum\n */\nexport function powerSpectrum(\n data: Float32Array | Float64Array | number[],\n sampleRate: number = 1.0\n): PowerSpectrumResult {\n const result = analyzeSpectrum(data, sampleRate);\n const n = result.frequency.length;\n\n const power = new Float32Array(n);\n const powerDb = new Float32Array(n);\n\n for (let i = 0; i < n; i++) {\n power[i] = result.magnitude[i] * result.magnitude[i];\n powerDb[i] = 10 * Math.log10(Math.max(power[i], 1e-20));\n }\n\n return {\n frequency: result.frequency,\n power,\n powerDb,\n };\n}\n\n/**\n * Find dominant frequency in signal\n */\nexport function dominantFrequency(\n data: Float32Array | Float64Array | number[],\n sampleRate: number = 1.0,\n minFrequency: number = 0\n): { frequency: number; magnitude: number } {\n const result = analyzeSpectrum(data, sampleRate);\n\n let maxMag = 0;\n let maxIdx = 0;\n\n for (let i = 0; i < result.magnitude.length; i++) {\n if (result.frequency[i] >= minFrequency && result.magnitude[i] > maxMag) {\n maxMag = result.magnitude[i];\n maxIdx = i;\n }\n }\n\n return {\n frequency: result.frequency[maxIdx],\n magnitude: maxMag,\n };\n}\n\n/**\n * Apply Hanning window to data\n */\nexport function hanningWindow(data: Float32Array | Float64Array): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n\n for (let i = 0; i < n; i++) {\n const window = 0.5 * (1 - Math.cos(2 * Math.PI * i / (n - 1)));\n result[i] = data[i] * window;\n }\n\n return result;\n}\n\n/**\n * Apply Hamming window to data\n */\nexport function hammingWindow(data: Float32Array | Float64Array): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n\n for (let i = 0; i < n; i++) {\n const window = 0.54 - 0.46 * Math.cos(2 * Math.PI * i / (n - 1));\n result[i] = data[i] * window;\n }\n\n return result;\n}\n\n/**\n * Apply Blackman window to data\n */\nexport function blackmanWindow(data: Float32Array | Float64Array): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n const a0 = 0.42;\n const a1 = 0.5;\n const a2 = 0.08;\n\n for (let i = 0; i < n; i++) {\n const window = a0 - a1 * Math.cos(2 * Math.PI * i / (n - 1))\n + a2 * Math.cos(4 * Math.PI * i / (n - 1));\n result[i] = data[i] * window;\n }\n\n return result;\n}\n\n// ============================================\n// Complex FFT Functions\n// ============================================\n\n/**\n * Compute full complex FFT analysis with separate real and imaginary arrays\n * This is useful when you need direct access to real/imag components\n */\nexport function analyzeComplexSpectrum(\n data: Float32Array | Float64Array | number[],\n sampleRate: number = 1.0\n): ComplexFFTResult {\n const spectrum = fft(data);\n const n = spectrum.length;\n const nyquist = n / 2;\n\n const real = new Float32Array(n);\n const imag = new Float32Array(n);\n const frequency = new Float32Array(n);\n const magnitude = new Float32Array(n);\n const phase = new Float32Array(n);\n\n for (let i = 0; i < n; i++) {\n real[i] = spectrum[i].re;\n imag[i] = spectrum[i].im;\n frequency[i] = (i * sampleRate) / n;\n magnitude[i] = Math.sqrt(spectrum[i].re * spectrum[i].re + spectrum[i].im * spectrum[i].im);\n phase[i] = Math.atan2(spectrum[i].im, spectrum[i].re);\n }\n\n return {\n real,\n imag,\n frequency,\n magnitude,\n phase,\n length: n,\n nyquist,\n };\n}\n\n/**\n * Compute FFT from complex input (real + imaginary arrays)\n * Useful for processing complex signals or chaining FFT operations\n */\nexport function fftFromComplexInput(\n real: Float32Array | Float64Array | number[],\n imag: Float32Array | Float64Array | number[]\n): ComplexFFTResult {\n const n = real.length;\n if (imag.length !== n) {\n throw new Error('Real and imaginary arrays must have the same length');\n }\n\n const paddedLength = nextPowerOf2(n);\n const data: Complex[] = new Array(paddedLength);\n\n for (let i = 0; i < paddedLength; i++) {\n data[i] = {\n re: i < n ? real[i] : 0,\n im: i < n ? imag[i] : 0,\n };\n }\n\n // Use internal fftComplex\n bitReversePermutation(data);\n\n for (let size = 2; size <= paddedLength; size *= 2) {\n const halfSize = size / 2;\n const angle = -2 * Math.PI / size;\n\n for (let i = 0; i < paddedLength; i += size) {\n for (let j = 0; j < halfSize; j++) {\n const theta = angle * j;\n const wRe = Math.cos(theta);\n const wIm = Math.sin(theta);\n\n const evenIdx = i + j;\n const oddIdx = i + j + halfSize;\n\n const tRe = wRe * data[oddIdx].re - wIm * data[oddIdx].im;\n const tIm = wRe * data[oddIdx].im + wIm * data[oddIdx].re;\n\n data[oddIdx].re = data[evenIdx].re - tRe;\n data[oddIdx].im = data[evenIdx].im - tIm;\n data[evenIdx].re = data[evenIdx].re + tRe;\n data[evenIdx].im = data[evenIdx].im + tIm;\n }\n }\n }\n\n const resultReal = new Float32Array(paddedLength);\n const resultImag = new Float32Array(paddedLength);\n const frequency = new Float32Array(paddedLength);\n const magnitude = new Float32Array(paddedLength);\n const phase = new Float32Array(paddedLength);\n\n for (let i = 0; i < paddedLength; i++) {\n resultReal[i] = data[i].re;\n resultImag[i] = data[i].im;\n frequency[i] = i / paddedLength; // Normalized frequency\n magnitude[i] = Math.sqrt(data[i].re * data[i].re + data[i].im * data[i].im);\n phase[i] = Math.atan2(data[i].im, data[i].re);\n }\n\n return {\n real: resultReal,\n imag: resultImag,\n frequency,\n magnitude,\n phase,\n length: paddedLength,\n nyquist: paddedLength / 2,\n };\n}\n\n/**\n * Convert Complex[] array to separate real and imaginary Float32Arrays\n */\nexport function complexToArrays(complex: Complex[]): { real: Float32Array; imag: Float32Array } {\n const n = complex.length;\n const real = new Float32Array(n);\n const imag = new Float32Array(n);\n\n for (let i = 0; i < n; i++) {\n real[i] = complex[i].re;\n imag[i] = complex[i].im;\n }\n\n return { real, imag };\n}\n\n/**\n * Convert separate real and imaginary arrays to Complex[] array\n */\nexport function arraysToComplex(\n real: Float32Array | Float64Array | number[],\n imag: Float32Array | Float64Array | number[]\n): Complex[] {\n const n = real.length;\n if (imag.length !== n) {\n throw new Error('Real and imaginary arrays must have the same length');\n }\n\n const result: Complex[] = new Array(n);\n for (let i = 0; i < n; i++) {\n result[i] = { re: real[i], im: imag[i] };\n }\n\n return result;\n}\n\n/**\n * Compute inverse FFT from separate real and imaginary arrays\n * Returns the real part of the inverse transform\n */\nexport function ifftFromArrays(\n real: Float32Array | Float64Array | number[],\n imag: Float32Array | Float64Array | number[]\n): Float32Array {\n const complex = arraysToComplex(real, imag);\n return ifft(complex);\n}\n\n/**\n * Compute inverse FFT returning complex result (both real and imaginary parts)\n */\nexport function ifftComplex(spectrum: Complex[]): { real: Float32Array; imag: Float32Array } {\n const n = spectrum.length;\n\n // Conjugate\n const conjugated = spectrum.map(c => ({ re: c.re, im: -c.im }));\n\n // Forward FFT on conjugated\n const data = conjugated.map(c => ({ ...c }));\n bitReversePermutation(data);\n\n for (let size = 2; size <= n; size *= 2) {\n const halfSize = size / 2;\n const angle = -2 * Math.PI / size;\n\n for (let i = 0; i < n; i += size) {\n for (let j = 0; j < halfSize; j++) {\n const theta = angle * j;\n const wRe = Math.cos(theta);\n const wIm = Math.sin(theta);\n\n const evenIdx = i + j;\n const oddIdx = i + j + halfSize;\n\n const tRe = wRe * data[oddIdx].re - wIm * data[oddIdx].im;\n const tIm = wRe * data[oddIdx].im + wIm * data[oddIdx].re;\n\n data[oddIdx].re = data[evenIdx].re - tRe;\n data[oddIdx].im = data[evenIdx].im - tIm;\n data[evenIdx].re = data[evenIdx].re + tRe;\n data[evenIdx].im = data[evenIdx].im + tIm;\n }\n }\n }\n\n // Conjugate and scale\n const real = new Float32Array(n);\n const imag = new Float32Array(n);\n for (let i = 0; i < n; i++) {\n real[i] = data[i].re / n;\n imag[i] = -data[i].im / n;\n }\n\n return { real, imag };\n}\n\n/**\n * Get only positive frequencies (up to Nyquist) from complex spectrum\n */\nexport function getPositiveFrequencies(\n result: ComplexFFTResult\n): { real: Float32Array; imag: Float32Array; frequency: Float32Array; magnitude: Float32Array; phase: Float32Array } {\n const nyquist = result.nyquist;\n\n return {\n real: result.real.slice(0, nyquist),\n imag: result.imag.slice(0, nyquist),\n frequency: result.frequency.slice(0, nyquist),\n magnitude: result.magnitude.slice(0, nyquist),\n phase: result.phase.slice(0, nyquist),\n };\n}\n\n","/**\n * Curve Fitting and Regression Analysis\n */\nimport { solveLinearSystem, calculateR2 } from './math';\n\nexport type FitType = 'linear' | 'polynomial' | 'exponential' | 'logarithmic' | 'power';\n\nexport interface FitOptions {\n /** Degree for polynomial fit (default: 2) */\n degree?: number;\n /** Custom label for the equation */\n label?: string;\n /** Number of decimals in equation string */\n precision?: number;\n}\n\nexport interface FitResult {\n type: FitType;\n /** Coefficients (a, b, c...) */\n coefficients: number[];\n /** Formatted equation string */\n equation: string;\n /** Coefficient of determination */\n rSquared: number;\n /** Function to calculate value at X */\n predict: (x: number) => number;\n}\n\n/**\n * Perform regression on a dataset\n */\nexport function fitData(\n x: number[] | Float32Array,\n y: number[] | Float32Array,\n type: FitType,\n options: FitOptions = {}\n): FitResult {\n const n = x.length;\n if (n < 2) throw new Error(\"At least 2 points are required for fitting\");\n\n switch (type) {\n case 'linear':\n return fitLinear(x, y, options);\n case 'polynomial':\n return fitPolynomial(x, y, options.degree ?? 2, options);\n case 'exponential':\n return fitExponential(x, y, options);\n case 'logarithmic':\n return fitLogarithmic(x, y, options);\n case 'power':\n return fitPower(x, y, options);\n default:\n throw new Error(`Unsupported fit type: ${type}`);\n }\n}\n\nfunction fitLinear(x: any, y: any, opts: FitOptions): FitResult {\n const n = x.length;\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;\n\n for (let i = 0; i < n; i++) {\n sumX += x[i];\n sumY += y[i];\n sumXY += x[i] * y[i];\n sumX2 += x[i] * x[i];\n }\n\n const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX);\n const intercept = (sumY - slope * sumX) / n;\n\n const predict = (v: number) => slope * v + intercept;\n const prec = opts.precision ?? 4;\n \n const label = opts.label || \"y\";\n return {\n type: 'linear',\n coefficients: [slope, intercept],\n equation: `${label} = ${slope.toFixed(prec)}x ${intercept >= 0 ? '+' : '-'} ${Math.abs(intercept).toFixed(prec)}`,\n rSquared: calculateR2(x, y, predict),\n predict\n };\n}\n\nfunction fitPolynomial(x: any, y: any, degree: number, opts: FitOptions): FitResult {\n const n = x.length;\n const m = degree + 1;\n const A: number[][] = Array.from({ length: m }, () => new Array(m).fill(0));\n const B: number[] = new Array(m).fill(0);\n\n // Normal equations for least squares polynomial fit\n for (let i = 0; i < m; i++) {\n for (let j = 0; j < m; j++) {\n let sum = 0;\n for (let k = 0; k < n; k++) {\n sum += Math.pow(x[k], i + j);\n }\n A[i][j] = sum;\n }\n\n let sum = 0;\n for (let k = 0; k < n; k++) {\n sum += y[k] * Math.pow(x[k], i);\n }\n B[i] = sum;\n }\n\n const coeffs = solveLinearSystem(A, B); // c0, c1, c2...\n\n const predict = (v: number) => {\n let res = 0;\n for (let i = 0; i < coeffs.length; i++) {\n res += coeffs[i] * Math.pow(v, i);\n }\n return res;\n };\n\n const prec = opts.precision ?? 4;\n let equation = \"y = \";\n for (let i = coeffs.length - 1; i >= 0; i--) {\n const c = coeffs[i];\n if (i < coeffs.length - 1) equation += c >= 0 ? \" + \" : \" - \";\n else if (c < 0) equation += \"-\";\n \n equation += `${Math.abs(c).toFixed(prec)}${i > 0 ? (i > 1 ? `x^${i}` : 'x') : ''}`;\n }\n\n const label = opts.label || \"y\";\n return {\n type: 'polynomial',\n coefficients: coeffs,\n equation: `${label} = ${equation.substring(4)}`, // replace \"y = \" with custom label\n rSquared: calculateR2(x, y, predict),\n predict\n };\n}\n\nfunction fitExponential(x: any, y: any, opts: FitOptions): FitResult {\n // y = a * e^(bx) => ln(y) = ln(a) + bx\n // Use linear fit on (x, ln(y))\n const n = x.length;\n const xPrime = [];\n const yPrime = [];\n\n for (let i = 0; i < n; i++) {\n if (y[i] > 0) {\n xPrime.push(x[i]);\n yPrime.push(Math.log(y[i]));\n }\n }\n\n const result = fitLinear(xPrime, yPrime, opts);\n const b = result.coefficients[0];\n const a = Math.exp(result.coefficients[1]);\n\n const predict = (v: number) => a * Math.exp(b * v);\n const prec = opts.precision ?? 4;\n\n const label = opts.label || \"y\";\n return {\n type: 'exponential',\n coefficients: [a, b],\n equation: `${label} = ${a.toFixed(prec)} * e^(${b.toFixed(prec)}x)`,\n rSquared: calculateR2(x, y, predict),\n predict\n };\n}\n\nfunction fitLogarithmic(x: any, y: any, opts: FitOptions): FitResult {\n // y = a + b * ln(x)\n // Use linear fit on (ln(x), y)\n const n = x.length;\n const xPrime = [];\n const yPrime = [];\n\n for (let i = 0; i < n; i++) {\n if (x[i] > 0) {\n xPrime.push(Math.log(x[i]));\n yPrime.push(y[i]);\n }\n }\n\n const result = fitLinear(xPrime, yPrime, opts);\n const b = result.coefficients[0];\n const a = result.coefficients[1];\n\n const predict = (v: number) => a + b * Math.log(v);\n const prec = opts.precision ?? 4;\n\n const label = opts.label || \"y\";\n return {\n type: 'logarithmic',\n coefficients: [a, b],\n equation: `${label} = ${a.toFixed(prec)} ${b >= 0 ? '+' : '-'} ${Math.abs(b).toFixed(prec)} * ln(x)`,\n rSquared: calculateR2(x, y, predict),\n predict\n };\n}\n\nfunction fitPower(x: any, y: any, opts: FitOptions): FitResult {\n // y = a * x^b => ln(y) = ln(a) + b * ln(x)\n const n = x.length;\n const xPrime = [];\n const yPrime = [];\n\n for (let i = 0; i < n; i++) {\n if (x[i] > 0 && y[i] > 0) {\n xPrime.push(Math.log(x[i]));\n yPrime.push(Math.log(y[i]));\n }\n }\n\n const result = fitLinear(xPrime, yPrime, opts);\n const b = result.coefficients[0];\n const a = Math.exp(result.coefficients[1]);\n\n const predict = (v: number) => a * Math.pow(v, b);\n const prec = opts.precision ?? 4;\n\n const label = opts.label || \"y\";\n return {\n type: 'power',\n coefficients: [a, b],\n equation: `${label} = ${a.toFixed(prec)} * x^(${b.toFixed(prec)})`,\n rSquared: calculateR2(x, y, predict),\n predict\n };\n}\n","/**\n * Sci Plot - Financial/Technical Indicators Module\n * \n * Provides common financial and technical analysis indicators:\n * - Moving Averages (SMA, EMA, WMA)\n * - Momentum Indicators (RSI, MACD, Stochastic)\n * - Volatility (Bollinger Bands, ATR)\n * - Volume (VWAP, OBV)\n * - Trend (ADX, Aroon)\n * \n * @module indicators\n */\n\n// ============================================\n// Types\n// ============================================\n\nexport interface IndicatorResult {\n /** Indicator values (NaN for insufficient data) */\n values: Float32Array;\n /** Additional line (e.g., signal line for MACD) */\n signal?: Float32Array;\n /** Upper band (e.g., Bollinger upper) */\n upper?: Float32Array;\n /** Lower band (e.g., Bollinger lower) */\n lower?: Float32Array;\n /** Histogram (e.g., MACD histogram) */\n histogram?: Float32Array;\n}\n\nexport interface OHLCData {\n open: Float32Array | Float64Array;\n high: Float32Array | Float64Array;\n low: Float32Array | Float64Array;\n close: Float32Array | Float64Array;\n volume?: Float32Array | Float64Array;\n}\n\n// ============================================\n// Moving Averages\n// ============================================\n\n/**\n * Simple Moving Average (SMA)\n * @param data Input data array\n * @param period Number of periods\n */\nexport function sma(data: Float32Array | Float64Array | number[], period: number): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n if (period < 1 || period > input.length) {\n result.fill(NaN);\n return result;\n }\n\n // Fill initial values with NaN\n for (let i = 0; i < period - 1; i++) {\n result[i] = NaN;\n }\n\n // Calculate first SMA\n let sum = 0;\n for (let i = 0; i < period; i++) {\n sum += input[i];\n }\n result[period - 1] = sum / period;\n\n // Calculate remaining SMAs using sliding window\n for (let i = period; i < input.length; i++) {\n sum = sum - input[i - period] + input[i];\n result[i] = sum / period;\n }\n\n return result;\n}\n\n/**\n * Exponential Moving Average (EMA)\n * @param data Input data array\n * @param period Number of periods\n */\nexport function ema(data: Float32Array | Float64Array | number[], period: number): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n if (period < 1 || period > input.length) {\n result.fill(NaN);\n return result;\n }\n\n const multiplier = 2 / (period + 1);\n\n // Fill initial values with NaN\n for (let i = 0; i < period - 1; i++) {\n result[i] = NaN;\n }\n\n // First EMA is SMA\n let sum = 0;\n for (let i = 0; i < period; i++) {\n sum += input[i];\n }\n result[period - 1] = sum / period;\n\n // Calculate remaining EMAs\n for (let i = period; i < input.length; i++) {\n result[i] = (input[i] - result[i - 1]) * multiplier + result[i - 1];\n }\n\n return result;\n}\n\n/**\n * Weighted Moving Average (WMA)\n * @param data Input data array\n * @param period Number of periods\n */\nexport function wma(data: Float32Array | Float64Array | number[], period: number): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n if (period < 1 || period > input.length) {\n result.fill(NaN);\n return result;\n }\n\n const weightSum = (period * (period + 1)) / 2;\n\n // Fill initial values with NaN\n for (let i = 0; i < period - 1; i++) {\n result[i] = NaN;\n }\n\n // Calculate WMAs\n for (let i = period - 1; i < input.length; i++) {\n let weightedSum = 0;\n for (let j = 0; j < period; j++) {\n weightedSum += input[i - period + 1 + j] * (j + 1);\n }\n result[i] = weightedSum / weightSum;\n }\n\n return result;\n}\n\n/**\n * Double Exponential Moving Average (DEMA)\n * @param data Input data array\n * @param period Number of periods\n */\nexport function dema(data: Float32Array | Float64Array | number[], period: number): Float32Array {\n const ema1 = ema(data, period);\n const ema2 = ema(ema1, period);\n const result = new Float32Array(data.length);\n\n for (let i = 0; i < data.length; i++) {\n result[i] = 2 * ema1[i] - ema2[i];\n }\n\n return result;\n}\n\n/**\n * Triple Exponential Moving Average (TEMA)\n * @param data Input data array\n * @param period Number of periods\n */\nexport function tema(data: Float32Array | Float64Array | number[], period: number): Float32Array {\n const ema1 = ema(data, period);\n const ema2 = ema(ema1, period);\n const ema3 = ema(ema2, period);\n const result = new Float32Array(data.length);\n\n for (let i = 0; i < data.length; i++) {\n result[i] = 3 * ema1[i] - 3 * ema2[i] + ema3[i];\n }\n\n return result;\n}\n\n// ============================================\n// Momentum Indicators\n// ============================================\n\n/**\n * Relative Strength Index (RSI)\n * @param data Close prices\n * @param period RSI period (default: 14)\n */\nexport function rsi(data: Float32Array | Float64Array | number[], period: number = 14): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n if (period < 1 || input.length < period + 1) {\n result.fill(NaN);\n return result;\n }\n\n // Fill initial values with NaN\n for (let i = 0; i < period; i++) {\n result[i] = NaN;\n }\n\n // Calculate initial average gain/loss\n let avgGain = 0;\n let avgLoss = 0;\n\n for (let i = 1; i <= period; i++) {\n const change = input[i] - input[i - 1];\n if (change > 0) {\n avgGain += change;\n } else {\n avgLoss += Math.abs(change);\n }\n }\n\n avgGain /= period;\n avgLoss /= period;\n\n // First RSI value\n if (avgLoss === 0) {\n result[period] = 100;\n } else {\n const rs = avgGain / avgLoss;\n result[period] = 100 - (100 / (1 + rs));\n }\n\n // Calculate remaining RSI values using smoothed averages\n for (let i = period + 1; i < input.length; i++) {\n const change = input[i] - input[i - 1];\n let gain = 0;\n let loss = 0;\n\n if (change > 0) {\n gain = change;\n } else {\n loss = Math.abs(change);\n }\n\n avgGain = (avgGain * (period - 1) + gain) / period;\n avgLoss = (avgLoss * (period - 1) + loss) / period;\n\n if (avgLoss === 0) {\n result[i] = 100;\n } else {\n const rs = avgGain / avgLoss;\n result[i] = 100 - (100 / (1 + rs));\n }\n }\n\n return result;\n}\n\n/**\n * Moving Average Convergence Divergence (MACD)\n * @param data Close prices\n * @param fastPeriod Fast EMA period (default: 12)\n * @param slowPeriod Slow EMA period (default: 26)\n * @param signalPeriod Signal line period (default: 9)\n */\nexport function macd(\n data: Float32Array | Float64Array | number[],\n fastPeriod: number = 12,\n slowPeriod: number = 26,\n signalPeriod: number = 9\n): IndicatorResult {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n \n const fastEma = ema(input, fastPeriod);\n const slowEma = ema(input, slowPeriod);\n \n // MACD Line = Fast EMA - Slow EMA\n const macdLine = new Float32Array(input.length);\n for (let i = 0; i < input.length; i++) {\n macdLine[i] = fastEma[i] - slowEma[i];\n }\n \n // Signal Line = EMA of MACD Line\n const signal = ema(macdLine, signalPeriod);\n \n // Histogram = MACD Line - Signal Line\n const histogram = new Float32Array(input.length);\n for (let i = 0; i < input.length; i++) {\n histogram[i] = macdLine[i] - signal[i];\n }\n\n return {\n values: macdLine,\n signal,\n histogram,\n };\n}\n\n/**\n * Stochastic Oscillator\n * @param ohlc OHLC data\n * @param kPeriod %K period (default: 14)\n * @param dPeriod %D smoothing period (default: 3)\n */\nexport function stochastic(\n ohlc: OHLCData,\n kPeriod: number = 14,\n dPeriod: number = 3\n): IndicatorResult {\n const { high, low, close } = ohlc;\n const length = close.length;\n const kValues = new Float32Array(length);\n \n // Calculate %K\n for (let i = 0; i < length; i++) {\n if (i < kPeriod - 1) {\n kValues[i] = NaN;\n continue;\n }\n \n let highest = -Infinity;\n let lowest = Infinity;\n \n for (let j = i - kPeriod + 1; j <= i; j++) {\n if (high[j] > highest) highest = high[j];\n if (low[j] < lowest) lowest = low[j];\n }\n \n const range = highest - lowest;\n if (range === 0) {\n kValues[i] = 50; // Neutral when no range\n } else {\n kValues[i] = ((close[i] - lowest) / range) * 100;\n }\n }\n \n // %D is SMA of %K\n const dValues = sma(kValues, dPeriod);\n\n return {\n values: kValues, // %K\n signal: dValues, // %D\n };\n}\n\n/**\n * Rate of Change (ROC)\n * @param data Close prices\n * @param period ROC period (default: 10)\n */\nexport function roc(data: Float32Array | Float64Array | number[], period: number = 10): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n for (let i = 0; i < period; i++) {\n result[i] = NaN;\n }\n \n for (let i = period; i < input.length; i++) {\n const pastValue = input[i - period];\n if (pastValue === 0) {\n result[i] = NaN;\n } else {\n result[i] = ((input[i] - pastValue) / pastValue) * 100;\n }\n }\n\n return result;\n}\n\n/**\n * Momentum\n * @param data Close prices\n * @param period Momentum period (default: 10)\n */\nexport function momentum(data: Float32Array | Float64Array | number[], period: number = 10): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n for (let i = 0; i < period; i++) {\n result[i] = NaN;\n }\n \n for (let i = period; i < input.length; i++) {\n result[i] = input[i] - input[i - period];\n }\n\n return result;\n}\n\n// ============================================\n// Volatility Indicators\n// ============================================\n\n/**\n * Bollinger Bands\n * @param data Close prices\n * @param period SMA period (default: 20)\n * @param stdDev Standard deviation multiplier (default: 2)\n */\nexport function bollingerBands(\n data: Float32Array | Float64Array | number[],\n period: number = 20,\n stdDev: number = 2\n): IndicatorResult {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const middle = sma(input, period);\n const upper = new Float32Array(input.length);\n const lower = new Float32Array(input.length);\n\n for (let i = 0; i < input.length; i++) {\n if (i < period - 1) {\n upper[i] = NaN;\n lower[i] = NaN;\n continue;\n }\n\n // Calculate standard deviation\n let sumSquares = 0;\n for (let j = i - period + 1; j <= i; j++) {\n const diff = input[j] - middle[i];\n sumSquares += diff * diff;\n }\n const std = Math.sqrt(sumSquares / period);\n\n upper[i] = middle[i] + stdDev * std;\n lower[i] = middle[i] - stdDev * std;\n }\n\n return {\n values: middle,\n upper,\n lower,\n };\n}\n\n/**\n * Average True Range (ATR)\n * @param ohlc OHLC data\n * @param period ATR period (default: 14)\n */\nexport function atr(ohlc: OHLCData, period: number = 14): Float32Array {\n const { high, low, close } = ohlc;\n const length = close.length;\n const tr = new Float32Array(length);\n \n // True Range calculation\n tr[0] = high[0] - low[0];\n \n for (let i = 1; i < length; i++) {\n const hl = high[i] - low[i];\n const hc = Math.abs(high[i] - close[i - 1]);\n const lc = Math.abs(low[i] - close[i - 1]);\n tr[i] = Math.max(hl, hc, lc);\n }\n\n // ATR is smoothed average of True Range\n return ema(tr, period);\n}\n\n/**\n * Standard Deviation\n * @param data Input data\n * @param period Period for calculation (default: 20)\n */\nexport function standardDeviation(data: Float32Array | Float64Array | number[], period: number = 20): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n const avg = sma(input, period);\n\n for (let i = 0; i < input.length; i++) {\n if (i < period - 1) {\n result[i] = NaN;\n continue;\n }\n\n let sumSquares = 0;\n for (let j = i - period + 1; j <= i; j++) {\n const diff = input[j] - avg[i];\n sumSquares += diff * diff;\n }\n result[i] = Math.sqrt(sumSquares / period);\n }\n\n return result;\n}\n\n// ============================================\n// Volume Indicators\n// ============================================\n\n/**\n * Volume Weighted Average Price (VWAP)\n * @param ohlc OHLC data with volume\n */\nexport function vwap(ohlc: OHLCData): Float32Array {\n const { high, low, close, volume } = ohlc;\n \n if (!volume) {\n throw new Error('VWAP requires volume data');\n }\n\n const length = close.length;\n const result = new Float32Array(length);\n \n let cumulativeTPV = 0; // Cumulative Typical Price * Volume\n let cumulativeVolume = 0;\n\n for (let i = 0; i < length; i++) {\n const typicalPrice = (high[i] + low[i] + close[i]) / 3;\n cumulativeTPV += typicalPrice * volume[i];\n cumulativeVolume += volume[i];\n \n if (cumulativeVolume === 0) {\n result[i] = typicalPrice;\n } else {\n result[i] = cumulativeTPV / cumulativeVolume;\n }\n }\n\n return result;\n}\n\n/**\n * On-Balance Volume (OBV)\n * @param close Close prices\n * @param volume Volume data\n */\nexport function obv(\n close: Float32Array | Float64Array | number[],\n volume: Float32Array | Float64Array | number[]\n): Float32Array {\n const closeInput = close instanceof Float32Array || close instanceof Float64Array ? close : Float32Array.from(close);\n const volumeInput = volume instanceof Float32Array || volume instanceof Float64Array ? volume : Float32Array.from(volume);\n \n const result = new Float32Array(closeInput.length);\n result[0] = volumeInput[0];\n\n for (let i = 1; i < closeInput.length; i++) {\n if (closeInput[i] > closeInput[i - 1]) {\n result[i] = result[i - 1] + volumeInput[i];\n } else if (closeInput[i] < closeInput[i - 1]) {\n result[i] = result[i - 1] - volumeInput[i];\n } else {\n result[i] = result[i - 1];\n }\n }\n\n return result;\n}\n\n// ============================================\n// Trend Indicators\n// ============================================\n\n/**\n * Average Directional Index (ADX)\n * @param ohlc OHLC data\n * @param period ADX period (default: 14)\n */\nexport function adx(ohlc: OHLCData, period: number = 14): IndicatorResult {\n const { high, low, close } = ohlc;\n const length = close.length;\n \n const plusDM = new Float32Array(length);\n const minusDM = new Float32Array(length);\n const tr = new Float32Array(length);\n \n // Calculate +DM, -DM, TR\n tr[0] = high[0] - low[0];\n plusDM[0] = 0;\n minusDM[0] = 0;\n\n for (let i = 1; i < length; i++) {\n const upMove = high[i] - high[i - 1];\n const downMove = low[i - 1] - low[i];\n \n plusDM[i] = upMove > downMove && upMove > 0 ? upMove : 0;\n minusDM[i] = downMove > upMove && downMove > 0 ? downMove : 0;\n \n const hl = high[i] - low[i];\n const hc = Math.abs(high[i] - close[i - 1]);\n const lc = Math.abs(low[i] - close[i - 1]);\n tr[i] = Math.max(hl, hc, lc);\n }\n\n // Smooth with EMA\n const smoothedTR = ema(tr, period);\n const smoothedPlusDM = ema(plusDM, period);\n const smoothedMinusDM = ema(minusDM, period);\n\n // Calculate +DI and -DI\n const plusDI = new Float32Array(length);\n const minusDI = new Float32Array(length);\n const dx = new Float32Array(length);\n\n for (let i = 0; i < length; i++) {\n if (smoothedTR[i] === 0 || isNaN(smoothedTR[i])) {\n plusDI[i] = NaN;\n minusDI[i] = NaN;\n dx[i] = NaN;\n } else {\n plusDI[i] = (smoothedPlusDM[i] / smoothedTR[i]) * 100;\n minusDI[i] = (smoothedMinusDM[i] / smoothedTR[i]) * 100;\n \n const diSum = plusDI[i] + minusDI[i];\n dx[i] = diSum === 0 ? 0 : (Math.abs(plusDI[i] - minusDI[i]) / diSum) * 100;\n }\n }\n\n // ADX is smoothed DX\n const adxValues = ema(dx, period);\n\n return {\n values: adxValues,\n upper: plusDI, // +DI\n lower: minusDI, // -DI\n };\n}\n\n/**\n * Aroon Indicator\n * @param ohlc OHLC data\n * @param period Aroon period (default: 25)\n */\nexport function aroon(ohlc: OHLCData, period: number = 25): IndicatorResult {\n const { high, low } = ohlc;\n const length = high.length;\n \n const aroonUp = new Float32Array(length);\n const aroonDown = new Float32Array(length);\n\n for (let i = 0; i < length; i++) {\n if (i < period) {\n aroonUp[i] = NaN;\n aroonDown[i] = NaN;\n continue;\n }\n\n let highestIdx = i;\n let lowestIdx = i;\n let highest = -Infinity;\n let lowest = Infinity;\n\n for (let j = i - period; j <= i; j++) {\n if (high[j] > highest) {\n highest = high[j];\n highestIdx = j;\n }\n if (low[j] < lowest) {\n lowest = low[j];\n lowestIdx = j;\n }\n }\n\n aroonUp[i] = ((period - (i - highestIdx)) / period) * 100;\n aroonDown[i] = ((period - (i - lowestIdx)) / period) * 100;\n }\n\n // Aroon Oscillator = Aroon Up - Aroon Down\n const oscillator = new Float32Array(length);\n for (let i = 0; i < length; i++) {\n oscillator[i] = aroonUp[i] - aroonDown[i];\n }\n\n return {\n values: oscillator,\n upper: aroonUp,\n lower: aroonDown,\n };\n}\n\n// ============================================\n// Utility Functions\n// ============================================\n\n/**\n * Calculate percentage change\n */\nexport function percentChange(data: Float32Array | Float64Array | number[], period: number = 1): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n for (let i = 0; i < period; i++) {\n result[i] = NaN;\n }\n \n for (let i = period; i < input.length; i++) {\n const prev = input[i - period];\n if (prev === 0) {\n result[i] = NaN;\n } else {\n result[i] = ((input[i] - prev) / prev) * 100;\n }\n }\n\n return result;\n}\n\n/**\n * Calculate cumulative sum\n */\nexport function cumsum(data: Float32Array | Float64Array | number[]): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n result[0] = input[0];\n for (let i = 1; i < input.length; i++) {\n result[i] = result[i - 1] + input[i];\n }\n\n return result;\n}\n\n/**\n * Normalize data to 0-100 range\n */\nexport function normalize(data: Float32Array | Float64Array | number[]): Float32Array {\n const input = data instanceof Float32Array || data instanceof Float64Array ? data : Float32Array.from(data);\n const result = new Float32Array(input.length);\n \n let min = Infinity;\n let max = -Infinity;\n \n for (let i = 0; i < input.length; i++) {\n if (!isNaN(input[i])) {\n if (input[i] < min) min = input[i];\n if (input[i] > max) max = input[i];\n }\n }\n\n const range = max - min;\n if (range === 0) {\n result.fill(50);\n } else {\n for (let i = 0; i < input.length; i++) {\n result[i] = ((input[i] - min) / range) * 100;\n }\n }\n\n return result;\n}\n","/**\n * Digital Filters Implementation\n * \n * Provides:\n * - Low-pass filter\n * - High-pass filter\n * - Band-pass filter\n * - Band-stop (notch) filter\n * - Butterworth filter\n * - Moving average (for smoothing)\n * - Savitzky-Golay filter\n */\n\n// ============================================\n// Filter Types\n// ============================================\n\nexport type FilterType = 'lowpass' | 'highpass' | 'bandpass' | 'bandstop';\n\nexport interface FilterOptions {\n /** Cutoff frequency in Hz (or normalized 0-1) */\n cutoff: number;\n /** Second cutoff for bandpass/bandstop filters */\n cutoffHigh?: number;\n /** Sample rate in Hz (default: 1.0 for normalized) */\n sampleRate?: number;\n /** Filter order (default: 2) */\n order?: number;\n}\n\nexport interface ButterworthOptions extends FilterOptions {\n /** Filter type */\n type: FilterType;\n}\n\nexport interface SingleFrequencyFilterOptions {\n /** Frequency to remove in Hz */\n frequency: number;\n /** Sampling rate in Hz */\n sampleRate: number;\n /** Bandwidth of the notch in Hz (default: 1.0) */\n bandwidth?: number;\n}\n\n// ============================================\n// Simple FIR Filters\n// ============================================\n\n/**\n * Apply a simple low-pass FIR filter\n */\nexport function lowPassFilter(\n data: Float32Array | Float64Array,\n cutoffHz: number,\n sampleRate: number,\n order: number = 5\n): Float32Array {\n const normalized = cutoffHz / (sampleRate / 2);\n const coefficients = designFIRLowPass(Math.min(normalized, 0.99), order);\n return applyFIRFilter(data, coefficients);\n}\n\n/**\n * Apply a simple high-pass FIR filter\n */\nexport function highPassFilter(\n data: Float32Array | Float64Array,\n cutoffHz: number,\n sampleRate: number,\n order: number = 5\n): Float32Array {\n const normalized = cutoffHz / (sampleRate / 2);\n const coefficients = designFIRHighPass(Math.min(normalized, 0.99), order);\n return applyFIRFilter(data, coefficients);\n}\n\n/**\n * Apply a band-pass FIR filter\n */\nexport function bandPassFilter(\n data: Float32Array | Float64Array,\n lowCutoffHz: number,\n highCutoffHz: number,\n sampleRate: number,\n order: number = 5\n): Float32Array {\n const normLow = lowCutoffHz / (sampleRate / 2);\n const normHigh = highCutoffHz / (sampleRate / 2);\n const coefficients = designFIRBandPass(\n Math.max(normLow, 0.01), \n Math.min(normHigh, 0.99), \n order\n );\n return applyFIRFilter(data, coefficients);\n}\n\n/**\n * Apply a band-stop (notch) FIR filter\n */\nexport function bandStopFilter(\n data: Float32Array | Float64Array,\n lowCutoffHz: number,\n highCutoffHz: number,\n sampleRate: number,\n order: number = 5\n): Float32Array {\n const normLow = lowCutoffHz / (sampleRate / 2);\n const normHigh = highCutoffHz / (sampleRate / 2);\n const coefficients = designFIRBandStop(\n Math.max(normLow, 0.01), \n Math.min(normHigh, 0.99), \n order\n );\n return applyFIRFilter(data, coefficients);\n}\n\n// ============================================\n// FIR Filter Design (Windowed Sinc)\n// ============================================\n\n/**\n * Design FIR low-pass filter coefficients\n */\nfunction designFIRLowPass(normalizedCutoff: number, order: number): Float32Array {\n const n = 2 * order + 1;\n const coeffs = new Float32Array(n);\n const fc = normalizedCutoff;\n \n for (let i = 0; i < n; i++) {\n const m = i - order;\n if (m === 0) {\n coeffs[i] = 2 * fc;\n } else {\n coeffs[i] = Math.sin(2 * Math.PI * fc * m) / (Math.PI * m);\n }\n // Apply Hamming window\n coeffs[i] *= 0.54 - 0.46 * Math.cos(2 * Math.PI * i / (n - 1));\n }\n \n // Normalize\n let sum = 0;\n for (let i = 0; i < n; i++) sum += coeffs[i];\n for (let i = 0; i < n; i++) coeffs[i] /= sum;\n \n return coeffs;\n}\n\n/**\n * Design FIR high-pass filter coefficients\n */\nfunction designFIRHighPass(normalizedCutoff: number, order: number): Float32Array {\n const lowPass = designFIRLowPass(normalizedCutoff, order);\n const n = lowPass.length;\n const coeffs = new Float32Array(n);\n \n // Spectral inversion\n for (let i = 0; i < n; i++) {\n coeffs[i] = -lowPass[i];\n }\n coeffs[order] += 1;\n \n return coeffs;\n}\n\n/**\n * Design FIR band-pass filter coefficients\n */\nfunction designFIRBandPass(\n normalizedLow: number, \n normalizedHigh: number, \n order: number\n): Float32Array {\n const n = 2 * order + 1;\n const coeffs = new Float32Array(n);\n const fcLow = normalizedLow;\n const fcHigh = normalizedHigh;\n \n for (let i = 0; i < n; i++) {\n const m = i - order;\n if (m === 0) {\n coeffs[i] = 2 * (fcHigh - fcLow);\n } else {\n coeffs[i] = (Math.sin(2 * Math.PI * fcHigh * m) - Math.sin(2 * Math.PI * fcLow * m)) \n / (Math.PI * m);\n }\n // Apply Hamming window\n coeffs[i] *= 0.54 - 0.46 * Math.cos(2 * Math.PI * i / (n - 1));\n }\n \n return coeffs;\n}\n\n/**\n * Design FIR band-stop filter coefficients\n */\nfunction designFIRBandStop(\n normalizedLow: number, \n normalizedHigh: number, \n order: number\n): Float32Array {\n const bandPass = designFIRBandPass(normalizedLow, normalizedHigh, order);\n const n = bandPass.length;\n const coeffs = new Float32Array(n);\n \n // Spectral inversion\n for (let i = 0; i < n; i++) {\n coeffs[i] = -bandPass[i];\n }\n coeffs[order] += 1;\n \n return coeffs;\n}\n\n/**\n * Apply FIR filter to data\n */\nfunction applyFIRFilter(data: Float32Array | Float64Array, coeffs: Float32Array): Float32Array {\n const n = data.length;\n const m = coeffs.length;\n const halfM = Math.floor(m / 2);\n const result = new Float32Array(n);\n \n for (let i = 0; i < n; i++) {\n let sum = 0;\n for (let j = 0; j < m; j++) {\n const idx = i - halfM + j;\n if (idx >= 0 && idx < n) {\n sum += data[idx] * coeffs[j];\n }\n }\n result[i] = sum;\n }\n \n return result;\n}\n\n// ============================================\n// IIR Butterworth Filter\n// ============================================\n\n/**\n * Apply Butterworth filter (IIR)\n */\nexport function butterworth(\n data: Float32Array | Float64Array,\n options: ButterworthOptions\n): Float32Array {\n const { type, cutoff, cutoffHigh, sampleRate = 1.0, order = 2 } = options;\n const wc = (2 * cutoff) / sampleRate; // Normalized frequency (0-1)\n const wc2 = cutoffHigh ? (2 * cutoffHigh) / sampleRate : undefined;\n \n // Design filter coefficients\n const { b, a } = designButterworth(type, wc, wc2, order);\n \n // Apply filter (forward-backward for zero phase)\n return filtfilt(data, b, a);\n}\n\n/**\n * Apply a single frequency notch filter to remove periodic noise.\n * Implementing a 2nd order IIR notch filter.\n */\nexport function singleFrequencyFilter(\n data: Float32Array | Float64Array,\n options: SingleFrequencyFilterOptions\n): Float32Array {\n const { frequency, sampleRate, bandwidth = 1.0 } = options;\n const { b, a } = designNotchFilter(frequency, sampleRate, bandwidth);\n \n // Apply zero-phase filtering\n return filtfilt(data, b, a);\n}\n\n/**\n * Design 2nd order IIR Notch Filter coefficients.\n * H(z) = (1 - 2*cos(w0)*z^-1 + z^-2) / (1 - 2*r*cos(w0)*z^-1 + r^2*z^-2)\n */\nfunction designNotchFilter(\n frequency: number,\n sampleRate: number,\n bandwidth: number\n): { b: number[]; a: number[] } {\n const w0 = (2 * Math.PI * frequency) / sampleRate;\n const bw = (2 * Math.PI * bandwidth) / sampleRate;\n \n // r is the pole radius, related to bandwidth\n const r = 1 - (bw / 2);\n \n const cosW0 = Math.cos(w0);\n \n const b = [1, -2 * cosW0, 1];\n const a = [1, -2 * r * cosW0, r * r];\n \n return { b, a };\n}\n\n/**\n * Design Butterworth filter coefficients\n */\nfunction designButterworth(\n type: FilterType,\n wc: number,\n wc2: number | undefined,\n order: number\n): { b: number[]; a: number[] } {\n // Pre-warp for bilinear transform\n const wa = Math.tan(Math.PI * wc / 2);\n \n // Simple 2nd order Butterworth for now\n // Extended implementation would support higher orders\n const effectiveOrder = Math.min(order, 4);\n \n if (type === 'lowpass') {\n return butterLowPass(wa, effectiveOrder);\n } else if (type === 'highpass') {\n return butterHighPass(wa, effectiveOrder);\n } else if (type === 'bandpass' && wc2) {\n const wa2 = Math.tan(Math.PI * wc2 / 2);\n return butterBandPass(wa, wa2, effectiveOrder);\n } else if (type === 'bandstop' && wc2) {\n const wa2 = Math.tan(Math.PI * wc2 / 2);\n return butterBandStop(wa, wa2, effectiveOrder);\n }\n \n // Default to lowpass\n return butterLowPass(wa, effectiveOrder);\n}\n\n/**\n * 2nd order Butterworth low-pass coefficients\n */\nfunction butterLowPass(wa: number, _order: number): { b: number[]; a: number[] } {\n const k = wa;\n const k2 = k * k;\n const sqrt2 = Math.sqrt(2);\n \n const norm = 1 / (1 + sqrt2 * k + k2);\n \n return {\n b: [k2 * norm, 2 * k2 * norm, k2 * norm],\n a: [1, 2 * (k2 - 1) * norm, (1 - sqrt2 * k + k2) * norm],\n };\n}\n\n/**\n * 2nd order Butterworth high-pass coefficients\n */\nfunction butterHighPass(wa: number, _order: number): { b: number[]; a: number[] } {\n const k = wa;\n const k2 = k * k;\n const sqrt2 = Math.sqrt(2);\n \n const norm = 1 / (1 + sqrt2 * k + k2);\n \n return {\n b: [norm, -2 * norm, norm],\n a: [1, 2 * (k2 - 1) * norm, (1 - sqrt2 * k + k2) * norm],\n };\n}\n\n/**\n * 2nd order Butterworth band-pass coefficients\n */\nfunction butterBandPass(waLow: number, waHigh: number, _order: number): { b: number[]; a: number[] } {\n const w0 = Math.sqrt(waLow * waHigh);\n const bw = waHigh - waLow;\n const q = w0 / bw;\n \n const norm = 1 / (1 + w0 / q + w0 * w0);\n \n return {\n b: [w0 / q * norm, 0, -w0 / q * norm],\n a: [1, 2 * (w0 * w0 - 1) * norm, (1 - w0 / q + w0 * w0) * norm],\n };\n}\n\n/**\n * 2nd order Butterworth band-stop coefficients\n */\nfunction butterBandStop(waLow: number, waHigh: number, _order: number): { b: number[]; a: number[] } {\n const w0 = Math.sqrt(waLow * waHigh);\n const bw = waHigh - waLow;\n const q = w0 / bw;\n \n const norm = 1 / (1 + w0 / q + w0 * w0);\n \n return {\n b: [(1 + w0 * w0) * norm, 2 * (w0 * w0 - 1) * norm, (1 + w0 * w0) * norm],\n a: [1, 2 * (w0 * w0 - 1) * norm, (1 - w0 / q + w0 * w0) * norm],\n };\n}\n\n/**\n * Apply IIR filter (single direction)\n */\nfunction iirFilter(data: Float32Array | Float64Array, b: number[], a: number[]): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n \n for (let i = 0; i < n; i++) {\n result[i] = b[0] * data[i];\n \n for (let j = 1; j < b.length; j++) {\n if (i - j >= 0) {\n result[i] += b[j] * data[i - j];\n result[i] -= a[j] * result[i - j];\n }\n }\n }\n \n return result;\n}\n\n/**\n * Forward-backward filtering for zero-phase response\n */\nfunction filtfilt(data: Float32Array | Float64Array, b: number[], a: number[]): Float32Array {\n // Forward pass\n const forward = iirFilter(data, b, a);\n \n // Reverse\n const reversed = new Float32Array(forward.length);\n for (let i = 0; i < forward.length; i++) {\n reversed[i] = forward[forward.length - 1 - i];\n }\n \n // Backward pass\n const backward = iirFilter(reversed, b, a);\n \n // Reverse again\n const result = new Float32Array(backward.length);\n for (let i = 0; i < backward.length; i++) {\n result[i] = backward[backward.length - 1 - i];\n }\n \n return result;\n}\n\n// ============================================\n// Smoothing Filters\n// ============================================\n\n/**\n * Exponential moving average filter\n */\nexport function exponentialMovingAverage(\n data: Float32Array | Float64Array,\n alpha: number = 0.3\n): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n \n result[0] = data[0];\n for (let i = 1; i < n; i++) {\n result[i] = alpha * data[i] + (1 - alpha) * result[i - 1];\n }\n \n return result;\n}\n\n/**\n * Gaussian smoothing filter\n */\nexport function gaussianSmooth(\n data: Float32Array | Float64Array,\n sigma: number = 2\n): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n \n // Generate Gaussian kernel\n const kernelSize = Math.ceil(sigma * 3) * 2 + 1;\n const halfKernel = Math.floor(kernelSize / 2);\n const kernel = new Float32Array(kernelSize);\n \n let sum = 0;\n for (let i = 0; i < kernelSize; i++) {\n const x = i - halfKernel;\n kernel[i] = Math.exp(-(x * x) / (2 * sigma * sigma));\n sum += kernel[i];\n }\n \n // Normalize\n for (let i = 0; i < kernelSize; i++) {\n kernel[i] /= sum;\n }\n \n // Convolve\n for (let i = 0; i < n; i++) {\n let acc = 0;\n for (let j = 0; j < kernelSize; j++) {\n const idx = i - halfKernel + j;\n if (idx >= 0 && idx < n) {\n acc += data[idx] * kernel[j];\n }\n }\n result[i] = acc;\n }\n \n return result;\n}\n\n/**\n * Savitzky-Golay smoothing filter\n */\nexport function savitzkyGolay(\n data: Float32Array | Float64Array,\n windowSize: number = 5,\n polynomialOrder: number = 2\n): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n const halfWindow = Math.floor(windowSize / 2);\n \n // Pre-compute coefficients for polynomial fitting\n const coeffs = computeSGCoefficients(windowSize, polynomialOrder);\n \n for (let i = 0; i < n; i++) {\n let sum = 0;\n for (let j = -halfWindow; j <= halfWindow; j++) {\n const idx = i + j;\n if (idx >= 0 && idx < n) {\n sum += data[idx] * coeffs[j + halfWindow];\n } else if (idx < 0) {\n sum += data[0] * coeffs[j + halfWindow];\n } else {\n sum += data[n - 1] * coeffs[j + halfWindow];\n }\n }\n result[i] = sum;\n }\n \n return result;\n}\n\n/**\n * Compute Savitzky-Golay coefficients\n */\nfunction computeSGCoefficients(windowSize: number, _order: number): Float32Array {\n const halfWindow = Math.floor(windowSize / 2);\n const coeffs = new Float32Array(windowSize);\n \n // Simple approximation for smoothing (order 0)\n // For full SG, would need matrix inversion\n const weight = 1 / windowSize;\n for (let i = 0; i < windowSize; i++) {\n // Quadratic weighting for better smoothing\n const x = i - halfWindow;\n coeffs[i] = weight * (1 - (x * x) / ((halfWindow + 1) * (halfWindow + 1)));\n }\n \n // Normalize\n let sum = 0;\n for (let i = 0; i < windowSize; i++) sum += coeffs[i];\n for (let i = 0; i < windowSize; i++) coeffs[i] /= sum;\n \n return coeffs;\n}\n\n// ============================================\n// Median Filter\n// ============================================\n\n/**\n * Median filter (good for spike removal)\n */\nexport function medianFilter(\n data: Float32Array | Float64Array,\n windowSize: number = 5\n): Float32Array {\n const n = data.length;\n const result = new Float32Array(n);\n const halfWindow = Math.floor(windowSize / 2);\n \n for (let i = 0; i < n; i++) {\n const window: number[] = [];\n \n for (let j = -halfWindow; j <= halfWindow; j++) {\n const idx = i + j;\n if (idx >= 0 && idx < n) {\n window.push(data[idx]);\n }\n }\n \n window.sort((a, b) => a - b);\n result[i] = window[Math.floor(window.length / 2)];\n }\n \n return result;\n}\n","/**\n * Contour Plot Generation (Marching Squares)\n */\n\nexport interface ContourPoint {\n x: number;\n y: number;\n}\n\nexport interface ContourLine {\n level: number;\n points: ContourPoint[];\n}\n\nexport interface ContourOptions {\n levels?: number[];\n numLevels?: number;\n}\n\n/**\n * Generate contour lines from a 2D grid of values\n * Values are assumed to be in row-major order: z = values[y * width + x]\n */\nexport function generateContours(\n z: Float32Array | number[],\n xValues: Float32Array | number[],\n yValues: Float32Array | number[],\n options: ContourOptions = {}\n): ContourLine[] {\n const width = xValues.length;\n const height = yValues.length;\n \n const minZ = Math.min(...z);\n const maxZ = Math.max(...z);\n \n const levels = options.levels || calculateLevels(minZ, maxZ, options.numLevels || 10);\n const result: ContourLine[] = [];\n\n for (const level of levels) {\n const segments: Array<[number, number, number, number]> = [];\n \n // Process each cell\n for (let y = 0; y < height - 1; y++) {\n for (let x = 0; x < width - 1; x++) {\n const v0 = z[y * width + x];\n const v1 = z[y * width + (x + 1)];\n const v2 = z[(y + 1) * width + (x + 1)];\n const v3 = z[(y + 1) * width + x];\n \n processCell(x, y, v0, v1, v2, v3, level, xValues, yValues, segments);\n }\n }\n \n if (segments.length > 0) {\n // For simplicity, we return points as a flat array of segments\n // In a real implementation, we would join them into polylines\n const points: ContourPoint[] = [];\n for (const seg of segments) {\n points.push({ x: seg[0], y: seg[1] });\n points.push({ x: seg[2], y: seg[3] });\n }\n result.push({ level, points });\n }\n }\n\n return result;\n}\n\nfunction calculateLevels(min: number, max: number, n: number): number[] {\n const levels = [];\n const step = (max - min) / (n + 1);\n for (let i = 1; i <= n; i++) {\n levels.push(min + i * step);\n }\n return levels;\n}\n\n/**\n * Process a single cell using Marching Squares\n */\nfunction processCell(\n x: number, y: number,\n v0: number, v1: number, v2: number, v3: number,\n level: number,\n xScale: any, yScale: any,\n segments: Array<[number, number, number, number]>\n) {\n let caseIndex = 0;\n if (v0 >= level) caseIndex |= 1;\n if (v1 >= level) caseIndex |= 2;\n if (v2 >= level) caseIndex |= 4;\n if (v3 >= level) caseIndex |= 8;\n\n if (caseIndex === 0 || caseIndex === 15) return;\n\n // Interpolation helpers\n const lerp = (v0: number, v1: number, t: number) => v0 + (v1 - v0) * t;\n const getT = (v0: number, v1: number) => (level - v0) / (v1 - v0);\n\n // Edges: 0 (top), 1 (right), 2 (bottom), 3 (left)\n const getPoint = (edge: number): [number, number] => {\n switch (edge) {\n case 0: return [lerp(xScale[x], xScale[x + 1], getT(v0, v1)), yScale[y]];\n case 1: return [xScale[x + 1], lerp(yScale[y], yScale[y + 1], getT(v1, v2))];\n case 2: return [lerp(xScale[x], xScale[x + 1], getT(v3, v2)), yScale[y + 1]];\n case 3: return [xScale[x], lerp(yScale[y], yScale[y + 1], getT(v0, v3))];\n default: return [0, 0];\n }\n };\n\n const addSeg = (e1: number, e2: number) => {\n const p1 = getPoint(e1);\n const p2 = getPoint(e2);\n segments.push([p1[0], p1[1], p2[0], p2[1]]);\n };\n\n // Case table\n switch (caseIndex) {\n case 1: case 14: addSeg(0, 3); break;\n case 2: case 13: addSeg(0, 1); break;\n case 3: case 12: addSeg(1, 3); break;\n case 4: case 11: addSeg(1, 2); break;\n case 5: addSeg(0, 1); addSeg(2, 3); break; // Ambiguous\n case 6: case 9: addSeg(0, 2); break;\n case 7: case 8: addSeg(2, 3); break;\n case 10: addSeg(0, 3); addSeg(1, 2); break; // Ambiguous\n }\n}\n","/**\n * Advanced Statistical Analysis\n * \n * Provides:\n * - Cross-correlation\n * - Auto-correlation\n * - Anomaly detection\n * - Statistical tests\n * - Numerical integration (Simpson, trapezoidal)\n */\n\n// ============================================\n// Correlation Analysis\n// ============================================\n\n/** Cross-correlation result */\nexport interface CorrelationResult {\n /** Correlation values at each lag */\n correlation: Float32Array;\n /** Lag values */\n lags: Float32Array;\n /** Maximum correlation value */\n maxCorrelation: number;\n /** Lag at maximum correlation */\n lagAtMax: number;\n}\n\n/**\n * Compute cross-correlation between two signals\n */\nexport function crossCorrelation(\n signal1: Float32Array | Float64Array,\n signal2: Float32Array | Float64Array,\n maxLag?: number\n): CorrelationResult {\n const n1 = signal1.length;\n const n2 = signal2.length;\n const effectiveMaxLag = maxLag ?? Math.min(n1, n2) - 1;\n const numLags = 2 * effectiveMaxLag + 1;\n \n const correlation = new Float32Array(numLags);\n const lags = new Float32Array(numLags);\n \n // Compute means\n let mean1 = 0, mean2 = 0;\n for (let i = 0; i < n1; i++) mean1 += signal1[i];\n for (let i = 0; i < n2; i++) mean2 += signal2[i];\n mean1 /= n1;\n mean2 /= n2;\n \n // Compute standard deviations\n let std1 = 0, std2 = 0;\n for (let i = 0; i < n1; i++) std1 += (signal1[i] - mean1) ** 2;\n for (let i = 0; i < n2; i++) std2 += (signal2[i] - mean2) ** 2;\n std1 = Math.sqrt(std1 / n1);\n std2 = Math.sqrt(std2 / n2);\n \n const normFactor = std1 * std2 * Math.min(n1, n2);\n \n let maxCorr = -Infinity;\n let maxLagIdx = 0;\n \n for (let lagIdx = 0; lagIdx < numLags; lagIdx++) {\n const lag = lagIdx - effectiveMaxLag;\n lags[lagIdx] = lag;\n \n let sum = 0;\n let count = 0;\n \n for (let i = 0; i < n1; i++) {\n const j = i + lag;\n if (j >= 0 && j < n2) {\n sum += (signal1[i] - mean1) * (signal2[j] - mean2);\n count++;\n }\n }\n \n correlation[lagIdx] = normFactor > 0 ? sum / normFactor : 0;\n \n if (correlation[lagIdx] > maxCorr) {\n maxCorr = correlation[lagIdx];\n maxLagIdx = lagIdx;\n }\n }\n \n return {\n correlation,\n lags,\n maxCorrelation: maxCorr,\n lagAtMax: lags[maxLagIdx],\n };\n}\n\n/**\n * Compute auto-correlation of a signal\n */\nexport function autoCorrelation(\n signal: Float32Array | Float64Array,\n maxLag?: number\n): CorrelationResult {\n return crossCorrelation(signal, signal, maxLag);\n}\n\n// ============================================\n// Anomaly Detection\n// ============================================\n\n/** Anomaly detection result */\nexport interface AnomalyResult {\n /** Indices of anomalous points */\n indices: number[];\n /** Anomaly scores for all points */\n scores: Float32Array;\n /** Threshold used for detection */\n threshold: number;\n}\n\n/** Anomaly detection options */\nexport interface AnomalyOptions {\n /** Detection method */\n method?: 'zscore' | 'mad' | 'iqr' | 'isolation';\n /** Threshold multiplier (default: 3 for zscore, 2.5 for mad, 1.5 for iqr) */\n threshold?: number;\n /** Window size for local anomaly detection (default: use global) */\n windowSize?: number;\n}\n\n/**\n * Detect anomalies in a signal\n */\nexport function detectAnomalies(\n data: Float32Array | Float64Array,\n options: AnomalyOptions = {}\n): AnomalyResult {\n const { method = 'zscore', windowSize } = options;\n \n switch (method) {\n case 'zscore':\n return detectAnomaliesZScore(data, options.threshold ?? 3, windowSize);\n case 'mad':\n return detectAnomaliesMAD(data, options.threshold ?? 2.5, windowSize);\n case 'iqr':\n return detectAnomaliesIQR(data, options.threshold ?? 1.5);\n case 'isolation':\n return detectAnomaliesIsolation(data, options.threshold ?? 0.5);\n default:\n return detectAnomaliesZScore(data, 3, windowSize);\n }\n}\n\n/**\n * Z-score based anomaly detection\n */\nfunction detectAnomaliesZScore(\n data: Float32Array | Float64Array,\n threshold: number,\n windowSize?: number\n): AnomalyResult {\n const n = data.length;\n const scores = new Float32Array(n);\n const indices: number[] = [];\n \n if (windowSize && windowSize < n) {\n // Local anomaly detection\n const halfWindow = Math.floor(windowSize / 2);\n \n for (let i = 0; i < n; i++) {\n const start = Math.max(0, i - halfWindow);\n const end = Math.min(n, i + halfWindow + 1);\n \n let mean = 0;\n for (let j = start; j < end; j++) mean += data[j];\n mean /= (end - start);\n \n let std = 0;\n for (let j = start; j < end; j++) std += (data[j] - mean) ** 2;\n std = Math.sqrt(std / (end - start));\n \n scores[i] = std > 0 ? Math.abs(data[i] - mean) / std : 0;\n \n if (scores[i] > threshold) {\n indices.push(i);\n }\n }\n } else {\n // Global anomaly detection\n let mean = 0;\n for (let i = 0; i < n; i++) mean += data[i];\n mean /= n;\n \n let std = 0;\n for (let i = 0; i < n; i++) std += (data[i] - mean) ** 2;\n std = Math.sqrt(std / n);\n \n for (let i = 0; i < n; i++) {\n scores[i] = std > 0 ? Math.abs(data[i] - mean) / std : 0;\n \n if (scores[i] > threshold) {\n indices.push(i);\n }\n }\n }\n \n return { indices, scores, threshold };\n}\n\n/**\n * Median Absolute Deviation (MAD) based anomaly detection\n */\nfunction detectAnomaliesMAD(\n data: Float32Array | Float64Array,\n threshold: number,\n _windowSize?: number\n): AnomalyResult {\n const n = data.length;\n const scores = new Float32Array(n);\n const indices: number[] = [];\n \n // Compute median\n const sorted = Array.from(data).sort((a, b) => a - b);\n const median = sorted[Math.floor(n / 2)];\n \n // Compute MAD\n const absDeviations = sorted.map(x => Math.abs(x - median)).sort((a, b) => a - b);\n const mad = absDeviations[Math.floor(n / 2)];\n const scaledMad = 1.4826 * mad; // Scale factor for normal distribution\n \n for (let i = 0; i < n; i++) {\n scores[i] = scaledMad > 0 ? Math.abs(data[i] - median) / scaledMad : 0;\n \n if (scores[i] > threshold) {\n indices.push(i);\n }\n }\n \n return { indices, scores, threshold };\n}\n\n/**\n * IQR (Interquartile Range) based anomaly detection\n */\nfunction detectAnomaliesIQR(\n data: Float32Array | Float64Array,\n threshold: number\n): AnomalyResult {\n const n = data.length;\n const scores = new Float32Array(n);\n const indices: number[] = [];\n \n const sorted = Array.from(data).sort((a, b) => a - b);\n const q1 = sorted[Math.floor(n * 0.25)];\n const q3 = sorted[Math.floor(n * 0.75)];\n const iqr = q3 - q1;\n \n const lowerBound = q1 - threshold * iqr;\n const upperBound = q3 + threshold * iqr;\n \n for (let i = 0; i < n; i++) {\n if (data[i] < lowerBound) {\n scores[i] = (lowerBound - data[i]) / iqr;\n indices.push(i);\n } else if (data[i] > upperBound) {\n scores[i] = (data[i] - upperBound) / iqr;\n indices.push(i);\n } else {\n scores[i] = 0;\n }\n }\n \n return { indices, scores, threshold };\n}\n\n/**\n * Simplified isolation-based anomaly detection\n */\nfunction detectAnomaliesIsolation(\n data: Float32Array | Float64Array,\n threshold: number,\n _windowSize?: number\n): AnomalyResult {\n const n = data.length;\n const scores = new Float32Array(n);\n const indices: number[] = [];\n \n // For each point, count how many neighbors are close\n const neighborRadius = calculateNeighborRadius(data);\n \n for (let i = 0; i < n; i++) {\n let neighborCount = 0;\n \n for (let j = 0; j < n; j++) {\n if (i !== j && Math.abs(data[i] - data[j]) < neighborRadius) {\n neighborCount++;\n }\n }\n \n // Isolation score: fewer neighbors = more isolated = higher score\n scores[i] = 1 - (neighborCount / n);\n \n if (scores[i] > threshold) {\n indices.push(i);\n }\n }\n \n return { indices, scores, threshold };\n}\n\n/**\n * Calculate neighbor radius for isolation detection\n */\nfunction calculateNeighborRadius(data: Float32Array | Float64Array): number {\n let min = Infinity;\n let max = -Infinity;\n \n for (let i = 0; i < data.length; i++) {\n if (data[i] < min) min = data[i];\n if (data[i] > max) max = data[i];\n }\n \n return (max - min) * 0.1; // 10% of range\n}\n\n// ============================================\n// Numerical Integration\n// ============================================\n\n/**\n * Trapezoidal integration\n */\nexport function trapezoidalIntegration(\n y: Float32Array | Float64Array,\n x?: Float32Array | Float64Array | number\n): number {\n const n = y.length;\n if (n < 2) return 0;\n \n let sum = 0;\n \n if (typeof x === 'number') {\n // Uniform spacing\n const dx = x;\n for (let i = 1; i < n; i++) {\n sum += (y[i - 1] + y[i]) * dx / 2;\n }\n } else if (x) {\n // Non-uniform spacing\n for (let i = 1; i < n; i++) {\n sum += (y[i - 1] + y[i]) * (x[i] - x[i - 1]) / 2;\n }\n } else {\n // Assume unit spacing\n for (let i = 1; i < n; i++) {\n sum += (y[i - 1] + y[i]) / 2;\n }\n }\n \n return sum;\n}\n\n/**\n * Simpson's rule integration (requires odd number of points)\n */\nexport function simpsonsIntegration(\n y: Float32Array | Float64Array,\n x?: Float32Array | Float64Array | number\n): number {\n const n = y.length;\n if (n < 3) return trapezoidalIntegration(y, x);\n \n // Ensure odd number of points\n const useN = n % 2 === 0 ? n - 1 : n;\n \n let sum = 0;\n \n if (typeof x === 'number') {\n // Uniform spacing\n const dx = x;\n \n sum = y[0] + y[useN - 1];\n \n for (let i = 1; i < useN - 1; i++) {\n sum += (i % 2 === 0 ? 2 : 4) * y[i];\n }\n \n sum *= dx / 3;\n \n // Add last interval if we had to skip a point\n if (n !== useN) {\n sum += (y[n - 2] + y[n - 1]) * dx / 2;\n }\n } else if (x) {\n // Non-uniform spacing - use trapezoidal as fallback\n return trapezoidalIntegration(y, x);\n } else {\n // Assume unit spacing\n return simpsonsIntegration(y, 1.0);\n }\n \n return sum;\n}\n\n/**\n * Cumulative integration (returns running integral)\n */\nexport function cumulativeIntegration(\n y: Float32Array | Float64Array,\n x?: Float32Array | Float64Array | number\n): Float32Array {\n const n = y.length;\n const result = new Float32Array(n);\n \n if (n < 2) {\n result[0] = 0;\n return result;\n }\n \n result[0] = 0;\n \n if (typeof x === 'number') {\n const dx = x;\n for (let i = 1; i < n; i++) {\n result[i] = result[i - 1] + (y[i - 1] + y[i]) * dx / 2;\n }\n } else if (x) {\n for (let i = 1; i < n; i++) {\n result[i] = result[i - 1] + (y[i - 1] + y[i]) * (x[i] - x[i - 1]) / 2;\n }\n } else {\n for (let i = 1; i < n; i++) {\n result[i] = result[i - 1] + (y[i - 1] + y[i]) / 2;\n }\n }\n \n return result;\n}\n\n// ============================================\n// Statistical Tests\n// ============================================\n\n/** T-test result */\nexport interface TTestResult {\n /** T-statistic */\n tStatistic: number;\n /** Degrees of freedom */\n degreesOfFreedom: number;\n /** Approximate p-value (two-tailed) */\n pValue: number;\n /** Whether the difference is significant at 0.05 level */\n significant: boolean;\n}\n\n/**\n * Two-sample t-test (Welch's t-test)\n */\nexport function tTest(\n sample1: Float32Array | Float64Array | number[],\n sample2: Float32Array | Float64Array | number[]\n): TTestResult {\n const n1 = sample1.length;\n const n2 = sample2.length;\n \n // Calculate means\n let mean1 = 0, mean2 = 0;\n for (let i = 0; i < n1; i++) mean1 += sample1[i];\n for (let i = 0; i < n2; i++) mean2 += sample2[i];\n mean1 /= n1;\n mean2 /= n2;\n \n // Calculate variances\n let var1 = 0, var2 = 0;\n for (let i = 0; i < n1; i++) var1 += (sample1[i] - mean1) ** 2;\n for (let i = 0; i < n2; i++) var2 += (sample2[i] - mean2) ** 2;\n var1 /= (n1 - 1);\n var2 /= (n2 - 1);\n \n // Calculate t-statistic\n const se = Math.sqrt(var1 / n1 + var2 / n2);\n const tStatistic = (mean1 - mean2) / se;\n \n // Welch-Satterthwaite degrees of freedom\n const num = (var1 / n1 + var2 / n2) ** 2;\n const denom = (var1 / n1) ** 2 / (n1 - 1) + (var2 / n2) ** 2 / (n2 - 1);\n const degreesOfFreedom = num / denom;\n \n // Approximate p-value using normal distribution for large df\n const pValue = 2 * (1 - normalCDF(Math.abs(tStatistic)));\n \n return {\n tStatistic,\n degreesOfFreedom,\n pValue,\n significant: pValue < 0.05,\n };\n}\n\n/**\n * Approximate normal CDF\n */\nfunction normalCDF(x: number): number {\n const a1 = 0.254829592;\n const a2 = -0.284496736;\n const a3 = 1.421413741;\n const a4 = -1.453152027;\n const a5 = 1.061405429;\n const p = 0.3275911;\n \n const sign = x < 0 ? -1 : 1;\n x = Math.abs(x) / Math.sqrt(2);\n \n const t = 1 / (1 + p * x);\n const y = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);\n \n return 0.5 * (1 + sign * y);\n}\n","/**\n * SciPlot Engine - Data Analysis Plugin\n * \n * Provides mathematical and statistical tools including:\n * - FFT (Fast Fourier Transform)\n * - Digital Filters (Kalman, Low-pass, etc.)\n * - Curve Fitting and Regression\n * - Peak and Contour Detection\n * - Financial Indicators (SMA, EMA, RSI, etc.)\n * \n * @module plugins/analysis\n */\n\nimport type { PluginManifest, ChartPlugin, PluginContext } from \"../types\";\nimport { addFitLine } from \"./SeriesFit\";\nimport { fft } from \"./fft\";\nimport { integrate, derivative } from \"./math\";\nimport { fitData } from \"./fitting\";\nimport { \n calculateStats, validateData, detectPeaks, detectCycles, \n movingAverage, subtractBaseline, downsampleLTTB, \n formatWithPrefix, generateCycleColors \n} from \"./utils\";\nimport { sma, ema, rsi } from \"./indicators\";\nimport { singleFrequencyFilter } from \"./filters\";\n\n// ============================================\n// Core Exports (Utilities)\n// ============================================\n\nexport {\n formatWithPrefix,\n formatValue,\n formatScientific,\n getBestPrefix,\n detectCycles,\n generateCycleColors,\n detectPeaks,\n validateData,\n calculateStats,\n movingAverage,\n downsampleLTTB,\n subtractBaseline,\n} from './utils';\n\nexport {\n solveLinearSystem,\n calculateR2,\n integrate,\n derivative,\n cumulativeIntegral,\n} from './math';\n\nexport {\n fitData,\n} from './fitting';\n\nexport type {\n CycleInfo,\n Peak,\n PrefixInfo,\n ValidationResult,\n DataStats,\n} from './utils';\n\nexport type {\n FitType,\n FitOptions,\n FitResult,\n} from './fitting';\n\nexport * from './contours';\n\n// ============================================\n// Advanced Analysis (FFT, Filters, Statistics)\n// ============================================\n\nexport {\n fft,\n ifft,\n analyzeSpectrum,\n powerSpectrum,\n dominantFrequency,\n hanningWindow,\n hammingWindow,\n blackmanWindow,\n nextPowerOf2,\n analyzeComplexSpectrum,\n fftFromComplexInput,\n complexToArrays,\n arraysToComplex,\n ifftFromArrays,\n ifftComplex,\n getPositiveFrequencies,\n} from './fft';\n\nexport type {\n Complex,\n FFTResult,\n ComplexFFTResult,\n PowerSpectrumResult,\n} from './fft';\n\nexport {\n lowPassFilter,\n highPassFilter,\n bandPassFilter,\n bandStopFilter,\n butterworth,\n exponentialMovingAverage,\n gaussianSmooth,\n savitzkyGolay,\n medianFilter,\n singleFrequencyFilter,\n} from './filters';\n\nexport type {\n FilterType,\n FilterOptions,\n ButterworthOptions,\n SingleFrequencyFilterOptions,\n} from './filters';\n\nexport {\n crossCorrelation,\n autoCorrelation,\n detectAnomalies,\n trapezoidalIntegration,\n simpsonsIntegration,\n cumulativeIntegration as cumulativeIntegral2,\n tTest,\n} from './statistics';\n\nexport type {\n CorrelationResult,\n AnomalyResult,\n AnomalyOptions,\n TTestResult,\n} from './statistics';\n\n// ============================================\n// Technical/Financial Indicators\n// ============================================\n\nexport {\n sma,\n ema,\n wma,\n dema,\n tema,\n rsi,\n macd,\n stochastic,\n roc,\n momentum,\n bollingerBands,\n atr,\n standardDeviation,\n vwap,\n obv,\n adx,\n aroon,\n percentChange,\n cumsum,\n normalize,\n} from './indicators';\n\nexport type {\n IndicatorResult,\n OHLCData,\n} from './indicators';\n\n// ============================================\n// Plugin Definition\n// ============================================\n\nexport interface PluginAnalysisConfig {\n /** Enable worker-based off-main-thread processing */\n useWorkers?: boolean;\n /** Precision for statistical calculations */\n precision?: number;\n}\n\nconst manifestAnalysis: PluginManifest = {\n name: \"velo-plot-analysis\",\n version: \"1.0.0\",\n description: \"Data analysis and signal processing for velo-plot\",\n provides: [\"analysis\"],\n tags: [\"fft\", \"filters\", \"statistics\", \"math\"],\n};\n\n/**\n * SciPlot Analysis Plugin\n * \n * Adds comprehensive data analysis capabilities to the chart.\n */\nexport function PluginAnalysis(_config: PluginAnalysisConfig = {}): ChartPlugin<PluginAnalysisConfig> {\n let _ctx: PluginContext;\n\n return {\n manifest: manifestAnalysis,\n\n onInit(ctx: PluginContext) {\n _ctx = ctx; \n },\n\n onDestroy(_ctx: PluginContext) {\n },\n\n api: {\n addFitLine(seriesId: string, type: any, options?: any) {\n return addFitLine(_ctx.chart, seriesId, type, options);\n },\n // Math & Stats\n integrate,\n derivative,\n calculateStats,\n validateData,\n \n // Signal Processing\n fft: (data: any) => fft(data),\n detectPeaks,\n detectCycles,\n movingAverage,\n subtractBaseline,\n downsampleLTTB,\n singleFrequencyFilter,\n \n // Fitting\n fitData,\n \n // Indicators\n sma,\n ema,\n rsi,\n \n // Utils\n formatWithPrefix,\n generateCycleColors\n }\n };\n}\n\nexport default PluginAnalysis;\n"],"names":["addFitLine","ctx","seriesId","type","options","s","data","result","fitData","bounds","xMin","dataWidth","fitResolution","fitX","fitY","i","x","fitId","sourceStyle","fft","input","n","paddedLength","nextPowerOf2","padded","bitReversePermutation","size","halfSize","angle","j","theta","wRe","wIm","evenIdx","oddIdx","tRe","tIm","ifft","spectrum","conjugated","c","transformed","fftComplex","bits","reversed","reverseBits","temp","num","p","analyzeSpectrum","sampleRate","nyquist","frequency","magnitude","phase","real","imag","powerSpectrum","power","powerDb","dominantFrequency","minFrequency","maxMag","maxIdx","hanningWindow","window","hammingWindow","blackmanWindow","a0","a1","a2","analyzeComplexSpectrum","fftFromComplexInput","resultReal","resultImag","complexToArrays","complex","arraysToComplex","ifftFromArrays","ifftComplex","getPositiveFrequencies","y","fitLinear","fitPolynomial","fitExponential","fitLogarithmic","fitPower","opts","sumX","sumY","sumXY","sumX2","slope","intercept","predict","v","prec","label","calculateR2","degree","m","A","B","sum","k","coeffs","solveLinearSystem","res","equation","xPrime","yPrime","b","a","sma","period","ema","multiplier","wma","weightSum","weightedSum","dema","ema1","ema2","tema","ema3","rsi","avgGain","avgLoss","change","rs","gain","loss","macd","fastPeriod","slowPeriod","signalPeriod","fastEma","slowEma","macdLine","signal","histogram","stochastic","ohlc","kPeriod","dPeriod","high","low","close","length","kValues","highest","lowest","range","dValues","roc","pastValue","momentum","bollingerBands","stdDev","middle","upper","lower","sumSquares","diff","std","atr","tr","hl","hc","lc","standardDeviation","avg","vwap","volume","cumulativeTPV","cumulativeVolume","typicalPrice","obv","closeInput","volumeInput","adx","plusDM","minusDM","upMove","downMove","smoothedTR","smoothedPlusDM","smoothedMinusDM","plusDI","minusDI","dx","diSum","aroon","aroonUp","aroonDown","highestIdx","lowestIdx","oscillator","percentChange","prev","cumsum","normalize","min","max","lowPassFilter","cutoffHz","order","normalized","coefficients","designFIRLowPass","applyFIRFilter","highPassFilter","designFIRHighPass","bandPassFilter","lowCutoffHz","highCutoffHz","normLow","normHigh","designFIRBandPass","bandStopFilter","designFIRBandStop","normalizedCutoff","fc","lowPass","normalizedLow","normalizedHigh","fcLow","fcHigh","bandPass","halfM","idx","butterworth","cutoff","cutoffHigh","wc","wc2","designButterworth","filtfilt","singleFrequencyFilter","bandwidth","designNotchFilter","w0","r","cosW0","wa","butterLowPass","butterHighPass","wa2","butterBandPass","butterBandStop","_order","k2","sqrt2","norm","waLow","waHigh","bw","q","iirFilter","forward","backward","exponentialMovingAverage","alpha","gaussianSmooth","sigma","kernelSize","halfKernel","kernel","acc","savitzkyGolay","windowSize","polynomialOrder","halfWindow","computeSGCoefficients","weight","medianFilter","generateContours","z","xValues","yValues","width","height","minZ","maxZ","levels","calculateLevels","level","segments","v0","v1","v2","v3","processCell","points","seg","step","xScale","yScale","caseIndex","lerp","t","getT","getPoint","edge","addSeg","e1","e2","p1","p2","crossCorrelation","signal1","signal2","maxLag","n1","n2","effectiveMaxLag","numLags","correlation","lags","mean1","mean2","std1","std2","normFactor","maxCorr","maxLagIdx","lagIdx","lag","autoCorrelation","detectAnomalies","method","detectAnomaliesZScore","detectAnomaliesMAD","detectAnomaliesIQR","detectAnomaliesIsolation","threshold","scores","indices","start","end","mean","_windowSize","sorted","median","scaledMad","q1","q3","iqr","lowerBound","upperBound","neighborRadius","calculateNeighborRadius","neighborCount","trapezoidalIntegration","simpsonsIntegration","useN","cumulativeIntegration","tTest","sample1","sample2","var1","var2","se","tStatistic","denom","degreesOfFreedom","pValue","normalCDF","a3","a4","a5","sign","manifestAnalysis","PluginAnalysis","_config","_ctx","integrate","derivative","calculateStats","validateData","detectPeaks","detectCycles","movingAverage","subtractBaseline","downsampleLTTB","formatWithPrefix","generateCycleColors"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { AnnotationManager, Annotation, AnnotationType } from '../../core/annotations';
2
+ import { ChartPlugin } from '../types';
3
+
4
+ export interface PluginAnnotationsConfig {
5
+ /** Default styles for annotations */
6
+ defaultStyles?: Record<string, any>;
7
+ }
8
+ /**
9
+ * SciPlot Annotations Plugin
10
+ *
11
+ * Adds support for drawing lines, shapes, and labels on the chart.
12
+ */
13
+ export declare function PluginAnnotations(_config?: PluginAnnotationsConfig): ChartPlugin<PluginAnnotationsConfig>;
14
+ export { AnnotationManager };
15
+ export type { Annotation, AnnotationType };
16
+ export default PluginAnnotations;
@@ -0,0 +1,3 @@
1
+ export * from './annotations/index'
2
+ import SciPlot from './annotations/index'
3
+ export default SciPlot