seraplot 2.3.88__tar.gz → 2.4.0__tar.gz

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 (446) hide show
  1. {seraplot-2.3.88 → seraplot-2.4.0}/Cargo.lock +1 -1
  2. {seraplot-2.3.88 → seraplot-2.4.0}/Cargo.toml +1 -1
  3. {seraplot-2.3.88 → seraplot-2.4.0}/PKG-INFO +1 -1
  4. {seraplot-2.3.88 → seraplot-2.4.0}/pyproject.toml +1 -1
  5. seraplot-2.4.0/src/.gitignore +4 -0
  6. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/commands/charts.rs +374 -4
  7. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/commands/ml.rs +477 -0
  8. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/registry_macro.rs +74 -1
  9. {seraplot-2.3.88 → seraplot-2.4.0}/src/book.toml +1 -1
  10. seraplot-2.4.0/src/docs/SUMMARY.md +151 -0
  11. seraplot-2.4.0/src/docs/about/index.md +13 -0
  12. seraplot-2.4.0/src/docs/about/support.md +96 -0
  13. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/area.md +5 -1
  14. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/bar.md +5 -1
  15. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/boxplot.md +5 -1
  16. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/bubble.md +5 -1
  17. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/bullet.md +5 -1
  18. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/candlestick.md +5 -1
  19. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/donut.md +5 -1
  20. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/dumbbell.md +5 -1
  21. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/funnel.md +5 -1
  22. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/gauge.md +5 -1
  23. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/grid.md +5 -1
  24. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/grouped-bar.md +5 -1
  25. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/hbar.md +5 -1
  26. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/heatmap.md +5 -1
  27. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/histogram-overlay.md +5 -1
  28. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/histogram.md +5 -1
  29. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/kde.md +5 -1
  30. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/line.md +5 -1
  31. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/lollipop.md +5 -1
  32. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/multiline.md +5 -1
  33. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/parallel.md +5 -1
  34. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/pie.md +5 -1
  35. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/radar.md +5 -1
  36. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/ridgeline.md +5 -1
  37. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/scatter.md +5 -1
  38. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/slideshow.md +5 -1
  39. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/slope.md +5 -1
  40. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/stacked-bar.md +5 -1
  41. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/sunburst.md +5 -1
  42. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/treemap.md +5 -1
  43. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/violin.md +5 -1
  44. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/waterfall.md +5 -1
  45. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/wordcloud.md +5 -1
  46. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/bar3d.md +5 -1
  47. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/bubble3d.md +5 -1
  48. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/candlestick3d.md +5 -1
  49. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/dumbbell3d.md +5 -1
  50. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/funnel3d.md +5 -1
  51. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/globe3d.md +5 -1
  52. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/heatmap3d.md +5 -1
  53. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/kde3d.md +5 -1
  54. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/line3d.md +5 -1
  55. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/lollipop3d.md +5 -1
  56. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/pie3d.md +5 -1
  57. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/radar3d.md +5 -1
  58. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/ridgeline3d.md +5 -1
  59. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/scatter3d.md +49 -8
  60. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/stacked-bar3d.md +5 -1
  61. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/sunburst3d.md +5 -1
  62. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/violin3d.md +5 -1
  63. seraplot-2.4.0/src/docs/charts/index.md +13 -0
  64. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/map/bubble-map.md +5 -1
  65. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/map/choropleth.md +5 -1
  66. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/automl.md +6 -2
  67. seraplot-2.4.0/src/docs/config/index.md +13 -0
  68. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/pickle.md +26 -0
  69. seraplot-2.4.0/src/docs/config/themes.md +273 -0
  70. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/getting-started/chart-methods.md +784 -503
  71. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/getting-started/chart-object.md +2 -10
  72. seraplot-2.4.0/src/docs/getting-started/index.md +109 -0
  73. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/getting-started/installation.md +0 -56
  74. seraplot-2.4.0/src/docs/getting-started/quickstart.md +105 -0
  75. seraplot-2.4.0/src/docs/introduction.md +682 -0
  76. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/adaboost.md +10 -10
  77. seraplot-2.4.0/src/docs/ml/cv-splitters.md +121 -0
  78. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/dbscan-class.md +227 -191
  79. seraplot-2.4.0/src/docs/ml/dbscan.md +427 -0
  80. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/dbscan3d.md +212 -167
  81. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/decision-tree.md +10 -10
  82. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/decomposition.md +16 -16
  83. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/elastic-net.md +174 -174
  84. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/gradient-boosting.md +10 -10
  85. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/grid-search.md +6 -6
  86. seraplot-2.4.0/src/docs/ml/isolation-forest.md +129 -0
  87. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/kmeans-class.md +55 -1
  88. seraplot-2.4.0/src/docs/ml/kmeans.md +336 -0
  89. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/knn.md +10 -10
  90. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/lasso.md +158 -158
  91. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/linear-regression.md +150 -150
  92. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/logistic-regression.md +170 -170
  93. seraplot-2.4.0/src/docs/ml/metrics-classification.md +311 -0
  94. seraplot-2.4.0/src/docs/ml/metrics-clustering.md +203 -0
  95. seraplot-2.4.0/src/docs/ml/metrics-regression.md +197 -0
  96. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/metrics.md +14 -14
  97. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/naive-bayes.md +14 -14
  98. seraplot-2.4.0/src/docs/ml/permutation-importance.md +137 -0
  99. seraplot-2.4.0/src/docs/ml/preprocessing-advanced.md +359 -0
  100. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/preprocessing.md +12 -12
  101. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/random-forest.md +10 -10
  102. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/ridge.md +176 -176
  103. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/sgd.md +6 -6
  104. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/svm.md +8 -8
  105. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/train-test-split.md +6 -6
  106. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/theme/custom.css +28 -0
  107. seraplot-2.4.0/src/docs/theme/donate-popup.js +93 -0
  108. seraplot-2.4.0/src/docs/theme/lang-switcher.js +173 -0
  109. seraplot-2.4.0/src/docs/tooling/index.md +13 -0
  110. seraplot-2.4.0/src/docs/tooling/vscode.md +165 -0
  111. seraplot-2.4.0/src/ml/anomaly/isolation_forest.rs +153 -0
  112. seraplot-2.4.0/src/ml/anomaly/mod.rs +3 -0
  113. seraplot-2.4.0/src/ml/metrics/classification.rs +347 -0
  114. seraplot-2.4.0/src/ml/metrics/clustering.rs +273 -0
  115. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/metrics/mod.rs +2 -0
  116. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/metrics/regression.rs +46 -0
  117. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/mod.rs +2 -0
  118. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/model_selection/grid_search.rs +1 -32
  119. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/model_selection/mod.rs +2 -0
  120. seraplot-2.4.0/src/ml/model_selection/permutation.rs +68 -0
  121. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/model_selection/split.rs +60 -0
  122. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/preprocessing/encoders.rs +50 -0
  123. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/preprocessing/mod.rs +2 -0
  124. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/preprocessing/scalers.rs +87 -3
  125. seraplot-2.4.0/src/ml/preprocessing/transformers.rs +312 -0
  126. seraplot-2.3.88/src/docs/SUMMARY.md +0 -149
  127. seraplot-2.3.88/src/docs/getting-started/quickstart.md +0 -288
  128. seraplot-2.3.88/src/docs/introduction.md +0 -790
  129. seraplot-2.3.88/src/docs/ml/dbscan.md +0 -214
  130. seraplot-2.3.88/src/docs/ml/kmeans.md +0 -189
  131. seraplot-2.3.88/src/docs/theme/lang-switcher.js +0 -141
  132. seraplot-2.3.88/src/ml/metrics/classification.rs +0 -125
  133. {seraplot-2.3.88 → seraplot-2.4.0}/.gitignore +0 -0
  134. {seraplot-2.3.88 → seraplot-2.4.0}/05--Diabetes_SeraPlot.ipynb +0 -0
  135. {seraplot-2.3.88 → seraplot-2.4.0}/07--OpenFoodFacts_SeraPlot_Benchmark.ipynb +0 -0
  136. {seraplot-2.3.88 → seraplot-2.4.0}/README.md +0 -0
  137. {seraplot-2.3.88 → seraplot-2.4.0}/TEST_1M_Battle.ipynb +0 -0
  138. {seraplot-2.3.88 → seraplot-2.4.0}/bench_all.py +0 -0
  139. {seraplot-2.3.88 → seraplot-2.4.0}/bench_bigdata.py +0 -0
  140. {seraplot-2.3.88 → seraplot-2.4.0}/bench_full.py +0 -0
  141. {seraplot-2.3.88 → seraplot-2.4.0}/bench_issues.json +0 -0
  142. {seraplot-2.3.88 → seraplot-2.4.0}/bench_knn_sgd.py +0 -0
  143. {seraplot-2.3.88 → seraplot-2.4.0}/bench_perf.py +0 -0
  144. {seraplot-2.3.88 → seraplot-2.4.0}/bench_quick.py +0 -0
  145. {seraplot-2.3.88 → seraplot-2.4.0}/bench_quick2.py +0 -0
  146. {seraplot-2.3.88 → seraplot-2.4.0}/bench_scale.py +0 -0
  147. {seraplot-2.3.88 → seraplot-2.4.0}/bench_seraplot.py +0 -0
  148. {seraplot-2.3.88 → seraplot-2.4.0}/bench_sklearn.py +0 -0
  149. {seraplot-2.3.88 → seraplot-2.4.0}/bench_svc.py +0 -0
  150. {seraplot-2.3.88 → seraplot-2.4.0}/bench_svc2.py +0 -0
  151. {seraplot-2.3.88 → seraplot-2.4.0}/bench_test.py +0 -0
  152. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_gridsearch.py +0 -0
  153. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_gridsearch2.py +0 -0
  154. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_kmeans_heavy.ipynb +0 -0
  155. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_kmeans_openfoodfacts.ipynb +0 -0
  156. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_ml.ipynb +0 -0
  157. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_ml_openfoodfacts.ipynb +0 -0
  158. {seraplot-2.3.88 → seraplot-2.4.0}/benchmark_ml_out.ipynb +0 -0
  159. {seraplot-2.3.88 → seraplot-2.4.0}/build.log +0 -0
  160. {seraplot-2.3.88 → seraplot-2.4.0}/gen_bench_slides.py +0 -0
  161. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/1.png +0 -0
  162. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/2.png +0 -0
  163. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/3.png +0 -0
  164. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/4.png +0 -0
  165. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/5.png +0 -0
  166. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/6.png +0 -0
  167. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/7.png +0 -0
  168. {seraplot-2.3.88 → seraplot-2.4.0}/images/2d/8.png +0 -0
  169. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/1.png +0 -0
  170. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/2.png +0 -0
  171. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/3.png +0 -0
  172. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/4.png +0 -0
  173. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/5.png +0 -0
  174. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/6.png +0 -0
  175. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/7.png +0 -0
  176. {seraplot-2.3.88 → seraplot-2.4.0}/images/3d/8.png +0 -0
  177. {seraplot-2.3.88 → seraplot-2.4.0}/images/README.md +0 -0
  178. {seraplot-2.3.88 → seraplot-2.4.0}/images/benchmark/1.png +0 -0
  179. {seraplot-2.3.88 → seraplot-2.4.0}/images/benchmark/2.png +0 -0
  180. {seraplot-2.3.88 → seraplot-2.4.0}/images/benchmark/3.png +0 -0
  181. {seraplot-2.3.88 → seraplot-2.4.0}/images/logo.png +0 -0
  182. {seraplot-2.3.88 → seraplot-2.4.0}/kmeans_test.html +0 -0
  183. {seraplot-2.3.88 → seraplot-2.4.0}/publish_2378.log +0 -0
  184. {seraplot-2.3.88 → seraplot-2.4.0}/publish_log.txt +0 -0
  185. {seraplot-2.3.88 → seraplot-2.4.0}/python/seraplot/__init__.py +0 -0
  186. {seraplot-2.3.88 → seraplot-2.4.0}/python/seraplot/matplotlib.py +0 -0
  187. {seraplot-2.3.88 → seraplot-2.4.0}/python/seraplot/seraplot.cp311-win_amd64.pyd.old +0 -0
  188. {seraplot-2.3.88 → seraplot-2.4.0}/results_seraplot.json +0 -0
  189. {seraplot-2.3.88 → seraplot-2.4.0}/results_sklearn.json +0 -0
  190. {seraplot-2.3.88 → seraplot-2.4.0}/src/.github/workflows/mdbook.yml +0 -0
  191. {seraplot-2.3.88 → seraplot-2.4.0}/src/README.md +0 -0
  192. {seraplot-2.3.88 → seraplot-2.4.0}/src/asset/SVG World Map with labels.svg +0 -0
  193. {seraplot-2.3.88 → seraplot-2.4.0}/src/asset/logo.png +0 -0
  194. {seraplot-2.3.88 → seraplot-2.4.0}/src/asset/world.svg +0 -0
  195. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/builder_template.rs +0 -0
  196. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/chart_types.rs +0 -0
  197. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/commands/docs.rs +0 -0
  198. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/commands/mod.rs +0 -0
  199. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/commands/native.rs +0 -0
  200. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/commands/registry.rs +0 -0
  201. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/export_builder.rs +0 -0
  202. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/fast_export_c.rs +0 -0
  203. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/fast_render.rs +0 -0
  204. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/memory_pool.rs +0 -0
  205. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/mod.rs +0 -0
  206. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/unified_builder.rs +0 -0
  207. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/unified_config.rs +0 -0
  208. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/arena_alloc.rs +0 -0
  209. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/bitset.rs +0 -0
  210. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/compact_state.rs +0 -0
  211. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/data_processor.rs +0 -0
  212. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/image_processor.rs +0 -0
  213. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/lazy_builders.rs +0 -0
  214. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/memory_pool.rs +0 -0
  215. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/mod.rs +0 -0
  216. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/simd_ops.rs +0 -0
  217. {seraplot-2.3.88 → seraplot-2.4.0}/src/bindings/utils/state_export.rs +0 -0
  218. {seraplot-2.3.88 → seraplot-2.4.0}/src/core/builders.rs +0 -0
  219. {seraplot-2.3.88 → seraplot-2.4.0}/src/core/math.rs +0 -0
  220. {seraplot-2.3.88 → seraplot-2.4.0}/src/core/mod.rs +0 -0
  221. {seraplot-2.3.88 → seraplot-2.4.0}/src/data/conversion.rs +0 -0
  222. {seraplot-2.3.88 → seraplot-2.4.0}/src/data/index.rs +0 -0
  223. {seraplot-2.3.88 → seraplot-2.4.0}/src/data/loader.rs +0 -0
  224. {seraplot-2.3.88 → seraplot-2.4.0}/src/data/mod.rs +0 -0
  225. {seraplot-2.3.88 → seraplot-2.4.0}/src/data/processor.rs +0 -0
  226. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/api/index.md +0 -0
  227. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/2d/index.md +0 -0
  228. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/3d/index.md +0 -0
  229. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/charts/map/index.md +0 -0
  230. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/a11y.md +0 -0
  231. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/auto-display.md +0 -0
  232. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/background.md +0 -0
  233. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/csp.md +0 -0
  234. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/diff.md +0 -0
  235. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/downsample.md +0 -0
  236. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/drift.md +0 -0
  237. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/export.md +0 -0
  238. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/facet.md +0 -0
  239. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/hover.md +0 -0
  240. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/ml-persistence.md +0 -0
  241. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/palette.md +0 -0
  242. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/config/streaming.md +0 -0
  243. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/bayes-index.md +0 -0
  244. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/clustering-index.md +0 -0
  245. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/decomposition-index.md +0 -0
  246. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/evaluation-index.md +0 -0
  247. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/index.md +0 -0
  248. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/linear-index.md +0 -0
  249. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/neighbors-index.md +0 -0
  250. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/preprocessing-index.md +0 -0
  251. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/selection-index.md +0 -0
  252. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/svm-index.md +0 -0
  253. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/ml/tree-index.md +0 -0
  254. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/area.html +0 -0
  255. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bar.html +0 -0
  256. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bar3d.html +0 -0
  257. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bench-matplotlib.html +0 -0
  258. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bench-plotly.html +0 -0
  259. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bench-seraplot.html +0 -0
  260. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/boxplot.html +0 -0
  261. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bubble-map.html +0 -0
  262. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bubble.html +0 -0
  263. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bubble3d.html +0 -0
  264. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/bullet.html +0 -0
  265. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/candlestick.html +0 -0
  266. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/candlestick3d.html +0 -0
  267. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/choropleth.html +0 -0
  268. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/dbscan-class.html +0 -0
  269. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/dbscan.html +0 -0
  270. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/dbscan3d.html +0 -0
  271. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/donut.html +0 -0
  272. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/dumbbell.html +0 -0
  273. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/dumbbell3d.html +0 -0
  274. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/funnel.html +0 -0
  275. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/funnel3d.html +0 -0
  276. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/gauge.html +0 -0
  277. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/globe3d.html +0 -0
  278. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/grid.html +0 -0
  279. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/grouped-bar.html +0 -0
  280. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/hbar.html +0 -0
  281. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/heatmap.html +0 -0
  282. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/heatmap3d.html +0 -0
  283. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/histogram-overlay.html +0 -0
  284. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/histogram.html +0 -0
  285. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/kde.html +0 -0
  286. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/kde3d.html +0 -0
  287. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/line.html +0 -0
  288. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/line3d.html +0 -0
  289. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/lollipop.html +0 -0
  290. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/lollipop3d.html +0 -0
  291. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/multiline.html +0 -0
  292. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/parallel.html +0 -0
  293. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/pie.html +0 -0
  294. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/pie3d.html +0 -0
  295. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/radar.html +0 -0
  296. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/radar3d.html +0 -0
  297. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/ridgeline.html +0 -0
  298. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/ridgeline3d.html +0 -0
  299. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/scatter.html +0 -0
  300. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/scatter3d.html +0 -0
  301. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/slideshow.html +0 -0
  302. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/slope.html +0 -0
  303. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/stacked-bar.html +0 -0
  304. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/stacked-bar3d.html +0 -0
  305. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/sunburst.html +0 -0
  306. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/sunburst3d.html +0 -0
  307. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/treemap.html +0 -0
  308. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/violin.html +0 -0
  309. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/violin3d.html +0 -0
  310. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/waterfall.html +0 -0
  311. {seraplot-2.3.88 → seraplot-2.4.0}/src/docs/previews/wordcloud.html +0 -0
  312. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/assets.rs +0 -0
  313. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/fast_builders.rs +0 -0
  314. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/fast_exporter.rs +0 -0
  315. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/hover.rs +0 -0
  316. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/html_export.rs +0 -0
  317. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/html_template.rs +0 -0
  318. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/js_3d.rs +0 -0
  319. {seraplot-2.3.88 → seraplot-2.4.0}/src/html/mod.rs +0 -0
  320. {seraplot-2.3.88 → seraplot-2.4.0}/src/lib.rs +0 -0
  321. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/cache.rs +0 -0
  322. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/decomposition/mod.rs +0 -0
  323. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/decomposition/pca.rs +0 -0
  324. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linalg.rs +0 -0
  325. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/elastic_net.rs +0 -0
  326. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/lasso.rs +0 -0
  327. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/logistic.rs +0 -0
  328. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/mod.rs +0 -0
  329. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/ols.rs +0 -0
  330. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/ridge.rs +0 -0
  331. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/linear/sgd.rs +0 -0
  332. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/model_selection/cross_val.rs +0 -0
  333. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/naive_bayes/bernoulli.rs +0 -0
  334. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/naive_bayes/gaussian.rs +0 -0
  335. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/naive_bayes/mod.rs +0 -0
  336. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/naive_bayes/multinomial.rs +0 -0
  337. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/neighbors/knn.rs +0 -0
  338. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/neighbors/mod.rs +0 -0
  339. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/svm/mod.rs +0 -0
  340. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/svm/svm.rs +0 -0
  341. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/tree/adaboost.rs +0 -0
  342. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/tree/decision_tree.rs +0 -0
  343. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/tree/decision_tree_backup.rs +0 -0
  344. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/tree/gradient_boosting.rs +0 -0
  345. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/tree/mod.rs +0 -0
  346. {seraplot-2.3.88 → seraplot-2.4.0}/src/ml/tree/random_forest.rs +0 -0
  347. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/camera.rs +0 -0
  348. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/canvas.rs +0 -0
  349. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/containers_3d.rs +0 -0
  350. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/controller/chart_controller.rs +0 -0
  351. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/controller/mod.rs +0 -0
  352. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/controller/plot_3d_controller.rs +0 -0
  353. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/_3d/bar_3d.rs +0 -0
  354. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/_3d/line_3d.rs +0 -0
  355. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/_3d/mod.rs +0 -0
  356. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/_3d/plot_3d_types.rs +0 -0
  357. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/_3d/scatter_3d.rs +0 -0
  358. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/bar.rs +0 -0
  359. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/chart.rs +0 -0
  360. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/kmeans.rs +0 -0
  361. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/line.rs +0 -0
  362. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/mod.rs +0 -0
  363. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/scatter.rs +0 -0
  364. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/default/svg.rs +0 -0
  365. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/generic.rs +0 -0
  366. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/_3d/globe.rs +0 -0
  367. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/_3d/globe_html.rs +0 -0
  368. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/_3d/globe_types.rs +0 -0
  369. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/_3d/mod.rs +0 -0
  370. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/bubble_map.rs +0 -0
  371. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/chart.rs +0 -0
  372. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/choropleth.rs +0 -0
  373. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/mod.rs +0 -0
  374. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/svg_parser.rs +0 -0
  375. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/map/world_data.rs +0 -0
  376. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/mod.rs +0 -0
  377. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/projection.rs +0 -0
  378. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/renderers.rs +0 -0
  379. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/scale_renderer.rs +0 -0
  380. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/seaborn/_3d/mod.rs +0 -0
  381. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/seaborn/_3d/plot_3d_types.rs +0 -0
  382. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/seaborn/chart.rs +0 -0
  383. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/seaborn/mod.rs +0 -0
  384. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/candlestick3d.rs +0 -0
  385. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/dumbbell3d.rs +0 -0
  386. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/funnel3d.rs +0 -0
  387. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/heatmap3d.rs +0 -0
  388. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/kde3d.rs +0 -0
  389. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/lollipop3d.rs +0 -0
  390. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/mod.rs +0 -0
  391. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/pie3d.rs +0 -0
  392. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/plot_3d_types.rs +0 -0
  393. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/radar3d.rs +0 -0
  394. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/ridgeline3d.rs +0 -0
  395. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/stacked_bar3d.rs +0 -0
  396. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/sunburst3d.rs +0 -0
  397. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/_3d/violin3d.rs +0 -0
  398. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/area.rs +0 -0
  399. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/boxplot.rs +0 -0
  400. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/bubble.rs +0 -0
  401. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/bullet.rs +0 -0
  402. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/candlestick.rs +0 -0
  403. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/common.rs +0 -0
  404. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/dumbbell.rs +0 -0
  405. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/funnel.rs +0 -0
  406. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/gauge.rs +0 -0
  407. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/grouped_bar.rs +0 -0
  408. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/heatmap.rs +0 -0
  409. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/histogram.rs +0 -0
  410. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/kde.rs +0 -0
  411. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/lollipop.rs +0 -0
  412. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/mod.rs +0 -0
  413. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/multiline.rs +0 -0
  414. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/parallel.rs +0 -0
  415. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/pie.rs +0 -0
  416. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/radar.rs +0 -0
  417. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/ridgeline.rs +0 -0
  418. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/slope.rs +0 -0
  419. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/sunburst.rs +0 -0
  420. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/treemap.rs +0 -0
  421. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/violin.rs +0 -0
  422. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/waterfall.rs +0 -0
  423. {seraplot-2.3.88 → seraplot-2.4.0}/src/plot/statistical/wordcloud.rs +0 -0
  424. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/cache.rs +0 -0
  425. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/chart.rs +0 -0
  426. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/gui.rs +0 -0
  427. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/hybrid.rs +0 -0
  428. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/manager/button_manager.rs +0 -0
  429. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/manager/mod.rs +0 -0
  430. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/mod.rs +0 -0
  431. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/render/advanced_render.rs +0 -0
  432. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/render/fast_render_gui.rs +0 -0
  433. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/render/mod.rs +0 -0
  434. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/render/pipeline.rs +0 -0
  435. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/render/viewer_3d.rs +0 -0
  436. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/render/wiki_viewer.rs +0 -0
  437. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/utils/image_loader.rs +0 -0
  438. {seraplot-2.3.88 → seraplot-2.4.0}/src/viewer/utils/mod.rs +0 -0
  439. {seraplot-2.3.88 → seraplot-2.4.0}/src/wiki/api.rs +0 -0
  440. {seraplot-2.3.88 → seraplot-2.4.0}/src/wiki/extractor.rs +0 -0
  441. {seraplot-2.3.88 → seraplot-2.4.0}/src/wiki/language.rs +0 -0
  442. {seraplot-2.3.88 → seraplot-2.4.0}/src/wiki/macros.rs +0 -0
  443. {seraplot-2.3.88 → seraplot-2.4.0}/src/wiki/metadata.rs +0 -0
  444. {seraplot-2.3.88 → seraplot-2.4.0}/src/wiki/mod.rs +0 -0
  445. {seraplot-2.3.88 → seraplot-2.4.0}/test_accuracy.py +0 -0
  446. {seraplot-2.3.88 → seraplot-2.4.0}/test_universal_ml.js +0 -0
