ultraplot 1.71.0__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-1.71.0/.github/ISSUE_TEMPLATE.md +31 -0
- ultraplot-1.71.0/.github/dependabot.yml +10 -0
- ultraplot-1.71.0/.github/workflows/build-ultraplot.yml +130 -0
- ultraplot-1.71.0/.github/workflows/main.yml +155 -0
- ultraplot-1.71.0/.github/workflows/publish-pypi.yml +121 -0
- ultraplot-1.71.0/.gitignore +50 -0
- ultraplot-1.71.0/.pre-commit-config.yaml +16 -0
- ultraplot-1.71.0/.readthedocs.yml +24 -0
- ultraplot-1.71.0/.zenodo.json +39 -0
- ultraplot-1.71.0/CITATION.cff +33 -0
- ultraplot-1.71.0/CODEOFCONDUCT.md +128 -0
- ultraplot-1.71.0/CONTRIBUTING.rst +1 -0
- ultraplot-1.71.0/INSTALL.rst +30 -0
- ultraplot-1.71.0/LICENSE.txt +19 -0
- ultraplot-1.71.0/PKG-INFO +194 -0
- ultraplot-1.71.0/README.rst +167 -0
- ultraplot-1.71.0/UltraPlotLogo.svg +1904 -0
- ultraplot-1.71.0/codecov.yml +33 -0
- ultraplot-1.71.0/docs/1dplots.py +651 -0
- ultraplot-1.71.0/docs/2dplots.py +717 -0
- ultraplot-1.71.0/docs/Makefile +28 -0
- ultraplot-1.71.0/docs/_ext/notoc.py +21 -0
- ultraplot-1.71.0/docs/_scripts/fetch_releases.py +139 -0
- ultraplot-1.71.0/docs/_static/custom.css +367 -0
- ultraplot-1.71.0/docs/_static/custom.js +383 -0
- ultraplot-1.71.0/docs/_static/example_plots/cartesian_example.svg +2822 -0
- ultraplot-1.71.0/docs/_static/example_plots/colorbars_legends_example.svg +10066 -0
- ultraplot-1.71.0/docs/_static/example_plots/colormaps_example.svg +39886 -0
- ultraplot-1.71.0/docs/_static/example_plots/panels_example.svg +6472 -0
- ultraplot-1.71.0/docs/_static/example_plots/projection_example.svg +10840 -0
- ultraplot-1.71.0/docs/_static/example_plots/subplot_example.svg +1488 -0
- ultraplot-1.71.0/docs/_static/logo_blank.svg +1507 -0
- ultraplot-1.71.0/docs/_static/logo_long.png +0 -0
- ultraplot-1.71.0/docs/_static/logo_long.svg +1468 -0
- ultraplot-1.71.0/docs/_static/logo_social.png +0 -0
- ultraplot-1.71.0/docs/_static/logo_social.svg +1468 -0
- ultraplot-1.71.0/docs/_static/logo_square.png +0 -0
- ultraplot-1.71.0/docs/_templates/whatsnew_sidebar.html +21 -0
- ultraplot-1.71.0/docs/about.rst +52 -0
- ultraplot-1.71.0/docs/api.rst +144 -0
- ultraplot-1.71.0/docs/basics.py +567 -0
- ultraplot-1.71.0/docs/cartesian.py +742 -0
- ultraplot-1.71.0/docs/colorbars_legends.py +512 -0
- ultraplot-1.71.0/docs/colormaps.py +501 -0
- ultraplot-1.71.0/docs/colors.py +201 -0
- ultraplot-1.71.0/docs/conf.py +521 -0
- ultraplot-1.71.0/docs/configuration.rst +189 -0
- ultraplot-1.71.0/docs/contributing.rst +295 -0
- ultraplot-1.71.0/docs/cycles.py +220 -0
- ultraplot-1.71.0/docs/examples/README.txt +6 -0
- ultraplot-1.71.0/docs/examples/colors/01_cycle_colormap.py +41 -0
- ultraplot-1.71.0/docs/examples/colors/02_diverging_colormap.py +52 -0
- ultraplot-1.71.0/docs/examples/colors/README.txt +0 -0
- ultraplot-1.71.0/docs/examples/geo/01_robin_tracks.py +37 -0
- ultraplot-1.71.0/docs/examples/geo/02_orthographic_views.py +46 -0
- ultraplot-1.71.0/docs/examples/geo/03_projections_features.py +44 -0
- ultraplot-1.71.0/docs/examples/geo/README.txt +0 -0
- ultraplot-1.71.0/docs/examples/layouts/01_shared_axes_abc.py +45 -0
- ultraplot-1.71.0/docs/examples/layouts/02_complex_layout_insets.py +63 -0
- ultraplot-1.71.0/docs/examples/layouts/03_spanning_labels.py +49 -0
- ultraplot-1.71.0/docs/examples/layouts/README.txt +0 -0
- ultraplot-1.71.0/docs/examples/legends_colorbars/01_multi_colorbars.py +45 -0
- ultraplot-1.71.0/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +40 -0
- ultraplot-1.71.0/docs/examples/legends_colorbars/README.txt +0 -0
- ultraplot-1.71.0/docs/examples/plot_types/01_curved_quiver.py +77 -0
- ultraplot-1.71.0/docs/examples/plot_types/02_network_graph.py +57 -0
- ultraplot-1.71.0/docs/examples/plot_types/03_lollipop.py +39 -0
- ultraplot-1.71.0/docs/examples/plot_types/04_datetime_series.py +50 -0
- ultraplot-1.71.0/docs/examples/plot_types/05_box_violin.py +39 -0
- ultraplot-1.71.0/docs/examples/plot_types/06_ridge_plot.py +24 -0
- ultraplot-1.71.0/docs/examples/plot_types/README.txt +0 -0
- ultraplot-1.71.0/docs/external-links.rst +125 -0
- ultraplot-1.71.0/docs/faq.rst +110 -0
- ultraplot-1.71.0/docs/fonts.py +154 -0
- ultraplot-1.71.0/docs/index.rst +164 -0
- ultraplot-1.71.0/docs/insets_panels.py +194 -0
- ultraplot-1.71.0/docs/install.rst +1 -0
- ultraplot-1.71.0/docs/lazy_loading.rst +54 -0
- ultraplot-1.71.0/docs/make.bat +41 -0
- ultraplot-1.71.0/docs/networks.py +84 -0
- ultraplot-1.71.0/docs/projections.py +610 -0
- ultraplot-1.71.0/docs/sphinxext/custom_roles.py +65 -0
- ultraplot-1.71.0/docs/stats.py +458 -0
- ultraplot-1.71.0/docs/subplots.py +527 -0
- ultraplot-1.71.0/docs/ultraplotrc +4 -0
- ultraplot-1.71.0/docs/usage.rst +203 -0
- ultraplot-1.71.0/docs/why.rst +924 -0
- ultraplot-1.71.0/environment.yml +37 -0
- ultraplot-1.71.0/logo/PermanentMarker-Regular.ttf +0 -0
- ultraplot-1.71.0/logo/environment-logo.yml +38 -0
- ultraplot-1.71.0/logo/logo.py +213 -0
- ultraplot-1.71.0/logo/run-linter.sh +19 -0
- ultraplot-1.71.0/logo/webicon.py +64 -0
- ultraplot-1.71.0/logo/whyUltraPlot.svg +1 -0
- ultraplot-1.71.0/pyproject.toml +57 -0
- ultraplot-1.71.0/setup.cfg +4 -0
- ultraplot-1.71.0/ultraplot/__init__.py +237 -0
- ultraplot-1.71.0/ultraplot/_lazy.py +227 -0
- ultraplot-1.71.0/ultraplot/_version.py +1 -0
- ultraplot-1.71.0/ultraplot/axes/__init__.py +42 -0
- ultraplot-1.71.0/ultraplot/axes/base.py +4074 -0
- ultraplot-1.71.0/ultraplot/axes/cartesian.py +1632 -0
- ultraplot-1.71.0/ultraplot/axes/geo.py +3378 -0
- ultraplot-1.71.0/ultraplot/axes/plot.py +6297 -0
- ultraplot-1.71.0/ultraplot/axes/plot_types/__init__.py +0 -0
- ultraplot-1.71.0/ultraplot/axes/plot_types/curved_quiver.py +413 -0
- ultraplot-1.71.0/ultraplot/axes/polar.py +391 -0
- ultraplot-1.71.0/ultraplot/axes/shared.py +232 -0
- ultraplot-1.71.0/ultraplot/axes/three.py +34 -0
- ultraplot-1.71.0/ultraplot/cmaps/Algae.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Amp.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/BR.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Balance.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues1_r.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues2.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues3.xml +25 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues4_r.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues5.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues6.xml +25 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues7.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues8.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Blues9.xml +1 -0
- ultraplot-1.71.0/ultraplot/cmaps/Boreal.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns1.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns2.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns3.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns4.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns5.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns6.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns7.xml +19 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns8.xml +11 -0
- ultraplot-1.71.0/ultraplot/cmaps/Browns9.xml +1 -0
- ultraplot-1.71.0/ultraplot/cmaps/ColdHot.rgb +229 -0
- ultraplot-1.71.0/ultraplot/cmaps/Crest.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Curl.rgb +512 -0
- ultraplot-1.71.0/ultraplot/cmaps/Deep.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Delta.rgb +512 -0
- ultraplot-1.71.0/ultraplot/cmaps/Dense.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Div.json +71 -0
- ultraplot-1.71.0/ultraplot/cmaps/DryWet.json +73 -0
- ultraplot-1.71.0/ultraplot/cmaps/Dusk.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Fire.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Flare.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Glacial.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens1_r.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens2.xml +28 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens3_r.xml +28 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens4.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens5.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens6_r.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens7.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Greens8.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Haline.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Ice.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/IceFire.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Mako.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Marine.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Matter.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Mono.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/MonoCycle.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/NegPos.json +71 -0
- ultraplot-1.71.0/ultraplot/cmaps/Oranges1.xml +27 -0
- ultraplot-1.71.0/ultraplot/cmaps/Oranges2.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Oranges3.xml +15 -0
- ultraplot-1.71.0/ultraplot/cmaps/Oranges4.xml +23 -0
- ultraplot-1.71.0/ultraplot/cmaps/Oxy.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Phase.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Purples1_r.xml +16 -0
- ultraplot-1.71.0/ultraplot/cmaps/Purples2.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Purples3.xml +18 -0
- ultraplot-1.71.0/ultraplot/cmaps/Reds1.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Reds2.xml +22 -0
- ultraplot-1.71.0/ultraplot/cmaps/Reds3.xml +23 -0
- ultraplot-1.71.0/ultraplot/cmaps/Reds4.xml +26 -0
- ultraplot-1.71.0/ultraplot/cmaps/Reds5.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Rocket.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Solar.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Speed.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Stellar.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Sunrise.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Sunset.json +53 -0
- ultraplot-1.71.0/ultraplot/cmaps/Tempo.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Thermal.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Turbid.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Vivid.xml +11 -0
- ultraplot-1.71.0/ultraplot/cmaps/Vlag.rgb +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/Yellows1.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Yellows2.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Yellows3.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/Yellows4.xml +17 -0
- ultraplot-1.71.0/ultraplot/cmaps/acton.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/bam.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/bamO.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/bamako.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/batlow.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/batlowK.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/batlowW.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/berlin.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/bilbao.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/broc.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/brocO.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/buda.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/bukavu.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/cork.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/corkO.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/davos.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/devon.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/fes.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/hawaii.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/imola.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/lajolla.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/lapaz.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/lisbon.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/nuuk.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/oleron.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/oslo.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/roma.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/romaO.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/tofino.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/tokyo.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/turku.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/vanimo.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/vik.txt +256 -0
- ultraplot-1.71.0/ultraplot/cmaps/vikO.txt +256 -0
- ultraplot-1.71.0/ultraplot/colors/opencolor.txt +132 -0
- ultraplot-1.71.0/ultraplot/colors/xkcd.txt +951 -0
- ultraplot-1.71.0/ultraplot/colors.py +3315 -0
- ultraplot-1.71.0/ultraplot/config.py +1859 -0
- ultraplot-1.71.0/ultraplot/constructor.py +1687 -0
- ultraplot-1.71.0/ultraplot/cycles/538.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/FlatUI.hex +1 -0
- ultraplot-1.71.0/ultraplot/cycles/Qual1.rgb +7 -0
- ultraplot-1.71.0/ultraplot/cycles/Qual2.rgb +13 -0
- ultraplot-1.71.0/ultraplot/cycles/bmh.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/classic.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/colorblind.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/colorblind10.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/default.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/ggplot.hex +1 -0
- ultraplot-1.71.0/ultraplot/cycles/seaborn.hex +2 -0
- ultraplot-1.71.0/ultraplot/cycles/tableau.hex +2 -0
- ultraplot-1.71.0/ultraplot/demos.py +1197 -0
- ultraplot-1.71.0/ultraplot/externals/__init__.py +5 -0
- ultraplot-1.71.0/ultraplot/externals/hsluv.py +330 -0
- ultraplot-1.71.0/ultraplot/figure.py +3252 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-Light.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-Black.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-Light.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_FIRAMATH.txt +92 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_FIRASANS.txt +97 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_NOTOSANS.txt +202 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_NOTOSERIF.txt +93 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_OPENSANS.txt +202 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_ROBOTO.txt +202 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_SOURCESANS.txt +93 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_SOURCESERIF.txt +93 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_TEXGYRE.txt +29 -0
- ultraplot-1.71.0/ultraplot/fonts/LICENSE_UBUNTU.txt +96 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-Black.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-Light.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-Medium.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Roboto-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
- ultraplot-1.71.0/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
- ultraplot-1.71.0/ultraplot/gridspec.py +1974 -0
- ultraplot-1.71.0/ultraplot/internals/__init__.py +460 -0
- ultraplot-1.71.0/ultraplot/internals/benchmarks.py +26 -0
- ultraplot-1.71.0/ultraplot/internals/context.py +44 -0
- ultraplot-1.71.0/ultraplot/internals/docstring.py +264 -0
- ultraplot-1.71.0/ultraplot/internals/fonts.py +82 -0
- ultraplot-1.71.0/ultraplot/internals/guides.py +167 -0
- ultraplot-1.71.0/ultraplot/internals/inputs.py +918 -0
- ultraplot-1.71.0/ultraplot/internals/labels.py +113 -0
- ultraplot-1.71.0/ultraplot/internals/rcsetup.py +2184 -0
- ultraplot-1.71.0/ultraplot/internals/versions.py +61 -0
- ultraplot-1.71.0/ultraplot/internals/warnings.py +122 -0
- ultraplot-1.71.0/ultraplot/legend.py +33 -0
- ultraplot-1.71.0/ultraplot/proj.py +325 -0
- ultraplot-1.71.0/ultraplot/scale.py +977 -0
- ultraplot-1.71.0/ultraplot/tests/__init__.py +28 -0
- ultraplot-1.71.0/ultraplot/tests/conftest.py +91 -0
- ultraplot-1.71.0/ultraplot/tests/test_1dplots.py +822 -0
- ultraplot-1.71.0/ultraplot/tests/test_2dplots.py +376 -0
- ultraplot-1.71.0/ultraplot/tests/test_axes.py +618 -0
- ultraplot-1.71.0/ultraplot/tests/test_base.py +121 -0
- ultraplot-1.71.0/ultraplot/tests/test_colorbar.py +810 -0
- ultraplot-1.71.0/ultraplot/tests/test_colormap.py +12 -0
- ultraplot-1.71.0/ultraplot/tests/test_colors.py +129 -0
- ultraplot-1.71.0/ultraplot/tests/test_config.py +122 -0
- ultraplot-1.71.0/ultraplot/tests/test_constructor.py +124 -0
- ultraplot-1.71.0/ultraplot/tests/test_demos.py +119 -0
- ultraplot-1.71.0/ultraplot/tests/test_docs.py +78 -0
- ultraplot-1.71.0/ultraplot/tests/test_figure.py +252 -0
- ultraplot-1.71.0/ultraplot/tests/test_fonts.py +303 -0
- ultraplot-1.71.0/ultraplot/tests/test_format.py +593 -0
- ultraplot-1.71.0/ultraplot/tests/test_geographic.py +1735 -0
- ultraplot-1.71.0/ultraplot/tests/test_gridspec.py +128 -0
- ultraplot-1.71.0/ultraplot/tests/test_handlers.py +35 -0
- ultraplot-1.71.0/ultraplot/tests/test_imports.py +148 -0
- ultraplot-1.71.0/ultraplot/tests/test_imshow.py +105 -0
- ultraplot-1.71.0/ultraplot/tests/test_inputs.py +57 -0
- ultraplot-1.71.0/ultraplot/tests/test_inset.py +29 -0
- ultraplot-1.71.0/ultraplot/tests/test_integration.py +229 -0
- ultraplot-1.71.0/ultraplot/tests/test_legend.py +746 -0
- ultraplot-1.71.0/ultraplot/tests/test_plot.py +757 -0
- ultraplot-1.71.0/ultraplot/tests/test_projections.py +183 -0
- ultraplot-1.71.0/ultraplot/tests/test_statistical_plotting.py +464 -0
- ultraplot-1.71.0/ultraplot/tests/test_subplots.py +917 -0
- ultraplot-1.71.0/ultraplot/tests/test_tickers.py +817 -0
- ultraplot-1.71.0/ultraplot/ticker.py +1514 -0
- ultraplot-1.71.0/ultraplot/ui.py +239 -0
- ultraplot-1.71.0/ultraplot/utils.py +1167 -0
- ultraplot-1.71.0/ultraplot.egg-info/PKG-INFO +194 -0
- ultraplot-1.71.0/ultraplot.egg-info/SOURCES.txt +415 -0
- ultraplot-1.71.0/ultraplot.egg-info/dependency_links.txt +1 -0
- ultraplot-1.71.0/ultraplot.egg-info/requires.txt +5 -0
- ultraplot-1.71.0/ultraplot.egg-info/top_level.txt +2 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<!-- Thanks for helping us make ultraplot a better package! If this is a bug report, please use the template provided below. If this is a feature request, you can delete the template text (just try to be descriptive with your request). -->
|
|
2
|
+
|
|
3
|
+
### Description
|
|
4
|
+
|
|
5
|
+
[Description of the bug or feature.]
|
|
6
|
+
|
|
7
|
+
### Steps to reproduce
|
|
8
|
+
|
|
9
|
+
A "[Minimal, Complete and Verifiable Example](http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports)" will make it much easier for maintainers to help you.
|
|
10
|
+
|
|
11
|
+
```python
|
|
12
|
+
# your code here
|
|
13
|
+
# we should be able to copy-paste this into python and exactly reproduce your bug
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Expected behavior**: [What you expected to happen]
|
|
17
|
+
|
|
18
|
+
**Actual behavior**: [What actually happened]
|
|
19
|
+
|
|
20
|
+
### Equivalent steps in matplotlib
|
|
21
|
+
|
|
22
|
+
Please try to make sure this bug is related to a ultra-specific feature. If you're not sure, try to replicate it with the [native matplotlib API](https://matplotlib.org/3.1.1/api/index.html). Matplotlib bugs belong on the [matplotlib github page](https://github.com/matplotlib/matplotlib).
|
|
23
|
+
|
|
24
|
+
```python
|
|
25
|
+
# your code here, if applicable
|
|
26
|
+
import matplotlib.pyplot as plt
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Ultra version
|
|
30
|
+
|
|
31
|
+
Paste the results of `import matplotlib; print(matplotlib.__version__); import ultra; print(ultra.version)` here.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
name: Build and Test
|
|
2
|
+
on:
|
|
3
|
+
workflow_call:
|
|
4
|
+
inputs:
|
|
5
|
+
python-version:
|
|
6
|
+
required: true
|
|
7
|
+
type: string
|
|
8
|
+
matplotlib-version:
|
|
9
|
+
required: true
|
|
10
|
+
type: string
|
|
11
|
+
|
|
12
|
+
env:
|
|
13
|
+
LC_ALL: en_US.UTF-8
|
|
14
|
+
LANG: en_US.UTF-8
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build-ultraplot:
|
|
18
|
+
name: Test Python ${{ inputs.python-version }} with MPL ${{ inputs.matplotlib-version }}
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
timeout-minutes: 60
|
|
21
|
+
defaults:
|
|
22
|
+
run:
|
|
23
|
+
shell: bash -el {0}
|
|
24
|
+
steps:
|
|
25
|
+
- uses: actions/checkout@v6
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 0
|
|
28
|
+
|
|
29
|
+
- uses: mamba-org/setup-micromamba@v2.0.7
|
|
30
|
+
with:
|
|
31
|
+
environment-file: ./environment.yml
|
|
32
|
+
init-shell: bash
|
|
33
|
+
create-args: >-
|
|
34
|
+
--verbose
|
|
35
|
+
python=${{ inputs.python-version }}
|
|
36
|
+
matplotlib=${{ inputs.matplotlib-version }}
|
|
37
|
+
cache-environment: true
|
|
38
|
+
cache-downloads: false
|
|
39
|
+
|
|
40
|
+
- name: Build Ultraplot
|
|
41
|
+
run: |
|
|
42
|
+
pip install --no-build-isolation --no-deps .
|
|
43
|
+
|
|
44
|
+
- name: Test Ultraplot
|
|
45
|
+
run: |
|
|
46
|
+
pytest -n auto --cov=ultraplot --cov-branch --cov-report term-missing --cov-report=xml ultraplot
|
|
47
|
+
|
|
48
|
+
- name: Upload coverage reports to Codecov
|
|
49
|
+
uses: codecov/codecov-action@v5
|
|
50
|
+
with:
|
|
51
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
52
|
+
slug: Ultraplot/ultraplot
|
|
53
|
+
|
|
54
|
+
compare-baseline:
|
|
55
|
+
name: Compare baseline Python ${{ inputs.python-version }} with MPL ${{ inputs.matplotlib-version }}
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
defaults:
|
|
58
|
+
run:
|
|
59
|
+
shell: bash -el {0}
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v6
|
|
62
|
+
|
|
63
|
+
- uses: mamba-org/setup-micromamba@v2.0.7
|
|
64
|
+
with:
|
|
65
|
+
environment-file: ./environment.yml
|
|
66
|
+
init-shell: bash
|
|
67
|
+
create-args: >-
|
|
68
|
+
--verbose
|
|
69
|
+
python=${{ inputs.python-version }}
|
|
70
|
+
matplotlib=${{ inputs.matplotlib-version }}
|
|
71
|
+
cache-environment: true
|
|
72
|
+
cache-downloads: false
|
|
73
|
+
|
|
74
|
+
# Cache Baseline Figures (Restore step)
|
|
75
|
+
- name: Cache Baseline Figures
|
|
76
|
+
id: cache-baseline
|
|
77
|
+
uses: actions/cache@v4
|
|
78
|
+
with:
|
|
79
|
+
path: ./ultraplot/tests/baseline # The directory to cache
|
|
80
|
+
# Key is based on OS, Python/Matplotlib versions, and the PR number
|
|
81
|
+
key: ${{ runner.os }}-baseline-pr-${{ github.event.pull_request.number }}-${{ inputs.python-version }}-${{ inputs.matplotlib-version }}
|
|
82
|
+
restore-keys: |
|
|
83
|
+
${{ runner.os }}-baseline-pr-${{ github.event.pull_request.number }}-${{ inputs.python-version }}-${{ inputs.matplotlib-version }}-
|
|
84
|
+
|
|
85
|
+
# Conditional Baseline Generation (Only runs on cache miss)
|
|
86
|
+
- name: Generate baseline from main
|
|
87
|
+
# Skip this step if the cache was found (cache-hit is true)
|
|
88
|
+
if: steps.cache-baseline.outputs.cache-hit != 'true'
|
|
89
|
+
run: |
|
|
90
|
+
mkdir -p ultraplot/tests/baseline
|
|
91
|
+
# Checkout the base branch (e.g., 'main') to generate the official baseline
|
|
92
|
+
git fetch origin ${{ github.event.pull_request.base.sha }}
|
|
93
|
+
git checkout ${{ github.event.pull_request.base.sha }}
|
|
94
|
+
|
|
95
|
+
# Install the Ultraplot version from the base branch's code
|
|
96
|
+
pip install --no-build-isolation --no-deps .
|
|
97
|
+
|
|
98
|
+
# Generate the baseline images and hash library
|
|
99
|
+
python -c "import ultraplot as plt; plt.config.Configurator()._save_yaml('ultraplot.yml')"
|
|
100
|
+
pytest -x -W ignore \
|
|
101
|
+
--mpl-generate-path=./ultraplot/tests/baseline/ \
|
|
102
|
+
--mpl-default-style="./ultraplot.yml"\
|
|
103
|
+
ultraplot/tests
|
|
104
|
+
|
|
105
|
+
# Return to the PR branch for the rest of the job
|
|
106
|
+
git checkout ${{ github.sha }}
|
|
107
|
+
|
|
108
|
+
# Image Comparison (Uses cached or newly generated baseline)
|
|
109
|
+
- name: Image Comparison Ultraplot
|
|
110
|
+
run: |
|
|
111
|
+
# Re-install the Ultraplot version from the current PR branch
|
|
112
|
+
pip install --no-build-isolation --no-deps .
|
|
113
|
+
|
|
114
|
+
mkdir -p results
|
|
115
|
+
python -c "import ultraplot as plt; plt.config.Configurator()._save_yaml('ultraplot.yml')"
|
|
116
|
+
pytest -x -W ignore \
|
|
117
|
+
--mpl \
|
|
118
|
+
--mpl-baseline-path=./ultraplot/tests/baseline \
|
|
119
|
+
--mpl-results-path=./results/ \
|
|
120
|
+
--mpl-generate-summary=html \
|
|
121
|
+
--mpl-default-style="./ultraplot.yml" \
|
|
122
|
+
ultraplot/tests
|
|
123
|
+
|
|
124
|
+
# Return the html output of the comparison even if failed
|
|
125
|
+
- name: Upload comparison failures
|
|
126
|
+
if: always()
|
|
127
|
+
uses: actions/upload-artifact@v6
|
|
128
|
+
with:
|
|
129
|
+
name: failed-comparisons-${{ inputs.python-version }}-${{ inputs.matplotlib-version }}-${{ github.sha }}
|
|
130
|
+
path: results/*
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
name: Matrix Test
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main, devel]
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main, devel]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
run-if-changes:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
outputs:
|
|
12
|
+
run: ${{ (github.event_name == 'push' && github.ref_name == 'main') && 'true' || steps.filter.outputs.python }}
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v6
|
|
15
|
+
- uses: dorny/paths-filter@v3
|
|
16
|
+
id: filter
|
|
17
|
+
with:
|
|
18
|
+
filters: |
|
|
19
|
+
python:
|
|
20
|
+
- 'ultraplot/**'
|
|
21
|
+
|
|
22
|
+
get-versions:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
needs:
|
|
25
|
+
- run-if-changes
|
|
26
|
+
if: always() && needs.run-if-changes.outputs.run == 'true'
|
|
27
|
+
outputs:
|
|
28
|
+
python-versions: ${{ steps.set-versions.outputs.python-versions }}
|
|
29
|
+
matplotlib-versions: ${{ steps.set-versions.outputs.matplotlib-versions }}
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v6
|
|
32
|
+
with:
|
|
33
|
+
fetch-depth: 0
|
|
34
|
+
|
|
35
|
+
- uses: actions/setup-python@v6
|
|
36
|
+
with:
|
|
37
|
+
python-version: "3.11"
|
|
38
|
+
|
|
39
|
+
- name: Install dependencies
|
|
40
|
+
run: pip install tomli
|
|
41
|
+
|
|
42
|
+
- id: set-versions
|
|
43
|
+
run: |
|
|
44
|
+
# Create a Python script to read and parse versions
|
|
45
|
+
cat > get_versions.py << 'EOF'
|
|
46
|
+
import tomli
|
|
47
|
+
import re
|
|
48
|
+
import json
|
|
49
|
+
|
|
50
|
+
# Read pyproject.toml
|
|
51
|
+
with open("pyproject.toml", "rb") as f:
|
|
52
|
+
data = tomli.load(f)
|
|
53
|
+
|
|
54
|
+
# Get Python version requirement
|
|
55
|
+
python_req = data["project"]["requires-python"]
|
|
56
|
+
|
|
57
|
+
# Parse min and max versions
|
|
58
|
+
min_version = re.search(r">=(\d+\.\d+)", python_req)
|
|
59
|
+
max_version = re.search(r"<(\d+\.\d+)", python_req)
|
|
60
|
+
|
|
61
|
+
python_versions = []
|
|
62
|
+
if min_version and max_version:
|
|
63
|
+
# Convert version strings to tuples
|
|
64
|
+
min_v = tuple(map(int, min_version.group(1).split(".")))
|
|
65
|
+
max_v = tuple(map(int, max_version.group(1).split(".")))
|
|
66
|
+
|
|
67
|
+
# Generate version list
|
|
68
|
+
current = min_v
|
|
69
|
+
while current < max_v:
|
|
70
|
+
python_versions.append(".".join(map(str, current)))
|
|
71
|
+
current = (current[0], current[1] + 1)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
# parse MPL versions
|
|
75
|
+
mpl_req = None
|
|
76
|
+
for d in data["project"]["dependencies"]:
|
|
77
|
+
if d.startswith("matplotlib"):
|
|
78
|
+
mpl_req = d
|
|
79
|
+
break
|
|
80
|
+
assert mpl_req is not None, "matplotlib version not found in dependencies"
|
|
81
|
+
min_version = re.search(r">=(\d+\.\d+)", mpl_req)
|
|
82
|
+
max_version = re.search(r"<(\d+\.\d+)", mpl_req)
|
|
83
|
+
|
|
84
|
+
mpl_versions = []
|
|
85
|
+
if min_version and max_version:
|
|
86
|
+
# Convert version strings to tuples
|
|
87
|
+
min_v = tuple(map(int, min_version.group(1).split(".")))
|
|
88
|
+
max_v = tuple(map(int, max_version.group(1).split(".")))
|
|
89
|
+
|
|
90
|
+
# Generate version list
|
|
91
|
+
current = min_v
|
|
92
|
+
while current < max_v:
|
|
93
|
+
mpl_versions.append(".".join(map(str, current)))
|
|
94
|
+
current = (current[0], current[1] + 1)
|
|
95
|
+
|
|
96
|
+
# If no versions found, default to 3.9
|
|
97
|
+
if not mpl_versions:
|
|
98
|
+
mpl_versions = ["3.9"]
|
|
99
|
+
|
|
100
|
+
# Create output dictionary
|
|
101
|
+
output = {
|
|
102
|
+
"python_versions": python_versions,
|
|
103
|
+
"matplotlib_versions": mpl_versions
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# Print as JSON
|
|
107
|
+
print(json.dumps(output))
|
|
108
|
+
EOF
|
|
109
|
+
|
|
110
|
+
# Run the script and capture output
|
|
111
|
+
OUTPUT=$(python3 get_versions.py)
|
|
112
|
+
PYTHON_VERSIONS=$(echo $OUTPUT | jq -r '.python_versions')
|
|
113
|
+
MPL_VERSIONS=$(echo $OUTPUT | jq -r '.matplotlib_versions')
|
|
114
|
+
|
|
115
|
+
echo "Detected Python versions: ${PYTHON_VERSIONS}"
|
|
116
|
+
echo "Detected Matplotlib versions: ${MPL_VERSIONS}"
|
|
117
|
+
echo "python-versions=$(echo $PYTHON_VERSIONS | jq -c)" >> $GITHUB_OUTPUT
|
|
118
|
+
echo "matplotlib-versions=$(echo $MPL_VERSIONS | jq -c)" >> $GITHUB_OUTPUT
|
|
119
|
+
|
|
120
|
+
build:
|
|
121
|
+
needs:
|
|
122
|
+
- get-versions
|
|
123
|
+
- run-if-changes
|
|
124
|
+
if: always() && needs.run-if-changes.outputs.run == 'true' && needs.get-versions.result == 'success'
|
|
125
|
+
strategy:
|
|
126
|
+
matrix:
|
|
127
|
+
python-version: ${{ fromJson(needs.get-versions.outputs.python-versions) }}
|
|
128
|
+
matplotlib-version: ${{ fromJson(needs.get-versions.outputs.matplotlib-versions) }}
|
|
129
|
+
fail-fast: false
|
|
130
|
+
uses: ./.github/workflows/build-ultraplot.yml
|
|
131
|
+
concurrency:
|
|
132
|
+
group: ${{ github.workflow }}-${{ github.ref }}-${{ matrix.python-version }}-${{ matrix.matplotlib-version }}
|
|
133
|
+
cancel-in-progress: true
|
|
134
|
+
with:
|
|
135
|
+
python-version: ${{ matrix.python-version }}
|
|
136
|
+
matplotlib-version: ${{ matrix.matplotlib-version }}
|
|
137
|
+
|
|
138
|
+
build-success:
|
|
139
|
+
needs:
|
|
140
|
+
- build
|
|
141
|
+
- run-if-changes
|
|
142
|
+
if: always()
|
|
143
|
+
runs-on: ubuntu-latest
|
|
144
|
+
steps:
|
|
145
|
+
- run: |
|
|
146
|
+
if [[ '${{ needs.run-if-changes.outputs.run }}' == 'false' ]]; then
|
|
147
|
+
echo "No changes detected, tests skipped."
|
|
148
|
+
else
|
|
149
|
+
if [[ '${{ needs.build.result }}' == 'success' ]]; then
|
|
150
|
+
echo "All tests passed successfully!"
|
|
151
|
+
else
|
|
152
|
+
echo "Tests failed!"
|
|
153
|
+
exit 1
|
|
154
|
+
fi
|
|
155
|
+
fi
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
on:
|
|
3
|
+
pull_request:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
push:
|
|
7
|
+
tags: ["v*"]
|
|
8
|
+
|
|
9
|
+
concurrency:
|
|
10
|
+
group: publish-pypi-{{ github.sha }}
|
|
11
|
+
cancel-in-progress: false
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
build-packages:
|
|
15
|
+
name: Build packages
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v6
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- name: Get tags
|
|
23
|
+
run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
|
|
24
|
+
shell: bash
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-python@v6
|
|
27
|
+
with:
|
|
28
|
+
python-version: "3.12"
|
|
29
|
+
|
|
30
|
+
- name: Build package
|
|
31
|
+
run: |
|
|
32
|
+
python -m pip install --upgrade pip wheel setuptools setuptools_scm build twine
|
|
33
|
+
python -m build --sdist --wheel . --outdir dist
|
|
34
|
+
|
|
35
|
+
- name: Check files
|
|
36
|
+
run: |
|
|
37
|
+
ls dist
|
|
38
|
+
shell: bash
|
|
39
|
+
|
|
40
|
+
- name: Test wheels
|
|
41
|
+
run: |
|
|
42
|
+
pushd dist
|
|
43
|
+
python -m pip install ultraplot*.whl
|
|
44
|
+
|
|
45
|
+
version=$(python -c "import ultraplot; print(ultraplot.__version__)")
|
|
46
|
+
echo "Version: $version"
|
|
47
|
+
if [[ "$version" == "0."* ]]; then
|
|
48
|
+
echo "Version is not set correctly!"
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
python -m twine check *
|
|
53
|
+
popd
|
|
54
|
+
shell: bash
|
|
55
|
+
|
|
56
|
+
- name: Upload artifacts
|
|
57
|
+
uses: actions/upload-artifact@v6
|
|
58
|
+
with:
|
|
59
|
+
name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
|
|
60
|
+
path: dist/*
|
|
61
|
+
if-no-files-found: error
|
|
62
|
+
|
|
63
|
+
publish-pypi-test:
|
|
64
|
+
name: Publish to TestPyPI
|
|
65
|
+
needs: build-packages
|
|
66
|
+
if: github.event_name != 'pull_request'
|
|
67
|
+
environment:
|
|
68
|
+
name: test
|
|
69
|
+
url: https://test.pypi.org/project/ultraplot/
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
permissions:
|
|
72
|
+
id-token: write
|
|
73
|
+
contents: read
|
|
74
|
+
steps:
|
|
75
|
+
- name: Download artifacts
|
|
76
|
+
uses: actions/download-artifact@v7
|
|
77
|
+
with:
|
|
78
|
+
name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
|
|
79
|
+
path: dist
|
|
80
|
+
|
|
81
|
+
- name: Check files
|
|
82
|
+
run: |
|
|
83
|
+
ls dist
|
|
84
|
+
shell: bash
|
|
85
|
+
|
|
86
|
+
- name: Publish to TestPyPI
|
|
87
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
88
|
+
with:
|
|
89
|
+
repository-url: https://test.pypi.org/legacy/
|
|
90
|
+
verbose: true
|
|
91
|
+
# releases generate both release and tag events so
|
|
92
|
+
# we get a race condition if we don't skip existing
|
|
93
|
+
skip-existing: ${{ (github.event_name == 'release' || github.event_name == 'push') && 'true' || 'false' }}
|
|
94
|
+
|
|
95
|
+
publish-pypi:
|
|
96
|
+
name: Publish to PyPI
|
|
97
|
+
needs: publish-pypi-test
|
|
98
|
+
environment:
|
|
99
|
+
name: prod
|
|
100
|
+
url: https://pypi.org/project/ultraplot/
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
if: github.event_name == 'release'
|
|
103
|
+
permissions:
|
|
104
|
+
id-token: write
|
|
105
|
+
contents: read
|
|
106
|
+
steps:
|
|
107
|
+
- name: Download artifacts
|
|
108
|
+
uses: actions/download-artifact@v7
|
|
109
|
+
with:
|
|
110
|
+
name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
|
|
111
|
+
path: dist
|
|
112
|
+
|
|
113
|
+
- name: Check files
|
|
114
|
+
run: |
|
|
115
|
+
ls dist
|
|
116
|
+
shell: bash
|
|
117
|
+
|
|
118
|
+
- name: Publish to PyPI
|
|
119
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
120
|
+
with:
|
|
121
|
+
verbose: true
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# VIM extras
|
|
2
|
+
.session.vim
|
|
3
|
+
.vimsession
|
|
4
|
+
.*.sw[a-z]
|
|
5
|
+
|
|
6
|
+
# Pytest-mpl test directory ignore
|
|
7
|
+
baseline
|
|
8
|
+
baseline/*
|
|
9
|
+
results
|
|
10
|
+
results/*
|
|
11
|
+
ultraplot.yml
|
|
12
|
+
|
|
13
|
+
# PyPi stuff
|
|
14
|
+
build
|
|
15
|
+
dist
|
|
16
|
+
.eggs
|
|
17
|
+
*.egg-info
|
|
18
|
+
|
|
19
|
+
# Local docs builds
|
|
20
|
+
docs/api
|
|
21
|
+
docs/_build
|
|
22
|
+
docs/_static/ultraplotrc
|
|
23
|
+
docs/_static/rctable.rst
|
|
24
|
+
docs/_static/*
|
|
25
|
+
|
|
26
|
+
# Development subfolders
|
|
27
|
+
dev
|
|
28
|
+
sources
|
|
29
|
+
|
|
30
|
+
# Python extras
|
|
31
|
+
.ipynb_checkpoints
|
|
32
|
+
*.log
|
|
33
|
+
*.pyc
|
|
34
|
+
.*.pyc
|
|
35
|
+
__pycache__
|
|
36
|
+
test.py
|
|
37
|
+
|
|
38
|
+
# OS files
|
|
39
|
+
.DS_Store
|
|
40
|
+
.DS_Store?
|
|
41
|
+
._*
|
|
42
|
+
.Trashes
|
|
43
|
+
|
|
44
|
+
# Old files
|
|
45
|
+
tmp
|
|
46
|
+
trash
|
|
47
|
+
garbage
|
|
48
|
+
|
|
49
|
+
# version file
|
|
50
|
+
ultraplot/_version.py
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
ci:
|
|
2
|
+
autofix_commit_msg: |
|
|
3
|
+
[pre-commit.ci] auto fixes from pre-commit.com hooks
|
|
4
|
+
|
|
5
|
+
for more information, see https://pre-commit.ci
|
|
6
|
+
autofix_prs: false
|
|
7
|
+
autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
|
|
8
|
+
autoupdate_schedule: monthly
|
|
9
|
+
skip: []
|
|
10
|
+
submodules: false
|
|
11
|
+
|
|
12
|
+
repos:
|
|
13
|
+
- repo: https://github.com/psf/black-pre-commit-mirror
|
|
14
|
+
rev: 25.12.0
|
|
15
|
+
hooks:
|
|
16
|
+
- id: black
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# .readthedocs.yml
|
|
2
|
+
# Read the Docs configuration file
|
|
3
|
+
version: 2
|
|
4
|
+
|
|
5
|
+
# Set the OS and build tools
|
|
6
|
+
build:
|
|
7
|
+
os: ubuntu-22.04
|
|
8
|
+
tools:
|
|
9
|
+
python: "mambaforge-latest"
|
|
10
|
+
|
|
11
|
+
# Conda settings
|
|
12
|
+
conda:
|
|
13
|
+
environment: ./environment.yml
|
|
14
|
+
|
|
15
|
+
# Sphinx settings
|
|
16
|
+
sphinx:
|
|
17
|
+
configuration: ./docs/conf.py
|
|
18
|
+
builder: html
|
|
19
|
+
|
|
20
|
+
# Python settings
|
|
21
|
+
python:
|
|
22
|
+
install:
|
|
23
|
+
- method: pip
|
|
24
|
+
path: .
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "UltraPlot: A succinct wrapper for Matplotlib",
|
|
3
|
+
"upload_type": "software",
|
|
4
|
+
"description": "UltraPlot provides a compact and extensible API on top of Matplotlib, inspired by ProPlot. It simplifies the creation of scientific plots with consistent layout, colorbars, and shared axes.",
|
|
5
|
+
"creators": [
|
|
6
|
+
{
|
|
7
|
+
"name": "van Elteren, Casper",
|
|
8
|
+
"orcid": "0000-0001-9862-8936",
|
|
9
|
+
"affiliation": "University of Amsterdam, Polder Center, Institute for Advanced Study Amsterdam"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "Becker, Matthew R.",
|
|
13
|
+
"orcid": "0000-0001-7774-2246",
|
|
14
|
+
"affiliation": "Argonne National Laboratory, Lemont, IL USA"
|
|
15
|
+
}
|
|
16
|
+
],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"matplotlib",
|
|
20
|
+
"scientific visualization",
|
|
21
|
+
"plotting",
|
|
22
|
+
"wrapper",
|
|
23
|
+
"python"
|
|
24
|
+
],
|
|
25
|
+
"related_identifiers": [
|
|
26
|
+
{
|
|
27
|
+
"relation": "isDerivedFrom",
|
|
28
|
+
"identifier": "https://github.com/lukelbd/proplot",
|
|
29
|
+
"scheme": "url"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"relation": "isDerivedFrom",
|
|
33
|
+
"identifier": "https://matplotlib.org/",
|
|
34
|
+
"scheme": "url"
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"version": "1.57",
|
|
38
|
+
"publication_date": "2025-01-01" // need to fix
|
|
39
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use UltraPlot in your work, please cite it using the following metadata."
|
|
3
|
+
title: "UltraPlot"
|
|
4
|
+
authors:
|
|
5
|
+
- family-names: "van Elteren"
|
|
6
|
+
given-names: "Casper"
|
|
7
|
+
orcid: "https://orcid.org/0000-0001-9862-8936"
|
|
8
|
+
- family-names: "Becker"
|
|
9
|
+
given-names: "Matthew R."
|
|
10
|
+
orcid: "https://orcid.org/0000-0001-7774-2246"
|
|
11
|
+
date-released: "2025-01-01"
|
|
12
|
+
version: "1.57"
|
|
13
|
+
doi: "10.5281/zenodo.15733580"
|
|
14
|
+
repository-code: "https://github.com/Ultraplot/UltraPlot"
|
|
15
|
+
license: "MIT"
|
|
16
|
+
keywords:
|
|
17
|
+
- plotting
|
|
18
|
+
- matplotlib
|
|
19
|
+
- scientific visualization
|
|
20
|
+
- wrapper
|
|
21
|
+
references:
|
|
22
|
+
- type: software
|
|
23
|
+
name: "ProPlot"
|
|
24
|
+
authors:
|
|
25
|
+
- family-names: "Davis"
|
|
26
|
+
given-names: "Luke"
|
|
27
|
+
url: "https://github.com/lukelbd/proplot"
|
|
28
|
+
- type: software
|
|
29
|
+
name: "Matplotlib"
|
|
30
|
+
authors:
|
|
31
|
+
- family-names: "Hunter"
|
|
32
|
+
given-names: "John D."
|
|
33
|
+
url: "https://matplotlib.org/"
|