seraplot 2.3.62__tar.gz → 2.3.68__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 (603) hide show
  1. {seraplot-2.3.62 → seraplot-2.3.68}/Cargo.lock +11 -1
  2. {seraplot-2.3.62 → seraplot-2.3.68}/Cargo.toml +2 -10
  3. {seraplot-2.3.62 → seraplot-2.3.68}/PKG-INFO +1 -1
  4. seraplot-2.3.68/bench_issues.json +13 -0
  5. {seraplot-2.3.62 → seraplot-2.3.68}/bench_seraplot.py +71 -16
  6. {seraplot-2.3.62 → seraplot-2.3.68}/bench_sklearn.py +2 -1
  7. seraplot-2.3.68/benchmark_gridsearch.py +201 -0
  8. seraplot-2.3.68/benchmark_gridsearch2.py +138 -0
  9. {seraplot-2.3.62 → seraplot-2.3.68}/pyproject.toml +2 -2
  10. seraplot-2.3.68/python/seraplot/__init__.py +29 -0
  11. seraplot-2.3.68/python/seraplot/seraplot.cp311-win_amd64.pyd.old +0 -0
  12. {seraplot-2.3.62 → seraplot-2.3.68}/results_seraplot.json +33 -33
  13. {seraplot-2.3.62 → seraplot-2.3.68}/results_sklearn.json +34 -34
  14. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/python/python.rs +88 -0
  15. seraplot-2.3.68/src/bindings/python/python_ml.rs +2180 -0
  16. seraplot-2.3.68/src/book/.nojekyll +1 -0
  17. seraplot-2.3.68/src/book/404.html +232 -0
  18. seraplot-2.3.68/src/book/api/index.html +484 -0
  19. seraplot-2.3.68/src/book/ayu-highlight-3fdfc3ac.css +77 -0
  20. seraplot-2.3.68/src/book/book-a0b12cfe.js +843 -0
  21. seraplot-2.3.68/src/book/charts/2d/area.html +447 -0
  22. seraplot-2.3.68/src/book/charts/2d/bar.html +527 -0
  23. seraplot-2.3.68/src/book/charts/2d/boxplot.html +467 -0
  24. seraplot-2.3.68/src/book/charts/2d/bubble.html +463 -0
  25. seraplot-2.3.68/src/book/charts/2d/bullet.html +424 -0
  26. seraplot-2.3.68/src/book/charts/2d/candlestick.html +442 -0
  27. seraplot-2.3.68/src/book/charts/2d/donut.html +423 -0
  28. seraplot-2.3.68/src/book/charts/2d/dumbbell.html +428 -0
  29. seraplot-2.3.68/src/book/charts/2d/funnel.html +414 -0
  30. seraplot-2.3.68/src/book/charts/2d/gauge.html +423 -0
  31. seraplot-2.3.68/src/book/charts/2d/grid.html +436 -0
  32. seraplot-2.3.68/src/book/charts/2d/grouped-bar.html +505 -0
  33. seraplot-2.3.68/src/book/charts/2d/hbar.html +444 -0
  34. seraplot-2.3.68/src/book/charts/2d/heatmap.html +453 -0
  35. seraplot-2.3.68/src/book/charts/2d/histogram-overlay.html +464 -0
  36. seraplot-2.3.68/src/book/charts/2d/histogram.html +446 -0
  37. seraplot-2.3.68/src/book/charts/2d/index.html +337 -0
  38. seraplot-2.3.68/src/book/charts/2d/kde.html +443 -0
  39. seraplot-2.3.68/src/book/charts/2d/line.html +482 -0
  40. seraplot-2.3.68/src/book/charts/2d/lollipop.html +446 -0
  41. seraplot-2.3.68/src/book/charts/2d/multiline.html +456 -0
  42. seraplot-2.3.68/src/book/charts/2d/parallel.html +445 -0
  43. seraplot-2.3.68/src/book/charts/2d/pie.html +420 -0
  44. seraplot-2.3.68/src/book/charts/2d/radar.html +418 -0
  45. seraplot-2.3.68/src/book/charts/2d/ridgeline.html +447 -0
  46. seraplot-2.3.68/src/book/charts/2d/scatter.html +493 -0
  47. seraplot-2.3.68/src/book/charts/2d/slideshow.html +427 -0
  48. seraplot-2.3.68/src/book/charts/2d/slope.html +434 -0
  49. seraplot-2.3.68/src/book/charts/2d/stacked-bar.html +451 -0
  50. seraplot-2.3.68/src/book/charts/2d/sunburst.html +428 -0
  51. seraplot-2.3.68/src/book/charts/2d/treemap.html +427 -0
  52. seraplot-2.3.68/src/book/charts/2d/violin.html +454 -0
  53. seraplot-2.3.68/src/book/charts/2d/waterfall.html +432 -0
  54. seraplot-2.3.68/src/book/charts/2d/wordcloud.html +418 -0
  55. seraplot-2.3.68/src/book/charts/3d/bar3d.html +432 -0
  56. seraplot-2.3.68/src/book/charts/3d/bubble3d.html +442 -0
  57. seraplot-2.3.68/src/book/charts/3d/candlestick3d.html +430 -0
  58. seraplot-2.3.68/src/book/charts/3d/dumbbell3d.html +418 -0
  59. seraplot-2.3.68/src/book/charts/3d/funnel3d.html +402 -0
  60. seraplot-2.3.68/src/book/charts/3d/globe3d.html +431 -0
  61. seraplot-2.3.68/src/book/charts/3d/heatmap3d.html +433 -0
  62. seraplot-2.3.68/src/book/charts/3d/index.html +306 -0
  63. seraplot-2.3.68/src/book/charts/3d/kde3d.html +442 -0
  64. seraplot-2.3.68/src/book/charts/3d/line3d.html +455 -0
  65. seraplot-2.3.68/src/book/charts/3d/lollipop3d.html +414 -0
  66. seraplot-2.3.68/src/book/charts/3d/pie3d.html +409 -0
  67. seraplot-2.3.68/src/book/charts/3d/radar3d.html +416 -0
  68. seraplot-2.3.68/src/book/charts/3d/ridgeline3d.html +425 -0
  69. seraplot-2.3.68/src/book/charts/3d/scatter3d.html +475 -0
  70. seraplot-2.3.68/src/book/charts/3d/stacked-bar3d.html +441 -0
  71. seraplot-2.3.68/src/book/charts/3d/sunburst3d.html +421 -0
  72. seraplot-2.3.68/src/book/charts/3d/violin3d.html +423 -0
  73. seraplot-2.3.68/src/book/charts/map/bubble-map.html +449 -0
  74. seraplot-2.3.68/src/book/charts/map/choropleth.html +418 -0
  75. seraplot-2.3.68/src/book/charts/map/index.html +276 -0
  76. seraplot-2.3.68/src/book/clipboard-1626706a.min.js +7 -0
  77. seraplot-2.3.68/src/book/config/auto-display.html +328 -0
  78. seraplot-2.3.68/src/book/config/background.html +437 -0
  79. seraplot-2.3.68/src/book/config/hover.html +363 -0
  80. seraplot-2.3.68/src/book/config/palette.html +439 -0
  81. seraplot-2.3.68/src/book/css/chrome-ae938929.css +756 -0
  82. seraplot-2.3.68/src/book/css/general-2459343d.css +408 -0
  83. seraplot-2.3.68/src/book/css/print-9e4910d8.css +50 -0
  84. seraplot-2.3.68/src/book/css/variables-8adf115d.css +383 -0
  85. seraplot-2.3.68/src/book/docs/theme/custom-2c6d06e4.css +82 -0
  86. seraplot-2.3.68/src/book/docs/theme/lang-switcher-7ca53ac0.js +141 -0
  87. seraplot-2.3.68/src/book/elasticlunr-ef4e11c1.min.js +10 -0
  88. seraplot-2.3.68/src/book/favicon-8114d1fc.png +0 -0
  89. seraplot-2.3.68/src/book/favicon-de23e50b.svg +22 -0
  90. seraplot-2.3.68/src/book/fonts/OPEN-SANS-LICENSE.txt +202 -0
  91. seraplot-2.3.68/src/book/fonts/SOURCE-CODE-PRO-LICENSE.txt +93 -0
  92. seraplot-2.3.68/src/book/fonts/fonts-9644e21d.css +100 -0
  93. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-300-7736aa35.woff2 +0 -0
  94. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-300italic-2c7b95c0.woff2 +0 -0
  95. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-600-486c6759.woff2 +0 -0
  96. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-600italic-1a3e8659.woff2 +0 -0
  97. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-700-c22fe8c7.woff2 +0 -0
  98. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-700italic-238ae959.woff2 +0 -0
  99. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-800-3d2c812a.woff2 +0 -0
  100. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-800italic-ba1521ec.woff2 +0 -0
  101. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-italic-6c9463f7.woff2 +0 -0
  102. seraplot-2.3.68/src/book/fonts/open-sans-v17-all-charsets-regular-2e3b1d34.woff2 +0 -0
  103. seraplot-2.3.68/src/book/fonts/source-code-pro-v11-all-charsets-500-2bdd9410.woff2 +0 -0
  104. seraplot-2.3.68/src/book/getting-started/chart-methods.html +709 -0
  105. seraplot-2.3.68/src/book/getting-started/chart-object.html +398 -0
  106. seraplot-2.3.68/src/book/getting-started/installation.html +415 -0
  107. seraplot-2.3.68/src/book/getting-started/quickstart.html +556 -0
  108. seraplot-2.3.68/src/book/highlight-493f70e1.css +83 -0
  109. seraplot-2.3.68/src/book/highlight-abc7f01d.js +54 -0
  110. seraplot-2.3.68/src/book/index.html +1039 -0
  111. seraplot-2.3.68/src/book/introduction.html +1039 -0
  112. seraplot-2.3.68/src/book/mark-09e88c2c.min.js +7 -0
  113. seraplot-2.3.68/src/book/ml/adaboost.html +500 -0
  114. seraplot-2.3.68/src/book/ml/dbscan-class.html +443 -0
  115. seraplot-2.3.68/src/book/ml/dbscan.html +446 -0
  116. seraplot-2.3.68/src/book/ml/dbscan3d.html +405 -0
  117. seraplot-2.3.68/src/book/ml/decision-tree.html +542 -0
  118. seraplot-2.3.68/src/book/ml/decomposition.html +689 -0
  119. seraplot-2.3.68/src/book/ml/elastic-net.html +414 -0
  120. seraplot-2.3.68/src/book/ml/gradient-boosting.html +538 -0
  121. seraplot-2.3.68/src/book/ml/index.html +475 -0
  122. seraplot-2.3.68/src/book/ml/kmeans-class.html +466 -0
  123. seraplot-2.3.68/src/book/ml/kmeans.html +415 -0
  124. seraplot-2.3.68/src/book/ml/knn.html +523 -0
  125. seraplot-2.3.68/src/book/ml/lasso.html +382 -0
  126. seraplot-2.3.68/src/book/ml/linear-regression.html +372 -0
  127. seraplot-2.3.68/src/book/ml/logistic-regression.html +394 -0
  128. seraplot-2.3.68/src/book/ml/metrics.html +505 -0
  129. seraplot-2.3.68/src/book/ml/naive-bayes.html +622 -0
  130. seraplot-2.3.68/src/book/ml/preprocessing.html +821 -0
  131. seraplot-2.3.68/src/book/ml/random-forest.html +539 -0
  132. seraplot-2.3.68/src/book/ml/ridge.html +408 -0
  133. seraplot-2.3.68/src/book/ml/sgd.html +790 -0
  134. seraplot-2.3.68/src/book/ml/svm.html +727 -0
  135. seraplot-2.3.68/src/book/ml/train-test-split.html +545 -0
  136. seraplot-2.3.68/src/book/print.html +19815 -0
  137. seraplot-2.3.68/src/book/searcher-c2a407aa.js +555 -0
  138. seraplot-2.3.68/src/book/searchindex-f4e084c2.js +1 -0
  139. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/theme/custom.css +30 -0
  140. seraplot-2.3.68/src/book/theme/lang-switcher.js +141 -0
  141. seraplot-2.3.68/src/book/toc-eef86151.js +454 -0
  142. seraplot-2.3.68/src/book/toc.html +32 -0
  143. seraplot-2.3.68/src/book/tomorrow-night-4c0ae647.css +104 -0
  144. {seraplot-2.3.62 → seraplot-2.3.68}/src/book.toml +1 -0
  145. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/SUMMARY.md +3 -0
  146. seraplot-2.3.68/src/docs/ml/adaboost.md +292 -0
  147. seraplot-2.3.68/src/docs/ml/decision-tree.md +340 -0
  148. seraplot-2.3.68/src/docs/ml/decomposition.md +516 -0
  149. seraplot-2.3.68/src/docs/ml/elastic-net.md +175 -0
  150. seraplot-2.3.68/src/docs/ml/gradient-boosting.md +334 -0
  151. seraplot-2.3.68/src/docs/ml/grid-search.md +491 -0
  152. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/index.md +18 -2
  153. seraplot-2.3.68/src/docs/ml/knn.md +318 -0
  154. seraplot-2.3.68/src/docs/ml/lasso.md +159 -0
  155. seraplot-2.3.68/src/docs/ml/linear-regression.md +151 -0
  156. seraplot-2.3.68/src/docs/ml/logistic-regression.md +171 -0
  157. seraplot-2.3.68/src/docs/ml/metrics.md +352 -0
  158. seraplot-2.3.68/src/docs/ml/naive-bayes.md +401 -0
  159. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/preprocessing.md +281 -0
  160. seraplot-2.3.68/src/docs/ml/random-forest.md +331 -0
  161. seraplot-2.3.68/src/docs/ml/ridge.md +177 -0
  162. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/sgd.md +229 -0
  163. seraplot-2.3.68/src/docs/ml/svm.md +525 -0
  164. seraplot-2.3.68/src/docs/ml/train-test-split.md +339 -0
  165. seraplot-2.3.68/src/docs/previews/area.html +220 -0
  166. seraplot-2.3.68/src/docs/previews/bar.html +220 -0
  167. seraplot-2.3.68/src/docs/previews/bar3d.html +1102 -0
  168. seraplot-2.3.68/src/docs/previews/bench-matplotlib.html +1 -0
  169. seraplot-2.3.68/src/docs/previews/bench-plotly.html +1 -0
  170. seraplot-2.3.68/src/docs/previews/bench-seraplot.html +1 -0
  171. seraplot-2.3.68/src/docs/previews/boxplot.html +220 -0
  172. seraplot-2.3.68/src/docs/previews/bubble-map.html +220 -0
  173. seraplot-2.3.68/src/docs/previews/bubble.html +220 -0
  174. seraplot-2.3.68/src/docs/previews/bubble3d.html +1102 -0
  175. seraplot-2.3.68/src/docs/previews/bullet.html +220 -0
  176. seraplot-2.3.68/src/docs/previews/candlestick.html +220 -0
  177. seraplot-2.3.68/src/docs/previews/candlestick3d.html +1102 -0
  178. seraplot-2.3.68/src/docs/previews/choropleth.html +220 -0
  179. seraplot-2.3.68/src/docs/previews/dbscan-class.html +220 -0
  180. seraplot-2.3.68/src/docs/previews/dbscan.html +220 -0
  181. seraplot-2.3.68/src/docs/previews/dbscan3d.html +1102 -0
  182. seraplot-2.3.68/src/docs/previews/donut.html +220 -0
  183. seraplot-2.3.68/src/docs/previews/dumbbell.html +220 -0
  184. seraplot-2.3.68/src/docs/previews/dumbbell3d.html +1102 -0
  185. seraplot-2.3.68/src/docs/previews/funnel.html +220 -0
  186. seraplot-2.3.68/src/docs/previews/funnel3d.html +1102 -0
  187. seraplot-2.3.68/src/docs/previews/gauge.html +220 -0
  188. seraplot-2.3.68/src/docs/previews/globe3d.html +1103 -0
  189. seraplot-2.3.68/src/docs/previews/grid.html +877 -0
  190. seraplot-2.3.68/src/docs/previews/grouped-bar.html +220 -0
  191. seraplot-2.3.68/src/docs/previews/hbar.html +220 -0
  192. seraplot-2.3.68/src/docs/previews/heatmap.html +220 -0
  193. seraplot-2.3.68/src/docs/previews/heatmap3d.html +1102 -0
  194. seraplot-2.3.68/src/docs/previews/histogram-overlay.html +220 -0
  195. seraplot-2.3.68/src/docs/previews/histogram.html +220 -0
  196. seraplot-2.3.68/src/docs/previews/kde.html +220 -0
  197. seraplot-2.3.68/src/docs/previews/kde3d.html +1102 -0
  198. seraplot-2.3.68/src/docs/previews/line.html +220 -0
  199. seraplot-2.3.68/src/docs/previews/line3d.html +1102 -0
  200. seraplot-2.3.68/src/docs/previews/lollipop.html +220 -0
  201. seraplot-2.3.68/src/docs/previews/lollipop3d.html +1102 -0
  202. seraplot-2.3.68/src/docs/previews/multiline.html +220 -0
  203. seraplot-2.3.68/src/docs/previews/parallel.html +220 -0
  204. seraplot-2.3.68/src/docs/previews/pie.html +220 -0
  205. seraplot-2.3.68/src/docs/previews/pie3d.html +1102 -0
  206. seraplot-2.3.68/src/docs/previews/radar.html +220 -0
  207. seraplot-2.3.68/src/docs/previews/radar3d.html +1102 -0
  208. seraplot-2.3.68/src/docs/previews/ridgeline.html +220 -0
  209. seraplot-2.3.68/src/docs/previews/ridgeline3d.html +1102 -0
  210. seraplot-2.3.68/src/docs/previews/scatter.html +220 -0
  211. seraplot-2.3.68/src/docs/previews/scatter3d.html +1102 -0
  212. seraplot-2.3.68/src/docs/previews/slideshow.html +1 -0
  213. seraplot-2.3.68/src/docs/previews/slope.html +220 -0
  214. seraplot-2.3.68/src/docs/previews/stacked-bar.html +220 -0
  215. seraplot-2.3.68/src/docs/previews/stacked-bar3d.html +1102 -0
  216. seraplot-2.3.68/src/docs/previews/sunburst.html +220 -0
  217. seraplot-2.3.68/src/docs/previews/sunburst3d.html +1102 -0
  218. seraplot-2.3.68/src/docs/previews/treemap.html +220 -0
  219. seraplot-2.3.68/src/docs/previews/violin.html +220 -0
  220. seraplot-2.3.68/src/docs/previews/violin3d.html +1102 -0
  221. seraplot-2.3.68/src/docs/previews/waterfall.html +220 -0
  222. seraplot-2.3.68/src/docs/previews/wordcloud.html +220 -0
  223. seraplot-2.3.68/src/docs/theme/custom.css +82 -0
  224. seraplot-2.3.68/src/docs/theme/lang-switcher.js +141 -0
  225. seraplot-2.3.68/src/ml/cache.rs +422 -0
  226. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/linear/elastic_net.rs +19 -2
  227. seraplot-2.3.68/src/ml/linear/lasso.rs +32 -0
  228. seraplot-2.3.68/src/ml/linear/logistic.rs +497 -0
  229. seraplot-2.3.68/src/ml/linear/ols.rs +148 -0
  230. seraplot-2.3.68/src/ml/linear/ridge.rs +152 -0
  231. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/linear/sgd.rs +62 -10
  232. seraplot-2.3.68/src/ml/mod.rs +40 -0
  233. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/model_selection/cross_val.rs +7 -6
  234. seraplot-2.3.68/src/ml/model_selection/grid_search.rs +1256 -0
  235. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/model_selection/mod.rs +2 -0
  236. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/model_selection/split.rs +41 -20
  237. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/naive_bayes/bernoulli.rs +11 -1
  238. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/naive_bayes/gaussian.rs +28 -42
  239. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/naive_bayes/multinomial.rs +5 -0
  240. seraplot-2.3.68/src/ml/neighbors/knn.rs +609 -0
  241. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/svm/svm.rs +14 -4
  242. seraplot-2.3.68/src/ml/tree/adaboost.rs +396 -0
  243. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/tree/decision_tree.rs +10 -0
  244. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/tree/gradient_boosting.rs +10 -0
  245. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/tree/random_forest.rs +10 -0
  246. seraplot-2.3.62/bench_issues.json +0 -32
  247. seraplot-2.3.62/python/seraplot/__init__.py +0 -2
  248. seraplot-2.3.62/src/bindings/python/python_ml.rs +0 -1916
  249. seraplot-2.3.62/src/docs/ml/adaboost.md +0 -107
  250. seraplot-2.3.62/src/docs/ml/decision-tree.md +0 -143
  251. seraplot-2.3.62/src/docs/ml/decomposition.md +0 -277
  252. seraplot-2.3.62/src/docs/ml/elastic-net.md +0 -129
  253. seraplot-2.3.62/src/docs/ml/gradient-boosting.md +0 -141
  254. seraplot-2.3.62/src/docs/ml/knn.md +0 -143
  255. seraplot-2.3.62/src/docs/ml/lasso.md +0 -123
  256. seraplot-2.3.62/src/docs/ml/linear-regression.md +0 -210
  257. seraplot-2.3.62/src/docs/ml/logistic-regression.md +0 -117
  258. seraplot-2.3.62/src/docs/ml/metrics.md +0 -141
  259. seraplot-2.3.62/src/docs/ml/naive-bayes.md +0 -152
  260. seraplot-2.3.62/src/docs/ml/random-forest.md +0 -146
  261. seraplot-2.3.62/src/docs/ml/ridge.md +0 -112
  262. seraplot-2.3.62/src/docs/ml/svm.md +0 -316
  263. seraplot-2.3.62/src/docs/ml/train-test-split.md +0 -110
  264. seraplot-2.3.62/src/docs/theme/lang-switcher.js +0 -70
  265. seraplot-2.3.62/src/ml/linear/lasso.rs +0 -19
  266. seraplot-2.3.62/src/ml/linear/logistic.rs +0 -351
  267. seraplot-2.3.62/src/ml/linear/ols.rs +0 -81
  268. seraplot-2.3.62/src/ml/linear/ridge.rs +0 -84
  269. seraplot-2.3.62/src/ml/mod.rs +0 -21
  270. seraplot-2.3.62/src/ml/neighbors/knn.rs +0 -546
  271. seraplot-2.3.62/src/ml/tree/adaboost.rs +0 -212
  272. {seraplot-2.3.62 → seraplot-2.3.68}/.gitignore +0 -0
  273. {seraplot-2.3.62 → seraplot-2.3.68}/05--Diabetes_SeraPlot.ipynb +0 -0
  274. {seraplot-2.3.62 → seraplot-2.3.68}/07--OpenFoodFacts_SeraPlot_Benchmark.ipynb +0 -0
  275. {seraplot-2.3.62 → seraplot-2.3.68}/README.md +0 -0
  276. {seraplot-2.3.62 → seraplot-2.3.68}/TEST_1M_Battle.ipynb +0 -0
  277. {seraplot-2.3.62 → seraplot-2.3.68}/bench_all.py +0 -0
  278. {seraplot-2.3.62 → seraplot-2.3.68}/bench_bigdata.py +0 -0
  279. {seraplot-2.3.62 → seraplot-2.3.68}/bench_full.py +0 -0
  280. {seraplot-2.3.62 → seraplot-2.3.68}/bench_knn_sgd.py +0 -0
  281. {seraplot-2.3.62 → seraplot-2.3.68}/bench_perf.py +0 -0
  282. {seraplot-2.3.62 → seraplot-2.3.68}/bench_quick.py +0 -0
  283. {seraplot-2.3.62 → seraplot-2.3.68}/bench_quick2.py +0 -0
  284. {seraplot-2.3.62 → seraplot-2.3.68}/bench_scale.py +0 -0
  285. {seraplot-2.3.62 → seraplot-2.3.68}/bench_svc.py +0 -0
  286. {seraplot-2.3.62 → seraplot-2.3.68}/bench_svc2.py +0 -0
  287. {seraplot-2.3.62 → seraplot-2.3.68}/bench_test.py +0 -0
  288. {seraplot-2.3.62 → seraplot-2.3.68}/benchmark_kmeans_heavy.ipynb +0 -0
  289. {seraplot-2.3.62 → seraplot-2.3.68}/benchmark_kmeans_openfoodfacts.ipynb +0 -0
  290. {seraplot-2.3.62 → seraplot-2.3.68}/benchmark_ml.ipynb +0 -0
  291. {seraplot-2.3.62 → seraplot-2.3.68}/benchmark_ml_openfoodfacts.ipynb +0 -0
  292. {seraplot-2.3.62 → seraplot-2.3.68}/benchmark_ml_out.ipynb +0 -0
  293. {seraplot-2.3.62 → seraplot-2.3.68}/gen_bench_slides.py +0 -0
  294. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/1.png +0 -0
  295. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/2.png +0 -0
  296. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/3.png +0 -0
  297. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/4.png +0 -0
  298. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/5.png +0 -0
  299. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/6.png +0 -0
  300. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/7.png +0 -0
  301. {seraplot-2.3.62 → seraplot-2.3.68}/images/2d/8.png +0 -0
  302. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/1.png +0 -0
  303. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/2.png +0 -0
  304. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/3.png +0 -0
  305. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/4.png +0 -0
  306. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/5.png +0 -0
  307. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/6.png +0 -0
  308. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/7.png +0 -0
  309. {seraplot-2.3.62 → seraplot-2.3.68}/images/3d/8.png +0 -0
  310. {seraplot-2.3.62 → seraplot-2.3.68}/images/README.md +0 -0
  311. {seraplot-2.3.62 → seraplot-2.3.68}/images/benchmark/1.png +0 -0
  312. {seraplot-2.3.62 → seraplot-2.3.68}/images/benchmark/2.png +0 -0
  313. {seraplot-2.3.62 → seraplot-2.3.68}/images/benchmark/3.png +0 -0
  314. {seraplot-2.3.62 → seraplot-2.3.68}/images/logo.png +0 -0
  315. {seraplot-2.3.62 → seraplot-2.3.68}/kmeans_test.html +0 -0
  316. {seraplot-2.3.62 → seraplot-2.3.68}/python/seraplot/matplotlib.py +0 -0
  317. {seraplot-2.3.62 → seraplot-2.3.68}/src/.github/workflows/mdbook.yml +0 -0
  318. {seraplot-2.3.62 → seraplot-2.3.68}/src/README.md +0 -0
  319. {seraplot-2.3.62 → seraplot-2.3.68}/src/asset/SVG World Map with labels.svg +0 -0
  320. {seraplot-2.3.62 → seraplot-2.3.68}/src/asset/logo.png +0 -0
  321. {seraplot-2.3.62 → seraplot-2.3.68}/src/asset/world.svg +0 -0
  322. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/builder_template.rs +0 -0
  323. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/chart_types.rs +0 -0
  324. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/export_builder.rs +0 -0
  325. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/fast_export_c.rs +0 -0
  326. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/fast_render.rs +0 -0
  327. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/js/js_bindings.rs +0 -0
  328. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/js/mod.rs +0 -0
  329. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/memory_pool.rs +0 -0
  330. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/mod.rs +0 -0
  331. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/python/mod.rs +0 -0
  332. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/python/python_registry.rs +0 -0
  333. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/unified_builder.rs +0 -0
  334. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/unified_config.rs +0 -0
  335. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/arena_alloc.rs +0 -0
  336. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/bitset.rs +0 -0
  337. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/compact_state.rs +0 -0
  338. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/data_processor.rs +0 -0
  339. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/image_processor.rs +0 -0
  340. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/lazy_builders.rs +0 -0
  341. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/memory_pool.rs +0 -0
  342. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/mod.rs +0 -0
  343. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/simd_ops.rs +0 -0
  344. {seraplot-2.3.62 → seraplot-2.3.68}/src/bindings/utils/state_export.rs +0 -0
  345. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/area.html +0 -0
  346. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bar.html +0 -0
  347. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bar3d.html +0 -0
  348. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bench-matplotlib.html +0 -0
  349. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bench-plotly.html +0 -0
  350. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bench-seraplot.html +0 -0
  351. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/boxplot.html +0 -0
  352. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bubble-map.html +0 -0
  353. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bubble.html +0 -0
  354. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bubble3d.html +0 -0
  355. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/bullet.html +0 -0
  356. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/candlestick.html +0 -0
  357. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/candlestick3d.html +0 -0
  358. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/choropleth.html +0 -0
  359. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/dbscan-class.html +0 -0
  360. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/dbscan.html +0 -0
  361. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/dbscan3d.html +0 -0
  362. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/donut.html +0 -0
  363. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/dumbbell.html +0 -0
  364. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/dumbbell3d.html +0 -0
  365. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/funnel.html +0 -0
  366. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/funnel3d.html +0 -0
  367. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/gauge.html +0 -0
  368. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/globe3d.html +0 -0
  369. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/grid.html +0 -0
  370. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/grouped-bar.html +0 -0
  371. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/hbar.html +0 -0
  372. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/heatmap.html +0 -0
  373. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/heatmap3d.html +0 -0
  374. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/histogram-overlay.html +0 -0
  375. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/histogram.html +0 -0
  376. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/kde.html +0 -0
  377. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/kde3d.html +0 -0
  378. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/line.html +0 -0
  379. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/line3d.html +0 -0
  380. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/lollipop.html +0 -0
  381. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/lollipop3d.html +0 -0
  382. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/multiline.html +0 -0
  383. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/parallel.html +0 -0
  384. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/pie.html +0 -0
  385. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/pie3d.html +0 -0
  386. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/radar.html +0 -0
  387. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/radar3d.html +0 -0
  388. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/ridgeline.html +0 -0
  389. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/ridgeline3d.html +0 -0
  390. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/scatter.html +0 -0
  391. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/scatter3d.html +0 -0
  392. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/slideshow.html +0 -0
  393. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/slope.html +0 -0
  394. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/stacked-bar.html +0 -0
  395. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/stacked-bar3d.html +0 -0
  396. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/sunburst.html +0 -0
  397. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/sunburst3d.html +0 -0
  398. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/treemap.html +0 -0
  399. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/violin.html +0 -0
  400. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/violin3d.html +0 -0
  401. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/waterfall.html +0 -0
  402. {seraplot-2.3.62/src/docs → seraplot-2.3.68/src/book}/previews/wordcloud.html +0 -0
  403. {seraplot-2.3.62 → seraplot-2.3.68}/src/core/builders.rs +0 -0
  404. {seraplot-2.3.62 → seraplot-2.3.68}/src/core/math.rs +0 -0
  405. {seraplot-2.3.62 → seraplot-2.3.68}/src/core/mod.rs +0 -0
  406. {seraplot-2.3.62 → seraplot-2.3.68}/src/data/conversion.rs +0 -0
  407. {seraplot-2.3.62 → seraplot-2.3.68}/src/data/index.rs +0 -0
  408. {seraplot-2.3.62 → seraplot-2.3.68}/src/data/loader.rs +0 -0
  409. {seraplot-2.3.62 → seraplot-2.3.68}/src/data/mod.rs +0 -0
  410. {seraplot-2.3.62 → seraplot-2.3.68}/src/data/processor.rs +0 -0
  411. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/api/index.md +0 -0
  412. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/area.md +0 -0
  413. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/bar.md +0 -0
  414. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/boxplot.md +0 -0
  415. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/bubble.md +0 -0
  416. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/bullet.md +0 -0
  417. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/candlestick.md +0 -0
  418. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/donut.md +0 -0
  419. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/dumbbell.md +0 -0
  420. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/funnel.md +0 -0
  421. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/gauge.md +0 -0
  422. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/grid.md +0 -0
  423. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/grouped-bar.md +0 -0
  424. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/hbar.md +0 -0
  425. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/heatmap.md +0 -0
  426. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/histogram-overlay.md +0 -0
  427. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/histogram.md +0 -0
  428. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/index.md +0 -0
  429. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/kde.md +0 -0
  430. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/line.md +0 -0
  431. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/lollipop.md +0 -0
  432. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/multiline.md +0 -0
  433. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/parallel.md +0 -0
  434. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/pie.md +0 -0
  435. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/radar.md +0 -0
  436. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/ridgeline.md +0 -0
  437. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/scatter.md +0 -0
  438. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/slideshow.md +0 -0
  439. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/slope.md +0 -0
  440. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/stacked-bar.md +0 -0
  441. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/sunburst.md +0 -0
  442. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/treemap.md +0 -0
  443. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/violin.md +0 -0
  444. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/waterfall.md +0 -0
  445. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/2d/wordcloud.md +0 -0
  446. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/bar3d.md +0 -0
  447. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/bubble3d.md +0 -0
  448. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/candlestick3d.md +0 -0
  449. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/dumbbell3d.md +0 -0
  450. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/funnel3d.md +0 -0
  451. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/globe3d.md +0 -0
  452. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/heatmap3d.md +0 -0
  453. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/index.md +0 -0
  454. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/kde3d.md +0 -0
  455. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/line3d.md +0 -0
  456. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/lollipop3d.md +0 -0
  457. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/pie3d.md +0 -0
  458. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/radar3d.md +0 -0
  459. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/ridgeline3d.md +0 -0
  460. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/scatter3d.md +0 -0
  461. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/stacked-bar3d.md +0 -0
  462. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/sunburst3d.md +0 -0
  463. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/3d/violin3d.md +0 -0
  464. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/map/bubble-map.md +0 -0
  465. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/map/choropleth.md +0 -0
  466. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/charts/map/index.md +0 -0
  467. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/config/auto-display.md +0 -0
  468. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/config/background.md +0 -0
  469. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/config/hover.md +0 -0
  470. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/config/palette.md +0 -0
  471. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/getting-started/chart-methods.md +0 -0
  472. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/getting-started/chart-object.md +0 -0
  473. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/getting-started/installation.md +0 -0
  474. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/getting-started/quickstart.md +0 -0
  475. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/introduction.md +0 -0
  476. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/dbscan-class.md +0 -0
  477. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/dbscan.md +0 -0
  478. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/dbscan3d.md +0 -0
  479. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/kmeans-class.md +0 -0
  480. {seraplot-2.3.62 → seraplot-2.3.68}/src/docs/ml/kmeans.md +0 -0
  481. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/assets.rs +0 -0
  482. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/fast_builders.rs +0 -0
  483. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/fast_exporter.rs +0 -0
  484. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/hover.rs +0 -0
  485. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/html_export.rs +0 -0
  486. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/html_template.rs +0 -0
  487. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/js_3d.rs +0 -0
  488. {seraplot-2.3.62 → seraplot-2.3.68}/src/html/mod.rs +0 -0
  489. {seraplot-2.3.62 → seraplot-2.3.68}/src/lib.rs +0 -0
  490. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/decomposition/mod.rs +0 -0
  491. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/decomposition/pca.rs +0 -0
  492. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/linalg.rs +0 -0
  493. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/linear/mod.rs +0 -0
  494. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/metrics/classification.rs +0 -0
  495. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/metrics/mod.rs +0 -0
  496. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/metrics/regression.rs +0 -0
  497. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/naive_bayes/mod.rs +0 -0
  498. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/neighbors/mod.rs +0 -0
  499. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/preprocessing/encoders.rs +0 -0
  500. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/preprocessing/mod.rs +0 -0
  501. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/preprocessing/scalers.rs +0 -0
  502. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/svm/mod.rs +0 -0
  503. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/tree/decision_tree_backup.rs +0 -0
  504. {seraplot-2.3.62 → seraplot-2.3.68}/src/ml/tree/mod.rs +0 -0
  505. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/camera.rs +0 -0
  506. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/canvas.rs +0 -0
  507. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/containers_3d.rs +0 -0
  508. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/controller/chart_controller.rs +0 -0
  509. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/controller/mod.rs +0 -0
  510. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/controller/plot_3d_controller.rs +0 -0
  511. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/_3d/bar_3d.rs +0 -0
  512. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/_3d/line_3d.rs +0 -0
  513. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/_3d/mod.rs +0 -0
  514. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/_3d/plot_3d_types.rs +0 -0
  515. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/_3d/scatter_3d.rs +0 -0
  516. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/bar.rs +0 -0
  517. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/chart.rs +0 -0
  518. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/kmeans.rs +0 -0
  519. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/line.rs +0 -0
  520. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/mod.rs +0 -0
  521. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/scatter.rs +0 -0
  522. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/default/svg.rs +0 -0
  523. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/generic.rs +0 -0
  524. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/_3d/globe.rs +0 -0
  525. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/_3d/globe_html.rs +0 -0
  526. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/_3d/globe_types.rs +0 -0
  527. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/_3d/mod.rs +0 -0
  528. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/bubble_map.rs +0 -0
  529. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/chart.rs +0 -0
  530. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/choropleth.rs +0 -0
  531. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/mod.rs +0 -0
  532. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/svg_parser.rs +0 -0
  533. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/map/world_data.rs +0 -0
  534. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/mod.rs +0 -0
  535. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/projection.rs +0 -0
  536. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/renderers.rs +0 -0
  537. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/scale_renderer.rs +0 -0
  538. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/seaborn/_3d/mod.rs +0 -0
  539. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/seaborn/_3d/plot_3d_types.rs +0 -0
  540. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/seaborn/chart.rs +0 -0
  541. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/seaborn/mod.rs +0 -0
  542. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/candlestick3d.rs +0 -0
  543. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/dumbbell3d.rs +0 -0
  544. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/funnel3d.rs +0 -0
  545. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/heatmap3d.rs +0 -0
  546. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/kde3d.rs +0 -0
  547. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/lollipop3d.rs +0 -0
  548. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/mod.rs +0 -0
  549. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/pie3d.rs +0 -0
  550. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/plot_3d_types.rs +0 -0
  551. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/radar3d.rs +0 -0
  552. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/ridgeline3d.rs +0 -0
  553. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/stacked_bar3d.rs +0 -0
  554. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/sunburst3d.rs +0 -0
  555. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/_3d/violin3d.rs +0 -0
  556. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/area.rs +0 -0
  557. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/boxplot.rs +0 -0
  558. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/bubble.rs +0 -0
  559. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/bullet.rs +0 -0
  560. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/candlestick.rs +0 -0
  561. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/common.rs +0 -0
  562. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/dumbbell.rs +0 -0
  563. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/funnel.rs +0 -0
  564. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/gauge.rs +0 -0
  565. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/grouped_bar.rs +0 -0
  566. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/heatmap.rs +0 -0
  567. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/histogram.rs +0 -0
  568. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/kde.rs +0 -0
  569. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/lollipop.rs +0 -0
  570. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/mod.rs +0 -0
  571. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/multiline.rs +0 -0
  572. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/parallel.rs +0 -0
  573. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/pie.rs +0 -0
  574. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/radar.rs +0 -0
  575. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/ridgeline.rs +0 -0
  576. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/slope.rs +0 -0
  577. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/sunburst.rs +0 -0
  578. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/treemap.rs +0 -0
  579. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/violin.rs +0 -0
  580. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/waterfall.rs +0 -0
  581. {seraplot-2.3.62 → seraplot-2.3.68}/src/plot/statistical/wordcloud.rs +0 -0
  582. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/cache.rs +0 -0
  583. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/chart.rs +0 -0
  584. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/gui.rs +0 -0
  585. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/hybrid.rs +0 -0
  586. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/manager/button_manager.rs +0 -0
  587. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/manager/mod.rs +0 -0
  588. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/mod.rs +0 -0
  589. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/render/advanced_render.rs +0 -0
  590. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/render/fast_render_gui.rs +0 -0
  591. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/render/mod.rs +0 -0
  592. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/render/pipeline.rs +0 -0
  593. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/render/viewer_3d.rs +0 -0
  594. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/render/wiki_viewer.rs +0 -0
  595. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/utils/image_loader.rs +0 -0
  596. {seraplot-2.3.62 → seraplot-2.3.68}/src/viewer/utils/mod.rs +0 -0
  597. {seraplot-2.3.62 → seraplot-2.3.68}/src/wiki/api.rs +0 -0
  598. {seraplot-2.3.62 → seraplot-2.3.68}/src/wiki/extractor.rs +0 -0
  599. {seraplot-2.3.62 → seraplot-2.3.68}/src/wiki/language.rs +0 -0
  600. {seraplot-2.3.62 → seraplot-2.3.68}/src/wiki/macros.rs +0 -0
  601. {seraplot-2.3.62 → seraplot-2.3.68}/src/wiki/metadata.rs +0 -0
  602. {seraplot-2.3.62 → seraplot-2.3.68}/src/wiki/mod.rs +0 -0
  603. {seraplot-2.3.62 → seraplot-2.3.68}/test_accuracy.py +0 -0
