ultraplot 2.2.0__tar.gz → 2.4.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 (476) hide show
  1. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/workflows/build-ultraplot.yml +3 -3
  2. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/workflows/main.yml +7 -7
  3. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/workflows/publish-pypi.yml +50 -50
  4. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/workflows/test-map.yml +3 -3
  5. {ultraplot-2.2.0 → ultraplot-2.4.0}/.pre-commit-config.yaml +1 -1
  6. {ultraplot-2.2.0 → ultraplot-2.4.0}/CITATION.cff +2 -2
  7. {ultraplot-2.2.0/ultraplot.egg-info → ultraplot-2.4.0}/PKG-INFO +1 -1
  8. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/custom.js +127 -0
  9. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/colorbars_legends.py +56 -2
  10. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/contributing.rst +33 -0
  11. ultraplot-2.4.0/docs/examples/legend_types/01_semantic_legends.py +5 -0
  12. ultraplot-2.4.0/docs/examples/legends_colorbars/03_semantic_legends.py +233 -0
  13. ultraplot-2.4.0/docs/examples/plot_types/12_taylor_diagram.py +72 -0
  14. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/projections.py +65 -0
  15. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/__init__.py +1 -0
  16. ultraplot-2.4.0/ultraplot/_version.py +1 -0
  17. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/__init__.py +10 -1
  18. ultraplot-2.4.0/ultraplot/axes/_formatting.py +118 -0
  19. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/base.py +418 -106
  20. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/cartesian.py +178 -20
  21. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/container.py +16 -2
  22. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/plot.py +31 -5
  23. ultraplot-2.4.0/ultraplot/axes/polar.py +747 -0
  24. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/shared.py +40 -26
  25. ultraplot-2.4.0/ultraplot/axes/taylor.py +583 -0
  26. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/colorbar.py +25 -11
  27. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/colors.py +0 -1
  28. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/config.py +63 -5
  29. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/figure.py +458 -6
  30. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/gridspec.py +36 -4
  31. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/__init__.py +1 -0
  32. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/docstring.py +1 -0
  33. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/inputs.py +1 -1
  34. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/labels.py +28 -0
  35. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/legend.py +625 -186
  36. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_1dplots.py +49 -0
  37. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_animation.py +49 -0
  38. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_axes.py +11 -8
  39. ultraplot-2.4.0/ultraplot/tests/test_axes_alt_styles.py +284 -0
  40. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_colorbar.py +163 -0
  41. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_config_helpers_extra.py +15 -0
  42. ultraplot-2.4.0/ultraplot/tests/test_docs_search.py +119 -0
  43. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_external_container_edge_cases.py +47 -0
  44. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_figure.py +50 -0
  45. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_geographic.py +29 -0
  46. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_inputs_helpers.py +22 -0
  47. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_legend.py +315 -0
  48. ultraplot-2.4.0/ultraplot/tests/test_projections.py +715 -0
  49. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_release_metadata.py +3 -9
  50. ultraplot-2.4.0/ultraplot/tests/test_semantic_legend.py +544 -0
  51. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_subplots.py +24 -0
  52. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/text.py +47 -4
  53. {ultraplot-2.2.0 → ultraplot-2.4.0/ultraplot.egg-info}/PKG-INFO +1 -1
  54. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot.egg-info/SOURCES.txt +9 -0
  55. ultraplot-2.4.0/ultraplot.egg-info/scm_file_list.json +466 -0
  56. ultraplot-2.4.0/ultraplot.egg-info/scm_version.json +8 -0
  57. ultraplot-2.2.0/docs/examples/legends_colorbars/03_semantic_legends.py +0 -108
  58. ultraplot-2.2.0/ultraplot/_version.py +0 -1
  59. ultraplot-2.2.0/ultraplot/axes/polar.py +0 -392
  60. ultraplot-2.2.0/ultraplot/tests/test_projections.py +0 -212
  61. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/ISSUE_TEMPLATE.md +0 -0
  62. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/dependabot.yml +0 -0
  63. {ultraplot-2.2.0 → ultraplot-2.4.0}/.github/micromamba-condarc.yml +0 -0
  64. {ultraplot-2.2.0 → ultraplot-2.4.0}/.gitignore +0 -0
  65. {ultraplot-2.2.0 → ultraplot-2.4.0}/.readthedocs.yml +0 -0
  66. {ultraplot-2.2.0 → ultraplot-2.4.0}/CODEOFCONDUCT.md +0 -0
  67. {ultraplot-2.2.0 → ultraplot-2.4.0}/CONTRIBUTING.rst +0 -0
  68. {ultraplot-2.2.0 → ultraplot-2.4.0}/INSTALL.rst +0 -0
  69. {ultraplot-2.2.0 → ultraplot-2.4.0}/LICENSE.txt +0 -0
  70. {ultraplot-2.2.0 → ultraplot-2.4.0}/README.rst +0 -0
  71. {ultraplot-2.2.0 → ultraplot-2.4.0}/UltraPlotLogo.svg +0 -0
  72. {ultraplot-2.2.0 → ultraplot-2.4.0}/codecov.yml +0 -0
  73. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/1dplots.py +0 -0
  74. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/2dplots.py +0 -0
  75. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/Makefile +0 -0
  76. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_ext/notoc.py +0 -0
  77. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_scripts/fetch_releases.py +0 -0
  78. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/custom.css +0 -0
  79. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/example_plots/cartesian_example.svg +0 -0
  80. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/example_plots/colorbars_legends_example.svg +0 -0
  81. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/example_plots/colormaps_example.svg +0 -0
  82. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/example_plots/panels_example.svg +0 -0
  83. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/example_plots/projection_example.svg +0 -0
  84. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/example_plots/subplot_example.svg +0 -0
  85. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/logo_blank.svg +0 -0
  86. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/logo_long.png +0 -0
  87. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/logo_long.svg +0 -0
  88. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/logo_social.png +0 -0
  89. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/logo_social.svg +0 -0
  90. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_static/logo_square.png +0 -0
  91. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/_templates/whatsnew_sidebar.html +0 -0
  92. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/about.rst +0 -0
  93. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/api.rst +0 -0
  94. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/basics.py +0 -0
  95. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/cartesian.py +0 -0
  96. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/colormaps.py +0 -0
  97. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/colors.py +0 -0
  98. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/conf.py +0 -0
  99. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/configuration.rst +0 -0
  100. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/cycles.py +0 -0
  101. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/README.txt +0 -0
  102. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/colors/01_cycle_colormap.py +0 -0
  103. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/colors/02_diverging_colormap.py +0 -0
  104. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/colors/README.txt +0 -0
  105. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/geo/01_robin_tracks.py +0 -0
  106. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/geo/02_orthographic_views.py +0 -0
  107. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/geo/03_projections_features.py +0 -0
  108. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/geo/04_choropleth.py +0 -0
  109. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/geo/README.txt +0 -0
  110. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/layouts/01_shared_axes_abc.py +0 -0
  111. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/layouts/02_complex_layout_insets.py +0 -0
  112. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/layouts/03_spanning_labels.py +0 -0
  113. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/layouts/README.txt +0 -0
  114. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/legends_colorbars/01_multi_colorbars.py +0 -0
  115. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/legends_colorbars/02_legend_inset_colorbar.py +0 -0
  116. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/legends_colorbars/README.txt +0 -0
  117. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/01_curved_quiver.py +0 -0
  118. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/02_network_graph.py +0 -0
  119. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/03_lollipop.py +0 -0
  120. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/04_datetime_series.py +0 -0
  121. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/05_box_violin.py +0 -0
  122. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/06_ridge_plot.py +0 -0
  123. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/07_radar.py +0 -0
  124. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/07_sankey.py +0 -0
  125. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/08_chord_diagram.py +0 -0
  126. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/08_ternary.py +0 -0
  127. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/09_phylogeny.py +0 -0
  128. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/10_circos_bed.py +0 -0
  129. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/11_topic_ribbon.py +0 -0
  130. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/examples/plot_types/README.txt +0 -0
  131. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/external-links.rst +0 -0
  132. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/faq.rst +0 -0
  133. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/fonts.py +0 -0
  134. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/index.rst +0 -0
  135. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/insets_panels.py +0 -0
  136. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/install.rst +0 -0
  137. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/lazy_loading.rst +0 -0
  138. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/make.bat +0 -0
  139. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/networks.py +0 -0
  140. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/requirements-rtd.txt +0 -0
  141. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/sphinxext/custom_roles.py +0 -0
  142. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/sphinxext/jupytext_cache.py +0 -0
  143. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/stats.py +0 -0
  144. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/subplots.py +0 -0
  145. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/ultraplotrc +0 -0
  146. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/usage.rst +0 -0
  147. {ultraplot-2.2.0 → ultraplot-2.4.0}/docs/why.rst +0 -0
  148. {ultraplot-2.2.0 → ultraplot-2.4.0}/environment.yml +0 -0
  149. {ultraplot-2.2.0 → ultraplot-2.4.0}/logo/PermanentMarker-Regular.ttf +0 -0
  150. {ultraplot-2.2.0 → ultraplot-2.4.0}/logo/environment-logo.yml +0 -0
  151. {ultraplot-2.2.0 → ultraplot-2.4.0}/logo/logo.py +0 -0
  152. {ultraplot-2.2.0 → ultraplot-2.4.0}/logo/run-linter.sh +0 -0
  153. {ultraplot-2.2.0 → ultraplot-2.4.0}/logo/webicon.py +0 -0
  154. {ultraplot-2.2.0 → ultraplot-2.4.0}/logo/whyUltraPlot.svg +0 -0
  155. {ultraplot-2.2.0 → ultraplot-2.4.0}/noxfile.py +0 -0
  156. {ultraplot-2.2.0 → ultraplot-2.4.0}/pyproject.toml +0 -0
  157. {ultraplot-2.2.0 → ultraplot-2.4.0}/requirements-minimal.txt +0 -0
  158. {ultraplot-2.2.0 → ultraplot-2.4.0}/setup.cfg +0 -0
  159. {ultraplot-2.2.0 → ultraplot-2.4.0}/tools/ci/build_test_map.py +0 -0
  160. {ultraplot-2.2.0 → ultraplot-2.4.0}/tools/ci/select_tests.py +0 -0
  161. {ultraplot-2.2.0 → ultraplot-2.4.0}/tools/ci/version_support.py +0 -0
  162. {ultraplot-2.2.0 → ultraplot-2.4.0}/tools/release/publish_zenodo.py +0 -0
  163. {ultraplot-2.2.0 → ultraplot-2.4.0}/tools/release/sync_citation.py +0 -0
  164. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/_lazy.py +0 -0
  165. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/geo.py +0 -0
  166. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/plot_types/__init__.py +0 -0
  167. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/plot_types/circlize.py +0 -0
  168. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/plot_types/curved_quiver.py +0 -0
  169. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/plot_types/ribbon.py +0 -0
  170. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/plot_types/sankey.py +0 -0
  171. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/axes/three.py +0 -0
  172. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Algae.rgb +0 -0
  173. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Amp.rgb +0 -0
  174. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/BR.rgb +0 -0
  175. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Balance.rgb +0 -0
  176. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues1_r.xml +0 -0
  177. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues2.xml +0 -0
  178. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues3.xml +0 -0
  179. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues4_r.xml +0 -0
  180. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues5.xml +0 -0
  181. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues6.xml +0 -0
  182. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues7.xml +0 -0
  183. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues8.xml +0 -0
  184. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Blues9.xml +0 -0
  185. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Boreal.json +0 -0
  186. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns1.xml +0 -0
  187. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns2.xml +0 -0
  188. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns3.xml +0 -0
  189. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns4.xml +0 -0
  190. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns5.xml +0 -0
  191. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns6.xml +0 -0
  192. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns7.xml +0 -0
  193. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns8.xml +0 -0
  194. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Browns9.xml +0 -0
  195. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/ColdHot.rgb +0 -0
  196. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Crest.rgb +0 -0
  197. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Curl.rgb +0 -0
  198. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Deep.rgb +0 -0
  199. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Delta.rgb +0 -0
  200. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Dense.rgb +0 -0
  201. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Div.json +0 -0
  202. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/DryWet.json +0 -0
  203. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Dusk.json +0 -0
  204. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Fire.json +0 -0
  205. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Flare.rgb +0 -0
  206. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Glacial.json +0 -0
  207. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens1_r.xml +0 -0
  208. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens2.xml +0 -0
  209. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens3_r.xml +0 -0
  210. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens4.xml +0 -0
  211. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens5.xml +0 -0
  212. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens6_r.xml +0 -0
  213. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens7.xml +0 -0
  214. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Greens8.xml +0 -0
  215. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Haline.rgb +0 -0
  216. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Ice.rgb +0 -0
  217. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/IceFire.rgb +0 -0
  218. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Mako.rgb +0 -0
  219. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Marine.json +0 -0
  220. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Matter.rgb +0 -0
  221. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Mono.txt +0 -0
  222. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/MonoCycle.txt +0 -0
  223. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/NegPos.json +0 -0
  224. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Oranges1.xml +0 -0
  225. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Oranges2.xml +0 -0
  226. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Oranges3.xml +0 -0
  227. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Oranges4.xml +0 -0
  228. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Oxy.rgb +0 -0
  229. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Phase.rgb +0 -0
  230. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Purples1_r.xml +0 -0
  231. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Purples2.xml +0 -0
  232. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Purples3.xml +0 -0
  233. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Reds1.xml +0 -0
  234. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Reds2.xml +0 -0
  235. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Reds3.xml +0 -0
  236. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Reds4.xml +0 -0
  237. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Reds5.xml +0 -0
  238. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Rocket.rgb +0 -0
  239. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Solar.rgb +0 -0
  240. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Speed.rgb +0 -0
  241. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Stellar.json +0 -0
  242. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Sunrise.json +0 -0
  243. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Sunset.json +0 -0
  244. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Tempo.rgb +0 -0
  245. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Thermal.rgb +0 -0
  246. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Turbid.rgb +0 -0
  247. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Vivid.xml +0 -0
  248. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Vlag.rgb +0 -0
  249. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Yellows1.xml +0 -0
  250. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Yellows2.xml +0 -0
  251. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Yellows3.xml +0 -0
  252. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/Yellows4.xml +0 -0
  253. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/acton.txt +0 -0
  254. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/bam.txt +0 -0
  255. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/bamO.txt +0 -0
  256. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/bamako.txt +0 -0
  257. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/batlow.txt +0 -0
  258. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/batlowK.txt +0 -0
  259. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/batlowW.txt +0 -0
  260. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/berlin.txt +0 -0
  261. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/bilbao.txt +0 -0
  262. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/broc.txt +0 -0
  263. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/brocO.txt +0 -0
  264. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/buda.txt +0 -0
  265. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/bukavu.txt +0 -0
  266. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/cork.txt +0 -0
  267. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/corkO.txt +0 -0
  268. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/davos.txt +0 -0
  269. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/devon.txt +0 -0
  270. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/fes.txt +0 -0
  271. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/hawaii.txt +0 -0
  272. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/imola.txt +0 -0
  273. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/lajolla.txt +0 -0
  274. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/lapaz.txt +0 -0
  275. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/lisbon.txt +0 -0
  276. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/nuuk.txt +0 -0
  277. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/oleron.txt +0 -0
  278. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/oslo.txt +0 -0
  279. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/roma.txt +0 -0
  280. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/romaO.txt +0 -0
  281. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/tofino.txt +0 -0
  282. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/tokyo.txt +0 -0
  283. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/turku.txt +0 -0
  284. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/vanimo.txt +0 -0
  285. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/vik.txt +0 -0
  286. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cmaps/vikO.txt +0 -0
  287. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/colors/opencolor.txt +0 -0
  288. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/colors/xkcd.txt +0 -0
  289. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/constructor.py +0 -0
  290. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/538.hex +0 -0
  291. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/FlatUI.hex +0 -0
  292. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/Qual1.rgb +0 -0
  293. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/Qual2.rgb +0 -0
  294. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/bmh.hex +0 -0
  295. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/classic.hex +0 -0
  296. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/colorblind.hex +0 -0
  297. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/colorblind10.hex +0 -0
  298. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/default.hex +0 -0
  299. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/ggplot.hex +0 -0
  300. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/seaborn.hex +0 -0
  301. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/cycles/tableau.hex +0 -0
  302. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/demos.py +0 -0
  303. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/externals/__init__.py +0 -0
  304. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/externals/hsluv.py +0 -0
  305. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-Bold.ttf +0 -0
  306. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
  307. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
  308. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-Light.ttf +0 -0
  309. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-Medium.ttf +0 -0
  310. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-Regular.ttf +0 -0
  311. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
  312. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
  313. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-Black.ttf +0 -0
  314. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
  315. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-Bold.ttf +0 -0
  316. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
  317. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
  318. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
  319. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
  320. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
  321. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-Italic.ttf +0 -0
  322. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-Light.ttf +0 -0
  323. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
  324. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-Medium.ttf +0 -0
  325. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
  326. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-Regular.ttf +0 -0
  327. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
  328. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
  329. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_FIRAMATH.txt +0 -0
  330. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_FIRASANS.txt +0 -0
  331. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_NOTOSANS.txt +0 -0
  332. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_NOTOSERIF.txt +0 -0
  333. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_OPENSANS.txt +0 -0
  334. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_ROBOTO.txt +0 -0
  335. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_SOURCESANS.txt +0 -0
  336. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_SOURCESERIF.txt +0 -0
  337. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_TEXGYRE.txt +0 -0
  338. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/LICENSE_UBUNTU.txt +0 -0
  339. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSans-Bold.ttf +0 -0
  340. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
  341. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSans-Italic.ttf +0 -0
  342. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSans-Regular.ttf +0 -0
  343. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
  344. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
  345. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
  346. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
  347. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/OpenSans-Bold.ttf +0 -0
  348. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
  349. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/OpenSans-Italic.ttf +0 -0
  350. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/OpenSans-Regular.ttf +0 -0
  351. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
  352. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  353. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-Black.ttf +0 -0
  354. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
  355. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-Bold.ttf +0 -0
  356. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
  357. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-Italic.ttf +0 -0
  358. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-Light.ttf +0 -0
  359. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
  360. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-Medium.ttf +0 -0
  361. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
  362. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Roboto-Regular.ttf +0 -0
  363. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
  364. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
  365. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
  366. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
  367. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
  368. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
  369. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
  370. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
  371. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
  372. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
  373. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
  374. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
  375. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
  376. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
  377. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
  378. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
  379. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
  380. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
  381. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
  382. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
  383. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
  384. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
  385. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
  386. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
  387. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
  388. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
  389. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
  390. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-Light.ttf +0 -0
  391. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
  392. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
  393. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
  394. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
  395. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
  396. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
  397. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
  398. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
  399. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
  400. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
  401. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
  402. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
  403. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
  404. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
  405. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
  406. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
  407. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
  408. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreheros-bold.ttf +0 -0
  409. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
  410. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreheros-italic.ttf +0 -0
  411. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreheros-regular.ttf +0 -0
  412. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
  413. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
  414. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
  415. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
  416. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreschola-bold.ttf +0 -0
  417. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
  418. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreschola-italic.ttf +0 -0
  419. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyreschola-regular.ttf +0 -0
  420. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyretermes-bold.ttf +0 -0
  421. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
  422. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyretermes-italic.ttf +0 -0
  423. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/fonts/texgyretermes-regular.ttf +0 -0
  424. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/benchmarks.py +0 -0
  425. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/context.py +0 -0
  426. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/fonts.py +0 -0
  427. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/guides.py +0 -0
  428. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/rcsetup.py +0 -0
  429. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/versions.py +0 -0
  430. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/internals/warnings.py +0 -0
  431. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/proj.py +0 -0
  432. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/scale.py +0 -0
  433. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/__init__.py +0 -0
  434. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/conftest.py +0 -0
  435. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_2dplots.py +0 -0
  436. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_axes_base_colorbar_helpers.py +0 -0
  437. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_base.py +0 -0
  438. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_circlize_integration.py +0 -0
  439. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_colorbar_helpers_extra.py +0 -0
  440. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_colormap.py +0 -0
  441. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_colormap_helpers_extra.py +0 -0
  442. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_colors.py +0 -0
  443. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_colors_helpers.py +0 -0
  444. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_config.py +0 -0
  445. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_constructor.py +0 -0
  446. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_constructor_helpers_extra.py +0 -0
  447. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_core_versions.py +0 -0
  448. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_demos.py +0 -0
  449. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_docs.py +0 -0
  450. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_docs_fetch_releases.py +0 -0
  451. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_external_axes_container_integration.py +0 -0
  452. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_external_container_mocked.py +0 -0
  453. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_fonts.py +0 -0
  454. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_format.py +0 -0
  455. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_gridspec.py +0 -0
  456. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_handlers.py +0 -0
  457. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_imports.py +0 -0
  458. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_imshow.py +0 -0
  459. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_inputs.py +0 -0
  460. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_inset.py +0 -0
  461. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_integration.py +0 -0
  462. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_plot.py +0 -0
  463. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_proj_helpers.py +0 -0
  464. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_rcsetup_helpers.py +0 -0
  465. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_scale_helpers.py +0 -0
  466. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_statistical_plotting.py +0 -0
  467. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_text_helpers.py +0 -0
  468. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_tickers.py +0 -0
  469. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/tests/test_ultralayout.py +0 -0
  470. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/ticker.py +0 -0
  471. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/ui.py +0 -0
  472. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/ultralayout.py +0 -0
  473. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot/utils.py +0 -0
  474. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot.egg-info/dependency_links.txt +0 -0
  475. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot.egg-info/requires.txt +0 -0
  476. {ultraplot-2.2.0 → ultraplot-2.4.0}/ultraplot.egg-info/top_level.txt +0 -0
