ultraplot 2.7.1__tar.gz → 2.7.4__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.
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/workflows/build-ultraplot.yml +13 -4
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.gitignore +10 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.pre-commit-config.yaml +2 -2
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.readthedocs.yml +2 -0
- ultraplot-2.7.4/MANIFEST.in +2 -0
- {ultraplot-2.7.1/ultraplot.egg-info → ultraplot-2.7.4}/PKG-INFO +4 -112
- {ultraplot-2.7.1 → ultraplot-2.7.4}/README.rst +2 -110
- ultraplot-2.7.4/docs/_ext/drawio-lazy.js +94 -0
- ultraplot-2.7.4/docs/_ext/drawio.py +162 -0
- ultraplot-2.7.4/docs/_scripts/build_plot_types.py +34 -0
- ultraplot-2.7.4/docs/_static/plot_types/raincloud.png +0 -0
- ultraplot-2.7.4/docs/cheatsheet.rst +49 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/conf.py +9 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/05_box_violin.py +0 -1
- ultraplot-2.7.4/docs/examples/plot_types/13_raincloud.py +53 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/index.rst +6 -0
- ultraplot-2.7.4/docs/mcp.rst +105 -0
- ultraplot-2.7.4/docs/plot_types.rst +524 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/projections.py +31 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/stats.py +24 -2
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/subplots.py +4 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/pyproject.toml +10 -4
- ultraplot-2.7.4/tools/ci/collect_failed_comparisons.py +197 -0
- ultraplot-2.7.4/tools/ci/failed_comparisons_template.html +168 -0
- ultraplot-2.7.4/tools/ci/test_collect_failed_comparisons.py +136 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/expand_docstrings.py +3 -2
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/__init__.py +14 -35
- ultraplot-2.7.1/ultraplot/config.py → ultraplot-2.7.4/ultraplot/_config.py +31 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/_interaction.py +1 -1
- ultraplot-2.7.4/ultraplot/_version.py +1 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/base.py +2 -3
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/cartesian.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/container.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/geo.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/plot.py +196 -10
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/plot_types/circlize.py +12 -11
- ultraplot-2.7.4/ultraplot/axes/plot_types/raincloud.py +516 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/plot_types/sankey.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/polar.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/shared.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/taylor.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/colorbar.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/colors.py +12 -6
- ultraplot-2.7.4/ultraplot/config.py +36 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/constructor.py +14 -5
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/demos.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/figure.py +2 -2
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/gridspec.py +72 -25
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/fonts.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/inputs.py +2 -2
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/labels.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/rcsetup.py +62 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/legend.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/scale.py +2 -2
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_axes.py +4 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_circlize_integration.py +30 -7
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_config.py +121 -8
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_config_helpers_extra.py +1 -1
- ultraplot-2.7.4/ultraplot/tests/test_docstrings.py +64 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_figure.py +47 -8
- ultraplot-2.7.4/ultraplot/tests/test_raincloud.py +564 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_ultralayout.py +217 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/ticker.py +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/ultralayout.py +124 -118
- {ultraplot-2.7.1 → ultraplot-2.7.4/ultraplot.egg-info}/PKG-INFO +4 -112
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot.egg-info/SOURCES.txt +16 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot.egg-info/requires.txt +1 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot.egg-info/scm_file_list.json +28 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot.egg-info/top_level.txt +0 -1
- ultraplot-2.7.1/ultraplot/_version.py +0 -1
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/ISSUE_TEMPLATE.md +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/dependabot.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/micromamba-condarc.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/workflows/black.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/workflows/main.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/workflows/publish-pypi.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.github/workflows/test-map.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/.zenodo.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/CITATION.cff +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/CODEOFCONDUCT.md +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/CONTRIBUTING.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/INSTALL.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/LICENSE.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/UltraPlotLogo.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/codecov.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/1dplots.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/2dplots.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/Makefile +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_ext/notoc.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_scripts/fetch_releases.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/alias-explorer-v3.css +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/alias-explorer-v3.js +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/alias-map.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/custom.css +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/custom.js +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/cartesian_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/colorbars_legends_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/colormaps_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/data_aware_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/panels_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/projection_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/example_plots/subplot_example.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/logo_blank.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/logo_long.png +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/logo_long.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/logo_social.png +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/logo_social.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_static/logo_square.png +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/_templates/whatsnew_sidebar.html +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/about.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/aliases.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/api.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/basics.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/cartesian.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/colorbars_legends.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/colormaps.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/colors.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/configuration.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/contributing.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/cycles.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/data_aware.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/README.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/colors/01_cycle_colormap.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/colors/02_diverging_colormap.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/colors/README.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/geo/01_robin_tracks.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/geo/02_orthographic_views.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/geo/03_projections_features.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/geo/04_choropleth.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/geo/README.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/layouts/01_shared_axes_abc.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/layouts/02_complex_layout_insets.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/layouts/03_spanning_labels.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/layouts/README.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/legend_types/01_semantic_legends.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/legends_colorbars/01_multi_colorbars.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/legends_colorbars/03_semantic_legends.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/legends_colorbars/README.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/01_curved_quiver.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/02_network_graph.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/03_lollipop.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/04_datetime_series.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/06_ridge_plot.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/07_radar.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/07_sankey.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/08_chord_diagram.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/08_ternary.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/09_phylogeny.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/10_circos_bed.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/11_topic_ribbon.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/12_taylor_diagram.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/examples/plot_types/README.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/external-links.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/faq.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/first_figure.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/fonts.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/insets_panels.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/install.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/keyword_aliases.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/lazy_loading.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/make.bat +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/networks.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/recipes.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/requirements-rtd.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/sphinxext/custom_roles.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/sphinxext/jupytext_cache.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/ultraplotrc +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/usage.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/why.rst +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/docs/why_ultraplot.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/environment.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/logo/PermanentMarker-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/logo/environment-logo.yml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/logo/logo.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/logo/run-linter.sh +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/logo/webicon.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/logo/whyUltraPlot.svg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/noxfile.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/requirements-minimal.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/setup.cfg +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/setup.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/ci/build_test_map.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/ci/check_installed_docstrings.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/ci/select_tests.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/ci/static_consumer.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/ci/version_support.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/generate_alias_figure.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/generate_alias_reference.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/tools/serve_alias_docs.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/.opencode/goals/state.json.lock +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/.opencode/goals/state.json.sessions/.migration-v1-complete +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/.opencode/goals/state.json.sessions/cc3e983cb1eb34ad9f66e65e9ff9910c47ddb4f26523966e07d6a8bf3bc830eb/state.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/.opencode/goals/state.json.sessions/cc3e983cb1eb34ad9f66e65e9ff9910c47ddb4f26523966e07d6a8bf3bc830eb/state.json.lock +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/_animation.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/_layout.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/_lazy.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/_sharing.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/_subplots.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/animation.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/__init__.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/_formatting.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/plot_types/__init__.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/plot_types/curved_quiver.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/plot_types/ribbon.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/axes/three.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Algae.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Amp.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/BR.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Balance.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues1_r.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues3.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues4_r.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues5.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues6.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues7.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues8.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Blues9.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Boreal.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns1.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns3.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns4.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns5.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns6.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns7.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns8.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Browns9.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/ColdHot.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Crest.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Curl.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Deep.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Delta.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Dense.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Div.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/DryWet.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Dusk.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Fire.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Flare.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Glacial.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens1_r.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens3_r.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens4.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens5.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens6_r.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens7.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Greens8.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Haline.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Ice.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/IceFire.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Mako.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Marine.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Matter.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Mono.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/MonoCycle.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/NegPos.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Oranges1.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Oranges2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Oranges3.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Oranges4.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Oxy.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Phase.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Purples1_r.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Purples2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Purples3.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Reds1.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Reds2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Reds3.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Reds4.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Reds5.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Rocket.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Solar.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Speed.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Stellar.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Sunrise.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Sunset.json +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Tempo.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Thermal.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Turbid.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Vivid.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Vlag.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Yellows1.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Yellows2.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Yellows3.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/Yellows4.xml +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/acton.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/bam.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/bamO.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/bamako.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/batlow.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/batlowK.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/batlowW.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/berlin.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/bilbao.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/broc.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/brocO.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/buda.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/bukavu.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/cork.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/corkO.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/davos.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/devon.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/fes.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/hawaii.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/imola.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/lajolla.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/lapaz.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/lisbon.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/nuuk.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/oleron.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/oslo.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/roma.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/romaO.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/tofino.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/tokyo.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/turku.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/vanimo.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/vik.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cmaps/vikO.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/colors/opencolor.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/colors/xkcd.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/538.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/FlatUI.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/Qual1.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/Qual2.rgb +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/bmh.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/classic.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/colorblind.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/colorblind10.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/default.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/ggplot.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/seaborn.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/cycles/tableau.hex +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/externals/__init__.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/externals/hsluv.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-Light.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-Black.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-Light.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_FIRAMATH.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_FIRASANS.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_NOTOSANS.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_NOTOSERIF.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_OPENSANS.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_ROBOTO.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_SOURCESANS.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_SOURCESERIF.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_TEXGYRE.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/LICENSE_UBUNTU.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-Black.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-Light.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-Medium.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Roboto-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/__init__.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/benchmarks.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/context.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/docstring.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/guides.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/kwargs.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/versions.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/internals/warnings.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/mcp.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/proj.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/py.typed +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/__init__.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/conftest.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_1dplots.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_2dplots.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_alias_signatures.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_animation.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_axes_alt_styles.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_axes_base_colorbar_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_base.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_colorbar.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_colorbar_helpers_extra.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_colormap.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_colormap_helpers_extra.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_colors.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_colors_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_constructor.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_constructor_helpers_extra.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_core_versions.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_demos.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_docs.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_docs_fetch_releases.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_docs_search.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_docstring_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_external_axes_container_integration.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_external_container_edge_cases.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_external_container_mocked.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_fonts.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_format.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_geographic.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_gridspec.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_handlers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_imports.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_imshow.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_inputs.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_inputs_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_inset.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_integration.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_kwargs_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_legend.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_mcp.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_plot.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_proj_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_projections.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_rcsetup_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_release_metadata.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_scale_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_semantic_legend.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_statistical_plotting.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_subplot_manager.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_subplots.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_text_helpers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_textalign.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/tests/test_tickers.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/text.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/textalign.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/ui.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot/utils.py +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot.egg-info/dependency_links.txt +0 -0
- {ultraplot-2.7.1 → ultraplot-2.7.4}/ultraplot.egg-info/entry_points.txt +0 -0
|
@@ -299,7 +299,7 @@ jobs:
|
|
|
299
299
|
--mpl \
|
|
300
300
|
--mpl-baseline-path=./ultraplot/tests/baseline \
|
|
301
301
|
--mpl-results-path=./results/ \
|
|
302
|
-
--mpl-generate-summary=
|
|
302
|
+
--mpl-generate-summary=json \
|
|
303
303
|
--mpl-default-style="./ultraplot.yml" \
|
|
304
304
|
--junitxml=./results/junit.xml \
|
|
305
305
|
"${FILTERED_NODEIDS[@]}"
|
|
@@ -333,7 +333,7 @@ jobs:
|
|
|
333
333
|
--mpl \
|
|
334
334
|
--mpl-baseline-path=./ultraplot/tests/baseline \
|
|
335
335
|
--mpl-results-path=./results/ \
|
|
336
|
-
--mpl-generate-summary=
|
|
336
|
+
--mpl-generate-summary=json \
|
|
337
337
|
--mpl-default-style="./ultraplot.yml" \
|
|
338
338
|
--junitxml=./results/junit.xml \
|
|
339
339
|
ultraplot/tests
|
|
@@ -360,11 +360,20 @@ jobs:
|
|
|
360
360
|
exit "$status"
|
|
361
361
|
fi
|
|
362
362
|
|
|
363
|
-
#
|
|
363
|
+
# Validate the standalone report rendering on each CI environment.
|
|
364
|
+
- name: Test failed-comparison report generator
|
|
365
|
+
if: always() && steps.baseline-support.outputs.baseline-supported == 'true'
|
|
366
|
+
run: python -m unittest discover -s tools/ci -p 'test_collect_failed_comparisons.py'
|
|
367
|
+
|
|
368
|
+
# JSON mode does not save images for passing comparisons.
|
|
369
|
+
- name: Collect failed image comparisons
|
|
370
|
+
if: always() && steps.baseline-support.outputs.baseline-supported == 'true'
|
|
371
|
+
run: python tools/ci/collect_failed_comparisons.py --results results --output failed-comparisons
|
|
372
|
+
|
|
364
373
|
- name: Upload comparison failures
|
|
365
374
|
if: always()
|
|
366
375
|
uses: actions/upload-artifact@v7
|
|
367
376
|
with:
|
|
368
377
|
name: failed-comparisons-${{ inputs.python-version }}-${{ inputs.matplotlib-version }}-${{ github.sha }}
|
|
369
|
-
path:
|
|
378
|
+
path: failed-comparisons/
|
|
370
379
|
if-no-files-found: ignore
|
|
@@ -64,3 +64,13 @@ ultraplot/_version.py
|
|
|
64
64
|
|
|
65
65
|
# Nox build directories
|
|
66
66
|
.nox/*
|
|
67
|
+
|
|
68
|
+
# Generated docs and draw.io assets. The edited diagram remains a repository asset.
|
|
69
|
+
tools/cheatsheet/assets/
|
|
70
|
+
docs/_static/plot_types/
|
|
71
|
+
tools/cheatsheet/ultraplot_cheatsheet.png
|
|
72
|
+
tools/cheatsheet/ultraplot_cheatsheet-code.png
|
|
73
|
+
tools/cheatsheet/ultraplot_cheatsheet-reference.png
|
|
74
|
+
tools/cheatsheet/ultraplot_cheatsheet-beginner.png
|
|
75
|
+
tools/cheatsheet/ultraplot_cheatsheet-intermediate.png
|
|
76
|
+
tools/cheatsheet/ultraplot_cheatsheet-advanced.png
|
|
@@ -11,12 +11,12 @@ ci:
|
|
|
11
11
|
|
|
12
12
|
repos:
|
|
13
13
|
- repo: https://github.com/psf/black-pre-commit-mirror
|
|
14
|
-
rev: 26.
|
|
14
|
+
rev: 26.10.1
|
|
15
15
|
hooks:
|
|
16
16
|
- id: black
|
|
17
17
|
|
|
18
18
|
- repo: https://github.com/tombi-toml/tombi-pre-commit
|
|
19
|
-
rev: v1.
|
|
19
|
+
rev: v1.9.8
|
|
20
20
|
hooks:
|
|
21
21
|
- id: tombi-format
|
|
22
22
|
args: ["--offline"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultraplot
|
|
3
|
-
Version: 2.7.
|
|
3
|
+
Version: 2.7.4
|
|
4
4
|
Summary: A succinct matplotlib wrapper for making beautiful, publication-quality graphics.
|
|
5
5
|
Author-email: Casper van Elteren <caspervanelteren@gmail.com>, Luke Davis <lukelbd@gmail.com>
|
|
6
6
|
Maintainer-email: Casper van Elteren <caspervanelteren@gmail.com>, "Matthew R. Becker" <becker.mr@gmail.com>
|
|
@@ -49,7 +49,7 @@ Requires-Dist: mcp<3,>=2.1; extra == "mcp"
|
|
|
49
49
|
Provides-Extra: stats
|
|
50
50
|
Requires-Dist: scipy; extra == "stats"
|
|
51
51
|
Provides-Extra: typing
|
|
52
|
-
Requires-Dist: basedpyright==1.40.
|
|
52
|
+
Requires-Dist: basedpyright==1.40.2; extra == "typing"
|
|
53
53
|
Dynamic: license-file
|
|
54
54
|
|
|
55
55
|
.. image:: https://raw.githubusercontent.com/Ultraplot/ultraplot/refs/heads/main/UltraPlotLogo.svg
|
|
@@ -158,20 +158,6 @@ UltraPlot is published on `PyPi <https://pypi.org/project/ultraplot/>`__ and
|
|
|
158
158
|
pip install ultraplot
|
|
159
159
|
conda install -c conda-forge ultraplot
|
|
160
160
|
|
|
161
|
-
pyCirclize-based plots require the optional ``circos`` extra:
|
|
162
|
-
|
|
163
|
-
.. code-block:: bash
|
|
164
|
-
|
|
165
|
-
pip install 'ultraplot[circos]'
|
|
166
|
-
|
|
167
|
-
The ``docs`` extra also includes pyCirclize for building the documentation.
|
|
168
|
-
|
|
169
|
-
To install the ``circos``, ``docs``, and ``stats`` dependency groups together:
|
|
170
|
-
|
|
171
|
-
.. code-block:: bash
|
|
172
|
-
|
|
173
|
-
pip install 'ultraplot[all]'
|
|
174
|
-
|
|
175
161
|
Likewise, an existing installation of UltraPlot can be upgraded
|
|
176
162
|
to the latest version with:
|
|
177
163
|
|
|
@@ -192,102 +178,8 @@ UltraPlot includes a Model Context Protocol (MCP) server that lets AI assistants
|
|
|
192
178
|
search documentation and examples, inspect the live Python API, and read source
|
|
193
179
|
code and release notes.
|
|
194
180
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
With `uv <https://docs.astral.sh/uv/getting-started/installation/>`__ installed,
|
|
199
|
-
your MCP client can launch the server with ``uvx``. uv installs the package and
|
|
200
|
-
its dependencies in an isolated environment automatically, so you do not need
|
|
201
|
-
to create a virtual environment or install UltraPlot separately.
|
|
202
|
-
|
|
203
|
-
For a PyPI release containing the MCP server, the launch command is:
|
|
204
|
-
|
|
205
|
-
.. code-block:: bash
|
|
206
|
-
|
|
207
|
-
uvx --from 'ultraplot[mcp]' ultraplot-mcp
|
|
208
|
-
|
|
209
|
-
For clients that use an ``mcpServers`` configuration, add:
|
|
210
|
-
|
|
211
|
-
.. code-block:: json
|
|
212
|
-
|
|
213
|
-
{
|
|
214
|
-
"mcpServers": {
|
|
215
|
-
"ultraplot": {
|
|
216
|
-
"command": "uvx",
|
|
217
|
-
"args": ["--from", "ultraplot[mcp]", "ultraplot-mcp"]
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
The client starts the server when needed and communicates with it over stdio.
|
|
223
|
-
Other clients may use a different configuration format; use the same command
|
|
224
|
-
and arguments. ``uvx`` is equivalent to ``uv tool run``.
|
|
225
|
-
|
|
226
|
-
Until the MCP server is released on PyPI, run it directly from the feature
|
|
227
|
-
branch instead:
|
|
228
|
-
|
|
229
|
-
.. code-block:: bash
|
|
230
|
-
|
|
231
|
-
uvx --from 'ultraplot[mcp] @ git+https://github.com/ultraplot/ultraplot.git@feat/mcp' ultraplot-mcp
|
|
232
|
-
|
|
233
|
-
For this development version, replace ``ultraplot[mcp]`` in the client
|
|
234
|
-
configuration with
|
|
235
|
-
``ultraplot[mcp] @ git+https://github.com/ultraplot/ultraplot.git@feat/mcp``.
|
|
236
|
-
|
|
237
|
-
Install persistently with uv
|
|
238
|
-
----------------------------
|
|
239
|
-
|
|
240
|
-
Alternatively, keep the executable on your ``PATH`` by installing it as a uv
|
|
241
|
-
tool. For a PyPI release containing the MCP server:
|
|
242
|
-
|
|
243
|
-
.. code-block:: bash
|
|
244
|
-
|
|
245
|
-
uv tool install 'ultraplot[mcp]'
|
|
246
|
-
ultraplot-mcp --help
|
|
247
|
-
|
|
248
|
-
Before that release, install from the feature branch:
|
|
249
|
-
|
|
250
|
-
.. code-block:: bash
|
|
251
|
-
|
|
252
|
-
uv tool install 'ultraplot[mcp] @ git+https://github.com/ultraplot/ultraplot.git@feat/mcp'
|
|
253
|
-
|
|
254
|
-
Then configure your client to launch ``ultraplot-mcp`` with no arguments.
|
|
255
|
-
If uv reports that its executable directory is missing from ``PATH``, run
|
|
256
|
-
``uv tool update-shell`` and restart your shell.
|
|
257
|
-
|
|
258
|
-
Install from a checkout
|
|
259
|
-
-----------------------
|
|
260
|
-
|
|
261
|
-
From a checkout containing the MCP implementation, install the optional ``mcp``
|
|
262
|
-
extra in the Python environment you want the server to use:
|
|
263
|
-
|
|
264
|
-
.. code-block:: bash
|
|
265
|
-
|
|
266
|
-
pip install -e '.[mcp]'
|
|
267
|
-
|
|
268
|
-
Connect an MCP client
|
|
269
|
-
---------------------
|
|
270
|
-
|
|
271
|
-
After installing persistently with uv or pip, register the server with an
|
|
272
|
-
installed Codex CLI:
|
|
273
|
-
|
|
274
|
-
.. code-block:: bash
|
|
275
|
-
|
|
276
|
-
ultraplot-mcp install codex
|
|
277
|
-
|
|
278
|
-
Restart Codex after registration. Try asking it to search the UltraPlot
|
|
279
|
-
examples for shared colorbars or inspect ``ultraplot.subplots``.
|
|
280
|
-
|
|
281
|
-
For other MCP clients, configure a stdio server with ``ultraplot-mcp`` as the
|
|
282
|
-
command and no arguments. Use the executable's absolute path if the client does
|
|
283
|
-
not inherit your Python environment's ``PATH``. Running ``ultraplot-mcp`` starts
|
|
284
|
-
the server; ``ultraplot-mcp --help`` lists the available commands.
|
|
285
|
-
|
|
286
|
-
Documentation tools read the checkout's ``docs`` directory. Direct uvx and uv
|
|
287
|
-
tool installations require a separate documentation checkout for these tools.
|
|
288
|
-
If documentation lives elsewhere, set ``ULTRAPLOT_MCP_DOCS`` to its absolute path in the MCP
|
|
289
|
-
client's server environment. Documentation is not currently bundled in the
|
|
290
|
-
Python package; API and source inspection use the installed UltraPlot version.
|
|
181
|
+
See the `MCP installation guide <https://ultraplot.readthedocs.io/en/latest/mcp.html>`__
|
|
182
|
+
for installation instructions, client configuration, and documentation setup.
|
|
291
183
|
|
|
292
184
|
Citing UltraPlot
|
|
293
185
|
================
|
|
@@ -104,20 +104,6 @@ UltraPlot is published on `PyPi <https://pypi.org/project/ultraplot/>`__ and
|
|
|
104
104
|
pip install ultraplot
|
|
105
105
|
conda install -c conda-forge ultraplot
|
|
106
106
|
|
|
107
|
-
pyCirclize-based plots require the optional ``circos`` extra:
|
|
108
|
-
|
|
109
|
-
.. code-block:: bash
|
|
110
|
-
|
|
111
|
-
pip install 'ultraplot[circos]'
|
|
112
|
-
|
|
113
|
-
The ``docs`` extra also includes pyCirclize for building the documentation.
|
|
114
|
-
|
|
115
|
-
To install the ``circos``, ``docs``, and ``stats`` dependency groups together:
|
|
116
|
-
|
|
117
|
-
.. code-block:: bash
|
|
118
|
-
|
|
119
|
-
pip install 'ultraplot[all]'
|
|
120
|
-
|
|
121
107
|
Likewise, an existing installation of UltraPlot can be upgraded
|
|
122
108
|
to the latest version with:
|
|
123
109
|
|
|
@@ -138,102 +124,8 @@ UltraPlot includes a Model Context Protocol (MCP) server that lets AI assistants
|
|
|
138
124
|
search documentation and examples, inspect the live Python API, and read source
|
|
139
125
|
code and release notes.
|
|
140
126
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
With `uv <https://docs.astral.sh/uv/getting-started/installation/>`__ installed,
|
|
145
|
-
your MCP client can launch the server with ``uvx``. uv installs the package and
|
|
146
|
-
its dependencies in an isolated environment automatically, so you do not need
|
|
147
|
-
to create a virtual environment or install UltraPlot separately.
|
|
148
|
-
|
|
149
|
-
For a PyPI release containing the MCP server, the launch command is:
|
|
150
|
-
|
|
151
|
-
.. code-block:: bash
|
|
152
|
-
|
|
153
|
-
uvx --from 'ultraplot[mcp]' ultraplot-mcp
|
|
154
|
-
|
|
155
|
-
For clients that use an ``mcpServers`` configuration, add:
|
|
156
|
-
|
|
157
|
-
.. code-block:: json
|
|
158
|
-
|
|
159
|
-
{
|
|
160
|
-
"mcpServers": {
|
|
161
|
-
"ultraplot": {
|
|
162
|
-
"command": "uvx",
|
|
163
|
-
"args": ["--from", "ultraplot[mcp]", "ultraplot-mcp"]
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
The client starts the server when needed and communicates with it over stdio.
|
|
169
|
-
Other clients may use a different configuration format; use the same command
|
|
170
|
-
and arguments. ``uvx`` is equivalent to ``uv tool run``.
|
|
171
|
-
|
|
172
|
-
Until the MCP server is released on PyPI, run it directly from the feature
|
|
173
|
-
branch instead:
|
|
174
|
-
|
|
175
|
-
.. code-block:: bash
|
|
176
|
-
|
|
177
|
-
uvx --from 'ultraplot[mcp] @ git+https://github.com/ultraplot/ultraplot.git@feat/mcp' ultraplot-mcp
|
|
178
|
-
|
|
179
|
-
For this development version, replace ``ultraplot[mcp]`` in the client
|
|
180
|
-
configuration with
|
|
181
|
-
``ultraplot[mcp] @ git+https://github.com/ultraplot/ultraplot.git@feat/mcp``.
|
|
182
|
-
|
|
183
|
-
Install persistently with uv
|
|
184
|
-
----------------------------
|
|
185
|
-
|
|
186
|
-
Alternatively, keep the executable on your ``PATH`` by installing it as a uv
|
|
187
|
-
tool. For a PyPI release containing the MCP server:
|
|
188
|
-
|
|
189
|
-
.. code-block:: bash
|
|
190
|
-
|
|
191
|
-
uv tool install 'ultraplot[mcp]'
|
|
192
|
-
ultraplot-mcp --help
|
|
193
|
-
|
|
194
|
-
Before that release, install from the feature branch:
|
|
195
|
-
|
|
196
|
-
.. code-block:: bash
|
|
197
|
-
|
|
198
|
-
uv tool install 'ultraplot[mcp] @ git+https://github.com/ultraplot/ultraplot.git@feat/mcp'
|
|
199
|
-
|
|
200
|
-
Then configure your client to launch ``ultraplot-mcp`` with no arguments.
|
|
201
|
-
If uv reports that its executable directory is missing from ``PATH``, run
|
|
202
|
-
``uv tool update-shell`` and restart your shell.
|
|
203
|
-
|
|
204
|
-
Install from a checkout
|
|
205
|
-
-----------------------
|
|
206
|
-
|
|
207
|
-
From a checkout containing the MCP implementation, install the optional ``mcp``
|
|
208
|
-
extra in the Python environment you want the server to use:
|
|
209
|
-
|
|
210
|
-
.. code-block:: bash
|
|
211
|
-
|
|
212
|
-
pip install -e '.[mcp]'
|
|
213
|
-
|
|
214
|
-
Connect an MCP client
|
|
215
|
-
---------------------
|
|
216
|
-
|
|
217
|
-
After installing persistently with uv or pip, register the server with an
|
|
218
|
-
installed Codex CLI:
|
|
219
|
-
|
|
220
|
-
.. code-block:: bash
|
|
221
|
-
|
|
222
|
-
ultraplot-mcp install codex
|
|
223
|
-
|
|
224
|
-
Restart Codex after registration. Try asking it to search the UltraPlot
|
|
225
|
-
examples for shared colorbars or inspect ``ultraplot.subplots``.
|
|
226
|
-
|
|
227
|
-
For other MCP clients, configure a stdio server with ``ultraplot-mcp`` as the
|
|
228
|
-
command and no arguments. Use the executable's absolute path if the client does
|
|
229
|
-
not inherit your Python environment's ``PATH``. Running ``ultraplot-mcp`` starts
|
|
230
|
-
the server; ``ultraplot-mcp --help`` lists the available commands.
|
|
231
|
-
|
|
232
|
-
Documentation tools read the checkout's ``docs`` directory. Direct uvx and uv
|
|
233
|
-
tool installations require a separate documentation checkout for these tools.
|
|
234
|
-
If documentation lives elsewhere, set ``ULTRAPLOT_MCP_DOCS`` to its absolute path in the MCP
|
|
235
|
-
client's server environment. Documentation is not currently bundled in the
|
|
236
|
-
Python package; API and source inspection use the installed UltraPlot version.
|
|
127
|
+
See the `MCP installation guide <https://ultraplot.readthedocs.io/en/latest/mcp.html>`__
|
|
128
|
+
for installation instructions, client configuration, and documentation setup.
|
|
237
129
|
|
|
238
130
|
Citing UltraPlot
|
|
239
131
|
================
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/* Fetch SVG-heavy draw.io pages only when they approach the viewport. */
|
|
2
|
+
(() => {
|
|
3
|
+
"use strict";
|
|
4
|
+
let viewerPromise;
|
|
5
|
+
function viewer() {
|
|
6
|
+
if (window.GraphViewer && window.DOMPurify && window.pako) return Promise.resolve();
|
|
7
|
+
if (!viewerPromise) {
|
|
8
|
+
viewerPromise = new Promise((resolve, reject) => {
|
|
9
|
+
const script = document.createElement("script");
|
|
10
|
+
// The standalone viewer bundles DOMPurify, pako and Spinner as UMD
|
|
11
|
+
// libraries but consumes their browser globals. Sphinx's RequireJS
|
|
12
|
+
// otherwise captures them as anonymous AMD modules instead.
|
|
13
|
+
const define = window.define;
|
|
14
|
+
const amd = define && define.amd;
|
|
15
|
+
if (amd) define.amd = undefined;
|
|
16
|
+
const restoreAMD = () => {
|
|
17
|
+
if (amd) define.amd = amd;
|
|
18
|
+
};
|
|
19
|
+
script.src = "https://viewer.diagrams.net/js/viewer-static.min.js";
|
|
20
|
+
script.onload = () => {
|
|
21
|
+
restoreAMD();
|
|
22
|
+
if (window.GraphViewer && window.DOMPurify && window.pako) resolve();
|
|
23
|
+
else reject(new Error("Viewer dependencies unavailable"));
|
|
24
|
+
};
|
|
25
|
+
script.onerror = () => {
|
|
26
|
+
restoreAMD();
|
|
27
|
+
script.remove();
|
|
28
|
+
reject(new Error("Viewer download failed"));
|
|
29
|
+
};
|
|
30
|
+
document.head.appendChild(script);
|
|
31
|
+
}).catch(error => {
|
|
32
|
+
viewerPromise = undefined;
|
|
33
|
+
throw error;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return viewerPromise;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function load(element) {
|
|
40
|
+
if (element.dataset.loading) return;
|
|
41
|
+
element.dataset.loading = "true";
|
|
42
|
+
element.setAttribute("aria-busy", "true");
|
|
43
|
+
try {
|
|
44
|
+
const [xml] = await Promise.all([
|
|
45
|
+
fetch(element.dataset.drawioUrl).then(response => {
|
|
46
|
+
if (!response.ok) throw new Error(`Diagram download failed (${response.status})`);
|
|
47
|
+
return response.text();
|
|
48
|
+
}),
|
|
49
|
+
viewer(),
|
|
50
|
+
]);
|
|
51
|
+
element.setAttribute("data-mxgraph", JSON.stringify({
|
|
52
|
+
xml, resize: true, fit: true, nav: false, lightbox: true,
|
|
53
|
+
toolbar: "zoom lightbox", "toolbar-nohide": true, editable: false,
|
|
54
|
+
}));
|
|
55
|
+
element.replaceChildren();
|
|
56
|
+
window.GraphViewer.createViewerForElement(element);
|
|
57
|
+
element.removeAttribute("data-mxgraph");
|
|
58
|
+
element.style.minHeight = "";
|
|
59
|
+
element.setAttribute("aria-busy", "false");
|
|
60
|
+
} catch (error) {
|
|
61
|
+
delete element.dataset.loading;
|
|
62
|
+
element.setAttribute("aria-busy", "false");
|
|
63
|
+
const button = document.createElement("button");
|
|
64
|
+
button.type = "button";
|
|
65
|
+
button.textContent = "Diagram could not be loaded. Retry";
|
|
66
|
+
button.addEventListener("click", () => load(element));
|
|
67
|
+
element.replaceChildren(button);
|
|
68
|
+
console.warn("Draw.io diagram:", error);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function init() {
|
|
73
|
+
const elements = document.querySelectorAll(".drawio-lazy");
|
|
74
|
+
const observer = "IntersectionObserver" in window ? new IntersectionObserver(entries => {
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
if (entry.isIntersecting) {
|
|
77
|
+
observer.unobserve(entry.target);
|
|
78
|
+
load(entry.target);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}, { rootMargin: "300px" }) : null;
|
|
82
|
+
for (const element of elements) {
|
|
83
|
+
element.querySelector("a").addEventListener("click", event => {
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
if (observer) observer.unobserve(element);
|
|
86
|
+
load(element);
|
|
87
|
+
});
|
|
88
|
+
if (observer) observer.observe(element);
|
|
89
|
+
else load(element);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", init);
|
|
93
|
+
else init();
|
|
94
|
+
})();
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import base64
|
|
4
|
+
import hashlib
|
|
5
|
+
import html
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
import urllib.parse
|
|
8
|
+
import xml.etree.ElementTree as ET
|
|
9
|
+
import zlib
|
|
10
|
+
|
|
11
|
+
from docutils import nodes
|
|
12
|
+
from docutils.parsers.rst import Directive, directives
|
|
13
|
+
from sphinx.util.osutil import relative_uri
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _decode_diagram(diagram: ET.Element) -> str:
|
|
17
|
+
"""Return an mxGraphModel XML string from a <diagram> element."""
|
|
18
|
+
|
|
19
|
+
# Uncompressed draw.io files can contain mxGraphModel directly.
|
|
20
|
+
graph = diagram.find("mxGraphModel")
|
|
21
|
+
if graph is not None:
|
|
22
|
+
return ET.tostring(graph, encoding="unicode")
|
|
23
|
+
|
|
24
|
+
# Normal compressed draw.io representation:
|
|
25
|
+
# base64 -> raw DEFLATE -> URL decode
|
|
26
|
+
encoded = (diagram.text or "").strip()
|
|
27
|
+
|
|
28
|
+
if not encoded:
|
|
29
|
+
raise ValueError("Draw.io diagram contains no data")
|
|
30
|
+
|
|
31
|
+
compressed = base64.b64decode(encoded)
|
|
32
|
+
inflated = zlib.decompress(compressed, -15).decode("utf-8")
|
|
33
|
+
|
|
34
|
+
return urllib.parse.unquote(inflated)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _get_page(path: Path, selector: str | None) -> str:
|
|
38
|
+
root = ET.parse(path).getroot()
|
|
39
|
+
diagrams = root.findall("diagram")
|
|
40
|
+
|
|
41
|
+
if not diagrams:
|
|
42
|
+
raise ValueError(f"No diagrams found in {path}")
|
|
43
|
+
|
|
44
|
+
# Default to first page.
|
|
45
|
+
if selector is None:
|
|
46
|
+
return _decode_diagram(diagrams[0])
|
|
47
|
+
|
|
48
|
+
# Numeric selector = page index.
|
|
49
|
+
try:
|
|
50
|
+
index = int(selector)
|
|
51
|
+
except ValueError:
|
|
52
|
+
index = None
|
|
53
|
+
|
|
54
|
+
if index is not None:
|
|
55
|
+
try:
|
|
56
|
+
return _decode_diagram(diagrams[index])
|
|
57
|
+
except IndexError:
|
|
58
|
+
raise ValueError(
|
|
59
|
+
f"Page index {index} does not exist in {path}"
|
|
60
|
+
) from None
|
|
61
|
+
|
|
62
|
+
# Otherwise treat selector as page name.
|
|
63
|
+
for diagram in diagrams:
|
|
64
|
+
if diagram.get("name") == selector:
|
|
65
|
+
return _decode_diagram(diagram)
|
|
66
|
+
|
|
67
|
+
names = [d.get("name", "<unnamed>") for d in diagrams]
|
|
68
|
+
raise ValueError(
|
|
69
|
+
f"Page {selector!r} not found in {path}. "
|
|
70
|
+
f"Available pages: {', '.join(names)}"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class drawio_node(nodes.General, nodes.Element):
|
|
75
|
+
pass
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _visit_drawio_html(self, node):
|
|
79
|
+
# Write at HTML translation time so cached doctrees also recreate assets
|
|
80
|
+
# when the output directory is cleaned. Content hashes allow browser caching.
|
|
81
|
+
xml = node["xml"]
|
|
82
|
+
digest = hashlib.sha256(xml.encode("utf-8")).hexdigest()
|
|
83
|
+
asset = f"_drawio/{digest}.xml"
|
|
84
|
+
path = Path(self.builder.outdir) / asset
|
|
85
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
|
86
|
+
if not path.exists():
|
|
87
|
+
path.write_text(xml, encoding="utf-8")
|
|
88
|
+
url = relative_uri(self.builder.get_target_uri(self.builder.current_docname), asset)
|
|
89
|
+
classes = html.escape(" ".join(["drawio-lazy", *node["classes"]]), quote=True)
|
|
90
|
+
url = html.escape(url, quote=True)
|
|
91
|
+
self.body.append(
|
|
92
|
+
f'<div class="{classes}" data-drawio-url="{url}" '
|
|
93
|
+
'style="min-height:24rem" aria-busy="true">'
|
|
94
|
+
f'<a href="{url}">Load diagram</a>'
|
|
95
|
+
'<noscript> (JavaScript is required to view this diagram.)</noscript>'
|
|
96
|
+
'</div>'
|
|
97
|
+
)
|
|
98
|
+
raise nodes.SkipNode
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def _skip_drawio(self, node):
|
|
102
|
+
raise nodes.SkipNode
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class DrawioDirective(Directive):
|
|
106
|
+
required_arguments = 1
|
|
107
|
+
has_content = False
|
|
108
|
+
|
|
109
|
+
option_spec = {
|
|
110
|
+
"page": directives.unchanged,
|
|
111
|
+
"class": directives.class_option,
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
def run(self):
|
|
115
|
+
env = self.state.document.settings.env
|
|
116
|
+
|
|
117
|
+
# Resolve relative to the .rst file containing the directive.
|
|
118
|
+
source = Path(env.doc2path(env.docname)).resolve()
|
|
119
|
+
path = (source.parent / self.arguments[0]).resolve()
|
|
120
|
+
|
|
121
|
+
if not path.exists():
|
|
122
|
+
raise self.error(f"Draw.io file not found: {path}")
|
|
123
|
+
|
|
124
|
+
# Tell Sphinx that changes to the .drawio file should rebuild this page.
|
|
125
|
+
env.note_dependency(str(path))
|
|
126
|
+
|
|
127
|
+
try:
|
|
128
|
+
xml = _get_page(path, self.options.get("page"))
|
|
129
|
+
except (ET.ParseError, ValueError) as exc:
|
|
130
|
+
raise self.error(str(exc)) from exc
|
|
131
|
+
|
|
132
|
+
node = drawio_node()
|
|
133
|
+
node["xml"] = xml
|
|
134
|
+
node["classes"] = self.options.get("class", [])
|
|
135
|
+
return [node]
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _copy_loader(app, exception):
|
|
139
|
+
if exception is None and app.builder.format == "html":
|
|
140
|
+
target = Path(app.outdir) / "_static" / "drawio-lazy.js"
|
|
141
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
142
|
+
target.write_bytes(Path(__file__).with_name("drawio-lazy.js").read_bytes())
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
def setup(app):
|
|
146
|
+
app.add_directive("drawio", DrawioDirective)
|
|
147
|
+
|
|
148
|
+
app.add_node(
|
|
149
|
+
drawio_node,
|
|
150
|
+
html=(_visit_drawio_html, None),
|
|
151
|
+
latex=(_skip_drawio, None),
|
|
152
|
+
text=(_skip_drawio, None),
|
|
153
|
+
)
|
|
154
|
+
# Copy our loader without requiring changes to html_static_path.
|
|
155
|
+
app.connect("build-finished", _copy_loader)
|
|
156
|
+
app.add_js_file("drawio-lazy.js", loading_method="defer")
|
|
157
|
+
|
|
158
|
+
return {
|
|
159
|
+
"version": "2.0",
|
|
160
|
+
"parallel_read_safe": True,
|
|
161
|
+
"parallel_write_safe": True,
|
|
162
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Regenerate the visual plot-type index before a documentation build.
|
|
4
|
+
|
|
5
|
+
Run from ``conf.py`` the same way ``fetch_releases.py`` is: the page and its
|
|
6
|
+
thumbnails are generated artefacts, so a clean checkout builds them rather than
|
|
7
|
+
carrying 60-odd PNGs in the repository. Rendering is skipped when the icons are
|
|
8
|
+
already present, so a local rebuild costs nothing.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
import os
|
|
12
|
+
import sys
|
|
13
|
+
|
|
14
|
+
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
15
|
+
ROOT = os.path.dirname(os.path.dirname(HERE))
|
|
16
|
+
GENERATOR = os.path.join(ROOT, "tools", "cheatsheet")
|
|
17
|
+
|
|
18
|
+
sys.path.insert(0, GENERATOR)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def main():
|
|
22
|
+
try:
|
|
23
|
+
import docs_index
|
|
24
|
+
except ImportError as error: # the tools folder is not shipped in sdists
|
|
25
|
+
print(f"plot-type index skipped: {error}")
|
|
26
|
+
return
|
|
27
|
+
try:
|
|
28
|
+
docs_index.main()
|
|
29
|
+
except Exception as error: # never fail the docs build over a thumbnail
|
|
30
|
+
print(f"plot-type index skipped: {type(error).__name__}: {error}")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
if __name__ == "__main__":
|
|
34
|
+
main()
|
|
Binary file
|