seraplot 2.3.83__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.
- {seraplot-2.3.83 → seraplot-2.3.84}/Cargo.lock +1 -1
- {seraplot-2.3.83 → seraplot-2.3.84}/Cargo.toml +1 -1
- {seraplot-2.3.83 → seraplot-2.3.84}/PKG-INFO +1 -1
- {seraplot-2.3.83 → seraplot-2.3.84}/pyproject.toml +1 -1
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/commands/charts.rs +93 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/commands/registry.rs +5 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/registry_macro.rs +94 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/.gitignore +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/05--Diabetes_SeraPlot.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/07--OpenFoodFacts_SeraPlot_Benchmark.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/README.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/TEST_1M_Battle.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_all.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_bigdata.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_full.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_issues.json +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_knn_sgd.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_perf.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_quick.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_quick2.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_scale.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_seraplot.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_sklearn.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_svc.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_svc2.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/bench_test.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_gridsearch.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_gridsearch2.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_kmeans_heavy.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_kmeans_openfoodfacts.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_ml.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_ml_openfoodfacts.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/benchmark_ml_out.ipynb +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/build.log +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/gen_bench_slides.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/1.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/2.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/3.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/4.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/5.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/6.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/7.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/2d/8.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/1.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/2.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/3.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/4.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/5.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/6.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/7.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/3d/8.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/README.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/benchmark/1.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/benchmark/2.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/benchmark/3.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/images/logo.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/kmeans_test.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/publish_2378.log +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/publish_log.txt +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/python/seraplot/__init__.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/python/seraplot/matplotlib.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/python/seraplot/seraplot.cp311-win_amd64.pyd.old +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/results_seraplot.json +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/results_sklearn.json +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/.github/workflows/mdbook.yml +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/README.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/asset/SVG World Map with labels.svg +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/asset/logo.png +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/asset/world.svg +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/builder_template.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/chart_types.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/commands/docs.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/commands/ml.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/commands/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/commands/native.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/export_builder.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/fast_export_c.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/fast_render.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/memory_pool.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/unified_builder.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/unified_config.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/arena_alloc.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/bitset.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/compact_state.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/data_processor.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/image_processor.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/lazy_builders.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/memory_pool.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/simd_ops.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/bindings/utils/state_export.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/book.toml +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/core/builders.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/core/math.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/core/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/data/conversion.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/data/index.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/data/loader.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/data/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/data/processor.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/SUMMARY.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/api/index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/area.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/bar.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/boxplot.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/bubble.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/bullet.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/candlestick.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/donut.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/dumbbell.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/funnel.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/gauge.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/grid.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/grouped-bar.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/hbar.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/heatmap.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/histogram-overlay.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/histogram.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/kde.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/line.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/lollipop.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/multiline.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/parallel.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/pie.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/radar.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/ridgeline.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/scatter.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/slideshow.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/slope.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/stacked-bar.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/sunburst.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/treemap.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/violin.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/waterfall.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/2d/wordcloud.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/bar3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/bubble3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/candlestick3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/dumbbell3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/funnel3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/globe3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/heatmap3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/kde3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/line3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/lollipop3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/pie3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/radar3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/ridgeline3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/scatter3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/stacked-bar3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/sunburst3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/3d/violin3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/map/bubble-map.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/map/choropleth.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/charts/map/index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/config/auto-display.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/config/background.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/config/hover.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/config/palette.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/getting-started/chart-methods.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/getting-started/chart-object.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/getting-started/installation.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/getting-started/quickstart.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/introduction.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/adaboost.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/bayes-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/clustering-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/dbscan-class.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/dbscan.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/dbscan3d.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/decision-tree.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/decomposition-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/decomposition.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/elastic-net.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/evaluation-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/gradient-boosting.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/grid-search.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/kmeans-class.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/kmeans.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/knn.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/lasso.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/linear-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/linear-regression.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/logistic-regression.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/metrics.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/naive-bayes.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/neighbors-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/preprocessing-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/preprocessing.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/random-forest.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/ridge.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/selection-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/sgd.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/svm-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/svm.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/train-test-split.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/ml/tree-index.md +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/area.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bar.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bar3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bench-matplotlib.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bench-plotly.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bench-seraplot.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/boxplot.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bubble-map.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bubble.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bubble3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/bullet.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/candlestick.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/candlestick3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/choropleth.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/dbscan-class.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/dbscan.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/dbscan3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/donut.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/dumbbell.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/dumbbell3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/funnel.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/funnel3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/gauge.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/globe3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/grid.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/grouped-bar.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/hbar.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/heatmap.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/heatmap3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/histogram-overlay.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/histogram.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/kde.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/kde3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/line.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/line3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/lollipop.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/lollipop3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/multiline.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/parallel.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/pie.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/pie3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/radar.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/radar3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/ridgeline.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/ridgeline3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/scatter.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/scatter3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/slideshow.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/slope.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/stacked-bar.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/stacked-bar3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/sunburst.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/sunburst3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/treemap.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/violin.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/violin3d.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/waterfall.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/previews/wordcloud.html +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/theme/custom.css +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/docs/theme/lang-switcher.js +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/assets.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/fast_builders.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/fast_exporter.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/hover.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/html_export.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/html_template.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/js_3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/html/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/lib.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/cache.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/decomposition/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/decomposition/pca.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linalg.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/elastic_net.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/lasso.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/logistic.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/ols.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/ridge.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/linear/sgd.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/metrics/classification.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/metrics/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/metrics/regression.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/model_selection/cross_val.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/model_selection/grid_search.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/model_selection/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/model_selection/split.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/naive_bayes/bernoulli.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/naive_bayes/gaussian.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/naive_bayes/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/naive_bayes/multinomial.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/neighbors/knn.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/neighbors/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/preprocessing/encoders.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/preprocessing/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/preprocessing/scalers.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/svm/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/svm/svm.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/tree/adaboost.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/tree/decision_tree.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/tree/decision_tree_backup.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/tree/gradient_boosting.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/tree/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/ml/tree/random_forest.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/camera.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/canvas.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/containers_3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/controller/chart_controller.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/controller/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/controller/plot_3d_controller.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/_3d/bar_3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/_3d/line_3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/_3d/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/_3d/plot_3d_types.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/_3d/scatter_3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/bar.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/chart.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/kmeans.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/line.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/scatter.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/default/svg.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/generic.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/_3d/globe.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/_3d/globe_html.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/_3d/globe_types.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/_3d/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/bubble_map.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/chart.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/choropleth.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/svg_parser.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/map/world_data.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/projection.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/renderers.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/scale_renderer.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/seaborn/_3d/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/seaborn/_3d/plot_3d_types.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/seaborn/chart.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/seaborn/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/candlestick3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/dumbbell3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/funnel3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/heatmap3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/kde3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/lollipop3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/pie3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/plot_3d_types.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/radar3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/ridgeline3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/stacked_bar3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/sunburst3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/_3d/violin3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/area.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/boxplot.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/bubble.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/bullet.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/candlestick.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/common.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/dumbbell.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/funnel.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/gauge.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/grouped_bar.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/heatmap.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/histogram.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/kde.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/lollipop.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/multiline.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/parallel.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/pie.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/radar.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/ridgeline.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/slope.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/sunburst.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/treemap.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/violin.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/waterfall.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/plot/statistical/wordcloud.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/cache.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/chart.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/gui.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/hybrid.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/manager/button_manager.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/manager/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/render/advanced_render.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/render/fast_render_gui.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/render/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/render/pipeline.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/render/viewer_3d.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/render/wiki_viewer.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/utils/image_loader.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/viewer/utils/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/wiki/api.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/wiki/extractor.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/wiki/language.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/wiki/macros.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/wiki/metadata.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/src/wiki/mod.rs +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/test_accuracy.py +0 -0
- {seraplot-2.3.83 → seraplot-2.3.84}/test_universal_ml.js +0 -0
|
@@ -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
|
}
|
|
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
|
|
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
|
|
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
|