@@ -2107,6 +2107,15 @@ dependencies = [
2107
2107
  "cfg-if",
2108
2108
  ]
2109
2109
 
2110
+ [[package]]
2111
+ name = "inventory"
2112
+ version = "0.3.24"
2113
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2114
+ checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b"
2115
+ dependencies = [
2116
+ "rustversion",
2117
+ ]
2118
+
2110
2119
  [[package]]
2111
2120
  name = "io-lifetimes"
2112
2121
  version = "1.0.11"
@@ -3048,6 +3057,7 @@ checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8"
3048
3057
  dependencies = [
3049
3058
  "cfg-if",
3050
3059
  "indoc",
3060
+ "inventory",
3051
3061
  "libc",
3052
3062
  "memoffset 0.9.1",
3053
3063
  "parking_lot",
@@ -3461,7 +3471,7 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
3461
3471
 
3462
3472
  [[package]]
3463
3473
  name = "seraplot"
3464
- version = "2.3.62"
3474
+ version = "2.3.68"
3465
3475
  dependencies = [
3466
3476
  "base64 0.22.1",
3467
3477
  "criterion",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "seraplot"
3
- version = "2.3.62"
3
+ version = "2.3.68"
4
4
  edition = "2021"
5
5
  authors = ["feur25"]
6
6
  description = "Rust data visualization framework - The modern Plotly alternative"
@@ -17,7 +17,7 @@ serde = { version = "1.0", features = ["derive"] }
17
17
  serde_json = "1.0"
18
18
  thiserror = "1.0"
19
19
  parking_lot = "0.12"
20
- pyo3 = { version = "0.21", features = ["extension-module"], optional = true }
20
+ pyo3 = { version = "0.21", features = ["extension-module", "multiple-pymethods"], optional = true }
21
21
  csv = "1.3"
22
22
  egui = { version = "0.27", optional = true }
23
23
  eframe = { version = "0.27", optional = true }
@@ -43,14 +43,6 @@ js = ["dep:wasm-bindgen", "dep:js-sys", "dep:getrandom", "dep:egui"]
43
43
  all = ["python"]
44
44
  pyo3 = ["dep:pyo3"]
45
45
 
46
- [[example]]
47
- name = "csv_test"
48
- path = "examples/csv_test.rs"
49
-
50
- [[example]]
51
- name = "csv_viewer"
52
- path = "examples/csv_viewer.rs"
53
-
54
46
  [profile.release]
55
47
  lto = "thin"
56
48
  codegen-units = 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seraplot
3
- Version: 2.3.62
3
+ Version: 2.3.68
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Environment :: Win32 (MS Windows)
6
6
  Classifier: Intended Audience :: Developers
@@ -0,0 +1,13 @@
1
+ {
2
+ "score_bugs": [],
3
+ "speed_bugs": [
4
+ {
5
+ "algo": "LabelEncoder.fit_transform",
6
+ "sp_fit_s": 0.0131,
7
+ "sk_fit_s": 0.0079,
8
+ "speedup": 0.603
9
+ }
10
+ ],
11
+ "n": 50000,
12
+ "date": "2026-04-18"
13
+ }
@@ -3,6 +3,21 @@ import json
3
3
  import numpy as np
4
4
  import pandas as pd
5
5
  import seraplot as sp
6
+ from sklearn.linear_model import (
7
+ LinearRegression as SkLR, Ridge as SkRidge, Lasso as SkLasso,
8
+ ElasticNet as SkEN, SGDRegressor as SkSGDR,
9
+ LogisticRegression as SkLogR, SGDClassifier as SkSGDC,
10
+ )
11
+ from sklearn.tree import DecisionTreeClassifier as SkDTC
12
+ from sklearn.ensemble import (
13
+ RandomForestClassifier as SkRFC, GradientBoostingClassifier as SkGBC,
14
+ AdaBoostClassifier as SkABC,
15
+ )
16
+ from sklearn.neighbors import KNeighborsClassifier as SkKNN
17
+ from sklearn.naive_bayes import GaussianNB as SkGNB, BernoulliNB as SkBNB
18
+ from sklearn.svm import LinearSVC as SkSVC
19
+ from sklearn.model_selection import StratifiedKFold, cross_val_score
20
+ from sklearn.metrics import accuracy_score, r2_score as sk_r2
6
21
 
7
22
  DATA_PATH = r"C:\Users\Quentin\Desktop\SeraPlot\v2\en.openfoodfacts.org.products.csv.gz"
8
23
  N_MAX = 50_000
@@ -18,8 +33,9 @@ CLASS_COL = "pnns_groups_1"
18
33
 
19
34
  print("Chargement des données…")
20
35
  df = pd.read_csv(
21
- DATA_PATH, sep="\t", on_bad_lines="skip", engine="python",
36
+ DATA_PATH, sep="\t", on_bad_lines="skip",
22
37
  usecols=NUMERIC_COLS + [CLASS_COL],
38
+ engine="python", nrows=500_000, quoting=3,
23
39
  )
24
40
  NUMERIC_COLS = [c for c in NUMERIC_COLS if c in df.columns]
25
41
  FEATURE_COLS = [c for c in NUMERIC_COLS if c != TARGET_REG]
@@ -58,6 +74,7 @@ yc_tr, yc_te = y_cls[tr], y_cls[te]
58
74
  ls_tr = label_strings[tr]
59
75
 
60
76
  records = {}
77
+ sk_records = {}
61
78
 
62
79
  def run(name, model, Xtr, ytr, Xte, yte, metric="acc"):
63
80
  t0 = time.perf_counter()
@@ -70,6 +87,16 @@ def run(name, model, Xtr, ytr, Xte, yte, metric="acc"):
70
87
  records[name] = {"fit_s": round(fit_s, 4), "pred_s": round(pred_s, 4), "metric": metric, "score": round(score, 4)}
71
88
  print(f" {name:<40} fit={fit_s:8.4f}s pred={pred_s:7.4f}s {metric}={score:.4f}")
72
89
 
90
+ def run_sk(name, model, Xtr, ytr, Xte, yte, metric="acc"):
91
+ t0 = time.perf_counter()
92
+ model.fit(Xtr, ytr)
93
+ fit_s = time.perf_counter() - t0
94
+ t0 = time.perf_counter()
95
+ pred = model.predict(Xte)
96
+ pred_s = time.perf_counter() - t0
97
+ score = float(accuracy_score(yte, pred) if metric == "acc" else sk_r2(yte, pred))
98
+ sk_records[name] = {"fit_s": round(fit_s, 4), "pred_s": round(pred_s, 4), "metric": metric, "score": round(score, 4)}
99
+
73
100
  def runt(name, fn, *args, **kw):
74
101
  t0 = time.perf_counter()
75
102
  fn(*args, **kw)
@@ -94,6 +121,12 @@ run("Lasso(α=0.1)", sp.Lasso(alpha=0.1, max_iter=500),
94
121
  run("ElasticNet(α=0.1,l1=.5)", sp.ElasticNet(alpha=0.1, l1_ratio=0.5, max_iter=500), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
95
122
  run("SGDRegressor", sp.SGDRegressor(loss="squared_error", alpha=1e-4, max_iter=200, eta0=0.01), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
96
123
 
124
+ run_sk("LinearRegression", SkLR(), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
125
+ run_sk("Ridge(α=1.0)", SkRidge(alpha=1.0), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
126
+ run_sk("Lasso(α=0.1)", SkLasso(alpha=0.1, max_iter=500), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
127
+ run_sk("ElasticNet(α=0.1,l1=.5)",SkEN(alpha=0.1, l1_ratio=0.5, max_iter=500), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
128
+ run_sk("SGDRegressor", SkSGDR(loss="squared_error", alpha=1e-4, max_iter=200, eta0=0.01), Xs_tr, yr_tr, Xs_te, yr_te, "r2")
129
+
97
130
  print()
98
131
  run("LogisticRegression(C=1)", sp.LogisticRegression(c=1.0, max_iter=300), Xs_tr, yc_tr, Xs_te, yc_te)
99
132
  run("SGDClassifier(hinge)", sp.SGDClassifier(loss="hinge", alpha=1e-4, max_iter=200), Xs_tr, yc_tr, Xs_te, yc_te)
@@ -106,28 +139,50 @@ run("GaussianNB", sp.GaussianNB(),
106
139
  run("BernoulliNB", sp.BernoulliNB(), Xb_tr, yc_tr, Xb_te, yc_te)
107
140
  run("LinearSVC(C=1)", sp.LinearSVC(c=1.0, max_iter=500), Xs_tr, yc_tr, Xs_te, yc_te)
108
141
 
142
+ run_sk("LogisticRegression(C=1)",SkLogR(C=1.0, max_iter=300, solver="lbfgs"), Xs_tr, yc_tr, Xs_te, yc_te)
143
+ run_sk("SGDClassifier(hinge)", SkSGDC(loss="hinge", alpha=1e-4, max_iter=200), Xs_tr, yc_tr, Xs_te, yc_te)
144
+ run_sk("DecisionTree(d=10)", SkDTC(max_depth=10), X_tr, yc_tr, X_te, yc_te)
145
+ run_sk("RandomForest(50,d=10)", SkRFC(n_estimators=50, max_depth=10, n_jobs=-1), X_tr, yc_tr, X_te, yc_te)
146
+ run_sk("GradientBoosting(50,d=3)",SkGBC(n_estimators=50, max_depth=3, learning_rate=0.1), X_tr, yc_tr, X_te, yc_te)
147
+ run_sk("AdaBoost(50)", SkABC(n_estimators=50), X_tr, yc_tr, X_te, yc_te)
148
+ run_sk("KNeighbors(k=5)", SkKNN(n_neighbors=5), Xs_tr, yc_tr, Xs_te, yc_te)
149
+ run_sk("GaussianNB", SkGNB(), X_tr, yc_tr, X_te, yc_te)
150
+ run_sk("BernoulliNB", SkBNB(), Xb_tr, yc_tr, Xb_te, yc_te)
151
+ run_sk("LinearSVC(C=1)", SkSVC(C=1.0, max_iter=500), Xs_tr, yc_tr, Xs_te, yc_te)
152
+
109
153
  print()
110
154
  skf = sp.StratifiedKFold(n_splits=5, shuffle=True, random_state=SEED)
111
- cv_acc = []
155
+ folds_data = list(skf.split(Xs_tr, yc_tr))
112
156
  t0 = time.perf_counter()
113
- for ti, vi in skf.split(Xs_tr, yc_tr):
114
- m = sp.LogisticRegression(c=1.0, max_iter=200)
115
- m.fit(Xs_tr[ti], yc_tr[ti])
116
- cv_acc.append(float(sp.accuracy_score(yc_tr[vi], m.predict(Xs_tr[vi]))))
157
+ cv_acc = sp.parallel_cv_cls(Xs_tr, yc_tr, folds_data, c=1.0, max_iter=200)
117
158
  cv_s = time.perf_counter() - t0
118
159
  cv_mean = float(np.mean(cv_acc))
119
160
  records["StratifiedKFold(5)×LR"] = {"fit_s": round(cv_s, 4), "pred_s": 0.0, "metric": "cv_acc", "score": round(cv_mean, 4)}
120
161
  print(f" {'StratifiedKFold(5)×LR':<40} {cv_s:.4f}s mean_acc={cv_mean:.4f}")
121
162
 
122
- with open("results_seraplot.json", "w") as f:
123
- json.dump(records, f, indent=2)
163
+ skf_sk = StratifiedKFold(n_splits=5, shuffle=True, random_state=SEED)
164
+ t0 = time.perf_counter()
165
+ sk_cv_scores = cross_val_score(SkLogR(C=1.0, max_iter=200, solver="lbfgs"), Xs_tr, yc_tr, cv=skf_sk, scoring="accuracy")
166
+ sk_cv_s = time.perf_counter() - t0
167
+ sk_records["StratifiedKFold(5)×LR"] = {"fit_s": round(sk_cv_s, 4), "pred_s": 0.0, "metric": "cv_acc", "score": round(float(np.mean(sk_cv_scores)), 4)}
124
168
 
125
- print(f"\n{'═'*76}")
126
- print(f" {'Algorithme':<40} {'Fit (s)':>10} {'Pred (s)':>10} {'Score':>8}")
127
- print(f"{'═'*76}")
128
- for k, v in records.items():
129
- pred_str = f"{v['pred_s']:.4f}" if v["pred_s"] > 0 else "-"
130
- score_str = f"{v['score']:.4f}" if v["metric"] not in ("ms", "s") else "-"
131
- print(f" {k:<40} {v['fit_s']:>10.4f} {pred_str:>10} {score_str:>8}")
132
- print(f"{'═'*76}")
169
+ with open("results_seraplot.json", "w") as f:
170
+ json.dump({"seraplot": records, "sklearn": sk_records}, f, indent=2)
171
+
172
+ print(f"\n{'═'*100}")
173
+ print(f" {'Algorithme':<40} {'SP fit':>8} {'SK fit':>8} {'Speedup':>8} {'SP score':>10} {'SK score':>10} {'Δ score':>8}")
174
+ print(f"{''*100}")
175
+ all_keys = list(records.keys())
176
+ for k in all_keys:
177
+ sp_r = records.get(k, {})
178
+ sk_r = sk_records.get(k, {})
179
+ sp_t = sp_r.get("fit_s", 0.0)
180
+ sk_t = sk_r.get("fit_s", 0.0)
181
+ sp_s = sp_r.get("score", 0.0)
182
+ sk_s = sk_r.get("score", 0.0)
183
+ ratio_str = f"{sk_t/sp_t:.1f}×" if sp_t > 0 and sk_t > 0 else "-"
184
+ delta = abs(sp_s - sk_s) if sp_r.get("metric") not in ("s",) else 0.0
185
+ ok = "✓" if delta < 0.01 else "✗" if sp_r.get("metric") not in ("s",) else ""
186
+ print(f" {k:<40} {sp_t:>8.4f} {sk_t:>8.4f} {ratio_str:>8} {sp_s:>10.4f} {sk_s:>10.4f} {delta:>7.4f}{ok}")
187
+ print(f"{'═'*100}")
133
188
  print(f"\nRésultats sauvegardés → results_seraplot.json")
@@ -32,8 +32,9 @@ CLASS_COL = "pnns_groups_1"
32
32
 
33
33
  print("Chargement des données…")
34
34
  df = pd.read_csv(
35
- DATA_PATH, sep="\t", on_bad_lines="skip", engine="python",
35
+ DATA_PATH, sep="\t", on_bad_lines="skip",
36
36
  usecols=NUMERIC_COLS + [CLASS_COL],
37
+ engine="python",
37
38
  )
38
39
  NUMERIC_COLS = [c for c in NUMERIC_COLS if c in df.columns]
39
40
  FEATURE_COLS = [c for c in NUMERIC_COLS if c != TARGET_REG]
@@ -0,0 +1,201 @@
1
+ """
2
+ Benchmark: SeraPlot GridSearchCV vs scikit-learn GridSearchCV
3
+ Dataset: OpenFoodFacts (500k rows)
4
+ """
5
+ import time
6
+ import numpy as np
7
+ import pandas as pd
8
+
9
+ FEATURES = [
10
+ 'energy-kcal_100g', 'fat_100g', 'saturated-fat_100g',
11
+ 'carbohydrates_100g', 'sugars_100g', 'fiber_100g',
12
+ 'proteins_100g', 'salt_100g',
13
+ ]
14
+
15
+ def load_data(n_rows=500_000):
16
+ print(f"Loading OpenFoodFacts ({n_rows} rows)...")
17
+ t0 = time.perf_counter()
18
+ df = pd.read_csv(
19
+ r'C:\Users\Quentin\Desktop\SeraPlot\v2\en.openfoodfacts.org.products.csv.gz',
20
+ sep='\t', usecols=FEATURES + ['nutriscore_score', 'nutriscore_grade'],
21
+ nrows=n_rows * 3, # load extra to handle NaN drops
22
+ )
23
+ df = df.dropna(subset=FEATURES + ['nutriscore_score']).head(n_rows)
24
+ X = df[FEATURES].values.astype(np.float64)
25
+ y_reg = df['nutriscore_score'].values.astype(np.float64)
26
+ # For classification: bin nutriscore into 5 classes (0-4)
27
+ y_cls = pd.qcut(y_reg, q=5, labels=False, duplicates='drop').astype(np.int32)
28
+ print(f" Loaded {X.shape[0]} rows x {X.shape[1]} features in {time.perf_counter()-t0:.2f}s")
29
+ print(f" Classes: {np.unique(y_cls)}")
30
+ return X, y_reg, y_cls
31
+
32
+
33
+ def bench_sklearn_gridsearch_ridge(X, y):
34
+ from sklearn.linear_model import Ridge
35
+ from sklearn.model_selection import GridSearchCV
36
+ param_grid = {'alpha': [0.001, 0.01, 0.1, 1.0, 10.0, 100.0]}
37
+ gs = GridSearchCV(Ridge(), param_grid, cv=5, scoring='r2', n_jobs=-1)
38
+ t0 = time.perf_counter()
39
+ gs.fit(X, y)
40
+ elapsed = time.perf_counter() - t0
41
+ return elapsed, gs.best_score_, gs.best_params_
42
+
43
+
44
+ def bench_seraplot_gridsearch_ridge(X, y):
45
+ from seraplot import GridSearchCV
46
+ param_grid = {'alpha': [0.001, 0.01, 0.1, 1.0, 10.0, 100.0]}
47
+ gs = GridSearchCV('Ridge', param_grid, cv=5)
48
+ t0 = time.perf_counter()
49
+ gs.fit(X, y)
50
+ elapsed = time.perf_counter() - t0
51
+ return elapsed, gs.best_score_, gs.best_params_
52
+
53
+
54
+ def bench_sklearn_gridsearch_rf(X, y):
55
+ from sklearn.ensemble import RandomForestClassifier
56
+ from sklearn.model_selection import GridSearchCV
57
+ param_grid = {
58
+ 'n_estimators': [50, 100],
59
+ 'max_depth': [5, 10, 20],
60
+ 'min_samples_split': [2, 5],
61
+ 'min_samples_leaf': [1, 2],
62
+ }
63
+ gs = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=3, scoring='accuracy', n_jobs=-1)
64
+ t0 = time.perf_counter()
65
+ gs.fit(X, y)
66
+ elapsed = time.perf_counter() - t0
67
+ return elapsed, gs.best_score_, gs.best_params_
68
+
69
+
70
+ def bench_seraplot_gridsearch_rf(X, y):
71
+ from seraplot import GridSearchCV
72
+ param_grid = {
73
+ 'n_estimators': [50, 100],
74
+ 'max_depth': [5, 10, 20],
75
+ 'min_samples_split': [2, 5],
76
+ 'min_samples_leaf': [1, 2],
77
+ }
78
+ gs = GridSearchCV('RandomForestClassifier', param_grid, cv=3)
79
+ t0 = time.perf_counter()
80
+ gs.fit(X, y)
81
+ elapsed = time.perf_counter() - t0
82
+ return elapsed, gs.best_score_, gs.best_params_
83
+
84
+
85
+ def bench_sklearn_randomsearch_gb(X, y):
86
+ from sklearn.ensemble import GradientBoostingClassifier
87
+ from sklearn.model_selection import RandomizedSearchCV
88
+ param_dist = {
89
+ 'n_estimators': [50, 100, 200],
90
+ 'learning_rate': [0.01, 0.05, 0.1, 0.2],
91
+ 'max_depth': [3, 5, 7, 10],
92
+ 'min_samples_split': [2, 5, 10],
93
+ 'min_samples_leaf': [1, 2, 4],
94
+ }
95
+ rs = RandomizedSearchCV(GradientBoostingClassifier(random_state=42), param_dist, n_iter=20, cv=3, scoring='accuracy', n_jobs=-1, random_state=42)
96
+ t0 = time.perf_counter()
97
+ rs.fit(X, y)
98
+ elapsed = time.perf_counter() - t0
99
+ return elapsed, rs.best_score_, rs.best_params_
100
+
101
+
102
+ def bench_seraplot_randomsearch_gb(X, y):
103
+ from seraplot import RandomizedSearchCV
104
+ param_dist = {
105
+ 'n_estimators': [50, 100, 200],
106
+ 'learning_rate': [0.01, 0.05, 0.1, 0.2],
107
+ 'max_depth': [3, 5, 7, 10],
108
+ 'min_samples_split': [2, 5, 10],
109
+ 'min_samples_leaf': [1, 2, 4],
110
+ }
111
+ rs = RandomizedSearchCV('GradientBoostingClassifier', param_dist, n_iter=20, cv=3)
112
+ t0 = time.perf_counter()
113
+ rs.fit(X, y)
114
+ elapsed = time.perf_counter() - t0
115
+ return elapsed, rs.best_score_, rs.best_params_
116
+
117
+
118
+ def bench_sklearn_halving_rf(X, y):
119
+ from sklearn.ensemble import RandomForestClassifier
120
+ from sklearn.experimental import enable_halving_search_cv
121
+ from sklearn.model_selection import HalvingGridSearchCV
122
+ param_grid = {
123
+ 'n_estimators': [50, 100, 200],
124
+ 'max_depth': [3, 5, 10, 20],
125
+ 'min_samples_split': [2, 5, 10],
126
+ 'min_samples_leaf': [1, 2, 4],
127
+ }
128
+ hg = HalvingGridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=3, factor=3, scoring='accuracy', n_jobs=-1, random_state=42)
129
+ t0 = time.perf_counter()
130
+ hg.fit(X, y)
131
+ elapsed = time.perf_counter() - t0
132
+ return elapsed, hg.best_score_, hg.best_params_
133
+
134
+
135
+ def bench_seraplot_halving_rf(X, y):
136
+ from seraplot import HalvingGridSearchCV
137
+ param_grid = {
138
+ 'n_estimators': [50, 100, 200],
139
+ 'max_depth': [3, 5, 10, 20],
140
+ 'min_samples_split': [2, 5, 10],
141
+ 'min_samples_leaf': [1, 2, 4],
142
+ }
143
+ hg = HalvingGridSearchCV('RandomForestClassifier', param_grid, cv=3, factor=3)
144
+ t0 = time.perf_counter()
145
+ hg.fit(X, y)
146
+ elapsed = time.perf_counter() - t0
147
+ return elapsed, hg.best_score_, hg.best_params_
148
+
149
+
150
+ def print_result(name, t_sk, score_sk, params_sk, t_sp, score_sp, params_sp):
151
+ speedup = t_sk / t_sp if t_sp > 0 else float('inf')
152
+ print(f"\n{'='*70}")
153
+ print(f" {name}")
154
+ print(f"{'='*70}")
155
+ print(f" scikit-learn : {t_sk:8.2f}s score={score_sk:.4f} params={params_sk}")
156
+ print(f" SeraPlot : {t_sp:8.2f}s score={score_sp:.4f} params={params_sp}")
157
+ print(f" Speedup : {speedup:8.1f}x")
158
+
159
+
160
+ def main():
161
+ X, y_reg, y_cls = load_data(500_000)
162
+
163
+ # Reduce data for slower benchmarks
164
+ X_small = X[:50_000]
165
+ y_cls_small = y_cls[:50_000]
166
+
167
+ print("\n" + "="*70)
168
+ print(" BENCHMARK: SeraPlot vs scikit-learn GridSearchCV")
169
+ print("="*70)
170
+
171
+ # 1. Ridge GridSearchCV (full 500k)
172
+ print("\n[1/4] Ridge GridSearchCV (500k rows, 6 alpha values, cv=5)...")
173
+ t_sk, s_sk, p_sk = bench_sklearn_gridsearch_ridge(X, y_reg)
174
+ t_sp, s_sp, p_sp = bench_seraplot_gridsearch_ridge(X, y_reg)
175
+ print_result("Ridge GridSearchCV (500k rows)", t_sk, s_sk, p_sk, t_sp, s_sp, p_sp)
176
+
177
+ # 2. RandomForest GridSearchCV (50k subset - RF is heavy)
178
+ print("\n[2/4] RandomForest GridSearchCV (50k rows, 24 combos, cv=3)...")
179
+ t_sk, s_sk, p_sk = bench_sklearn_gridsearch_rf(X_small, y_cls_small)
180
+ t_sp, s_sp, p_sp = bench_seraplot_gridsearch_rf(X_small, y_cls_small)
181
+ print_result("RandomForest GridSearchCV (50k rows)", t_sk, s_sk, p_sk, t_sp, s_sp, p_sp)
182
+
183
+ # 3. GradientBoosting RandomizedSearchCV (50k subset)
184
+ print("\n[3/4] GradientBoosting RandomizedSearchCV (50k rows, 20 iters, cv=3)...")
185
+ t_sk, s_sk, p_sk = bench_sklearn_randomsearch_gb(X_small, y_cls_small)
186
+ t_sp, s_sp, p_sp = bench_seraplot_randomsearch_gb(X_small, y_cls_small)
187
+ print_result("GradientBoosting RandomizedSearchCV (50k rows)", t_sk, s_sk, p_sk, t_sp, s_sp, p_sp)
188
+
189
+ # 4. HalvingGridSearchCV with RF (50k subset)
190
+ print("\n[4/4] HalvingGridSearchCV RF (50k rows, 108 combos, factor=3)...")
191
+ t_sk, s_sk, p_sk = bench_sklearn_halving_rf(X_small, y_cls_small)
192
+ t_sp, s_sp, p_sp = bench_seraplot_halving_rf(X_small, y_cls_small)
193
+ print_result("HalvingGridSearchCV RF (50k rows)", t_sk, s_sk, p_sk, t_sp, s_sp, p_sp)
194
+
195
+ print("\n" + "="*70)
196
+ print(" BENCHMARK COMPLETE")
197
+ print("="*70)
198
+
199
+
200
+ if __name__ == '__main__':
201
+ main()
@@ -0,0 +1,138 @@
1
+ """
2
+ Benchmark #2: Large search spaces - SeraPlot vs scikit-learn
3
+ Focus on where parallel Rust execution dominates.
4
+ """
5
+ import time
6
+ import numpy as np
7
+ import pandas as pd
8
+
9
+
10
+ def load_data():
11
+ print("Loading OpenFoodFacts...")
12
+ t0 = time.perf_counter()
13
+ cols = ['energy-kcal_100g', 'fat_100g', 'saturated-fat_100g',
14
+ 'carbohydrates_100g', 'sugars_100g', 'proteins_100g',
15
+ 'salt_100g', 'nutriscore_score']
16
+ df = pd.read_csv(
17
+ r'C:\Users\Quentin\Desktop\SeraPlot\v2\en.openfoodfacts.org.products.csv.gz',
18
+ sep='\t', nrows=500_000, low_memory=False, on_bad_lines='skip',
19
+ )
20
+ df = df[cols].dropna()
21
+ X = df[cols[:-1]].values.astype(np.float64)
22
+ y_reg = df['nutriscore_score'].values.astype(np.float64)
23
+ y_cls = pd.qcut(y_reg, q=3, labels=False, duplicates='drop').astype(np.int32)
24
+ print(f" {X.shape[0]} rows x {X.shape[1]} features in {time.perf_counter()-t0:.2f}s")
25
+ return X, y_reg, y_cls
26
+
27
+
28
+ def main():
29
+ X, y_reg, y_cls = load_data()
30
+
31
+ # Use subsets for different tests
32
+ X_100k, y_reg_100k = X[:100_000], y_reg[:100_000]
33
+ X_50k, y_cls_50k = X[:50_000], y_cls[:50_000]
34
+
35
+ print(f"\n{'='*70}")
36
+ print(" BENCHMARK 2: Large search spaces")
37
+ print(f"{'='*70}")
38
+
39
+ # 1. Lasso: 5 alphas x 3 max_iter x 3 tol = 45 combos, cv=5 = 225 fits, 100k rows
40
+ print("\n[1] Lasso GridSearchCV (100k rows, 45 combos, cv=5 = 225 fits)...")
41
+ from sklearn.linear_model import Lasso as SkLasso
42
+ from sklearn.model_selection import GridSearchCV as SkGS
43
+ pg = {'alpha': [0.0001, 0.001, 0.01, 0.1, 1.0], 'max_iter': [500, 1000, 2000], 'tol': [1e-4, 1e-3, 1e-2]}
44
+ t0 = time.perf_counter()
45
+ sk = SkGS(SkLasso(), pg, cv=5, scoring='r2', n_jobs=-1); sk.fit(X_100k, y_reg_100k)
46
+ t_sk = time.perf_counter() - t0
47
+
48
+ from seraplot import GridSearchCV as SpGS
49
+ t0 = time.perf_counter()
50
+ sp = SpGS('Lasso', pg, cv=5); sp.fit(X_100k, y_reg_100k)
51
+ t_sp = time.perf_counter() - t0
52
+ print(f" sklearn: {t_sk:.2f}s score={sk.best_score_:.4f} params={sk.best_params_}")
53
+ print(f" SeraPlot: {t_sp:.2f}s score={sp.best_score_:.4f} params={sp.best_params_}")
54
+ print(f" Speedup: {t_sk/t_sp:.1f}x")
55
+
56
+ # 2. ElasticNet: 5 alpha x 5 l1_ratio x 3 max_iter = 75 combos, cv=5 = 375 fits, 100k rows
57
+ print("\n[2] ElasticNet GridSearchCV (100k rows, 75 combos, cv=5 = 375 fits)...")
58
+ from sklearn.linear_model import ElasticNet as SkEN
59
+ pg2 = {'alpha': [0.0001, 0.001, 0.01, 0.1, 1.0], 'l1_ratio': [0.1, 0.3, 0.5, 0.7, 0.9], 'max_iter': [500, 1000, 2000]}
60
+ t0 = time.perf_counter()
61
+ sk2 = SkGS(SkEN(), pg2, cv=5, scoring='r2', n_jobs=-1); sk2.fit(X_100k, y_reg_100k)
62
+ t_sk2 = time.perf_counter() - t0
63
+ t0 = time.perf_counter()
64
+ sp2 = SpGS('ElasticNet', pg2, cv=5); sp2.fit(X_100k, y_reg_100k)
65
+ t_sp2 = time.perf_counter() - t0
66
+ print(f" sklearn: {t_sk2:.2f}s score={sk2.best_score_:.4f}")
67
+ print(f" SeraPlot: {t_sp2:.2f}s score={sp2.best_score_:.4f}")
68
+ print(f" Speedup: {t_sk2/t_sp2:.1f}x")
69
+
70
+ # 3. LogisticRegression GridSearchCV: 6C x 3 max_iter = 18 combos, cv=5, 50k rows
71
+ print("\n[3] LogisticRegression GridSearchCV (50k rows, 18 combos, cv=5 = 90 fits)...")
72
+ from sklearn.linear_model import LogisticRegression as SkLR
73
+ pg3 = {'C': [0.001, 0.01, 0.1, 1.0, 10.0, 100.0], 'max_iter': [100, 500, 1000]}
74
+ t0 = time.perf_counter()
75
+ sk3 = SkGS(SkLR(), pg3, cv=5, scoring='accuracy', n_jobs=-1); sk3.fit(X_50k, y_cls_50k)
76
+ t_sk3 = time.perf_counter() - t0
77
+ t0 = time.perf_counter()
78
+ sp3 = SpGS('LogisticRegression', pg3, cv=5); sp3.fit(X_50k, y_cls_50k)
79
+ t_sp3 = time.perf_counter() - t0
80
+ print(f" sklearn: {t_sk3:.2f}s score={sk3.best_score_:.4f}")
81
+ print(f" SeraPlot: {t_sp3:.2f}s score={sp3.best_score_:.4f}")
82
+ print(f" Speedup: {t_sk3/t_sp3:.1f}x")
83
+
84
+ # 4. KNN GridSearchCV: 8 k-values x 2 weights = 16 combos, cv=5 = 80 fits, 50k
85
+ print("\n[4] KNN GridSearchCV (50k rows, 16 combos, cv=5 = 80 fits)...")
86
+ from sklearn.neighbors import KNeighborsClassifier as SkKNN
87
+ pg4 = {'n_neighbors': [3, 5, 7, 9, 11, 15, 21, 31], 'weights': ['uniform', 'distance']}
88
+ t0 = time.perf_counter()
89
+ sk4 = SkGS(SkKNN(), pg4, cv=5, scoring='accuracy', n_jobs=-1); sk4.fit(X_50k, y_cls_50k)
90
+ t_sk4 = time.perf_counter() - t0
91
+ t0 = time.perf_counter()
92
+ sp4 = SpGS('KNeighborsClassifier', pg4, cv=5); sp4.fit(X_50k, y_cls_50k)
93
+ t_sp4 = time.perf_counter() - t0
94
+ print(f" sklearn: {t_sk4:.2f}s score={sk4.best_score_:.4f}")
95
+ print(f" SeraPlot: {t_sp4:.2f}s score={sp4.best_score_:.4f}")
96
+ print(f" Speedup: {t_sk4/t_sp4:.1f}x")
97
+
98
+ # 5. HalvingRandomSearchCV: Large space, 256 candidates, factor=3
99
+ print("\n[5] HalvingRandomSearchCV GradientBoosting (50k, 256 candidates)...")
100
+ from sklearn.ensemble import GradientBoostingClassifier as SkGB
101
+ from sklearn.experimental import enable_halving_search_cv
102
+ from sklearn.model_selection import HalvingRandomSearchCV as SkHRS
103
+ from seraplot import HalvingRandomSearchCV as SpHRS
104
+ pg5 = {
105
+ 'n_estimators': [25, 50, 100, 200],
106
+ 'learning_rate': [0.01, 0.05, 0.1, 0.2],
107
+ 'max_depth': [3, 5, 7, 10],
108
+ 'min_samples_split': [2, 5, 10],
109
+ 'min_samples_leaf': [1, 2, 4],
110
+ }
111
+ t0 = time.perf_counter()
112
+ sk5 = SkHRS(SkGB(random_state=42), pg5, n_candidates=256, cv=3, factor=3, scoring='accuracy', n_jobs=-1, random_state=42); sk5.fit(X_50k, y_cls_50k)
113
+ t_sk5 = time.perf_counter() - t0
114
+ t0 = time.perf_counter()
115
+ sp5 = SpHRS('GradientBoostingClassifier', pg5, n_candidates=256, cv=3, factor=3); sp5.fit(X_50k, y_cls_50k)
116
+ t_sp5 = time.perf_counter() - t0
117
+ print(f" sklearn: {t_sk5:.2f}s score={sk5.best_score_:.4f}")
118
+ print(f" SeraPlot: {t_sp5:.2f}s score={sp5.best_score_:.4f}")
119
+ print(f" Speedup: {t_sk5/t_sp5:.1f}x")
120
+
121
+ print(f"\n{'='*70}")
122
+ print(f" SUMMARY")
123
+ print(f"{'='*70}")
124
+ results = [
125
+ ("Lasso GS 45x5", t_sk, t_sp),
126
+ ("ElasticNet GS 75x5", t_sk2, t_sp2),
127
+ ("LogisticReg GS 18x5", t_sk3, t_sp3),
128
+ ("KNN GS 16x5", t_sk4, t_sp4),
129
+ ("HalvingRandom GB 256", t_sk5, t_sp5),
130
+ ]
131
+ for name, ts, tp in results:
132
+ print(f" {name:30s} sklearn={ts:7.2f}s seraplot={tp:7.2f}s speedup={ts/tp:7.1f}x")
133
+ avg_speedup = sum(ts/tp for _, ts, tp in results) / len(results)
134
+ print(f"\n Average speedup: {avg_speedup:.1f}x")
135
+
136
+
137
+ if __name__ == '__main__':
138
+ main()
@@ -1,10 +1,10 @@
1
1
  [build-system]
2
- requires = ["maturin>=0.15,<0.16"]
2
+ requires = ["maturin>=1.0"]
3
3
  build-backend = "maturin"
4
4
 
5
5
  [project]
6
6
  name = "seraplot"
7
- version = "2.3.62"
7
+ version = "2.3.68"
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,29 @@
1
+ from .seraplot import *
2
+ from .seraplot import __version__, Chart
3
+ import numpy as _np
4
+ import pandas as _pd
5
+
6
+ class LabelEncoder:
7
+ def __init__(self):
8
+ self.classes_ = None
9
+
10
+ def fit(self, y):
11
+ _, uniques = _pd.factorize(y, sort=True)
12
+ self.classes_ = _np.asarray(uniques)
13
+ return self
14
+
15
+ def transform(self, y):
16
+ y = _np.asarray(y)
17
+ idx = _np.searchsorted(self.classes_, y)
18
+ return idx.astype(_np.int32)
19
+
20
+ def fit_transform(self, y):
21
+ codes, uniques = _pd.factorize(y, sort=True)
22
+ self.classes_ = _np.asarray(uniques)
23
+ return codes.astype(_np.int32)
24
+
25
+ def inverse_transform(self, y):
26
+ return self.classes_[_np.asarray(y)]
27
+
28
+ def __repr__(self):
29
+ return "LabelEncoder()"