@@ -3471,7 +3471,7 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
3471
3471
 
3472
3472
  [[package]]
3473
3473
  name = "seraplot"
3474
- version = "2.3.88"
3474
+ version = "2.4.0"
3475
3475
  dependencies = [
3476
3476
  "base64 0.22.1",
3477
3477
  "criterion",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "seraplot"
3
- version = "2.3.88"
3
+ version = "2.4.0"
4
4
  edition = "2021"
5
5
  authors = ["feur25"]
6
6
  description = "Rust data visualization framework - The modern Plotly alternative"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seraplot
3
- Version: 2.3.88
3
+ Version: 2.4.0
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Win32 (MS Windows)
6
6
  Classifier: Intended Audience :: Developers
@@ -4,7 +4,7 @@ build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "seraplot"
7
- version = "2.3.88"
7
+ version = "2.4.0"
8
8
  description = "Rust data visualization framework - The modern Plotly alternative"
9
9
  readme = "README.md"
10
10
  readme-content-type = "text/markdown"
@@ -0,0 +1,4 @@
1
+ book/
2
+ target/
3
+ *.lock
4
+ .DS_Store
@@ -319,9 +319,12 @@ pub fn build_kmeans_chart(input: &str) -> String {
319
319
  pub fn build_scatter_chart(input: &str) -> String {
320
320
  let (title_s, a, o) = parse_all(input);
321
321
  let title = title_s.as_str();
322
- let x = a.x.unwrap_or_default();
323
- let y = a.y.unwrap_or_default();
324
- let lbls = a.labels.unwrap_or_default();
322
+ let raw_labels = a.labels.unwrap_or_default();
323
+ let x: Vec<f64> = a.x.unwrap_or_else(|| {
324
+ raw_labels.iter().enumerate().map(|(i, s)| s.parse::<f64>().unwrap_or(i as f64)).collect()
325
+ });
326
+ let y: Vec<f64> = a.y.unwrap_or_else(|| a.values.unwrap_or_default());
327
+ let lbls = raw_labels;
325
328
  let sz = a.sizes.unwrap_or_default();
326
329
  let cgs = o.color_groups.clone().unwrap_or_default();
327
330
  let hover = o.hj();
@@ -591,7 +594,8 @@ pub fn build_area_chart(input: &str) -> String {
591
594
  let (title_s, a, o) = parse_all(input);
592
595
  let title = title_s.as_str();
593
596
  let x_labels = a.x_labels.or(a.labels).unwrap_or_default();
594
- let series_flat = a.series.unwrap_or_default();
597
+ let values_fallback = a.values;
598
+ let series_flat = a.series.unwrap_or_else(|| values_fallback.map(|v| vec![v]).unwrap_or_default());
595
599
  use crate::plot::statistical::{AreaConfig, render_area_html};
596
600
  let hover = o.hj();
597
601
  let sn = o.series_names.clone().unwrap_or_default();
@@ -1450,6 +1454,372 @@ pub fn ml_kmeans_fit_predict(input: &str) -> String {
1450
1454
  serde_json::to_string(&labels).unwrap_or_default(), inertia)
1451
1455
  }
1452
1456
 
1457
+ pub fn ml_metric_score(input: &str) -> String {
1458
+ use crate::ml::metrics::*;
1459
+ #[derive(Deserialize, Default)]
1460
+ struct I {
1461
+ name: Option<String>,
1462
+ y_true: Option<Vec<f64>>,
1463
+ y_pred: Option<Vec<f64>>,
1464
+ y_score: Option<Vec<f64>>,
1465
+ labels: Option<Vec<i32>>,
1466
+ labels_true: Option<Vec<i32>>,
1467
+ labels_pred: Option<Vec<i32>>,
1468
+ x: Option<Vec<Vec<f64>>>,
1469
+ average: Option<String>,
1470
+ pos_label: Option<i32>,
1471
+ beta: Option<f64>,
1472
+ alpha: Option<f64>,
1473
+ eps: Option<f64>,
1474
+ }
1475
+ let i: I = serde_json::from_str(input).unwrap_or_default();
1476
+ let name = i.name.unwrap_or_default();
1477
+ let to_i32 = |v: &[f64]| v.iter().map(|x| *x as i32).collect::<Vec<i32>>();
1478
+ let yt_f = i.y_true.clone().unwrap_or_default();
1479
+ let yp_f = i.y_pred.clone().unwrap_or_default();
1480
+ let ys_f = i.y_score.clone().unwrap_or_default();
1481
+ let yt_i = to_i32(&yt_f);
1482
+ let yp_i = to_i32(&yp_f);
1483
+ let pos = i.pos_label.unwrap_or(1);
1484
+ let avg = match i.average.as_deref().unwrap_or("binary") {
1485
+ "macro" => Average::Macro,
1486
+ "weighted" => Average::Weighted,
1487
+ _ => Average::Binary(pos),
1488
+ };
1489
+ let value: f64 = match name.as_str() {
1490
+ "accuracy_score" => accuracy_score(&yt_i, &yp_i),
1491
+ "balanced_accuracy_score" => balanced_accuracy_score(&yt_i, &yp_i),
1492
+ "precision_score" => precision_score(&yt_i, &yp_i, avg),
1493
+ "recall_score" => recall_score(&yt_i, &yp_i, avg),
1494
+ "f1_score" => f1_score(&yt_i, &yp_i, avg),
1495
+ "fbeta_score" => fbeta_score(&yt_i, &yp_i, i.beta.unwrap_or(1.0), avg),
1496
+ "jaccard_score" => jaccard_score(&yt_i, &yp_i, pos),
1497
+ "matthews_corrcoef" => matthews_corrcoef(&yt_i, &yp_i),
1498
+ "cohen_kappa_score" => cohen_kappa_score(&yt_i, &yp_i),
1499
+ "hamming_loss" => hamming_loss(&yt_i, &yp_i),
1500
+ "zero_one_loss" => zero_one_loss(&yt_i, &yp_i),
1501
+ "binary_log_loss" => binary_log_loss(&yt_i, &yp_f, i.eps.unwrap_or(1e-15)),
1502
+ "brier_score_loss" => brier_score_loss(&yt_i, &yp_f),
1503
+ "hinge_loss" => hinge_loss(&yt_i, &yp_f),
1504
+ "roc_auc_score" => roc_auc_score(&yt_i, &ys_f, pos),
1505
+ "average_precision_score" => average_precision_score(&yt_i, &ys_f, pos),
1506
+ "mean_squared_error" => mean_squared_error(&yt_f, &yp_f),
1507
+ "root_mean_squared_error" => root_mean_squared_error(&yt_f, &yp_f),
1508
+ "mean_absolute_error" => mean_absolute_error(&yt_f, &yp_f),
1509
+ "median_absolute_error" => median_absolute_error(&yt_f, &yp_f),
1510
+ "r2_score" => r2_score(&yt_f, &yp_f),
1511
+ "explained_variance_score" => explained_variance_score(&yt_f, &yp_f),
1512
+ "max_error" => max_error(&yt_f, &yp_f),
1513
+ "mean_absolute_percentage_error" => mean_absolute_percentage_error(&yt_f, &yp_f),
1514
+ "mean_squared_log_error" => mean_squared_log_error(&yt_f, &yp_f),
1515
+ "root_mean_squared_log_error" => root_mean_squared_log_error(&yt_f, &yp_f),
1516
+ "mean_pinball_loss" => mean_pinball_loss(&yt_f, &yp_f, i.alpha.unwrap_or(0.5)),
1517
+ "d2_absolute_error_score" => d2_absolute_error_score(&yt_f, &yp_f),
1518
+ "silhouette_score" | "davies_bouldin_score" | "calinski_harabasz_score" => {
1519
+ let rows = i.x.clone().unwrap_or_default();
1520
+ let n = rows.len();
1521
+ let p = if n > 0 { rows[0].len() } else { 0 };
1522
+ let mut flat = Vec::with_capacity(n * p);
1523
+ for r in &rows { flat.extend_from_slice(&r[..p.min(r.len())]); if r.len() < p { flat.extend(std::iter::repeat(0.0).take(p - r.len())); } }
1524
+ let labs = i.labels.clone().unwrap_or_default();
1525
+ match name.as_str() {
1526
+ "silhouette_score" => silhouette_score(&flat, &labs, n, p),
1527
+ "davies_bouldin_score" => davies_bouldin_score(&flat, &labs, n, p),
1528
+ _ => calinski_harabasz_score(&flat, &labs, n, p),
1529
+ }
1530
+ }
1531
+ "adjusted_rand_score" | "normalized_mutual_info_score" | "fowlkes_mallows_score"
1532
+ | "homogeneity_score" | "completeness_score" | "v_measure_score" => {
1533
+ let lt = i.labels_true.clone().unwrap_or_default();
1534
+ let lp = i.labels_pred.clone().unwrap_or_default();
1535
+ match name.as_str() {
1536
+ "adjusted_rand_score" => adjusted_rand_score(&lt, &lp),
1537
+ "normalized_mutual_info_score" => normalized_mutual_info_score(&lt, &lp),
1538
+ "fowlkes_mallows_score" => fowlkes_mallows_score(&lt, &lp),
1539
+ "homogeneity_score" => homogeneity_score(&lt, &lp),
1540
+ "completeness_score" => completeness_score(&lt, &lp),
1541
+ _ => v_measure_score(&lt, &lp),
1542
+ }
1543
+ }
1544
+ _ => f64::NAN,
1545
+ };
1546
+ if value.is_nan() { format!("{{\"error\":\"unknown metric: {}\"}}", name) }
1547
+ else { format!("{{\"value\":{}}}", value) }
1548
+ }
1549
+
1550
+ pub fn ml_metric_curve(input: &str) -> String {
1551
+ use crate::ml::metrics::*;
1552
+ #[derive(Deserialize, Default)]
1553
+ struct I {
1554
+ name: Option<String>,
1555
+ y_true: Option<Vec<f64>>,
1556
+ y_score: Option<Vec<f64>>,
1557
+ pos_label: Option<i32>,
1558
+ }
1559
+ let i: I = serde_json::from_str(input).unwrap_or_default();
1560
+ let yt: Vec<i32> = i.y_true.unwrap_or_default().iter().map(|v| *v as i32).collect();
1561
+ let ys = i.y_score.unwrap_or_default();
1562
+ let pos = i.pos_label.unwrap_or(1);
1563
+ match i.name.as_deref().unwrap_or("") {
1564
+ "roc_curve" => {
1565
+ let (a, b, c) = roc_curve(&yt, &ys, pos);
1566
+ format!("{{\"fpr\":{},\"tpr\":{},\"thresholds\":{}}}",
1567
+ serde_json::to_string(&a).unwrap_or_default(),
1568
+ serde_json::to_string(&b).unwrap_or_default(),
1569
+ serde_json::to_string(&c).unwrap_or_default())
1570
+ }
1571
+ "precision_recall_curve" => {
1572
+ let (a, b, c) = precision_recall_curve(&yt, &ys, pos);
1573
+ format!("{{\"precision\":{},\"recall\":{},\"thresholds\":{}}}",
1574
+ serde_json::to_string(&a).unwrap_or_default(),
1575
+ serde_json::to_string(&b).unwrap_or_default(),
1576
+ serde_json::to_string(&c).unwrap_or_default())
1577
+ }
1578
+ n => format!("{{\"error\":\"unknown curve: {}\"}}", n),
1579
+ }
1580
+ }
1581
+
1582
+ pub fn ml_fit_transform(input: &str) -> String {
1583
+ use crate::ml::preprocessing::transformers::*;
1584
+ use crate::ml::preprocessing::scalers::*;
1585
+ #[derive(Deserialize, Default)]
1586
+ struct I {
1587
+ name: Option<String>,
1588
+ data: Option<Vec<Vec<f64>>>,
1589
+ strategy: Option<String>,
1590
+ fill_value: Option<f64>,
1591
+ degree: Option<usize>,
1592
+ interaction_only: Option<bool>,
1593
+ include_bias: Option<bool>,
1594
+ n_bins: Option<usize>,
1595
+ method: Option<String>,
1596
+ n_quantiles: Option<usize>,
1597
+ output_distribution: Option<String>,
1598
+ }
1599
+ let i: I = serde_json::from_str(input).unwrap_or_default();
1600
+ let rows = i.data.unwrap_or_default();
1601
+ let n = rows.len();
1602
+ let p = if n > 0 { rows[0].len() } else { 0 };
1603
+ let mut flat = Vec::with_capacity(n * p);
1604
+ for r in &rows {
1605
+ flat.extend_from_slice(&r[..p.min(r.len())]);
1606
+ if r.len() < p { flat.extend(std::iter::repeat(0.0).take(p - r.len())); }
1607
+ }
1608
+ let (out, cols, extra): (Vec<f64>, usize, String) = match i.name.as_deref().unwrap_or("") {
1609
+ "SimpleImputer" => {
1610
+ let mut t = SimpleImputer::new(i.strategy.as_deref().unwrap_or("mean"), i.fill_value.unwrap_or(0.0));
1611
+ t.fit(&flat, n, p);
1612
+ let o = t.transform(&flat, n, p);
1613
+ (o, p, format!(",\"statistics\":{}", serde_json::to_string(&t.statistics).unwrap_or_default()))
1614
+ }
1615
+ "PolynomialFeatures" => {
1616
+ let mut t = PolynomialFeatures::new(i.degree.unwrap_or(2), i.interaction_only.unwrap_or(false), i.include_bias.unwrap_or(true));
1617
+ t.fit(&flat, n, p);
1618
+ let o = t.transform(&flat, n, p);
1619
+ let nf = t.n_output_features();
1620
+ (o, nf, format!(",\"n_features_out\":{}", nf))
1621
+ }
1622
+ "KBinsDiscretizer" => {
1623
+ let mut t = KBinsDiscretizer::new(i.n_bins.unwrap_or(5), i.strategy.as_deref().unwrap_or("quantile"));
1624
+ t.fit(&flat, n, p);
1625
+ let o = t.transform(&flat, n, p);
1626
+ (o, p, String::new())
1627
+ }
1628
+ "PowerTransformer" => {
1629
+ let mut t = PowerTransformer::new(i.method.as_deref().unwrap_or("yeo-johnson"));
1630
+ t.fit(&flat, n, p);
1631
+ let o = t.transform(&flat, n, p);
1632
+ (o, p, format!(",\"lambdas\":{}", serde_json::to_string(&t.lambdas).unwrap_or_default()))
1633
+ }
1634
+ "QuantileTransformer" => {
1635
+ let mut t = QuantileTransformer::new(i.n_quantiles.unwrap_or(1000), i.output_distribution.as_deref().unwrap_or("uniform"));
1636
+ t.fit(&flat, n, p);
1637
+ let o = t.transform(&flat, n, p);
1638
+ (o, p, String::new())
1639
+ }
1640
+ "StandardScaler" => {
1641
+ let mut t = StandardScaler::new(true, true);
1642
+ t.fit(&flat, n, p);
1643
+ let o = t.transform(&flat, n, p);
1644
+ (o, p, String::new())
1645
+ }
1646
+ "MinMaxScaler" => {
1647
+ let mut t = MinMaxScaler::new((0.0, 1.0));
1648
+ t.fit(&flat, n, p);
1649
+ let o = t.transform(&flat, n, p);
1650
+ (o, p, String::new())
1651
+ }
1652
+ "RobustScaler" => {
1653
+ let mut t = RobustScaler::new(true, true);
1654
+ t.fit(&flat, n, p);
1655
+ let o = t.transform(&flat, n, p);
1656
+ (o, p, String::new())
1657
+ }
1658
+ "MaxAbsScaler" => {
1659
+ let mut t = MaxAbsScaler::new();
1660
+ t.fit(&flat, n, p);
1661
+ let o = t.transform(&flat, n, p);
1662
+ (o, p, String::new())
1663
+ }
1664
+ n_ => return format!("{{\"error\":\"unknown transformer: {}\"}}", n_),
1665
+ };
1666
+ let mut data: Vec<Vec<f64>> = Vec::with_capacity(n);
1667
+ for r in 0..n {
1668
+ data.push(out[r * cols..(r + 1) * cols].to_vec());
1669
+ }
1670
+ format!("{{\"data\":{},\"n\":{},\"cols\":{}{}}}",
1671
+ serde_json::to_string(&data).unwrap_or_default(), n, cols, extra)
1672
+ }
1673
+
1674
+ pub fn ml_kfold_split(input: &str) -> String {
1675
+ use crate::ml::model_selection::split::*;
1676
+ #[derive(Deserialize, Default)]
1677
+ struct I {
1678
+ kind: Option<String>,
1679
+ n: Option<usize>,
1680
+ k: Option<usize>,
1681
+ seed: Option<u64>,
1682
+ y: Option<Vec<i32>>,
1683
+ groups: Option<Vec<i32>>,
1684
+ }
1685
+ let i: I = serde_json::from_str(input).unwrap_or_default();
1686
+ let kind = i.kind.unwrap_or_else(|| "kfold".to_string());
1687
+ let k = i.k.unwrap_or(5);
1688
+ let seed = i.seed.unwrap_or(0);
1689
+ let folds = match kind.as_str() {
1690
+ "stratified" => stratified_kfold_indices(&i.y.unwrap_or_default(), k, seed),
1691
+ "group" => group_kfold_indices(&i.groups.unwrap_or_default(), k),
1692
+ _ => kfold_indices(i.n.unwrap_or(0), k, seed),
1693
+ };
1694
+ let payload: Vec<serde_json::Value> = folds.into_iter().map(|(tr, te)| {
1695
+ serde_json::json!({"train": tr, "test": te})
1696
+ }).collect();
1697
+ serde_json::to_string(&payload).unwrap_or_else(|_| "[]".to_string())
1698
+ }
1699
+
1700
+ pub fn ml_isolation_forest(input: &str) -> String {
1701
+ use crate::ml::anomaly::isolation_forest::IsolationForest;
1702
+ #[derive(Deserialize, Default)]
1703
+ struct I {
1704
+ data: Option<Vec<Vec<f64>>>,
1705
+ x_test: Option<Vec<Vec<f64>>>,
1706
+ n_estimators: Option<usize>,
1707
+ max_samples: Option<usize>,
1708
+ contamination: Option<f64>,
1709
+ seed: Option<u64>,
1710
+ }
1711
+ let i: I = serde_json::from_str(input).unwrap_or_default();
1712
+ let rows = i.data.unwrap_or_default();
1713
+ let n = rows.len();
1714
+ if n == 0 { return "{\"labels\":[],\"scores\":[],\"threshold\":0.0}".to_string(); }
1715
+ let p = rows[0].len();
1716
+ let mut flat = Vec::with_capacity(n * p);
1717
+ for r in &rows { flat.extend_from_slice(&r[..p.min(r.len())]); if r.len() < p { flat.extend(std::iter::repeat(0.0).take(p - r.len())); } }
1718
+ let mut model = IsolationForest::new(
1719
+ i.n_estimators.unwrap_or(100),
1720
+ i.max_samples.unwrap_or(256),
1721
+ i.contamination.unwrap_or(0.1),
1722
+ i.seed.unwrap_or(42),
1723
+ );
1724
+ model.fit(&flat, n, p);
1725
+ let labels = model.predict(&flat, n, p);
1726
+ let scores = model.score_samples(&flat, n, p);
1727
+ let test_payload = if let Some(rows_t) = i.x_test {
1728
+ let nt = rows_t.len();
1729
+ if nt == 0 {
1730
+ String::new()
1731
+ } else {
1732
+ let mut flat_t = Vec::with_capacity(nt * p);
1733
+ for r in &rows_t { flat_t.extend_from_slice(&r[..p.min(r.len())]); if r.len() < p { flat_t.extend(std::iter::repeat(0.0).take(p - r.len())); } }
1734
+ let lt = model.predict(&flat_t, nt, p);
1735
+ let st = model.score_samples(&flat_t, nt, p);
1736
+ format!(",\"test_labels\":{},\"test_scores\":{}",
1737
+ serde_json::to_string(&lt).unwrap_or_default(),
1738
+ serde_json::to_string(&st).unwrap_or_default())
1739
+ }
1740
+ } else { String::new() };
1741
+ format!("{{\"labels\":{},\"scores\":{},\"threshold\":{}{}}}",
1742
+ serde_json::to_string(&labels).unwrap_or_default(),
1743
+ serde_json::to_string(&scores).unwrap_or_default(),
1744
+ model.threshold_,
1745
+ test_payload)
1746
+ }
1747
+
1748
+ pub fn ml_permutation_importance(input: &str) -> String {
1749
+ use crate::ml::model_selection::permutation::*;
1750
+ #[derive(Deserialize, Default)]
1751
+ struct I {
1752
+ data: Option<Vec<Vec<f64>>>,
1753
+ y: Option<Vec<f64>>,
1754
+ baseline_pred: Option<Vec<f64>>,
1755
+ perm_preds: Option<Vec<Vec<Vec<f64>>>>,
1756
+ task: Option<String>,
1757
+ n_repeats: Option<usize>,
1758
+ seed: Option<u64>,
1759
+ }
1760
+ let i: I = serde_json::from_str(input).unwrap_or_default();
1761
+ let rows = i.data.unwrap_or_default();
1762
+ let n = rows.len();
1763
+ if n == 0 { return "{\"importances_mean\":[],\"importances_std\":[]}".to_string(); }
1764
+ let p = rows[0].len();
1765
+ let mut flat = Vec::with_capacity(n * p);
1766
+ for r in &rows { flat.extend_from_slice(&r[..p.min(r.len())]); if r.len() < p { flat.extend(std::iter::repeat(0.0).take(p - r.len())); } }
1767
+ let yf = i.y.clone().unwrap_or_default();
1768
+ let task = i.task.unwrap_or_else(|| "regression".to_string());
1769
+ let n_repeats = i.n_repeats.unwrap_or(5);
1770
+ let seed = i.seed.unwrap_or(0);
1771
+ let perm_preds = i.perm_preds.unwrap_or_default();
1772
+ let baseline_pred = i.baseline_pred.unwrap_or_default();
1773
+ let _ = (n_repeats, seed, flat, n);
1774
+ if perm_preds.is_empty() || baseline_pred.is_empty() {
1775
+ return "{\"importances_mean\":[],\"importances_std\":[],\"error\":\"baseline_pred and perm_preds[p][n_repeats][n] are required\"}".to_string();
1776
+ }
1777
+ if task == "classification" {
1778
+ let yi: Vec<i32> = yf.iter().map(|v| *v as i32).collect();
1779
+ let baseline_i: Vec<i32> = baseline_pred.iter().map(|v| *v as i32).collect();
1780
+ let baseline = crate::ml::metrics::classification::accuracy_score(&yi, &baseline_i);
1781
+ let mut means = vec![0.0; p];
1782
+ let mut stds = vec![0.0; p];
1783
+ for j in 0..p.min(perm_preds.len()) {
1784
+ let reps = &perm_preds[j];
1785
+ let mut diffs = Vec::with_capacity(reps.len());
1786
+ for rep in reps {
1787
+ let pi: Vec<i32> = rep.iter().map(|v| *v as i32).collect();
1788
+ let s = crate::ml::metrics::classification::accuracy_score(&yi, &pi);
1789
+ diffs.push(baseline - s);
1790
+ }
1791
+ let m = diffs.iter().sum::<f64>() / diffs.len().max(1) as f64;
1792
+ let v = diffs.iter().map(|x| (x - m).powi(2)).sum::<f64>() / diffs.len().max(1) as f64;
1793
+ means[j] = m;
1794
+ stds[j] = v.sqrt();
1795
+ }
1796
+ format!("{{\"importances_mean\":{},\"importances_std\":{},\"baseline\":{}}}",
1797
+ serde_json::to_string(&means).unwrap_or_default(),
1798
+ serde_json::to_string(&stds).unwrap_or_default(),
1799
+ baseline)
1800
+ } else {
1801
+ let baseline = crate::ml::metrics::regression::r2_score(&yf, &baseline_pred);
1802
+ let mut means = vec![0.0; p];
1803
+ let mut stds = vec![0.0; p];
1804
+ for j in 0..p.min(perm_preds.len()) {
1805
+ let reps = &perm_preds[j];
1806
+ let mut diffs = Vec::with_capacity(reps.len());
1807
+ for rep in reps {
1808
+ let s = crate::ml::metrics::regression::r2_score(&yf, rep);
1809
+ diffs.push(baseline - s);
1810
+ }
1811
+ let m = diffs.iter().sum::<f64>() / diffs.len().max(1) as f64;
1812
+ let v = diffs.iter().map(|x| (x - m).powi(2)).sum::<f64>() / diffs.len().max(1) as f64;
1813
+ means[j] = m;
1814
+ stds[j] = v.sqrt();
1815
+ }
1816
+ format!("{{\"importances_mean\":{},\"importances_std\":{},\"baseline\":{}}}",
1817
+ serde_json::to_string(&means).unwrap_or_default(),
1818
+ serde_json::to_string(&stds).unwrap_or_default(),
1819
+ baseline)
1820
+ }
1821
+ }
1822
+
1453
1823
  pub fn set_global_background(input: &str) -> String {
1454
1824
  let color = input.trim().trim_matches('"');
1455
1825
  set_global_bg(if color.is_empty() { None } else { Some(color.to_string()) });