velo-plot 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -15
- package/dist/ChartCore-AnR_3Xkb.js +7338 -0
- package/dist/ChartCore-AnR_3Xkb.js.map +1 -0
- package/dist/GpuChartRenderer-Dxc0hrQA.js +75 -0
- package/dist/GpuChartRenderer-Dxc0hrQA.js.map +1 -0
- package/dist/{index.core-BmZe2jRQ.js → PluginRegistry-CzMHebYP.js} +19 -33
- package/dist/PluginRegistry-CzMHebYP.js.map +1 -0
- package/dist/angular-hooks.js +1 -1
- package/dist/angular.js +8 -8
- package/dist/{axisFormat-CzumxpCL.js → axisFormat-Sz4WIJfQ.js} +2 -2
- package/dist/{axisFormat-CzumxpCL.js.map → axisFormat-Sz4WIJfQ.js.map} +1 -1
- package/dist/{chartSyncBridge-DbWrwtyP.js → chartSyncBridge-D_rCtbFq.js} +12 -11
- package/dist/{chartSyncBridge-DbWrwtyP.js.map → chartSyncBridge-D_rCtbFq.js.map} +1 -1
- package/dist/core/ChartStatistics.d.ts +1 -1
- package/dist/core/chart/ChartCore.d.ts +12 -17
- package/dist/core/chart/ChartFeatureHooks.d.ts +7 -0
- package/dist/core/chart/chartExportPatch.d.ts +2 -0
- package/dist/core/chart/overlaySeriesRegistry.d.ts +7 -0
- package/dist/core/chart/series/SeriesActions.d.ts +1 -0
- package/dist/core/chart/series/SeriesBufferLite.d.ts +13 -0
- package/dist/core/chart/series/seriesOptionsRegistry.d.ts +8 -0
- package/dist/core/chart/series/seriesTypeRegistry.d.ts +5 -0
- package/dist/createStackedChart-DqcLCFGS.js +1338 -0
- package/dist/createStackedChart-DqcLCFGS.js.map +1 -0
- package/dist/{hooks-CYPCxoZx.js → hooks-DH-3bewj.js} +7 -7
- package/dist/{hooks-CYPCxoZx.js.map → hooks-DH-3bewj.js.map} +1 -1
- package/dist/{index-qunX30Xu.js → index-B7PTX94B.js} +2133 -2133
- package/dist/index-B7PTX94B.js.map +1 -0
- package/dist/{index-BMiZoKmm.js → index-BgrvqltV.js} +67 -67
- package/dist/index-BgrvqltV.js.map +1 -0
- package/dist/index-Cv6ZDLWf.js +521 -0
- package/dist/index-Cv6ZDLWf.js.map +1 -0
- package/dist/index-qhscKTDy.js.map +1 -1
- package/dist/index.core.d.ts +8 -6
- package/dist/index.d.ts +1 -14
- package/dist/plugins/3d.js +3 -1
- package/dist/plugins/3d.js.map +1 -1
- package/dist/plugins/analysis.js.map +1 -1
- package/dist/plugins/createPlugin.d.ts +8 -0
- package/dist/plugins/debug.js +32 -32
- package/dist/plugins/debug.js.map +1 -1
- package/dist/plugins/gpu.js +2033 -209
- package/dist/plugins/gpu.js.map +1 -1
- package/dist/plugins/i18n.js +286 -23
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/latex.js +766 -207
- package/dist/plugins/latex.js.map +1 -1
- package/dist/plugins/loading/index.d.ts +1 -2
- package/dist/plugins/loading.js +3 -4
- package/dist/plugins/offscreen.js +11 -10
- package/dist/plugins/offscreen.js.map +1 -1
- package/dist/plugins/regression.js +254 -256
- package/dist/plugins/regression.js.map +1 -1
- package/dist/plugins/streaming.js +1 -1
- package/dist/plugins/tools.js +1 -1
- package/dist/react.js +55 -58
- package/dist/react.js.map +1 -1
- package/dist/renderer/NativeWebGLRenderer.d.ts +2 -1
- package/dist/renderer/native/NativeWebGLRenderer.d.ts +5 -1
- package/dist/renderer/native/draw.d.ts +2 -47
- package/dist/renderer/native/drawCore.d.ts +27 -0
- package/dist/renderer/native/drawExtended.d.ts +29 -0
- package/dist/renderer/native/frameRenderExtended.d.ts +1 -0
- package/dist/renderer/native/frameRenderRegistry.d.ts +27 -0
- package/dist/renderer/native/programFactoryCore.d.ts +6 -0
- package/dist/renderer/native/programFactoryExtended.d.ts +4 -0
- package/dist/renderer/native/utils.d.ts +3 -29
- package/dist/renderer/native/utilsCore.d.ts +14 -0
- package/dist/renderer/native/utilsExtended.d.ts +17 -0
- package/dist/renderer/overlaySeriesExtended.d.ts +1 -0
- package/dist/renderer/registerExtendedSeries.d.ts +1 -0
- package/dist/renderer/registerWebGPU.d.ts +2 -0
- package/dist/renderer/seriesBufferExtended.d.ts +4 -0
- package/dist/scientific/index.d.ts +1 -5
- package/dist/scientific/registerScientific.d.ts +1 -0
- package/dist/scientific.js +41 -41
- package/dist/solid.js +56 -59
- package/dist/solid.js.map +1 -1
- package/dist/svelte.js +26 -29
- package/dist/svelte.js.map +1 -1
- package/dist/trading/index.d.ts +1 -4
- package/dist/trading/registerTrading.d.ts +3 -0
- package/dist/trading.js +42 -42
- package/dist/types.d.ts +3 -3
- package/dist/velo-plot.full.js +2212 -1351
- package/dist/velo-plot.full.js.map +1 -1
- package/dist/velo-plot.js +33 -28
- package/dist/velo-plot.js.map +1 -1
- package/dist/vue/index.d.ts +2 -2
- package/dist/vue.js +17 -20
- package/dist/vue.js.map +1 -1
- package/package.json +9 -1
- package/dist/ChartCore-BpzRvN4Y.js +0 -8467
- package/dist/ChartCore-BpzRvN4Y.js.map +0 -1
- package/dist/createStackedChart-Dm-YqUT7.js +0 -756
- package/dist/createStackedChart-Dm-YqUT7.js.map +0 -1
- package/dist/gpuRenderer-BpaMYz-k.js +0 -1848
- package/dist/gpuRenderer-BpaMYz-k.js.map +0 -1
- package/dist/index-BMiZoKmm.js.map +0 -1
- package/dist/index-qunX30Xu.js.map +0 -1
- package/dist/index-x4stH3jD.js +0 -282
- package/dist/index-x4stH3jD.js.map +0 -1
- package/dist/index.core-BmZe2jRQ.js.map +0 -1
- package/dist/mockDatafeed-DHIDPcpX.js +0 -515
- package/dist/mockDatafeed-DHIDPcpX.js.map +0 -1
- package/dist/symbols-DT0eLlpW.js +0 -568
- package/dist/symbols-DT0eLlpW.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"regression.js","sources":["../../src/plugins/regression/algorithms.ts","../../src/plugins/regression/index.ts"],"sourcesContent":["/**\n * Regression Plugin - Core Algorithms\n * \n * Implements regression algorithms for scientific curve fitting.\n * Includes linear, polynomial, exponential, and non-linear models.\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type {\n RegressionData,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig\n} from './types';\nimport { solveLinearSystem } from '../analysis/math';\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction toArray(data: Float32Array | Float64Array | number[]): number[] {\n return Array.from(data);\n}\n\nfunction toFloat32Array(data: number[]): Float32Array {\n return new Float32Array(data);\n}\n\nfunction calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n}\n\nfunction calculateVariance(data: number[]): number {\n const mean = calculateMean(data);\n return data.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / data.length;\n}\n\nfunction calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n}\n\nfunction calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n}\n\nfunction calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n}\n/*\nfunction _calculateStatistics(data: RegressionData, predictions: Float32Array): { rSquared: number; rmse: number; mae: number; residuals: number[] } {\n const n = data.x.length;\n const yMean = Array.from(data.y).reduce((sum, y) => sum + y, 0) / n;\n \n let ssTotal = 0;\n let ssResidual = 0;\n \n for (let i = 0; i < n; i++) {\n const yActual = data.y[i];\n const yPred = predictions[i];\n \n ssTotal += Math.pow(yActual - yMean, 2);\n ssResidual += Math.pow(yActual - yPred, 2);\n }\n \n const rSquared = 1 - (ssResidual / ssTotal);\n const rmse = Math.sqrt(ssResidual / n);\n const mae = Array.from(data.y).reduce((sum, y, i) => sum + Math.abs(y - predictions[i]), 0) / n;\n \n return {\n rSquared,\n rmse,\n mae,\n residuals: Array.from(data.y).map((y, i) => y - predictions[i])\n };\n}\n*/\n// ============================================\n// Linear Regression\n// ============================================\n\nexport function linearRegression(\n data: RegressionData,\n config: LinearRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const weights = data.weights ? toArray(data.weights) : null;\n const { forceOrigin = false } = config;\n \n const n = x.length;\n \n if (forceOrigin) {\n // Forced through origin: y = bx\n let numerator = 0;\n let denominator = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n numerator += weight * x[i] * y[i];\n denominator += weight * x[i] * x[i];\n }\n \n const slope = numerator / denominator;\n const fittedValues = x.map(xi => slope * xi);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 1);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope],\n uncertainties: [Math.sqrt(denominator / (n * numerator))], // Simplified\n correlationMatrix: [[1]]\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: 1\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n } else {\n // Standard linear regression: y = ax + b\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0, sumY2 = 0;\n let sumWeights = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n sumX += weight * x[i];\n sumY += weight * y[i];\n sumXY += weight * x[i] * y[i];\n sumX2 += weight * x[i] * x[i];\n sumY2 += weight * y[i] * y[i];\n sumWeights += weight;\n }\n \n const meanX = sumX / sumWeights;\n const meanY = sumY / sumWeights;\n \n const slope = (sumXY - sumWeights * meanX * meanY) / (sumX2 - sumWeights * meanX * meanX);\n const intercept = meanY - slope * meanX;\n \n const fittedValues = x.map(xi => slope * xi + intercept);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 2);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope, intercept],\n uncertainties: [0.1, 0.1], // Simplified\n correlationMatrix: [[1, -0.5], [-0.5, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - meanY, 2), 0),\n n,\n k: 2\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n }\n}\n\n// ============================================\n// Polynomial Regression\n// ============================================\n\nexport function polynomialRegression(\n data: RegressionData,\n config: PolynomialRegressionConfig\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const { degree } = config;\n \n const n = x.length;\n const m = degree + 1; // Number of parameters\n \n // Build Vandermonde matrix\n const X: number[][] = [];\n for (let i = 0; i < n; i++) {\n const row: number[] = [];\n for (let j = 0; j <= degree; j++) {\n row.push(Math.pow(x[i], j));\n }\n X.push(row);\n }\n \n // Solve using least squares (simplified implementation)\n // In practice, would use QR decomposition or SVD\n const parameters = solveLeastSquares(X, y, 0);\n \n const fittedValues = x.map(xi => {\n let value = 0;\n for (let j = 0; j <= degree; j++) {\n value += parameters[j] * Math.pow(xi, j);\n }\n return value;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, m);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'polynomial',\n parameters: {\n parameters,\n uncertainties: new Array(m).fill(0.1), // Simplified\n correlationMatrix: Array(m).fill(0).map(() => Array(m).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: m\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 10, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Exponential Regression\n// ============================================\n\nexport function exponentialRegression(\n data: RegressionData,\n _config: ExponentialRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Transform to linear: ln(y - offset) = ln(amplitude) + rate * x\n // Need to estimate offset first (simplified)\n let offset = Math.min(...y) - 1;\n \n const transformedY = y.map(yi => {\n const adjusted = yi - offset;\n return adjusted > 0 ? Math.log(adjusted) : 0;\n });\n \n // Linear regression on transformed data\n const linearResult = linearRegression(\n { x, y: transformedY },\n { forceOrigin: false }\n );\n \n const [rate, logAmplitude] = linearResult.parameters.parameters;\n const amplitude = Math.exp(logAmplitude);\n \n const fittedValues = x.map(xi => amplitude * Math.exp(rate * xi) + offset);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 3);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'exponential',\n parameters: {\n parameters: [amplitude, rate, offset],\n uncertainties: [0.1, 0.01, 0.1], // Simplified\n correlationMatrix: [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 3\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 5, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Gaussian Regression\n// ============================================\n\nexport function gaussianRegression(\n data: RegressionData,\n _config: GaussianRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Non-linear fitting using simplified gradient descent\n let amplitude = Math.max(...y);\n let mean = x.reduce((sum, xi) => sum + xi, 0) / x.length;\n let std = Math.sqrt(calculateVariance(x));\n let offset = Math.min(...y);\n \n const learningRate = 0.001;\n const maxIterations = 100;\n const tolerance = 1e-6;\n \n for (let iter = 0; iter < maxIterations; iter++) {\n let gradAmplitude = 0, gradMean = 0, gradStd = 0, gradOffset = 0;\n let totalError = 0;\n \n for (let i = 0; i < x.length; i++) {\n const xi = x[i];\n const yi = y[i];\n \n // Gaussian function: A * exp(-((x - μ)² / (2σ²))) + offset\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n const predicted = amplitude * Math.exp(exponent) + offset;\n const error = yi - predicted;\n totalError += error * error;\n \n // Gradients\n const expTerm = Math.exp(exponent);\n gradAmplitude += error * expTerm;\n gradMean += error * amplitude * expTerm * (xi - mean) / (std * std);\n gradStd += error * amplitude * expTerm * Math.pow(xi - mean, 2) / (Math.pow(std, 3));\n gradOffset += error;\n }\n \n // Update parameters\n amplitude += learningRate * gradAmplitude;\n mean += learningRate * gradMean;\n std += learningRate * gradStd;\n offset += learningRate * gradOffset;\n \n // Ensure std is positive\n std = Math.max(std, 0.01);\n \n if (totalError < tolerance) break;\n }\n \n const fittedValues = x.map(xi => {\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n return amplitude * Math.exp(exponent) + offset;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 4);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'gaussian',\n parameters: {\n parameters: [amplitude, mean, std, offset],\n uncertainties: [0.1, 0.1, 0.01, 0.1], // Simplified\n correlationMatrix: Array(4).fill(0).map(() => Array(4).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 4\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: maxIterations,\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction solveLeastSquares(X: number[][], y: number[], regularization: number = 0): number[] {\n const n = X.length;\n const m = X[0].length;\n \n // Compute X^T * X\n const XtX: number[][] = Array(m).fill(0).map(() => Array(m).fill(0));\n const Xty: number[] = Array(m).fill(0);\n \n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n for (let k = 0; k < m; k++) {\n XtX[j][k] += X[i][j] * X[i][k];\n }\n Xty[j] += X[i][j] * y[i];\n }\n }\n \n // Add L2 regularization if needed\n if (regularization > 0) {\n for (let i = 0; i < m; i++) {\n XtX[i][i] += regularization;\n }\n }\n \n // Solve using Gaussian elimination\n return solveLinearSystem(XtX, Xty);\n}","/**\n * Regression Plugin - Main Implementation\n * \n * Provides advanced scientific regression and curve fitting capabilities.\n * Supports multiple regression methods with automatic model selection.\n * \n * @example\n * ```typescript\n * import { PluginRegression } from 'velo-plot/plugins/regression';\n * \n * chart.use(PluginRegression({\n * defaultMethod: 'polynomial',\n * enableAutoSelection: true,\n * modelSelectionCriteria: 'aic',\n * maxIterations: 100\n * }));\n * \n * // Fit polynomial regression\n * const result = await chart.regression.fit('series1', {\n * x: seriesData.x,\n * y: seriesData.y\n * }, 'polynomial', { degree: 3 });\n * \n * console.log(`R² = ${result.statistics.rSquared}`);\n * console.log(`Parameters: ${result.parameters.parameters}`);\n * \n * // Auto-fit best model\n * const bestFit = await chart.regression.autoFit('series1', data);\n * \n * // Visualize fit\n * chart.regression.visualizeFit('series1');\n * ```\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type { \n PluginManifest, \n ChartPlugin, \n PluginContext,\n BeforeRenderEvent,\n DataUpdateEvent\n} from '../types';\n\nimport type {\n PluginRegressionConfig,\n RegressionAPI,\n RegressionResult,\n RegressionData,\n RegressionMethod,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionStatistics\n} from './types';\n\nimport {\n linearRegression,\n polynomialRegression,\n exponentialRegression,\n gaussianRegression\n} from './algorithms';\n\n// ============================================\n// Plugin Manifest\n// ============================================\n\nconst manifestRegression: PluginManifest = {\n name: 'regression',\n version: '1.0.0',\n description: 'Advanced scientific regression and curve fitting',\n author: 'Velo Plot Team',\n provides: ['regression', 'curve-fitting', 'scientific-analysis']\n};\n\n// ============================================\n// Default Configuration\n// ============================================\n\nconst DEFAULT_CONFIG: Required<PluginRegressionConfig> = {\n defaultMethod: 'linear',\n enableAutoSelection: false,\n modelSelectionCriteria: 'aic',\n enableWeightedRegression: false,\n enableRobustRegression: false,\n robustMethod: 'huber',\n maxIterations: 100,\n convergenceTolerance: 1e-6,\n defaultConfidenceLevel: 0.95,\n enableParallelProcessing: false,\n parallelChunkSize: 1000\n};\n\n// ============================================\n// Regression Plugin Implementation\n// ============================================\n\nexport function PluginRegression(\n userConfig: Partial<PluginRegressionConfig> = {}\n): ChartPlugin<PluginRegressionConfig> {\n const config = { ...DEFAULT_CONFIG, ...userConfig };\n let ctx: PluginContext | null = null;\n \n // Results storage\n const regressionResults = new Map<string, RegressionResult[]>();\n const realtimeSeries = new Set<string>();\n const debounceTimers = new Map<string, any>();\n \n // ============================================\n // Core Regression Methods\n // ============================================\n \n async function fit(\n seriesId: string,\n data: RegressionData,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): Promise<RegressionResult> {\n try {\n // Clear previous visualization before fitting new model\n api.hideVisualization(seriesId);\n \n let result: RegressionResult;\n \n switch (method) {\n case 'linear':\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n case 'polynomial':\n result = polynomialRegression(data, methodConfig as PolynomialRegressionConfig);\n break;\n case 'exponential':\n result = exponentialRegression(data, methodConfig as ExponentialRegressionConfig);\n break;\n case 'gaussian':\n result = gaussianRegression(data, methodConfig as GaussianRegressionConfig);\n break;\n case 'logarithmic':\n // Transform y = a * log(x) + b to linear\n const logX = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logX) }, methodConfig as LinearRegressionConfig);\n result.method = 'logarithmic';\n break;\n case 'power':\n // Transform to linear: log(y) = log(a) + b * log(x)\n const logY = Array.from(data.y).map(yi => Math.log(yi));\n const logXPow = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logXPow), y: new Float32Array(logY) }, methodConfig as LinearRegressionConfig);\n result.method = 'power';\n break;\n case 'lorentzian':\n case 'sigmoid':\n case 'custom':\n // For now, fall back to linear for unsupported methods\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n default:\n throw new Error(`Unsupported regression method: ${method}`);\n }\n \n // Clear and store new result (replace, don't accumulate)\n regressionResults.set(seriesId, [result]);\n \n // Emit event\n if (ctx) {\n ctx.events.emit('regression:completed', {\n result,\n seriesId,\n method,\n timestamp: Date.now()\n } as RegressionCompletedEvent);\n }\n \n ctx?.log.info(`Regression completed for ${seriesId}: ${method} (R² = ${result.statistics.rSquared.toFixed(3)})`);\n \n return result;\n } catch (error) {\n if (ctx) {\n ctx.events.emit('regression:failed', {\n error: error as Error,\n seriesId,\n method,\n reason: `Fitting failed: ${error}`,\n timestamp: Date.now()\n } as RegressionFailedEvent);\n }\n \n throw error;\n }\n }\n \n async function fitAndCompare(\n seriesId: string,\n data: RegressionData,\n methods: RegressionMethod[],\n configs?: any[]\n ): Promise<RegressionResult[]> {\n const results: RegressionResult[] = [];\n \n for (let i = 0; i < methods.length; i++) {\n const method = methods[i];\n const methodConfig = configs ? configs[i] : {};\n \n try {\n const result = await fit(seriesId, data, method, methodConfig);\n results.push(result);\n } catch (error) {\n ctx?.log.warn(`Regression failed for ${method}: ${error}`);\n }\n }\n \n // Sort by criteria\n const criteria = config.modelSelectionCriteria;\n results.sort((a, b) => {\n switch (criteria) {\n case 'aic':\n return (a.statistics.aic || 0) - (b.statistics.aic || 0);\n case 'bic':\n return (a.statistics.bic || 0) - (b.statistics.bic || 0);\n case 'adjusted-r2':\n return b.statistics.adjustedRSquared - a.statistics.adjustedRSquared;\n default:\n return b.statistics.rSquared - a.statistics.rSquared;\n }\n });\n \n return results;\n }\n \n async function autoFit(\n seriesId: string,\n data: RegressionData,\n candidateMethods: RegressionMethod[] = ['linear', 'polynomial', 'exponential', 'gaussian']\n ): Promise<RegressionResult> {\n const configs = candidateMethods.map(method => {\n switch (method) {\n case 'polynomial':\n return { degree: 2 } as PolynomialRegressionConfig;\n case 'exponential':\n return {} as ExponentialRegressionConfig;\n case 'gaussian':\n return {} as GaussianRegressionConfig;\n default:\n return {} as LinearRegressionConfig;\n }\n });\n \n const results = await fitAndCompare(seriesId, data, candidateMethods, configs);\n \n if (results.length === 0) {\n throw new Error('No regression methods succeeded');\n }\n \n const bestResult = results[0];\n \n // Emit model selection event\n if (ctx) {\n ctx.events.emit('model:selected', {\n selectedMethod: bestResult.method,\n candidateResults: results,\n selectionCriteria: config.modelSelectionCriteria,\n seriesId,\n timestamp: Date.now()\n } as ModelSelectedEvent);\n }\n \n ctx?.log.info(`Auto-fit selected ${bestResult.method} for ${seriesId} (R² = ${bestResult.statistics.rSquared.toFixed(3)})`);\n \n return bestResult;\n }\n \n // ============================================\n // API Implementation\n // ============================================\n \n const api: RegressionAPI & Record<string, unknown> = {\n fit,\n \n fitAndCompare,\n \n autoFit,\n \n getResults(seriesId: string): RegressionResult[] {\n return regressionResults.get(seriesId) || [];\n },\n \n clearResults(seriesId: string): void {\n regressionResults.delete(seriesId);\n ctx?.log.info(`Regression results cleared for series: ${seriesId}`);\n },\n \n predict(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n resultIndex = 0\n ): Float32Array {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(xValues);\n const params = result.parameters.parameters;\n \n const predictions = x.map(xi => {\n switch (result.method) {\n case 'linear':\n return params[0] * xi + (params[1] || 0);\n case 'polynomial':\n let value = 0;\n for (let j = 0; j < params.length; j++) {\n value += params[j] * Math.pow(xi, j);\n }\n return value;\n case 'exponential':\n return params[0] * Math.exp(params[1] * xi) + (params[2] || 0);\n case 'gaussian':\n const exponent = -Math.pow(xi - params[1], 2) / (2 * params[2] * params[2]);\n return params[0] * Math.exp(exponent) + (params[3] || 0);\n case 'logarithmic':\n return params[0] * Math.log(xi) + (params[1] || 0);\n case 'power':\n return params[0] * Math.pow(xi, params[1]);\n default:\n return 0;\n }\n });\n \n return new Float32Array(predictions);\n },\n \n getConfidenceIntervals(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n _level = config.defaultConfidenceLevel,\n resultIndex = 0\n ): { lower: Float32Array; upper: Float32Array } {\n // Simplified confidence intervals\n const predictions = this.predict(seriesId, xValues, resultIndex);\n const margin = 0.1; // Simplified margin\n \n const lower = predictions.map(p => p - margin);\n const upper = predictions.map(p => p + margin);\n \n return {\n lower: new Float32Array(lower),\n upper: new Float32Array(upper)\n };\n },\n \n evaluate(seriesId: string, data: RegressionData, resultIndex = 0): RegressionStatistics {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(data.x);\n const y = Array.from(data.y);\n \n // Use existing model to predict\n const predictions = api.predict(seriesId, x, resultIndex);\n const predArray = Array.from(predictions);\n \n const rSquared = calculateRSquared(y, predArray);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, y.length, result.parameters.parameters.length);\n const rmse = calculateRMSE(y, predArray);\n \n return {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: y.reduce((sum, yi, i) => sum + Math.pow(yi - predArray[i], 2), 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: y.length,\n k: result.parameters.parameters.length\n };\n },\n \n enableRealtimeFitting(\n seriesId: string,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): void {\n realtimeSeries.add(seriesId);\n \n // Run initial fitting\n const chart = ctx?.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n }, method, methodConfig);\n }\n }\n }\n \n ctx?.log.info(`Real-time regression fitting enabled for series: ${seriesId}`);\n },\n \n disableRealtimeFitting(seriesId: string): void {\n realtimeSeries.delete(seriesId);\n \n // Clear debounce timer\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n debounceTimers.delete(seriesId);\n }\n \n ctx?.log.info(`Real-time regression fitting disabled for series: ${seriesId}`);\n },\n \n getStatistics(seriesId?: string) {\n if (seriesId) {\n const results = regressionResults.get(seriesId) || [];\n const methodsUsed: Record<RegressionMethod, number> = {} as any;\n \n for (const result of results) {\n methodsUsed[result.method] = (methodsUsed[result.method] || 0) + 1;\n }\n \n return {\n totalFittings: results.length,\n methodsUsed,\n averageRSquared: results.length > 0 ? results.reduce((sum, r) => sum + r.statistics.rSquared, 0) / results.length : 0,\n averageProcessingTime: results.length > 0 ? results.reduce((sum, r) => sum + r.processingTime, 0) / results.length : 0\n };\n } else {\n // Global statistics\n let totalFittings = 0;\n const allMethodsUsed: Record<RegressionMethod, number> = {} as any;\n const allRSquared: number[] = [];\n const allProcessingTimes: number[] = [];\n \n for (const results of regressionResults.values()) {\n totalFittings += results.length;\n allRSquared.push(...results.map(r => r.statistics.rSquared));\n allProcessingTimes.push(...results.map(r => r.processingTime));\n \n for (const result of results) {\n allMethodsUsed[result.method] = (allMethodsUsed[result.method] || 0) + 1;\n }\n }\n \n return {\n totalFittings,\n methodsUsed: allMethodsUsed,\n averageRSquared: allRSquared.length > 0 ? allRSquared.reduce((sum, r) => sum + r, 0) / allRSquared.length : 0,\n averageProcessingTime: allProcessingTimes.length > 0 ? allProcessingTimes.reduce((sum, t) => sum + t, 0) / allProcessingTimes.length : 0\n };\n }\n },\n \n updateConfig: (newConfig: Partial<PluginRegressionConfig>) => {\n Object.assign(config, newConfig);\n },\n \n getConfig: () => ({ ...config }),\n \n visualizeFit(seriesId: string, resultIndex = 0): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) return;\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const series = chart.getSeries(seriesId);\n if (!series) return;\n \n const data = series.getData();\n if (!data) return;\n \n // Remove existing fit visualization\n this.hideVisualization(seriesId);\n \n // Add fitted curve\n const fitSeriesId = `${seriesId}_fit_${result.method}`;\n const fittedValues = api.predict(seriesId, data.x, resultIndex);\n \n chart.addSeries({\n id: fitSeriesId,\n type: 'line',\n data: {\n x: new Float32Array(Array.from(data.x)),\n y: new Float32Array(fittedValues)\n },\n style: {\n color: '#ff6b6b',\n width: 2,\n opacity: 0.8,\n lineDash: [5, 5]\n }\n });\n \n // Add equation annotation\n const equation = formatEquation(result);\n const annotationId = `${seriesId}_equation_${result.method}`;\n \n chart.addAnnotation({\n id: annotationId,\n type: 'text',\n text: `${result.method.toUpperCase()}: ${equation}\\\\nR² = ${result.statistics.rSquared.toFixed(3)}`,\n x: data.x[0],\n y: Math.max(...Array.from(fittedValues)),\n style: {\n color: '#ff6b6b',\n fontSize: 12,\n backgroundColor: 'rgba(255, 255, 255, 0.9)'\n }\n } as any);\n },\n \n hideVisualization(seriesId: string): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n // List all possible regression methods to ensure cleanup\n const allMethods: RegressionMethod[] = [\n 'linear', 'polynomial', 'exponential', 'gaussian', \n 'logarithmic', 'power', 'lorentzian', 'sigmoid', 'custom'\n ];\n \n for (const method of allMethods) {\n // Remove fit series\n const fitSeriesId = `${seriesId}_fit_${method}`;\n if (chart.getSeries(fitSeriesId)) {\n chart.removeSeries(fitSeriesId);\n }\n \n // Remove equation annotation\n const annotationId = `${seriesId}_equation_${method}`;\n if (chart.getAnnotation(annotationId)) {\n chart.removeAnnotation(annotationId);\n }\n }\n },\n \n exportResults(seriesId: string, format = 'json'): string {\n const results = regressionResults.get(seriesId) || [];\n \n switch (format) {\n case 'json':\n return JSON.stringify(results, null, 2);\n case 'csv':\n let csv = 'Method,R²,RMSE,Parameters,ProcessingTime\\n';\n for (const result of results) {\n csv += `${result.method},${result.statistics.rSquared},${result.statistics.rmse},\"${result.parameters.parameters.join(', ')}\",${result.processingTime}\\n`;\n }\n return csv;\n case 'matlab':\n let matlab = `% Regression results for ${seriesId}\\n`;\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n matlab += `result${i + 1}.method = '${result.method}';\\n`;\n matlab += `result${i + 1}.rSquared = ${result.statistics.rSquared};\\n`;\n matlab += `result${i + 1}.parameters = [${result.parameters.parameters.join(', ')}];\\n`;\n }\n return matlab;\n default:\n return JSON.stringify(results, null, 2);\n }\n }\n };\n \n // ============================================\n // Helper Functions\n // ============================================\n \n function calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n }\n \n function calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n }\n \n function calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n }\n \n function calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n }\n \n function formatEquation(result: RegressionResult): string {\n const params = result.parameters.parameters;\n \n switch (result.method) {\n case 'linear':\n return params.length === 1 ? `y = ${params[0].toFixed(3)}x` : `y = ${params[0].toFixed(3)}x + ${params[1].toFixed(3)}`;\n case 'polynomial':\n let equation = 'y = ';\n for (let i = params.length - 1; i >= 0; i--) {\n if (params[i] !== 0) {\n if (i === 0) {\n equation += params[i].toFixed(3);\n } else if (i === 1) {\n equation += `${params[i].toFixed(3)}x + `;\n } else {\n equation += `${params[i].toFixed(3)}x^${i} + `;\n }\n }\n }\n return equation.replace(' + ', '').trim();\n case 'exponential':\n return `y = ${params[0].toFixed(3)} * exp(${params[1].toFixed(3)}x) + ${params[2]?.toFixed(3) || 0}`;\n case 'gaussian':\n return `y = ${params[0].toFixed(3)} * exp(-((x - ${params[1].toFixed(3)})² / (2 * ${params[2].toFixed(3)}²))) + ${params[3]?.toFixed(3) || 0}`;\n default:\n return 'y = f(x, parameters)';\n }\n }\n \n // ============================================\n // Event Handlers\n // ============================================\n \n function handleDataUpdate(context: PluginContext, event: DataUpdateEvent): void {\n const { seriesId } = event;\n \n if (realtimeSeries.has(seriesId)) {\n // Debounce fitting\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n }\n \n const newTimer = setTimeout(() => {\n const chart = context.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n });\n \n // Update visualization\n api.visualizeFit(seriesId);\n }\n }\n }\n }, 500); // 500ms debounce\n \n debounceTimers.set(seriesId, newTimer);\n }\n }\n \n // ============================================\n // Plugin Definition\n // ============================================\n \n return {\n manifest: manifestRegression,\n \n onInit(context: PluginContext) {\n ctx = context;\n ctx.log.info('Regression plugin initialized');\n },\n \n onConfigChange(_context: PluginContext, _newConfig: PluginRegressionConfig) {\n // Handle config changes\n },\n \n onBeforeRender(_context: PluginContext, _event: BeforeRenderEvent) {\n // Handle pre-render tasks if needed\n },\n \n onDataUpdate: handleDataUpdate,\n \n onDestroy(_context: PluginContext) {\n // Clean up timers\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n \n // Clear results\n regressionResults.clear();\n realtimeSeries.clear();\n },\n \n api\n };\n}\n\nexport default PluginRegression;\n\n// Re-export types for convenience\nexport type {\n RegressionMethod,\n RegressionData,\n RegressionParameters,\n RegressionStatistics,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n LogarithmicRegressionConfig,\n PowerRegressionConfig,\n GaussianRegressionConfig,\n LorentzianRegressionConfig,\n SigmoidRegressionConfig,\n CustomRegressionConfig,\n PluginRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionAPI\n} from './types';"],"names":["toArray","data","toFloat32Array","calculateMean","sum","val","calculateVariance","mean","calculateRSquared","observed","fitted","meanObserved","ssRes","ssTot","i","calculateAdjustedRSquared","rSquared","n","k","calculateRMSE","sumSquaredErrors","linearRegression","config","startTime","x","y","weights","forceOrigin","numerator","denominator","weight","slope","fittedValues","xi","residuals","yi","adjustedRSquared","rmse","r","sumX","sumY","sumXY","sumX2","sumY2","sumWeights","meanX","meanY","intercept","polynomialRegression","degree","m","X","row","j","parameters","solveLeastSquares","value","exponentialRegression","_config","offset","transformedY","adjusted","linearResult","rate","logAmplitude","amplitude","gaussianRegression","std","learningRate","maxIterations","tolerance","iter","gradAmplitude","gradMean","gradStd","gradOffset","totalError","exponent","predicted","error","expTerm","regularization","XtX","Xty","solveLinearSystem","manifestRegression","DEFAULT_CONFIG","PluginRegression","userConfig","ctx","regressionResults","realtimeSeries","debounceTimers","fit","seriesId","method","methodConfig","api","result","logX","logY","logXPow","fitAndCompare","methods","configs","results","criteria","b","autoFit","candidateMethods","bestResult","xValues","resultIndex","params","predictions","_level","margin","lower","p","upper","predArray","chart","series","timer","methodsUsed","totalFittings","allMethodsUsed","allRSquared","allProcessingTimes","t","newConfig","fitSeriesId","equation","formatEquation","annotationId","allMethods","format","csv","matlab","_a","_b","handleDataUpdate","context","event","newTimer","_context","_newConfig","_event"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"regression.js","sources":["../../src/plugins/regression/algorithms.ts","../../src/plugins/regression/index.ts"],"sourcesContent":["/**\n * Regression Plugin - Core Algorithms\n * \n * Implements regression algorithms for scientific curve fitting.\n * Includes linear, polynomial, exponential, and non-linear models.\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type {\n RegressionData,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig\n} from './types';\nimport { solveLinearSystem } from '../analysis/math';\n\n// ============================================\n// Utility Functions\n// ============================================\n\nfunction toArray(data: Float32Array | Float64Array | number[]): number[] {\n return Array.from(data);\n}\n\nfunction toFloat32Array(data: number[]): Float32Array {\n return new Float32Array(data);\n}\n\nfunction calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n}\n\nfunction calculateVariance(data: number[]): number {\n const mean = calculateMean(data);\n return data.reduce((sum, val) => sum + Math.pow(val - mean, 2), 0) / data.length;\n}\n\nfunction calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n}\n\nfunction calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n}\n\nfunction calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n}\n/*\nfunction _calculateStatistics(data: RegressionData, predictions: Float32Array): { rSquared: number; rmse: number; mae: number; residuals: number[] } {\n const n = data.x.length;\n const yMean = Array.from(data.y).reduce((sum, y) => sum + y, 0) / n;\n \n let ssTotal = 0;\n let ssResidual = 0;\n \n for (let i = 0; i < n; i++) {\n const yActual = data.y[i];\n const yPred = predictions[i];\n \n ssTotal += Math.pow(yActual - yMean, 2);\n ssResidual += Math.pow(yActual - yPred, 2);\n }\n \n const rSquared = 1 - (ssResidual / ssTotal);\n const rmse = Math.sqrt(ssResidual / n);\n const mae = Array.from(data.y).reduce((sum, y, i) => sum + Math.abs(y - predictions[i]), 0) / n;\n \n return {\n rSquared,\n rmse,\n mae,\n residuals: Array.from(data.y).map((y, i) => y - predictions[i])\n };\n}\n*/\n// ============================================\n// Linear Regression\n// ============================================\n\nexport function linearRegression(\n data: RegressionData,\n config: LinearRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const weights = data.weights ? toArray(data.weights) : null;\n const { forceOrigin = false } = config;\n \n const n = x.length;\n \n if (forceOrigin) {\n // Forced through origin: y = bx\n let numerator = 0;\n let denominator = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n numerator += weight * x[i] * y[i];\n denominator += weight * x[i] * x[i];\n }\n \n const slope = numerator / denominator;\n const fittedValues = x.map(xi => slope * xi);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 1);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope],\n uncertainties: [Math.sqrt(denominator / (n * numerator))], // Simplified\n correlationMatrix: [[1]]\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: 1\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n } else {\n // Standard linear regression: y = ax + b\n let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0;\n let sumWeights = 0;\n \n for (let i = 0; i < n; i++) {\n const weight = weights ? weights[i] : 1;\n sumX += weight * x[i];\n sumY += weight * y[i];\n sumXY += weight * x[i] * y[i];\n sumX2 += weight * x[i] * x[i];\n sumWeights += weight;\n }\n \n const meanX = sumX / sumWeights;\n const meanY = sumY / sumWeights;\n \n const slope = (sumXY - sumWeights * meanX * meanY) / (sumX2 - sumWeights * meanX * meanX);\n const intercept = meanY - slope * meanX;\n \n const fittedValues = x.map(xi => slope * xi + intercept);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, 2);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'linear',\n parameters: {\n parameters: [slope, intercept],\n uncertainties: [0.1, 0.1], // Simplified\n correlationMatrix: [[1, -0.5], [-0.5, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - meanY, 2), 0),\n n,\n k: 2\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 1,\n processingTime: performance.now() - startTime\n };\n }\n}\n\n// ============================================\n// Polynomial Regression\n// ============================================\n\nexport function polynomialRegression(\n data: RegressionData,\n config: PolynomialRegressionConfig\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n const { degree } = config;\n \n const n = x.length;\n const m = degree + 1; // Number of parameters\n \n // Build Vandermonde matrix\n const X: number[][] = [];\n for (let i = 0; i < n; i++) {\n const row: number[] = [];\n for (let j = 0; j <= degree; j++) {\n row.push(Math.pow(x[i], j));\n }\n X.push(row);\n }\n \n // Solve using least squares (simplified implementation)\n // In practice, would use QR decomposition or SVD\n const parameters = solveLeastSquares(X, y, 0);\n \n const fittedValues = x.map(xi => {\n let value = 0;\n for (let j = 0; j <= degree; j++) {\n value += parameters[j] * Math.pow(xi, j);\n }\n return value;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, n, m);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'polynomial',\n parameters: {\n parameters,\n uncertainties: new Array(m).fill(0.1), // Simplified\n correlationMatrix: Array(m).fill(0).map(() => Array(m).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n,\n k: m\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 10, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Exponential Regression\n// ============================================\n\nexport function exponentialRegression(\n data: RegressionData,\n _config: ExponentialRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Transform to linear: ln(y - offset) = ln(amplitude) + rate * x\n // Need to estimate offset first (simplified)\n const offset = Math.min(...y) - 1;\n \n const transformedY = y.map(yi => {\n const adjusted = yi - offset;\n return adjusted > 0 ? Math.log(adjusted) : 0;\n });\n \n // Linear regression on transformed data\n const linearResult = linearRegression(\n { x, y: transformedY },\n { forceOrigin: false }\n );\n \n const [rate, logAmplitude] = linearResult.parameters.parameters;\n const amplitude = Math.exp(logAmplitude);\n \n const fittedValues = x.map(xi => amplitude * Math.exp(rate * xi) + offset);\n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 3);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'exponential',\n parameters: {\n parameters: [amplitude, rate, offset],\n uncertainties: [0.1, 0.01, 0.1], // Simplified\n correlationMatrix: [[1, 0.5, 0.2], [0.5, 1, 0.3], [0.2, 0.3, 1]] // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 3\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: 5, // Simplified\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Gaussian Regression\n// ============================================\n\nexport function gaussianRegression(\n data: RegressionData,\n _config: GaussianRegressionConfig = {}\n): RegressionResult {\n const startTime = performance.now();\n \n const x = toArray(data.x);\n const y = toArray(data.y);\n \n // Non-linear fitting using simplified gradient descent\n let amplitude = Math.max(...y);\n let mean = x.reduce((sum, xi) => sum + xi, 0) / x.length;\n let std = Math.sqrt(calculateVariance(x));\n let offset = Math.min(...y);\n \n const learningRate = 0.001;\n const maxIterations = 100;\n const tolerance = 1e-6;\n \n for (let iter = 0; iter < maxIterations; iter++) {\n let gradAmplitude = 0, gradMean = 0, gradStd = 0, gradOffset = 0;\n let totalError = 0;\n \n for (let i = 0; i < x.length; i++) {\n const xi = x[i];\n const yi = y[i];\n \n // Gaussian function: A * exp(-((x - μ)² / (2σ²))) + offset\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n const predicted = amplitude * Math.exp(exponent) + offset;\n const error = yi - predicted;\n totalError += error * error;\n \n // Gradients\n const expTerm = Math.exp(exponent);\n gradAmplitude += error * expTerm;\n gradMean += error * amplitude * expTerm * (xi - mean) / (std * std);\n gradStd += error * amplitude * expTerm * Math.pow(xi - mean, 2) / (Math.pow(std, 3));\n gradOffset += error;\n }\n \n // Update parameters\n amplitude += learningRate * gradAmplitude;\n mean += learningRate * gradMean;\n std += learningRate * gradStd;\n offset += learningRate * gradOffset;\n \n // Ensure std is positive\n std = Math.max(std, 0.01);\n \n if (totalError < tolerance) break;\n }\n \n const fittedValues = x.map(xi => {\n const exponent = -Math.pow(xi - mean, 2) / (2 * std * std);\n return amplitude * Math.exp(exponent) + offset;\n });\n \n const residuals = y.map((yi, i) => yi - fittedValues[i]);\n \n const rSquared = calculateRSquared(y, fittedValues);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, x.length, 4);\n const rmse = calculateRMSE(y, fittedValues);\n \n return {\n method: 'gaussian',\n parameters: {\n parameters: [amplitude, mean, std, offset],\n uncertainties: [0.1, 0.1, 0.01, 0.1], // Simplified\n correlationMatrix: Array(4).fill(0).map(() => Array(4).fill(0)) // Simplified\n },\n statistics: {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: residuals.reduce((sum, r) => sum + r * r, 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: x.length,\n k: 4\n },\n fittedValues: toFloat32Array(fittedValues),\n residuals: toFloat32Array(residuals),\n goodnessOfFit: rSquared > 0.9 ? 'excellent' : rSquared > 0.7 ? 'good' : rSquared > 0.5 ? 'fair' : 'poor',\n converged: true,\n iterations: maxIterations,\n processingTime: performance.now() - startTime\n };\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction solveLeastSquares(X: number[][], y: number[], regularization: number = 0): number[] {\n const n = X.length;\n const m = X[0].length;\n \n // Compute X^T * X\n const XtX: number[][] = Array(m).fill(0).map(() => Array(m).fill(0));\n const Xty: number[] = Array(m).fill(0);\n \n for (let i = 0; i < n; i++) {\n for (let j = 0; j < m; j++) {\n for (let k = 0; k < m; k++) {\n XtX[j][k] += X[i][j] * X[i][k];\n }\n Xty[j] += X[i][j] * y[i];\n }\n }\n \n // Add L2 regularization if needed\n if (regularization > 0) {\n for (let i = 0; i < m; i++) {\n XtX[i][i] += regularization;\n }\n }\n \n // Solve using Gaussian elimination\n return solveLinearSystem(XtX, Xty);\n}","/**\n * Regression Plugin - Main Implementation\n * \n * Provides advanced scientific regression and curve fitting capabilities.\n * Supports multiple regression methods with automatic model selection.\n * \n * @example\n * ```typescript\n * import { PluginRegression } from 'velo-plot/plugins/regression';\n * \n * chart.use(PluginRegression({\n * defaultMethod: 'polynomial',\n * enableAutoSelection: true,\n * modelSelectionCriteria: 'aic',\n * maxIterations: 100\n * }));\n * \n * // Fit polynomial regression\n * const result = await chart.regression.fit('series1', {\n * x: seriesData.x,\n * y: seriesData.y\n * }, 'polynomial', { degree: 3 });\n * \n * console.log(`R² = ${result.statistics.rSquared}`);\n * console.log(`Parameters: ${result.parameters.parameters}`);\n * \n * // Auto-fit best model\n * const bestFit = await chart.regression.autoFit('series1', data);\n * \n * // Visualize fit\n * chart.regression.visualizeFit('series1');\n * ```\n * \n * @packageDocumentation\n * @module plugins/regression\n */\n\nimport type { \n PluginManifest, \n ChartPlugin, \n PluginContext,\n BeforeRenderEvent,\n DataUpdateEvent\n} from '../types';\n\nimport type {\n PluginRegressionConfig,\n RegressionAPI,\n RegressionResult,\n RegressionData,\n RegressionMethod,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n GaussianRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionStatistics\n} from './types';\n\nimport {\n linearRegression,\n polynomialRegression,\n exponentialRegression,\n gaussianRegression\n} from './algorithms';\n\n// ============================================\n// Plugin Manifest\n// ============================================\n\nconst manifestRegression: PluginManifest = {\n name: 'regression',\n version: '1.0.0',\n description: 'Advanced scientific regression and curve fitting',\n author: 'Velo Plot Team',\n provides: ['regression', 'curve-fitting', 'scientific-analysis']\n};\n\n// ============================================\n// Default Configuration\n// ============================================\n\nconst DEFAULT_CONFIG: Required<PluginRegressionConfig> = {\n defaultMethod: 'linear',\n enableAutoSelection: false,\n modelSelectionCriteria: 'aic',\n enableWeightedRegression: false,\n enableRobustRegression: false,\n robustMethod: 'huber',\n maxIterations: 100,\n convergenceTolerance: 1e-6,\n defaultConfidenceLevel: 0.95,\n enableParallelProcessing: false,\n parallelChunkSize: 1000\n};\n\n// ============================================\n// Regression Plugin Implementation\n// ============================================\n\nexport function PluginRegression(\n userConfig: Partial<PluginRegressionConfig> = {}\n): ChartPlugin<PluginRegressionConfig> {\n const config = { ...DEFAULT_CONFIG, ...userConfig };\n let ctx: PluginContext | null = null;\n \n // Results storage\n const regressionResults = new Map<string, RegressionResult[]>();\n const realtimeSeries = new Set<string>();\n const debounceTimers = new Map<string, any>();\n \n // ============================================\n // Core Regression Methods\n // ============================================\n \n async function fit(\n seriesId: string,\n data: RegressionData,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): Promise<RegressionResult> {\n try {\n // Clear previous visualization before fitting new model\n api.hideVisualization(seriesId);\n \n let result: RegressionResult;\n \n switch (method) {\n case 'linear':\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n case 'polynomial':\n result = polynomialRegression(data, methodConfig as PolynomialRegressionConfig);\n break;\n case 'exponential':\n result = exponentialRegression(data, methodConfig as ExponentialRegressionConfig);\n break;\n case 'gaussian':\n result = gaussianRegression(data, methodConfig as GaussianRegressionConfig);\n break;\n case 'logarithmic':\n // Transform y = a * log(x) + b to linear\n const logX = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logX) }, methodConfig as LinearRegressionConfig);\n result.method = 'logarithmic';\n break;\n case 'power':\n // Transform to linear: log(y) = log(a) + b * log(x)\n const logY = Array.from(data.y).map(yi => Math.log(yi));\n const logXPow = Array.from(data.x).map(xi => Math.log(xi));\n result = linearRegression({ ...data, x: new Float32Array(logXPow), y: new Float32Array(logY) }, methodConfig as LinearRegressionConfig);\n result.method = 'power';\n break;\n case 'lorentzian':\n case 'sigmoid':\n case 'custom':\n // For now, fall back to linear for unsupported methods\n result = linearRegression(data, methodConfig as LinearRegressionConfig);\n break;\n default:\n throw new Error(`Unsupported regression method: ${method}`);\n }\n \n // Clear and store new result (replace, don't accumulate)\n regressionResults.set(seriesId, [result]);\n \n // Emit event\n if (ctx) {\n ctx.events.emit('regression:completed', {\n result,\n seriesId,\n method,\n timestamp: Date.now()\n } as RegressionCompletedEvent);\n }\n \n ctx?.log.info(`Regression completed for ${seriesId}: ${method} (R² = ${result.statistics.rSquared.toFixed(3)})`);\n \n return result;\n } catch (error) {\n if (ctx) {\n ctx.events.emit('regression:failed', {\n error: error as Error,\n seriesId,\n method,\n reason: `Fitting failed: ${error}`,\n timestamp: Date.now()\n } as RegressionFailedEvent);\n }\n \n throw error;\n }\n }\n \n async function fitAndCompare(\n seriesId: string,\n data: RegressionData,\n methods: RegressionMethod[],\n configs?: any[]\n ): Promise<RegressionResult[]> {\n const results: RegressionResult[] = [];\n \n for (let i = 0; i < methods.length; i++) {\n const method = methods[i];\n const methodConfig = configs ? configs[i] : {};\n \n try {\n const result = await fit(seriesId, data, method, methodConfig);\n results.push(result);\n } catch (error) {\n ctx?.log.warn(`Regression failed for ${method}: ${error}`);\n }\n }\n \n // Sort by criteria\n const criteria = config.modelSelectionCriteria;\n results.sort((a, b) => {\n switch (criteria) {\n case 'aic':\n return (a.statistics.aic || 0) - (b.statistics.aic || 0);\n case 'bic':\n return (a.statistics.bic || 0) - (b.statistics.bic || 0);\n case 'adjusted-r2':\n return b.statistics.adjustedRSquared - a.statistics.adjustedRSquared;\n default:\n return b.statistics.rSquared - a.statistics.rSquared;\n }\n });\n \n return results;\n }\n \n async function autoFit(\n seriesId: string,\n data: RegressionData,\n candidateMethods: RegressionMethod[] = ['linear', 'polynomial', 'exponential', 'gaussian']\n ): Promise<RegressionResult> {\n const configs = candidateMethods.map(method => {\n switch (method) {\n case 'polynomial':\n return { degree: 2 } as PolynomialRegressionConfig;\n case 'exponential':\n return {} as ExponentialRegressionConfig;\n case 'gaussian':\n return {} as GaussianRegressionConfig;\n default:\n return {} as LinearRegressionConfig;\n }\n });\n \n const results = await fitAndCompare(seriesId, data, candidateMethods, configs);\n \n if (results.length === 0) {\n throw new Error('No regression methods succeeded');\n }\n \n const bestResult = results[0];\n \n // Emit model selection event\n if (ctx) {\n ctx.events.emit('model:selected', {\n selectedMethod: bestResult.method,\n candidateResults: results,\n selectionCriteria: config.modelSelectionCriteria,\n seriesId,\n timestamp: Date.now()\n } as ModelSelectedEvent);\n }\n \n ctx?.log.info(`Auto-fit selected ${bestResult.method} for ${seriesId} (R² = ${bestResult.statistics.rSquared.toFixed(3)})`);\n \n return bestResult;\n }\n \n // ============================================\n // API Implementation\n // ============================================\n \n const api: RegressionAPI & Record<string, unknown> = {\n fit,\n \n fitAndCompare,\n \n autoFit,\n \n getResults(seriesId: string): RegressionResult[] {\n return regressionResults.get(seriesId) || [];\n },\n \n clearResults(seriesId: string): void {\n regressionResults.delete(seriesId);\n ctx?.log.info(`Regression results cleared for series: ${seriesId}`);\n },\n \n predict(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n resultIndex = 0\n ): Float32Array {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(xValues);\n const params = result.parameters.parameters;\n \n const predictions = x.map(xi => {\n switch (result.method) {\n case 'linear':\n return params[0] * xi + (params[1] || 0);\n case 'polynomial':\n let value = 0;\n for (let j = 0; j < params.length; j++) {\n value += params[j] * Math.pow(xi, j);\n }\n return value;\n case 'exponential':\n return params[0] * Math.exp(params[1] * xi) + (params[2] || 0);\n case 'gaussian':\n const exponent = -Math.pow(xi - params[1], 2) / (2 * params[2] * params[2]);\n return params[0] * Math.exp(exponent) + (params[3] || 0);\n case 'logarithmic':\n return params[0] * Math.log(xi) + (params[1] || 0);\n case 'power':\n return params[0] * Math.pow(xi, params[1]);\n default:\n return 0;\n }\n });\n \n return new Float32Array(predictions);\n },\n \n getConfidenceIntervals(\n seriesId: string,\n xValues: Float32Array | Float64Array | number[],\n _level = config.defaultConfidenceLevel,\n resultIndex = 0\n ): { lower: Float32Array; upper: Float32Array } {\n // Simplified confidence intervals\n const predictions = this.predict(seriesId, xValues, resultIndex);\n const margin = 0.1; // Simplified margin\n \n const lower = predictions.map(p => p - margin);\n const upper = predictions.map(p => p + margin);\n \n return {\n lower: new Float32Array(lower),\n upper: new Float32Array(upper)\n };\n },\n \n evaluate(seriesId: string, data: RegressionData, resultIndex = 0): RegressionStatistics {\n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) {\n throw new Error(`No regression results found for series: ${seriesId}`);\n }\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const x = Array.from(data.x);\n const y = Array.from(data.y);\n \n // Use existing model to predict\n const predictions = api.predict(seriesId, x, resultIndex);\n const predArray = Array.from(predictions);\n \n const rSquared = calculateRSquared(y, predArray);\n const adjustedRSquared = calculateAdjustedRSquared(rSquared, y.length, result.parameters.parameters.length);\n const rmse = calculateRMSE(y, predArray);\n \n return {\n rSquared,\n adjustedRSquared,\n rmse,\n rss: y.reduce((sum, yi, i) => sum + Math.pow(yi - predArray[i], 2), 0),\n tss: y.reduce((sum, yi) => sum + Math.pow(yi - calculateMean(y), 2), 0),\n n: y.length,\n k: result.parameters.parameters.length\n };\n },\n \n enableRealtimeFitting(\n seriesId: string,\n method: RegressionMethod = config.defaultMethod,\n methodConfig: any = {}\n ): void {\n realtimeSeries.add(seriesId);\n \n // Run initial fitting\n const chart = ctx?.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n }, method, methodConfig);\n }\n }\n }\n \n ctx?.log.info(`Real-time regression fitting enabled for series: ${seriesId}`);\n },\n \n disableRealtimeFitting(seriesId: string): void {\n realtimeSeries.delete(seriesId);\n \n // Clear debounce timer\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n debounceTimers.delete(seriesId);\n }\n \n ctx?.log.info(`Real-time regression fitting disabled for series: ${seriesId}`);\n },\n \n getStatistics(seriesId?: string) {\n if (seriesId) {\n const results = regressionResults.get(seriesId) || [];\n const methodsUsed: Record<RegressionMethod, number> = {} as any;\n \n for (const result of results) {\n methodsUsed[result.method] = (methodsUsed[result.method] || 0) + 1;\n }\n \n return {\n totalFittings: results.length,\n methodsUsed,\n averageRSquared: results.length > 0 ? results.reduce((sum, r) => sum + r.statistics.rSquared, 0) / results.length : 0,\n averageProcessingTime: results.length > 0 ? results.reduce((sum, r) => sum + r.processingTime, 0) / results.length : 0\n };\n } else {\n // Global statistics\n let totalFittings = 0;\n const allMethodsUsed: Record<RegressionMethod, number> = {} as any;\n const allRSquared: number[] = [];\n const allProcessingTimes: number[] = [];\n \n for (const results of regressionResults.values()) {\n totalFittings += results.length;\n allRSquared.push(...results.map(r => r.statistics.rSquared));\n allProcessingTimes.push(...results.map(r => r.processingTime));\n \n for (const result of results) {\n allMethodsUsed[result.method] = (allMethodsUsed[result.method] || 0) + 1;\n }\n }\n \n return {\n totalFittings,\n methodsUsed: allMethodsUsed,\n averageRSquared: allRSquared.length > 0 ? allRSquared.reduce((sum, r) => sum + r, 0) / allRSquared.length : 0,\n averageProcessingTime: allProcessingTimes.length > 0 ? allProcessingTimes.reduce((sum, t) => sum + t, 0) / allProcessingTimes.length : 0\n };\n }\n },\n \n updateConfig: (newConfig: Partial<PluginRegressionConfig>) => {\n Object.assign(config, newConfig);\n },\n \n getConfig: () => ({ ...config }),\n \n visualizeFit(seriesId: string, resultIndex = 0): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n const results = regressionResults.get(seriesId);\n if (!results || results.length === 0) return;\n \n const result = results[Math.min(resultIndex, results.length - 1)];\n const series = chart.getSeries(seriesId);\n if (!series) return;\n \n const data = series.getData();\n if (!data) return;\n \n // Remove existing fit visualization\n this.hideVisualization(seriesId);\n \n // Add fitted curve\n const fitSeriesId = `${seriesId}_fit_${result.method}`;\n const fittedValues = api.predict(seriesId, data.x, resultIndex);\n \n chart.addSeries({\n id: fitSeriesId,\n type: 'line',\n data: {\n x: new Float32Array(Array.from(data.x)),\n y: new Float32Array(fittedValues)\n },\n style: {\n color: '#ff6b6b',\n width: 2,\n opacity: 0.8,\n lineDash: [5, 5]\n }\n });\n \n // Add equation annotation\n const equation = formatEquation(result);\n const annotationId = `${seriesId}_equation_${result.method}`;\n \n chart.addAnnotation({\n id: annotationId,\n type: 'text',\n text: `${result.method.toUpperCase()}: ${equation}\\\\nR² = ${result.statistics.rSquared.toFixed(3)}`,\n x: data.x[0],\n y: Math.max(...Array.from(fittedValues)),\n style: {\n color: '#ff6b6b',\n fontSize: 12,\n backgroundColor: 'rgba(255, 255, 255, 0.9)'\n }\n } as any);\n },\n \n hideVisualization(seriesId: string): void {\n const chart = ctx?.chart;\n if (!chart) return;\n \n // List all possible regression methods to ensure cleanup\n const allMethods: RegressionMethod[] = [\n 'linear', 'polynomial', 'exponential', 'gaussian', \n 'logarithmic', 'power', 'lorentzian', 'sigmoid', 'custom'\n ];\n \n for (const method of allMethods) {\n // Remove fit series\n const fitSeriesId = `${seriesId}_fit_${method}`;\n if (chart.getSeries(fitSeriesId)) {\n chart.removeSeries(fitSeriesId);\n }\n \n // Remove equation annotation\n const annotationId = `${seriesId}_equation_${method}`;\n if (chart.getAnnotation(annotationId)) {\n chart.removeAnnotation(annotationId);\n }\n }\n },\n \n exportResults(seriesId: string, format = 'json'): string {\n const results = regressionResults.get(seriesId) || [];\n \n switch (format) {\n case 'json':\n return JSON.stringify(results, null, 2);\n case 'csv':\n let csv = 'Method,R²,RMSE,Parameters,ProcessingTime\\n';\n for (const result of results) {\n csv += `${result.method},${result.statistics.rSquared},${result.statistics.rmse},\"${result.parameters.parameters.join(', ')}\",${result.processingTime}\\n`;\n }\n return csv;\n case 'matlab':\n let matlab = `% Regression results for ${seriesId}\\n`;\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n matlab += `result${i + 1}.method = '${result.method}';\\n`;\n matlab += `result${i + 1}.rSquared = ${result.statistics.rSquared};\\n`;\n matlab += `result${i + 1}.parameters = [${result.parameters.parameters.join(', ')}];\\n`;\n }\n return matlab;\n default:\n return JSON.stringify(results, null, 2);\n }\n }\n };\n \n // ============================================\n // Helper Functions\n // ============================================\n \n function calculateMean(data: number[]): number {\n return data.reduce((sum, val) => sum + val, 0) / data.length;\n }\n \n function calculateRSquared(observed: number[], fitted: number[]): number {\n const meanObserved = calculateMean(observed);\n let ssRes = 0;\n let ssTot = 0;\n \n for (let i = 0; i < observed.length; i++) {\n ssRes += Math.pow(observed[i] - fitted[i], 2);\n ssTot += Math.pow(observed[i] - meanObserved, 2);\n }\n \n return 1 - (ssRes / ssTot);\n }\n \n function calculateAdjustedRSquared(rSquared: number, n: number, k: number): number {\n return 1 - ((1 - rSquared) * (n - 1)) / (n - k - 1);\n }\n \n function calculateRMSE(observed: number[], fitted: number[]): number {\n let sumSquaredErrors = 0;\n for (let i = 0; i < observed.length; i++) {\n sumSquaredErrors += Math.pow(observed[i] - fitted[i], 2);\n }\n return Math.sqrt(sumSquaredErrors / observed.length);\n }\n \n function formatEquation(result: RegressionResult): string {\n const params = result.parameters.parameters;\n \n switch (result.method) {\n case 'linear':\n return params.length === 1 ? `y = ${params[0].toFixed(3)}x` : `y = ${params[0].toFixed(3)}x + ${params[1].toFixed(3)}`;\n case 'polynomial':\n let equation = 'y = ';\n for (let i = params.length - 1; i >= 0; i--) {\n if (params[i] !== 0) {\n if (i === 0) {\n equation += params[i].toFixed(3);\n } else if (i === 1) {\n equation += `${params[i].toFixed(3)}x + `;\n } else {\n equation += `${params[i].toFixed(3)}x^${i} + `;\n }\n }\n }\n return equation.replace(' + ', '').trim();\n case 'exponential':\n return `y = ${params[0].toFixed(3)} * exp(${params[1].toFixed(3)}x) + ${params[2]?.toFixed(3) || 0}`;\n case 'gaussian':\n return `y = ${params[0].toFixed(3)} * exp(-((x - ${params[1].toFixed(3)})² / (2 * ${params[2].toFixed(3)}²))) + ${params[3]?.toFixed(3) || 0}`;\n default:\n return 'y = f(x, parameters)';\n }\n }\n \n // ============================================\n // Event Handlers\n // ============================================\n \n function handleDataUpdate(context: PluginContext, event: DataUpdateEvent): void {\n const { seriesId } = event;\n \n if (realtimeSeries.has(seriesId)) {\n // Debounce fitting\n const timer = debounceTimers.get(seriesId);\n if (timer) {\n clearTimeout(timer);\n }\n \n const newTimer = setTimeout(() => {\n const chart = context.chart;\n if (chart) {\n const series = chart.getSeries(seriesId);\n if (series) {\n const data = series.getData();\n if (data && data.x.length > 0) {\n fit(seriesId, {\n x: data.x,\n y: data.y\n });\n \n // Update visualization\n api.visualizeFit(seriesId);\n }\n }\n }\n }, 500); // 500ms debounce\n \n debounceTimers.set(seriesId, newTimer);\n }\n }\n \n // ============================================\n // Plugin Definition\n // ============================================\n \n return {\n manifest: manifestRegression,\n \n onInit(context: PluginContext) {\n ctx = context;\n ctx.log.info('Regression plugin initialized');\n },\n \n onConfigChange(_context: PluginContext, _newConfig: PluginRegressionConfig) {\n // Handle config changes\n },\n \n onBeforeRender(_context: PluginContext, _event: BeforeRenderEvent) {\n // Handle pre-render tasks if needed\n },\n \n onDataUpdate: handleDataUpdate,\n \n onDestroy(_context: PluginContext) {\n // Clean up timers\n for (const timer of debounceTimers.values()) {\n clearTimeout(timer);\n }\n debounceTimers.clear();\n \n // Clear results\n regressionResults.clear();\n realtimeSeries.clear();\n },\n \n api\n };\n}\n\nexport default PluginRegression;\n\n// Re-export types for convenience\nexport type {\n RegressionMethod,\n RegressionData,\n RegressionParameters,\n RegressionStatistics,\n RegressionResult,\n LinearRegressionConfig,\n PolynomialRegressionConfig,\n ExponentialRegressionConfig,\n LogarithmicRegressionConfig,\n PowerRegressionConfig,\n GaussianRegressionConfig,\n LorentzianRegressionConfig,\n SigmoidRegressionConfig,\n CustomRegressionConfig,\n PluginRegressionConfig,\n RegressionCompletedEvent,\n RegressionFailedEvent,\n ModelSelectedEvent,\n RegressionAPI\n} from './types';"],"names":["toArray","data","toFloat32Array","calculateMean","sum","val","calculateVariance","mean","calculateRSquared","observed","fitted","meanObserved","ssRes","ssTot","i","calculateAdjustedRSquared","rSquared","n","k","calculateRMSE","sumSquaredErrors","linearRegression","config","startTime","x","y","weights","forceOrigin","numerator","denominator","weight","slope","fittedValues","xi","residuals","yi","adjustedRSquared","rmse","r","sumX","sumY","sumXY","sumX2","sumWeights","meanX","meanY","intercept","polynomialRegression","degree","m","X","row","j","parameters","solveLeastSquares","value","exponentialRegression","_config","offset","transformedY","adjusted","linearResult","rate","logAmplitude","amplitude","gaussianRegression","std","learningRate","maxIterations","tolerance","iter","gradAmplitude","gradMean","gradStd","gradOffset","totalError","exponent","predicted","error","expTerm","regularization","XtX","Xty","solveLinearSystem","manifestRegression","DEFAULT_CONFIG","PluginRegression","userConfig","ctx","regressionResults","realtimeSeries","debounceTimers","fit","seriesId","method","methodConfig","api","result","logX","logY","logXPow","fitAndCompare","methods","configs","results","criteria","a","b","autoFit","candidateMethods","bestResult","xValues","resultIndex","params","predictions","_level","margin","lower","p","upper","predArray","chart","series","timer","methodsUsed","totalFittings","allMethodsUsed","allRSquared","allProcessingTimes","t","newConfig","fitSeriesId","equation","formatEquation","annotationId","allMethods","format","csv","matlab","_a","_b","handleDataUpdate","context","event","newTimer","_context","_newConfig","_event"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as r, C as s, P as t, a as c, e as n, b as o, d as u, c as g, P as m } from "../index-
|
|
1
|
+
import { B as r, C as s, P as t, a as c, e as n, b as o, d as u, c as g, P as m } from "../index-BgrvqltV.js";
|
|
2
2
|
export {
|
|
3
3
|
r as BackpressureManager,
|
|
4
4
|
s as CircularBuffer,
|
package/dist/plugins/tools.js
CHANGED
package/dist/react.js
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { jsx as O, jsxs as A } from "react/jsx-runtime";
|
|
2
2
|
import { useState as R, useRef as m, useEffect as b, useCallback as E, forwardRef as F, useImperativeHandle as K, useMemo as T } from "react";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import "./ChartCore-BpzRvN4Y.js";
|
|
6
|
-
import "./index-x4stH3jD.js";
|
|
7
|
-
import "./symbols-DT0eLlpW.js";
|
|
3
|
+
import { p as B, o as j, s as G, d as H } from "./optionsSync-QUiN4Inw.js";
|
|
4
|
+
import { c as J, a as X, i as Y, r as Z, b as q } from "./chartSyncBridge-D_rCtbFq.js";
|
|
8
5
|
import { a as D, u as L } from "./a11y-Bw6urYpr.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
6
|
+
import { s as P, b as z, a as Q } from "./stackedSync-tnrunZMt.js";
|
|
7
|
+
import { c as U } from "./createStackedChart-DqcLCFGS.js";
|
|
11
8
|
function I(a, t = {}) {
|
|
12
|
-
const [l, n] = R(null), [i, p] = R(!1), [S, C] = R(null), [y, d] = R(null),
|
|
9
|
+
const [l, n] = R(null), [i, p] = R(!1), [S, C] = R(null), [y, d] = R(null), c = m(null), o = m(null), v = m(t), x = m(B(t));
|
|
13
10
|
v.current = t, b(() => {
|
|
14
11
|
const r = a.current;
|
|
15
12
|
if (r) {
|
|
16
13
|
try {
|
|
17
|
-
const e =
|
|
14
|
+
const e = J(
|
|
18
15
|
r,
|
|
19
16
|
v.current,
|
|
20
17
|
{
|
|
@@ -22,35 +19,35 @@ function I(a, t = {}) {
|
|
|
22
19
|
onError: C
|
|
23
20
|
}
|
|
24
21
|
);
|
|
25
|
-
|
|
22
|
+
c.current = e.chart, o.current = e.destroy, n(e.chart), p(!0), d(e.getBounds()), C(null), x.current = B(v.current);
|
|
26
23
|
} catch (e) {
|
|
27
24
|
console.error("[useVeloPlot] Failed to initialize chart:", e), C(e instanceof Error ? e : new Error(String(e))), p(!1);
|
|
28
25
|
}
|
|
29
26
|
return () => {
|
|
30
27
|
var e;
|
|
31
|
-
(e =
|
|
28
|
+
(e = o.current) == null || e.call(o), o.current = null, c.current = null, n(null), p(!1);
|
|
32
29
|
};
|
|
33
30
|
}
|
|
34
31
|
}, [a]), b(() => {
|
|
35
|
-
const r =
|
|
32
|
+
const r = c.current;
|
|
36
33
|
if (!r || !i) return;
|
|
37
34
|
const e = B(t), k = x.current;
|
|
38
|
-
|
|
35
|
+
j(k, e) && (G(r, k, e), x.current = e);
|
|
39
36
|
});
|
|
40
37
|
const s = E((r) => {
|
|
41
|
-
const e =
|
|
38
|
+
const e = c.current;
|
|
42
39
|
e && (e.addSeries(r), d(e.getViewBounds()));
|
|
43
40
|
}, []), f = E((r, e) => {
|
|
44
41
|
var k;
|
|
45
|
-
(k =
|
|
42
|
+
(k = c.current) == null || k.updateSeries(r, e);
|
|
46
43
|
}, []), g = E((r) => {
|
|
47
44
|
var e;
|
|
48
|
-
(e =
|
|
45
|
+
(e = c.current) == null || e.removeSeries(r);
|
|
49
46
|
}, []), u = E((r) => {
|
|
50
47
|
var e;
|
|
51
|
-
(e =
|
|
48
|
+
(e = c.current) == null || e.zoom(r);
|
|
52
49
|
}, []), h = E(() => {
|
|
53
|
-
const r =
|
|
50
|
+
const r = c.current;
|
|
54
51
|
r && (r.resetZoom(), d(r.getViewBounds()));
|
|
55
52
|
}, []);
|
|
56
53
|
return {
|
|
@@ -76,8 +73,8 @@ const N = F(
|
|
|
76
73
|
className: C = "",
|
|
77
74
|
style: y = {},
|
|
78
75
|
debug: d = !1,
|
|
79
|
-
ariaLabel:
|
|
80
|
-
keyboardNav:
|
|
76
|
+
ariaLabel: c,
|
|
77
|
+
keyboardNav: o = !0,
|
|
81
78
|
...v
|
|
82
79
|
}, x) {
|
|
83
80
|
const s = m(null), f = m(/* @__PURE__ */ new Map()), g = m(null), {
|
|
@@ -98,7 +95,7 @@ const N = F(
|
|
|
98
95
|
}),
|
|
99
96
|
[u, $, r]
|
|
100
97
|
), b(() => {
|
|
101
|
-
!h || !u || (f.current =
|
|
98
|
+
!h || !u || (f.current = H(
|
|
102
99
|
{ addSeries: e, updateSeries: k, removeSeries: V, autoScale: () => u.autoScale() },
|
|
103
100
|
t,
|
|
104
101
|
f.current
|
|
@@ -122,22 +119,22 @@ const N = F(
|
|
|
122
119
|
const M = s.current;
|
|
123
120
|
if (!(!h || !u || !M))
|
|
124
121
|
return g.current = D(M, u, {
|
|
125
|
-
label:
|
|
122
|
+
label: c,
|
|
126
123
|
series: t,
|
|
127
124
|
bounds: r,
|
|
128
|
-
enableKeyboard:
|
|
125
|
+
enableKeyboard: o
|
|
129
126
|
}), () => {
|
|
130
127
|
var w;
|
|
131
128
|
(w = g.current) == null || w.cleanup(), g.current = null;
|
|
132
129
|
};
|
|
133
|
-
}, [h, u, c,
|
|
130
|
+
}, [h, u, o, c, r, t]), b(() => {
|
|
134
131
|
const M = s.current;
|
|
135
132
|
!M || !g.current || L(M, g.current.srTable, {
|
|
136
|
-
label:
|
|
133
|
+
label: c,
|
|
137
134
|
series: t,
|
|
138
135
|
bounds: r
|
|
139
136
|
});
|
|
140
|
-
}, [t, r,
|
|
137
|
+
}, [t, r, c]);
|
|
141
138
|
const _ = T(
|
|
142
139
|
() => ({
|
|
143
140
|
position: "relative",
|
|
@@ -196,39 +193,39 @@ const N = F(
|
|
|
196
193
|
}
|
|
197
194
|
);
|
|
198
195
|
function W(a) {
|
|
199
|
-
const t = m(null), l = m(null), n = m(null), [i, p] = R(null), [S, C] = R(!1), y = m(a), d = m(P(a.panes)),
|
|
196
|
+
const t = m(null), l = m(null), n = m(null), [i, p] = R(null), [S, C] = R(!1), y = m(a), d = m(P(a.panes)), c = m(/* @__PURE__ */ new Map());
|
|
200
197
|
y.current = a;
|
|
201
|
-
const
|
|
198
|
+
const o = E(() => {
|
|
202
199
|
var g;
|
|
203
200
|
const s = t.current;
|
|
204
201
|
if (!s) return;
|
|
205
202
|
(g = n.current) == null || g.call(n);
|
|
206
|
-
const f =
|
|
203
|
+
const f = U({
|
|
207
204
|
...y.current,
|
|
208
205
|
container: s
|
|
209
206
|
});
|
|
210
207
|
l.current = f, n.current = () => {
|
|
211
208
|
f.destroy(), l.current = null;
|
|
212
|
-
}, p(f), d.current = P(y.current.panes),
|
|
209
|
+
}, p(f), d.current = P(y.current.panes), c.current = z(
|
|
213
210
|
f,
|
|
214
211
|
y.current.panes,
|
|
215
212
|
/* @__PURE__ */ new Map()
|
|
216
213
|
), f.whenReady().then(() => C(!0));
|
|
217
214
|
}, []);
|
|
218
|
-
b(() => (
|
|
215
|
+
b(() => (o(), () => {
|
|
219
216
|
var s;
|
|
220
217
|
C(!1), (s = n.current) == null || s.call(n), n.current = null, p(null);
|
|
221
|
-
}), [
|
|
218
|
+
}), [o]), b(() => {
|
|
222
219
|
const s = l.current;
|
|
223
220
|
if (!s || !S) return;
|
|
224
221
|
if (P(a.panes) !== d.current) {
|
|
225
|
-
|
|
222
|
+
o();
|
|
226
223
|
return;
|
|
227
224
|
}
|
|
228
|
-
|
|
225
|
+
Q(s, a), c.current = z(
|
|
229
226
|
s,
|
|
230
227
|
a.panes,
|
|
231
|
-
|
|
228
|
+
c.current
|
|
232
229
|
);
|
|
233
230
|
});
|
|
234
231
|
const v = E((s) => {
|
|
@@ -240,7 +237,7 @@ function W(a) {
|
|
|
240
237
|
}, []);
|
|
241
238
|
return { containerRef: t, stack: i, isReady: S, fitAll: v, resetAll: x };
|
|
242
239
|
}
|
|
243
|
-
const
|
|
240
|
+
const ae = F(
|
|
244
241
|
function({
|
|
245
242
|
width: t = "100%",
|
|
246
243
|
height: l = 480,
|
|
@@ -251,14 +248,14 @@ const fe = F(
|
|
|
251
248
|
drawingTools: C,
|
|
252
249
|
ariaLabel: y,
|
|
253
250
|
panes: d,
|
|
254
|
-
...
|
|
255
|
-
},
|
|
251
|
+
...c
|
|
252
|
+
}, o) {
|
|
256
253
|
const { containerRef: v, stack: x, isReady: s, fitAll: f, resetAll: g } = W({
|
|
257
254
|
panes: d,
|
|
258
|
-
...
|
|
255
|
+
...c
|
|
259
256
|
});
|
|
260
257
|
K(
|
|
261
|
-
|
|
258
|
+
o,
|
|
262
259
|
() => ({
|
|
263
260
|
getStack: () => x,
|
|
264
261
|
fitAll: () => f(),
|
|
@@ -289,19 +286,19 @@ const fe = F(
|
|
|
289
286
|
);
|
|
290
287
|
}
|
|
291
288
|
);
|
|
292
|
-
function
|
|
289
|
+
function le(a, t, l = {}) {
|
|
293
290
|
const [n, i] = R(null), [p, S] = R(!1), [C, y] = R(null), d = m(n);
|
|
294
291
|
return d.current = n, b(() => {
|
|
295
292
|
if (!a) return;
|
|
296
|
-
let
|
|
297
|
-
return S(!0), y(null),
|
|
298
|
-
|
|
299
|
-
}).catch((
|
|
300
|
-
|
|
293
|
+
let c = !1;
|
|
294
|
+
return S(!0), y(null), X(a, t, l).then((o) => {
|
|
295
|
+
c || (i(o), S(!1));
|
|
296
|
+
}).catch((o) => {
|
|
297
|
+
c || (y(o instanceof Error ? o : new Error(String(o))), S(!1));
|
|
301
298
|
}), () => {
|
|
302
|
-
|
|
303
|
-
const
|
|
304
|
-
|
|
299
|
+
c = !0;
|
|
300
|
+
const o = d.current;
|
|
301
|
+
o && !Y(a) && Z(a, o.id);
|
|
305
302
|
};
|
|
306
303
|
}, [a, t, JSON.stringify(l)]), { result: n, isLoading: p, error: C };
|
|
307
304
|
}
|
|
@@ -312,23 +309,23 @@ function ee(a, t) {
|
|
|
312
309
|
n(null);
|
|
313
310
|
return;
|
|
314
311
|
}
|
|
315
|
-
const i =
|
|
312
|
+
const i = q(a, t);
|
|
316
313
|
return n(i.group), () => {
|
|
317
314
|
i.destroy(), n(null);
|
|
318
315
|
};
|
|
319
316
|
}, [a, JSON.stringify(t)]), { group: l };
|
|
320
317
|
}
|
|
321
|
-
const
|
|
318
|
+
const ie = ee, fe = N, de = N, pe = I, Se = I;
|
|
322
319
|
export {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
320
|
+
de as SciChart,
|
|
321
|
+
fe as SciPlot,
|
|
322
|
+
ae as StackedPlot,
|
|
326
323
|
N as VeloPlot,
|
|
327
|
-
|
|
324
|
+
ie as useChartGroup,
|
|
328
325
|
ee as useChartSync,
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
326
|
+
le as useIndicator,
|
|
327
|
+
Se as useSciChart,
|
|
328
|
+
pe as useSciPlot,
|
|
332
329
|
W as useStackedPlot,
|
|
333
330
|
I as useVeloPlot
|
|
334
331
|
};
|