@@ -49,7 +49,7 @@ jobs:
49
49
  nproc
50
50
  cat /proc/cpuinfo | grep "model name" | head -1
51
51
 
52
- - uses: actions/checkout@v6
52
+ - uses: actions/checkout@v7
53
53
  with:
54
54
  fetch-depth: 0
55
55
 
@@ -98,7 +98,7 @@ jobs:
98
98
  nproc
99
99
  cat /proc/cpuinfo | grep "model name" | head -1
100
100
 
101
- - uses: actions/checkout@v6
101
+ - uses: actions/checkout@v7
102
102
 
103
103
  - uses: mamba-org/setup-micromamba@v3.0.0
104
104
  with:
@@ -131,7 +131,7 @@ jobs:
131
131
  # Cache Baseline Figures (Restore step)
132
132
  - name: Cache Baseline Figures
133
133
  id: cache-baseline
134
- uses: actions/cache@v5
134
+ uses: actions/cache@v6
135
135
  if: ${{ env.IS_PR }}
136
136
  with:
137
137
  path: ./ultraplot/tests/baseline # The directory to cache
@@ -9,9 +9,9 @@ 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
- - uses: actions/checkout@v6
14
+ - uses: actions/checkout@v7
15
15
  - uses: dorny/paths-filter@v4
