ultraplot 2.2.0__tar.gz → 2.3.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.
Files changed (472) hide show
  1. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/workflows/main.yml +1 -1
  2. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/workflows/publish-pypi.yml +49 -49
  3. {ultraplot-2.2.0 → ultraplot-2.3.0}/.pre-commit-config.yaml +1 -1
  4. {ultraplot-2.2.0/ultraplot.egg-info → ultraplot-2.3.0}/PKG-INFO +1 -1
  5. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/custom.js +127 -0
  6. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/colorbars_legends.py +56 -2
  7. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/contributing.rst +33 -0
  8. ultraplot-2.3.0/docs/examples/legend_types/01_semantic_legends.py +5 -0
  9. ultraplot-2.3.0/docs/examples/legends_colorbars/03_semantic_legends.py +233 -0
  10. ultraplot-2.3.0/ultraplot/_version.py +1 -0
  11. ultraplot-2.3.0/ultraplot/axes/_formatting.py +102 -0
  12. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/base.py +193 -55
  13. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/cartesian.py +178 -20
  14. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/plot.py +3 -1
  15. ultraplot-2.3.0/ultraplot/axes/polar.py +747 -0
  16. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/shared.py +40 -26
  17. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/colors.py +0 -1
  18. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/config.py +63 -5
  19. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/figure.py +430 -6
  20. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/gridspec.py +36 -4
  21. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/__init__.py +1 -0
  22. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/docstring.py +1 -0
  23. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/inputs.py +1 -1
  24. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/labels.py +28 -0
  25. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/legend.py +426 -176
  26. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_1dplots.py +18 -0
  27. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_animation.py +49 -0
  28. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_axes.py +11 -8
  29. ultraplot-2.3.0/ultraplot/tests/test_axes_alt_styles.py +256 -0
  30. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_config_helpers_extra.py +15 -0
  31. ultraplot-2.3.0/ultraplot/tests/test_docs_search.py +119 -0
  32. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_figure.py +50 -0
  33. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_geographic.py +29 -0
  34. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_inputs_helpers.py +22 -0
  35. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_legend.py +97 -0
  36. ultraplot-2.3.0/ultraplot/tests/test_projections.py +536 -0
  37. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_release_metadata.py +3 -9
  38. ultraplot-2.3.0/ultraplot/tests/test_semantic_legend.py +544 -0
  39. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_subplots.py +24 -0
  40. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/text.py +47 -4
  41. {ultraplot-2.2.0 → ultraplot-2.3.0/ultraplot.egg-info}/PKG-INFO +1 -1
  42. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot.egg-info/SOURCES.txt +5 -0
  43. ultraplot-2.2.0/docs/examples/legends_colorbars/03_semantic_legends.py +0 -108
  44. ultraplot-2.2.0/ultraplot/_version.py +0 -1
  45. ultraplot-2.2.0/ultraplot/axes/polar.py +0 -392
  46. ultraplot-2.2.0/ultraplot/tests/test_projections.py +0 -212
  47. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/ISSUE_TEMPLATE.md +0 -0
  48. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/dependabot.yml +0 -0
  49. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/micromamba-condarc.yml +0 -0
  50. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/workflows/build-ultraplot.yml +0 -0
  51. {ultraplot-2.2.0 → ultraplot-2.3.0}/.github/workflows/test-map.yml +0 -0
  52. {ultraplot-2.2.0 → ultraplot-2.3.0}/.gitignore +0 -0
  53. {ultraplot-2.2.0 → ultraplot-2.3.0}/.readthedocs.yml +0 -0
  54. {ultraplot-2.2.0 → ultraplot-2.3.0}/CITATION.cff +0 -0
  55. {ultraplot-2.2.0 → ultraplot-2.3.0}/CODEOFCONDUCT.md +0 -0
  56. {ultraplot-2.2.0 → ultraplot-2.3.0}/CONTRIBUTING.rst +0 -0
  57. {ultraplot-2.2.0 → ultraplot-2.3.0}/INSTALL.rst +0 -0
  58. {ultraplot-2.2.0 → ultraplot-2.3.0}/LICENSE.txt +0 -0
  59. {ultraplot-2.2.0 → ultraplot-2.3.0}/README.rst +0 -0
  60. {ultraplot-2.2.0 → ultraplot-2.3.0}/UltraPlotLogo.svg +0 -0
  61. {ultraplot-2.2.0 → ultraplot-2.3.0}/codecov.yml +0 -0
  62. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/1dplots.py +0 -0
  63. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/2dplots.py +0 -0
  64. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/Makefile +0 -0
  65. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_ext/notoc.py +0 -0
  66. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_scripts/fetch_releases.py +0 -0
  67. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/custom.css +0 -0
  68. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/example_plots/cartesian_example.svg +0 -0
  69. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/example_plots/colorbars_legends_example.svg +0 -0
  70. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/example_plots/colormaps_example.svg +0 -0
  71. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/example_plots/panels_example.svg +0 -0
  72. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/example_plots/projection_example.svg +0 -0
  73. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/example_plots/subplot_example.svg +0 -0
  74. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/logo_blank.svg +0 -0
  75. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/logo_long.png +0 -0
  76. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/logo_long.svg +0 -0
  77. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/logo_social.png +0 -0
  78. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/logo_social.svg +0 -0
  79. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_static/logo_square.png +0 -0
  80. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/_templates/whatsnew_sidebar.html +0 -0
  81. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/about.rst +0 -0
  82. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/api.rst +0 -0
  83. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/basics.py +0 -0
  84. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/cartesian.py +0 -0
  85. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/colormaps.py +0 -0
  86. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/colors.py +0 -0
  87. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/conf.py +0 -0
  88. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/configuration.rst +0 -0
  89. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/cycles.py +0 -0
  90. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/README.txt +0 -0
  91. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/colors/01_cycle_colormap.py +0 -0
  92. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/colors/02_diverging_colormap.py +0 -0
  93. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/colors/README.txt +0 -0
  94. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/geo/01_robin_tracks.py +0 -0
  95. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/geo/02_orthographic_views.py +0 -0
  96. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/geo/03_projections_features.py +0 -0
  97. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/geo/04_choropleth.py +0 -0
  98. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/geo/README.txt +0 -0
  99. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/layouts/01_shared_axes_abc.py +0 -0
  100. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/layouts/02_complex_layout_insets.py +0 -0
  101. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/layouts/03_spanning_labels.py +0 -0
  102. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/layouts/README.txt +0 -0
  103. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/legends_colorbars/01_multi_colorbars.py +0 -0
  104. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +0 -0
  105. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/legends_colorbars/README.txt +0 -0
  106. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/01_curved_quiver.py +0 -0
  107. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/02_network_graph.py +0 -0
  108. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/03_lollipop.py +0 -0
  109. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/04_datetime_series.py +0 -0
  110. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/05_box_violin.py +0 -0
  111. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/06_ridge_plot.py +0 -0
  112. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/07_radar.py +0 -0
  113. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/07_sankey.py +0 -0
  114. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/08_chord_diagram.py +0 -0
  115. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/08_ternary.py +0 -0
  116. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/09_phylogeny.py +0 -0
  117. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/10_circos_bed.py +0 -0
  118. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/11_topic_ribbon.py +0 -0
  119. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/examples/plot_types/README.txt +0 -0
  120. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/external-links.rst +0 -0
  121. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/faq.rst +0 -0
  122. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/fonts.py +0 -0
  123. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/index.rst +0 -0
  124. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/insets_panels.py +0 -0
  125. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/install.rst +0 -0
  126. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/lazy_loading.rst +0 -0
  127. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/make.bat +0 -0
  128. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/networks.py +0 -0
  129. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/projections.py +0 -0
  130. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/requirements-rtd.txt +0 -0
  131. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/sphinxext/custom_roles.py +0 -0
  132. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/sphinxext/jupytext_cache.py +0 -0
  133. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/stats.py +0 -0
  134. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/subplots.py +0 -0
  135. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/ultraplotrc +0 -0
  136. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/usage.rst +0 -0
  137. {ultraplot-2.2.0 → ultraplot-2.3.0}/docs/why.rst +0 -0
  138. {ultraplot-2.2.0 → ultraplot-2.3.0}/environment.yml +0 -0
  139. {ultraplot-2.2.0 → ultraplot-2.3.0}/logo/PermanentMarker-Regular.ttf +0 -0
  140. {ultraplot-2.2.0 → ultraplot-2.3.0}/logo/environment-logo.yml +0 -0
  141. {ultraplot-2.2.0 → ultraplot-2.3.0}/logo/logo.py +0 -0
  142. {ultraplot-2.2.0 → ultraplot-2.3.0}/logo/run-linter.sh +0 -0
  143. {ultraplot-2.2.0 → ultraplot-2.3.0}/logo/webicon.py +0 -0
  144. {ultraplot-2.2.0 → ultraplot-2.3.0}/logo/whyUltraPlot.svg +0 -0
  145. {ultraplot-2.2.0 → ultraplot-2.3.0}/noxfile.py +0 -0
  146. {ultraplot-2.2.0 → ultraplot-2.3.0}/pyproject.toml +0 -0
  147. {ultraplot-2.2.0 → ultraplot-2.3.0}/requirements-minimal.txt +0 -0
  148. {ultraplot-2.2.0 → ultraplot-2.3.0}/setup.cfg +0 -0
  149. {ultraplot-2.2.0 → ultraplot-2.3.0}/tools/ci/build_test_map.py +0 -0
  150. {ultraplot-2.2.0 → ultraplot-2.3.0}/tools/ci/select_tests.py +0 -0
  151. {ultraplot-2.2.0 → ultraplot-2.3.0}/tools/ci/version_support.py +0 -0
  152. {ultraplot-2.2.0 → ultraplot-2.3.0}/tools/release/publish_zenodo.py +0 -0
  153. {ultraplot-2.2.0 → ultraplot-2.3.0}/tools/release/sync_citation.py +0 -0
  154. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/__init__.py +0 -0
  155. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/_lazy.py +0 -0
  156. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/__init__.py +0 -0
  157. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/container.py +0 -0
  158. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/geo.py +0 -0
  159. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/plot_types/__init__.py +0 -0
  160. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/plot_types/circlize.py +0 -0
  161. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/plot_types/curved_quiver.py +0 -0
  162. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/plot_types/ribbon.py +0 -0
  163. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/plot_types/sankey.py +0 -0
  164. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/axes/three.py +0 -0
  165. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Algae.rgb +0 -0
  166. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Amp.rgb +0 -0
  167. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/BR.rgb +0 -0
  168. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Balance.rgb +0 -0
  169. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues1_r.xml +0 -0
  170. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues2.xml +0 -0
  171. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues3.xml +0 -0
  172. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues4_r.xml +0 -0
  173. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues5.xml +0 -0
  174. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues6.xml +0 -0
  175. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues7.xml +0 -0
  176. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues8.xml +0 -0
  177. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Blues9.xml +0 -0
  178. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Boreal.json +0 -0
  179. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns1.xml +0 -0
  180. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns2.xml +0 -0
  181. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns3.xml +0 -0
  182. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns4.xml +0 -0
  183. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns5.xml +0 -0
  184. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns6.xml +0 -0
  185. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns7.xml +0 -0
  186. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns8.xml +0 -0
  187. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Browns9.xml +0 -0
  188. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/ColdHot.rgb +0 -0
  189. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Crest.rgb +0 -0
  190. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Curl.rgb +0 -0
  191. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Deep.rgb +0 -0
  192. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Delta.rgb +0 -0
  193. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Dense.rgb +0 -0
  194. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Div.json +0 -0
  195. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/DryWet.json +0 -0
  196. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Dusk.json +0 -0
  197. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Fire.json +0 -0
  198. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Flare.rgb +0 -0
  199. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Glacial.json +0 -0
  200. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens1_r.xml +0 -0
  201. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens2.xml +0 -0
  202. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens3_r.xml +0 -0
  203. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens4.xml +0 -0
  204. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens5.xml +0 -0
  205. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens6_r.xml +0 -0
  206. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens7.xml +0 -0
  207. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Greens8.xml +0 -0
  208. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Haline.rgb +0 -0
  209. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Ice.rgb +0 -0
  210. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/IceFire.rgb +0 -0
  211. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Mako.rgb +0 -0
  212. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Marine.json +0 -0
  213. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Matter.rgb +0 -0
  214. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Mono.txt +0 -0
  215. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/MonoCycle.txt +0 -0
  216. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/NegPos.json +0 -0
  217. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Oranges1.xml +0 -0
  218. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Oranges2.xml +0 -0
  219. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Oranges3.xml +0 -0
  220. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Oranges4.xml +0 -0
  221. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Oxy.rgb +0 -0
  222. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Phase.rgb +0 -0
  223. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Purples1_r.xml +0 -0
  224. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Purples2.xml +0 -0
  225. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Purples3.xml +0 -0
  226. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Reds1.xml +0 -0
  227. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Reds2.xml +0 -0
  228. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Reds3.xml +0 -0
  229. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Reds4.xml +0 -0
  230. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Reds5.xml +0 -0
  231. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Rocket.rgb +0 -0
  232. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Solar.rgb +0 -0
  233. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Speed.rgb +0 -0
  234. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Stellar.json +0 -0
  235. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Sunrise.json +0 -0
  236. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Sunset.json +0 -0
  237. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Tempo.rgb +0 -0
  238. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Thermal.rgb +0 -0
  239. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Turbid.rgb +0 -0
  240. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Vivid.xml +0 -0
  241. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Vlag.rgb +0 -0
  242. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Yellows1.xml +0 -0
  243. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Yellows2.xml +0 -0
  244. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Yellows3.xml +0 -0
  245. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/Yellows4.xml +0 -0
  246. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/acton.txt +0 -0
  247. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/bam.txt +0 -0
  248. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/bamO.txt +0 -0
  249. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/bamako.txt +0 -0
  250. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/batlow.txt +0 -0
  251. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/batlowK.txt +0 -0
  252. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/batlowW.txt +0 -0
  253. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/berlin.txt +0 -0
  254. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/bilbao.txt +0 -0
  255. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/broc.txt +0 -0
  256. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/brocO.txt +0 -0
  257. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/buda.txt +0 -0
  258. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/bukavu.txt +0 -0
  259. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/cork.txt +0 -0
  260. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/corkO.txt +0 -0
  261. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/davos.txt +0 -0
  262. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/devon.txt +0 -0
  263. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/fes.txt +0 -0
  264. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/hawaii.txt +0 -0
  265. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/imola.txt +0 -0
  266. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/lajolla.txt +0 -0
  267. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/lapaz.txt +0 -0
  268. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/lisbon.txt +0 -0
  269. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/nuuk.txt +0 -0
  270. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/oleron.txt +0 -0
  271. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/oslo.txt +0 -0
  272. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/roma.txt +0 -0
  273. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/romaO.txt +0 -0
  274. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/tofino.txt +0 -0
  275. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/tokyo.txt +0 -0
  276. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/turku.txt +0 -0
  277. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/vanimo.txt +0 -0
  278. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/vik.txt +0 -0
  279. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cmaps/vikO.txt +0 -0
  280. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/colorbar.py +0 -0
  281. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/colors/opencolor.txt +0 -0
  282. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/colors/xkcd.txt +0 -0
  283. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/constructor.py +0 -0
  284. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/538.hex +0 -0
  285. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/FlatUI.hex +0 -0
  286. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/Qual1.rgb +0 -0
  287. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/Qual2.rgb +0 -0
  288. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/bmh.hex +0 -0
  289. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/classic.hex +0 -0
  290. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/colorblind.hex +0 -0
  291. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/colorblind10.hex +0 -0
  292. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/default.hex +0 -0
  293. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/ggplot.hex +0 -0
  294. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/seaborn.hex +0 -0
  295. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/cycles/tableau.hex +0 -0
  296. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/demos.py +0 -0
  297. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/externals/__init__.py +0 -0
  298. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/externals/hsluv.py +0 -0
  299. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
  300. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
  301. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
  302. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-Light.ttf +0 -0
  303. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
  304. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
  305. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
  306. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
  307. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-Black.ttf +0 -0
  308. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
  309. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
  310. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
  311. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
  312. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
  313. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
  314. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
  315. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
  316. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-Light.ttf +0 -0
  317. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
  318. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
  319. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
  320. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
  321. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
  322. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
  323. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_FIRAMATH.txt +0 -0
  324. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_FIRASANS.txt +0 -0
  325. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_NOTOSANS.txt +0 -0
  326. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_NOTOSERIF.txt +0 -0
  327. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_OPENSANS.txt +0 -0
  328. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_ROBOTO.txt +0 -0
  329. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_SOURCESANS.txt +0 -0
  330. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_SOURCESERIF.txt +0 -0
  331. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_TEXGYRE.txt +0 -0
  332. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/LICENSE_UBUNTU.txt +0 -0
  333. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
  334. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
  335. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
  336. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
  337. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
  338. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
  339. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
  340. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
  341. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
  342. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
  343. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
  344. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
  345. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
  346. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  347. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-Black.ttf +0 -0
  348. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
  349. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-Bold.ttf +0 -0
  350. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
  351. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-Italic.ttf +0 -0
  352. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-Light.ttf +0 -0
  353. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
  354. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-Medium.ttf +0 -0
  355. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
  356. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Roboto-Regular.ttf +0 -0
  357. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
  358. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
  359. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
  360. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
  361. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
  362. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
  363. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
  364. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
  365. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
  366. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
  367. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
  368. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
  369. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
  370. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
  371. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
  372. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
  373. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
  374. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
  375. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
  376. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
  377. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
  378. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
  379. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
  380. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
  381. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
  382. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
  383. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
  384. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
  385. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
  386. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
  387. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
  388. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
  389. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
  390. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
  391. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
  392. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
  393. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
  394. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
  395. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
  396. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
  397. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
  398. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
  399. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
  400. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
  401. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
  402. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
  403. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
  404. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
  405. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
  406. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
  407. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
  408. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
  409. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
  410. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
  411. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
  412. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
  413. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
  414. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
  415. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
  416. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
  417. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
  418. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/benchmarks.py +0 -0
  419. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/context.py +0 -0
  420. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/fonts.py +0 -0
  421. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/guides.py +0 -0
  422. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/rcsetup.py +0 -0
  423. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/versions.py +0 -0
  424. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/internals/warnings.py +0 -0
  425. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/proj.py +0 -0
  426. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/scale.py +0 -0
  427. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/__init__.py +0 -0
  428. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/conftest.py +0 -0
  429. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_2dplots.py +0 -0
  430. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_axes_base_colorbar_helpers.py +0 -0
  431. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_base.py +0 -0
  432. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_circlize_integration.py +0 -0
  433. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_colorbar.py +0 -0
  434. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_colorbar_helpers_extra.py +0 -0
  435. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_colormap.py +0 -0
  436. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_colormap_helpers_extra.py +0 -0
  437. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_colors.py +0 -0
  438. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_colors_helpers.py +0 -0
  439. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_config.py +0 -0
  440. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_constructor.py +0 -0
  441. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_constructor_helpers_extra.py +0 -0
  442. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_core_versions.py +0 -0
  443. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_demos.py +0 -0
  444. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_docs.py +0 -0
  445. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_docs_fetch_releases.py +0 -0
  446. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_external_axes_container_integration.py +0 -0
  447. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_external_container_edge_cases.py +0 -0
  448. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_external_container_mocked.py +0 -0
  449. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_fonts.py +0 -0
  450. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_format.py +0 -0
  451. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_gridspec.py +0 -0
  452. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_handlers.py +0 -0
  453. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_imports.py +0 -0
  454. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_imshow.py +0 -0
  455. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_inputs.py +0 -0
  456. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_inset.py +0 -0
  457. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_integration.py +0 -0
  458. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_plot.py +0 -0
  459. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_proj_helpers.py +0 -0
  460. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_rcsetup_helpers.py +0 -0
  461. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_scale_helpers.py +0 -0
  462. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_statistical_plotting.py +0 -0
  463. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_text_helpers.py +0 -0
  464. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_tickers.py +0 -0
  465. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/tests/test_ultralayout.py +0 -0
  466. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/ticker.py +0 -0
  467. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/ui.py +0 -0
  468. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/ultralayout.py +0 -0
  469. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot/utils.py +0 -0
  470. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot.egg-info/dependency_links.txt +0 -0
  471. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot.egg-info/requires.txt +0 -0
  472. {ultraplot-2.2.0 → ultraplot-2.3.0}/ultraplot.egg-info/top_level.txt +0 -0
