seraplot 2.3.82__tar.gz → 2.3.84__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 (406) hide show
  1. {seraplot-2.3.82 → seraplot-2.3.84}/Cargo.lock +1 -1
  2. {seraplot-2.3.82 → seraplot-2.3.84}/Cargo.toml +2 -10
  3. {seraplot-2.3.82 → seraplot-2.3.84}/PKG-INFO +1 -1
  4. {seraplot-2.3.82 → seraplot-2.3.84}/pyproject.toml +1 -1
  5. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/commands/charts.rs +94 -1
  6. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/commands/registry.rs +5 -0
  7. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/registry_macro.rs +94 -0
  8. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/hover.rs +5 -5
  9. {seraplot-2.3.82 → seraplot-2.3.84}/.gitignore +0 -0
  10. {seraplot-2.3.82 → seraplot-2.3.84}/05--Diabetes_SeraPlot.ipynb +0 -0
  11. {seraplot-2.3.82 → seraplot-2.3.84}/07--OpenFoodFacts_SeraPlot_Benchmark.ipynb +0 -0
  12. {seraplot-2.3.82 → seraplot-2.3.84}/README.md +0 -0
  13. {seraplot-2.3.82 → seraplot-2.3.84}/TEST_1M_Battle.ipynb +0 -0
  14. {seraplot-2.3.82 → seraplot-2.3.84}/bench_all.py +0 -0
  15. {seraplot-2.3.82 → seraplot-2.3.84}/bench_bigdata.py +0 -0
  16. {seraplot-2.3.82 → seraplot-2.3.84}/bench_full.py +0 -0
  17. {seraplot-2.3.82 → seraplot-2.3.84}/bench_issues.json +0 -0
  18. {seraplot-2.3.82 → seraplot-2.3.84}/bench_knn_sgd.py +0 -0
  19. {seraplot-2.3.82 → seraplot-2.3.84}/bench_perf.py +0 -0
  20. {seraplot-2.3.82 → seraplot-2.3.84}/bench_quick.py +0 -0
  21. {seraplot-2.3.82 → seraplot-2.3.84}/bench_quick2.py +0 -0
  22. {seraplot-2.3.82 → seraplot-2.3.84}/bench_scale.py +0 -0
  23. {seraplot-2.3.82 → seraplot-2.3.84}/bench_seraplot.py +0 -0
  24. {seraplot-2.3.82 → seraplot-2.3.84}/bench_sklearn.py +0 -0
  25. {seraplot-2.3.82 → seraplot-2.3.84}/bench_svc.py +0 -0
  26. {seraplot-2.3.82 → seraplot-2.3.84}/bench_svc2.py +0 -0
  27. {seraplot-2.3.82 → seraplot-2.3.84}/bench_test.py +0 -0
  28. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_gridsearch.py +0 -0
  29. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_gridsearch2.py +0 -0
  30. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_kmeans_heavy.ipynb +0 -0
  31. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_kmeans_openfoodfacts.ipynb +0 -0
  32. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_ml.ipynb +0 -0
  33. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_ml_openfoodfacts.ipynb +0 -0
  34. {seraplot-2.3.82 → seraplot-2.3.84}/benchmark_ml_out.ipynb +0 -0
  35. {seraplot-2.3.82 → seraplot-2.3.84}/build.log +0 -0
  36. {seraplot-2.3.82 → seraplot-2.3.84}/gen_bench_slides.py +0 -0
  37. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/1.png +0 -0
  38. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/2.png +0 -0
  39. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/3.png +0 -0
  40. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/4.png +0 -0
  41. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/5.png +0 -0
  42. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/6.png +0 -0
  43. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/7.png +0 -0
  44. {seraplot-2.3.82 → seraplot-2.3.84}/images/2d/8.png +0 -0
  45. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/1.png +0 -0
  46. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/2.png +0 -0
  47. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/3.png +0 -0
  48. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/4.png +0 -0
  49. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/5.png +0 -0
  50. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/6.png +0 -0
  51. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/7.png +0 -0
  52. {seraplot-2.3.82 → seraplot-2.3.84}/images/3d/8.png +0 -0
  53. {seraplot-2.3.82 → seraplot-2.3.84}/images/README.md +0 -0
  54. {seraplot-2.3.82 → seraplot-2.3.84}/images/benchmark/1.png +0 -0
  55. {seraplot-2.3.82 → seraplot-2.3.84}/images/benchmark/2.png +0 -0
  56. {seraplot-2.3.82 → seraplot-2.3.84}/images/benchmark/3.png +0 -0
  57. {seraplot-2.3.82 → seraplot-2.3.84}/images/logo.png +0 -0
  58. {seraplot-2.3.82 → seraplot-2.3.84}/kmeans_test.html +0 -0
  59. {seraplot-2.3.82 → seraplot-2.3.84}/publish_2378.log +0 -0
  60. {seraplot-2.3.82 → seraplot-2.3.84}/publish_log.txt +0 -0
  61. {seraplot-2.3.82 → seraplot-2.3.84}/python/seraplot/__init__.py +0 -0
  62. {seraplot-2.3.82 → seraplot-2.3.84}/python/seraplot/matplotlib.py +0 -0
  63. {seraplot-2.3.82 → seraplot-2.3.84}/python/seraplot/seraplot.cp311-win_amd64.pyd.old +0 -0
  64. {seraplot-2.3.82 → seraplot-2.3.84}/results_seraplot.json +0 -0
  65. {seraplot-2.3.82 → seraplot-2.3.84}/results_sklearn.json +0 -0
  66. {seraplot-2.3.82 → seraplot-2.3.84}/src/.github/workflows/mdbook.yml +0 -0
  67. {seraplot-2.3.82 → seraplot-2.3.84}/src/README.md +0 -0
  68. {seraplot-2.3.82 → seraplot-2.3.84}/src/asset/SVG World Map with labels.svg +0 -0
  69. {seraplot-2.3.82 → seraplot-2.3.84}/src/asset/logo.png +0 -0
  70. {seraplot-2.3.82 → seraplot-2.3.84}/src/asset/world.svg +0 -0
  71. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/builder_template.rs +0 -0
  72. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/chart_types.rs +0 -0
  73. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/commands/docs.rs +0 -0
  74. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/commands/ml.rs +0 -0
  75. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/commands/mod.rs +0 -0
  76. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/commands/native.rs +0 -0
  77. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/export_builder.rs +0 -0
  78. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/fast_export_c.rs +0 -0
  79. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/fast_render.rs +0 -0
  80. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/memory_pool.rs +0 -0
  81. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/mod.rs +0 -0
  82. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/unified_builder.rs +0 -0
  83. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/unified_config.rs +0 -0
  84. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/arena_alloc.rs +0 -0
  85. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/bitset.rs +0 -0
  86. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/compact_state.rs +0 -0
  87. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/data_processor.rs +0 -0
  88. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/image_processor.rs +0 -0
  89. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/lazy_builders.rs +0 -0
  90. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/memory_pool.rs +0 -0
  91. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/mod.rs +0 -0
  92. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/simd_ops.rs +0 -0
  93. {seraplot-2.3.82 → seraplot-2.3.84}/src/bindings/utils/state_export.rs +0 -0
  94. {seraplot-2.3.82 → seraplot-2.3.84}/src/book.toml +0 -0
  95. {seraplot-2.3.82 → seraplot-2.3.84}/src/core/builders.rs +0 -0
  96. {seraplot-2.3.82 → seraplot-2.3.84}/src/core/math.rs +0 -0
  97. {seraplot-2.3.82 → seraplot-2.3.84}/src/core/mod.rs +0 -0
  98. {seraplot-2.3.82 → seraplot-2.3.84}/src/data/conversion.rs +0 -0
  99. {seraplot-2.3.82 → seraplot-2.3.84}/src/data/index.rs +0 -0
  100. {seraplot-2.3.82 → seraplot-2.3.84}/src/data/loader.rs +0 -0
  101. {seraplot-2.3.82 → seraplot-2.3.84}/src/data/mod.rs +0 -0
  102. {seraplot-2.3.82 → seraplot-2.3.84}/src/data/processor.rs +0 -0
  103. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/SUMMARY.md +0 -0
  104. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/api/index.md +0 -0
  105. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/area.md +0 -0
  106. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/bar.md +0 -0
  107. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/boxplot.md +0 -0
  108. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/bubble.md +0 -0
  109. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/bullet.md +0 -0
  110. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/candlestick.md +0 -0
  111. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/donut.md +0 -0
  112. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/dumbbell.md +0 -0
  113. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/funnel.md +0 -0
  114. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/gauge.md +0 -0
  115. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/grid.md +0 -0
  116. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/grouped-bar.md +0 -0
  117. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/hbar.md +0 -0
  118. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/heatmap.md +0 -0
  119. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/histogram-overlay.md +0 -0
  120. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/histogram.md +0 -0
  121. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/index.md +0 -0
  122. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/kde.md +0 -0
  123. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/line.md +0 -0
  124. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/lollipop.md +0 -0
  125. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/multiline.md +0 -0
  126. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/parallel.md +0 -0
  127. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/pie.md +0 -0
  128. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/radar.md +0 -0
  129. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/ridgeline.md +0 -0
  130. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/scatter.md +0 -0
  131. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/slideshow.md +0 -0
  132. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/slope.md +0 -0
  133. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/stacked-bar.md +0 -0
  134. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/sunburst.md +0 -0
  135. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/treemap.md +0 -0
  136. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/violin.md +0 -0
  137. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/waterfall.md +0 -0
  138. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/2d/wordcloud.md +0 -0
  139. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/bar3d.md +0 -0
  140. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/bubble3d.md +0 -0
  141. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/candlestick3d.md +0 -0
  142. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/dumbbell3d.md +0 -0
  143. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/funnel3d.md +0 -0
  144. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/globe3d.md +0 -0
  145. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/heatmap3d.md +0 -0
  146. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/index.md +0 -0
  147. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/kde3d.md +0 -0
  148. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/line3d.md +0 -0
  149. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/lollipop3d.md +0 -0
  150. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/pie3d.md +0 -0
  151. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/radar3d.md +0 -0
  152. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/ridgeline3d.md +0 -0
  153. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/scatter3d.md +0 -0
  154. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/stacked-bar3d.md +0 -0
  155. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/sunburst3d.md +0 -0
  156. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/3d/violin3d.md +0 -0
  157. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/map/bubble-map.md +0 -0
  158. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/map/choropleth.md +0 -0
  159. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/charts/map/index.md +0 -0
  160. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/config/auto-display.md +0 -0
  161. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/config/background.md +0 -0
  162. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/config/hover.md +0 -0
  163. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/config/palette.md +0 -0
  164. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/getting-started/chart-methods.md +0 -0
  165. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/getting-started/chart-object.md +0 -0
  166. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/getting-started/installation.md +0 -0
  167. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/getting-started/quickstart.md +0 -0
  168. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/introduction.md +0 -0
  169. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/adaboost.md +0 -0
  170. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/bayes-index.md +0 -0
  171. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/clustering-index.md +0 -0
  172. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/dbscan-class.md +0 -0
  173. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/dbscan.md +0 -0
  174. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/dbscan3d.md +0 -0
  175. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/decision-tree.md +0 -0
  176. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/decomposition-index.md +0 -0
  177. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/decomposition.md +0 -0
  178. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/elastic-net.md +0 -0
  179. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/evaluation-index.md +0 -0
  180. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/gradient-boosting.md +0 -0
  181. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/grid-search.md +0 -0
  182. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/index.md +0 -0
  183. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/kmeans-class.md +0 -0
  184. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/kmeans.md +0 -0
  185. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/knn.md +0 -0
  186. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/lasso.md +0 -0
  187. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/linear-index.md +0 -0
  188. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/linear-regression.md +0 -0
  189. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/logistic-regression.md +0 -0
  190. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/metrics.md +0 -0
  191. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/naive-bayes.md +0 -0
  192. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/neighbors-index.md +0 -0
  193. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/preprocessing-index.md +0 -0
  194. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/preprocessing.md +0 -0
  195. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/random-forest.md +0 -0
  196. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/ridge.md +0 -0
  197. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/selection-index.md +0 -0
  198. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/sgd.md +0 -0
  199. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/svm-index.md +0 -0
  200. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/svm.md +0 -0
  201. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/train-test-split.md +0 -0
  202. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/ml/tree-index.md +0 -0
  203. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/area.html +0 -0
  204. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bar.html +0 -0
  205. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bar3d.html +0 -0
  206. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bench-matplotlib.html +0 -0
  207. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bench-plotly.html +0 -0
  208. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bench-seraplot.html +0 -0
  209. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/boxplot.html +0 -0
  210. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bubble-map.html +0 -0
  211. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bubble.html +0 -0
  212. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bubble3d.html +0 -0
  213. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/bullet.html +0 -0
  214. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/candlestick.html +0 -0
  215. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/candlestick3d.html +0 -0
  216. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/choropleth.html +0 -0
  217. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/dbscan-class.html +0 -0
  218. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/dbscan.html +0 -0
  219. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/dbscan3d.html +0 -0
  220. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/donut.html +0 -0
  221. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/dumbbell.html +0 -0
  222. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/dumbbell3d.html +0 -0
  223. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/funnel.html +0 -0
  224. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/funnel3d.html +0 -0
  225. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/gauge.html +0 -0
  226. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/globe3d.html +0 -0
  227. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/grid.html +0 -0
  228. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/grouped-bar.html +0 -0
  229. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/hbar.html +0 -0
  230. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/heatmap.html +0 -0
  231. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/heatmap3d.html +0 -0
  232. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/histogram-overlay.html +0 -0
  233. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/histogram.html +0 -0
  234. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/kde.html +0 -0
  235. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/kde3d.html +0 -0
  236. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/line.html +0 -0
  237. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/line3d.html +0 -0
  238. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/lollipop.html +0 -0
  239. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/lollipop3d.html +0 -0
  240. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/multiline.html +0 -0
  241. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/parallel.html +0 -0
  242. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/pie.html +0 -0
  243. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/pie3d.html +0 -0
  244. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/radar.html +0 -0
  245. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/radar3d.html +0 -0
  246. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/ridgeline.html +0 -0
  247. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/ridgeline3d.html +0 -0
  248. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/scatter.html +0 -0
  249. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/scatter3d.html +0 -0
  250. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/slideshow.html +0 -0
  251. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/slope.html +0 -0
  252. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/stacked-bar.html +0 -0
  253. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/stacked-bar3d.html +0 -0
  254. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/sunburst.html +0 -0
  255. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/sunburst3d.html +0 -0
  256. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/treemap.html +0 -0
  257. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/violin.html +0 -0
  258. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/violin3d.html +0 -0
  259. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/waterfall.html +0 -0
  260. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/previews/wordcloud.html +0 -0
  261. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/theme/custom.css +0 -0
  262. {seraplot-2.3.82 → seraplot-2.3.84}/src/docs/theme/lang-switcher.js +0 -0
  263. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/assets.rs +0 -0
  264. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/fast_builders.rs +0 -0
  265. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/fast_exporter.rs +0 -0
  266. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/html_export.rs +0 -0
  267. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/html_template.rs +0 -0
  268. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/js_3d.rs +0 -0
  269. {seraplot-2.3.82 → seraplot-2.3.84}/src/html/mod.rs +0 -0
  270. {seraplot-2.3.82 → seraplot-2.3.84}/src/lib.rs +0 -0
  271. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/cache.rs +0 -0
  272. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/decomposition/mod.rs +0 -0
  273. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/decomposition/pca.rs +0 -0
  274. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linalg.rs +0 -0
  275. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/elastic_net.rs +0 -0
  276. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/lasso.rs +0 -0
  277. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/logistic.rs +0 -0
  278. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/mod.rs +0 -0
  279. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/ols.rs +0 -0
  280. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/ridge.rs +0 -0
  281. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/linear/sgd.rs +0 -0
  282. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/metrics/classification.rs +0 -0
  283. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/metrics/mod.rs +0 -0
  284. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/metrics/regression.rs +0 -0
  285. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/mod.rs +0 -0
  286. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/model_selection/cross_val.rs +0 -0
  287. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/model_selection/grid_search.rs +0 -0
  288. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/model_selection/mod.rs +0 -0
  289. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/model_selection/split.rs +0 -0
  290. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/naive_bayes/bernoulli.rs +0 -0
  291. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/naive_bayes/gaussian.rs +0 -0
  292. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/naive_bayes/mod.rs +0 -0
  293. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/naive_bayes/multinomial.rs +0 -0
  294. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/neighbors/knn.rs +0 -0
  295. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/neighbors/mod.rs +0 -0
  296. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/preprocessing/encoders.rs +0 -0
  297. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/preprocessing/mod.rs +0 -0
  298. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/preprocessing/scalers.rs +0 -0
  299. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/svm/mod.rs +0 -0
  300. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/svm/svm.rs +0 -0
  301. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/tree/adaboost.rs +0 -0
  302. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/tree/decision_tree.rs +0 -0
  303. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/tree/decision_tree_backup.rs +0 -0
  304. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/tree/gradient_boosting.rs +0 -0
  305. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/tree/mod.rs +0 -0
  306. {seraplot-2.3.82 → seraplot-2.3.84}/src/ml/tree/random_forest.rs +0 -0
  307. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/camera.rs +0 -0
  308. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/canvas.rs +0 -0
  309. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/containers_3d.rs +0 -0
  310. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/controller/chart_controller.rs +0 -0
  311. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/controller/mod.rs +0 -0
  312. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/controller/plot_3d_controller.rs +0 -0
  313. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/_3d/bar_3d.rs +0 -0
  314. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/_3d/line_3d.rs +0 -0
  315. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/_3d/mod.rs +0 -0
  316. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/_3d/plot_3d_types.rs +0 -0
  317. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/_3d/scatter_3d.rs +0 -0
  318. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/bar.rs +0 -0
  319. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/chart.rs +0 -0
  320. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/kmeans.rs +0 -0
  321. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/line.rs +0 -0
  322. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/mod.rs +0 -0
  323. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/scatter.rs +0 -0
  324. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/default/svg.rs +0 -0
  325. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/generic.rs +0 -0
  326. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/_3d/globe.rs +0 -0
  327. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/_3d/globe_html.rs +0 -0
  328. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/_3d/globe_types.rs +0 -0
  329. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/_3d/mod.rs +0 -0
  330. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/bubble_map.rs +0 -0
  331. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/chart.rs +0 -0
  332. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/choropleth.rs +0 -0
  333. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/mod.rs +0 -0
  334. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/svg_parser.rs +0 -0
  335. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/map/world_data.rs +0 -0
  336. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/mod.rs +0 -0
  337. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/projection.rs +0 -0
  338. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/renderers.rs +0 -0
  339. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/scale_renderer.rs +0 -0
  340. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/seaborn/_3d/mod.rs +0 -0
  341. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/seaborn/_3d/plot_3d_types.rs +0 -0
  342. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/seaborn/chart.rs +0 -0
  343. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/seaborn/mod.rs +0 -0
  344. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/candlestick3d.rs +0 -0
  345. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/dumbbell3d.rs +0 -0
  346. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/funnel3d.rs +0 -0
  347. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/heatmap3d.rs +0 -0
  348. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/kde3d.rs +0 -0
  349. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/lollipop3d.rs +0 -0
  350. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/mod.rs +0 -0
  351. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/pie3d.rs +0 -0
  352. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/plot_3d_types.rs +0 -0
  353. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/radar3d.rs +0 -0
  354. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/ridgeline3d.rs +0 -0
  355. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/stacked_bar3d.rs +0 -0
  356. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/sunburst3d.rs +0 -0
  357. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/_3d/violin3d.rs +0 -0
  358. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/area.rs +0 -0
  359. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/boxplot.rs +0 -0
  360. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/bubble.rs +0 -0
  361. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/bullet.rs +0 -0
  362. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/candlestick.rs +0 -0
  363. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/common.rs +0 -0
  364. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/dumbbell.rs +0 -0
  365. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/funnel.rs +0 -0
  366. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/gauge.rs +0 -0
  367. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/grouped_bar.rs +0 -0
  368. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/heatmap.rs +0 -0
  369. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/histogram.rs +0 -0
  370. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/kde.rs +0 -0
  371. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/lollipop.rs +0 -0
  372. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/mod.rs +0 -0
  373. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/multiline.rs +0 -0
  374. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/parallel.rs +0 -0
  375. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/pie.rs +0 -0
  376. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/radar.rs +0 -0
  377. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/ridgeline.rs +0 -0
  378. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/slope.rs +0 -0
  379. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/sunburst.rs +0 -0
  380. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/treemap.rs +0 -0
  381. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/violin.rs +0 -0
  382. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/waterfall.rs +0 -0
  383. {seraplot-2.3.82 → seraplot-2.3.84}/src/plot/statistical/wordcloud.rs +0 -0
  384. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/cache.rs +0 -0
  385. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/chart.rs +0 -0
  386. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/gui.rs +0 -0
  387. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/hybrid.rs +0 -0
  388. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/manager/button_manager.rs +0 -0
  389. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/manager/mod.rs +0 -0
  390. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/mod.rs +0 -0
  391. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/render/advanced_render.rs +0 -0
  392. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/render/fast_render_gui.rs +0 -0
  393. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/render/mod.rs +0 -0
  394. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/render/pipeline.rs +0 -0
  395. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/render/viewer_3d.rs +0 -0
  396. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/render/wiki_viewer.rs +0 -0
  397. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/utils/image_loader.rs +0 -0
  398. {seraplot-2.3.82 → seraplot-2.3.84}/src/viewer/utils/mod.rs +0 -0
  399. {seraplot-2.3.82 → seraplot-2.3.84}/src/wiki/api.rs +0 -0
  400. {seraplot-2.3.82 → seraplot-2.3.84}/src/wiki/extractor.rs +0 -0
  401. {seraplot-2.3.82 → seraplot-2.3.84}/src/wiki/language.rs +0 -0
  402. {seraplot-2.3.82 → seraplot-2.3.84}/src/wiki/macros.rs +0 -0
  403. {seraplot-2.3.82 → seraplot-2.3.84}/src/wiki/metadata.rs +0 -0
  404. {seraplot-2.3.82 → seraplot-2.3.84}/src/wiki/mod.rs +0 -0
  405. {seraplot-2.3.82 → seraplot-2.3.84}/test_accuracy.py +0 -0
  406. {seraplot-2.3.82 → seraplot-2.3.84}/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.82"
