deepbox 0.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.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +344 -0
  3. package/dist/CSRMatrix-CwGwQRea.d.cts +219 -0
  4. package/dist/CSRMatrix-KzNt6QpS.d.ts +219 -0
  5. package/dist/Tensor-BQLk1ltW.d.cts +147 -0
  6. package/dist/Tensor-g8mUClel.d.ts +147 -0
  7. package/dist/chunk-4S73VUBD.js +677 -0
  8. package/dist/chunk-4S73VUBD.js.map +1 -0
  9. package/dist/chunk-5R4S63PF.js +2925 -0
  10. package/dist/chunk-5R4S63PF.js.map +1 -0
  11. package/dist/chunk-6AE5FKKQ.cjs +9264 -0
  12. package/dist/chunk-6AE5FKKQ.cjs.map +1 -0
  13. package/dist/chunk-AD436M45.js +3854 -0
  14. package/dist/chunk-AD436M45.js.map +1 -0
  15. package/dist/chunk-ALS7ETWZ.cjs +4263 -0
  16. package/dist/chunk-ALS7ETWZ.cjs.map +1 -0
  17. package/dist/chunk-AU7XHGKJ.js +2092 -0
  18. package/dist/chunk-AU7XHGKJ.js.map +1 -0
  19. package/dist/chunk-B5TNKUEY.js +1481 -0
  20. package/dist/chunk-B5TNKUEY.js.map +1 -0
  21. package/dist/chunk-BCR7G3A6.js +9136 -0
  22. package/dist/chunk-BCR7G3A6.js.map +1 -0
  23. package/dist/chunk-C4PKXY74.cjs +1917 -0
  24. package/dist/chunk-C4PKXY74.cjs.map +1 -0
  25. package/dist/chunk-DWZY6PIP.cjs +6400 -0
  26. package/dist/chunk-DWZY6PIP.cjs.map +1 -0
  27. package/dist/chunk-E3EU5FZO.cjs +2113 -0
  28. package/dist/chunk-E3EU5FZO.cjs.map +1 -0
  29. package/dist/chunk-F3JWBINJ.js +1054 -0
  30. package/dist/chunk-F3JWBINJ.js.map +1 -0
  31. package/dist/chunk-FJYLIGJX.js +1940 -0
  32. package/dist/chunk-FJYLIGJX.js.map +1 -0
  33. package/dist/chunk-JSCDE774.cjs +729 -0
  34. package/dist/chunk-JSCDE774.cjs.map +1 -0
  35. package/dist/chunk-LWECRCW2.cjs +2412 -0
  36. package/dist/chunk-LWECRCW2.cjs.map +1 -0
  37. package/dist/chunk-MLBMYKCG.js +6379 -0
  38. package/dist/chunk-MLBMYKCG.js.map +1 -0
  39. package/dist/chunk-OX6QXFMV.cjs +3874 -0
  40. package/dist/chunk-OX6QXFMV.cjs.map +1 -0
  41. package/dist/chunk-PHV2DKRS.cjs +1072 -0
  42. package/dist/chunk-PHV2DKRS.cjs.map +1 -0
  43. package/dist/chunk-PL7TAYKI.js +4056 -0
  44. package/dist/chunk-PL7TAYKI.js.map +1 -0
  45. package/dist/chunk-PR647I7R.js +1898 -0
  46. package/dist/chunk-PR647I7R.js.map +1 -0
  47. package/dist/chunk-QERHVCHC.cjs +2960 -0
  48. package/dist/chunk-QERHVCHC.cjs.map +1 -0
  49. package/dist/chunk-XEG44RF6.cjs +1514 -0
  50. package/dist/chunk-XEG44RF6.cjs.map +1 -0
  51. package/dist/chunk-XMWVME2W.js +2377 -0
  52. package/dist/chunk-XMWVME2W.js.map +1 -0
  53. package/dist/chunk-ZB75FESB.cjs +1979 -0
  54. package/dist/chunk-ZB75FESB.cjs.map +1 -0
  55. package/dist/chunk-ZLW62TJG.cjs +4061 -0
  56. package/dist/chunk-ZLW62TJG.cjs.map +1 -0
  57. package/dist/chunk-ZXKBDFP3.js +4235 -0
  58. package/dist/chunk-ZXKBDFP3.js.map +1 -0
  59. package/dist/core/index.cjs +204 -0
  60. package/dist/core/index.cjs.map +1 -0
  61. package/dist/core/index.d.cts +2 -0
  62. package/dist/core/index.d.ts +2 -0
  63. package/dist/core/index.js +3 -0
  64. package/dist/core/index.js.map +1 -0
  65. package/dist/dataframe/index.cjs +22 -0
  66. package/dist/dataframe/index.cjs.map +1 -0
  67. package/dist/dataframe/index.d.cts +3 -0
  68. package/dist/dataframe/index.d.ts +3 -0
  69. package/dist/dataframe/index.js +5 -0
  70. package/dist/dataframe/index.js.map +1 -0
  71. package/dist/datasets/index.cjs +134 -0
  72. package/dist/datasets/index.cjs.map +1 -0
  73. package/dist/datasets/index.d.cts +3 -0
  74. package/dist/datasets/index.d.ts +3 -0
  75. package/dist/datasets/index.js +5 -0
  76. package/dist/datasets/index.js.map +1 -0
  77. package/dist/index-74AB8Cyh.d.cts +1126 -0
  78. package/dist/index-9oQx1HgV.d.cts +1180 -0
  79. package/dist/index-BJY2SI4i.d.ts +483 -0
  80. package/dist/index-BWGhrDlr.d.ts +733 -0
  81. package/dist/index-B_DK4FKY.d.cts +242 -0
  82. package/dist/index-BbA2Gxfl.d.ts +456 -0
  83. package/dist/index-BgHYAoSS.d.cts +837 -0
  84. package/dist/index-BndMbqsM.d.ts +1439 -0
  85. package/dist/index-C1mfVYoo.d.ts +2517 -0
  86. package/dist/index-CCvlwAmL.d.cts +809 -0
  87. package/dist/index-CDw5CnOU.d.ts +785 -0
  88. package/dist/index-Cn3SdB0O.d.ts +1126 -0
  89. package/dist/index-CrqLlS-a.d.ts +776 -0
  90. package/dist/index-D61yaSMY.d.cts +483 -0
  91. package/dist/index-D9Loo1_A.d.cts +2517 -0
  92. package/dist/index-DIT_OO9C.d.cts +785 -0
  93. package/dist/index-DIp_RrRt.d.ts +242 -0
  94. package/dist/index-DbultU6X.d.cts +1427 -0
  95. package/dist/index-DmEg_LCm.d.cts +776 -0
  96. package/dist/index-DoPWVxPo.d.cts +1439 -0
  97. package/dist/index-DuCxd-8d.d.ts +837 -0
  98. package/dist/index-Dx42TZaY.d.ts +809 -0
  99. package/dist/index-DyZ4QQf5.d.cts +456 -0
  100. package/dist/index-GFAVyOWO.d.ts +1427 -0
  101. package/dist/index-WHQLn0e8.d.cts +733 -0
  102. package/dist/index-ZtI1Iy4L.d.ts +1180 -0
  103. package/dist/index-eJgeni9c.d.cts +1911 -0
  104. package/dist/index-tk4lSYod.d.ts +1911 -0
  105. package/dist/index.cjs +72 -0
  106. package/dist/index.cjs.map +1 -0
  107. package/dist/index.d.cts +17 -0
  108. package/dist/index.d.ts +17 -0
  109. package/dist/index.js +15 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/linalg/index.cjs +86 -0
  112. package/dist/linalg/index.cjs.map +1 -0
  113. package/dist/linalg/index.d.cts +3 -0
  114. package/dist/linalg/index.d.ts +3 -0
  115. package/dist/linalg/index.js +5 -0
  116. package/dist/linalg/index.js.map +1 -0
  117. package/dist/metrics/index.cjs +158 -0
  118. package/dist/metrics/index.cjs.map +1 -0
  119. package/dist/metrics/index.d.cts +3 -0
  120. package/dist/metrics/index.d.ts +3 -0
  121. package/dist/metrics/index.js +5 -0
  122. package/dist/metrics/index.js.map +1 -0
  123. package/dist/ml/index.cjs +87 -0
  124. package/dist/ml/index.cjs.map +1 -0
  125. package/dist/ml/index.d.cts +3 -0
  126. package/dist/ml/index.d.ts +3 -0
  127. package/dist/ml/index.js +6 -0
  128. package/dist/ml/index.js.map +1 -0
  129. package/dist/ndarray/index.cjs +501 -0
  130. package/dist/ndarray/index.cjs.map +1 -0
  131. package/dist/ndarray/index.d.cts +5 -0
  132. package/dist/ndarray/index.d.ts +5 -0
  133. package/dist/ndarray/index.js +4 -0
  134. package/dist/ndarray/index.js.map +1 -0
  135. package/dist/nn/index.cjs +142 -0
  136. package/dist/nn/index.cjs.map +1 -0
  137. package/dist/nn/index.d.cts +6 -0
  138. package/dist/nn/index.d.ts +6 -0
  139. package/dist/nn/index.js +5 -0
  140. package/dist/nn/index.js.map +1 -0
  141. package/dist/optim/index.cjs +77 -0
  142. package/dist/optim/index.cjs.map +1 -0
  143. package/dist/optim/index.d.cts +4 -0
  144. package/dist/optim/index.d.ts +4 -0
  145. package/dist/optim/index.js +4 -0
  146. package/dist/optim/index.js.map +1 -0
  147. package/dist/plot/index.cjs +114 -0
  148. package/dist/plot/index.cjs.map +1 -0
  149. package/dist/plot/index.d.cts +6 -0
  150. package/dist/plot/index.d.ts +6 -0
  151. package/dist/plot/index.js +5 -0
  152. package/dist/plot/index.js.map +1 -0
  153. package/dist/preprocess/index.cjs +82 -0
  154. package/dist/preprocess/index.cjs.map +1 -0
  155. package/dist/preprocess/index.d.cts +4 -0
  156. package/dist/preprocess/index.d.ts +4 -0
  157. package/dist/preprocess/index.js +5 -0
  158. package/dist/preprocess/index.js.map +1 -0
  159. package/dist/random/index.cjs +74 -0
  160. package/dist/random/index.cjs.map +1 -0
  161. package/dist/random/index.d.cts +3 -0
  162. package/dist/random/index.d.ts +3 -0
  163. package/dist/random/index.js +5 -0
  164. package/dist/random/index.js.map +1 -0
  165. package/dist/stats/index.cjs +142 -0
  166. package/dist/stats/index.cjs.map +1 -0
  167. package/dist/stats/index.d.cts +3 -0
  168. package/dist/stats/index.d.ts +3 -0
  169. package/dist/stats/index.js +5 -0
  170. package/dist/stats/index.js.map +1 -0
  171. package/dist/tensor-B96jjJLQ.d.cts +205 -0
  172. package/dist/tensor-B96jjJLQ.d.ts +205 -0
  173. package/package.json +226 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plot/index.ts","../src/plot/utils/colors.ts","../src/plot/utils/legend.ts","../src/plot/utils/validation.ts","../src/plot/utils/xml.ts","../src/plot/plots/Bar2D.ts","../src/plot/utils/statistics.ts","../src/plot/plots/Boxplot.ts","../src/plot/utils/colormaps.ts","../src/plot/plots/Contour2D.ts","../src/plot/plots/ContourF2D.ts","../src/plot/plots/Heatmap2D.ts","../src/plot/plots/Histogram.ts","../src/plot/plots/HorizontalBar2D.ts","../src/plot/plots/Line2D.ts","../src/plot/plots/Pie.ts","../src/plot/plots/Scatter2D.ts","../src/plot/plots/Violinplot.ts","../src/plot/utils/tensor.ts","../src/plot/utils/contours.ts","../src/plot/utils/text.ts","../src/plot/utils/ticks.ts","../src/plot/utils/transforms.ts","../src/plot/figure/Axes.ts","../src/plot/canvas/RasterCanvas.ts","../src/plot/renderers/png.ts","../src/plot/figure/Figure.ts","../src/plot/figure/state.ts"],"names":["result","h","s","l","r","g","b","p","q","mid","DEFAULT_COLORS","xLeft","xRight","tensor","n"],"mappings":"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","file":"chunk-ZXKBDFP3.js","sourcesContent":["// Re-export classes\nexport { Axes } from \"./figure/Axes\";\nexport { Figure } from \"./figure/Figure\";\n// Re-export state management functions\nexport { figure, gca, subplot } from \"./figure/state\";\nexport type {\n Color,\n LegendOptions,\n PlotOptions,\n RenderedPNG,\n RenderedSVG,\n} from \"./types\";\n\nimport { InvalidParameterError, ShapeError } from \"../core\";\n// Global plotting functions\nimport { type Tensor, tensor } from \"../ndarray\";\nimport type { Figure } from \"./figure/Figure\";\nimport { gca } from \"./figure/state\";\nimport type { LegendOptions, PlotOptions, RenderedPNG, RenderedSVG } from \"./types\";\nimport { tensorToFloat64Matrix2D } from \"./utils/tensor\";\n\n/**\n * Render a figure to SVG or PNG.\n * @param options - Optional figure and format overrides\n */\nexport function show(\n options: { readonly figure?: Figure; readonly format?: \"svg\" | \"png\" } = {}\n): RenderedSVG | Promise<RenderedPNG> {\n const fig = options.figure ?? gca().fig;\n if (options.format === \"png\") return fig.renderPNG();\n return fig.renderSVG();\n}\n\n/**\n * Save a figure to disk as SVG or PNG.\n * @param path - Output file path (extension must match format)\n * @param options - Optional figure and format overrides\n */\nexport async function saveFig(\n path: string,\n options: { readonly figure?: Figure; readonly format?: \"svg\" | \"png\" } = {}\n): Promise<void> {\n if (!path || path.trim().length === 0) {\n throw new InvalidParameterError(\"path must be a non-empty string\", \"path\", path);\n }\n const dotIndex = path.lastIndexOf(\".\");\n const ext = dotIndex > 0 ? path.slice(dotIndex + 1).toLowerCase() : undefined;\n const fmt = options.format ?? (ext === \"png\" ? \"png\" : \"svg\");\n if (ext && ext !== fmt) {\n throw new InvalidParameterError(\n `File extension .${ext} does not match format ${fmt}`,\n \"path\",\n path\n );\n }\n const fig = options.figure ?? gca().fig;\n if (fmt === \"png\") {\n const { writeFile } = await import(\"node:fs/promises\");\n const png = await fig.renderPNG();\n await writeFile(path, png.bytes);\n } else {\n const { writeFile } = await import(\"node:fs/promises\");\n const svg = fig.renderSVG();\n await writeFile(path, svg.svg, \"utf-8\");\n }\n}\n\n/**\n * Plot a connected line series on the current axes.\n */\nexport function plot(x: Tensor, y: Tensor, options: PlotOptions = {}): void {\n gca().plot(x, y, options);\n}\n\n/**\n * Plot unconnected points on the current axes.\n */\nexport function scatter(x: Tensor, y: Tensor, options: PlotOptions = {}): void {\n gca().scatter(x, y, options);\n}\n\n/**\n * Plot vertical bars on the current axes.\n */\nexport function bar(x: Tensor, height: Tensor, options: PlotOptions = {}): void {\n gca().bar(x, height, options);\n}\n\n/**\n * Plot horizontal bars on the current axes.\n */\nexport function barh(y: Tensor, width: Tensor, options: PlotOptions = {}): void {\n gca().barh(y, width, options);\n}\n\n/**\n * Plot a histogram on the current axes.\n */\nexport function hist(x: Tensor, bins = 10, options: PlotOptions = {}): void {\n gca().hist(x, bins, options);\n}\n\n/**\n * Plot a box-and-whisker summary on the current axes.\n */\nexport function boxplot(data: Tensor, options: PlotOptions = {}): void {\n gca().boxplot(data, options);\n}\n\n/**\n * Plot a violin summary on the current axes.\n */\nexport function violinplot(data: Tensor, options: PlotOptions = {}): void {\n gca().violinplot(data, options);\n}\n\n/**\n * Plot a pie chart on the current axes.\n */\nexport function pie(values: Tensor, labels?: readonly string[], options: PlotOptions = {}): void {\n gca().pie(values, labels, options);\n}\n\n/**\n * Show or configure a legend on the current axes.\n */\nexport function legend(options: LegendOptions = {}): void {\n gca().legend(options);\n}\n\n/**\n * Plot a heatmap for a 2D tensor.\n */\nexport function heatmap(data: Tensor, options: PlotOptions = {}): void {\n gca().heatmap(data, options);\n}\n\n/**\n * Display a matrix as an image (alias of heatmap).\n */\nexport function imshow(data: Tensor, options: PlotOptions = {}): void {\n gca().imshow(data, options);\n}\n\n/**\n * Plot contour lines for a 2D grid.\n */\nexport function contour(X: Tensor, Y: Tensor, Z: Tensor, options: PlotOptions = {}): void {\n gca().contour(X, Y, Z, options);\n}\n\n/**\n * Plot filled contours for a 2D grid.\n */\nexport function contourf(X: Tensor, Y: Tensor, Z: Tensor, options: PlotOptions = {}): void {\n gca().contourf(X, Y, Z, options);\n}\n\n/**\n * Plot a confusion matrix as a heatmap.\n */\nexport function plotConfusionMatrix(\n cm: Tensor,\n labels?: readonly string[],\n options: PlotOptions = {}\n): void {\n const ax = gca();\n ax.heatmap(cm, options);\n if (cm.ndim === 2) {\n const rows = cm.shape[0] ?? 0;\n const cols = cm.shape[1] ?? 0;\n ax.setTitle(\"Confusion Matrix\");\n ax.setXLabel(\"Predicted\");\n ax.setYLabel(\"Actual\");\n if (labels && labels.length < Math.max(rows, cols)) {\n throw new InvalidParameterError(\n `labels length must be >= ${Math.max(rows, cols)}; received ${labels.length}`,\n \"labels\",\n labels\n );\n }\n if (labels && rows > 0 && cols > 0) {\n const xLabels = labels.slice(0, cols);\n const yLabels = labels.slice(0, rows);\n const xValues = xLabels.map((_, i) => i + 0.5);\n const yValues = yLabels.map((_, i) => i + 0.5);\n ax.setXTicks(xValues, xLabels);\n ax.setYTicks(yValues, yLabels);\n }\n }\n}\n\n/**\n * Plot a ROC curve with optional AUC annotation.\n */\nexport function plotRocCurve(\n fpr: Tensor,\n tpr: Tensor,\n auc?: number,\n options: PlotOptions = {}\n): void {\n const ax = gca();\n ax.plot(fpr, tpr, {\n ...options,\n color: options.color ?? \"#1f77b4\",\n label: options.label ?? \"ROC\",\n });\n ax.plot(tensor([0, 1]), tensor([0, 1]), {\n color: \"#999999\",\n linewidth: 1,\n label: \"Chance\",\n });\n if (auc !== undefined) {\n ax.setTitle(`ROC Curve (AUC = ${auc.toFixed(3)})`);\n } else {\n ax.setTitle(\"ROC Curve\");\n }\n ax.setXLabel(\"False Positive Rate\");\n ax.setYLabel(\"True Positive Rate\");\n}\n\n/**\n * Plot a precision-recall curve with optional AP annotation.\n */\nexport function plotPrecisionRecallCurve(\n precision: Tensor,\n recall: Tensor,\n averagePrecision?: number,\n options: PlotOptions = {}\n): void {\n const ax = gca();\n ax.plot(recall, precision, {\n ...options,\n color: options.color ?? \"#1f77b4\",\n label: options.label ?? \"Precision-Recall\",\n });\n if (averagePrecision !== undefined) {\n ax.setTitle(`Precision-Recall Curve (AP = ${averagePrecision.toFixed(3)})`);\n } else {\n ax.setTitle(\"Precision-Recall Curve\");\n }\n ax.setXLabel(\"Recall\");\n ax.setYLabel(\"Precision\");\n}\n\n/**\n * Plot training and validation learning curves.\n */\nexport function plotLearningCurve(\n trainSizes: Tensor,\n trainScores: Tensor,\n valScores: Tensor,\n options: PlotOptions = {}\n): void {\n const ax = gca();\n const trainColor = options.colors?.[0] ?? options.color ?? \"#1f77b4\";\n const valColor = options.colors?.[1] ?? options.color ?? \"#ff7f0e\";\n ax.plot(trainSizes, trainScores, {\n color: trainColor,\n label: \"Training Score\",\n });\n ax.plot(trainSizes, valScores, {\n color: valColor,\n label: \"Validation Score\",\n });\n ax.setTitle(\"Learning Curve\");\n ax.setXLabel(\"Training Set Size\");\n ax.setYLabel(\"Score\");\n}\n\n/**\n * Plot training and validation curves.\n */\nexport function plotValidationCurve(\n paramRange: Tensor,\n trainScores: Tensor,\n valScores: Tensor,\n options: PlotOptions = {}\n): void {\n const ax = gca();\n const trainColor = options.colors?.[0] ?? options.color ?? \"#1f77b4\";\n const valColor = options.colors?.[1] ?? options.color ?? \"#ff7f0e\";\n ax.plot(paramRange, trainScores, {\n color: trainColor,\n label: \"Training Score\",\n });\n ax.plot(paramRange, valScores, {\n color: valColor,\n label: \"Validation Score\",\n });\n ax.setTitle(\"Validation Curve\");\n ax.setXLabel(\"Parameter Value\");\n ax.setYLabel(\"Score\");\n}\n\n/**\n * Plot a classifier decision boundary on a 2D feature space.\n */\nexport function plotDecisionBoundary(\n X: Tensor,\n y: Tensor,\n model: { readonly predict: (x: Tensor) => Tensor },\n options: PlotOptions = {}\n): void {\n if (X.dtype === \"string\") {\n throw new InvalidParameterError(\"plotDecisionBoundary: X must be numeric\", \"X\", X.dtype);\n }\n if (X.ndim !== 2 || (X.shape[1] ?? 0) !== 2) {\n throw new ShapeError(\"plotDecisionBoundary: X must be shape [n, 2]\");\n }\n const n = X.shape[0] ?? 0;\n if (n === 0) {\n throw new InvalidParameterError(\"plotDecisionBoundary: X must have at least one row\", \"X\", n);\n }\n if (y.ndim !== 1 || (y.shape[0] ?? -1) !== n) {\n throw new ShapeError(\"plotDecisionBoundary: y must be shape [n]\");\n }\n\n // Optimized feature reading using flat buffer\n const { data: xData } = tensorToFloat64Matrix2D(X);\n const x0 = new Float64Array(n);\n const x1 = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n const vx = xData[i * 2] ?? NaN;\n const vy = xData[i * 2 + 1] ?? NaN;\n if (!Number.isFinite(vx) || !Number.isFinite(vy)) {\n throw new InvalidParameterError(\"plotDecisionBoundary: X must be finite\", \"X\", {\n index: i,\n x: vx,\n y: vy,\n });\n }\n x0[i] = vx;\n x1[i] = vy;\n }\n\n const readLabel = (labelTensor: Tensor, index: number): string | number | bigint => {\n const value = labelTensor.at(index);\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new InvalidParameterError(\"plotDecisionBoundary: invalid label value\", \"y\", value);\n }\n return value;\n }\n if (typeof value === \"bigint\") return value;\n throw new InvalidParameterError(\"plotDecisionBoundary: invalid label value\", \"y\", value);\n };\n const toFiniteNumber = (value: unknown): number => {\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new InvalidParameterError(\n \"plotDecisionBoundary: model.predict must return finite numeric scores\",\n \"predict\",\n value\n );\n }\n return value;\n }\n if (typeof value === \"bigint\") {\n const n = Number(value);\n if (!Number.isFinite(n)) {\n throw new InvalidParameterError(\n \"plotDecisionBoundary: model.predict must return finite numeric scores\",\n \"predict\",\n value\n );\n }\n return n;\n }\n throw new InvalidParameterError(\n \"plotDecisionBoundary: model.predict must return numeric scores\",\n \"predict\",\n value\n );\n };\n\n const labelKey = (value: string | number | bigint): string => `${typeof value}:${String(value)}`;\n\n let xMin = x0[0] ?? 0;\n let xMax = x0[0] ?? 0;\n let yMin = x1[0] ?? 0;\n let yMax = x1[0] ?? 0;\n for (let i = 1; i < n; i++) {\n const vx = x0[i] ?? 0;\n const vy = x1[i] ?? 0;\n if (vx < xMin) xMin = vx;\n if (vx > xMax) xMax = vx;\n if (vy < yMin) yMin = vy;\n if (vy > yMax) yMax = vy;\n }\n const marginX = xMax > xMin ? (xMax - xMin) * 0.05 : 1;\n const marginY = yMax > yMin ? (yMax - yMin) * 0.05 : 1;\n xMin -= marginX;\n xMax += marginX;\n yMin -= marginY;\n yMax += marginY;\n\n const gridResolution = 100;\n const gridCount = gridResolution * gridResolution;\n const gridFlat = new Float64Array(gridCount * 2);\n\n for (let gy = 0; gy < gridResolution; gy++) {\n const fy = yMin + ((yMax - yMin) * gy) / Math.max(1, gridResolution - 1);\n for (let gx = 0; gx < gridResolution; gx++) {\n const fx = xMin + ((xMax - xMin) * gx) / Math.max(1, gridResolution - 1);\n const idx = (gy * gridResolution + gx) * 2;\n gridFlat[idx] = fx;\n gridFlat[idx + 1] = fy;\n }\n }\n\n const gridTensor = tensor(gridFlat).reshape([gridCount, 2]);\n const predictions = model.predict(gridTensor);\n\n const predictedLabels: Array<string | number | bigint> = new Array(gridCount);\n if (predictions.ndim === 1) {\n if ((predictions.shape[0] ?? -1) !== gridCount) {\n throw new ShapeError(\"plotDecisionBoundary: model.predict must return [gridSize] labels\");\n }\n for (let i = 0; i < gridCount; i++) {\n predictedLabels[i] = readLabel(predictions, i);\n }\n } else if (predictions.ndim === 2) {\n const rows = predictions.shape[0] ?? -1;\n const cols = predictions.shape[1] ?? -1;\n if (rows !== gridCount || cols <= 0) {\n throw new ShapeError(\"plotDecisionBoundary: model.predict must return [gridSize, k]\");\n }\n for (let i = 0; i < rows; i++) {\n let bestCol = 0;\n let bestValue = toFiniteNumber(predictions.at(i, 0));\n for (let c = 1; c < cols; c++) {\n const value = toFiniteNumber(predictions.at(i, c));\n if (value > bestValue) {\n bestValue = value;\n bestCol = c;\n }\n }\n predictedLabels[i] = bestCol;\n }\n } else {\n throw new ShapeError(\"plotDecisionBoundary: model.predict output must be 1D or 2D\");\n }\n\n const classIndex = new Map<string, number>();\n const classValues: Array<string | number | bigint> = [];\n for (let i = 0; i < n; i++) {\n const label = readLabel(y, i);\n const key = labelKey(label);\n if (!classIndex.has(key)) {\n classIndex.set(key, classValues.length);\n classValues.push(label);\n }\n }\n for (const label of predictedLabels) {\n const key = labelKey(label);\n if (!classIndex.has(key)) {\n classIndex.set(key, classValues.length);\n classValues.push(label);\n }\n }\n\n const boundaryMatrix: number[][] = Array.from({ length: gridResolution }, () =>\n Array(gridResolution).fill(0)\n );\n for (let gy = 0; gy < gridResolution; gy++) {\n const row = boundaryMatrix[gy];\n if (!row) {\n throw new InvalidParameterError(\"plotDecisionBoundary: grid row access failed\", \"gy\", gy);\n }\n for (let gx = 0; gx < gridResolution; gx++) {\n const label = predictedLabels[gy * gridResolution + gx];\n const mapped = label === undefined ? 0 : (classIndex.get(labelKey(label)) ?? 0);\n row[gx] = mapped;\n }\n }\n\n const ax = gca();\n ax.imshow(tensor(boundaryMatrix), {\n colormap: options.colormap ?? \"grayscale\",\n vmin: options.vmin ?? 0,\n vmax: options.vmax ?? Math.max(1, classValues.length - 1),\n extent: { xmin: xMin, xmax: xMax, ymin: yMin, ymax: yMax },\n });\n\n const defaultClassColors = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n ];\n const classColors =\n options.colors !== undefined && options.colors.length > 0 ? options.colors : defaultClassColors;\n const byClass = new Map<string, { x: number[]; y: number[]; index: number; label: string }>();\n for (let i = 0; i < n; i++) {\n const label = readLabel(y, i);\n const key = labelKey(label);\n const labelText = String(label);\n const mapped = classIndex.get(key) ?? 0;\n const current = byClass.get(key) ?? {\n x: [],\n y: [],\n index: mapped,\n label: labelText,\n };\n current.x.push(x0[i] ?? 0);\n current.y.push(x1[i] ?? 0);\n byClass.set(key, current);\n }\n\n for (const group of byClass.values()) {\n const color = classColors[group.index % classColors.length] ?? \"#000000\";\n ax.scatter(tensor(group.x), tensor(group.y), {\n color,\n size: options.size ?? 4,\n label: group.label,\n });\n }\n\n ax.setTitle(\"Decision Boundary\");\n ax.setXLabel(\"Feature 1\");\n ax.setYLabel(\"Feature 2\");\n}\n","import type { Color } from \"../types\";\n\nconst colorCache = new Map<\n string,\n {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n }\n>();\n\nconst namedColors: Record<string, string> = {\n aliceblue: \"#f0f8ff\",\n antiquewhite: \"#faebd7\",\n aqua: \"#00ffff\",\n aquamarine: \"#7fffd4\",\n azure: \"#f0ffff\",\n beige: \"#f5f5dc\",\n bisque: \"#ffe4c4\",\n black: \"#000000\",\n blanchedalmond: \"#ffebcd\",\n blue: \"#0000ff\",\n blueviolet: \"#8a2be2\",\n brown: \"#a52a2a\",\n burlywood: \"#deb887\",\n cadetblue: \"#5f9ea0\",\n chartreuse: \"#7fff00\",\n chocolate: \"#d2691e\",\n coral: \"#ff7f50\",\n cornflowerblue: \"#6495ed\",\n cornsilk: \"#fff8dc\",\n crimson: \"#dc143c\",\n cyan: \"#00ffff\",\n darkblue: \"#00008b\",\n darkcyan: \"#008b8b\",\n darkgoldenrod: \"#b8860b\",\n darkgray: \"#a9a9a9\",\n darkgrey: \"#a9a9a9\",\n darkgreen: \"#006400\",\n darkkhaki: \"#bdb76b\",\n darkmagenta: \"#8b008b\",\n darkolivegreen: \"#556b2f\",\n darkorange: \"#ff8c00\",\n darkorchid: \"#9932cc\",\n darkred: \"#8b0000\",\n darksalmon: \"#e9967a\",\n darkseagreen: \"#8fbc8f\",\n darkslateblue: \"#483d8b\",\n darkslategray: \"#2f4f4f\",\n darkslategrey: \"#2f4f4f\",\n darkturquoise: \"#00ced1\",\n darkviolet: \"#9400d3\",\n deeppink: \"#ff1493\",\n deepskyblue: \"#00bfff\",\n dimgray: \"#696969\",\n dimgrey: \"#696969\",\n dodgerblue: \"#1e90ff\",\n firebrick: \"#b22222\",\n floralwhite: \"#fffaf0\",\n forestgreen: \"#228b22\",\n fuchsia: \"#ff00ff\",\n gainsboro: \"#dcdcdc\",\n ghostwhite: \"#f8f8ff\",\n gold: \"#ffd700\",\n goldenrod: \"#daa520\",\n gray: \"#808080\",\n grey: \"#808080\",\n green: \"#008000\",\n greenyellow: \"#adff2f\",\n honeydew: \"#f0fff0\",\n hotpink: \"#ff69b4\",\n indianred: \"#cd5c5c\",\n indigo: \"#4b0082\",\n ivory: \"#fffff0\",\n khaki: \"#f0e68c\",\n lavender: \"#e6e6fa\",\n lavenderblush: \"#fff0f5\",\n lawngreen: \"#7cfc00\",\n lemonchiffon: \"#fffacd\",\n lightblue: \"#add8e6\",\n lightcoral: \"#f08080\",\n lightcyan: \"#e0ffff\",\n lightgoldenrodyellow: \"#fafad2\",\n lightgray: \"#d3d3d3\",\n lightgrey: \"#d3d3d3\",\n lightgreen: \"#90ee90\",\n lightpink: \"#ffb6c1\",\n lightsalmon: \"#ffa07a\",\n lightseagreen: \"#20b2aa\",\n lightskyblue: \"#87cefa\",\n lightslategray: \"#778899\",\n lightslategrey: \"#778899\",\n lightsteelblue: \"#b0c4de\",\n lightyellow: \"#ffffe0\",\n lime: \"#00ff00\",\n limegreen: \"#32cd32\",\n linen: \"#faf0e6\",\n magenta: \"#ff00ff\",\n maroon: \"#800000\",\n mediumaquamarine: \"#66cdaa\",\n mediumblue: \"#0000cd\",\n mediumorchid: \"#ba55d3\",\n mediumpurple: \"#9370db\",\n mediumseagreen: \"#3cb371\",\n mediumslateblue: \"#7b68ee\",\n mediumspringgreen: \"#00fa9a\",\n mediumturquoise: \"#48d1cc\",\n mediumvioletred: \"#c71585\",\n midnightblue: \"#191970\",\n mintcream: \"#f5fffa\",\n mistyrose: \"#ffe4e1\",\n moccasin: \"#ffe4b5\",\n navajowhite: \"#ffdead\",\n navy: \"#000080\",\n oldlace: \"#fdf5e6\",\n olive: \"#808000\",\n olivedrab: \"#6b8e23\",\n orange: \"#ffa500\",\n orangered: \"#ff4500\",\n orchid: \"#da70d6\",\n palegoldenrod: \"#eee8aa\",\n palegreen: \"#98fb98\",\n paleturquoise: \"#afeeee\",\n palevioletred: \"#db7093\",\n papayawhip: \"#ffefd5\",\n peachpuff: \"#ffdab9\",\n peru: \"#cd853f\",\n pink: \"#ffc0cb\",\n plum: \"#dda0dd\",\n powderblue: \"#b0e0e6\",\n purple: \"#800080\",\n rebeccapurple: \"#663399\",\n red: \"#ff0000\",\n rosybrown: \"#bc8f8f\",\n royalblue: \"#4169e1\",\n saddlebrown: \"#8b4513\",\n salmon: \"#fa8072\",\n sandybrown: \"#f4a460\",\n seagreen: \"#2e8b57\",\n seashell: \"#fff5ee\",\n sienna: \"#a0522d\",\n silver: \"#c0c0c0\",\n skyblue: \"#87ceeb\",\n slateblue: \"#6a5acd\",\n slategray: \"#708090\",\n slategrey: \"#708090\",\n snow: \"#fffafa\",\n springgreen: \"#00ff7f\",\n steelblue: \"#4682b4\",\n tan: \"#d2b48c\",\n teal: \"#008080\",\n thistle: \"#d8bfd8\",\n tomato: \"#ff6347\",\n turquoise: \"#40e0d0\",\n violet: \"#ee82ee\",\n wheat: \"#f5deb3\",\n white: \"#ffffff\",\n whitesmoke: \"#f5f5f5\",\n yellow: \"#ffff00\",\n yellowgreen: \"#9acd32\",\n};\n\n/**\n * Normalizes a color value to hex format.\n * @internal\n */\nexport function normalizeColor(c: Color | undefined, fallback: Color): Color {\n if (!c) return fallback;\n const s = c.trim();\n if (s.length === 0) return fallback;\n const hex8 = s.match(/^#([0-9a-fA-F]{8})$/);\n if (hex8 && hex8[1] !== undefined) {\n return `#${hex8[1].toLowerCase()}`;\n }\n\n // Convert to RGBA then back to hex for consistent output\n const rgba = parseHexColorToRGBA(s);\n const r = rgba.r.toString(16).padStart(2, \"0\");\n const g = rgba.g.toString(16).padStart(2, \"0\");\n const b = rgba.b.toString(16).padStart(2, \"0\");\n\n if (rgba.a === 255) {\n return `#${r}${g}${b}`;\n }\n const a = rgba.a.toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}${a}`;\n}\n\n/**\n * Parses color to RGBA.\n * @internal\n */\nexport function parseHexColorToRGBA(c: Color): {\n readonly r: number;\n readonly g: number;\n readonly b: number;\n readonly a: number;\n} {\n const cached = colorCache.get(c);\n if (cached) return cached;\n\n const s = c.trim().toLowerCase();\n const clampByte = (value: number): number => {\n if (!Number.isFinite(value)) return 0;\n return Math.min(255, Math.max(0, Math.round(value)));\n };\n const clampAlpha = (value: number): number => {\n if (!Number.isFinite(value)) return 1;\n return Math.min(1, Math.max(0, value));\n };\n\n if (namedColors[s]) {\n const namedColor = namedColors[s];\n if (typeof namedColor === \"string\") {\n const result = parseHexColorToRGBA(namedColor);\n colorCache.set(c, result);\n return result;\n }\n const result = { r: 0, g: 0, b: 0, a: 255 };\n colorCache.set(c, result);\n return result;\n }\n\n if (s.startsWith(\"#\")) {\n const hex = s.slice(1);\n if (hex.length === 6 || hex.length === 8) {\n const r = Number.parseInt(hex.slice(0, 2), 16);\n const g = Number.parseInt(hex.slice(2, 4), 16);\n const b = Number.parseInt(hex.slice(4, 6), 16);\n const a = hex.length === 8 ? Number.parseInt(hex.slice(6, 8), 16) : 255;\n if (Number.isFinite(r) && Number.isFinite(g) && Number.isFinite(b) && Number.isFinite(a)) {\n const result = { r, g, b, a };\n colorCache.set(c, result);\n return result;\n }\n }\n }\n\n const rgbMatch = s.match(/^rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+)\\s*)?\\)$/);\n if (rgbMatch) {\n const rStr = rgbMatch[1];\n const gStr = rgbMatch[2];\n const bStr = rgbMatch[3];\n if (!rStr || !gStr || !bStr) {\n const result = { r: 0, g: 0, b: 0, a: 255 };\n colorCache.set(c, result);\n return result;\n }\n const r = clampByte(Number.parseInt(rStr, 10));\n const g = clampByte(Number.parseInt(gStr, 10));\n const b = clampByte(Number.parseInt(bStr, 10));\n const alpha = rgbMatch[4] ? clampAlpha(Number.parseFloat(rgbMatch[4])) : 1;\n const result = { r, g, b, a: Math.round(alpha * 255) };\n colorCache.set(c, result);\n return result;\n }\n\n const hslMatch = s.match(\n /^hsla?\\s*\\(\\s*([\\d.]+)\\s*,\\s*([\\d.]+)%\\s*,\\s*([\\d.]+)%\\s*(?:,\\s*([\\d.]+)\\s*)?\\)$/\n );\n if (hslMatch) {\n const hRaw = hslMatch[1];\n const sRaw = hslMatch[2];\n const lRaw = hslMatch[3];\n if (!hRaw || !sRaw || !lRaw) {\n const result = { r: 0, g: 0, b: 0, a: 255 };\n colorCache.set(c, result);\n return result;\n }\n const hueDegrees = Number.parseFloat(hRaw);\n const sat = Number.parseFloat(sRaw);\n const light = Number.parseFloat(lRaw);\n if (!Number.isFinite(hueDegrees) || !Number.isFinite(sat) || !Number.isFinite(light)) {\n const result = { r: 0, g: 0, b: 0, a: 255 };\n colorCache.set(c, result);\n return result;\n }\n const h = (((hueDegrees % 360) + 360) % 360) / 360;\n const sl = Math.min(1, Math.max(0, sat / 100));\n const l = Math.min(1, Math.max(0, light / 100));\n const alpha = hslMatch[4] ? clampAlpha(Number.parseFloat(hslMatch[4])) : 1;\n\n const hslToRgb = (h: number, s: number, l: number): [number, number, number] => {\n let r: number, g: number, b: number;\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number): number => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n };\n\n const [r, g, b] = hslToRgb(h, sl, l);\n const result = {\n r: clampByte(r),\n g: clampByte(g),\n b: clampByte(b),\n a: Math.round(alpha * 255),\n };\n colorCache.set(c, result);\n return result;\n }\n\n const result = { r: 0, g: 0, b: 0, a: 255 };\n colorCache.set(c, result);\n return result;\n}\n","import type { LegendEntry } from \"../types\";\n\n/**\n * Normalize an optional legend label, returning null if not usable.\n * @internal\n */\nexport function normalizeLegendLabel(label: string | undefined): string | null {\n if (typeof label !== \"string\") return null;\n const trimmed = label.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\n/**\n * @internal\n */\nexport function buildLegendEntry(\n label: string | null,\n entry: Omit<LegendEntry, \"label\">\n): LegendEntry | null {\n if (!label) return null;\n return { label, ...entry };\n}\n","import { InvalidParameterError } from \"../../core\";\n\n/**\n * Validates that a number is a positive integer.\n * @internal\n */\nexport function assertPositiveInt(name: string, v: number): void {\n if (!Number.isFinite(v)) {\n throw new InvalidParameterError(`${name} must be a positive integer; received ${v}`, name, v);\n }\n if (v <= 0) {\n throw new InvalidParameterError(`${name} must be a positive integer; received ${v}`, name, v);\n }\n if (Math.trunc(v) !== v) {\n throw new InvalidParameterError(`${name} must be a positive integer; received ${v}`, name, v);\n }\n}\n\n/**\n * Checks if a number is finite.\n * @internal\n */\nexport function isFiniteNumber(x: number): boolean {\n return Number.isFinite(x);\n}\n\n/**\n * Clamps an integer value to a range.\n * @internal\n */\nexport function clampInt(x: number, lo: number, hi: number): number {\n if (!Number.isFinite(x)) return lo;\n if (x < lo) return lo;\n if (x > hi) return hi;\n return Math.trunc(x);\n}\n","/**\n * Escapes special XML/HTML characters.\n * @internal\n */\nexport function escapeXml(s: string): string {\n return s\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&apos;\");\n}\n","import { ShapeError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Bar2D implements Drawable {\n readonly kind = \"bar\";\n readonly x: Float64Array;\n readonly height: Float64Array;\n readonly color: Color;\n readonly edgecolor: Color;\n readonly barWidth: number;\n readonly label: string | null;\n\n constructor(x: Float64Array, height: Float64Array, options: PlotOptions) {\n if (x.length !== height.length) throw new ShapeError(\"x and height must have the same length\");\n this.x = x;\n this.height = height;\n this.color = normalizeColor(options.color, \"#2ca02c\");\n this.edgecolor = normalizeColor(options.edgecolor, \"#000000\");\n this.barWidth = 0.8;\n this.label = normalizeLegendLabel(options.label);\n }\n\n getDataRange(): DataRange | null {\n let xmin = Number.POSITIVE_INFINITY;\n let xmax = Number.NEGATIVE_INFINITY;\n let ymin = 0;\n let ymax = 0;\n let sawValue = false;\n\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const hi = this.height[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(hi)) continue;\n sawValue = true;\n xmin = Math.min(xmin, xi - this.barWidth / 2);\n xmax = Math.max(xmax, xi + this.barWidth / 2);\n ymin = Math.min(ymin, hi);\n ymax = Math.max(ymax, hi);\n }\n\n if (!sawValue || !Number.isFinite(xmin) || !Number.isFinite(xmax)) {\n return null;\n }\n\n return { xmin, xmax, ymin, ymax };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const hi = this.height[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(hi)) continue;\n const x0 = ctx.transform.xToPx(xi - this.barWidth / 2);\n const x1 = ctx.transform.xToPx(xi + this.barWidth / 2);\n const y0 = ctx.transform.yToPx(0);\n const y1 = ctx.transform.yToPx(hi);\n const w = Math.abs(x1 - x0);\n const h = Math.abs(y1 - y0);\n const rx = Math.min(x0, x1);\n const ry = Math.min(y0, y1);\n ctx.push(\n `<rect x=\"${rx.toFixed(2)}\" y=\"${ry.toFixed(2)}\" width=\"${w.toFixed(2)}\" height=\"${h.toFixed(2)}\" fill=\"${escapeXml(this.color)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n const rgba = parseHexColorToRGBA(this.color);\n const edge = parseHexColorToRGBA(this.edgecolor);\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const hi = this.height[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(hi)) continue;\n const x0 = Math.round(ctx.transform.xToPx(xi - this.barWidth / 2));\n const x1 = Math.round(ctx.transform.xToPx(xi + this.barWidth / 2));\n const y0 = Math.round(ctx.transform.yToPx(0));\n const y1 = Math.round(ctx.transform.yToPx(hi));\n const w = Math.abs(x1 - x0);\n const h = Math.abs(y1 - y0);\n const rx = Math.min(x0, x1);\n const ry = Math.min(y0, y1);\n\n // Fill\n ctx.canvas.fillRectRGBA(rx, ry, w, h, rgba.r, rgba.g, rgba.b, rgba.a);\n\n // Stroke border\n const r_e = edge.r;\n const g_e = edge.g;\n const b_e = edge.b;\n const a_e = edge.a;\n\n ctx.canvas.drawLineRGBA(rx, ry, rx + w, ry, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx + w, ry, rx + w, ry + h, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx + w, ry + h, rx, ry + h, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx, ry + h, rx, ry, r_e, g_e, b_e, a_e);\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, { color: this.color, shape: \"box\" });\n return entry ? [entry] : null;\n }\n}\n","/**\n * Statistical utilities for plot calculations.\n * @internal\n */\n\n/**\n * Calculates quartiles using the median-of-medians method (same as numpy/Excel).\n * @internal\n */\nexport function calculateQuartiles(sortedData: readonly number[]): {\n readonly q1: number;\n readonly median: number;\n readonly q3: number;\n} {\n const n = sortedData.length;\n if (n === 0) {\n return { q1: 0, median: 0, q3: 0 };\n }\n if (n === 1) {\n const val = sortedData[0] ?? 0;\n return { q1: val, median: val, q3: val };\n }\n\n // Helper function to calculate median of a subset\n const medianOf = (arr: readonly number[], start: number, end: number): number => {\n const length = end - start;\n if (length === 0) return 0;\n if (length === 1) return arr[start] ?? 0;\n\n const mid = start + Math.floor(length / 2);\n if (length % 2 === 1) {\n return arr[mid] ?? 0;\n } else {\n return ((arr[mid - 1] ?? 0) + (arr[mid] ?? 0)) / 2;\n }\n };\n\n const mid = Math.floor(n / 2);\n const median =\n n % 2 === 1\n ? (sortedData[mid] ?? 0)\n : ((sortedData[mid - 1] ?? 0) + (sortedData[mid] ?? 0)) / 2;\n\n const q1 = medianOf(sortedData, 0, mid);\n const q3 = medianOf(sortedData, n % 2 === 1 ? mid + 1 : mid, n);\n\n return { q1, median, q3 };\n}\n\n/**\n * Calculates whiskers for boxplot using 1.5 * IQR rule.\n * Whiskers extend to the most extreme data points within 1.5 * IQR of Q1/Q3.\n * Points beyond whiskers are classified as outliers.\n * @internal\n */\nexport function calculateWhiskers(\n sortedData: readonly number[],\n q1: number,\n q3: number\n): {\n readonly lowerWhisker: number;\n readonly upperWhisker: number;\n readonly outliers: readonly number[];\n} {\n if (sortedData.length === 0) {\n return { lowerWhisker: 0, upperWhisker: 0, outliers: [] };\n }\n\n const iqr = q3 - q1;\n const lowerBound = q1 - 1.5 * iqr;\n const upperBound = q3 + 1.5 * iqr;\n\n const outliers: number[] = [];\n let lowerWhisker: number | null = null;\n let upperWhisker: number | null = null;\n\n // Find whisker endpoints (most extreme values within bounds)\n // Since data is sorted, first non-outlier is lower whisker, last non-outlier is upper whisker\n for (const value of sortedData) {\n if (value < lowerBound || value > upperBound) {\n outliers.push(value);\n } else {\n // Within bounds - track as potential whisker\n if (lowerWhisker === null) {\n lowerWhisker = value;\n }\n upperWhisker = value;\n }\n }\n\n // If no values fall within the fences (all outliers), whiskers should collapse to the quartiles\n if (lowerWhisker === null) {\n lowerWhisker = q1;\n }\n if (upperWhisker === null) {\n upperWhisker = q3;\n }\n\n return { lowerWhisker, upperWhisker, outliers };\n}\n\n/**\n * Kernel density estimation for violin plots using Gaussian kernel.\n * @internal\n */\nexport function kernelDensityEstimation(\n data: readonly number[],\n points: readonly number[],\n bandwidth: number\n): readonly number[] {\n const n = data.length;\n const m = points.length;\n const result = new Float64Array(m);\n\n // Return zeros for empty data\n if (n === 0) {\n return Array.from(result); // All zeros\n }\n\n // Silverman's rule of thumb for bandwidth if not provided\n if (!Number.isFinite(bandwidth) || bandwidth <= 0) {\n let sum = 0;\n let sumSq = 0;\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < n; i++) {\n const v = data[i] ?? 0;\n sum += v;\n sumSq += v * v;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n const mean = sum / n;\n const variance = Math.max(0, sumSq / n - mean * mean);\n const stdDev = Math.sqrt(variance);\n const silverman = 1.06 * stdDev * n ** -0.2;\n if (Number.isFinite(silverman) && silverman > 0) {\n bandwidth = silverman;\n } else {\n const range = max - min;\n bandwidth = Number.isFinite(range) && range > 0 ? range * 0.1 : 1;\n }\n }\n if (!Number.isFinite(bandwidth) || bandwidth <= 0) {\n bandwidth = 1;\n }\n\n const invSqrt2PiBandwidth = 1 / (bandwidth * Math.sqrt(2 * Math.PI));\n\n for (let i = 0; i < m; i++) {\n const x = points[i] ?? 0;\n let sum = 0;\n for (let j = 0; j < n; j++) {\n const u = (x - (data[j] ?? 0)) / bandwidth;\n sum += Math.exp(-0.5 * u * u);\n }\n result[i] = (sum * invSqrt2PiBandwidth) / n;\n }\n\n return Array.from(result);\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { calculateQuartiles, calculateWhiskers } from \"../utils/statistics\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Boxplot implements Drawable {\n readonly kind = \"boxplot\";\n readonly position: number;\n readonly q1: number;\n readonly median: number;\n readonly q3: number;\n readonly whiskerLow: number;\n readonly whiskerHigh: number;\n readonly outliers: readonly number[];\n readonly color: Color;\n readonly edgecolor: Color;\n readonly boxWidth: number;\n readonly label: string | null;\n readonly hasData: boolean;\n\n constructor(position: number, data: Float64Array, options: PlotOptions) {\n this.position = position;\n this.color = normalizeColor(options.color, \"#8c564b\");\n this.edgecolor = normalizeColor(options.edgecolor, \"#000000\");\n this.boxWidth = 0.5;\n this.label = normalizeLegendLabel(options.label);\n\n const sorted = Array.from(data)\n .filter(isFiniteNumber)\n .sort((a, b) => a - b);\n const n = sorted.length;\n\n if (n === 0) {\n if (data.length > 0) {\n throw new InvalidParameterError(\n \"boxplot data must contain at least one finite value\",\n \"data\",\n data\n );\n }\n this.hasData = false;\n this.q1 = 0;\n this.median = 0;\n this.q3 = 0;\n this.whiskerLow = 0;\n this.whiskerHigh = 0;\n this.outliers = [];\n return;\n }\n this.hasData = true;\n\n // Use proper statistical calculations\n const { q1, median, q3 } = calculateQuartiles(sorted);\n this.q1 = q1;\n this.median = median;\n this.q3 = q3;\n\n const { lowerWhisker, upperWhisker, outliers } = calculateWhiskers(sorted, q1, q3);\n this.whiskerLow = lowerWhisker;\n this.whiskerHigh = upperWhisker;\n this.outliers = outliers;\n }\n\n getDataRange(): DataRange | null {\n if (!this.hasData) return null;\n let ymin = this.whiskerLow;\n let ymax = this.whiskerHigh;\n for (const o of this.outliers) {\n if (o < ymin) ymin = o;\n if (o > ymax) ymax = o;\n }\n return {\n xmin: this.position - this.boxWidth,\n xmax: this.position + this.boxWidth,\n ymin,\n ymax,\n };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n if (!this.hasData) return;\n const x = this.position;\n const x0 = ctx.transform.xToPx(x - this.boxWidth / 2);\n const x1 = ctx.transform.xToPx(x + this.boxWidth / 2);\n const xc = ctx.transform.xToPx(x);\n\n const yq1 = ctx.transform.yToPx(this.q1);\n const ymed = ctx.transform.yToPx(this.median);\n const yq3 = ctx.transform.yToPx(this.q3);\n const ywl = ctx.transform.yToPx(this.whiskerLow);\n const ywh = ctx.transform.yToPx(this.whiskerHigh);\n\n // Draw box\n ctx.push(\n `<rect x=\"${Math.min(x0, x1).toFixed(2)}\" y=\"${Math.min(yq1, yq3).toFixed(2)}\" width=\"${Math.abs(x1 - x0).toFixed(2)}\" height=\"${Math.abs(yq3 - yq1).toFixed(2)}\" fill=\"${escapeXml(this.color)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n\n // Draw median line\n ctx.push(\n `<line x1=\"${x0.toFixed(2)}\" y1=\"${ymed.toFixed(2)}\" x2=\"${x1.toFixed(2)}\" y2=\"${ymed.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" stroke-width=\"2\" />`\n );\n\n // Draw whiskers\n ctx.push(\n `<line x1=\"${xc.toFixed(2)}\" y1=\"${yq1.toFixed(2)}\" x2=\"${xc.toFixed(2)}\" y2=\"${ywl.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n ctx.push(\n `<line x1=\"${xc.toFixed(2)}\" y1=\"${yq3.toFixed(2)}\" x2=\"${xc.toFixed(2)}\" y2=\"${ywh.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n\n // Draw whisker caps (half the box width in pixel space)\n const capHalf = Math.abs(x1 - x0) / 4;\n ctx.push(\n `<line x1=\"${(xc - capHalf).toFixed(2)}\" y1=\"${ywl.toFixed(2)}\" x2=\"${(xc + capHalf).toFixed(2)}\" y2=\"${ywl.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n ctx.push(\n `<line x1=\"${(xc - capHalf).toFixed(2)}\" y1=\"${ywh.toFixed(2)}\" x2=\"${(xc + capHalf).toFixed(2)}\" y2=\"${ywh.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n\n // Draw outliers\n for (const outlier of this.outliers) {\n const yo = ctx.transform.yToPx(outlier);\n ctx.push(\n `<circle cx=\"${xc.toFixed(2)}\" cy=\"${yo.toFixed(2)}\" r=\"3\" fill=\"${escapeXml(this.edgecolor)}\" stroke=\"none\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n if (!this.hasData) return;\n const rgba = parseHexColorToRGBA(this.color);\n const edge = parseHexColorToRGBA(this.edgecolor);\n const x = this.position;\n const x0 = Math.round(ctx.transform.xToPx(x - this.boxWidth / 2));\n const x1 = Math.round(ctx.transform.xToPx(x + this.boxWidth / 2));\n const xc = Math.round(ctx.transform.xToPx(x));\n\n const yq1 = Math.round(ctx.transform.yToPx(this.q1));\n const ymed = Math.round(ctx.transform.yToPx(this.median));\n const yq3 = Math.round(ctx.transform.yToPx(this.q3));\n const ywl = Math.round(ctx.transform.yToPx(this.whiskerLow));\n const ywh = Math.round(ctx.transform.yToPx(this.whiskerHigh));\n\n // Draw box\n const rx = Math.min(x0, x1);\n const ry = Math.min(yq1, yq3);\n const w = Math.abs(x1 - x0);\n const h = Math.abs(yq3 - yq1);\n\n ctx.canvas.fillRectRGBA(rx, ry, w, h, rgba.r, rgba.g, rgba.b, rgba.a);\n\n // Stroke box border\n ctx.canvas.drawLineRGBA(rx, ry, rx + w, ry, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(rx + w, ry, rx + w, ry + h, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(rx + w, ry + h, rx, ry + h, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(rx, ry + h, rx, ry, edge.r, edge.g, edge.b, edge.a);\n\n // Draw median line\n ctx.canvas.drawLineRGBA(x0, ymed, x1, ymed, edge.r, edge.g, edge.b, edge.a);\n\n // Draw whiskers\n ctx.canvas.drawLineRGBA(xc, yq1, xc, ywl, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(xc, yq3, xc, ywh, edge.r, edge.g, edge.b, edge.a);\n\n // Draw whisker caps (half the box width in pixel space)\n const capHalf = Math.round(Math.abs(x1 - x0) / 4);\n ctx.canvas.drawLineRGBA(xc - capHalf, ywl, xc + capHalf, ywl, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(xc - capHalf, ywh, xc + capHalf, ywh, edge.r, edge.g, edge.b, edge.a);\n\n // Draw outliers\n for (const outlier of this.outliers) {\n const yo = Math.round(ctx.transform.yToPx(outlier));\n ctx.canvas.drawCircleRGBA(xc, yo, 3, edge.r, edge.g, edge.b, edge.a);\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, {\n color: this.color,\n shape: \"box\",\n });\n return entry ? [entry] : null;\n }\n}\n","type ColormapName = \"viridis\" | \"plasma\" | \"inferno\" | \"magma\" | \"grayscale\";\n\nconst colormaps: Record<ColormapName, readonly [number, number, number][]> = {\n viridis: [\n [68, 1, 84],\n [72, 40, 120],\n [62, 73, 137],\n [49, 104, 142],\n [38, 130, 142],\n [31, 158, 137],\n [53, 183, 121],\n [110, 206, 88],\n [181, 222, 43],\n [253, 231, 37],\n ],\n plasma: [\n [13, 8, 135],\n [75, 3, 161],\n [125, 3, 168],\n [168, 34, 150],\n [203, 70, 121],\n [229, 107, 93],\n [248, 148, 65],\n [253, 195, 40],\n [240, 249, 33],\n [240, 249, 33],\n ],\n inferno: [\n [0, 0, 4],\n [40, 11, 84],\n [101, 21, 110],\n [159, 42, 99],\n [212, 72, 66],\n [245, 125, 21],\n [250, 193, 39],\n [245, 251, 161],\n [252, 255, 164],\n [252, 255, 164],\n ],\n magma: [\n [0, 0, 4],\n [28, 16, 68],\n [79, 18, 123],\n [129, 37, 129],\n [181, 54, 122],\n [229, 80, 100],\n [251, 135, 97],\n [254, 194, 135],\n [252, 253, 191],\n [252, 253, 191],\n ],\n grayscale: [\n [0, 0, 0],\n [28, 28, 28],\n [57, 57, 57],\n [85, 85, 85],\n [113, 113, 113],\n [142, 142, 142],\n [170, 170, 170],\n [198, 198, 198],\n [227, 227, 227],\n [255, 255, 255],\n ],\n};\n\n/**\n * Maps a normalized value to RGB using colormap.\n * @internal\n */\nexport function applyColormap(value: number, colormap: ColormapName): [number, number, number] {\n const cmap = colormaps[colormap];\n const n = cmap.length;\n const clamped = Math.max(0, Math.min(1, value));\n const idx = Math.max(0, Math.min(n - 2, Math.floor(clamped * (n - 1))));\n const nextIdx = idx + 1;\n const t = Math.max(0, Math.min(1, clamped * (n - 1) - idx));\n\n const c1 = cmap[idx];\n const c2 = cmap[nextIdx];\n if (!c1 || !c2) return [0, 0, 0];\n\n return [\n Math.round(c1[0] + (c2[0] - c1[0]) * t),\n Math.round(c1[1] + (c2[1] - c1[1]) * t),\n Math.round(c1[2] + (c2[2] - c1[2]) * t),\n ];\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { applyColormap } from \"../utils/colormaps\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport type { ContourGrid } from \"../utils/contours\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\ntype Segment = {\n readonly x1: number;\n readonly y1: number;\n readonly x2: number;\n readonly y2: number;\n readonly levelIndex: number;\n};\n\nconst DEFAULT_COLORS: readonly Color[] = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n];\n\nfunction resolveLevels(\n min: number,\n max: number,\n levels: number | readonly number[] | undefined\n): number[] {\n if (Array.isArray(levels)) {\n const filtered = levels.filter((v) => Number.isFinite(v));\n if (filtered.length === 0) {\n throw new InvalidParameterError(\n \"levels must contain at least one finite value\",\n \"levels\",\n levels\n );\n }\n const unique = Array.from(new Set(filtered));\n unique.sort((a, b) => a - b);\n return unique;\n }\n\n const numLevels = typeof levels === \"number\" ? levels : 10;\n if (!Number.isFinite(numLevels) || Math.trunc(numLevels) !== numLevels || numLevels <= 0) {\n throw new InvalidParameterError(\n `levels must be a positive integer; received ${numLevels}`,\n \"levels\",\n numLevels\n );\n }\n if (numLevels === 1) {\n return [min === max ? min : (min + max) / 2];\n }\n const step = (max - min) / (numLevels - 1);\n const values = new Array<number>(numLevels);\n for (let i = 0; i < numLevels; i++) {\n values[i] = min + i * step;\n }\n return values;\n}\n\nfunction resolveLevelColors(\n levels: readonly number[],\n options: PlotOptions\n): {\n readonly colors: readonly Color[];\n readonly rgba: readonly { r: number; g: number; b: number; a: number }[];\n} {\n const count = levels.length;\n const colors: Color[] = [];\n\n if (options.colors && options.colors.length > 0) {\n for (let i = 0; i < count; i++) {\n const color = options.colors[i % options.colors.length];\n colors.push(normalizeColor(color, DEFAULT_COLORS[i % DEFAULT_COLORS.length] ?? \"#1f77b4\"));\n }\n } else if (options.color) {\n const normalized = normalizeColor(options.color, \"#1f77b4\");\n for (let i = 0; i < count; i++) colors.push(normalized);\n } else if (options.colormap) {\n if (![\"viridis\", \"plasma\", \"inferno\", \"magma\", \"grayscale\"].includes(options.colormap)) {\n throw new InvalidParameterError(\n `colormap must be one of viridis, plasma, inferno, magma, grayscale; received ${options.colormap}`,\n \"colormap\",\n options.colormap\n );\n }\n const denom = Math.max(1, count - 1);\n for (let i = 0; i < count; i++) {\n const t = i / denom;\n const [r, g, b] = applyColormap(t, options.colormap);\n colors.push(normalizeColor(`rgb(${r},${g},${b})`, \"#1f77b4\"));\n }\n } else {\n for (let i = 0; i < count; i++) {\n const color = DEFAULT_COLORS[i % DEFAULT_COLORS.length] ?? \"#1f77b4\";\n colors.push(i === 0 ? color : normalizeColor(color, \"#1f77b4\"));\n }\n }\n\n const rgba = colors.map((c) => parseHexColorToRGBA(c));\n return { colors, rgba };\n}\n\nfunction interpolate(level: number, v0: number, v1: number, c0: number, c1: number): number {\n if (v0 === v1) return (c0 + c1) / 2;\n const t = Math.max(0, Math.min(1, (level - v0) / (v1 - v0)));\n return c0 + t * (c1 - c0);\n}\n\n/**\n * @internal\n */\nexport class Contour2D implements Drawable {\n readonly kind = \"contour\";\n readonly segments: readonly Segment[];\n readonly levelColors: readonly Color[];\n readonly levelRGBA: readonly { r: number; g: number; b: number; a: number }[];\n readonly linewidth: number;\n readonly xmin: number;\n readonly xmax: number;\n readonly ymin: number;\n readonly ymax: number;\n readonly label: string | null;\n\n constructor(grid: ContourGrid, options: PlotOptions = {}) {\n if (options.vmin !== undefined && !Number.isFinite(options.vmin)) {\n throw new InvalidParameterError(\n `vmin must be finite; received ${options.vmin}`,\n \"vmin\",\n options.vmin\n );\n }\n if (options.vmax !== undefined && !Number.isFinite(options.vmax)) {\n throw new InvalidParameterError(\n `vmax must be finite; received ${options.vmax}`,\n \"vmax\",\n options.vmax\n );\n }\n const min = options.vmin ?? grid.dataMin;\n const max = options.vmax ?? grid.dataMax;\n if (Number.isFinite(min) && Number.isFinite(max) && min > max) {\n throw new InvalidParameterError(\n `vmin must be <= vmax; received vmin=${min} vmax=${max}`,\n \"vmin/vmax\",\n { vmin: min, vmax: max }\n );\n }\n\n const levels = resolveLevels(min, max, options.levels);\n const { colors, rgba } = resolveLevelColors(levels, options);\n let levelColors = colors;\n let levelRGBA = rgba;\n this.label = normalizeLegendLabel(options.label);\n\n const lw = options.linewidth ?? 1;\n if (!Number.isFinite(lw) || lw <= 0) {\n throw new InvalidParameterError(\n `linewidth must be a positive number; received ${lw}`,\n \"linewidth\",\n lw\n );\n }\n this.linewidth = lw;\n\n let xMin = Number.POSITIVE_INFINITY;\n let xMax = Number.NEGATIVE_INFINITY;\n let yMin = Number.POSITIVE_INFINITY;\n let yMax = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < grid.xCoords.length; i++) {\n const v = grid.xCoords[i] ?? 0;\n if (v < xMin) xMin = v;\n if (v > xMax) xMax = v;\n }\n for (let i = 0; i < grid.yCoords.length; i++) {\n const v = grid.yCoords[i] ?? 0;\n if (v < yMin) yMin = v;\n if (v > yMax) yMax = v;\n }\n this.xmin = xMin;\n this.xmax = xMax;\n this.ymin = yMin;\n this.ymax = yMax;\n\n let segments: Segment[] = [];\n const rows = grid.rows;\n const cols = grid.cols;\n const data = grid.data;\n const xCoords = grid.xCoords;\n const yCoords = grid.yCoords;\n\n if (rows >= 2 && cols >= 2) {\n for (let levelIndex = 0; levelIndex < levels.length; levelIndex++) {\n const level = levels[levelIndex] ?? 0;\n for (let i = 0; i < rows - 1; i++) {\n const y0 = yCoords[i] ?? 0;\n const y1 = yCoords[i + 1] ?? 0;\n const rowOffset = i * cols;\n const rowOffsetNext = (i + 1) * cols;\n for (let j = 0; j < cols - 1; j++) {\n const x0 = xCoords[j] ?? 0;\n const x1 = xCoords[j + 1] ?? 0;\n\n const v00 = data[rowOffset + j] ?? 0;\n const v10 = data[rowOffset + j + 1] ?? 0;\n const v11 = data[rowOffsetNext + j + 1] ?? 0;\n const v01 = data[rowOffsetNext + j] ?? 0;\n if (\n !isFiniteNumber(v00) ||\n !isFiniteNumber(v10) ||\n !isFiniteNumber(v11) ||\n !isFiniteNumber(v01)\n ) {\n continue;\n }\n\n const idx =\n (v00 >= level ? 1 : 0) |\n (v10 >= level ? 2 : 0) |\n (v11 >= level ? 4 : 0) |\n (v01 >= level ? 8 : 0);\n\n if (idx === 0 || idx === 15) continue;\n\n const edgePoint = (edge: number): { readonly x: number; readonly y: number } => {\n switch (edge) {\n case 0:\n return { x: interpolate(level, v00, v10, x0, x1), y: y0 };\n case 1:\n return { x: x1, y: interpolate(level, v10, v11, y0, y1) };\n case 2:\n return { x: interpolate(level, v11, v01, x1, x0), y: y1 };\n case 3:\n return { x: x0, y: interpolate(level, v01, v00, y1, y0) };\n default:\n return { x: x0, y: y0 };\n }\n };\n\n const pushSegment = (e1: number, e2: number): void => {\n const p1 = edgePoint(e1);\n const p2 = edgePoint(e2);\n segments.push({\n x1: p1.x,\n y1: p1.y,\n x2: p2.x,\n y2: p2.y,\n levelIndex,\n });\n };\n\n switch (idx) {\n case 1:\n pushSegment(3, 0);\n break;\n case 2:\n pushSegment(0, 1);\n break;\n case 3:\n pushSegment(3, 1);\n break;\n case 4:\n pushSegment(1, 2);\n break;\n case 5: {\n // Saddle point: disambiguate using center value\n const center = (v00 + v10 + v11 + v01) / 4;\n if (center >= level) {\n pushSegment(3, 2);\n pushSegment(0, 1);\n } else {\n pushSegment(3, 0);\n pushSegment(1, 2);\n }\n break;\n }\n case 6:\n pushSegment(0, 2);\n break;\n case 7:\n pushSegment(3, 2);\n break;\n case 8:\n pushSegment(2, 3);\n break;\n case 9:\n pushSegment(0, 2);\n break;\n case 10: {\n // Saddle point: disambiguate using center value\n const center = (v00 + v10 + v11 + v01) / 4;\n if (center >= level) {\n pushSegment(0, 3);\n pushSegment(2, 1);\n } else {\n pushSegment(0, 1);\n pushSegment(2, 3);\n }\n break;\n }\n case 11:\n pushSegment(1, 2);\n break;\n case 12:\n pushSegment(1, 3);\n break;\n case 13:\n pushSegment(0, 1);\n break;\n case 14:\n pushSegment(3, 0);\n break;\n default:\n break;\n }\n }\n }\n }\n }\n\n if (segments.length > 0) {\n const used = Array.from(new Set(segments.map((seg) => seg.levelIndex))).sort((a, b) => a - b);\n if (used.length > 0 && used.length < levels.length) {\n const usedLevels = used.map((idx) => levels[idx] ?? 0);\n const resolved = resolveLevelColors(usedLevels, options);\n levelColors = resolved.colors;\n levelRGBA = resolved.rgba;\n const map = new Map<number, number>();\n for (let i = 0; i < used.length; i++) {\n const idx = used[i];\n if (idx !== undefined) {\n map.set(idx, i);\n }\n }\n segments = segments.map((seg) => ({\n x1: seg.x1,\n y1: seg.y1,\n x2: seg.x2,\n y2: seg.y2,\n levelIndex: map.get(seg.levelIndex) ?? 0,\n }));\n }\n }\n\n this.levelColors = levelColors;\n this.levelRGBA = levelRGBA;\n this.segments = segments;\n }\n\n getDataRange(): DataRange | null {\n if (!Number.isFinite(this.xmin) || !Number.isFinite(this.xmax)) return null;\n if (!Number.isFinite(this.ymin) || !Number.isFinite(this.ymax)) return null;\n return {\n xmin: this.xmin,\n xmax: this.xmax,\n ymin: this.ymin,\n ymax: this.ymax,\n };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n for (const seg of this.segments) {\n const color = this.levelColors[seg.levelIndex] ?? \"#1f77b4\";\n ctx.push(\n `<line x1=\"${ctx.transform.xToPx(seg.x1).toFixed(2)}\" y1=\"${ctx.transform\n .yToPx(seg.y1)\n .toFixed(2)}\" x2=\"${ctx.transform.xToPx(seg.x2).toFixed(2)}\" y2=\"${ctx.transform\n .yToPx(seg.y2)\n .toFixed(\n 2\n )}\" stroke=\"${escapeXml(color)}\" stroke-width=\"${this.linewidth}\" fill=\"none\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n for (const seg of this.segments) {\n const rgba = this.levelRGBA[seg.levelIndex] ?? {\n r: 0,\n g: 0,\n b: 0,\n a: 255,\n };\n ctx.canvas.drawLineRGBA(\n Math.round(ctx.transform.xToPx(seg.x1)),\n Math.round(ctx.transform.yToPx(seg.y1)),\n Math.round(ctx.transform.xToPx(seg.x2)),\n Math.round(ctx.transform.yToPx(seg.y2)),\n rgba.r,\n rgba.g,\n rgba.b,\n rgba.a\n );\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const color = this.levelColors[0] ?? \"#1f77b4\";\n const entry = buildLegendEntry(this.label, {\n color,\n shape: \"line\",\n lineWidth: this.linewidth,\n });\n return entry ? [entry] : null;\n }\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { applyColormap } from \"../utils/colormaps\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport type { ContourGrid } from \"../utils/contours\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\nconst DEFAULT_COLORS: readonly Color[] = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n];\n\ntype Vertex = {\n readonly x: number;\n readonly y: number;\n readonly v: number;\n};\n\ntype BandTriangle = {\n readonly x1: number;\n readonly y1: number;\n readonly x2: number;\n readonly y2: number;\n readonly x3: number;\n readonly y3: number;\n readonly band: number;\n};\n\nfunction interpolateVertex(a: Vertex, b: Vertex, threshold: number): Vertex {\n const dv = b.v - a.v;\n const t = dv === 0 ? 0.5 : Math.max(0, Math.min(1, (threshold - a.v) / dv));\n return {\n x: a.x + t * (b.x - a.x),\n y: a.y + t * (b.y - a.y),\n v: threshold,\n };\n}\n\nfunction clipPolygonByThreshold(\n points: readonly Vertex[],\n threshold: number,\n keepAbove: boolean\n): Vertex[] {\n if (points.length === 0) return [];\n const output: Vertex[] = [];\n for (let i = 0; i < points.length; i++) {\n const current = points[i];\n const next = points[(i + 1) % points.length];\n if (!current || !next) continue;\n const currentInside = keepAbove ? current.v >= threshold : current.v <= threshold;\n const nextInside = keepAbove ? next.v >= threshold : next.v <= threshold;\n\n if (currentInside && nextInside) {\n output.push(next);\n } else if (currentInside && !nextInside) {\n output.push(interpolateVertex(current, next, threshold));\n } else if (!currentInside && nextInside) {\n output.push(interpolateVertex(current, next, threshold));\n output.push(next);\n }\n }\n return output;\n}\n\nfunction triangulatePolygon(polygon: readonly Vertex[], band: number, out: BandTriangle[]): void {\n if (polygon.length < 3) return;\n const origin = polygon[0];\n if (!origin) return;\n for (let i = 1; i < polygon.length - 1; i++) {\n const v1 = polygon[i];\n const v2 = polygon[i + 1];\n if (!v1 || !v2) continue;\n out.push({\n x1: origin.x,\n y1: origin.y,\n x2: v1.x,\n y2: v1.y,\n x3: v2.x,\n y3: v2.y,\n band,\n });\n }\n}\n\nfunction addBandTriangles(\n tri: readonly Vertex[],\n levels: readonly number[],\n out: BandTriangle[]\n): void {\n if (tri.length !== 3 || levels.length < 2) return;\n const v0 = tri[0]?.v ?? 0;\n const v1 = tri[1]?.v ?? 0;\n const v2 = tri[2]?.v ?? 0;\n const triMin = Math.min(v0, v1, v2);\n const triMax = Math.max(v0, v1, v2);\n const lastLevel = levels[levels.length - 1] ?? 0;\n if (triMax < (levels[0] ?? 0) || triMin > lastLevel) return;\n\n const bandCount = levels.length - 1;\n for (let band = 0; band < bandCount; band++) {\n const lo = levels[band] ?? 0;\n const hi = levels[band + 1] ?? lo;\n if (triMax < lo || triMin > hi) continue;\n let poly = clipPolygonByThreshold(tri, lo, true);\n if (poly.length === 0) continue;\n poly = clipPolygonByThreshold(poly, hi, false);\n if (poly.length < 3) continue;\n triangulatePolygon(poly, band, out);\n }\n}\n\nfunction resolveFillLevels(\n min: number,\n max: number,\n levels: number | readonly number[] | undefined\n): number[] {\n if (Array.isArray(levels)) {\n const filtered = levels.filter((v) => Number.isFinite(v));\n const unique = Array.from(new Set(filtered));\n unique.sort((a, b) => a - b);\n if (unique.length < 2) {\n throw new InvalidParameterError(\n \"levels must contain at least two finite values\",\n \"levels\",\n levels\n );\n }\n return unique;\n }\n\n const numLevels = typeof levels === \"number\" ? levels : 10;\n if (!Number.isFinite(numLevels) || Math.trunc(numLevels) !== numLevels || numLevels <= 0) {\n throw new InvalidParameterError(\n `levels must be a positive integer; received ${numLevels}`,\n \"levels\",\n numLevels\n );\n }\n\n if (min === max) {\n return [min, max];\n }\n\n const step = (max - min) / numLevels;\n const boundaries = new Array<number>(numLevels + 1);\n for (let i = 0; i <= numLevels; i++) {\n boundaries[i] = min + i * step;\n }\n if (boundaries.length < 2) {\n return [min, max];\n }\n return boundaries;\n}\n\nfunction resolveBandColors(\n bandCount: number,\n options: PlotOptions\n): {\n readonly colors: readonly Color[];\n readonly rgba: readonly { r: number; g: number; b: number; a: number }[];\n} {\n const colors: Color[] = [];\n\n if (options.colors && options.colors.length > 0) {\n for (let i = 0; i < bandCount; i++) {\n const color = options.colors[i % options.colors.length];\n colors.push(normalizeColor(color, DEFAULT_COLORS[i % DEFAULT_COLORS.length] ?? \"#1f77b4\"));\n }\n } else if (options.color) {\n const normalized = normalizeColor(options.color, \"#1f77b4\");\n for (let i = 0; i < bandCount; i++) colors.push(normalized);\n } else if (options.colormap) {\n if (![\"viridis\", \"plasma\", \"inferno\", \"magma\", \"grayscale\"].includes(options.colormap)) {\n throw new InvalidParameterError(\n `colormap must be one of viridis, plasma, inferno, magma, grayscale; received ${options.colormap}`,\n \"colormap\",\n options.colormap\n );\n }\n const denom = Math.max(1, bandCount - 1);\n for (let i = 0; i < bandCount; i++) {\n const t = i / denom;\n const [r, g, b] = applyColormap(t, options.colormap);\n colors.push(`rgb(${r},${g},${b})`);\n }\n } else {\n const colormap = \"viridis\";\n const denom = Math.max(1, bandCount - 1);\n for (let i = 0; i < bandCount; i++) {\n const t = i / denom;\n const [r, g, b] = applyColormap(t, colormap);\n colors.push(`rgb(${r},${g},${b})`);\n }\n }\n\n const rgba = colors.map((c) => parseHexColorToRGBA(c));\n return { colors, rgba };\n}\n\n/**\n * @internal\n */\nexport class ContourF2D implements Drawable {\n readonly kind = \"contourf\";\n readonly rows: number;\n readonly cols: number;\n readonly xCoords: Float64Array;\n readonly yCoords: Float64Array;\n readonly levels: readonly number[];\n readonly bandColors: readonly Color[];\n readonly bandRGBA: readonly { r: number; g: number; b: number; a: number }[];\n readonly triangles: readonly BandTriangle[];\n readonly xmin: number;\n readonly xmax: number;\n readonly ymin: number;\n readonly ymax: number;\n readonly label: string | null;\n\n constructor(grid: ContourGrid, options: PlotOptions = {}) {\n this.rows = grid.rows;\n this.cols = grid.cols;\n this.xCoords = grid.xCoords;\n this.yCoords = grid.yCoords;\n if (options.vmin !== undefined && !Number.isFinite(options.vmin)) {\n throw new InvalidParameterError(\n `vmin must be finite; received ${options.vmin}`,\n \"vmin\",\n options.vmin\n );\n }\n if (options.vmax !== undefined && !Number.isFinite(options.vmax)) {\n throw new InvalidParameterError(\n `vmax must be finite; received ${options.vmax}`,\n \"vmax\",\n options.vmax\n );\n }\n const min = options.vmin ?? grid.dataMin;\n const max = options.vmax ?? grid.dataMax;\n if (Number.isFinite(min) && Number.isFinite(max) && min > max) {\n throw new InvalidParameterError(\n `vmin must be <= vmax; received vmin=${min} vmax=${max}`,\n \"vmin/vmax\",\n { vmin: min, vmax: max }\n );\n }\n this.levels = resolveFillLevels(min, max, options.levels);\n\n const bandCount = this.levels.length - 1;\n if (bandCount <= 0) {\n throw new InvalidParameterError(\n \"levels must define at least one fill band\",\n \"levels\",\n this.levels\n );\n }\n\n const { colors, rgba } = resolveBandColors(bandCount, options);\n this.bandColors = colors;\n this.bandRGBA = rgba;\n this.label = normalizeLegendLabel(options.label);\n\n let xMin = Number.POSITIVE_INFINITY;\n let xMax = Number.NEGATIVE_INFINITY;\n let yMin = Number.POSITIVE_INFINITY;\n let yMax = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < this.xCoords.length; i++) {\n const v = this.xCoords[i] ?? 0;\n if (v < xMin) xMin = v;\n if (v > xMax) xMax = v;\n }\n for (let i = 0; i < this.yCoords.length; i++) {\n const v = this.yCoords[i] ?? 0;\n if (v < yMin) yMin = v;\n if (v > yMax) yMax = v;\n }\n this.xmin = xMin;\n this.xmax = xMax;\n this.ymin = yMin;\n this.ymax = yMax;\n\n const cellRows = Math.max(0, this.rows - 1);\n const cellCols = Math.max(0, this.cols - 1);\n const triangles: BandTriangle[] = [];\n\n if (cellRows > 0 && cellCols > 0) {\n const data = grid.data;\n for (let i = 0; i < cellRows; i++) {\n const rowOffset = i * this.cols;\n const rowOffsetNext = (i + 1) * this.cols;\n const y0 = this.yCoords[i] ?? 0;\n const y1 = this.yCoords[i + 1] ?? 0;\n for (let j = 0; j < cellCols; j++) {\n const x0 = this.xCoords[j] ?? 0;\n const x1 = this.xCoords[j + 1] ?? 0;\n const v00 = data[rowOffset + j] ?? 0;\n const v10 = data[rowOffset + j + 1] ?? 0;\n const v11 = data[rowOffsetNext + j + 1] ?? 0;\n const v01 = data[rowOffsetNext + j] ?? 0;\n\n if (\n !isFiniteNumber(v00) ||\n !isFiniteNumber(v10) ||\n !isFiniteNumber(v11) ||\n !isFiniteNumber(v01)\n ) {\n continue;\n }\n\n const t0: Vertex = { x: x0, y: y0, v: v00 };\n const t1: Vertex = { x: x1, y: y0, v: v10 };\n const t2: Vertex = { x: x1, y: y1, v: v11 };\n const t3: Vertex = { x: x0, y: y1, v: v01 };\n\n addBandTriangles([t0, t1, t2], this.levels, triangles);\n addBandTriangles([t0, t2, t3], this.levels, triangles);\n }\n }\n }\n\n this.triangles = triangles;\n }\n\n getDataRange(): DataRange | null {\n if (!Number.isFinite(this.xmin) || !Number.isFinite(this.xmax)) return null;\n if (!Number.isFinite(this.ymin) || !Number.isFinite(this.ymax)) return null;\n return {\n xmin: this.xmin,\n xmax: this.xmax,\n ymin: this.ymin,\n ymax: this.ymax,\n };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n if (this.triangles.length === 0) return;\n for (const tri of this.triangles) {\n const color = this.bandColors[tri.band] ?? \"#1f77b4\";\n const x1 = ctx.transform.xToPx(tri.x1);\n const y1 = ctx.transform.yToPx(tri.y1);\n const x2 = ctx.transform.xToPx(tri.x2);\n const y2 = ctx.transform.yToPx(tri.y2);\n const x3 = ctx.transform.xToPx(tri.x3);\n const y3 = ctx.transform.yToPx(tri.y3);\n ctx.push(\n `<path d=\"M ${x1.toFixed(2)} ${y1.toFixed(2)} L ${x2.toFixed(2)} ${y2.toFixed(\n 2\n )} L ${x3.toFixed(2)} ${y3.toFixed(2)} Z\" fill=\"${escapeXml(color)}\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n if (this.triangles.length === 0) return;\n for (const tri of this.triangles) {\n const rgba = this.bandRGBA[tri.band] ?? { r: 0, g: 0, b: 0, a: 255 };\n ctx.canvas.fillTriangleRGBA(\n Math.round(ctx.transform.xToPx(tri.x1)),\n Math.round(ctx.transform.yToPx(tri.y1)),\n Math.round(ctx.transform.xToPx(tri.x2)),\n Math.round(ctx.transform.yToPx(tri.y2)),\n Math.round(ctx.transform.xToPx(tri.x3)),\n Math.round(ctx.transform.yToPx(tri.y3)),\n rgba.r,\n rgba.g,\n rgba.b,\n rgba.a\n );\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const color = this.bandColors[Math.floor(this.bandColors.length / 2)] ?? \"#1f77b4\";\n const entry = buildLegendEntry(this.label, { color, shape: \"box\" });\n return entry ? [entry] : null;\n }\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { applyColormap } from \"../utils/colormaps\";\nimport { normalizeColor } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\n\n/**\n * @internal\n */\nexport class Heatmap2D implements Drawable {\n readonly kind = \"heatmap\";\n readonly data: Float64Array;\n readonly rows: number;\n readonly cols: number;\n readonly vmin: number;\n readonly vmax: number;\n readonly colormap: \"viridis\" | \"plasma\" | \"inferno\" | \"magma\" | \"grayscale\";\n readonly xMin: number;\n readonly xMax: number;\n readonly yMin: number;\n readonly yMax: number;\n readonly label: string | null;\n\n constructor(data: Float64Array, rows: number, cols: number, options: PlotOptions) {\n this.data = data;\n this.rows = rows;\n this.cols = cols;\n const colormap = options.colormap ?? \"viridis\";\n if (![\"viridis\", \"plasma\", \"inferno\", \"magma\", \"grayscale\"].includes(colormap)) {\n throw new InvalidParameterError(\n `colormap must be one of viridis, plasma, inferno, magma, grayscale; received ${colormap}`,\n \"colormap\",\n colormap\n );\n }\n this.colormap = colormap;\n this.label = normalizeLegendLabel(options.label);\n\n const extent = options.extent;\n if (extent) {\n const { xmin, xmax, ymin, ymax } = extent;\n if (\n !Number.isFinite(xmin) ||\n !Number.isFinite(xmax) ||\n !Number.isFinite(ymin) ||\n !Number.isFinite(ymax)\n ) {\n throw new InvalidParameterError(\"extent values must be finite\", \"extent\", extent);\n }\n if (xmax <= xmin || ymax <= ymin) {\n throw new InvalidParameterError(\"extent ranges must be positive\", \"extent\", extent);\n }\n this.xMin = xmin;\n this.xMax = xmax;\n this.yMin = ymin;\n this.yMax = ymax;\n } else {\n this.xMin = 0;\n this.xMax = cols;\n this.yMin = 0;\n this.yMax = rows;\n }\n\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < data.length; i++) {\n const v = data[i] ?? 0;\n if (isFiniteNumber(v)) {\n min = Math.min(min, v);\n max = Math.max(max, v);\n }\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n throw new InvalidParameterError(\n \"heatmap data must contain at least one finite value\",\n \"data\",\n data\n );\n }\n\n if (options.vmin !== undefined && !Number.isFinite(options.vmin)) {\n throw new InvalidParameterError(\n `vmin must be finite; received ${options.vmin}`,\n \"vmin\",\n options.vmin\n );\n }\n if (options.vmax !== undefined && !Number.isFinite(options.vmax)) {\n throw new InvalidParameterError(\n `vmax must be finite; received ${options.vmax}`,\n \"vmax\",\n options.vmax\n );\n }\n\n const vmin = options.vmin ?? min;\n const vmax = options.vmax ?? max;\n if (Number.isFinite(vmin) && Number.isFinite(vmax) && vmin > vmax) {\n throw new InvalidParameterError(\n `vmin must be <= vmax; received vmin=${vmin} vmax=${vmax}`,\n \"vmin/vmax\",\n { vmin, vmax }\n );\n }\n this.vmin = Number.isFinite(vmin) ? vmin : 0;\n this.vmax = Number.isFinite(vmax) ? vmax : 1;\n }\n\n getDataRange(): DataRange | null {\n return { xmin: this.xMin, xmax: this.xMax, ymin: this.yMin, ymax: this.yMax };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n if (this.rows <= 0 || this.cols <= 0) return;\n const range = this.vmax - this.vmin;\n const xSpan = this.xMax - this.xMin;\n const ySpan = this.yMax - this.yMin;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.cols; j++) {\n const v = this.data[i * this.cols + j] ?? 0;\n if (!isFiniteNumber(v)) continue;\n const normalized = range !== 0 ? (v - this.vmin) / range : 0;\n const intensity = Math.max(0, Math.min(1, normalized));\n const [r, g, b] = applyColormap(intensity, this.colormap);\n const color = `rgb(${r},${g},${b})`;\n const x0 = ctx.transform.xToPx(this.xMin + (j / this.cols) * xSpan);\n const x1 = ctx.transform.xToPx(this.xMin + ((j + 1) / this.cols) * xSpan);\n const y0 = ctx.transform.yToPx(this.yMin + (i / this.rows) * ySpan);\n const y1 = ctx.transform.yToPx(this.yMin + ((i + 1) / this.rows) * ySpan);\n const w = Math.abs(x1 - x0);\n const h = Math.abs(y1 - y0);\n const rx = Math.min(x0, x1);\n const ry = Math.min(y0, y1);\n ctx.push(\n `<rect x=\"${rx.toFixed(2)}\" y=\"${ry.toFixed(2)}\" width=\"${w.toFixed(2)}\" height=\"${h.toFixed(2)}\" fill=\"${color}\" />`\n );\n }\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n if (this.rows <= 0 || this.cols <= 0) return;\n const range = this.vmax - this.vmin;\n const xSpan = this.xMax - this.xMin;\n const ySpan = this.yMax - this.yMin;\n for (let i = 0; i < this.rows; i++) {\n for (let j = 0; j < this.cols; j++) {\n const v = this.data[i * this.cols + j] ?? 0;\n if (!isFiniteNumber(v)) continue;\n const normalized = range !== 0 ? (v - this.vmin) / range : 0;\n const intensity = Math.max(0, Math.min(1, normalized));\n const [r, g, b] = applyColormap(intensity, this.colormap);\n const x0 = Math.round(ctx.transform.xToPx(this.xMin + (j / this.cols) * xSpan));\n const x1 = Math.round(ctx.transform.xToPx(this.xMin + ((j + 1) / this.cols) * xSpan));\n const y0 = Math.round(ctx.transform.yToPx(this.yMin + (i / this.rows) * ySpan));\n const y1 = Math.round(ctx.transform.yToPx(this.yMin + ((i + 1) / this.rows) * ySpan));\n const w = Math.abs(x1 - x0);\n const h = Math.abs(y1 - y0);\n const rx = Math.min(x0, x1);\n const ry = Math.min(y0, y1);\n ctx.canvas.fillRectRGBA(rx, ry, w, h, r, g, b, 255);\n }\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, {\n color: normalizeColor(`rgb(${applyColormap(0.5, this.colormap).join(\",\")})`, \"#1f77b4\"),\n shape: \"box\",\n });\n return entry ? [entry] : null;\n }\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Histogram implements Drawable {\n readonly kind = \"histogram\";\n readonly bins: Float64Array;\n readonly counts: Float64Array;\n readonly binWidth: number;\n readonly color: Color;\n readonly edgecolor: Color;\n readonly label: string | null;\n\n constructor(data: Float64Array, numBins: number, options: PlotOptions) {\n if (!Number.isFinite(numBins) || Math.trunc(numBins) !== numBins || numBins <= 0) {\n throw new InvalidParameterError(\n `bins must be a positive integer; received ${numBins}`,\n \"bins\",\n numBins\n );\n }\n this.color = normalizeColor(options.color, \"#d62728\");\n this.edgecolor = normalizeColor(options.edgecolor, \"#000000\");\n this.label = normalizeLegendLabel(options.label);\n\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n let hasFinite = false;\n let hasInfinity = false;\n for (let i = 0; i < data.length; i++) {\n const v = data[i] ?? 0;\n if (isFiniteNumber(v)) {\n hasFinite = true;\n min = Math.min(min, v);\n max = Math.max(max, v);\n } else if (v === Infinity || v === -Infinity) {\n hasInfinity = true;\n }\n }\n\n if (!hasFinite) {\n if (hasInfinity) {\n throw new InvalidParameterError(\n \"histogram data must contain at least one finite value\",\n \"data\",\n data\n );\n }\n this.bins = new Float64Array(0);\n this.counts = new Float64Array(0);\n this.binWidth = 1;\n return;\n }\n\n const span = max - min;\n const binWidth = span > 0 ? span / numBins : 1;\n const binStart = span > 0 ? min : min - (numBins * binWidth) / 2;\n this.bins = new Float64Array(numBins);\n this.counts = new Float64Array(numBins);\n this.binWidth = binWidth;\n\n for (let i = 0; i < numBins; i++) {\n this.bins[i] = binStart + i * binWidth;\n this.counts[i] = 0;\n }\n\n if (span === 0) {\n let finiteCount = 0;\n for (let i = 0; i < data.length; i++) {\n const v = data[i] ?? 0;\n if (isFiniteNumber(v)) finiteCount++;\n }\n const mid = Math.floor(numBins / 2);\n this.counts[mid] = finiteCount;\n return;\n }\n\n for (let i = 0; i < data.length; i++) {\n const v = data[i] ?? 0;\n if (!isFiniteNumber(v)) continue;\n const rawIdx = Math.floor((v - min) / binWidth);\n const binIdx = Math.min(Math.max(0, rawIdx), numBins - 1);\n this.counts[binIdx] = (this.counts[binIdx] ?? 0) + 1;\n }\n }\n\n getDataRange(): DataRange | null {\n if (this.bins.length === 0) return null;\n const xmin = this.bins[0] ?? 0;\n const xmax = (this.bins[this.bins.length - 1] ?? 0) + this.binWidth;\n let ymax = 0;\n for (let i = 0; i < this.counts.length; i++) {\n ymax = Math.max(ymax, this.counts[i] ?? 0);\n }\n return { xmin, xmax, ymin: 0, ymax };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n if (this.bins.length === 0) return;\n const binWidth = this.binWidth;\n for (let i = 0; i < this.bins.length; i++) {\n const x0 = this.bins[i] ?? 0;\n const count = this.counts[i] ?? 0;\n const px0 = ctx.transform.xToPx(x0);\n const px1 = ctx.transform.xToPx(x0 + binWidth);\n const py0 = ctx.transform.yToPx(0);\n const py1 = ctx.transform.yToPx(count);\n const w = Math.abs(px1 - px0);\n const h = Math.abs(py1 - py0);\n const rx = Math.min(px0, px1);\n const ry = Math.min(py0, py1);\n ctx.push(\n `<rect x=\"${rx.toFixed(2)}\" y=\"${ry.toFixed(2)}\" width=\"${w.toFixed(2)}\" height=\"${h.toFixed(2)}\" fill=\"${escapeXml(this.color)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n if (this.bins.length === 0) return;\n const rgba = parseHexColorToRGBA(this.color);\n const edge = parseHexColorToRGBA(this.edgecolor);\n const binWidth = this.binWidth;\n for (let i = 0; i < this.bins.length; i++) {\n const x0 = this.bins[i] ?? 0;\n const count = this.counts[i] ?? 0;\n const px0 = Math.round(ctx.transform.xToPx(x0));\n const px1 = Math.round(ctx.transform.xToPx(x0 + binWidth));\n const py0 = Math.round(ctx.transform.yToPx(0));\n const py1 = Math.round(ctx.transform.yToPx(count));\n const w = Math.abs(px1 - px0);\n const h = Math.abs(py1 - py0);\n const rx = Math.min(px0, px1);\n const ry = Math.min(py0, py1);\n\n // Fill\n ctx.canvas.fillRectRGBA(rx, ry, w, h, rgba.r, rgba.g, rgba.b, rgba.a);\n\n // Stroke border\n const r_e = edge.r;\n const g_e = edge.g;\n const b_e = edge.b;\n const a_e = edge.a;\n\n ctx.canvas.drawLineRGBA(rx, ry, rx + w, ry, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx + w, ry, rx + w, ry + h, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx + w, ry + h, rx, ry + h, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx, ry + h, rx, ry, r_e, g_e, b_e, a_e);\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, { color: this.color, shape: \"box\" });\n return entry ? [entry] : null;\n }\n}\n","import { ShapeError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class HorizontalBar2D implements Drawable {\n readonly kind = \"barh\";\n readonly y: Float64Array;\n readonly width: Float64Array;\n readonly color: Color;\n readonly edgecolor: Color;\n readonly barHeight: number;\n readonly label: string | null;\n\n constructor(y: Float64Array, width: Float64Array, options: PlotOptions) {\n if (y.length !== width.length) throw new ShapeError(\"y and width must have the same length\");\n this.y = y;\n this.width = width;\n this.color = normalizeColor(options.color, \"#9467bd\");\n this.edgecolor = normalizeColor(options.edgecolor, \"#000000\");\n this.barHeight = 0.8;\n this.label = normalizeLegendLabel(options.label);\n }\n\n getDataRange(): DataRange | null {\n let ymin = Number.POSITIVE_INFINITY;\n let ymax = Number.NEGATIVE_INFINITY;\n let xmin = 0;\n let xmax = 0;\n let sawValue = false;\n\n for (let i = 0; i < this.y.length; i++) {\n const yi = this.y[i] ?? 0;\n const wi = this.width[i] ?? 0;\n if (!isFiniteNumber(yi) || !isFiniteNumber(wi)) continue;\n sawValue = true;\n ymin = Math.min(ymin, yi - this.barHeight / 2);\n ymax = Math.max(ymax, yi + this.barHeight / 2);\n xmin = Math.min(xmin, wi);\n xmax = Math.max(xmax, wi);\n }\n\n if (!sawValue || !Number.isFinite(ymin) || !Number.isFinite(ymax)) {\n return null;\n }\n\n return { xmin, xmax, ymin, ymax };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n for (let i = 0; i < this.y.length; i++) {\n const yi = this.y[i] ?? 0;\n const wi = this.width[i] ?? 0;\n if (!isFiniteNumber(yi) || !isFiniteNumber(wi)) continue;\n const x0 = ctx.transform.xToPx(0);\n const x1 = ctx.transform.xToPx(wi);\n const y0 = ctx.transform.yToPx(yi - this.barHeight / 2);\n const y1 = ctx.transform.yToPx(yi + this.barHeight / 2);\n const w = Math.abs(x1 - x0);\n const h = Math.abs(y1 - y0);\n const rx = Math.min(x0, x1);\n const ry = Math.min(y0, y1);\n ctx.push(\n `<rect x=\"${rx.toFixed(2)}\" y=\"${ry.toFixed(2)}\" width=\"${w.toFixed(2)}\" height=\"${h.toFixed(2)}\" fill=\"${escapeXml(this.color)}\" stroke=\"${escapeXml(this.edgecolor)}\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n const rgba = parseHexColorToRGBA(this.color);\n const edge = parseHexColorToRGBA(this.edgecolor);\n for (let i = 0; i < this.y.length; i++) {\n const yi = this.y[i] ?? 0;\n const wi = this.width[i] ?? 0;\n if (!isFiniteNumber(yi) || !isFiniteNumber(wi)) continue;\n const x0 = Math.round(ctx.transform.xToPx(0));\n const x1 = Math.round(ctx.transform.xToPx(wi));\n const y0 = Math.round(ctx.transform.yToPx(yi - this.barHeight / 2));\n const y1 = Math.round(ctx.transform.yToPx(yi + this.barHeight / 2));\n const w = Math.abs(x1 - x0);\n const h = Math.abs(y1 - y0);\n const rx = Math.min(x0, x1);\n const ry = Math.min(y0, y1);\n\n // Fill\n ctx.canvas.fillRectRGBA(rx, ry, w, h, rgba.r, rgba.g, rgba.b, rgba.a);\n\n // Stroke border\n const r_e = edge.r;\n const g_e = edge.g;\n const b_e = edge.b;\n const a_e = edge.a;\n\n ctx.canvas.drawLineRGBA(rx, ry, rx + w, ry, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx + w, ry, rx + w, ry + h, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx + w, ry + h, rx, ry + h, r_e, g_e, b_e, a_e);\n ctx.canvas.drawLineRGBA(rx, ry + h, rx, ry, r_e, g_e, b_e, a_e);\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, { color: this.color, shape: \"box\" });\n return entry ? [entry] : null;\n }\n}\n","import { InvalidParameterError, ShapeError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Line2D implements Drawable {\n readonly kind = \"line\";\n readonly x: Float64Array;\n readonly y: Float64Array;\n readonly color: Color;\n readonly linewidth: number;\n readonly label: string | null;\n\n constructor(x: Float64Array, y: Float64Array, options: PlotOptions) {\n if (x.length !== y.length) throw new ShapeError(\"x and y must have the same length\");\n this.x = x;\n this.y = y;\n this.color = normalizeColor(options.color, \"#1f77b4\");\n const lw = options.linewidth ?? 2;\n if (!Number.isFinite(lw) || lw <= 0) {\n throw new InvalidParameterError(\n `linewidth must be a positive number; received ${lw}`,\n \"linewidth\",\n lw\n );\n }\n this.linewidth = lw;\n this.label = normalizeLegendLabel(options.label);\n }\n\n getDataRange(): DataRange | null {\n let xmin = Number.POSITIVE_INFINITY;\n let xmax = Number.NEGATIVE_INFINITY;\n let ymin = Number.POSITIVE_INFINITY;\n let ymax = Number.NEGATIVE_INFINITY;\n\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const yi = this.y[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(yi)) continue;\n xmin = Math.min(xmin, xi);\n xmax = Math.max(xmax, xi);\n ymin = Math.min(ymin, yi);\n ymax = Math.max(ymax, yi);\n }\n\n if (\n !Number.isFinite(xmin) ||\n !Number.isFinite(xmax) ||\n !Number.isFinite(ymin) ||\n !Number.isFinite(ymax)\n ) {\n return null;\n }\n\n return { xmin, xmax, ymin, ymax };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n const pts: string[] = [];\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const yi = this.y[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(yi)) continue;\n pts.push(`${ctx.transform.xToPx(xi).toFixed(2)},${ctx.transform.yToPx(yi).toFixed(2)}`);\n }\n ctx.push(\n `<polyline fill=\"none\" stroke=\"${escapeXml(this.color)}\" stroke-width=\"${this.linewidth}\" points=\"${pts.join(\" \")}\" />`\n );\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n const rgba = parseHexColorToRGBA(this.color);\n for (let i = 1; i < this.x.length; i++) {\n const x0 = this.x[i - 1] ?? 0;\n const y0 = this.y[i - 1] ?? 0;\n const x1 = this.x[i] ?? 0;\n const y1 = this.y[i] ?? 0;\n if (!isFiniteNumber(x0) || !isFiniteNumber(y0) || !isFiniteNumber(x1) || !isFiniteNumber(y1))\n continue;\n ctx.canvas.drawLineRGBA(\n Math.round(ctx.transform.xToPx(x0)),\n Math.round(ctx.transform.yToPx(y0)),\n Math.round(ctx.transform.xToPx(x1)),\n Math.round(ctx.transform.yToPx(y1)),\n rgba.r,\n rgba.g,\n rgba.b,\n rgba.a\n );\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, {\n color: this.color,\n shape: \"line\",\n lineWidth: this.linewidth,\n });\n return entry ? [entry] : null;\n }\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Pie implements Drawable {\n readonly kind = \"pie\";\n readonly centerX: number;\n readonly centerY: number;\n readonly radius: number;\n readonly values: readonly number[];\n readonly angles: readonly number[];\n readonly colors: readonly Color[];\n readonly labels: readonly string[];\n readonly rangeOverride: DataRange | undefined;\n readonly label: string | null;\n\n constructor(\n centerX: number,\n centerY: number,\n radius: number,\n values: Float64Array,\n labels?: readonly string[],\n options: PlotOptions = {},\n rangeOverride?: DataRange\n ) {\n if (!Number.isFinite(centerX) || !Number.isFinite(centerY)) {\n throw new InvalidParameterError(\"pie center must be finite\", \"center\", { centerX, centerY });\n }\n if (!Number.isFinite(radius) || radius <= 0) {\n throw new InvalidParameterError(\n `pie radius must be positive; received ${radius}`,\n \"radius\",\n radius\n );\n }\n this.centerX = centerX;\n this.centerY = centerY;\n this.radius = radius;\n if (values.length === 0) {\n throw new InvalidParameterError(\"pie requires at least one value\", \"values\", values.length);\n }\n if (labels && labels.length !== values.length) {\n throw new InvalidParameterError(\n `labels length (${labels.length}) must match values length (${values.length})`,\n \"labels\",\n labels\n );\n }\n this.labels = labels ?? [];\n this.label = normalizeLegendLabel(options.label);\n this.rangeOverride = rangeOverride;\n\n // Filter and validate values\n\n const validValues: number[] = [];\n for (let i = 0; i < values.length; i++) {\n const v = values[i] ?? 0;\n if (!isFiniteNumber(v)) {\n throw new InvalidParameterError(\"pie values must be finite\", \"values\", v);\n }\n if (v < 0) {\n throw new InvalidParameterError(\"pie values must be non-negative\", \"values\", v);\n }\n validValues.push(v);\n }\n const total = validValues.reduce((sum, val) => sum + val, 0);\n if (!Number.isFinite(total) || total <= 0) {\n throw new InvalidParameterError(\n \"pie values must sum to a positive number\",\n \"values\",\n validValues\n );\n }\n\n this.values = validValues;\n\n // Calculate angles for each slice\n // angles[0] = start of first slice (0)\n // angles[i+1] = end of slice i (cumulative angle after slice i)\n const angles: number[] = [0];\n let cumulative = 0;\n for (const value of validValues) {\n cumulative += (value / total) * 2 * Math.PI;\n angles.push(cumulative);\n }\n this.angles = angles;\n\n // Generate colors\n const defaultColors = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n ];\n\n const colors: Color[] = [];\n if (options.colors && options.colors.length > 0) {\n for (let i = 0; i < validValues.length; i++) {\n const colorOption = options.colors[i % options.colors.length];\n const colorToUse: Color | undefined = colorOption;\n const defaultColor = defaultColors[i % defaultColors.length] ?? \"#1f77b4\";\n colors.push(normalizeColor(colorToUse, defaultColor));\n }\n } else {\n for (let i = 0; i < validValues.length; i++) {\n const defaultColor = defaultColors[i % defaultColors.length] ?? \"#1f77b4\";\n colors.push(normalizeColor(undefined, defaultColor));\n }\n }\n this.colors = colors;\n }\n\n getDataRange(): DataRange | null {\n if (this.rangeOverride) return this.rangeOverride;\n return {\n xmin: this.centerX - this.radius,\n xmax: this.centerX + this.radius,\n ymin: this.centerY - this.radius,\n ymax: this.centerY + this.radius,\n };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n const cx = ctx.transform.xToPx(this.centerX);\n const cy = ctx.transform.yToPx(this.centerY);\n const rx = Math.abs(ctx.transform.xToPx(this.centerX + this.radius) - cx);\n const ry = Math.abs(ctx.transform.yToPx(this.centerY + this.radius) - cy);\n const r = Math.min(rx, ry);\n\n for (let i = 0; i < this.values.length; i++) {\n const startAngle = this.angles[i] ?? 0;\n const endAngle = this.angles[i + 1] ?? 2 * Math.PI;\n\n // Convert to SVG arc parameters\n const x1 = cx + r * Math.cos(startAngle);\n const y1 = cy - r * Math.sin(startAngle); // SVG Y is flipped\n const x2 = cx + r * Math.cos(endAngle);\n const y2 = cy - r * Math.sin(endAngle);\n\n const largeArcFlag = endAngle - startAngle > Math.PI ? 1 : 0;\n\n const pathData = [\n `M ${cx.toFixed(2)} ${cy.toFixed(2)}`,\n `L ${x1.toFixed(2)} ${y1.toFixed(2)}`,\n `A ${r.toFixed(2)} ${r.toFixed(2)} 0 ${largeArcFlag} 0 ${x2.toFixed(2)} ${y2.toFixed(2)}`,\n \"Z\",\n ].join(\" \");\n\n const fillColor = this.colors[i] ?? \"#1f77b4\";\n ctx.push(\n `<path d=\"${pathData}\" fill=\"${escapeXml(fillColor)}\" stroke=\"#ffffff\" stroke-width=\"1\" />`\n );\n\n // Add labels if provided\n const label = this.labels[i];\n if (i < this.labels.length && label) {\n const midAngle = (startAngle + endAngle) / 2;\n const labelRadius = r * 0.7;\n const labelX = cx + labelRadius * Math.cos(midAngle);\n const labelY = cy - labelRadius * Math.sin(midAngle);\n\n ctx.push(\n `<text x=\"${labelX.toFixed(2)}\" y=\"${labelY.toFixed(2)}\" text-anchor=\"middle\" font-size=\"12\" fill=\"#ffffff\">${escapeXml(label)}</text>`\n );\n }\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n const cx = Math.round(ctx.transform.xToPx(this.centerX));\n const cy = Math.round(ctx.transform.yToPx(this.centerY));\n const rx = Math.abs(ctx.transform.xToPx(this.centerX + this.radius) - cx);\n const ry = Math.abs(ctx.transform.yToPx(this.centerY + this.radius) - cy);\n const r = Math.round(Math.min(rx, ry));\n const edge = parseHexColorToRGBA(\"#ffffff\");\n\n for (let i = 0; i < this.values.length; i++) {\n const startAngle = this.angles[i] ?? 0;\n const endAngle = this.angles[i + 1] ?? 2 * Math.PI;\n\n const fillColor = this.colors[i] ?? \"#1f77b4\";\n const rgba = parseHexColorToRGBA(fillColor);\n\n // Draw pie slice using triangle approximation\n // Adaptive resolution: aim for ~5px segments along the arc to ensure smoothness\n const arcLength = (endAngle - startAngle) * r;\n const numSegments = Math.max(5, Math.ceil(arcLength / 5));\n\n for (let j = 0; j < numSegments; j++) {\n const angle1 = startAngle + (j / numSegments) * (endAngle - startAngle);\n const angle2 = startAngle + ((j + 1) / numSegments) * (endAngle - startAngle);\n\n const x1 = cx + r * Math.cos(angle1);\n const y1 = cy - r * Math.sin(angle1);\n const x2 = cx + r * Math.cos(angle2);\n const y2 = cy - r * Math.sin(angle2);\n\n // Fill triangle using rasterization\n ctx.canvas.fillTriangleRGBA(cx, cy, x1, y1, x2, y2, rgba.r, rgba.g, rgba.b, rgba.a);\n }\n\n const edgeX = Math.round(cx + r * Math.cos(startAngle));\n const edgeY = Math.round(cy - r * Math.sin(startAngle));\n ctx.canvas.drawLineRGBA(cx, cy, edgeX, edgeY, edge.r, edge.g, edge.b, edge.a);\n\n const label = this.labels[i];\n if (i < this.labels.length && label) {\n const midAngle = (startAngle + endAngle) / 2;\n const labelRadius = r * 0.7;\n const labelX = cx + labelRadius * Math.cos(midAngle);\n const labelY = cy - labelRadius * Math.sin(midAngle);\n const textColor = parseHexColorToRGBA(\"#ffffff\");\n ctx.canvas.drawTextRGBA(\n label,\n Math.round(labelX),\n Math.round(labelY),\n textColor.r,\n textColor.g,\n textColor.b,\n textColor.a,\n { fontSize: 12, align: \"middle\", baseline: \"middle\" }\n );\n }\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entries: LegendEntry[] = [];\n if (this.labels.length > 0) {\n for (let i = 0; i < this.labels.length; i++) {\n const label = normalizeLegendLabel(this.labels[i]);\n if (!label) continue;\n const color = this.colors[i] ?? \"#1f77b4\";\n entries.push({ label, color, shape: \"box\" });\n }\n return entries.length > 0 ? entries : null;\n }\n if (!this.label) {\n return null;\n }\n const entry: LegendEntry = {\n label: this.label,\n color: this.colors[0] ?? \"#1f77b4\",\n shape: \"box\",\n };\n return [entry];\n }\n}\n","import { InvalidParameterError, ShapeError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Scatter2D implements Drawable {\n readonly kind = \"scatter\";\n readonly x: Float64Array;\n readonly y: Float64Array;\n readonly color: Color;\n readonly size: number;\n readonly label: string | null;\n\n constructor(x: Float64Array, y: Float64Array, options: PlotOptions) {\n if (x.length !== y.length) throw new ShapeError(\"x and y must have the same length\");\n this.x = x;\n this.y = y;\n this.color = normalizeColor(options.color, \"#ff7f0e\");\n const size = options.size ?? 5;\n if (!Number.isFinite(size) || size <= 0) {\n throw new InvalidParameterError(\n `size must be a positive number; received ${size}`,\n \"size\",\n size\n );\n }\n this.size = size;\n this.label = normalizeLegendLabel(options.label);\n }\n\n getDataRange(): DataRange | null {\n let xmin = Number.POSITIVE_INFINITY;\n let xmax = Number.NEGATIVE_INFINITY;\n let ymin = Number.POSITIVE_INFINITY;\n let ymax = Number.NEGATIVE_INFINITY;\n\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const yi = this.y[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(yi)) continue;\n xmin = Math.min(xmin, xi);\n xmax = Math.max(xmax, xi);\n ymin = Math.min(ymin, yi);\n ymax = Math.max(ymax, yi);\n }\n\n if (\n !Number.isFinite(xmin) ||\n !Number.isFinite(xmax) ||\n !Number.isFinite(ymin) ||\n !Number.isFinite(ymax)\n ) {\n return null;\n }\n\n return { xmin, xmax, ymin, ymax };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const yi = this.y[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(yi)) continue;\n const px = ctx.transform.xToPx(xi);\n const py = ctx.transform.yToPx(yi);\n ctx.push(\n `<circle cx=\"${px.toFixed(2)}\" cy=\"${py.toFixed(2)}\" r=\"${this.size}\" fill=\"${escapeXml(this.color)}\" />`\n );\n }\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n const rgba = parseHexColorToRGBA(this.color);\n for (let i = 0; i < this.x.length; i++) {\n const xi = this.x[i] ?? 0;\n const yi = this.y[i] ?? 0;\n if (!isFiniteNumber(xi) || !isFiniteNumber(yi)) continue;\n const px = Math.round(ctx.transform.xToPx(xi));\n const py = Math.round(ctx.transform.yToPx(yi));\n ctx.canvas.drawCircleRGBA(px, py, this.size, rgba.r, rgba.g, rgba.b, rgba.a);\n }\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, {\n color: this.color,\n shape: \"marker\",\n markerSize: this.size,\n });\n return entry ? [entry] : null;\n }\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type {\n Color,\n DataRange,\n Drawable,\n LegendEntry,\n PlotOptions,\n RasterDrawContext,\n SvgDrawContext,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildLegendEntry, normalizeLegendLabel } from \"../utils/legend\";\nimport { calculateQuartiles, kernelDensityEstimation } from \"../utils/statistics\";\nimport { isFiniteNumber } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\n\n/**\n * @internal\n */\nexport class Violinplot implements Drawable {\n readonly kind = \"violinplot\";\n readonly position: number;\n readonly q1: number;\n readonly median: number;\n readonly q3: number;\n readonly kdePoints: readonly number[];\n readonly kdeValues: readonly number[];\n readonly color: Color;\n readonly edgecolor: Color;\n readonly violinWidth: number;\n readonly label: string | null;\n readonly hasData: boolean;\n\n constructor(position: number, data: Float64Array, options: PlotOptions) {\n this.position = position;\n this.color = normalizeColor(options.color, \"#8c564b\");\n this.edgecolor = normalizeColor(options.edgecolor, \"#000000\");\n this.violinWidth = 0.8;\n this.label = normalizeLegendLabel(options.label);\n\n const sorted = Array.from(data)\n .filter(isFiniteNumber)\n .sort((a, b) => a - b);\n const n = sorted.length;\n\n if (n === 0) {\n if (data.length > 0) {\n throw new InvalidParameterError(\n \"violinplot data must contain at least one finite value\",\n \"data\",\n data\n );\n }\n this.hasData = false;\n this.q1 = 0;\n this.median = 0;\n this.q3 = 0;\n this.kdeValues = [];\n this.kdePoints = [];\n return;\n }\n this.hasData = true;\n\n // Calculate quartiles\n const { q1, median, q3 } = calculateQuartiles(sorted);\n this.q1 = q1;\n this.median = median;\n this.q3 = q3;\n\n // Calculate KDE for violin shape\n const firstVal = sorted[0] ?? 0;\n const lastVal = sorted[sorted.length - 1] ?? 0;\n const dataRange = lastVal - firstVal;\n const padding = dataRange * 0.1;\n const min = firstVal - padding;\n const max = lastVal + padding;\n\n // Create points for KDE evaluation\n const numPoints = 100;\n const kdePoints: number[] = [];\n for (let i = 0; i < numPoints; i++) {\n kdePoints.push(min + (i / (numPoints - 1)) * (max - min));\n }\n\n // Calculate KDE values\n this.kdeValues = kernelDensityEstimation(sorted, kdePoints, 0);\n this.kdePoints = kdePoints;\n }\n\n getDataRange(): DataRange | null {\n if (!this.hasData) return null;\n if (this.kdePoints.length === 0) return null;\n\n const minY = this.kdePoints[0] ?? 0;\n const maxY = this.kdePoints[this.kdePoints.length - 1] ?? 0;\n\n return {\n xmin: this.position - this.violinWidth / 2,\n xmax: this.position + this.violinWidth / 2,\n ymin: minY,\n ymax: maxY,\n };\n }\n\n drawSVG(ctx: SvgDrawContext): void {\n if (!this.hasData) return;\n const x = this.position;\n\n // Find max KDE value for scaling\n let maxKDE = 0;\n for (let i = 0; i < this.kdeValues.length; i++) {\n const v = this.kdeValues[i] ?? 0;\n if (v > maxKDE) maxKDE = v;\n }\n if (maxKDE === 0) return;\n\n // Build violin path\n const pathPoints: string[] = [];\n\n // Left side of violin (from bottom to top)\n for (let i = 0; i < this.kdePoints.length; i++) {\n const y = this.kdePoints[i] ?? 0;\n const kde = this.kdeValues[i] ?? 0;\n const width = (kde / maxKDE) * this.violinWidth;\n const xLeft = x - width / 2;\n\n const px = ctx.transform.xToPx(xLeft);\n const py = ctx.transform.yToPx(y);\n pathPoints.push(`${px.toFixed(2)},${py.toFixed(2)}`);\n }\n\n // Right side of violin (from top to bottom)\n for (let i = this.kdePoints.length - 1; i >= 0; i--) {\n const y = this.kdePoints[i] ?? 0;\n const kde = this.kdeValues[i] ?? 0;\n const width = (kde / maxKDE) * this.violinWidth;\n const xRight = x + width / 2;\n\n const px = ctx.transform.xToPx(xRight);\n const py = ctx.transform.yToPx(y);\n pathPoints.push(`${px.toFixed(2)},${py.toFixed(2)}`);\n }\n\n // Draw violin shape\n if (pathPoints.length > 0) {\n ctx.push(\n `<path d=\"M ${pathPoints.join(\" L \")} Z\" fill=\"${escapeXml(this.color)}\" stroke=\"${escapeXml(this.edgecolor)}\" stroke-width=\"1\" />`\n );\n }\n\n // Draw quartile indicators\n const yq1 = ctx.transform.yToPx(this.q1);\n const ymed = ctx.transform.yToPx(this.median);\n const yq3 = ctx.transform.yToPx(this.q3);\n\n const indicatorWidth = this.violinWidth * 0.8;\n const xLeft = ctx.transform.xToPx(x - indicatorWidth / 2);\n const xRight = ctx.transform.xToPx(x + indicatorWidth / 2);\n\n // Draw quartile lines\n ctx.push(\n `<line x1=\"${xLeft.toFixed(2)}\" y1=\"${yq1.toFixed(2)}\" x2=\"${xRight.toFixed(2)}\" y2=\"${yq1.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" stroke-width=\"2\" />`\n );\n ctx.push(\n `<line x1=\"${xLeft.toFixed(2)}\" y1=\"${ymed.toFixed(2)}\" x2=\"${xRight.toFixed(2)}\" y2=\"${ymed.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" stroke-width=\"3\" />`\n );\n ctx.push(\n `<line x1=\"${xLeft.toFixed(2)}\" y1=\"${yq3.toFixed(2)}\" x2=\"${xRight.toFixed(2)}\" y2=\"${yq3.toFixed(2)}\" stroke=\"${escapeXml(this.edgecolor)}\" stroke-width=\"2\" />`\n );\n }\n\n drawRaster(ctx: RasterDrawContext): void {\n if (!this.hasData) return;\n const rgba = parseHexColorToRGBA(this.color);\n const edge = parseHexColorToRGBA(this.edgecolor);\n const x = this.position;\n\n // Find max KDE value for scaling\n let maxKDE = 0;\n for (let i = 0; i < this.kdeValues.length; i++) {\n const v = this.kdeValues[i] ?? 0;\n if (v > maxKDE) maxKDE = v;\n }\n if (maxKDE === 0) return;\n\n // Simple raster rendering - draw filled polygons for violin\n for (let i = 0; i < this.kdePoints.length - 1; i++) {\n const y1 = this.kdePoints[i] ?? 0;\n const y2 = this.kdePoints[i + 1] ?? 0;\n const kde1 = this.kdeValues[i] ?? 0;\n const kde2 = this.kdeValues[i + 1] ?? 0;\n\n const width1 = (kde1 / maxKDE) * this.violinWidth;\n const width2 = (kde2 / maxKDE) * this.violinWidth;\n\n const xLeft1 = x - width1 / 2;\n const xRight1 = x + width1 / 2;\n const xLeft2 = x - width2 / 2;\n const xRight2 = x + width2 / 2;\n\n const pxLeft1 = Math.round(ctx.transform.xToPx(xLeft1));\n const pxRight1 = Math.round(ctx.transform.xToPx(xRight1));\n const pxLeft2 = Math.round(ctx.transform.xToPx(xLeft2));\n const pxRight2 = Math.round(ctx.transform.xToPx(xRight2));\n\n const py1 = Math.round(ctx.transform.yToPx(y1));\n const py2 = Math.round(ctx.transform.yToPx(y2));\n\n // Draw filled quadrilateral as two triangles\n ctx.canvas.drawLineRGBA(pxLeft1, py1, pxRight1, py1, rgba.r, rgba.g, rgba.b, rgba.a);\n ctx.canvas.drawLineRGBA(pxRight1, py1, pxRight2, py2, rgba.r, rgba.g, rgba.b, rgba.a);\n ctx.canvas.drawLineRGBA(pxRight2, py2, pxLeft2, py2, rgba.r, rgba.g, rgba.b, rgba.a);\n ctx.canvas.drawLineRGBA(pxLeft2, py2, pxLeft1, py1, rgba.r, rgba.g, rgba.b, rgba.a);\n\n // Fill the area by drawing horizontal lines\n const minY = Math.min(py1, py2);\n const maxY = Math.max(py1, py2);\n if (py1 === py2) {\n const leftX = Math.min(pxLeft1, pxLeft2);\n const rightX = Math.max(pxRight1, pxRight2);\n ctx.canvas.drawLineRGBA(leftX, py1, rightX, py1, rgba.r, rgba.g, rgba.b, rgba.a);\n } else {\n for (let y = minY; y <= maxY; y++) {\n const t = (y - py1) / (py2 - py1);\n const leftX = pxLeft1 + t * (pxLeft2 - pxLeft1);\n const rightX = pxRight1 + t * (pxRight2 - pxRight1);\n ctx.canvas.drawLineRGBA(\n Math.round(leftX),\n y,\n Math.round(rightX),\n y,\n rgba.r,\n rgba.g,\n rgba.b,\n rgba.a\n );\n }\n }\n }\n\n // Draw quartile indicators\n const yq1 = Math.round(ctx.transform.yToPx(this.q1));\n const ymed = Math.round(ctx.transform.yToPx(this.median));\n const yq3 = Math.round(ctx.transform.yToPx(this.q3));\n\n const indicatorWidth = this.violinWidth * 0.8;\n const xLeft = Math.round(ctx.transform.xToPx(x - indicatorWidth / 2));\n const xRight = Math.round(ctx.transform.xToPx(x + indicatorWidth / 2));\n\n // Draw quartile lines\n ctx.canvas.drawLineRGBA(xLeft, yq1, xRight, yq1, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(xLeft, ymed, xRight, ymed, edge.r, edge.g, edge.b, edge.a);\n ctx.canvas.drawLineRGBA(xLeft, yq3, xRight, yq3, edge.r, edge.g, edge.b, edge.a);\n }\n\n getLegendEntries(): readonly LegendEntry[] | null {\n const entry = buildLegendEntry(this.label, {\n color: this.color,\n shape: \"box\",\n });\n return entry ? [entry] : null;\n }\n}\n","import { DTypeError, ShapeError } from \"../../core\";\nimport type { AnyTensor } from \"../../ndarray\";\n\n/**\n * Converts a 1D tensor to Float64Array.\n * @internal\n */\nexport function tensorToFloat64Vector1D(t: AnyTensor): Float64Array {\n // Extract underlying tensor from GradTensor if needed\n const tensor = \"tensor\" in t ? t.tensor : t;\n\n if (tensor.ndim !== 1) throw new ShapeError(\"Expected a 1D tensor\");\n if (tensor.dtype === \"string\") throw new DTypeError(\"Plotting does not support string tensors\");\n\n const n = tensor.shape[0] ?? 0;\n const stride = tensor.strides[0] ?? 0;\n const out = new Float64Array(n);\n const base = tensor.offset;\n\n for (let i = 0; i < n; i++) {\n const v = tensor.data[base + i * stride];\n out[i] = safeConvertToNumber(v);\n }\n\n return out;\n}\n\n/**\n * Converts a 2D tensor to Float64Array.\n * @internal\n */\nexport function tensorToFloat64Matrix2D(t: AnyTensor): {\n readonly rows: number;\n readonly cols: number;\n readonly data: Float64Array;\n} {\n // Extract underlying tensor from GradTensor if needed\n const tensor = \"tensor\" in t ? t.tensor : t;\n\n if (tensor.ndim !== 2) throw new ShapeError(\"Expected a 2D tensor\");\n if (tensor.dtype === \"string\") throw new DTypeError(\"Plotting does not support string tensors\");\n\n const rows = tensor.shape[0] ?? 0;\n const cols = tensor.shape[1] ?? 0;\n const strideRow = tensor.strides[0] ?? 0;\n const strideCol = tensor.strides[1] ?? 0;\n const out = new Float64Array(rows * cols);\n\n if (strideCol === 1 && strideRow === cols) {\n const start = tensor.offset;\n const end = start + rows * cols;\n for (let i = 0, j = start; j < end; i++, j++) {\n const v = tensor.data[j];\n out[i] = safeConvertToNumber(v);\n }\n return { rows, cols, data: out };\n }\n\n const base = tensor.offset;\n for (let i = 0; i < rows; i++) {\n const rowBase = base + i * strideRow;\n for (let j = 0; j < cols; j++) {\n const v = tensor.data[rowBase + j * strideCol];\n out[i * cols + j] = safeConvertToNumber(v);\n }\n }\n\n return { rows, cols, data: out };\n}\n\n/**\n * Safely converts a tensor data value to number with proper type checking.\n * @internal\n */\nfunction safeConvertToNumber(value: unknown): number {\n if (typeof value === \"number\") {\n return value;\n }\n if (typeof value === \"bigint\") {\n return Number(value);\n }\n throw new DTypeError(`Cannot convert ${typeof value} to number for plotting`);\n}\n","import { InvalidParameterError, ShapeError } from \"../../core\";\nimport type { AnyTensor } from \"../../ndarray\";\nimport { tensorToFloat64Matrix2D, tensorToFloat64Vector1D } from \"./tensor\";\nimport { isFiniteNumber } from \"./validation\";\n\nexport type ContourGrid = {\n readonly rows: number;\n readonly cols: number;\n readonly data: Float64Array;\n readonly xCoords: Float64Array;\n readonly yCoords: Float64Array;\n readonly dataMin: number;\n readonly dataMax: number;\n};\n\nexport type ContourExtent = {\n readonly xmin: number;\n readonly xmax: number;\n readonly ymin: number;\n readonly ymax: number;\n};\n\nfunction tensorSize(t: AnyTensor): number {\n const tensor = \"tensor\" in t ? t.tensor : t;\n if (tensor.ndim === 0) return 1;\n let size = 1;\n for (const dim of tensor.shape) {\n const d = dim ?? 0;\n if (d === 0) return 0;\n size *= d;\n }\n return size;\n}\n\nfunction assertFiniteCoords(values: Float64Array, name: string): void {\n for (let i = 0; i < values.length; i++) {\n const v = values[i] ?? 0;\n if (!isFiniteNumber(v)) {\n throw new InvalidParameterError(`${name} coordinates must be finite`, name, v);\n }\n }\n}\n\nfunction computeDataRange(data: Float64Array): {\n readonly min: number;\n readonly max: number;\n readonly hasNaN: boolean;\n} {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n let hasNaN = false;\n for (let i = 0; i < data.length; i++) {\n const v = data[i] ?? 0;\n if (!isFiniteNumber(v)) {\n if (Number.isNaN(v)) {\n hasNaN = true;\n }\n continue;\n }\n if (v < min) min = v;\n if (v > max) max = v;\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n throw new InvalidParameterError(\"Contour requires at least one finite Z value\", \"Z\", data);\n }\n return { min, max, hasNaN };\n}\n\nfunction meshgridToCoords(\n X: AnyTensor,\n Y: AnyTensor,\n rows: number,\n cols: number\n): { readonly xCoords: Float64Array; readonly yCoords: Float64Array } {\n const xMat = tensorToFloat64Matrix2D(X);\n const yMat = tensorToFloat64Matrix2D(Y);\n if (xMat.rows !== rows || xMat.cols !== cols) {\n throw new ShapeError(\"X must match Z shape for meshgrid input\");\n }\n if (yMat.rows !== rows || yMat.cols !== cols) {\n throw new ShapeError(\"Y must match Z shape for meshgrid input\");\n }\n\n const xCoords = new Float64Array(cols);\n const yCoords = new Float64Array(rows);\n for (let j = 0; j < cols; j++) {\n xCoords[j] = xMat.data[j] ?? 0;\n }\n for (let i = 0; i < rows; i++) {\n yCoords[i] = xMat.cols > 0 ? (yMat.data[i * cols] ?? 0) : 0;\n }\n\n const tol = 1e-12;\n for (let i = 0; i < rows; i++) {\n const rowOffset = i * cols;\n for (let j = 0; j < cols; j++) {\n const expectedX = xCoords[j] ?? 0;\n const expectedY = yCoords[i] ?? 0;\n const xv = xMat.data[rowOffset + j] ?? 0;\n const yv = yMat.data[rowOffset + j] ?? 0;\n if (!isFiniteNumber(xv) || !isFiniteNumber(yv)) {\n throw new InvalidParameterError(\"X/Y meshgrid values must be finite\", \"X/Y\", {\n x: xv,\n y: yv,\n });\n }\n if (Math.abs(xv - expectedX) > tol || Math.abs(yv - expectedY) > tol) {\n throw new InvalidParameterError(\n \"Contour supports only rectilinear grids (use 1D X/Y or meshgrid)\",\n \"X/Y\",\n { x: xv, y: yv }\n );\n }\n }\n }\n\n assertFiniteCoords(xCoords, \"X\");\n assertFiniteCoords(yCoords, \"Y\");\n\n return { xCoords, yCoords };\n}\n\n/**\n * Builds a rectilinear contour grid from X/Y/Z tensors.\n * @internal\n */\nexport function buildContourGrid(\n X: AnyTensor,\n Y: AnyTensor,\n Z: AnyTensor,\n extent?: ContourExtent\n): ContourGrid {\n const zMat = tensorToFloat64Matrix2D(Z);\n const { rows, cols, data } = zMat;\n const { min, max, hasNaN } = computeDataRange(data);\n\n const xSize = tensorSize(X);\n const ySize = tensorSize(Y);\n\n let xCoords: Float64Array;\n let yCoords: Float64Array;\n\n if (xSize === 0 && ySize === 0) {\n xCoords = new Float64Array(cols);\n yCoords = new Float64Array(rows);\n if (extent) {\n const { xmin, xmax, ymin, ymax } = extent;\n if (\n !Number.isFinite(xmin) ||\n !Number.isFinite(xmax) ||\n !Number.isFinite(ymin) ||\n !Number.isFinite(ymax)\n ) {\n throw new InvalidParameterError(\"extent values must be finite\", \"extent\", extent);\n }\n if (xmax <= xmin || ymax <= ymin) {\n throw new InvalidParameterError(\"extent ranges must be positive\", \"extent\", extent);\n }\n const xDenom = Math.max(1, cols - 1);\n const yDenom = Math.max(1, rows - 1);\n for (let j = 0; j < cols; j++) {\n xCoords[j] = xmin + ((xmax - xmin) * j) / xDenom;\n }\n for (let i = 0; i < rows; i++) {\n yCoords[i] = ymin + ((ymax - ymin) * i) / yDenom;\n }\n } else {\n for (let j = 0; j < cols; j++) xCoords[j] = j;\n for (let i = 0; i < rows; i++) yCoords[i] = i;\n }\n } else if (xSize > 0 && ySize > 0) {\n if (extent) {\n throw new InvalidParameterError(\n \"extent cannot be combined with explicit X/Y coordinates\",\n \"extent\",\n extent\n );\n }\n const rawX = \"tensor\" in X ? X.tensor : X;\n const rawY = \"tensor\" in Y ? Y.tensor : Y;\n if (rawX.ndim === 1 && rawY.ndim === 1) {\n xCoords = tensorToFloat64Vector1D(X);\n yCoords = tensorToFloat64Vector1D(Y);\n if (xCoords.length !== cols) {\n throw new ShapeError(`X must have length ${cols}; received ${xCoords.length}`);\n }\n if (yCoords.length !== rows) {\n throw new ShapeError(`Y must have length ${rows}; received ${yCoords.length}`);\n }\n assertFiniteCoords(xCoords, \"X\");\n assertFiniteCoords(yCoords, \"Y\");\n } else if (rawX.ndim === 2 && rawY.ndim === 2) {\n ({ xCoords, yCoords } = meshgridToCoords(X, Y, rows, cols));\n } else {\n throw new ShapeError(\"X and Y must be 1D vectors or 2D meshgrids matching Z\");\n }\n } else {\n throw new InvalidParameterError(\"Both X and Y must be provided or both empty\", \"X/Y\", {\n xSize,\n ySize,\n });\n }\n\n return {\n rows,\n cols,\n data,\n xCoords,\n yCoords,\n dataMin: min,\n dataMax: max + (hasNaN ? Number.EPSILON : 0),\n };\n}\n","/**\n * Rough text width estimate for SVG layout.\n * @internal\n */\nexport function estimateTextWidth(text: string, fontSize: number): number {\n if (text.length === 0) return 0;\n return text.length * fontSize * 0.6;\n}\n","/**\n * @internal\n */\nexport type Tick = {\n readonly value: number;\n readonly label: string;\n};\n\nfunction niceNumber(range: number, round: boolean): number {\n if (!Number.isFinite(range) || range <= 0) return 1;\n const exponent = Math.floor(Math.log10(range));\n const fraction = range / 10 ** exponent;\n let niceFraction: number;\n if (round) {\n if (fraction < 1.5) niceFraction = 1;\n else if (fraction < 3) niceFraction = 2;\n else if (fraction < 4.5) niceFraction = 2.5;\n else if (fraction < 7) niceFraction = 5;\n else niceFraction = 10;\n } else {\n if (fraction <= 1) niceFraction = 1;\n else if (fraction <= 2) niceFraction = 2;\n else if (fraction <= 2.5) niceFraction = 2.5;\n else if (fraction <= 5) niceFraction = 5;\n else niceFraction = 10;\n }\n return niceFraction * 10 ** exponent;\n}\n\nfunction formatTick(value: number, step: number): string {\n if (!Number.isFinite(value)) return \"\";\n const abs = Math.abs(value);\n if (abs < 1e-12) return \"0\";\n if ((abs > 0 && abs < 1e-4) || abs >= 1e6) {\n return value.toExponential(2);\n }\n\n const absStep = Math.abs(step);\n let decimals = 0;\n if (absStep > 0 && absStep < 1) {\n decimals = Math.min(6, Math.ceil(-Math.log10(absStep)));\n }\n let text = value.toFixed(decimals);\n if (decimals > 0) {\n text = text.replace(/\\.?0+$/, \"\");\n }\n return text;\n}\n\n/**\n * Generate \"nice\" ticks for an axis range.\n * @internal\n */\nexport function generateTicks(min: number, max: number, maxTicks = 5): readonly Tick[] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [];\n if (maxTicks <= 0 || !Number.isFinite(maxTicks)) return [];\n const m = Math.min(min, max);\n const M = Math.max(min, max);\n if (m === M) {\n const span = Math.max(1, Math.abs(m) * 0.05);\n return generateTicks(m - span, M + span, maxTicks);\n }\n const range = niceNumber(M - m, false);\n const step = niceNumber(range / Math.max(1, maxTicks - 1), true);\n if (!Number.isFinite(step) || step <= 0) return [];\n const niceMin = Math.floor(m / step) * step;\n const niceMax = Math.ceil(M / step) * step;\n const ticks: Tick[] = [];\n const epsilon = step * 1e-9;\n for (let v = niceMin; v <= niceMax + epsilon; v += step) {\n if (v + epsilon < m || v - epsilon > M) continue;\n ticks.push({ value: v, label: formatTick(v, step) });\n }\n return ticks;\n}\n","import type { DataRange, DataTransform, Drawable, Viewport } from \"../types\";\n\n/**\n * Computes data range from drawables.\n * @internal\n */\nexport function computeAutoRange(drawables: readonly Drawable[]): DataRange {\n let xmin = Number.POSITIVE_INFINITY;\n let xmax = Number.NEGATIVE_INFINITY;\n let ymin = Number.POSITIVE_INFINITY;\n let ymax = Number.NEGATIVE_INFINITY;\n\n for (const d of drawables) {\n const r = d.getDataRange();\n if (!r) continue;\n xmin = Math.min(xmin, r.xmin);\n xmax = Math.max(xmax, r.xmax);\n ymin = Math.min(ymin, r.ymin);\n ymax = Math.max(ymax, r.ymax);\n }\n\n if (!Number.isFinite(xmin) || !Number.isFinite(xmax)) {\n xmin = 0;\n xmax = 1;\n } else if (xmin === xmax) {\n const span = Math.max(1, Math.abs(xmin) * 0.05);\n xmin -= span;\n xmax += span;\n }\n if (!Number.isFinite(ymin) || !Number.isFinite(ymax)) {\n ymin = 0;\n ymax = 1;\n } else if (ymin === ymax) {\n const span = Math.max(1, Math.abs(ymin) * 0.05);\n ymin -= span;\n ymax += span;\n }\n\n const xPad = (xmax - xmin) * 0.05;\n const yPad = (ymax - ymin) * 0.05;\n return {\n xmin: xmin - xPad,\n xmax: xmax + xPad,\n ymin: ymin - yPad,\n ymax: ymax + yPad,\n };\n}\n\n/**\n * Creates coordinate transformation.\n * @internal\n */\nexport function makeTransform(range: DataRange, viewport: Viewport): DataTransform {\n const dx = range.xmax - range.xmin;\n const dy = range.ymax - range.ymin;\n const sx = dx !== 0 ? viewport.width / dx : 0;\n const sy = dy !== 0 ? viewport.height / dy : 0;\n\n return {\n xToPx: (x) => viewport.x + (x - range.xmin) * sx,\n yToPx: (y) => viewport.y + viewport.height - (y - range.ymin) * sy,\n };\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type { AnyTensor } from \"../../ndarray\";\nimport type { RasterCanvas } from \"../canvas/RasterCanvas\";\nimport { Bar2D } from \"../plots/Bar2D\";\nimport { Boxplot } from \"../plots/Boxplot\";\nimport { Contour2D } from \"../plots/Contour2D\";\nimport { ContourF2D } from \"../plots/ContourF2D\";\nimport { Heatmap2D } from \"../plots/Heatmap2D\";\nimport { Histogram } from \"../plots/Histogram\";\nimport { HorizontalBar2D } from \"../plots/HorizontalBar2D\";\nimport { Line2D } from \"../plots/Line2D\";\nimport { Pie } from \"../plots/Pie\";\nimport { Scatter2D } from \"../plots/Scatter2D\";\nimport { Violinplot } from \"../plots/Violinplot\";\nimport type {\n Color,\n Drawable,\n LegendEntry,\n LegendOptions,\n PlotOptions,\n SvgDrawContext,\n Viewport,\n} from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { buildContourGrid } from \"../utils/contours\";\nimport { tensorToFloat64Matrix2D, tensorToFloat64Vector1D } from \"../utils/tensor\";\nimport { estimateTextWidth } from \"../utils/text\";\nimport { generateTicks, type Tick } from \"../utils/ticks\";\nimport { computeAutoRange, makeTransform } from \"../utils/transforms\";\nimport { escapeXml } from \"../utils/xml\";\nimport type { Figure } from \"./Figure\";\n\n/**\n * An Axes represents a single plot area within a Figure.\n */\nexport class Axes {\n public readonly fig: Figure;\n private readonly padding: number;\n private readonly paddingProvided: boolean;\n private readonly facecolor: Color;\n private readonly drawables: Drawable[];\n private title: string;\n private xlabel: string;\n private ylabel: string;\n private legendOptions: LegendOptions | null;\n private xTicksOverride: readonly Tick[] | null;\n private yTicksOverride: readonly Tick[] | null;\n private readonly baseViewport: Viewport | undefined;\n\n constructor(\n fig: Figure,\n options: {\n readonly padding?: number;\n readonly facecolor?: Color;\n readonly viewport?: Viewport;\n }\n ) {\n this.fig = fig;\n this.paddingProvided = options.padding !== undefined;\n const base: Viewport = options.viewport ?? {\n x: 0,\n y: 0,\n width: this.fig.width,\n height: this.fig.height,\n };\n\n if (\n !Number.isFinite(base.x) ||\n !Number.isFinite(base.y) ||\n !Number.isFinite(base.width) ||\n !Number.isFinite(base.height) ||\n base.width <= 0 ||\n base.height <= 0\n ) {\n throw new InvalidParameterError(\n \"viewport must have positive finite width/height\",\n \"viewport\",\n base\n );\n }\n\n const p =\n options.padding ??\n Math.min(50, Math.max(0, Math.floor(Math.min(base.width, base.height) / 4)));\n\n if (!Number.isFinite(p) || p < 0) {\n throw new InvalidParameterError(`padding must be non-negative; received ${p}`, \"padding\", p);\n }\n\n if (2 * p >= base.width || 2 * p >= base.height) {\n if (this.paddingProvided) {\n throw new InvalidParameterError(\"padding is too large\", \"padding\", p);\n }\n const maxSafe = Math.max(0, Math.floor((Math.min(base.width, base.height) - 1) / 2));\n this.padding = maxSafe;\n } else {\n this.padding = p;\n }\n\n this.facecolor = normalizeColor(options.facecolor, \"#ffffff\");\n this.baseViewport = options.viewport;\n this.drawables = [];\n this.title = \"\";\n this.xlabel = \"\";\n this.ylabel = \"\";\n this.legendOptions = null;\n this.xTicksOverride = null;\n this.yTicksOverride = null;\n }\n\n /** Set the axes title text. */\n setTitle(title: string): void {\n this.title = title;\n }\n\n /** Set the x-axis label text. */\n setXLabel(label: string): void {\n this.xlabel = label;\n }\n\n /** Set the y-axis label text. */\n setYLabel(label: string): void {\n this.ylabel = label;\n }\n\n /**\n * Set custom x-axis tick positions and labels.\n * @param values - Tick positions in data coordinates\n * @param labels - Optional tick labels\n */\n setXTicks(values: readonly number[], labels?: readonly string[]): void {\n this.xTicksOverride = this.buildTickOverride(values, labels, \"xTicks\");\n }\n\n /**\n * Set custom y-axis tick positions and labels.\n * @param values - Tick positions in data coordinates\n * @param labels - Optional tick labels\n */\n setYTicks(values: readonly number[], labels?: readonly string[]): void {\n this.yTicksOverride = this.buildTickOverride(values, labels, \"yTicks\");\n }\n\n /**\n * Show or configure the legend for this axes.\n * @param options - Legend display options\n */\n legend(options: LegendOptions = {}): void {\n if (\n options.location !== undefined &&\n ![\"upper-right\", \"upper-left\", \"lower-right\", \"lower-left\"].includes(options.location)\n ) {\n throw new InvalidParameterError(\n `legend location must be one of upper-right, upper-left, lower-right, lower-left; received ${options.location}`,\n \"location\",\n options.location\n );\n }\n if (options.fontSize !== undefined) {\n if (!Number.isFinite(options.fontSize) || options.fontSize <= 0) {\n throw new InvalidParameterError(\n `legend fontSize must be positive; received ${options.fontSize}`,\n \"fontSize\",\n options.fontSize\n );\n }\n }\n if (options.padding !== undefined) {\n if (!Number.isFinite(options.padding) || options.padding < 0) {\n throw new InvalidParameterError(\n `legend padding must be non-negative; received ${options.padding}`,\n \"padding\",\n options.padding\n );\n }\n }\n this.legendOptions = options;\n }\n\n /**\n * Plot a connected line series.\n * @param x - 1D tensor of x coordinates\n * @param y - 1D tensor of y coordinates\n * @param options - Styling options\n */\n plot(x: AnyTensor, y: AnyTensor, options: PlotOptions = {}): Line2D {\n const xv = tensorToFloat64Vector1D(x);\n const yv = tensorToFloat64Vector1D(y);\n const d = new Line2D(xv, yv, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot unconnected points.\n * @param x - 1D tensor of x coordinates\n * @param y - 1D tensor of y coordinates\n * @param options - Styling options\n */\n scatter(x: AnyTensor, y: AnyTensor, options: PlotOptions = {}): Scatter2D {\n const xv = tensorToFloat64Vector1D(x);\n const yv = tensorToFloat64Vector1D(y);\n const d = new Scatter2D(xv, yv, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot vertical bars.\n * @param x - 1D tensor of bar centers\n * @param height - 1D tensor of bar heights\n * @param options - Styling options\n */\n bar(x: AnyTensor, height: AnyTensor, options: PlotOptions = {}): Bar2D {\n const xv = tensorToFloat64Vector1D(x);\n const hv = tensorToFloat64Vector1D(height);\n const d = new Bar2D(xv, hv, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot a histogram.\n * @param x - 1D tensor of sample values\n * @param bins - Number of bins\n * @param options - Styling options\n */\n hist(x: AnyTensor, bins = 10, options: PlotOptions = {}): Histogram {\n const xv = tensorToFloat64Vector1D(x);\n const resolvedBins = options.bins ?? bins;\n const d = new Histogram(xv, resolvedBins, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot horizontal bars.\n * @param y - 1D tensor of bar centers\n * @param width - 1D tensor of bar widths\n * @param options - Styling options\n */\n barh(y: AnyTensor, width: AnyTensor, options: PlotOptions = {}): HorizontalBar2D {\n const yv = tensorToFloat64Vector1D(y);\n const wv = tensorToFloat64Vector1D(width);\n const d = new HorizontalBar2D(yv, wv, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot a heatmap for 2D data.\n * @param data - 2D tensor of values\n * @param options - Styling and scale options\n */\n heatmap(data: AnyTensor, options: PlotOptions = {}): Heatmap2D {\n const mat = tensorToFloat64Matrix2D(data);\n const d = new Heatmap2D(mat.data, mat.rows, mat.cols, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Display a matrix as an image (alias of heatmap).\n * @param data - 2D tensor of values\n * @param options - Styling and scale options\n */\n imshow(data: AnyTensor, options: PlotOptions = {}): Heatmap2D {\n const mat = tensorToFloat64Matrix2D(data);\n const d = new Heatmap2D(mat.data, mat.rows, mat.cols, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot contour lines for a 2D grid.\n * @param X - 1D/2D tensor of x coordinates (or empty)\n * @param Y - 1D/2D tensor of y coordinates (or empty)\n * @param Z - 2D tensor of values\n * @param options - Styling and level options\n */\n contour(X: AnyTensor, Y: AnyTensor, Z: AnyTensor, options: PlotOptions = {}): Contour2D {\n const grid = buildContourGrid(X, Y, Z, options.extent);\n const d = new Contour2D(grid, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot filled contours for a 2D grid.\n * @param X - 1D/2D tensor of x coordinates (or empty)\n * @param Y - 1D/2D tensor of y coordinates (or empty)\n * @param Z - 2D tensor of values\n * @param options - Styling and level options\n */\n contourf(X: AnyTensor, Y: AnyTensor, Z: AnyTensor, options: PlotOptions = {}): ContourF2D {\n const grid = buildContourGrid(X, Y, Z, options.extent);\n const d = new ContourF2D(grid, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot a box-and-whisker summary for a 1D dataset.\n * @param data - 1D tensor of values\n * @param options - Styling options\n */\n boxplot(data: AnyTensor, options: PlotOptions = {}): Boxplot {\n const values = tensorToFloat64Vector1D(data);\n const d = new Boxplot(1, values, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot a violin distribution summary for a 1D dataset.\n * @param data - 1D tensor of values\n * @param options - Styling options\n */\n violinplot(data: AnyTensor, options: PlotOptions = {}): Violinplot {\n const values = tensorToFloat64Vector1D(data);\n const d = new Violinplot(1, values, options);\n this.drawables.push(d);\n return d;\n }\n\n /**\n * Plot a pie chart.\n * @param values - 1D tensor of non-negative values\n * @param labels - Optional labels (must match values length)\n * @param options - Styling options\n */\n pie(values: AnyTensor, labels?: readonly string[], options: PlotOptions = {}): Pie {\n const data = tensorToFloat64Vector1D(values);\n const range = { xmin: 0, xmax: 1, ymin: 0, ymax: 1 };\n const d = new Pie(0.5, 0.5, 0.35, data, labels, options, range);\n this.drawables.push(d);\n return d;\n }\n\n private viewport(): Viewport {\n const p = this.padding;\n const base: Viewport = this.baseViewport ?? {\n x: 0,\n y: 0,\n width: this.fig.width,\n height: this.fig.height,\n };\n return {\n x: base.x + p,\n y: base.y + p,\n width: base.width - 2 * p,\n height: base.height - 2 * p,\n };\n }\n\n private collectLegendEntries(): readonly LegendEntry[] {\n const entries: LegendEntry[] = [];\n const seen = new Set<string>();\n for (const drawable of this.drawables) {\n const list = drawable.getLegendEntries?.();\n if (!list) continue;\n for (const entry of list) {\n const trimmed = entry.label.trim();\n if (!trimmed) continue;\n if (seen.has(trimmed)) continue;\n seen.add(trimmed);\n entries.push({ ...entry, label: trimmed });\n }\n }\n return entries;\n }\n\n private resolveLegendOptions(): Required<LegendOptions> {\n const options = this.legendOptions ?? {};\n return {\n visible: options.visible ?? true,\n location: options.location ?? \"upper-right\",\n fontSize: options.fontSize ?? 12,\n padding: options.padding ?? 6,\n background: normalizeColor(options.background, \"#ffffff\"),\n borderColor: normalizeColor(options.borderColor, \"#000000\"),\n };\n }\n\n private buildTickOverride(\n values: readonly number[],\n labels: readonly string[] | undefined,\n name: string\n ): readonly Tick[] | null {\n if (values.length === 0) return null;\n if (labels && labels.length !== values.length) {\n throw new InvalidParameterError(\n `${name} labels length must match values length (${values.length}); received ${labels.length}`,\n name,\n labels\n );\n }\n const ticks: Tick[] = [];\n for (const [i, value] of values.entries()) {\n if (!Number.isFinite(value)) {\n throw new InvalidParameterError(`${name} values must be finite`, name, value);\n }\n const label = labels ? (labels[i] ?? \"\") : String(value);\n ticks.push({ value, label: label.trim() });\n }\n return ticks;\n }\n\n private renderTicksSVG(\n elements: string[],\n vp: Viewport,\n range: {\n readonly xmin: number;\n readonly xmax: number;\n readonly ymin: number;\n readonly ymax: number;\n },\n transform: {\n readonly xToPx: (x: number) => number;\n readonly yToPx: (y: number) => number;\n }\n ): void {\n const maxXTicks = Math.max(2, Math.floor(vp.width / 80));\n const maxYTicks = Math.max(2, Math.floor(vp.height / 60));\n const xTicks = (this.xTicksOverride ?? generateTicks(range.xmin, range.xmax, maxXTicks)).filter(\n (tick) => tick.value >= range.xmin && tick.value <= range.xmax\n );\n const yTicks = (this.yTicksOverride ?? generateTicks(range.ymin, range.ymax, maxYTicks)).filter(\n (tick) => tick.value >= range.ymin && tick.value <= range.ymax\n );\n const tickLength = 5;\n const labelOffset = 2;\n\n for (const tick of xTicks) {\n const px = transform.xToPx(tick.value);\n elements.push(\n `<line class=\"x-tick\" x1=\"${px.toFixed(2)}\" y1=\"${(vp.y + vp.height).toFixed(\n 2\n )}\" x2=\"${px.toFixed(2)}\" y2=\"${(vp.y + vp.height + tickLength).toFixed(\n 2\n )}\" stroke=\"#000\" />`\n );\n elements.push(\n `<text class=\"tick-label tick-label-x\" x=\"${px.toFixed(2)}\" y=\"${(\n vp.y + vp.height + tickLength + labelOffset\n ).toFixed(\n 2\n )}\" text-anchor=\"middle\" dominant-baseline=\"hanging\" font-size=\"10\" fill=\"#000\">${escapeXml(\n tick.label\n )}</text>`\n );\n }\n\n for (const tick of yTicks) {\n const py = transform.yToPx(tick.value);\n elements.push(\n `<line class=\"y-tick\" x1=\"${vp.x.toFixed(2)}\" y1=\"${py.toFixed(2)}\" x2=\"${(\n vp.x - tickLength\n ).toFixed(2)}\" y2=\"${py.toFixed(2)}\" stroke=\"#000\" />`\n );\n elements.push(\n `<text class=\"tick-label tick-label-y\" x=\"${(vp.x - tickLength - labelOffset).toFixed(\n 2\n )}\" y=\"${py.toFixed(2)}\" text-anchor=\"end\" dominant-baseline=\"middle\" font-size=\"10\" fill=\"#000\">${escapeXml(\n tick.label\n )}</text>`\n );\n }\n }\n\n private renderLegendSVG(elements: string[], vp: Viewport): void {\n if (!this.legendOptions) return;\n const entries = this.collectLegendEntries();\n if (entries.length === 0) return;\n const options = this.resolveLegendOptions();\n if (!options.visible) return;\n\n const fontSize = options.fontSize;\n const padding = options.padding;\n const symbolSize = Math.max(8, Math.round(fontSize * 0.9));\n const gap = 6;\n let maxLabelWidth = 0;\n for (const entry of entries) {\n const width = estimateTextWidth(entry.label, fontSize);\n maxLabelWidth = Math.max(maxLabelWidth, width);\n }\n const lineHeight = fontSize + 4;\n const boxWidth = padding * 2 + symbolSize + gap + maxLabelWidth;\n const boxHeight = padding * 2 + entries.length * lineHeight;\n const margin = 6;\n\n const isRight = options.location.includes(\"right\");\n const isUpper = options.location.includes(\"upper\");\n const boxX = isRight ? vp.x + vp.width - boxWidth - margin : vp.x + margin;\n const boxY = isUpper ? vp.y + margin : vp.y + vp.height - boxHeight - margin;\n\n elements.push(`<g class=\"legend\">`);\n elements.push(\n `<rect class=\"legend-box\" x=\"${boxX.toFixed(2)}\" y=\"${boxY.toFixed(\n 2\n )}\" width=\"${boxWidth.toFixed(2)}\" height=\"${boxHeight.toFixed(\n 2\n )}\" fill=\"${escapeXml(options.background)}\" stroke=\"${escapeXml(options.borderColor)}\" />`\n );\n\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (!entry) continue;\n const rowY = boxY + padding + i * lineHeight + lineHeight / 2;\n const symbolX = boxX + padding;\n const symbolY = rowY - symbolSize / 2;\n\n if (entry.shape === \"line\") {\n const lineY = rowY;\n const lineWidth = entry.lineWidth ?? 2;\n elements.push(\n `<line class=\"legend-line\" x1=\"${symbolX.toFixed(2)}\" y1=\"${lineY.toFixed(\n 2\n )}\" x2=\"${(symbolX + symbolSize).toFixed(2)}\" y2=\"${lineY.toFixed(\n 2\n )}\" stroke=\"${escapeXml(entry.color)}\" stroke-width=\"${lineWidth}\" />`\n );\n } else if (entry.shape === \"marker\") {\n const radius = Math.max(2, Math.min(symbolSize / 2, entry.markerSize ?? symbolSize / 2));\n const cx = symbolX + symbolSize / 2;\n const cy = rowY;\n elements.push(\n `<circle class=\"legend-marker\" cx=\"${cx.toFixed(2)}\" cy=\"${cy.toFixed(\n 2\n )}\" r=\"${radius.toFixed(2)}\" fill=\"${escapeXml(entry.color)}\" />`\n );\n } else {\n elements.push(\n `<rect class=\"legend-swatch\" x=\"${symbolX.toFixed(2)}\" y=\"${symbolY.toFixed(\n 2\n )}\" width=\"${symbolSize.toFixed(2)}\" height=\"${symbolSize.toFixed(\n 2\n )}\" fill=\"${escapeXml(entry.color)}\" stroke=\"#000\" />`\n );\n }\n\n const textX = symbolX + symbolSize + gap;\n elements.push(\n `<text class=\"legend-label\" x=\"${textX.toFixed(2)}\" y=\"${rowY.toFixed(\n 2\n )}\" text-anchor=\"start\" dominant-baseline=\"middle\" font-size=\"${fontSize}\" fill=\"#000\">${escapeXml(\n entry.label\n )}</text>`\n );\n }\n\n elements.push(`</g>`);\n }\n\n private renderTicksRaster(\n canvas: RasterCanvas,\n vp: Viewport,\n range: {\n readonly xmin: number;\n readonly xmax: number;\n readonly ymin: number;\n readonly ymax: number;\n },\n transform: {\n readonly xToPx: (x: number) => number;\n readonly yToPx: (y: number) => number;\n }\n ): void {\n const maxXTicks = Math.max(2, Math.floor(vp.width / 80));\n const maxYTicks = Math.max(2, Math.floor(vp.height / 60));\n const xTicks = (this.xTicksOverride ?? generateTicks(range.xmin, range.xmax, maxXTicks)).filter(\n (tick) => tick.value >= range.xmin && tick.value <= range.xmax\n );\n const yTicks = (this.yTicksOverride ?? generateTicks(range.ymin, range.ymax, maxYTicks)).filter(\n (tick) => tick.value >= range.ymin && tick.value <= range.ymax\n );\n const tickLength = 5;\n const labelOffset = 2;\n const text = parseHexColorToRGBA(\"#000000\");\n\n for (const tick of xTicks) {\n const px = Math.round(transform.xToPx(tick.value));\n const y0 = Math.round(vp.y + vp.height);\n const y1 = y0 + tickLength;\n canvas.drawLineRGBA(px, y0, px, y1, text.r, text.g, text.b, text.a);\n canvas.drawTextRGBA(tick.label, px, y1 + labelOffset, text.r, text.g, text.b, text.a, {\n fontSize: 10,\n align: \"middle\",\n baseline: \"top\",\n });\n }\n\n for (const tick of yTicks) {\n const py = Math.round(transform.yToPx(tick.value));\n const x0 = Math.round(vp.x);\n const x1 = x0 - tickLength;\n canvas.drawLineRGBA(x0, py, x1, py, text.r, text.g, text.b, text.a);\n canvas.drawTextRGBA(tick.label, x1 - labelOffset, py, text.r, text.g, text.b, text.a, {\n fontSize: 10,\n align: \"end\",\n baseline: \"middle\",\n });\n }\n }\n\n private renderLegendRaster(canvas: RasterCanvas, vp: Viewport): void {\n if (!this.legendOptions) return;\n const entries = this.collectLegendEntries();\n if (entries.length === 0) return;\n const options = this.resolveLegendOptions();\n if (!options.visible) return;\n\n const fontSize = options.fontSize;\n const padding = options.padding;\n const symbolSize = Math.max(8, Math.round(fontSize * 0.9));\n const gap = 6;\n let maxLabelWidth = 0;\n for (const entry of entries) {\n maxLabelWidth = Math.max(maxLabelWidth, estimateTextWidth(entry.label, fontSize));\n }\n const lineHeight = fontSize + 4;\n const boxWidth = padding * 2 + symbolSize + gap + maxLabelWidth;\n const boxHeight = padding * 2 + entries.length * lineHeight;\n const margin = 6;\n const isRight = options.location.includes(\"right\");\n const isUpper = options.location.includes(\"upper\");\n const boxX = isRight ? vp.x + vp.width - boxWidth - margin : vp.x + margin;\n const boxY = isUpper ? vp.y + margin : vp.y + vp.height - boxHeight - margin;\n\n const bg = parseHexColorToRGBA(options.background);\n const border = parseHexColorToRGBA(options.borderColor);\n const bx = Math.round(boxX);\n const by = Math.round(boxY);\n const bw = Math.round(boxWidth);\n const bh = Math.round(boxHeight);\n canvas.fillRectRGBA(bx, by, bw, bh, bg.r, bg.g, bg.b, bg.a);\n canvas.drawLineRGBA(bx, by, bx + bw, by, border.r, border.g, border.b, border.a);\n canvas.drawLineRGBA(bx, by + bh, bx + bw, by + bh, border.r, border.g, border.b, border.a);\n canvas.drawLineRGBA(bx, by, bx, by + bh, border.r, border.g, border.b, border.a);\n canvas.drawLineRGBA(bx + bw, by, bx + bw, by + bh, border.r, border.g, border.b, border.a);\n\n const text = parseHexColorToRGBA(\"#000000\");\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (!entry) continue;\n const rowY = boxY + padding + i * lineHeight + lineHeight / 2;\n const symbolX = boxX + padding;\n const symbolY = rowY - symbolSize / 2;\n const color = parseHexColorToRGBA(entry.color);\n\n if (entry.shape === \"line\") {\n const y = Math.round(rowY);\n const x0 = Math.round(symbolX);\n const x1 = Math.round(symbolX + symbolSize);\n canvas.drawLineRGBA(x0, y, x1, y, color.r, color.g, color.b, color.a);\n } else if (entry.shape === \"marker\") {\n const radius = Math.max(2, Math.min(symbolSize / 2, entry.markerSize ?? symbolSize / 2));\n const cx = Math.round(symbolX + symbolSize / 2);\n const cy = Math.round(rowY);\n canvas.drawCircleRGBA(cx, cy, Math.round(radius), color.r, color.g, color.b, color.a);\n } else {\n canvas.fillRectRGBA(\n Math.round(symbolX),\n Math.round(symbolY),\n Math.round(symbolSize),\n Math.round(symbolSize),\n color.r,\n color.g,\n color.b,\n color.a\n );\n }\n\n const textX = symbolX + symbolSize + gap;\n canvas.drawTextRGBA(\n entry.label,\n Math.round(textX),\n Math.round(rowY),\n text.r,\n text.g,\n text.b,\n text.a,\n { fontSize, align: \"start\", baseline: \"middle\" }\n );\n }\n }\n\n /**\n * Render axes to SVG elements.\n * @internal\n */\n renderSVGInto(elements: string[]): void {\n const vp = this.viewport();\n const range = computeAutoRange(this.drawables);\n const transform = makeTransform(range, vp);\n elements.push(\n `<rect x=\"${vp.x}\" y=\"${vp.y}\" width=\"${vp.width}\" height=\"${vp.height}\" fill=\"${escapeXml(this.facecolor)}\" stroke=\"#000\" />`\n );\n\n const ctx: SvgDrawContext = {\n transform,\n push: (el) => {\n elements.push(el);\n },\n };\n\n for (const d of this.drawables) d.drawSVG(ctx);\n\n const shouldRenderTicks = this.drawables.length > 0;\n if (shouldRenderTicks) {\n this.renderTicksSVG(elements, vp, range, transform);\n }\n\n if (this.title) {\n const titleX = vp.x + vp.width / 2;\n const titleY = vp.y - 10;\n elements.push(\n `<text x=\"${titleX}\" y=\"${titleY}\" text-anchor=\"middle\" font-size=\"14\" font-weight=\"bold\" fill=\"#000\">${escapeXml(this.title)}</text>`\n );\n }\n\n if (this.xlabel) {\n const xlabelX = vp.x + vp.width / 2;\n const xlabelY = vp.y + vp.height + 35;\n elements.push(\n `<text x=\"${xlabelX}\" y=\"${xlabelY}\" text-anchor=\"middle\" font-size=\"12\" fill=\"#000\">${escapeXml(this.xlabel)}</text>`\n );\n }\n\n if (this.ylabel) {\n const ylabelX = vp.x - 35;\n const ylabelY = vp.y + vp.height / 2;\n elements.push(\n `<text x=\"${ylabelX}\" y=\"${ylabelY}\" text-anchor=\"middle\" font-size=\"12\" fill=\"#000\" transform=\"rotate(-90 ${ylabelX} ${ylabelY})\">${escapeXml(this.ylabel)}</text>`\n );\n }\n\n this.renderLegendSVG(elements, vp);\n }\n\n /**\n * Render axes to raster canvas.\n * @internal\n */\n renderRasterInto(canvas: RasterCanvas): void {\n const vp = this.viewport();\n const range = computeAutoRange(this.drawables);\n const transform = makeTransform(range, vp);\n const ctx = { transform, canvas };\n\n const bg = parseHexColorToRGBA(this.facecolor);\n const x0 = Math.round(vp.x);\n const y0 = Math.round(vp.y);\n const w = Math.max(0, Math.round(vp.width));\n const h = Math.max(0, Math.round(vp.height));\n if (w > 0 && h > 0) {\n canvas.fillRectRGBA(x0, y0, w, h, bg.r, bg.g, bg.b, bg.a);\n const edge = parseHexColorToRGBA(\"#000000\");\n const x1 = x0 + w;\n const y1 = y0 + h;\n canvas.drawLineRGBA(x0, y0, x1, y0, edge.r, edge.g, edge.b, edge.a);\n canvas.drawLineRGBA(x0, y1, x1, y1, edge.r, edge.g, edge.b, edge.a);\n canvas.drawLineRGBA(x0, y0, x0, y1, edge.r, edge.g, edge.b, edge.a);\n canvas.drawLineRGBA(x1, y0, x1, y1, edge.r, edge.g, edge.b, edge.a);\n }\n for (const d of this.drawables) d.drawRaster(ctx);\n\n const shouldRenderTicks = this.drawables.length > 0;\n if (shouldRenderTicks) {\n this.renderTicksRaster(canvas, vp, range, transform);\n }\n\n const text = parseHexColorToRGBA(\"#000000\");\n if (this.title) {\n const titleX = vp.x + vp.width / 2;\n const titleY = vp.y - 10;\n canvas.drawTextRGBA(this.title, titleX, titleY, text.r, text.g, text.b, text.a, {\n fontSize: 14,\n align: \"middle\",\n baseline: \"bottom\",\n });\n }\n\n if (this.xlabel) {\n const xlabelX = vp.x + vp.width / 2;\n const xlabelY = vp.y + vp.height + 35;\n canvas.drawTextRGBA(this.xlabel, xlabelX, xlabelY, text.r, text.g, text.b, text.a, {\n fontSize: 12,\n align: \"middle\",\n baseline: \"top\",\n });\n }\n\n if (this.ylabel) {\n const ylabelX = vp.x - 35;\n const ylabelY = vp.y + vp.height / 2;\n canvas.drawTextRGBA(this.ylabel, ylabelX, ylabelY, text.r, text.g, text.b, text.a, {\n fontSize: 12,\n align: \"middle\",\n baseline: \"middle\",\n rotation: -90,\n });\n }\n\n this.renderLegendRaster(canvas, vp);\n }\n}\n","import { assertPositiveInt, clampInt } from \"../utils/validation\";\n\n/**\n * @internal\n */\nexport class RasterCanvas {\n readonly width: number;\n readonly height: number;\n readonly data: Uint8ClampedArray;\n\n constructor(width: number, height: number) {\n assertPositiveInt(\"width\", width);\n assertPositiveInt(\"height\", height);\n this.width = width;\n this.height = height;\n this.data = new Uint8ClampedArray(width * height * 4);\n }\n\n clearRGBA(r: number, g: number, b: number, a: number): void {\n const n = this.width * this.height;\n for (let i = 0; i < n; i++) {\n const k = i * 4;\n this.data[k] = r;\n this.data[k + 1] = g;\n this.data[k + 2] = b;\n this.data[k + 3] = a;\n }\n }\n\n setPixelRGBA(x: number, y: number, r: number, g: number, b: number, a: number): void {\n if (x < 0 || y < 0 || x >= this.width || y >= this.height) return;\n const idx = (y * this.width + x) * 4;\n this.data[idx] = r;\n this.data[idx + 1] = g;\n this.data[idx + 2] = b;\n this.data[idx + 3] = a;\n }\n\n fillRectRGBA(\n x0: number,\n y0: number,\n w: number,\n h: number,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n const x1 = x0 + w;\n const y1 = y0 + h;\n const cx0 = clampInt(x0, 0, this.width);\n const cy0 = clampInt(y0, 0, this.height);\n const cx1 = clampInt(x1, 0, this.width);\n const cy1 = clampInt(y1, 0, this.height);\n for (let y = cy0; y < cy1; y++) {\n for (let x = cx0; x < cx1; x++) this.setPixelRGBA(x, y, r, g, b, a);\n }\n }\n\n drawLineRGBA(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n let x = clampInt(x0, -1_000_000, 1_000_000);\n let y = clampInt(y0, -1_000_000, 1_000_000);\n const xEnd = clampInt(x1, -1_000_000, 1_000_000);\n const yEnd = clampInt(y1, -1_000_000, 1_000_000);\n const dx = Math.abs(xEnd - x);\n const sx = x < xEnd ? 1 : -1;\n const dy = -Math.abs(yEnd - y);\n const sy = y < yEnd ? 1 : -1;\n let err = dx + dy;\n\n for (;;) {\n this.setPixelRGBA(x, y, r, g, b, a);\n if (x === xEnd && y === yEnd) break;\n const e2 = 2 * err;\n if (e2 >= dy) {\n err += dy;\n x += sx;\n }\n if (e2 <= dx) {\n err += dx;\n y += sy;\n }\n }\n }\n\n fillTriangleRGBA(\n x0: number,\n y0: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n // Sort vertices by Y\n if (y0 > y1) {\n [x0, x1] = [x1, x0];\n [y0, y1] = [y1, y0];\n }\n if (y0 > y2) {\n [x0, x2] = [x2, x0];\n [y0, y2] = [y2, y0];\n }\n if (y1 > y2) {\n [x1, x2] = [x2, x1];\n [y1, y2] = [y2, y1];\n }\n\n const totalHeight = y2 - y0;\n if (totalHeight === 0) return;\n\n for (let i = 0; i < totalHeight; i++) {\n const secondHalf = i > y1 - y0 || y1 === y0;\n const segmentHeight = secondHalf ? y2 - y1 : y1 - y0;\n const alpha = i / totalHeight;\n const beta = (i - (secondHalf ? y1 - y0 : 0)) / segmentHeight;\n\n let ax = x0 + (x2 - x0) * alpha;\n let bx = secondHalf ? x1 + (x2 - x1) * beta : x0 + (x1 - x0) * beta;\n\n if (ax > bx) {\n [ax, bx] = [bx, ax];\n }\n\n const y = Math.floor(y0 + i);\n const startX = Math.floor(ax);\n const endX = Math.ceil(bx);\n\n for (let x = startX; x < endX; x++) {\n this.setPixelRGBA(x, y, r, g, b, a);\n }\n }\n }\n\n drawCircleRGBA(\n cx: number,\n cy: number,\n radius: number,\n r: number,\n g: number,\n b: number,\n a: number\n ): void {\n const rr = Math.max(0, radius);\n const r2 = rr * rr;\n const x0 = clampInt(cx - rr, 0, this.width);\n const x1 = clampInt(cx + rr + 1, 0, this.width);\n const y0 = clampInt(cy - rr, 0, this.height);\n const y1 = clampInt(cy + rr + 1, 0, this.height);\n\n for (let y = y0; y < y1; y++) {\n const dy = y - cy;\n for (let x = x0; x < x1; x++) {\n const dx = x - cx;\n if (dx * dx + dy * dy <= r2) this.setPixelRGBA(x, y, r, g, b, a);\n }\n }\n }\n\n measureText(text: string, fontSize = 12): { readonly width: number; readonly height: number } {\n const scale = Math.max(1, Math.round(fontSize / FONT_HEIGHT));\n const charWidth = FONT_WIDTH * scale;\n const charHeight = FONT_HEIGHT * scale;\n const spacing = scale;\n if (text.length === 0) return { width: 0, height: charHeight };\n return { width: text.length * charWidth + (text.length - 1) * spacing, height: charHeight };\n }\n\n drawTextRGBA(\n text: string,\n x: number,\n y: number,\n r: number,\n g: number,\n b: number,\n a: number,\n options: {\n readonly fontSize?: number;\n readonly align?: \"start\" | \"middle\" | \"end\";\n readonly baseline?: \"top\" | \"middle\" | \"bottom\";\n readonly rotation?: 0 | 90 | -90;\n } = {}\n ): void {\n if (text.length === 0) return;\n const fontSize = options.fontSize ?? 12;\n const align = options.align ?? \"start\";\n const baseline = options.baseline ?? \"top\";\n const rotation = options.rotation ?? 0;\n\n const scale = Math.max(1, Math.round(fontSize / FONT_HEIGHT));\n const charWidth = FONT_WIDTH * scale;\n const charHeight = FONT_HEIGHT * scale;\n const spacing = scale;\n const textWidth = text.length * charWidth + (text.length - 1) * spacing;\n const textHeight = charHeight;\n\n const boxWidth = rotation === 0 ? textWidth : textHeight;\n const boxHeight = rotation === 0 ? textHeight : textWidth;\n\n let originX = Math.round(x);\n let originY = Math.round(y);\n if (align === \"middle\") originX -= Math.round(boxWidth / 2);\n else if (align === \"end\") originX -= boxWidth;\n if (baseline === \"middle\") originY -= Math.round(boxHeight / 2);\n else if (baseline === \"bottom\") originY -= boxHeight;\n\n for (let i = 0; i < text.length; i++) {\n const ch = text[i] ?? \"\";\n const rows = glyphRows(ch);\n const xOffset = i * (charWidth + spacing);\n for (let row = 0; row < rows.length; row++) {\n const mask = rows[row] ?? 0;\n for (let col = 0; col < FONT_WIDTH; col++) {\n if ((mask & (1 << (FONT_WIDTH - 1 - col))) === 0) continue;\n const baseX = xOffset + col * scale;\n const baseY = row * scale;\n for (let sy = 0; sy < scale; sy++) {\n for (let sx = 0; sx < scale; sx++) {\n const px = baseX + sx;\n const py = baseY + sy;\n let rx = px;\n let ry = py;\n if (rotation === -90) {\n rx = py;\n ry = textWidth - 1 - px;\n } else if (rotation === 90) {\n rx = textHeight - 1 - py;\n ry = px;\n }\n this.setPixelRGBA(originX + rx, originY + ry, r, g, b, a);\n }\n }\n }\n }\n }\n }\n}\n\nconst FONT_WIDTH = 5;\nconst FONT_HEIGHT = 7;\n\nconst FONT: Readonly<Record<string, readonly number[]>> = {\n \" \": [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],\n \"!\": [0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04],\n '\"': [0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00],\n \"'\": [0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00],\n \"(\": [0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02],\n \")\": [0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08],\n \"*\": [0x00, 0x0a, 0x04, 0x1f, 0x04, 0x0a, 0x00],\n \"+\": [0x00, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x00],\n \",\": [0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08],\n \"-\": [0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00],\n \".\": [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04],\n \"/\": [0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00],\n \"0\": [0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e],\n \"1\": [0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e],\n \"2\": [0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f],\n \"3\": [0x1f, 0x02, 0x04, 0x02, 0x01, 0x11, 0x0e],\n \"4\": [0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02],\n \"5\": [0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e],\n \"6\": [0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e],\n \"7\": [0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08],\n \"8\": [0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e],\n \"9\": [0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c],\n \":\": [0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00],\n \";\": [0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x08],\n \"<\": [0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02],\n \"=\": [0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00],\n \">\": [0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10],\n \"?\": [0x0e, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04],\n \"%\": [0x19, 0x19, 0x02, 0x04, 0x08, 0x13, 0x13],\n _: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f],\n A: [0x0e, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11],\n B: [0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e],\n C: [0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e],\n D: [0x1e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1e],\n E: [0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x1f],\n F: [0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x10],\n G: [0x0e, 0x11, 0x10, 0x17, 0x11, 0x11, 0x0e],\n H: [0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11],\n I: [0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e],\n J: [0x07, 0x02, 0x02, 0x02, 0x12, 0x12, 0x0c],\n K: [0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11],\n L: [0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f],\n M: [0x11, 0x1b, 0x15, 0x11, 0x11, 0x11, 0x11],\n N: [0x11, 0x19, 0x15, 0x13, 0x11, 0x11, 0x11],\n O: [0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e],\n P: [0x1e, 0x11, 0x11, 0x1e, 0x10, 0x10, 0x10],\n Q: [0x0e, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0d],\n R: [0x1e, 0x11, 0x11, 0x1e, 0x14, 0x12, 0x11],\n S: [0x0f, 0x10, 0x10, 0x0e, 0x01, 0x01, 0x1e],\n T: [0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04],\n U: [0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e],\n V: [0x11, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04],\n W: [0x11, 0x11, 0x11, 0x11, 0x15, 0x1b, 0x11],\n X: [0x11, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x11],\n Y: [0x11, 0x11, 0x0a, 0x04, 0x04, 0x04, 0x04],\n Z: [0x1f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1f],\n \"[\": [0x0e, 0x08, 0x08, 0x08, 0x08, 0x08, 0x0e],\n \"]\": [0x0e, 0x02, 0x02, 0x02, 0x02, 0x02, 0x0e],\n};\n\nfunction glyphRows(ch: string): readonly number[] {\n const direct = FONT[ch];\n if (direct) return direct;\n const upper = ch.toUpperCase();\n return FONT[upper] ?? FONT[\"?\"] ?? [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00];\n}\n","import { InvalidParameterError } from \"../../core\";\nimport { assertPositiveInt } from \"../utils/validation\";\n\nfunction isNodeEnvironment(): boolean {\n return (\n typeof process !== \"undefined\" &&\n typeof process.versions !== \"undefined\" &&\n typeof process.versions.node !== \"undefined\"\n );\n}\n\nfunction u32be(n: number): Uint8Array {\n return Uint8Array.of((n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, n & 255);\n}\n\nfunction ascii4(s: string): Uint8Array {\n return Uint8Array.of(\n s.charCodeAt(0) & 255,\n s.charCodeAt(1) & 255,\n s.charCodeAt(2) & 255,\n s.charCodeAt(3) & 255\n );\n}\n\nfunction concatBytes(chunks: readonly Uint8Array[]): Uint8Array {\n let total = 0;\n for (const c of chunks) total += c.length;\n const out = new Uint8Array(total);\n let o = 0;\n for (const c of chunks) {\n out.set(c, o);\n o += c.length;\n }\n return out;\n}\n\nfunction crc32(buf: Uint8Array): number {\n let crc = 0xffffffff;\n for (let i = 0; i < buf.length; i++) {\n let x = (crc ^ (buf[i] ?? 0)) & 0xff;\n for (let k = 0; k < 8; k++) {\n x = (x & 1) !== 0 ? 0xedb88320 ^ (x >>> 1) : x >>> 1;\n }\n crc = (crc >>> 8) ^ x;\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n\nfunction pngChunk(type: string, data: Uint8Array): Uint8Array {\n const t = ascii4(type);\n const len = u32be(data.length);\n const crc = u32be(crc32(concatBytes([t, data])));\n return concatBytes([len, t, data, crc]);\n}\n\nfunction deflateUncompressed(data: Uint8Array): Uint8Array {\n const maxBlockSize = 65535;\n const numBlocks = Math.ceil(data.length / maxBlockSize);\n\n let totalSize = 0;\n for (let i = 0; i < numBlocks; i++) {\n const blockStart = i * maxBlockSize;\n const blockSize = Math.min(maxBlockSize, data.length - blockStart);\n totalSize += 5 + blockSize;\n }\n\n const output = new Uint8Array(2 + totalSize + 4);\n let outPos = 0;\n\n output[outPos++] = 0x78;\n output[outPos++] = 0x01;\n\n for (let i = 0; i < numBlocks; i++) {\n const blockStart = i * maxBlockSize;\n const blockSize = Math.min(maxBlockSize, data.length - blockStart);\n const isLast = i === numBlocks - 1;\n\n output[outPos++] = isLast ? 0x01 : 0x00;\n\n output[outPos++] = blockSize & 0xff;\n output[outPos++] = (blockSize >> 8) & 0xff;\n\n const nlen = ~blockSize & 0xffff;\n output[outPos++] = nlen & 0xff;\n output[outPos++] = (nlen >> 8) & 0xff;\n\n output.set(data.subarray(blockStart, blockStart + blockSize), outPos);\n outPos += blockSize;\n }\n\n let a = 1;\n let b = 0;\n for (let i = 0; i < data.length; i++) {\n a = (a + (data[i] ?? 0)) % 65521;\n b = (b + a) % 65521;\n }\n const adler32 = ((b << 16) | a) >>> 0;\n\n output[outPos++] = (adler32 >>> 24) & 0xff;\n output[outPos++] = (adler32 >>> 16) & 0xff;\n output[outPos++] = (adler32 >>> 8) & 0xff;\n output[outPos++] = adler32 & 0xff;\n\n return output;\n}\n\n/**\n * Encodes RGBA to PNG.\n * @internal\n */\nexport async function pngEncodeRGBA(\n width: number,\n height: number,\n rgba: Uint8ClampedArray\n): Promise<Uint8Array> {\n assertPositiveInt(\"width\", width);\n assertPositiveInt(\"height\", height);\n if (rgba.length !== width * height * 4)\n throw new InvalidParameterError(\"RGBA buffer has incorrect length\", \"rgba\", rgba.length);\n\n const signature = Uint8Array.of(137, 80, 78, 71, 13, 10, 26, 10);\n const ihdrData = concatBytes([u32be(width), u32be(height), Uint8Array.of(8, 6, 0, 0, 0)]);\n const ihdr = pngChunk(\"IHDR\", ihdrData);\n\n const stride = width * 4;\n const raw = new Uint8Array(height * (1 + stride));\n for (let y = 0; y < height; y++) {\n const rowOff = y * (1 + stride);\n raw[rowOff] = 0;\n raw.set(rgba.subarray(y * stride, y * stride + stride), rowOff + 1);\n }\n\n let compressed: Uint8Array;\n if (isNodeEnvironment()) {\n try {\n const zlib = await import(\"node:zlib\");\n compressed =\n typeof zlib.deflateSync === \"function\"\n ? zlib.deflateSync(raw, { level: 9 })\n : deflateUncompressed(raw);\n } catch {\n compressed = deflateUncompressed(raw);\n }\n } else {\n compressed = deflateUncompressed(raw);\n }\n\n const idat = pngChunk(\"IDAT\", compressed);\n const iend = pngChunk(\"IEND\", new Uint8Array(0));\n return concatBytes([signature, ihdr, idat, iend]);\n}\n\n/**\n * Checks if PNG is supported.\n * @internal\n */\nexport function isPNGSupported(): boolean {\n return isNodeEnvironment();\n}\n\n/**\n * Checks if Node environment.\n * @internal\n */\nexport function isNodeEnvironment_export(): boolean {\n return isNodeEnvironment();\n}\n","import { InvalidParameterError, NotImplementedError } from \"../../core\";\nimport { RasterCanvas } from \"../canvas/RasterCanvas\";\nimport { isNodeEnvironment_export, pngEncodeRGBA } from \"../renderers/png\";\nimport type { Color, RenderedPNG, RenderedSVG, Viewport } from \"../types\";\nimport { normalizeColor, parseHexColorToRGBA } from \"../utils/colors\";\nimport { assertPositiveInt } from \"../utils/validation\";\nimport { escapeXml } from \"../utils/xml\";\nimport { Axes } from \"./Axes\";\n\n/**\n * A Figure represents the entire plotting canvas.\n */\nexport class Figure {\n readonly width: number;\n readonly height: number;\n readonly background: Color;\n public readonly axesList: Axes[];\n\n constructor(\n options: {\n readonly width?: number;\n readonly height?: number;\n readonly background?: Color;\n } = {}\n ) {\n this.width = options.width ?? 640;\n this.height = options.height ?? 480;\n assertPositiveInt(\"Figure.width\", this.width);\n assertPositiveInt(\"Figure.height\", this.height);\n\n if (this.width > 32768 || this.height > 32768) {\n throw new InvalidParameterError(\n \"Figure dimensions too large. Maximum is 32,768 pixels.\",\n \"width/height\",\n { width: this.width, height: this.height }\n );\n }\n\n this.background = normalizeColor(options.background, \"#ffffff\");\n this.axesList = [];\n }\n\n /**\n * Add a new axes to the figure.\n * @param options - Axes layout options\n */\n addAxes(\n options: {\n readonly padding?: number;\n readonly facecolor?: Color;\n readonly viewport?: Viewport;\n } = {}\n ): Axes {\n const ax = new Axes(this, options);\n this.axesList.push(ax);\n return ax;\n }\n\n /**\n * Render this figure to SVG.\n */\n renderSVG(): RenderedSVG {\n const elements: string[] = [];\n elements.push(\n `<rect x=\"0\" y=\"0\" width=\"${this.width}\" height=\"${this.height}\" fill=\"${escapeXml(this.background)}\" />`\n );\n for (const ax of this.axesList) ax.renderSVGInto(elements);\n const svg = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${this.width}\" height=\"${this.height}\" viewBox=\"0 0 ${this.width} ${this.height}\">\\n${elements.join(\"\\n\")}\\n</svg>`;\n return { kind: \"svg\", svg };\n }\n\n /**\n * Render this figure to PNG (Node.js only).\n *\n * Note: PNG text rendering uses a built-in bitmap font for basic ASCII.\n * Unsupported characters are rendered as \"?\".\n */\n async renderPNG(): Promise<RenderedPNG> {\n if (!isNodeEnvironment_export()) {\n throw new NotImplementedError(\n \"PNG rendering is only available in Node.js environments. \" +\n \"Use renderSVG() for browser compatibility, or run in Node.js to generate PNG files.\"\n );\n }\n\n const canvas = new RasterCanvas(this.width, this.height);\n const bg = parseHexColorToRGBA(this.background);\n canvas.clearRGBA(bg.r, bg.g, bg.b, bg.a);\n for (const ax of this.axesList) ax.renderRasterInto(canvas);\n const bytes = await pngEncodeRGBA(this.width, this.height, canvas.data);\n return { kind: \"png\", width: this.width, height: this.height, bytes };\n }\n}\n","import { InvalidParameterError } from \"../../core\";\nimport type { Color } from \"../types\";\nimport type { Axes } from \"./Axes\";\nimport { Figure } from \"./Figure\";\n\nlet _currentFigure: Figure | null = null;\nlet _currentAxes: Axes | null = null;\n\nfunction gcf(): Figure {\n if (!_currentFigure) {\n _currentFigure = new Figure({ width: 320, height: 240 });\n }\n return _currentFigure;\n}\n\n/**\n * Get the current axes, creating one if needed.\n */\nexport function gca(): Axes {\n const fig = gcf();\n if (_currentAxes && fig.axesList.includes(_currentAxes)) return _currentAxes;\n if (fig.axesList.length === 0) {\n _currentAxes = fig.addAxes();\n return _currentAxes;\n }\n const firstAxes = fig.axesList[0];\n if (!firstAxes) {\n _currentAxes = fig.addAxes();\n return _currentAxes;\n }\n _currentAxes = firstAxes;\n return _currentAxes;\n}\n\n/**\n * Create a new figure and set it as current.\n */\nexport function figure(\n options: { readonly width?: number; readonly height?: number; readonly background?: Color } = {}\n): Figure {\n _currentFigure = new Figure({\n width: options.width ?? 320,\n height: options.height ?? 240,\n ...(options.background !== undefined && { background: options.background }),\n });\n _currentAxes = _currentFigure.addAxes();\n return _currentFigure;\n}\n\n/**\n * Create a subplot and set it as current axes.\n */\nexport function subplot(\n rows: number,\n cols: number,\n index: number,\n options: { readonly padding?: number; readonly facecolor?: Color } = {}\n): Axes {\n if (!Number.isFinite(rows) || Math.trunc(rows) !== rows || rows <= 0) {\n throw new InvalidParameterError(\n `rows must be a positive integer; received ${rows}`,\n \"rows\",\n rows\n );\n }\n if (!Number.isFinite(cols) || Math.trunc(cols) !== cols || cols <= 0) {\n throw new InvalidParameterError(\n `cols must be a positive integer; received ${cols}`,\n \"cols\",\n cols\n );\n }\n const total = rows * cols;\n if (total > 10000) {\n throw new InvalidParameterError(\n `Subplot grid too large (${rows}×${cols}=${total}). Maximum is 10,000 subplots.`,\n \"rows*cols\",\n total\n );\n }\n if (!Number.isFinite(index) || Math.trunc(index) !== index || index < 1 || index > total) {\n throw new InvalidParameterError(\n `index must be in [1, ${total}]; received ${index}`,\n \"index\",\n index\n );\n }\n\n const fig = gcf();\n const idx0 = index - 1;\n const row = Math.floor(idx0 / cols);\n const col = idx0 % cols;\n const cellW = fig.width / cols;\n const cellH = fig.height / rows;\n const viewport = {\n x: col * cellW,\n y: row * cellH,\n width: cellW,\n height: cellH,\n };\n const ax = fig.addAxes({ ...options, viewport });\n _currentAxes = ax;\n return ax;\n}\n"]}