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