ultraplot 0.99.3__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-0.99.3/.github/ISSUE_TEMPLATE.md +31 -0
- ultraplot-0.99.3/.github/workflows/ultraplot.yml +117 -0
- ultraplot-0.99.3/.gitignore +39 -0
- ultraplot-0.99.3/.pre-commit-config.yaml +39 -0
- ultraplot-0.99.3/.readthedocs.yml +25 -0
- ultraplot-0.99.3/.travis.yml +42 -0
- ultraplot-0.99.3/CODEOFCONDUCT.md +128 -0
- ultraplot-0.99.3/CONTRIBUTING.rst +271 -0
- ultraplot-0.99.3/INSTALL.rst +30 -0
- ultraplot-0.99.3/LICENSE.txt +427 -0
- ultraplot-0.99.3/PKG-INFO +88 -0
- ultraplot-0.99.3/README.rst +62 -0
- ultraplot-0.99.3/UltraPlotLogo.svg +1904 -0
- ultraplot-0.99.3/WHATSNEW.rst +2308 -0
- ultraplot-0.99.3/baseline/test_colorbar.png +0 -0
- ultraplot-0.99.3/baseline/test_inbounds_data.png +0 -0
- ultraplot-0.99.3/baseline/test_standardized_input.png +0 -0
- ultraplot-0.99.3/baseline/test_standardized_inputs_1d.png +0 -0
- ultraplot-0.99.3/ci/PermanentMarker-Regular.ttf +0 -0
- ultraplot-0.99.3/ci/environment.yml +38 -0
- ultraplot-0.99.3/ci/logo.py +97 -0
- ultraplot-0.99.3/ci/run-linter.sh +19 -0
- ultraplot-0.99.3/docs/1dplots.py +653 -0
- ultraplot-0.99.3/docs/2dplots.py +703 -0
- ultraplot-0.99.3/docs/Makefile +28 -0
- ultraplot-0.99.3/docs/_static/logo_blank.ico +0 -0
- ultraplot-0.99.3/docs/_static/logo_blank.png +0 -0
- ultraplot-0.99.3/docs/_static/logo_blank.svg +320 -0
- ultraplot-0.99.3/docs/_static/logo_long.png +0 -0
- ultraplot-0.99.3/docs/_static/logo_long.svg +518 -0
- ultraplot-0.99.3/docs/_static/logo_social.png +0 -0
- ultraplot-0.99.3/docs/_static/logo_social.svg +322 -0
- ultraplot-0.99.3/docs/_static/logo_square.png +0 -0
- ultraplot-0.99.3/docs/_static/logo_square.svg +592 -0
- ultraplot-0.99.3/docs/api.rst +135 -0
- ultraplot-0.99.3/docs/authors.rst +57 -0
- ultraplot-0.99.3/docs/basics.py +556 -0
- ultraplot-0.99.3/docs/cartesian.py +742 -0
- ultraplot-0.99.3/docs/colorbars_legends.py +466 -0
- ultraplot-0.99.3/docs/colormaps.py +501 -0
- ultraplot-0.99.3/docs/colors.py +201 -0
- ultraplot-0.99.3/docs/conf.py +344 -0
- ultraplot-0.99.3/docs/configuration.rst +188 -0
- ultraplot-0.99.3/docs/contributing.rst +1 -0
- ultraplot-0.99.3/docs/cycles.py +220 -0
- ultraplot-0.99.3/docs/environment.yml +49 -0
- ultraplot-0.99.3/docs/external-links.rst +125 -0
- ultraplot-0.99.3/docs/faq.rst +110 -0
- ultraplot-0.99.3/docs/fonts.py +154 -0
- ultraplot-0.99.3/docs/index.rst +58 -0
- ultraplot-0.99.3/docs/insets_panels.py +194 -0
- ultraplot-0.99.3/docs/install.rst +1 -0
- ultraplot-0.99.3/docs/projections.py +599 -0
- ultraplot-0.99.3/docs/sphinxext/custom_roles.py +63 -0
- ultraplot-0.99.3/docs/stats.py +286 -0
- ultraplot-0.99.3/docs/subplots.py +508 -0
- ultraplot-0.99.3/docs/ultraplotrc +4 -0
- ultraplot-0.99.3/docs/usage.rst +203 -0
- ultraplot-0.99.3/docs/whatsnew.rst +1 -0
- ultraplot-0.99.3/docs/why.rst +924 -0
- ultraplot-0.99.3/environment-dev.yml +25 -0
- ultraplot-0.99.3/environment.yml +11 -0
- ultraplot-0.99.3/pyproject.toml +60 -0
- ultraplot-0.99.3/requirements.txt +4 -0
- ultraplot-0.99.3/setup.cfg +4 -0
- ultraplot-0.99.3/ultraplot/__init__.py +115 -0
- ultraplot-0.99.3/ultraplot/__init__.py.rej +58 -0
- ultraplot-0.99.3/ultraplot/axes/__init__.py +42 -0
- ultraplot-0.99.3/ultraplot/axes/base.py +3240 -0
- ultraplot-0.99.3/ultraplot/axes/cartesian.py +1425 -0
- ultraplot-0.99.3/ultraplot/axes/geo.py +1675 -0
- ultraplot-0.99.3/ultraplot/axes/plot.py +4569 -0
- ultraplot-0.99.3/ultraplot/axes/polar.py +381 -0
- ultraplot-0.99.3/ultraplot/axes/shared.py +186 -0
- ultraplot-0.99.3/ultraplot/axes/three.py +34 -0
- ultraplot-0.99.3/ultraplot/cmaps/Algae.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Amp.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/BR.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Balance.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues1_r.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues2.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues3.xml +25 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues4_r.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues5.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues6.xml +25 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues7.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues8.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Blues9.xml +1 -0
- ultraplot-0.99.3/ultraplot/cmaps/Boreal.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns1.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns2.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns3.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns4.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns5.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns6.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns7.xml +19 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns8.xml +11 -0
- ultraplot-0.99.3/ultraplot/cmaps/Browns9.xml +1 -0
- ultraplot-0.99.3/ultraplot/cmaps/ColdHot.rgb +229 -0
- ultraplot-0.99.3/ultraplot/cmaps/Crest.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Curl.rgb +512 -0
- ultraplot-0.99.3/ultraplot/cmaps/Deep.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Delta.rgb +512 -0
- ultraplot-0.99.3/ultraplot/cmaps/Dense.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Div.json +71 -0
- ultraplot-0.99.3/ultraplot/cmaps/DryWet.json +73 -0
- ultraplot-0.99.3/ultraplot/cmaps/Dusk.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Fire.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Flare.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Glacial.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens1_r.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens2.xml +28 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens3_r.xml +28 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens4.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens5.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens6_r.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens7.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Greens8.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Haline.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Ice.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/IceFire.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Mako.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Marine.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Matter.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Mono.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/MonoCycle.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/NegPos.json +71 -0
- ultraplot-0.99.3/ultraplot/cmaps/Oranges1.xml +27 -0
- ultraplot-0.99.3/ultraplot/cmaps/Oranges2.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Oranges3.xml +15 -0
- ultraplot-0.99.3/ultraplot/cmaps/Oranges4.xml +23 -0
- ultraplot-0.99.3/ultraplot/cmaps/Oxy.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Phase.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Purples1_r.xml +16 -0
- ultraplot-0.99.3/ultraplot/cmaps/Purples2.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Purples3.xml +18 -0
- ultraplot-0.99.3/ultraplot/cmaps/Reds1.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Reds2.xml +22 -0
- ultraplot-0.99.3/ultraplot/cmaps/Reds3.xml +23 -0
- ultraplot-0.99.3/ultraplot/cmaps/Reds4.xml +26 -0
- ultraplot-0.99.3/ultraplot/cmaps/Reds5.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Rocket.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Solar.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Speed.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Stellar.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Sunrise.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Sunset.json +53 -0
- ultraplot-0.99.3/ultraplot/cmaps/Tempo.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Thermal.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Turbid.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Vivid.xml +11 -0
- ultraplot-0.99.3/ultraplot/cmaps/Vlag.rgb +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/Yellows1.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Yellows2.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Yellows3.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/Yellows4.xml +17 -0
- ultraplot-0.99.3/ultraplot/cmaps/acton.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/bam.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/bamO.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/bamako.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/batlow.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/batlowK.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/batlowW.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/berlin.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/bilbao.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/broc.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/brocO.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/buda.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/bukavu.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/cork.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/corkO.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/davos.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/devon.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/fes.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/hawaii.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/imola.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/lajolla.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/lapaz.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/lisbon.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/nuuk.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/oleron.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/oslo.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/roma.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/romaO.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/tofino.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/tokyo.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/turku.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/vanimo.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/vik.txt +256 -0
- ultraplot-0.99.3/ultraplot/cmaps/vikO.txt +256 -0
- ultraplot-0.99.3/ultraplot/colors/opencolor.txt +132 -0
- ultraplot-0.99.3/ultraplot/colors/xkcd.txt +951 -0
- ultraplot-0.99.3/ultraplot/colors.py +3241 -0
- ultraplot-0.99.3/ultraplot/colors.py.rej +243 -0
- ultraplot-0.99.3/ultraplot/config.py +1809 -0
- ultraplot-0.99.3/ultraplot/constructor.py +1633 -0
- ultraplot-0.99.3/ultraplot/cycles/538.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/FlatUI.hex +1 -0
- ultraplot-0.99.3/ultraplot/cycles/Qual1.rgb +7 -0
- ultraplot-0.99.3/ultraplot/cycles/Qual2.rgb +13 -0
- ultraplot-0.99.3/ultraplot/cycles/bmh.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/classic.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/colorblind.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/colorblind10.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/default.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/ggplot.hex +1 -0
- ultraplot-0.99.3/ultraplot/cycles/seaborn.hex +2 -0
- ultraplot-0.99.3/ultraplot/cycles/tableau.hex +2 -0
- ultraplot-0.99.3/ultraplot/demos.py +1201 -0
- ultraplot-0.99.3/ultraplot/externals/__init__.py +5 -0
- ultraplot-0.99.3/ultraplot/externals/hsluv.py +330 -0
- ultraplot-0.99.3/ultraplot/figure.py +2102 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-Light.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-Black.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-Light.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_FIRAMATH.txt +92 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_FIRASANS.txt +97 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_NOTOSANS.txt +202 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_NOTOSERIF.txt +93 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_OPENSANS.txt +202 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_ROBOTO.txt +202 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_SOURCESANS.txt +93 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_SOURCESERIF.txt +93 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_TEXGYRE.txt +29 -0
- ultraplot-0.99.3/ultraplot/fonts/LICENSE_UBUNTU.txt +96 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-Black.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-Light.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-Medium.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Roboto-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
- ultraplot-0.99.3/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
- ultraplot-0.99.3/ultraplot/gridspec.py +1698 -0
- ultraplot-0.99.3/ultraplot/internals/__init__.py +529 -0
- ultraplot-0.99.3/ultraplot/internals/benchmarks.py +26 -0
- ultraplot-0.99.3/ultraplot/internals/context.py +44 -0
- ultraplot-0.99.3/ultraplot/internals/docstring.py +139 -0
- ultraplot-0.99.3/ultraplot/internals/fonts.py +75 -0
- ultraplot-0.99.3/ultraplot/internals/guides.py +167 -0
- ultraplot-0.99.3/ultraplot/internals/inputs.py +862 -0
- ultraplot-0.99.3/ultraplot/internals/labels.py +85 -0
- ultraplot-0.99.3/ultraplot/internals/rcsetup.py +1933 -0
- ultraplot-0.99.3/ultraplot/internals/versions.py +61 -0
- ultraplot-0.99.3/ultraplot/internals/warnings.py +122 -0
- ultraplot-0.99.3/ultraplot/proj.py +325 -0
- ultraplot-0.99.3/ultraplot/scale.py +966 -0
- ultraplot-0.99.3/ultraplot/tests/__init__.py +28 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_align_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_aligned_outer_guides.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_aspect_ratios.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_auto_diverging1.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_auto_legend.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_auto_reverse.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_autodiverging3.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_autodiverging4.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_autodiverging5.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_axes_colors.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_bar_vectors.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_bar_width.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_both_ticklabels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_bounds_ticks.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_boxplot_colors.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_boxplot_vectors.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_cartopy_contours.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_cartopy_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_cartopy_manual.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_centered_legends.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_cmap_cycles.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_colorbar.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_colorbar_ticks.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_colormap_mode.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_column_iteration.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_complex_ticks.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_contour_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_contour_legend_with_label.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_contour_legend_without_label.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_contour_negative.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_contour_single.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_cutoff_ticks.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_data_keyword.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_discrete_ticks.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_discrete_vs_fixed.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_drawing_in_projection_with_globe.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_drawing_in_projection_without_globe.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_edge_fix.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_flow_functions.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_font_adjustments.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_geographic_multiple_projections.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_geographic_single_projection.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_gray_adjustment.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_histogram_legend.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_histogram_types.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_ignore_message.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inbounds_data.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_init_format.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inner_title_zorder.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inset_basic.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inset_colorbars.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inset_colors_1.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inset_colors_2.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_inset_zoom_update.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_invalid_dist.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_invalid_plot.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_keep_guide_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_label_settings.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_level_restriction.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_levels_with_vmin_vmax.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_locale_formatting.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_locale_formatting_en_US.UTF-8.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_manual_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_multi_formatting.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_multiple_calls.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_on_the_fly_mappable.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_outer_align.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_panel_dist.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_panels_suplabels_three_hor_panels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_panels_with_sharing.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_panels_without_sharing_1.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_panels_without_sharing_2.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_parametric_colors.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_parametric_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_patch_format.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_pie_charts.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_pint_quantities.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_polar_projections.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_projection_dicts.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_qualitative_colormaps_1.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_qualitative_colormaps_2.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_reversed_levels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_scatter_alpha.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_scatter_args.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_scatter_cycle.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_scatter_inbounds.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_scatter_sizes.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_seaborn_heatmap.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_seaborn_hist.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_seaborn_relational.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_seaborn_swarmplot.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_segmented_norm.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_segmented_norm_ticks.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_share_all_basic.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_singleton_legend.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_span_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_spine_offset.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_spine_side.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_standardized_input.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_statistical_boxplot.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_three_axes.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_tick_direction.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_tick_labels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_tick_length.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_tick_width.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_title_deflection.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_triangular_functions.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_tuple_handles.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_twin_axes_1.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_twin_axes_2.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_twin_axes_3.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/baseline/test_uneven_levels.png +0 -0
- ultraplot-0.99.3/ultraplot/tests/test_1dplots.py +373 -0
- ultraplot-0.99.3/ultraplot/tests/test_2dplots.py +354 -0
- ultraplot-0.99.3/ultraplot/tests/test_axes.py +179 -0
- ultraplot-0.99.3/ultraplot/tests/test_colorbar.py +253 -0
- ultraplot-0.99.3/ultraplot/tests/test_docs.py +78 -0
- ultraplot-0.99.3/ultraplot/tests/test_format.py +340 -0
- ultraplot-0.99.3/ultraplot/tests/test_geographic.py +116 -0
- ultraplot-0.99.3/ultraplot/tests/test_imshow.py +110 -0
- ultraplot-0.99.3/ultraplot/tests/test_inset.py +28 -0
- ultraplot-0.99.3/ultraplot/tests/test_integration.py +149 -0
- ultraplot-0.99.3/ultraplot/tests/test_legend.py +181 -0
- ultraplot-0.99.3/ultraplot/tests/test_projections.py +138 -0
- ultraplot-0.99.3/ultraplot/tests/test_statistical_plotting.py +77 -0
- ultraplot-0.99.3/ultraplot/tests/test_subplots.py +174 -0
- ultraplot-0.99.3/ultraplot/ticker.py +879 -0
- ultraplot-0.99.3/ultraplot/ui.py +233 -0
- ultraplot-0.99.3/ultraplot/utils.py +912 -0
- ultraplot-0.99.3/ultraplot.egg-info/PKG-INFO +88 -0
- ultraplot-0.99.3/ultraplot.egg-info/SOURCES.txt +479 -0
- ultraplot-0.99.3/ultraplot.egg-info/dependency_links.txt +1 -0
- ultraplot-0.99.3/ultraplot.egg-info/entry_points.txt +2 -0
- ultraplot-0.99.3/ultraplot.egg-info/requires.txt +3 -0
- ultraplot-0.99.3/ultraplot.egg-info/top_level.txt +1 -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,117 @@
|
|
|
1
|
+
name: Build and Test
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
release:
|
|
9
|
+
types: [published]
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
timeout-minutes: 15
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v3
|
|
16
|
+
- uses: mamba-org/setup-micromamba@v2.0.3
|
|
17
|
+
with:
|
|
18
|
+
environment-file: ./environment-dev.yml
|
|
19
|
+
init-shell: >-
|
|
20
|
+
bash
|
|
21
|
+
create-args: >-
|
|
22
|
+
--verbose
|
|
23
|
+
cache-environment: true
|
|
24
|
+
cache-downloads: false
|
|
25
|
+
|
|
26
|
+
- name: Test Ultraplot
|
|
27
|
+
shell: bash -el {0}
|
|
28
|
+
run: |
|
|
29
|
+
micromamba activate ultraplot-dev
|
|
30
|
+
pip install .
|
|
31
|
+
python -m pytest
|
|
32
|
+
|
|
33
|
+
- name: "Build docs"
|
|
34
|
+
shell: bash -el {0}
|
|
35
|
+
run: |
|
|
36
|
+
micromamba activate ultraplot-dev
|
|
37
|
+
cd docs
|
|
38
|
+
make html
|
|
39
|
+
|
|
40
|
+
publish-test:
|
|
41
|
+
needs: build
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
# Run on every push to main/v* branches and pull requests
|
|
44
|
+
if: github.event_name == 'push' || github.event_name == 'pull_request'
|
|
45
|
+
permissions:
|
|
46
|
+
id-token: write
|
|
47
|
+
contents: read
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- name: Checkout repository
|
|
51
|
+
uses: actions/checkout@v3
|
|
52
|
+
with:
|
|
53
|
+
fetch-depth: 0
|
|
54
|
+
|
|
55
|
+
- name: Set up Python
|
|
56
|
+
uses: actions/setup-python@v4
|
|
57
|
+
with:
|
|
58
|
+
python-version: "3.x"
|
|
59
|
+
|
|
60
|
+
- name: Install build
|
|
61
|
+
run: python -m pip install build
|
|
62
|
+
|
|
63
|
+
- name: Build package
|
|
64
|
+
run: python -m build
|
|
65
|
+
|
|
66
|
+
- name: Publish to TestPyPI
|
|
67
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
68
|
+
with:
|
|
69
|
+
repository-url: https://test.pypi.org/legacy/
|
|
70
|
+
|
|
71
|
+
publish:
|
|
72
|
+
needs: [build, publish-test]
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/v')
|
|
75
|
+
permissions:
|
|
76
|
+
# Required for trusted publishing to PyPI
|
|
77
|
+
id-token: write
|
|
78
|
+
contents: read
|
|
79
|
+
|
|
80
|
+
steps:
|
|
81
|
+
- name: Checkout repository
|
|
82
|
+
uses: actions/checkout@v3
|
|
83
|
+
with:
|
|
84
|
+
fetch-depth: 0
|
|
85
|
+
|
|
86
|
+
- name: Set up Python
|
|
87
|
+
uses: actions/setup-python@v4
|
|
88
|
+
with:
|
|
89
|
+
python-version: "3.x"
|
|
90
|
+
|
|
91
|
+
- name: Install build
|
|
92
|
+
run: python -m pip install build
|
|
93
|
+
|
|
94
|
+
- name: Build package
|
|
95
|
+
run: python -m build
|
|
96
|
+
|
|
97
|
+
- name: Publish to PyPI
|
|
98
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
99
|
+
|
|
100
|
+
- name: Publish to Anaconda
|
|
101
|
+
uses: conda-incubator/setup-miniconda@v3
|
|
102
|
+
with:
|
|
103
|
+
auto-activate-base: false
|
|
104
|
+
environment-file: environment-dev.yml
|
|
105
|
+
|
|
106
|
+
- name: Install conda-build
|
|
107
|
+
shell: bash -l {0}
|
|
108
|
+
run: |
|
|
109
|
+
micromamba activate ultraplot-dev
|
|
110
|
+
micromamba install conda-build anaconda-client
|
|
111
|
+
|
|
112
|
+
- name: Build and publish to Anaconda Cloud
|
|
113
|
+
uses: anaconda/upload-conda-package@vi1
|
|
114
|
+
with:
|
|
115
|
+
user: cvanelteren
|
|
116
|
+
token: ${{ secrets.ANACONDA_TOKEN }}
|
|
117
|
+
label: main
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# VIM extras
|
|
2
|
+
.session.vim
|
|
3
|
+
.vimsession
|
|
4
|
+
.*.sw[a-z]
|
|
5
|
+
|
|
6
|
+
# PyPi stuff
|
|
7
|
+
build
|
|
8
|
+
dist
|
|
9
|
+
.eggs
|
|
10
|
+
*.egg-info
|
|
11
|
+
|
|
12
|
+
# Local docs builds
|
|
13
|
+
docs/api
|
|
14
|
+
docs/_build
|
|
15
|
+
docs/_static/ultraplotrc
|
|
16
|
+
docs/_static/rctable.rst
|
|
17
|
+
docs/_static/*
|
|
18
|
+
|
|
19
|
+
# Development subfolders
|
|
20
|
+
dev
|
|
21
|
+
sources
|
|
22
|
+
|
|
23
|
+
# Python extras
|
|
24
|
+
.ipynb_checkpoints
|
|
25
|
+
*.log
|
|
26
|
+
*.pyc
|
|
27
|
+
.*.pyc
|
|
28
|
+
__pycache__
|
|
29
|
+
|
|
30
|
+
# OS files
|
|
31
|
+
.DS_Store
|
|
32
|
+
.DS_Store?
|
|
33
|
+
._*
|
|
34
|
+
.Trashes
|
|
35
|
+
|
|
36
|
+
# Old files
|
|
37
|
+
tmp
|
|
38
|
+
trash
|
|
39
|
+
garbage
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# See: https://pre-commit.com/hooks.html
|
|
2
|
+
# Must put flake8 in separate group so 'black' is executed first
|
|
3
|
+
# WARNING: Make sure to keep flags in sync with ci/run-linter.sh
|
|
4
|
+
repos:
|
|
5
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
6
|
+
rev: v4.1.0
|
|
7
|
+
hooks:
|
|
8
|
+
- id: double-quote-string-fixer
|
|
9
|
+
- id: check-docstring-first
|
|
10
|
+
- id: check-merge-conflict
|
|
11
|
+
- id: end-of-file-fixer
|
|
12
|
+
- id: trailing-whitespace
|
|
13
|
+
|
|
14
|
+
- repo: https://github.com/pre-commit/mirrors-isort
|
|
15
|
+
rev: v5.10.1
|
|
16
|
+
hooks:
|
|
17
|
+
- id: isort
|
|
18
|
+
args: ['--line-width=88', '--multi-line=3', '--force-grid-wrap=0', '--trailing-comma']
|
|
19
|
+
exclude: '(^docs|__init__)'
|
|
20
|
+
|
|
21
|
+
- repo: https://github.com/PyCQA/flake8
|
|
22
|
+
rev: 4.0.1
|
|
23
|
+
hooks:
|
|
24
|
+
- id: flake8
|
|
25
|
+
args: ['--max-line-length=88', '--ignore=W503,E402,E731,E741']
|
|
26
|
+
|
|
27
|
+
# apply once this handles long tables better
|
|
28
|
+
# - repo: https://github.com/PyCQA/doc8
|
|
29
|
+
# rev: 0.10.1
|
|
30
|
+
# hooks:
|
|
31
|
+
# - id: doc8
|
|
32
|
+
# args: ['--max-line-length', '88', '--allow-long-titles']
|
|
33
|
+
|
|
34
|
+
# apply after function keyword args can be ignored
|
|
35
|
+
# - repo: https://github.com/ambv/black
|
|
36
|
+
# rev: 22.1.0
|
|
37
|
+
# hooks:
|
|
38
|
+
# - id: black
|
|
39
|
+
# args: ['--line-length', '88', '--skip-string-normalization']
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# .readthedocs.yml
|
|
2
|
+
# Read the Docs configuration file
|
|
3
|
+
version: 2
|
|
4
|
+
|
|
5
|
+
# Python config
|
|
6
|
+
build:
|
|
7
|
+
os: ubuntu-22.04
|
|
8
|
+
tools:
|
|
9
|
+
python: mambaforge-latest
|
|
10
|
+
jobs:
|
|
11
|
+
pre_build:
|
|
12
|
+
jobs:
|
|
13
|
+
pre_build:
|
|
14
|
+
- locale -a
|
|
15
|
+
- export LC_ALL=en_US.UTF-8
|
|
16
|
+
- export LANG=en_US.UTF-8
|
|
17
|
+
- pytest
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
conda:
|
|
21
|
+
environment: ./docs/environment.yml
|
|
22
|
+
|
|
23
|
+
sphinx:
|
|
24
|
+
configuration: ./docs/conf.py
|
|
25
|
+
builder: html
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Travis Continuos Integration
|
|
2
|
+
# Currently only tests notebook files
|
|
3
|
+
# Based on https://conda.pydata.org/docs/travis.html
|
|
4
|
+
sudo: false # use container based build
|
|
5
|
+
language: python
|
|
6
|
+
dist: focal
|
|
7
|
+
notifications:
|
|
8
|
+
email: false
|
|
9
|
+
|
|
10
|
+
python:
|
|
11
|
+
- "3.7"
|
|
12
|
+
|
|
13
|
+
before_install:
|
|
14
|
+
- |
|
|
15
|
+
MODIFIED_FILES=$(git diff --name-only "$TRAVIS_COMMIT_RANGE" 2>/dev/null)
|
|
16
|
+
if [ $? -eq 0 ] && ! echo "$MODIFIED_FILES" | grep -qvE '(.md)|(.rst)|(.html)|(.png)|(.ico)'
|
|
17
|
+
then
|
|
18
|
+
echo "Only doc files were updated, not running the CI."
|
|
19
|
+
exit
|
|
20
|
+
fi
|
|
21
|
+
- wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh
|
|
22
|
+
- bash miniconda.sh -b -p $HOME/miniconda
|
|
23
|
+
- export PATH="$HOME/miniconda/bin:$PATH"
|
|
24
|
+
- hash -r
|
|
25
|
+
- conda config --set always_yes yes --set changeps1 no --set show_channel_urls true
|
|
26
|
+
- conda update -q conda
|
|
27
|
+
- conda info -a
|
|
28
|
+
|
|
29
|
+
install:
|
|
30
|
+
- conda env create --file ci/environment.yml
|
|
31
|
+
- source activate ultra-dev
|
|
32
|
+
- conda list
|
|
33
|
+
- which conda
|
|
34
|
+
- which python
|
|
35
|
+
- python setup.py sdist bdist_wheel
|
|
36
|
+
- pip install --user ./dist/*.whl
|
|
37
|
+
|
|
38
|
+
script:
|
|
39
|
+
- ci/run-linter.sh
|
|
40
|
+
- pushd docs
|
|
41
|
+
- make html
|
|
42
|
+
- popd
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
8
|
+
identity and expression, level of experience, education, socio-economic status,
|
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity
|
|
10
|
+
and orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behavior that contributes to a positive environment for our
|
|
18
|
+
community include:
|
|
19
|
+
|
|
20
|
+
* Demonstrating empathy and kindness toward other people
|
|
21
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
|
22
|
+
* Giving and gracefully accepting constructive feedback
|
|
23
|
+
* Accepting responsibility and apologizing to those affected by our mistakes,
|
|
24
|
+
and learning from the experience
|
|
25
|
+
* Focusing on what is best not just for us as individuals, but for the
|
|
26
|
+
overall community
|
|
27
|
+
|
|
28
|
+
Examples of unacceptable behavior include:
|
|
29
|
+
|
|
30
|
+
* The use of sexualized language or imagery, and sexual attention or
|
|
31
|
+
advances of any kind
|
|
32
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
33
|
+
* Public or private harassment
|
|
34
|
+
* Publishing others' private information, such as a physical or email
|
|
35
|
+
address, without their explicit permission
|
|
36
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
|
37
|
+
professional setting
|
|
38
|
+
|
|
39
|
+
## Enforcement Responsibilities
|
|
40
|
+
|
|
41
|
+
Community leaders are responsible for clarifying and enforcing our standards of
|
|
42
|
+
acceptable behavior and will take appropriate and fair corrective action in
|
|
43
|
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
44
|
+
or harmful.
|
|
45
|
+
|
|
46
|
+
Community leaders have the right and responsibility to remove, edit, or reject
|
|
47
|
+
comments, commits, code, wiki edits, issues, and other contributions that are
|
|
48
|
+
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
|
49
|
+
decisions when appropriate.
|
|
50
|
+
|
|
51
|
+
## Scope
|
|
52
|
+
|
|
53
|
+
This Code of Conduct applies within all community spaces, and also applies when
|
|
54
|
+
an individual is officially representing the community in public spaces.
|
|
55
|
+
Examples of representing our community include using an official e-mail address,
|
|
56
|
+
posting via an official social media account, or acting as an appointed
|
|
57
|
+
representative at an online or offline event.
|
|
58
|
+
|
|
59
|
+
## Enforcement
|
|
60
|
+
|
|
61
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
62
|
+
reported to the community leaders responsible for enforcement at
|
|
63
|
+
lukelbd@gmail.com.
|
|
64
|
+
All complaints will be reviewed and investigated promptly and fairly.
|
|
65
|
+
|
|
66
|
+
All community leaders are obligated to respect the privacy and security of the
|
|
67
|
+
reporter of any incident.
|
|
68
|
+
|
|
69
|
+
## Enforcement Guidelines
|
|
70
|
+
|
|
71
|
+
Community leaders will follow these Community Impact Guidelines in determining
|
|
72
|
+
the consequences for any action they deem in violation of this Code of Conduct:
|
|
73
|
+
|
|
74
|
+
### 1. Correction
|
|
75
|
+
|
|
76
|
+
**Community Impact**: Use of inappropriate language or other behavior deemed
|
|
77
|
+
unprofessional or unwelcome in the community.
|
|
78
|
+
|
|
79
|
+
**Consequence**: A private, written warning from community leaders, providing
|
|
80
|
+
clarity around the nature of the violation and an explanation of why the
|
|
81
|
+
behavior was inappropriate. A public apology may be requested.
|
|
82
|
+
|
|
83
|
+
### 2. Warning
|
|
84
|
+
|
|
85
|
+
**Community Impact**: A violation through a single incident or series
|
|
86
|
+
of actions.
|
|
87
|
+
|
|
88
|
+
**Consequence**: A warning with consequences for continued behavior. No
|
|
89
|
+
interaction with the people involved, including unsolicited interaction with
|
|
90
|
+
those enforcing the Code of Conduct, for a specified period of time. This
|
|
91
|
+
includes avoiding interactions in community spaces as well as external channels
|
|
92
|
+
like social media. Violating these terms may lead to a temporary or
|
|
93
|
+
permanent ban.
|
|
94
|
+
|
|
95
|
+
### 3. Temporary Ban
|
|
96
|
+
|
|
97
|
+
**Community Impact**: A serious violation of community standards, including
|
|
98
|
+
sustained inappropriate behavior.
|
|
99
|
+
|
|
100
|
+
**Consequence**: A temporary ban from any sort of interaction or public
|
|
101
|
+
communication with the community for a specified period of time. No public or
|
|
102
|
+
private interaction with the people involved, including unsolicited interaction
|
|
103
|
+
with those enforcing the Code of Conduct, is allowed during this period.
|
|
104
|
+
Violating these terms may lead to a permanent ban.
|
|
105
|
+
|
|
106
|
+
### 4. Permanent Ban
|
|
107
|
+
|
|
108
|
+
**Community Impact**: Demonstrating a pattern of violation of community
|
|
109
|
+
standards, including sustained inappropriate behavior, harassment of an
|
|
110
|
+
individual, or aggression toward or disparagement of classes of individuals.
|
|
111
|
+
|
|
112
|
+
**Consequence**: A permanent ban from any sort of public interaction within
|
|
113
|
+
the community.
|
|
114
|
+
|
|
115
|
+
## Attribution
|
|
116
|
+
|
|
117
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
|
118
|
+
version 2.0, available at
|
|
119
|
+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
|
120
|
+
|
|
121
|
+
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
|
122
|
+
enforcement ladder](https://github.com/mozilla/diversity).
|
|
123
|
+
|
|
124
|
+
[homepage]: https://www.contributor-covenant.org
|
|
125
|
+
|
|
126
|
+
For answers to common questions about this code of conduct, see the FAQ at
|
|
127
|
+
https://www.contributor-covenant.org/faq. Translations are available at
|
|
128
|
+
https://www.contributor-covenant.org/translations.
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
.. _contrib:
|
|
2
|
+
|
|
3
|
+
==================
|
|
4
|
+
How to contribute?
|
|
5
|
+
==================
|
|
6
|
+
|
|
7
|
+
Contributions of any size are greatly appreciated! You can
|
|
8
|
+
make a significant impact on ultraplot by just using it and
|
|
9
|
+
reporting `issues <https://github.com/ultraplot/ultraplot/issues>`__.
|
|
10
|
+
|
|
11
|
+
The following sections cover some general guidelines
|
|
12
|
+
regarding ultraplot development for new contributors. Feel
|
|
13
|
+
free to suggest improvements or changes to this workflow.
|
|
14
|
+
|
|
15
|
+
.. _contrib_features:
|
|
16
|
+
|
|
17
|
+
Feature requests
|
|
18
|
+
================
|
|
19
|
+
|
|
20
|
+
We are eager to hear your requests for new features and
|
|
21
|
+
suggestions regarding the current API. You can submit these as
|
|
22
|
+
`issues <https://github.com/ultraplot/ultraplot/issues/new>`__ on Github.
|
|
23
|
+
Please make sure to explain in detail how the feature should work and keep the scope as
|
|
24
|
+
narrow as possible. This will make it easier to implement in small pull requests.
|
|
25
|
+
|
|
26
|
+
If you are feeling inspired, feel free to add the feature yourself and
|
|
27
|
+
submit a pull request!
|
|
28
|
+
|
|
29
|
+
.. _contrib_bugs:
|
|
30
|
+
|
|
31
|
+
Report bugs
|
|
32
|
+
===========
|
|
33
|
+
|
|
34
|
+
Bugs should be reported using the Github
|
|
35
|
+
`issues <https://github.com/ultraplot/ultraplot/issues>`__ page. When reporting a
|
|
36
|
+
bug, please follow the template message and include copy-pasteable code that
|
|
37
|
+
reproduces the issue. This is critical for contributors to fix the bug quickly.
|
|
38
|
+
|
|
39
|
+
If you can figure out how to fix the bug yourself, feel free to submit
|
|
40
|
+
a pull request.
|
|
41
|
+
|
|
42
|
+
.. _contrib_tets:
|
|
43
|
+
|
|
44
|
+
Write tests
|
|
45
|
+
===========
|
|
46
|
+
|
|
47
|
+
Most modern python packages have ``test_*.py`` scripts that are run by `pytest`
|
|
48
|
+
via continuous integration services like `Travis <https://travis-ci.com>`__
|
|
49
|
+
whenever commits are pushed to the repository. Currently, ultraplot's continuous
|
|
50
|
+
integration includes only the examples that appear on the website User Guide (see
|
|
51
|
+
`.travis.yml`), and `Casper van Elteren <https://github.com/cvanelteren>` runs additional tests
|
|
52
|
+
manually. This approach leaves out many use cases and leaves the project more
|
|
53
|
+
vulnerable to bugs. Improving ultraplot's continuous integration using `pytest`
|
|
54
|
+
and `pytest-mpl` is a *critical* item on our to-do list.
|
|
55
|
+
|
|
56
|
+
If you can think of a useful test for ultraplot, feel free to submit a pull request.
|
|
57
|
+
Your test will be used in the future.
|
|
58
|
+
|
|
59
|
+
.. _contrib_docs:
|
|
60
|
+
|
|
61
|
+
Write documentation
|
|
62
|
+
===================
|
|
63
|
+
|
|
64
|
+
Documentation can always be improved. For minor changes, you can edit docstrings and
|
|
65
|
+
documentation files directly in the GitHub web interface without using a local copy.
|
|
66
|
+
|
|
67
|
+
* The docstrings are written in
|
|
68
|
+
`reStructuredText <http://docutils.sourceforge.net/docs/user/rst/quickref.html>`__
|
|
69
|
+
with `numpydoc <https://numpydoc.readthedocs.io/en/latest/>`__ style headers.
|
|
70
|
+
They are embedded in the :ref:`API reference` section using a
|
|
71
|
+
`fork of sphinx-automodapi <https://github.com/lukelbd/sphinx-automodapi>`__.
|
|
72
|
+
* Other sections are written using ``.rst`` files and ``.py`` files in the ``docs``
|
|
73
|
+
folder. The ``.py`` files are translated to python notebooks via
|
|
74
|
+
`jupytext <https://jupytext.readthedocs.io/en/latest/>`__ then embedded in
|
|
75
|
+
the User Guide using `nbsphinx <https://nbsphinx.readthedocs.io/en/0.5.0/>`__.
|
|
76
|
+
* The `default ReST role <https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-default_role>`__
|
|
77
|
+
is ``py:obj``. Please include ``py:obj`` links whenever discussing particular
|
|
78
|
+
functions or classes -- for example, if you are discussing the
|
|
79
|
+
`~ultraplot.axes.Axes.format` method, please write
|
|
80
|
+
```~ultraplot.axes.Axes.format``` rather than ``format``. ultraplot also uses
|
|
81
|
+
`intersphinx <http://www.sphinx-doc.org/en/stable/ext/intersphinx.html>`__
|
|
82
|
+
so you can link to external packages like matplotlib and cartopy.
|
|
83
|
+
|
|
84
|
+
To build the documentation locally, use the following commands:
|
|
85
|
+
|
|
86
|
+
.. code:: bash
|
|
87
|
+
|
|
88
|
+
cd docs
|
|
89
|
+
# Install dependencies to the base conda environment..
|
|
90
|
+
conda env update -f environment.yml
|
|
91
|
+
# ...or create a new conda environment
|
|
92
|
+
# conda env create -n ultraplot-dev --file docs/environment.yml
|
|
93
|
+
# source activate ultraplot-dev
|
|
94
|
+
# Create HTML documentation
|
|
95
|
+
make html
|
|
96
|
+
|
|
97
|
+
The built documentation should be available in ``docs/_build/html``.
|
|
98
|
+
|
|
99
|
+
.. _contrib_pr:
|
|
100
|
+
|
|
101
|
+
Preparing pull requests
|
|
102
|
+
=======================
|
|
103
|
+
|
|
104
|
+
New features and bug fixes should be addressed using pull requests.
|
|
105
|
+
Here is a quick guide for submitting pull requests:
|
|
106
|
+
|
|
107
|
+
#. Fork the
|
|
108
|
+
`ultraplot GitHub repository <https://github.com/ultraplot/ultraplot>`__. It's
|
|
109
|
+
fine to keep "ultraplot" as the fork repository name because it will live
|
|
110
|
+
under your account.
|
|
111
|
+
|
|
112
|
+
#. Clone your fork locally using `git <https://git-scm.com/>`__, connect your
|
|
113
|
+
repository to the upstream (main project), and create a branch as follows:
|
|
114
|
+
|
|
115
|
+
.. code-block:: bash
|
|
116
|
+
|
|
117
|
+
git clone git@github.com:YOUR_GITHUB_USERNAME/ultraplot.git
|
|
118
|
+
cd ultraplot
|
|
119
|
+
git remote add upstream git@github.com:ultraplot/ultraplot.git
|
|
120
|
+
git checkout -b your-branch-name master
|
|
121
|
+
|
|
122
|
+
If you need some help with git, follow the
|
|
123
|
+
`quick start guide <https://git.wiki.kernel.org/index.php/QuickStart>`__.
|
|
124
|
+
|
|
125
|
+
#. Make an editable install of ultraplot by running:
|
|
126
|
+
|
|
127
|
+
.. code-block:: bash
|
|
128
|
+
|
|
129
|
+
pip install -e .
|
|
130
|
+
|
|
131
|
+
This way ``import ultraplot`` imports your local copy,
|
|
132
|
+
rather than the stable version you last downloaded from PyPi.
|
|
133
|
+
You can ``import ultraplot; print(ultraplot.__file__)`` to verify your
|
|
134
|
+
local copy has been imported.
|
|
135
|
+
|
|
136
|
+
#. Install `pre-commit <https://pre-commit.com>`__ and its hook on the
|
|
137
|
+
``ultraplot`` repo as follows:
|
|
138
|
+
|
|
139
|
+
.. code-block:: bash
|
|
140
|
+
|
|
141
|
+
pip install --user pre-commit
|
|
142
|
+
pre-commit install
|
|
143
|
+
|
|
144
|
+
Afterwards ``pre-commit`` will run whenever you commit.
|
|
145
|
+
`pre-commit <https://pre-commit.com/>`__ is a framework for managing and
|
|
146
|
+
maintaining multi-language pre-commit hooks to
|
|
147
|
+
ensure code-style and code formatting is consistent.
|
|
148
|
+
|
|
149
|
+
#. You can now edit your local working copy as necessary. Please follow
|
|
150
|
+
the `PEP8 style guide <https://www.python.org/dev/peps/pep-0008/>`__.
|
|
151
|
+
and try to generally adhere to the
|
|
152
|
+
`black <https://black.readthedocs.io/en/stable/>`__ subset of the PEP8 style
|
|
153
|
+
(we may automatically enforce the "black" style in the future).
|
|
154
|
+
When committing, ``pre-commit`` will modify the files as needed,
|
|
155
|
+
or will generally be clear about what you need to do to pass the pre-commit test.
|
|
156
|
+
|
|
157
|
+
Please break your edits up into reasonably sized commits:
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
.. code-block:: bash
|
|
161
|
+
|
|
162
|
+
git commit -a -m "<commit message>"
|
|
163
|
+
git push -u
|
|
164
|
+
|
|
165
|
+
The commit messages should be short, sweet, and use the imperative mood,
|
|
166
|
+
e.g. "Fix bug" instead of "Fixed bug".
|
|
167
|
+
|
|
168
|
+
..
|
|
169
|
+
#. Run all the tests. Now running tests is as simple as issuing this command:
|
|
170
|
+
.. code-block:: bash
|
|
171
|
+
coverage run --source ultraplot -m py.test
|
|
172
|
+
This command will run tests via the ``pytest`` tool against Python 3.7.
|
|
173
|
+
|
|
174
|
+
#. If you intend to make changes or add examples to the user guide, you may want to
|
|
175
|
+
open the ``docs/*.py`` files as
|
|
176
|
+
`jupyter notebooks <https://jupyter-notebook.readthedocs.io/en/stable/>`__.
|
|
177
|
+
This can be done by
|
|
178
|
+
`installing jupytext <https://jupytext.readthedocs.io/en/latest/install.html>`__,
|
|
179
|
+
starting a jupyter session, and opening the ``.py`` files from the ``Files`` page.
|
|
180
|
+
|
|
181
|
+
#. When you're finished, create a new changelog entry in ``CHANGELOG.rst``.
|
|
182
|
+
The entry should be entered as:
|
|
183
|
+
|
|
184
|
+
.. code-block::
|
|
185
|
+
|
|
186
|
+
* <description> (:pr:`<PR number>`) by `<author name>`_.
|
|
187
|
+
|
|
188
|
+
where ``<description>`` is the description of the PR related to the change,
|
|
189
|
+
``<PR number>`` is the pull request number, and ``<author name>`` is your first
|
|
190
|
+
and last name. Make sure to add yourself to the list of authors at the end of
|
|
191
|
+
``CHANGELOG.rst`` and the list of contributors in ``docs/authors.rst``.
|
|
192
|
+
Also make sure to add the changelog entry under one of the valid
|
|
193
|
+
``.. rubric:: <heading>`` headings listed at the top of ``CHANGELOG.rst``.
|
|
194
|
+
|
|
195
|
+
#. Finally, submit a pull request through the GitHub website using this data:
|
|
196
|
+
|
|
197
|
+
.. code-block::
|
|
198
|
+
|
|
199
|
+
head-fork: YOUR_GITHUB_USERNAME/ultraplot
|
|
200
|
+
compare: your-branch-name
|
|
201
|
+
|
|
202
|
+
base-fork: ultraplot/ultraplot
|
|
203
|
+
base: master
|
|
204
|
+
|
|
205
|
+
Note that you can create the pull request before you're finished with your
|
|
206
|
+
feature addition or bug fix. The PR will update as you add more commits. ultraplot
|
|
207
|
+
developers and contributors can then review your code and offer suggestions.
|
|
208
|
+
|
|
209
|
+
.. _contrib_release:
|
|
210
|
+
|
|
211
|
+
Release procedure
|
|
212
|
+
=================
|
|
213
|
+
|
|
214
|
+
Once version 1.0 is released, ultraplot will follow semantic versioning. That is, given
|
|
215
|
+
a version number ``X.Y.Z``, the major version ``X`` will be incremented when something
|
|
216
|
+
is deprecated, the minor version ``Y`` will be incremented when features are added,
|
|
217
|
+
and the patch number ``Z`` will be incremented when bugs are fixed.
|
|
218
|
+
|
|
219
|
+
Currently, ultraplot's major version number is ``0``, reflecting the fact that the API
|
|
220
|
+
is new and subject to rapid changes. Similar to semantic versioning, the minor version
|
|
221
|
+
number is incremented when something is deprecated or the style is changed, and the
|
|
222
|
+
patch number is incremented only when features are added or bugs are fixed.
|
|
223
|
+
|
|
224
|
+
For now, `Casper van Eltern <https://github.com/cvanelteren>`__ is the only one who can
|
|
225
|
+
publish releases on PyPi, but this will change in the future. Releases should
|
|
226
|
+
be carried out as follows:
|
|
227
|
+
|
|
228
|
+
#. Create a new branch ``release-vX.Y.Z`` with the version for the release.
|
|
229
|
+
|
|
230
|
+
#. Make sure to update ``CHANGELOG.rst`` and that all new changes are reflected
|
|
231
|
+
in the documentation:
|
|
232
|
+
|
|
233
|
+
.. code-block:: bash
|
|
234
|
+
|
|
235
|
+
git add CHANGELOG.rst
|
|
236
|
+
git commit -m 'Update changelog'
|
|
237
|
+
|
|
238
|
+
#. Open a new pull request for this branch targeting ``master``.
|
|
239
|
+
|
|
240
|
+
#. After all tests pass and the pull request has been approved, merge into
|
|
241
|
+
``master``.
|
|
242
|
+
|
|
243
|
+
#. Get the latest version of the master branch:
|
|
244
|
+
|
|
245
|
+
.. code-block:: bash
|
|
246
|
+
|
|
247
|
+
git checkout master
|
|
248
|
+
git pull
|
|
249
|
+
|
|
250
|
+
#. Tag the current commit and push to github:
|
|
251
|
+
|
|
252
|
+
.. code-block:: bash
|
|
253
|
+
|
|
254
|
+
git tag -a vX.Y.Z -m "Version X.Y.Z"
|
|
255
|
+
git push origin master --tags
|
|
256
|
+
|
|
257
|
+
#. Build and publish release on PyPI:
|
|
258
|
+
|
|
259
|
+
.. code-block:: bash
|
|
260
|
+
|
|
261
|
+
# Remove previous build products and build the package
|
|
262
|
+
rm -r dist build *.egg-info
|
|
263
|
+
python setup.py sdist bdist_wheel
|
|
264
|
+
# Check the source and upload to the test repository
|
|
265
|
+
twine check dist/*
|
|
266
|
+
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
|
|
267
|
+
# Go to https://test.pypi.org/project/ultraplot/ and make sure everything looks ok
|
|
268
|
+
# Then make sure the package is installable
|
|
269
|
+
pip install --index-url https://test.pypi.org/simple/ ultraplot
|
|
270
|
+
# Register and push to pypi
|
|
271
|
+
twine upload dist/*
|