16
16
  id: filter
17
17
  with:
@@ -32,7 +32,7 @@ jobs:
32
32
  mode: ${{ steps.select.outputs.mode }}
33
33
  tests: ${{ steps.select.outputs.tests }}
34
34
  steps:
35
- - uses: actions/checkout@v6
35
+ - uses: actions/checkout@v7
36
36
  with:
37
37
  fetch-depth: 0
38
38
 
@@ -41,7 +41,7 @@ jobs:
41
41
 
42
42
  - name: Restore test map cache
43
43
  id: restore-map
44
- uses: actions/cache/restore@v5
44
+ uses: actions/cache/restore@v6
45
45
  with:
46
46
  path: .ci/test-map.json
47
47
  key: test-map-${{ github.event.pull_request.base.sha }}
@@ -122,7 +122,7 @@ jobs:
122
122
  matplotlib-versions: ${{ steps.set-versions.outputs.matplotlib-versions }}
123
123
  test-matrix: ${{ steps.set-versions.outputs.test-matrix }}
124
124
  steps:
125
- - uses: actions/checkout@v6
125
+ - uses: actions/checkout@v7
126
126
  with:
127
127
  fetch-depth: 0
128
128
 
@@ -153,7 +153,7 @@ jobs:
153
153
  with:
154
154
  swap-size-gb: 10