3474
+ version = "2.3.84"
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.82"
3
+ version = "2.3.84"
4
4
  edition = "2021"
5
5
  authors = ["feur25"]
6
6
  description = "Rust data visualization framework - The modern Plotly alternative"
@@ -37,21 +37,13 @@ numpy = { version = "0.21", optional = true }
37
37
  criterion = "0.5"
38
38
 
39
39
  [features]
40
- default = []
40
+ default = ["python"]
41
41
  python = ["dep:pyo3", "dep:numpy", "dep:egui", "dep:eframe", "dep:egui_plot", "dep:reqwest", "dep:tokio"]
42
42
  js = ["dep:wasm-bindgen", "dep:js-sys", "dep:getrandom", "dep:egui"]
43
43
  ffi = ["dep:egui"]
44
44
  all = ["python"]
45
45
  pyo3 = ["dep:pyo3"]
46
46
 
47
- [[example]]
48
- name = "csv_test"
49
- path = "examples/csv_test.rs"
50
-
51
- [[example]]
52
- name = "csv_viewer"
53
- path = "examples/csv_viewer.rs"
54
-
55
47
  [profile.release]
56
48
  lto = "thin"
57
49
  codegen-units = 1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seraplot
3
- Version: 2.3.82
3
+ Version: 2.3.84
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.82"
7
+ version = "2.3.84"
8
8
  description = "Rust data visualization framework - The modern Plotly alternative"