@@ -9,7 +9,7 @@ jobs:
9
9
  run-if-changes:
10
10
  runs-on: ubuntu-latest
11
11
  outputs:
12
- run: ${{ (github.event_name == 'push' && github.ref_name == 'main') && 'true' || steps.filter.outputs.python }}
12
+ run: ${{ github.event_name == 'push' && 'true' || steps.filter.outputs.python }}
13
13
  steps:
14
14
  - uses: actions/checkout@v6
15
15
  - uses: dorny/paths-filter@v4
@@ -130,55 +130,55 @@ jobs:
130
130
  contents: write
131
131
  steps:
132
132
  - name: Create GitHub release
133
- uses: softprops/action-gh-release@v2
133
+ uses: softprops/action-gh-release@v3
134
134
  with:
135
135
  generate_release_notes: true
136
136
 
137
- publish-zenodo:
138
- name: Publish Zenodo release
139
- needs: publish-github-release
140
- runs-on: ubuntu-latest
141
- if: github.event_name == 'push'
142
- permissions:
143
- contents: read
144
- env:
145
- ZENODO_ACCESS_TOKEN: ${{ secrets.ZENODO_ACCESS_TOKEN }}
146
- steps:
147
- - uses: actions/checkout@v6
148
- with:
149
- fetch-depth: 0
150
-
151
- - uses: actions/setup-python@v6
152
- with:
153
- python-version: "3.12"
154
-
155
- - name: Install release tooling
156
- run: |
157
- python -m pip install --upgrade pip
158
- python -m pip install PyYAML
159
- shell: bash
160
-
161
- - name: Download artifacts
162
- uses: actions/download-artifact@v8
163
- with:
164
- name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
165
- path: dist
166
-
167
- - name: Generate release citation metadata
168
- run: |
169
- python tools/release/sync_citation.py \
170
- --tag "${GITHUB_REF_NAME}" \
171
- --output "${RUNNER_TEMP}/CITATION.cff"
172
- shell: bash
173
-
174
- - name: Check tree stayed clean
175
- run: |
176
- git diff --quiet || (git status --short && git diff && exit 1)
177
- shell: bash
178
-
179
- - name: Publish to Zenodo
180
- run: |
181
- python tools/release/publish_zenodo.py \
182
- --dist-dir dist \
183
- --citation-file "${RUNNER_TEMP}/CITATION.cff"
184
- shell: bash
137
+ # publish-zenodo:
138
+ # name: Publish Zenodo release
139
+ # needs: publish-github-release
140
+ # runs-on: ubuntu-latest
141
+ # if: github.event_name == 'push'
142
+ # permissions:
143
+ # contents: read
144
+ # env:
145
+ # ZENODO_ACCESS_TOKEN: ${{ secrets.ZENODO_ACCESS_TOKEN }}
146
+ # steps:
147
+ # - uses: actions/checkout@v6
148
+ # with:
149
+ # fetch-depth: 0
150
+ #
151
+ # - uses: actions/setup-python@v6
152
+ # with:
153
+ # python-version: "3.12"
154
+ #
155
+ # - name: Install release tooling
156
+ # run: |
157
+ # python -m pip install --upgrade pip
158
+ # python -m pip install PyYAML
159
+ # shell: bash
160
+ #
161
+ # - name: Download artifacts
162
+ # uses: actions/download-artifact@v8
163
+ # with:
164
+ # name: dist-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}
165
+ # path: dist
166
+ #
167
+ # - name: Generate release citation metadata
168
+ # run: |
169
+ # python tools/release/sync_citation.py \
170
+ # --tag "${GITHUB_REF_NAME}" \
171
+ # --output "${RUNNER_TEMP}/CITATION.cff"
172
+ # shell: bash
173
+ #
174
+ # - name: Check tree stayed clean
175
+ # run: |
176
+ # git diff --quiet || (git status --short && git diff && exit 1)
177
+ # shell: bash
178
+ #
179
+ # - name: Publish to Zenodo
180
+ # run: |
181
+ # python tools/release/publish_zenodo.py \
182
+ # --dist-dir dist \
183
+ # --citation-file "${RUNNER_TEMP}/CITATION.cff"
184
+ # shell: bash
@@ -11,6 +11,6 @@ ci:
11
11
 
12
12
  repos:
13
13
  - repo: https://github.com/psf/black-pre-commit-mirror
14
- rev: 26.3.1
14
+ rev: 26.5.1
15
15
  hooks:
16
16
  - id: black
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultraplot
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: A succinct matplotlib wrapper for making beautiful, publication-quality graphics.
5
5
  Author-email: Casper van Elteren <caspervanelteren@gmail.com>, Luke Davis <lukelbd@gmail.com>
6
6
  Maintainer-email: Casper van Elteren <caspervanelteren@gmail.com>, "Matthew R. Becker" <becker.mr@gmail.com>
@@ -329,7 +329,134 @@ function initShibuyaRightToc() {
329
329
  syncRightTocCodeButtons(localtoc);
330
330
  }
331
331
 
332
+ const upltApiSearchGenericTerms = new Set([
333
+ "api",
334
+ "apis",
335
+ "attribute",
336
+ "attributes",
337
+ "class",
338
+ "classes",
339
+ "doc",
340
+ "docs",
341
+ "documentation",
342
+ "function",
343
+ "functions",
344
+ "method",
345
+ "methods",
346
+ "object",
347
+ "objects",
348
+ "reference",
349
+ "references",
350
+ ]);
351
+
352
+ function normalizeApiSearchTerm(term) {
353
+ return String(term || "")
354
+ .toLowerCase()
355
+ .replace(/\(\)$/, "")
356
+ .trim();
357
+ }
358
+
359
+ function isGenericApiSearchTerm(term) {
360
+ return upltApiSearchGenericTerms.has(normalizeApiSearchTerm(term));
361
+ }
362
+
363
+ function getApiSearchTerms(terms) {
364
+ if (terms instanceof Set) {
365
+ return Array.from(terms);
366
+ }
367
+ return Array.from(terms || []);
368
+ }
369
+
370
+ function apiSearchResultMatchesQueryTerm(title, anchor, terms) {
371
+ const haystack = `${title || ""} ${anchor || ""}`.toLowerCase();
372
+ const leaf = haystack.split("#").pop().split(".").pop();
373
+ return getApiSearchTerms(terms).some((term) => {
374
+ const normalized = normalizeApiSearchTerm(term);
375
+ if (!normalized || isGenericApiSearchTerm(normalized)) return false;
376
+ return (
377
+ leaf === normalized ||
378
+ leaf.includes(normalized) ||
379
+ haystack.includes("." + normalized)
380
+ );
381
+ });
382
+ }
383
+
384
+ function initApiSearchScoring() {
385
+ if (typeof Search === "undefined" || typeof Scorer === "undefined") return;
386
+ if (Search.upltApiSearchScoring === "1") return;
387
+
388
+ const previousParseQuery = Search._parseQuery;
389
+ if (typeof previousParseQuery === "function") {
390
+ Search._parseQuery = function (query) {
391
+ const parsed = previousParseQuery.call(this, query);
392
+ const queryTerms = new Set(
393
+ getApiSearchTerms(parsed && parsed[4])
394
+ .map(normalizeApiSearchTerm)
395
+ .filter(Boolean),
396
+ );
397
+ Search.upltQueryTerms = queryTerms;
398
+ Search.upltApiLikeQuery =
399
+ /[.()]/.test(query || "") ||
400
+ getApiSearchTerms(queryTerms).some(isGenericApiSearchTerm);
401
+ return parsed;
402
+ };
403
+ }
404
+
405
+ const previousObjectSearch = Search.performObjectSearch;
406
+ if (typeof previousObjectSearch === "function") {
407
+ Search.performObjectSearch = function (object, objectTerms) {
408
+ const normalizedObject = normalizeApiSearchTerm(object);
409
+ const filteredTerms = new Set(
410
+ getApiSearchTerms(objectTerms)
411
+ .map(normalizeApiSearchTerm)
412
+ .filter((term) => term && !isGenericApiSearchTerm(term)),
413
+ );
414
+ if (normalizedObject && !isGenericApiSearchTerm(normalizedObject)) {
415
+ filteredTerms.add(normalizedObject);
416
+ }
417
+ return previousObjectSearch.call(this, object, filteredTerms);
418
+ };
419
+ }
420
+
421
+ const previousScore = Scorer.score;
422
+ Scorer.score = function (result) {
423
+ let score =
424
+ typeof previousScore === "function" ? previousScore(result) : result[4];
425
+ if (!Number.isFinite(score)) {
426
+ score = Number.isFinite(result[4]) ? result[4] : 0;
427
+ }
428
+
429
+ const [docname, title, anchor, descr, _baseScore, _filename, kind] = result;
430
+ const isApiReference = String(docname || "").startsWith("api/");
431
+ const isApiLikeQuery = !!Search.upltApiLikeQuery;
432
+ const queryTerms = Search.upltQueryTerms || new Set();
433
+
434
+ if (isApiReference && kind === "object") {
435
+ score += 24;
436
+ if (isApiLikeQuery) score += 16;
437
+ if (apiSearchResultMatchesQueryTerm(title, anchor, queryTerms)) {
438
+ score += 12;
439
+ }
440
+ if (
441
+ queryTerms.has("function") &&
442
+ String(descr || "").toLowerCase().includes("python function")
443
+ ) {
444
+ score += 4;
445
+ }
446
+ } else if (isApiReference && isApiLikeQuery) {
447
+ score += kind === "title" || kind === "index" ? 12 : 8;
448
+ } else if (!isApiReference && isApiLikeQuery) {
449
+ score -= 4;
450
+ }
451
+
452
+ return score;
453
+ };
454
+
455
+ Search.upltApiSearchScoring = "1";
456
+ }
457
+
332
458
  document.addEventListener("DOMContentLoaded", function () {
459
+ initApiSearchScoring();
333
460
  initScrollChromeFade();
334
461
 
335
462
  if (document.querySelector(".sphx-glr-thumbcontainer")) {
@@ -477,13 +477,19 @@ axs.format(xlabel="xlabel", ylabel="ylabel", suptitle="Legend formatting demo")
477
477
  #
478
478
  # Legends usually annotate artists already drawn on an axes, but sometimes you need
479
479
  # standalone semantic keys (categories, size scales, color levels, or geometry types).
480
- # UltraPlot provides helper methods that build these entries directly:
480
+ # UltraPlot provides helper methods that build these entries directly on both
481
+ # axes and figures:
481
482
  #
482
483
  # * :meth:`~ultraplot.axes.Axes.entrylegend`
483
484
  # * :meth:`~ultraplot.axes.Axes.catlegend`
484
485
  # * :meth:`~ultraplot.axes.Axes.sizelegend`
485
486
  # * :meth:`~ultraplot.axes.Axes.numlegend`
486
487
  # * :meth:`~ultraplot.axes.Axes.geolegend`
488
+ # * :meth:`~ultraplot.figure.Figure.entrylegend`
489
+ # * :meth:`~ultraplot.figure.Figure.catlegend`
490
+ # * :meth:`~ultraplot.figure.Figure.sizelegend`
491
+ # * :meth:`~ultraplot.figure.Figure.numlegend`
492
+ # * :meth:`~ultraplot.figure.Figure.geolegend`
487
493
  #
488
494
  # These helpers are useful whenever the legend should describe an encoding rather than
489
495
  # mirror artists that already happen to be drawn. In practice there are two distinct
@@ -513,7 +519,8 @@ axs.format(xlabel="xlabel", ylabel="ylabel", suptitle="Legend formatting demo")
513
519
  #
514
520
  # The helpers are intentionally composable. Each one accepts ``add=False`` and returns
515
521
  # ``(handles, labels)`` so you can merge semantic sections and pass the result through
516
- # :meth:`~ultraplot.axes.Axes.legend` yourself.
522
+ # :meth:`~ultraplot.axes.Axes.legend` or :meth:`~ultraplot.figure.Figure.legend`
523
+ # yourself.
517
524
  #
518
525
  # .. code-block:: python
519
526
  #
@@ -568,6 +575,27 @@ axs.format(xlabel="xlabel", ylabel="ylabel", suptitle="Legend formatting demo")
568
575
  #
569
576
  # .. code-block:: python
570
577
  #
578
+ # # Add semantic legends around an entire subplot group.
579
+ # fig, axs = uplt.subplots(ncols=2)
580
+ # fig.catlegend(
581
+ # ["Control", "Treatment"],
582
+ # colors={"Control": "blue7", "Treatment": "red7"},
583
+ # markers={"Control": "o", "Treatment": "^"},
584
+ # ref=axs,
585
+ # loc="b",
586
+ # title="Group",
587
+ # )
588
+ # fig.sizelegend(
589
+ # [10, 50, 200],
590
+ # labels=["Small", "Medium", "Large"],
591
+ # color="gray6",
592
+ # ref=axs,
593
+ # loc="r",
594
+ # title="Population",
595
+ # )
596
+ #
597
+ # .. code-block:: python
598
+ #
571
599
  # # Compose multiple semantic helpers into one legend.
572
600
  # size_handles, size_labels = ax.sizelegend(
573
601
  # [10, 50, 200],
@@ -685,6 +713,32 @@ ax.geolegend(
685
713
  ax.axis("off")
686
714
 
687
715
 
716
+ # %%
717
+ fig, axs = uplt.subplots(ncols=2, refwidth=2.8, share=False)
718
+ axs[0].scatter([0, 1, 2], [3, 1, 2], c=[0.2, 0.5, 0.8], s=[40, 120, 260])
719
+ axs[1].scatter([0, 1, 2], [2, 3, 1], c=[0.8, 0.4, 0.1], s=[60, 90, 220])
720
+ axs.format(title="Figure semantic legend helpers", grid=False)
721
+
722
+ fig.catlegend(
723
+ ["Control", "Treatment"],
724
+ colors={"Control": "blue7", "Treatment": "red7"},
725
+ markers={"Control": "o", "Treatment": "^"},
726
+ ref=axs,
727
+ loc="bottom",
728
+ title="Group",
729
+ frameon=False,
730
+ )
731
+ fig.sizelegend(
732
+ [40, 120, 260],
733
+ labels=["Small", "Medium", "Large"],
734
+ color="gray6",
735
+ ref=axs,
736
+ loc="right",
737
+ title="Size scale",
738
+ frameon=False,
739
+ )
740
+
741
+
688
742
  # %% [raw] raw_mimetype="text/restructuredtext"
689
743
  # .. _ug_guides_decouple:
690
744
  #
@@ -241,6 +241,39 @@ Note that you can create the pull request before you're finished with your
241
241
  feature addition or bug fix. The PR will update as you add more commits. UltraPlot
242
242
  developers and contributors can then review your code and offer suggestions.
243
243
 
244
+ .. _contrib_ai:
245
+
246
+ AI policy
247
+ =========
248
+
249
+ UltraPlot welcomes contributions from developers at all skill levels, including
250
+ those who use AI tools as part of their workflow. To keep contributions
251
+ meaningful and to help new contributors genuinely learn the codebase, we ask
252
+ that you follow these guidelines.
253
+
254
+ **Good first issues must be written by humans.**
255
+ Issues labelled *good first issue* are intentionally kept for people who want
256
+ to get familiar with the backend. These issues should be scoped, described, and
257
+ solved by a human — not generated or resolved wholesale by an AI assistant.
258
+ Working through them yourself is how you build the mental model of the code
259
+ that makes future contributions easier.
260
+
261
+ **AI-assisted contributions are welcome for other issues**, provided that:
262
+
263
+ * You understand and can explain every change you submit. Maintainers may ask
264
+ questions during review; if you cannot answer them the PR will be closed.
265
+ * You disclose AI assistance in the PR description (a one-line note is fine).
266
+ * The code meets the same quality bar as any other contribution — correct,
267
+ tested, and consistent with the existing style.
268
+
269
+ **AI must not be used to bulk-generate issues, comments, or spam.**
270
+ Automated issue creation or low-effort AI-generated content will be removed and
271
+ may result in being blocked from the repository.
272
+
273
+ The spirit of this policy is simple: AI is a tool, not a substitute for
274
+ understanding. We want contributions that improve UltraPlot *and* grow the
275
+ contributor.
276
+
244
277
  .. _contrib_release:
245
278
 
246
279
  Release procedure
@@ -0,0 +1,5 @@
1
+ """
2
+ Semantic legends
3
+ ================
4
+ With UltraPlot semantic legends can be expressed in a flexible and cohesive manner with customg glyphs, latex and or spatial locations.
5
+ """
@@ -0,0 +1,233 @@
1
+ """
2
+ Semantic legends
3
+ ================
4
+
5
+ Build legends from semantic mappings rather than existing artists.
6
+
7
+ Why UltraPlot here?
8
+ -------------------
9
+ UltraPlot adds semantic legend helpers on both axes and figures:
10
+ ``entrylegend``, ``catlegend``, ``sizelegend``, ``numlegend``, and ``geolegend``.
11
+ These are useful when you want legend meaning decoupled from plotted handles, or
12
+ when you want a standalone semantic key that describes an encoding directly.
13
+
14
+ Key functions: :py:meth:`ultraplot.axes.Axes.entrylegend`, :py:meth:`ultraplot.axes.Axes.catlegend`, :py:meth:`ultraplot.axes.Axes.sizelegend`, :py:meth:`ultraplot.axes.Axes.numlegend`, :py:meth:`ultraplot.axes.Axes.geolegend`, :py:meth:`ultraplot.figure.Figure.entrylegend`, :py:meth:`ultraplot.figure.Figure.catlegend`, :py:meth:`ultraplot.figure.Figure.sizelegend`, :py:meth:`ultraplot.figure.Figure.numlegend`, :py:meth:`ultraplot.figure.Figure.geolegend`.
15
+
16
+ See also
17
+ --------
18
+ * :doc:`Colorbars and legends </colorbars_legends>`
19
+ """
20
+
21
+ # %%
22
+ # Semantic Legend with custom markers and advanced styles
23
+ import matplotlib.transforms as mtransforms
24
+ import numpy as np
25
+ from matplotlib.markers import CapStyle, JoinStyle, MarkerStyle
26
+ from matplotlib.path import Path
27
+
28
+ import ultraplot as uplt
29
+
30
+ star = Path.unit_regular_star(6)
31
+ circle = Path.unit_circle()
32
+ star_path = Path.unit_regular_star(5)
33
+ cut_star = Path(
34
+ vertices=np.concatenate([circle.vertices, star.vertices[::-1, ...]]),
35
+ codes=np.concatenate([circle.codes, star.codes]),
36
+ )
37
+
38
+ fig, ax = uplt.subplots()
39
+
40
+ # upper left legend with custom mark
41
+ ax.catlegend(
42
+ ["star", "cus_star"],
43
+ marker=[star_path, cut_star],
44
+ markersize=10,
45
+ add=True,
46
+ loc="ul",
47
+ title="Paths",
48
+ ncols=1,
49
+ )
50
+
51
+ # upper right legend with advanced CapStyle and JoinStyle
52
+ ax.catlegend(
53
+ ["butt / round", "round / miter", "projecting / bevel"],
54
+ marker="1",
55
+ markersize=10,
56
+ markeredgecolor=list("gbr"),
57
+ markeredgewidth=4,
58
+ markerfacecoloralt="none",
59
+ marker_capstyle=[
60
+ CapStyle.butt,
61
+ CapStyle.round,
62
+ CapStyle.projecting,
63
+ ],
64
+ marker_joinstyle=[
65
+ JoinStyle.round,
66
+ JoinStyle.miter,
67
+ JoinStyle.bevel,
68
+ ],
69
+ marker_transform=[mtransforms.Affine2D().rotate_deg(x) for x in [0, 30, 60]],
70
+ title="Cap & Join Style",
71
+ add=True,
72
+ loc="ur",
73
+ ncols=1,
74
+ )
75
+
76
+ # center geolegend with different styles
77
+ ax.geolegend(
78
+ ["rect", "tri", "hex", "AU"],
79
+ facecolor=["tab:red", "r", "k", "tab:blue"],
80
+ ec=["k", "g", "orange", "bright pink"],
81
+ loc="c",
82
+ title="geolegend",
83
+ ew=[0.5, 2, 1, 0.5],
84
+ markersize=10,
85
+ ncols=4,
86
+ handletextpad=0.1,
87
+ columnspacing=0.7,
88
+ )
89
+
90
+ # lower left legend with TeX symbols and rotation transform
91
+ ax.catlegend(
92
+ ["\\infty", "\\sum", "\\int"],
93
+ marker=[r"$\infty$", r"$\sum$", r"$\int$"],
94
+ s=[6, 18, 9], # ms/markersize=[6,8,10]
95
+ title="TeX symbols\nwith rotation",
96
+ marker_transform=[mtransforms.Affine2D().rotate_deg(x) for x in [30, 90, 45]],
97
+ add=True,
98
+ loc="ll",
99
+ ncols=1,
100
+ )
101
+
102
+ # lower right legend with different fill style
103
+ ax.catlegend(
104
+ ["top", "bottom", "left", "right"],
105
+ marker="o",
106
+ markersize=10,
107
+ mfc=["r", "g", "b", "c"],
108
+ markerfacecoloralt="lightsteelblue",
109
+ markeredgecolor=["k", "r", "y", "b"],
110
+ fillstyle=["top", "bottom", "left", "right"],
111
+ title="Half filled",
112
+ add=True,
113
+ loc="lr",
114
+ ncols=1,
115
+ )
116
+ ax.axis("off")
117
+ fig.show()
118
+
119
+
120
+ # %%
121
+ import cartopy.crs as ccrs
122
+ import shapely.geometry as sg
123
+
124
+ import ultraplot as uplt
125
+
126
+ fig, ax = uplt.subplots(refwidth=5.0)
127
+ ax.format(title="Semantic legend helpers")
128
+
129
+ ax.entrylegend(
130
+ [
131
+ {
132
+ "label": "Observed samples",
133
+ "line": False,
134
+ "marker": "o",
135
+ "markersize": 8,
136
+ "markerfacecolor": "blue7",
137
+ "markeredgecolor": "black",
138
+ },
139
+ {
140
+ "label": "Model fit",
141
+ "line": True,
142
+ "color": "black",
143
+ "linewidth": 2.5,
144
+ "linestyle": "--",
145
+ },
146
+ ],
147
+ loc="l",
148
+ title="Entry styles",
149
+ frameon=False,
150
+ )
151
+ ax.catlegend(
152
+ ["A", "B", "C"],
153
+ colors={"A": "red7", "B": "green7", "C": "blue7"},
154
+ markers={"A": "o", "B": "s", "C": "^"},
155
+ loc="top",
156
+ frameon=False,
157
+ )
158
+ ax.sizelegend(
159
+ [10, 50, 200],
160
+ labels=["Small", "Medium", "Large"],
161
+ loc="upper right",
162
+ title="Population",
163
+ ncols=1,
164
+ frameon=False,
165
+ )
166
+ ax.numlegend(
167
+ vmin=0,
168
+ vmax=1,
169
+ n=5,
170
+ cmap="viko",
171
+ fmt="{:.2f}",
172
+ loc="ll",
173
+ ncols=1,
174
+ frameon=False,
175
+ )
176
+
177
+ poly1 = sg.Polygon([(0, 0), (2, 0), (1.2, 1.4)])
178
+ ax.geolegend(
179
+ [
180
+ ("Triangle", "triangle"),
181
+ ("Triangle-ish", poly1),
182
+ ("Australia", "country:AU"),
183
+ ("Netherlands (Mercator)", "country:NLD", "mercator"),
184
+ (
185
+ "Netherlands (Lambert)",
186
+ "country:NLD",
187
+ {
188
+ "country_proj": ccrs.LambertConformal(
189
+ central_longitude=5,
190
+ central_latitude=52,
191
+ ),
192
+ "country_reso": "10m",
193
+ "country_territories": False,
194
+ "facecolor": "steelblue",
195
+ "fill": True,
196
+ },
197
+ ),
198
+ ],
199
+ loc="r",
200
+ ncols=1,
201
+ handlesize=2.4,
202
+ handletextpad=0.35,
203
+ frameon=False,
204
+ country_reso="10m",
205
+ )
206
+ ax.axis("off")
207
+ fig.show()
208
+
209
+ # %%
210
+ fig, axs = uplt.subplots(ncols=2, refwidth=2.8, share=False)
211
+ axs[0].scatter([0, 1, 2], [3, 1, 2], c=[0.2, 0.5, 0.8], s=[40, 120, 260])
212
+ axs[1].scatter([0, 1, 2], [2, 3, 1], c=[0.8, 0.4, 0.1], s=[60, 90, 220])
213
+ axs.format(title="Figure semantic legend helpers")
214
+
215
+ fig.catlegend(
216
+ ["Control", "Treatment"],
217
+ colors={"Control": "blue7", "Treatment": "red7"},
218
+ markers={"Control": "o", "Treatment": "^"},
219
+ ref=axs,
220
+ loc="bottom",
221
+ title="Group",
222
+ frameon=False,
223
+ )
224
+ fig.sizelegend(
225
+ [40, 120, 260],
226
+ labels=["Small", "Medium", "Large"],
227
+ color="gray6",
228
+ ref=axs,
229
+ loc="right",
230
+ title="Size scale",
231
+ frameon=False,
232
+ )
233
+ fig.show()
@@ -0,0 +1 @@
1
+ __version__ = '2.3.0'