155
155
 
156
- - uses: actions/checkout@v6
156
+ - uses: actions/checkout@v7
157
157
  with:
158
158
  fetch-depth: 0
159
159
 
@@ -182,7 +182,7 @@ jobs:
182
182
  ultraplot/tests
183
183
 
184
184
  - name: Upload coverage reports to Codecov
185
- uses: codecov/codecov-action@v6
185
+ uses: codecov/codecov-action@v7
186
186
  with:
187
187
  token: ${{ secrets.CODECOV_TOKEN }}
188
188
  files: ./coverage.xml
@@ -14,7 +14,7 @@ jobs:
14
14
  name: Build packages
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@v6
17
+ - uses: actions/checkout@v7
18
18
  with:
19
19
  fetch-depth: 0
20
20
 
@@ -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@v7
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
@@ -19,7 +19,7 @@ jobs:
19
19
  with:
20
20
  swap-size-gb: 10
21
21
 
22
- - uses: actions/checkout@v6
22
+ - uses: actions/checkout@v7
23
23
  with:
24
24
  fetch-depth: 0
25
25
 
@@ -48,14 +48,14 @@ jobs:
48
48
  python tools/ci/build_test_map.py --coverage-file .coverage --output .ci/test-map.json --root .
49
49
 
50
50
  - name: Upload coverage reports to Codecov
51
- uses: codecov/codecov-action@v6
51
+ uses: codecov/codecov-action@v7
52
52
  with:
53
53
  token: ${{ secrets.CODECOV_TOKEN }}
54
54
  files: ./coverage.xml
55
55
  name: codecov-test-map
56
56
 
57
57
  - name: Cache test map
58
- uses: actions/cache@v5
58
+ uses: actions/cache@v6
59
59
  with:
60
60
  path: .ci/test-map.json
61
61
  key: test-map-${{ github.sha }}
@@ -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
@@ -20,13 +20,13 @@ keywords:
20
20
  - wrapper
21
21
  references:
22
22
  - type: software
23
- name: "ProPlot"
23
+ title: "ProPlot"
24
24
  authors:
25
25
  - family-names: "Davis"
26
26
  given-names: "Luke"
27
27
  url: "https://github.com/lukelbd/proplot"
28
28
  - type: software
29
- name: "Matplotlib"
29
+ title: "Matplotlib"
30
30
  authors:
31
31
  - family-names: "Hunter"
32
32
  given-names: "John D."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultraplot
3
- Version: 2.2.0
3
+ Version: 2.4.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
+ """