9
9
  readme = "README.md"
10
10
  readme-content-type = "text/markdown"
@@ -1305,7 +1305,7 @@ pub fn build_grid(input: &str) -> String {
1305
1305
  let charts = a.charts.unwrap_or_default();
1306
1306
  let cols = o.cols.unwrap_or(2).max(1);
1307
1307
  let gap = o.gap.unwrap_or(16);
1308
- let bg_color = o.background.clone().or_else(get_global_bg).unwrap_or_else(|| "#f0f2f5".to_string());
1308
+ let bg_color = o.background.clone().or_else(get_global_bg).unwrap_or_else(|| "transparent".to_string());
1309
1309
  let bg_color = bg_color.as_str();
1310
1310
  let cell_height = o.cell_height.unwrap_or(520);
1311
1311
  let mut buf = format!(
@@ -1490,6 +1490,99 @@ pub fn themes(_: &str) -> String {
1490
1490
  "[\"dark\",\"light\",\"scientific\",\"apple\",\"notion\",\"minimal\",\"neon\"]".to_string()
1491
1491
  }
1492
1492
 
1493
+ pub fn export_svg(input: &str) -> String {
1494
+ #[derive(serde::Deserialize)]
1495
+ struct In { html: String }
1496
+ let v: In = match serde_json::from_str(input) { Ok(v) => v, Err(_) => return String::new() };
1497
+ let h = v.html;
1498
+ let start = match h.find("<svg") { Some(i) => i, None => return String::new() };
1499
+ let end = match h[start..].find("</svg>") { Some(i) => start + i + 6, None => return String::new() };
1500
+ h[start..end].to_string()
1501
+ }
1502
+
1503
+ pub fn export_data_url(input: &str) -> String {
1504
+ use base64::Engine;
1505
+ let svg = export_svg(input);
1506
+ if svg.is_empty() { return String::new(); }
1507
+ let b64 = base64::engine::general_purpose::STANDARD.encode(svg.as_bytes());
1508
+ format!("data:image/svg+xml;base64,{b64}")
1509
+ }
1510
+
1511
+ pub fn export_html_file(input: &str) -> String {
1512
+ #[derive(serde::Deserialize)]
1513
+ struct In { html: String, path: String }
1514
+ let v: In = match serde_json::from_str(input) { Ok(v) => v, Err(_) => return "{\"ok\":false}".to_string() };
1515
+ match std::fs::write(&v.path, v.html) {
1516
+ Ok(_) => format!("{{\"ok\":true,\"path\":{}}}", serde_json::to_string(&v.path).unwrap_or_else(|_| "\"\"".into())),
1517
+ Err(e) => format!("{{\"ok\":false,\"error\":{}}}", serde_json::to_string(&e.to_string()).unwrap_or_else(|_| "\"\"".into())),
1518
+ }
1519
+ }
1520
+
1521
+ pub fn chart_append(input: &str) -> String {
1522
+ #[derive(serde::Deserialize)]
1523
+ struct In { kind: String, x: Option<Vec<f64>>, y: Option<Vec<f64>>, title: Option<String>, max_points: Option<usize>, color_hex: Option<u32>, width: Option<i32>, height: Option<i32>, prev_x: Option<Vec<f64>>, prev_y: Option<Vec<f64>> }
1524
+ let v: In = match serde_json::from_str(input) { Ok(v) => v, Err(_) => return String::new() };
1525
+ let mut xs = v.prev_x.unwrap_or_default();
1526
+ let mut ys = v.prev_y.unwrap_or_default();
1527
+ if let Some(nx) = v.x { xs.extend(nx); }
1528
+ if let Some(ny) = v.y { ys.extend(ny); }
1529
+ if let Some(m) = v.max_points {
1530
+ if xs.len() > m { let cut = xs.len() - m; xs.drain(..cut); }
1531
+ if ys.len() > m { let cut = ys.len() - m; ys.drain(..cut); }
1532
+ }
1533
+ let title = v.title.unwrap_or_default();
1534
+ let color = v.color_hex.unwrap_or(0x6366F1);
1535
+ let w = v.width.unwrap_or(900);
1536
+ let h = v.height.unwrap_or(420);
1537
+ let payload = serde_json::json!({"title":title,"x":xs,"y":ys,"color_hex":color,"width":w,"height":h,"show_points":true});
1538
+ let html = match v.kind.as_str() {
1539
+ "scatter" => build_scatter_chart(&payload.to_string()),
1540
+ _ => build_line_chart(&serde_json::json!({"title":title,"labels":xs.iter().map(|v|v.to_string()).collect::<Vec<_>>(),"values":ys,"color_hex":color,"width":w,"height":h,"show_points":true}).to_string()),
1541
+ };
1542
+ serde_json::json!({"html":html,"x":xs,"y":ys}).to_string()
1543
+ }
1544
+
1545
+ pub fn ml_save_model(input: &str) -> String {
1546
+ #[derive(serde::Deserialize)]
1547
+ struct In { kind: String, state: serde_json::Value, path: Option<String> }
1548
+ let v: In = match serde_json::from_str(input) { Ok(v) => v, Err(_) => return "{\"ok\":false}".to_string() };
1549
+ let envelope = serde_json::json!({"seraplot_model_v":1,"kind":v.kind,"state":v.state});
1550
+ let s = envelope.to_string();
1551
+ if let Some(p) = v.path {
1552
+ if let Err(e) = std::fs::write(&p, &s) {
1553
+ return format!("{{\"ok\":false,\"error\":{}}}", serde_json::to_string(&e.to_string()).unwrap_or_else(|_| "\"\"".into()));
1554
+ }
1555
+ return format!("{{\"ok\":true,\"path\":{},\"size\":{}}}", serde_json::to_string(&p).unwrap_or_else(|_| "\"\"".into()), s.len());
1556
+ }
1557
+ serde_json::json!({"ok":true,"data":s}).to_string()
1558
+ }
1559
+
1560
+ pub fn ml_load_model(input: &str) -> String {
1561
+ #[derive(serde::Deserialize)]
1562
+ struct In { path: Option<String>, data: Option<String> }
1563
+ let v: In = match serde_json::from_str(input) { Ok(v) => v, Err(_) => return "{\"ok\":false}".to_string() };
1564
+ let raw = if let Some(p) = v.path {
1565
+ match std::fs::read_to_string(&p) { Ok(s) => s, Err(e) => return format!("{{\"ok\":false,\"error\":{}}}", serde_json::to_string(&e.to_string()).unwrap_or_else(|_| "\"\"".into())) }
1566
+ } else if let Some(d) = v.data { d } else { return "{\"ok\":false,\"error\":\"need path or data\"}".to_string() };
1567
+ match serde_json::from_str::<serde_json::Value>(&raw) {
1568
+ Ok(j) => serde_json::json!({"ok":true,"model":j}).to_string(),
1569
+ Err(e) => format!("{{\"ok\":false,\"error\":{}}}", serde_json::to_string(&e.to_string()).unwrap_or_else(|_| "\"\"".into())),
1570
+ }
1571
+ }
1572
+
1573
+ pub fn chart_info(input: &str) -> String {
1574
+ #[derive(serde::Deserialize)]
1575
+ struct In { html: String }
1576
+ let v: In = match serde_json::from_str(input) { Ok(v) => v, Err(_) => return "{}".to_string() };
1577
+ let h = v.html;
1578
+ let len = h.len();
1579
+ let n_paths = h.matches("<path").count();
1580
+ let n_rects = h.matches("<rect").count();
1581
+ let n_circles = h.matches("<circle").count();
1582
+ let has_svg = h.contains("<svg");
1583
+ serde_json::json!({"size":len,"paths":n_paths,"rects":n_rects,"circles":n_circles,"has_svg":has_svg}).to_string()
1584
+ }
1585
+
1493
1586
  pub fn bench_chart_value(s: &str) -> bool {
1494
1587
  serde_json::from_str::<serde_json::Value>(s).is_ok()
1495
1588
  }
@@ -34,6 +34,11 @@ pub fn register_submodules(py: Python<'_>, m: &PyModule) -> PyResult<()> {
34
34
  m.add_function(wrap_pyfunction!(build_hover_json, m)?)?;
35
35
  m.add_function(wrap_pyfunction!(plot_chart, m)?)?;
36
36
  m.add_function(wrap_pyfunction!(savefig, m)?)?;
37
+ m.add_function(wrap_pyfunction!(export_svg, m)?)?;
38
+ m.add_function(wrap_pyfunction!(export_data_url, m)?)?;
39
+ m.add_function(wrap_pyfunction!(export_png, m)?)?;
40
+ m.add_function(wrap_pyfunction!(chart_info, m)?)?;
41
+ m.add_class::<LiveStream>()?;
37
42
 
38
43
  for (alias, canonical) in crate::bindings::registry_macro::CHART_ALIASES {
39
44
  if let Ok(func) = m.getattr(*canonical) {
@@ -180,6 +180,13 @@ macro_rules! for_each_fn {
180
180
  $mac!(themes, "themes");
181
181
  $mac!(set_global_background, "setGlobalBackground");
182
182
  $mac!(reset_global_background, "resetGlobalBackground");
183
+ $mac!(export_svg, "exportSvg");
184
+ $mac!(export_data_url, "exportDataUrl");
185
+ $mac!(export_html_file, "exportHtmlFile");
186
+ $mac!(chart_append, "chartAppend");
187
+ $mac!(ml_save_model, "mlSaveModel");
188
+ $mac!(ml_load_model, "mlLoadModel");
189
+ $mac!(chart_info, "chartInfo");
183
190
  };
184
191
  }
185
192
 
@@ -525,5 +532,92 @@ macro_rules! impl_python_bindings {
525
532
  pub fn savefig(chart: &crate::Chart, path: &str) -> PyResult<()> {
526
533
  std::fs::write(path, &chart.html).map_err(|e| pyo3::exceptions::PyIOError::new_err(e.to_string()))
527
534
  }
535
+
536
+ #[pyfunction]
537
+ pub fn export_svg(chart: &crate::Chart) -> String {
538
+ crate::bindings::commands::charts::export_svg(
539
+ &serde_json::json!({"html": chart.html}).to_string()
540
+ )
541
+ }
542
+
543
+ #[pyfunction]
544
+ pub fn export_data_url(chart: &crate::Chart) -> String {
545
+ crate::bindings::commands::charts::export_data_url(
546
+ &serde_json::json!({"html": chart.html}).to_string()
547
+ )
548
+ }
549
+
550
+ #[pyfunction]
551
+ #[pyo3(signature = (chart, path))]
552
+ pub fn export_png(chart: &crate::Chart, path: &str) -> PyResult<()> {
553
+ let svg = crate::bindings::commands::charts::export_svg(
554
+ &serde_json::json!({"html": chart.html}).to_string()
555
+ );
556
+ if svg.is_empty() {
557
+ return Err(pyo3::exceptions::PyValueError::new_err("no <svg> in chart html"));
558
+ }
559
+ let p = std::path::Path::new(path);
560
+ let target = if matches!(p.extension().and_then(|e| e.to_str()), Some("svg")) {
561
+ path.to_string()
562
+ } else {
563
+ let mut q = std::path::PathBuf::from(path);
564
+ q.set_extension("svg");
565
+ q.to_string_lossy().to_string()
566
+ };
567
+ std::fs::write(&target, svg).map_err(|e| pyo3::exceptions::PyIOError::new_err(e.to_string()))
568
+ }
569
+
570
+ #[pyfunction]
571
+ pub fn chart_info(chart: &crate::Chart) -> String {
572
+ crate::bindings::commands::charts::chart_info(
573
+ &serde_json::json!({"html": chart.html}).to_string()
574
+ )
575
+ }
576
+
577
+ #[pyclass(module = "seraplot", name = "LiveStream")]
578
+ pub struct LiveStream {
579
+ kind: String,
580
+ xs: Vec<f64>,
581
+ ys: Vec<f64>,
582
+ title: String,
583
+ max_points: usize,
584
+ color_hex: u32,
585
+ width: i32,
586
+ height: i32,
587
+ }
588
+
589
+ #[pymethods]
590
+ impl LiveStream {
591
+ #[new]
592
+ #[pyo3(signature = (kind="line", title="", max_points=500, color_hex=0x6366F1_u32, width=900, height=420))]
593
+ pub fn py_new(kind: &str, title: &str, max_points: usize, color_hex: u32, width: i32, height: i32) -> Self {
594
+ Self { kind: kind.to_string(), xs: Vec::new(), ys: Vec::new(), title: title.to_string(), max_points, color_hex, width, height }
595
+ }
596
+ #[pyo3(signature = (x, y))]
597
+ pub fn push(&mut self, x: f64, y: f64) {
598
+ self.xs.push(x); self.ys.push(y);
599
+ if self.xs.len() > self.max_points { let cut = self.xs.len() - self.max_points; self.xs.drain(..cut); }
600
+ if self.ys.len() > self.max_points { let cut = self.ys.len() - self.max_points; self.ys.drain(..cut); }
601
+ }
602
+ #[pyo3(signature = (xs, ys))]
603
+ pub fn extend(&mut self, xs: Vec<f64>, ys: Vec<f64>) {
604
+ self.xs.extend(xs); self.ys.extend(ys);
605
+ if self.xs.len() > self.max_points { let cut = self.xs.len() - self.max_points; self.xs.drain(..cut); }
606
+ if self.ys.len() > self.max_points { let cut = self.ys.len() - self.max_points; self.ys.drain(..cut); }
607
+ }
608
+ pub fn render(&self) -> crate::Chart {
609
+ let payload = serde_json::json!({
610
+ "kind": self.kind, "title": self.title, "color_hex": self.color_hex,
611
+ "width": self.width, "height": self.height,
612
+ "prev_x": self.xs, "prev_y": self.ys
613
+ });
614
+ let out = crate::bindings::commands::charts::chart_append(&payload.to_string());
615
+ let v: serde_json::Value = serde_json::from_str(&out).unwrap_or(serde_json::Value::Null);
616
+ let html = v.get("html").and_then(|h| h.as_str()).unwrap_or("").to_string();
617
+ crate::Chart::new(html)
618
+ }
619
+ pub fn clear(&mut self) { self.xs.clear(); self.ys.clear(); }
620
+ #[getter] pub fn n(&self) -> usize { self.xs.len() }
621
+ }
528
622
  };
529
623
  }
@@ -112,7 +112,7 @@ pub fn parse_hover_json(json: &str) -> Vec<HoverSlot> {
112
112
  pub const HOVER_CSS: &str = "";
113
113
  pub const HOVER_JS: &str = "";
114
114
 
115
- pub const DEFAULT_BG: &str = "#fff";
115
+ pub const DEFAULT_BG: &str = "transparent";
116
116
 
117
117
  #[inline]
118
118
  fn resolve_named_color(c: &str) -> &str {
@@ -139,7 +139,7 @@ pub fn apply_bg(html: String, bg: Option<&str>) -> String {
139
139
  Some(c) => c,
140
140
  };
141
141
  let color = resolve_named_color(raw);
142
- let h = html.replacen(".sp-bg{fill:#fff}", &format!(".sp-bg{{fill:{color}}}"), 1);
142
+ let h = html.replacen(".sp-bg{fill:transparent}", &format!(".sp-bg{{fill:{color}}}"), 1);
143
143
  h.replacen("</head>", &format!("<style>html,body{{background:{color}!important}}</style></head>"), 1)
144
144
  }
145
145
 
@@ -428,7 +428,7 @@ pub fn build_chart_html(title: &str, svg: &str, hover_json: &str) -> String {
428
428
  buf.extend_from_slice(html_attr_esc(title).as_bytes());
429
429
  buf.extend_from_slice(b"</title>");
430
430
  buf.extend_from_slice(CSS.as_bytes());
431
- buf.extend_from_slice(b"<style>body{margin:0;background:#fff;display:flex;justify-content:center;padding:0}@keyframes sp-i{from{opacity:0;transform:translateY(8px) scale(.94)}}@keyframes sp-bar{from{opacity:0;transform:scaleY(0)}}@keyframes sp-pop{0%{opacity:0;transform:scale(0)}70%{transform:scale(1.08)}100%{opacity:1;transform:scale(1)}}@keyframes sp-arc{from{opacity:0;transform:scale(.82) rotate(-6deg)}}@keyframes sp-fn{from{opacity:0;transform:scaleX(.7) translateY(8px)}}svg rect[data-idx]{transform-box:fill-box;transform-origin:bottom center;animation:sp-bar .5s cubic-bezier(.22,.61,.36,1) both}svg circle[data-idx]{transform-box:fill-box;transform-origin:center;animation:sp-pop .42s cubic-bezier(.34,1.56,.64,1) both}svg path[data-idx]{transform-box:fill-box;transform-origin:center;animation:sp-arc .48s cubic-bezier(.22,.61,.36,1) both}svg polygon[data-idx]{transform-box:fill-box;transform-origin:center;animation:sp-fn .48s cubic-bezier(.22,.61,.36,1) both}svg line[data-idx]{animation:sp-i .45s cubic-bezier(.22,.61,.36,1) both}svg rect[data-idx]:hover{transform:scaleY(1.03);filter:brightness(1.12) saturate(1.1)}svg circle[data-idx]:hover{transform:scale(1.3);filter:brightness(1.15)}svg path[data-idx]:hover{filter:brightness(1.1) drop-shadow(0 2px 8px rgba(0,0,0,.2))}.sp-bg{fill:#fff}</style></head><body>");
431
+ buf.extend_from_slice(b"<style>body{margin:0;background:transparent;display:flex;justify-content:center;padding:0}@keyframes sp-i{from{opacity:0;transform:translateY(8px) scale(.94)}}@keyframes sp-bar{from{opacity:0;transform:scaleY(0)}}@keyframes sp-pop{0%{opacity:0;transform:scale(0)}70%{transform:scale(1.08)}100%{opacity:1;transform:scale(1)}}@keyframes sp-arc{from{opacity:0;transform:scale(.82) rotate(-6deg)}}@keyframes sp-fn{from{opacity:0;transform:scaleX(.7) translateY(8px)}}svg rect[data-idx]{transform-box:fill-box;transform-origin:bottom center;animation:sp-bar .5s cubic-bezier(.22,.61,.36,1) both}svg circle[data-idx]{transform-box:fill-box;transform-origin:center;animation:sp-pop .42s cubic-bezier(.34,1.56,.64,1) both}svg path[data-idx]{transform-box:fill-box;transform-origin:center;animation:sp-arc .48s cubic-bezier(.22,.61,.36,1) both}svg polygon[data-idx]{transform-box:fill-box;transform-origin:center;animation:sp-fn .48s cubic-bezier(.22,.61,.36,1) both}svg line[data-idx]{animation:sp-i .45s cubic-bezier(.22,.61,.36,1) both}svg rect[data-idx]:hover{transform:scaleY(1.03);filter:brightness(1.12) saturate(1.1)}svg circle[data-idx]:hover{transform:scale(1.3);filter:brightness(1.15)}svg path[data-idx]:hover{filter:brightness(1.1) drop-shadow(0 2px 8px rgba(0,0,0,.2))}.sp-bg{fill:transparent}</style></head><body>");
432
432
  buf.extend_from_slice(b"<div id=\"");
433
433
  push_pid(&mut buf, id);
434
434
  buf.extend_from_slice(b"\" style=\"position:relative;display:inline-block;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.07),0 0 0 1px rgba(0,0,0,.04)\">");
@@ -519,7 +519,7 @@ pub fn html_prefix(buf: &mut Vec<u8>, title: &str, id: u64) {
519
519
  ".sp-cls-x{cursor:pointer;color:#94a3b8;margin-left:6px;font-size:13px}",
520
520
  ".sp-cls-x:hover{color:#f87171}",
521
521
  "</style>",
522
- "<style>body{margin:0;background:#fff;display:flex;justify-content:center;padding:0}",
522
+ "<style>body{margin:0;background:transparent;display:flex;justify-content:center;padding:0}",
523
523
  "@keyframes sp-i{from{opacity:0;transform:translateY(8px) scale(.94)}}",
524
524
  "@keyframes sp-bar{from{opacity:0;transform:scaleY(0)}}",
525
525
  "@keyframes sp-pop{0%{opacity:0;transform:scale(0)}70%{transform:scale(1.08)}100%{opacity:1;transform:scale(1)}}",
@@ -533,7 +533,7 @@ pub fn html_prefix(buf: &mut Vec<u8>, title: &str, id: u64) {
533
533
  "svg rect[data-idx]:hover{transform:scaleY(1.03);filter:brightness(1.12) saturate(1.1)}",
534
534
  "svg circle[data-idx]:hover{transform:scale(1.3);filter:brightness(1.15)}",
535
535
  "svg path[data-idx]:hover{filter:brightness(1.1) drop-shadow(0 2px 8px rgba(0,0,0,.2))}",
536
- ".sp-bg{fill:#fff}",
536
+ ".sp-bg{fill:transparent}",
537
537
  "</style></head><body><div id=\"",
538
538
  ).as_bytes();
539
539
  const TPL3: &[u8] = b"\" style=\"position:relative;display:inline-block;border-radius:12px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.07),0 0 0 1px rgba(0,0,0,.04)\">";
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes