ultraplot 0.99.3__py3-none-any.whl

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 (416) hide show
  1. ultraplot/__init__.py +115 -0
  2. ultraplot/__init__.py.rej +58 -0
  3. ultraplot/axes/__init__.py +42 -0
  4. ultraplot/axes/base.py +3240 -0
  5. ultraplot/axes/cartesian.py +1425 -0
  6. ultraplot/axes/geo.py +1675 -0
  7. ultraplot/axes/plot.py +4569 -0
  8. ultraplot/axes/polar.py +381 -0
  9. ultraplot/axes/shared.py +186 -0
  10. ultraplot/axes/three.py +34 -0
  11. ultraplot/cmaps/Algae.rgb +256 -0
  12. ultraplot/cmaps/Amp.rgb +256 -0
  13. ultraplot/cmaps/BR.rgb +256 -0
  14. ultraplot/cmaps/Balance.rgb +256 -0
  15. ultraplot/cmaps/Blues1_r.xml +17 -0
  16. ultraplot/cmaps/Blues2.xml +16 -0
  17. ultraplot/cmaps/Blues3.xml +25 -0
  18. ultraplot/cmaps/Blues4_r.xml +17 -0
  19. ultraplot/cmaps/Blues5.xml +16 -0
  20. ultraplot/cmaps/Blues6.xml +25 -0
  21. ultraplot/cmaps/Blues7.xml +16 -0
  22. ultraplot/cmaps/Blues8.xml +17 -0
  23. ultraplot/cmaps/Blues9.xml +1 -0
  24. ultraplot/cmaps/Boreal.json +53 -0
  25. ultraplot/cmaps/Browns1.xml +16 -0
  26. ultraplot/cmaps/Browns2.xml +26 -0
  27. ultraplot/cmaps/Browns3.xml +17 -0
  28. ultraplot/cmaps/Browns4.xml +17 -0
  29. ultraplot/cmaps/Browns5.xml +26 -0
  30. ultraplot/cmaps/Browns6.xml +17 -0
  31. ultraplot/cmaps/Browns7.xml +19 -0
  32. ultraplot/cmaps/Browns8.xml +11 -0
  33. ultraplot/cmaps/Browns9.xml +1 -0
  34. ultraplot/cmaps/ColdHot.rgb +229 -0
  35. ultraplot/cmaps/Crest.rgb +256 -0
  36. ultraplot/cmaps/Curl.rgb +512 -0
  37. ultraplot/cmaps/Deep.rgb +256 -0
  38. ultraplot/cmaps/Delta.rgb +512 -0
  39. ultraplot/cmaps/Dense.rgb +256 -0
  40. ultraplot/cmaps/Div.json +71 -0
  41. ultraplot/cmaps/DryWet.json +73 -0
  42. ultraplot/cmaps/Dusk.json +53 -0
  43. ultraplot/cmaps/Fire.json +53 -0
  44. ultraplot/cmaps/Flare.rgb +256 -0
  45. ultraplot/cmaps/Glacial.json +53 -0
  46. ultraplot/cmaps/Greens1_r.xml +26 -0
  47. ultraplot/cmaps/Greens2.xml +28 -0
  48. ultraplot/cmaps/Greens3_r.xml +28 -0
  49. ultraplot/cmaps/Greens4.xml +17 -0
  50. ultraplot/cmaps/Greens5.xml +16 -0
  51. ultraplot/cmaps/Greens6_r.xml +16 -0
  52. ultraplot/cmaps/Greens7.xml +16 -0
  53. ultraplot/cmaps/Greens8.xml +26 -0
  54. ultraplot/cmaps/Haline.rgb +256 -0
  55. ultraplot/cmaps/Ice.rgb +256 -0
  56. ultraplot/cmaps/IceFire.rgb +256 -0
  57. ultraplot/cmaps/Mako.rgb +256 -0
  58. ultraplot/cmaps/Marine.json +53 -0
  59. ultraplot/cmaps/Matter.rgb +256 -0
  60. ultraplot/cmaps/Mono.txt +256 -0
  61. ultraplot/cmaps/MonoCycle.txt +256 -0
  62. ultraplot/cmaps/NegPos.json +71 -0
  63. ultraplot/cmaps/Oranges1.xml +27 -0
  64. ultraplot/cmaps/Oranges2.xml +26 -0
  65. ultraplot/cmaps/Oranges3.xml +15 -0
  66. ultraplot/cmaps/Oranges4.xml +23 -0
  67. ultraplot/cmaps/Oxy.rgb +256 -0
  68. ultraplot/cmaps/Phase.rgb +256 -0
  69. ultraplot/cmaps/Purples1_r.xml +16 -0
  70. ultraplot/cmaps/Purples2.xml +17 -0
  71. ultraplot/cmaps/Purples3.xml +18 -0
  72. ultraplot/cmaps/Reds1.xml +26 -0
  73. ultraplot/cmaps/Reds2.xml +22 -0
  74. ultraplot/cmaps/Reds3.xml +23 -0
  75. ultraplot/cmaps/Reds4.xml +26 -0
  76. ultraplot/cmaps/Reds5.xml +17 -0
  77. ultraplot/cmaps/Rocket.rgb +256 -0
  78. ultraplot/cmaps/Solar.rgb +256 -0
  79. ultraplot/cmaps/Speed.rgb +256 -0
  80. ultraplot/cmaps/Stellar.json +53 -0
  81. ultraplot/cmaps/Sunrise.json +53 -0
  82. ultraplot/cmaps/Sunset.json +53 -0
  83. ultraplot/cmaps/Tempo.rgb +256 -0
  84. ultraplot/cmaps/Thermal.rgb +256 -0
  85. ultraplot/cmaps/Turbid.rgb +256 -0
  86. ultraplot/cmaps/Vivid.xml +11 -0
  87. ultraplot/cmaps/Vlag.rgb +256 -0
  88. ultraplot/cmaps/Yellows1.xml +17 -0
  89. ultraplot/cmaps/Yellows2.xml +17 -0
  90. ultraplot/cmaps/Yellows3.xml +17 -0
  91. ultraplot/cmaps/Yellows4.xml +17 -0
  92. ultraplot/cmaps/acton.txt +256 -0
  93. ultraplot/cmaps/bam.txt +256 -0
  94. ultraplot/cmaps/bamO.txt +256 -0
  95. ultraplot/cmaps/bamako.txt +256 -0
  96. ultraplot/cmaps/batlow.txt +256 -0
  97. ultraplot/cmaps/batlowK.txt +256 -0
  98. ultraplot/cmaps/batlowW.txt +256 -0
  99. ultraplot/cmaps/berlin.txt +256 -0
  100. ultraplot/cmaps/bilbao.txt +256 -0
  101. ultraplot/cmaps/broc.txt +256 -0
  102. ultraplot/cmaps/brocO.txt +256 -0
  103. ultraplot/cmaps/buda.txt +256 -0
  104. ultraplot/cmaps/bukavu.txt +256 -0
  105. ultraplot/cmaps/cork.txt +256 -0
  106. ultraplot/cmaps/corkO.txt +256 -0
  107. ultraplot/cmaps/davos.txt +256 -0
  108. ultraplot/cmaps/devon.txt +256 -0
  109. ultraplot/cmaps/fes.txt +256 -0
  110. ultraplot/cmaps/hawaii.txt +256 -0
  111. ultraplot/cmaps/imola.txt +256 -0
  112. ultraplot/cmaps/lajolla.txt +256 -0
  113. ultraplot/cmaps/lapaz.txt +256 -0
  114. ultraplot/cmaps/lisbon.txt +256 -0
  115. ultraplot/cmaps/nuuk.txt +256 -0
  116. ultraplot/cmaps/oleron.txt +256 -0
  117. ultraplot/cmaps/oslo.txt +256 -0
  118. ultraplot/cmaps/roma.txt +256 -0
  119. ultraplot/cmaps/romaO.txt +256 -0
  120. ultraplot/cmaps/tofino.txt +256 -0
  121. ultraplot/cmaps/tokyo.txt +256 -0
  122. ultraplot/cmaps/turku.txt +256 -0
  123. ultraplot/cmaps/vanimo.txt +256 -0
  124. ultraplot/cmaps/vik.txt +256 -0
  125. ultraplot/cmaps/vikO.txt +256 -0
  126. ultraplot/colors/opencolor.txt +132 -0
  127. ultraplot/colors/xkcd.txt +951 -0
  128. ultraplot/colors.py +3241 -0
  129. ultraplot/colors.py.rej +243 -0
  130. ultraplot/config.py +1809 -0
  131. ultraplot/constructor.py +1633 -0
  132. ultraplot/cycles/538.hex +2 -0
  133. ultraplot/cycles/FlatUI.hex +1 -0
  134. ultraplot/cycles/Qual1.rgb +7 -0
  135. ultraplot/cycles/Qual2.rgb +13 -0
  136. ultraplot/cycles/bmh.hex +2 -0
  137. ultraplot/cycles/classic.hex +2 -0
  138. ultraplot/cycles/colorblind.hex +2 -0
  139. ultraplot/cycles/colorblind10.hex +2 -0
  140. ultraplot/cycles/default.hex +2 -0
  141. ultraplot/cycles/ggplot.hex +1 -0
  142. ultraplot/cycles/seaborn.hex +2 -0
  143. ultraplot/cycles/tableau.hex +2 -0
  144. ultraplot/demos.py +1201 -0
  145. ultraplot/externals/__init__.py +5 -0
  146. ultraplot/externals/hsluv.py +330 -0
  147. ultraplot/figure.py +2102 -0
  148. ultraplot/fonts/FiraMath-Bold.ttf +0 -0
  149. ultraplot/fonts/FiraMath-ExtraLight.ttf +0 -0
  150. ultraplot/fonts/FiraMath-Heavy.ttf +0 -0
  151. ultraplot/fonts/FiraMath-Light.ttf +0 -0
  152. ultraplot/fonts/FiraMath-Medium.ttf +0 -0
  153. ultraplot/fonts/FiraMath-Regular.ttf +0 -0
  154. ultraplot/fonts/FiraMath-SemiBold.ttf +0 -0
  155. ultraplot/fonts/FiraMath-UltraLight.ttf +0 -0
  156. ultraplot/fonts/FiraSans-Black.ttf +0 -0
  157. ultraplot/fonts/FiraSans-BlackItalic.ttf +0 -0
  158. ultraplot/fonts/FiraSans-Bold.ttf +0 -0
  159. ultraplot/fonts/FiraSans-BoldItalic.ttf +0 -0
  160. ultraplot/fonts/FiraSans-ExtraBold.ttf +0 -0
  161. ultraplot/fonts/FiraSans-ExtraBoldItalic.ttf +0 -0
  162. ultraplot/fonts/FiraSans-ExtraLight.ttf +0 -0
  163. ultraplot/fonts/FiraSans-ExtraLightItalic.ttf +0 -0
  164. ultraplot/fonts/FiraSans-Italic.ttf +0 -0
  165. ultraplot/fonts/FiraSans-Light.ttf +0 -0
  166. ultraplot/fonts/FiraSans-LightItalic.ttf +0 -0
  167. ultraplot/fonts/FiraSans-Medium.ttf +0 -0
  168. ultraplot/fonts/FiraSans-MediumItalic.ttf +0 -0
  169. ultraplot/fonts/FiraSans-Regular.ttf +0 -0
  170. ultraplot/fonts/FiraSans-SemiBold.ttf +0 -0
  171. ultraplot/fonts/FiraSans-SemiBoldItalic.ttf +0 -0
  172. ultraplot/fonts/LICENSE_FIRAMATH.txt +92 -0
  173. ultraplot/fonts/LICENSE_FIRASANS.txt +97 -0
  174. ultraplot/fonts/LICENSE_NOTOSANS.txt +202 -0
  175. ultraplot/fonts/LICENSE_NOTOSERIF.txt +93 -0
  176. ultraplot/fonts/LICENSE_OPENSANS.txt +202 -0
  177. ultraplot/fonts/LICENSE_ROBOTO.txt +202 -0
  178. ultraplot/fonts/LICENSE_SOURCESANS.txt +93 -0
  179. ultraplot/fonts/LICENSE_SOURCESERIF.txt +93 -0
  180. ultraplot/fonts/LICENSE_TEXGYRE.txt +29 -0
  181. ultraplot/fonts/LICENSE_UBUNTU.txt +96 -0
  182. ultraplot/fonts/NotoSans-Bold.ttf +0 -0
  183. ultraplot/fonts/NotoSans-BoldItalic.ttf +0 -0
  184. ultraplot/fonts/NotoSans-Italic.ttf +0 -0
  185. ultraplot/fonts/NotoSans-Regular.ttf +0 -0
  186. ultraplot/fonts/NotoSerif-Bold.ttf +0 -0
  187. ultraplot/fonts/NotoSerif-BoldItalic.ttf +0 -0
  188. ultraplot/fonts/NotoSerif-Italic.ttf +0 -0
  189. ultraplot/fonts/NotoSerif-Regular.ttf +0 -0
  190. ultraplot/fonts/OpenSans-Bold.ttf +0 -0
  191. ultraplot/fonts/OpenSans-BoldItalic.ttf +0 -0
  192. ultraplot/fonts/OpenSans-Italic.ttf +0 -0
  193. ultraplot/fonts/OpenSans-Regular.ttf +0 -0
  194. ultraplot/fonts/OpenSans-Semibold.ttf +0 -0
  195. ultraplot/fonts/OpenSans-SemiboldItalic.ttf +0 -0
  196. ultraplot/fonts/Roboto-Black.ttf +0 -0
  197. ultraplot/fonts/Roboto-BlackItalic.ttf +0 -0
  198. ultraplot/fonts/Roboto-Bold.ttf +0 -0
  199. ultraplot/fonts/Roboto-BoldItalic.ttf +0 -0
  200. ultraplot/fonts/Roboto-Italic.ttf +0 -0
  201. ultraplot/fonts/Roboto-Light.ttf +0 -0
  202. ultraplot/fonts/Roboto-LightItalic.ttf +0 -0
  203. ultraplot/fonts/Roboto-Medium.ttf +0 -0
  204. ultraplot/fonts/Roboto-MediumItalic.ttf +0 -0
  205. ultraplot/fonts/Roboto-Regular.ttf +0 -0
  206. ultraplot/fonts/SourceSansPro-Black.ttf +0 -0
  207. ultraplot/fonts/SourceSansPro-BlackItalic.ttf +0 -0
  208. ultraplot/fonts/SourceSansPro-Bold.ttf +0 -0
  209. ultraplot/fonts/SourceSansPro-BoldItalic.ttf +0 -0
  210. ultraplot/fonts/SourceSansPro-ExtraLight.ttf +0 -0
  211. ultraplot/fonts/SourceSansPro-ExtraLightItalic.ttf +0 -0
  212. ultraplot/fonts/SourceSansPro-Italic.ttf +0 -0
  213. ultraplot/fonts/SourceSansPro-Light.ttf +0 -0
  214. ultraplot/fonts/SourceSansPro-LightItalic.ttf +0 -0
  215. ultraplot/fonts/SourceSansPro-Regular.ttf +0 -0
  216. ultraplot/fonts/SourceSansPro-SemiBold.ttf +0 -0
  217. ultraplot/fonts/SourceSansPro-SemiBoldItalic.ttf +0 -0
  218. ultraplot/fonts/SourceSerifPro-Black.ttf +0 -0
  219. ultraplot/fonts/SourceSerifPro-BlackItalic.ttf +0 -0
  220. ultraplot/fonts/SourceSerifPro-Bold.ttf +0 -0
  221. ultraplot/fonts/SourceSerifPro-BoldItalic.ttf +0 -0
  222. ultraplot/fonts/SourceSerifPro-ExtraLight.ttf +0 -0
  223. ultraplot/fonts/SourceSerifPro-ExtraLightItalic.ttf +0 -0
  224. ultraplot/fonts/SourceSerifPro-Italic.ttf +0 -0
  225. ultraplot/fonts/SourceSerifPro-Light.ttf +0 -0
  226. ultraplot/fonts/SourceSerifPro-LightItalic.ttf +0 -0
  227. ultraplot/fonts/SourceSerifPro-Regular.ttf +0 -0
  228. ultraplot/fonts/SourceSerifPro-SemiBold.ttf +0 -0
  229. ultraplot/fonts/SourceSerifPro-SemiBoldItalic.ttf +0 -0
  230. ultraplot/fonts/Ubuntu-Bold.ttf +0 -0
  231. ultraplot/fonts/Ubuntu-BoldItalic.ttf +0 -0
  232. ultraplot/fonts/Ubuntu-Italic.ttf +0 -0
  233. ultraplot/fonts/Ubuntu-Light.ttf +0 -0
  234. ultraplot/fonts/Ubuntu-LightItalic.ttf +0 -0
  235. ultraplot/fonts/Ubuntu-Medium.ttf +0 -0
  236. ultraplot/fonts/Ubuntu-MediumItalic.ttf +0 -0
  237. ultraplot/fonts/Ubuntu-Regular.ttf +0 -0
  238. ultraplot/fonts/texgyreadventor-bold.ttf +0 -0
  239. ultraplot/fonts/texgyreadventor-bolditalic.ttf +0 -0
  240. ultraplot/fonts/texgyreadventor-italic.ttf +0 -0
  241. ultraplot/fonts/texgyreadventor-regular.ttf +0 -0
  242. ultraplot/fonts/texgyrebonum-bold.ttf +0 -0
  243. ultraplot/fonts/texgyrebonum-bolditalic.ttf +0 -0
  244. ultraplot/fonts/texgyrebonum-italic.ttf +0 -0
  245. ultraplot/fonts/texgyrebonum-regular.ttf +0 -0
  246. ultraplot/fonts/texgyrechorus-mediumitalic.ttf +0 -0
  247. ultraplot/fonts/texgyrecursor-bold.ttf +0 -0
  248. ultraplot/fonts/texgyrecursor-bolditalic.ttf +0 -0
  249. ultraplot/fonts/texgyrecursor-italic.ttf +0 -0
  250. ultraplot/fonts/texgyrecursor-regular.ttf +0 -0
  251. ultraplot/fonts/texgyreheros-bold.ttf +0 -0
  252. ultraplot/fonts/texgyreheros-bolditalic.ttf +0 -0
  253. ultraplot/fonts/texgyreheros-italic.ttf +0 -0
  254. ultraplot/fonts/texgyreheros-regular.ttf +0 -0
  255. ultraplot/fonts/texgyrepagella-bold.ttf +0 -0
  256. ultraplot/fonts/texgyrepagella-bolditalic.ttf +0 -0
  257. ultraplot/fonts/texgyrepagella-italic.ttf +0 -0
  258. ultraplot/fonts/texgyrepagella-regular.ttf +0 -0
  259. ultraplot/fonts/texgyreschola-bold.ttf +0 -0
  260. ultraplot/fonts/texgyreschola-bolditalic.ttf +0 -0
  261. ultraplot/fonts/texgyreschola-italic.ttf +0 -0
  262. ultraplot/fonts/texgyreschola-regular.ttf +0 -0
  263. ultraplot/fonts/texgyretermes-bold.ttf +0 -0
  264. ultraplot/fonts/texgyretermes-bolditalic.ttf +0 -0
  265. ultraplot/fonts/texgyretermes-italic.ttf +0 -0
  266. ultraplot/fonts/texgyretermes-regular.ttf +0 -0
  267. ultraplot/gridspec.py +1698 -0
  268. ultraplot/internals/__init__.py +529 -0
  269. ultraplot/internals/benchmarks.py +26 -0
  270. ultraplot/internals/context.py +44 -0
  271. ultraplot/internals/docstring.py +139 -0
  272. ultraplot/internals/fonts.py +75 -0
  273. ultraplot/internals/guides.py +167 -0
  274. ultraplot/internals/inputs.py +862 -0
  275. ultraplot/internals/labels.py +85 -0
  276. ultraplot/internals/rcsetup.py +1933 -0
  277. ultraplot/internals/versions.py +61 -0
  278. ultraplot/internals/warnings.py +122 -0
  279. ultraplot/proj.py +325 -0
  280. ultraplot/scale.py +966 -0
  281. ultraplot/tests/__init__.py +28 -0
  282. ultraplot/tests/baseline/test_align_labels.png +0 -0
  283. ultraplot/tests/baseline/test_aligned_outer_guides.png +0 -0
  284. ultraplot/tests/baseline/test_aspect_ratios.png +0 -0
  285. ultraplot/tests/baseline/test_auto_diverging1.png +0 -0
  286. ultraplot/tests/baseline/test_auto_legend.png +0 -0
  287. ultraplot/tests/baseline/test_auto_reverse.png +0 -0
  288. ultraplot/tests/baseline/test_autodiverging3.png +0 -0
  289. ultraplot/tests/baseline/test_autodiverging4.png +0 -0
  290. ultraplot/tests/baseline/test_autodiverging5.png +0 -0
  291. ultraplot/tests/baseline/test_axes_colors.png +0 -0
  292. ultraplot/tests/baseline/test_bar_vectors.png +0 -0
  293. ultraplot/tests/baseline/test_bar_width.png +0 -0
  294. ultraplot/tests/baseline/test_both_ticklabels.png +0 -0
  295. ultraplot/tests/baseline/test_bounds_ticks.png +0 -0
  296. ultraplot/tests/baseline/test_boxplot_colors.png +0 -0
  297. ultraplot/tests/baseline/test_boxplot_vectors.png +0 -0
  298. ultraplot/tests/baseline/test_cartopy_contours.png +0 -0
  299. ultraplot/tests/baseline/test_cartopy_labels.png +0 -0
  300. ultraplot/tests/baseline/test_cartopy_manual.png +0 -0
  301. ultraplot/tests/baseline/test_centered_legends.png +0 -0
  302. ultraplot/tests/baseline/test_cmap_cycles.png +0 -0
  303. ultraplot/tests/baseline/test_colorbar.png +0 -0
  304. ultraplot/tests/baseline/test_colorbar_ticks.png +0 -0
  305. ultraplot/tests/baseline/test_colormap_mode.png +0 -0
  306. ultraplot/tests/baseline/test_column_iteration.png +0 -0
  307. ultraplot/tests/baseline/test_complex_ticks.png +0 -0
  308. ultraplot/tests/baseline/test_contour_labels.png +0 -0
  309. ultraplot/tests/baseline/test_contour_legend_with_label.png +0 -0
  310. ultraplot/tests/baseline/test_contour_legend_without_label.png +0 -0
  311. ultraplot/tests/baseline/test_contour_negative.png +0 -0
  312. ultraplot/tests/baseline/test_contour_single.png +0 -0
  313. ultraplot/tests/baseline/test_cutoff_ticks.png +0 -0
  314. ultraplot/tests/baseline/test_data_keyword.png +0 -0
  315. ultraplot/tests/baseline/test_discrete_ticks.png +0 -0
  316. ultraplot/tests/baseline/test_discrete_vs_fixed.png +0 -0
  317. ultraplot/tests/baseline/test_drawing_in_projection_with_globe.png +0 -0
  318. ultraplot/tests/baseline/test_drawing_in_projection_without_globe.png +0 -0
  319. ultraplot/tests/baseline/test_edge_fix.png +0 -0
  320. ultraplot/tests/baseline/test_flow_functions.png +0 -0
  321. ultraplot/tests/baseline/test_font_adjustments.png +0 -0
  322. ultraplot/tests/baseline/test_geographic_multiple_projections.png +0 -0
  323. ultraplot/tests/baseline/test_geographic_single_projection.png +0 -0
  324. ultraplot/tests/baseline/test_gray_adjustment.png +0 -0
  325. ultraplot/tests/baseline/test_histogram_legend.png +0 -0
  326. ultraplot/tests/baseline/test_histogram_types.png +0 -0
  327. ultraplot/tests/baseline/test_ignore_message.png +0 -0
  328. ultraplot/tests/baseline/test_inbounds_data.png +0 -0
  329. ultraplot/tests/baseline/test_init_format.png +0 -0
  330. ultraplot/tests/baseline/test_inner_title_zorder.png +0 -0
  331. ultraplot/tests/baseline/test_inset_basic.png +0 -0
  332. ultraplot/tests/baseline/test_inset_colorbars.png +0 -0
  333. ultraplot/tests/baseline/test_inset_colors_1.png +0 -0
  334. ultraplot/tests/baseline/test_inset_colors_2.png +0 -0
  335. ultraplot/tests/baseline/test_inset_zoom_update.png +0 -0
  336. ultraplot/tests/baseline/test_invalid_dist.png +0 -0
  337. ultraplot/tests/baseline/test_invalid_plot.png +0 -0
  338. ultraplot/tests/baseline/test_keep_guide_labels.png +0 -0
  339. ultraplot/tests/baseline/test_label_settings.png +0 -0
  340. ultraplot/tests/baseline/test_level_restriction.png +0 -0
  341. ultraplot/tests/baseline/test_levels_with_vmin_vmax.png +0 -0
  342. ultraplot/tests/baseline/test_locale_formatting.png +0 -0
  343. ultraplot/tests/baseline/test_locale_formatting_en_US.UTF-8.png +0 -0
  344. ultraplot/tests/baseline/test_manual_labels.png +0 -0
  345. ultraplot/tests/baseline/test_multi_formatting.png +0 -0
  346. ultraplot/tests/baseline/test_multiple_calls.png +0 -0
  347. ultraplot/tests/baseline/test_on_the_fly_mappable.png +0 -0
  348. ultraplot/tests/baseline/test_outer_align.png +0 -0
  349. ultraplot/tests/baseline/test_panel_dist.png +0 -0
  350. ultraplot/tests/baseline/test_panels_suplabels_three_hor_panels.png +0 -0
  351. ultraplot/tests/baseline/test_panels_with_sharing.png +0 -0
  352. ultraplot/tests/baseline/test_panels_without_sharing_1.png +0 -0
  353. ultraplot/tests/baseline/test_panels_without_sharing_2.png +0 -0
  354. ultraplot/tests/baseline/test_parametric_colors.png +0 -0
  355. ultraplot/tests/baseline/test_parametric_labels.png +0 -0
  356. ultraplot/tests/baseline/test_patch_format.png +0 -0
  357. ultraplot/tests/baseline/test_pie_charts.png +0 -0
  358. ultraplot/tests/baseline/test_pint_quantities.png +0 -0
  359. ultraplot/tests/baseline/test_polar_projections.png +0 -0
  360. ultraplot/tests/baseline/test_projection_dicts.png +0 -0
  361. ultraplot/tests/baseline/test_qualitative_colormaps_1.png +0 -0
  362. ultraplot/tests/baseline/test_qualitative_colormaps_2.png +0 -0
  363. ultraplot/tests/baseline/test_reversed_levels.png +0 -0
  364. ultraplot/tests/baseline/test_scatter_alpha.png +0 -0
  365. ultraplot/tests/baseline/test_scatter_args.png +0 -0
  366. ultraplot/tests/baseline/test_scatter_cycle.png +0 -0
  367. ultraplot/tests/baseline/test_scatter_inbounds.png +0 -0
  368. ultraplot/tests/baseline/test_scatter_sizes.png +0 -0
  369. ultraplot/tests/baseline/test_seaborn_heatmap.png +0 -0
  370. ultraplot/tests/baseline/test_seaborn_hist.png +0 -0
  371. ultraplot/tests/baseline/test_seaborn_relational.png +0 -0
  372. ultraplot/tests/baseline/test_seaborn_swarmplot.png +0 -0
  373. ultraplot/tests/baseline/test_segmented_norm.png +0 -0
  374. ultraplot/tests/baseline/test_segmented_norm_ticks.png +0 -0
  375. ultraplot/tests/baseline/test_share_all_basic.png +0 -0
  376. ultraplot/tests/baseline/test_singleton_legend.png +0 -0
  377. ultraplot/tests/baseline/test_span_labels.png +0 -0
  378. ultraplot/tests/baseline/test_spine_offset.png +0 -0
  379. ultraplot/tests/baseline/test_spine_side.png +0 -0
  380. ultraplot/tests/baseline/test_standardized_input.png +0 -0
  381. ultraplot/tests/baseline/test_statistical_boxplot.png +0 -0
  382. ultraplot/tests/baseline/test_three_axes.png +0 -0
  383. ultraplot/tests/baseline/test_tick_direction.png +0 -0
  384. ultraplot/tests/baseline/test_tick_labels.png +0 -0
  385. ultraplot/tests/baseline/test_tick_length.png +0 -0
  386. ultraplot/tests/baseline/test_tick_width.png +0 -0
  387. ultraplot/tests/baseline/test_title_deflection.png +0 -0
  388. ultraplot/tests/baseline/test_triangular_functions.png +0 -0
  389. ultraplot/tests/baseline/test_tuple_handles.png +0 -0
  390. ultraplot/tests/baseline/test_twin_axes_1.png +0 -0
  391. ultraplot/tests/baseline/test_twin_axes_2.png +0 -0
  392. ultraplot/tests/baseline/test_twin_axes_3.png +0 -0
  393. ultraplot/tests/baseline/test_uneven_levels.png +0 -0
  394. ultraplot/tests/test_1dplots.py +373 -0
  395. ultraplot/tests/test_2dplots.py +354 -0
  396. ultraplot/tests/test_axes.py +179 -0
  397. ultraplot/tests/test_colorbar.py +253 -0
  398. ultraplot/tests/test_docs.py +78 -0
  399. ultraplot/tests/test_format.py +340 -0
  400. ultraplot/tests/test_geographic.py +116 -0
  401. ultraplot/tests/test_imshow.py +110 -0
  402. ultraplot/tests/test_inset.py +28 -0
  403. ultraplot/tests/test_integration.py +149 -0
  404. ultraplot/tests/test_legend.py +181 -0
  405. ultraplot/tests/test_projections.py +138 -0
  406. ultraplot/tests/test_statistical_plotting.py +77 -0
  407. ultraplot/tests/test_subplots.py +174 -0
  408. ultraplot/ticker.py +879 -0
  409. ultraplot/ui.py +233 -0
  410. ultraplot/utils.py +912 -0
  411. ultraplot-0.99.3.dist-info/LICENSE.txt +427 -0
  412. ultraplot-0.99.3.dist-info/METADATA +88 -0
  413. ultraplot-0.99.3.dist-info/RECORD +416 -0
  414. ultraplot-0.99.3.dist-info/WHEEL +5 -0
  415. ultraplot-0.99.3.dist-info/entry_points.txt +2 -0
  416. ultraplot-0.99.3.dist-info/top_level.txt +1 -0
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Utilities for handling dependencies and version changes.
4
+ """
5
+ from . import ic # noqa: F401
6
+ from . import warnings
7
+
8
+
9
+ class _version(list):
10
+ """
11
+ Casual parser for ``major.minor`` style version strings. We do not want to
12
+ add a 'packaging' dependency and only care about major and minor tags.
13
+ """
14
+
15
+ def __str__(self):
16
+ return self._version
17
+
18
+ def __repr__(self):
19
+ return f"version({self._version})"
20
+
21
+ def __init__(self, version):
22
+ try:
23
+ major, minor, *_ = version.split(".")
24
+ major, minor = int(major or 0), int(minor or 0)
25
+ except Exception:
26
+ warnings._warn_ultraplot(f"Unexpected version {version!r}. Using 0.0.0.")
27
+ major = minor = 0
28
+ self._version = f"{major}.{minor}"
29
+ super().__init__((major, minor)) # then use builtin python list sorting
30
+
31
+ def __eq__(self, other):
32
+ return super().__eq__(_version(other))
33
+
34
+ def __ne__(self, other):
35
+ return super().__ne__(_version(other))
36
+
37
+ def __gt__(self, other):
38
+ return super().__gt__(_version(other))
39
+
40
+ def __lt__(self, other):
41
+ return super().__lt__(_version(other))
42
+
43
+ def __ge__(self, other):
44
+ return super().__ge__(_version(other))
45
+
46
+ def __le__(self, other):
47
+ return super().__le__(_version(other))
48
+
49
+
50
+ # Matplotlib version
51
+ import matplotlib # isort:skip
52
+
53
+ _version_mpl = _version(matplotlib.__version__)
54
+
55
+ # Cartopy version
56
+ try:
57
+ import cartopy
58
+ except ImportError:
59
+ _version_cartopy = _version("0.0.0")
60
+ else:
61
+ _version_cartopy = _version(cartopy.__version__)
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Utilities for internal warnings and deprecations.
4
+ """
5
+ import functools
6
+ import re
7
+ import sys
8
+ import warnings
9
+
10
+ from . import ic # noqa: F401
11
+
12
+ # Internal modules omitted from warning message
13
+ REGEX_INTERNAL = re.compile(r"\A(matplotlib|mpl_toolkits|ultraplot)\.")
14
+
15
+ # Trivial warning class meant only to communicate the source of the warning
16
+ UltraplotWarning = type("UltraPlotWarning", (UserWarning,), {})
17
+
18
+ # Add due to overwriting the module name
19
+ catch_warnings = warnings.catch_warnings
20
+ simplefilter = warnings.simplefilter
21
+
22
+
23
+ def next_release():
24
+ """
25
+ message indicating the next major release.
26
+ """
27
+ from .. import __version__
28
+
29
+ try:
30
+ # Find the first digit in the version string
31
+ version_start = next(i for i, c in enumerate(__version__) if c.isdigit())
32
+ num = int(__version__[version_start]) + 1
33
+ except (StopIteration, ValueError, TypeError):
34
+ string = "the next major release"
35
+ else:
36
+ which = "first" if num == 1 else "next"
37
+ string = f"the {which} major release (version {num}.0.0)"
38
+ return string
39
+
40
+
41
+ def _warn_ultraplot(message):
42
+ """
43
+ Emit a `UltraPlotWarning` and show the stack level outside of matplotlib and
44
+ ultraplot. This is adapted from matplotlib's warning system.
45
+ """
46
+ frame = sys._getframe()
47
+ stacklevel = 1
48
+ while frame is not None:
49
+ if not REGEX_INTERNAL.match(frame.f_globals.get("__name__", "")):
50
+ break # this is the first external frame
51
+ frame = frame.f_back
52
+ stacklevel += 1
53
+ warnings.warn(message, UltraplotWarning, stacklevel=stacklevel)
54
+
55
+
56
+ def _rename_objs(version, **kwargs):
57
+ """
58
+ Emit a basic deprecation warning after renaming function(s), method(s), or
59
+ class(es). Each key should be an old name, and each argument should be the new
60
+ object to point to. Do not document the deprecated object(s) to discourage use.
61
+ """
62
+ objs = []
63
+ for old_name, new_obj in kwargs.items():
64
+ new_name = new_obj.__name__
65
+ message = (
66
+ f"{old_name!r} was deprecated in version {version} and may be "
67
+ f"removed in {next_release()}. Please use {new_name!r} instead."
68
+ )
69
+ if isinstance(new_obj, type):
70
+
71
+ class _deprecated_class(new_obj):
72
+ def __init__(self, *args, new_obj=new_obj, message=message, **kwargs):
73
+ _warn_ultraplot(message)
74
+ super().__init__(*args, **kwargs)
75
+
76
+ _deprecated_class.__name__ = old_name
77
+ objs.append(_deprecated_class)
78
+ elif callable(new_obj):
79
+
80
+ def _deprecated_function(*args, new_obj=new_obj, message=message, **kwargs):
81
+ _warn_ultraplot(message)
82
+ return new_obj(*args, **kwargs)
83
+
84
+ _deprecated_function.__name__ = old_name
85
+ objs.append(_deprecated_function)
86
+ else:
87
+ raise ValueError(f"Invalid deprecated object replacement {new_obj!r}.")
88
+ if len(objs) == 1:
89
+ return objs[0]
90
+ else:
91
+ return tuple(objs)
92
+
93
+
94
+ def _rename_kwargs(version, **kwargs_rename):
95
+ """
96
+ Emit a basic deprecation warning after removing or renaming keyword argument(s).
97
+ Each key should be an old keyword, and each argument should be the new keyword
98
+ or *instructions* for what to use instead.
99
+ """
100
+
101
+ def _decorator(func_orig):
102
+ @functools.wraps(func_orig)
103
+ def _deprecate_kwargs_wrapper(*args, **kwargs):
104
+ for key_old, key_new in kwargs_rename.items():
105
+ if key_old not in kwargs:
106
+ continue
107
+ value = kwargs.pop(key_old)
108
+ if key_new.isidentifier():
109
+ # Rename argument
110
+ kwargs[key_new] = value
111
+ elif "{}" in key_new:
112
+ # Nice warning message, but user's desired behavior fails
113
+ key_new = key_new.format(value)
114
+ _warn_ultraplot(
115
+ f"Keyword {key_old!r} was deprecated in version {version} and may "
116
+ f"be removed in {next_release()}. Please use {key_new!r} instead."
117
+ )
118
+ return func_orig(*args, **kwargs)
119
+
120
+ return _deprecate_kwargs_wrapper
121
+
122
+ return _decorator
ultraplot/proj.py ADDED
@@ -0,0 +1,325 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Additional cartopy projection classes.
4
+ """
5
+ import warnings
6
+
7
+ from .internals import ic # noqa: F401
8
+ from .internals import docstring
9
+
10
+ try:
11
+ from cartopy.crs import ( # stereo projections needed in geo.py
12
+ AzimuthalEquidistant,
13
+ Gnomonic,
14
+ LambertAzimuthalEqualArea,
15
+ NorthPolarStereo,
16
+ SouthPolarStereo,
17
+ _WarpedRectangularProjection,
18
+ )
19
+ except ModuleNotFoundError:
20
+ AzimuthalEquidistant = Gnomonic = LambertAzimuthalEqualArea = object
21
+ _WarpedRectangularProjection = NorthPolarStereo = SouthPolarStereo = object
22
+
23
+ __all__ = [
24
+ "Aitoff",
25
+ "Hammer",
26
+ "KavrayskiyVII",
27
+ "WinkelTripel",
28
+ "NorthPolarAzimuthalEquidistant",
29
+ "SouthPolarAzimuthalEquidistant",
30
+ "NorthPolarGnomonic",
31
+ "SouthPolarGnomonic",
32
+ "NorthPolarLambertAzimuthalEqualArea",
33
+ "SouthPolarLambertAzimuthalEqualArea",
34
+ ]
35
+
36
+
37
+ _reso_docstring = """
38
+ The projection resolution.
39
+ """
40
+ _init_docstring = """
41
+ Parameters
42
+ ----------
43
+ central_longitude : float, default: 0
44
+ The central meridian longitude in degrees.
45
+ false_easting: float, default: 0
46
+ X offset from planar origin in metres.
47
+ false_northing: float, default: 0
48
+ Y offset from planar origin in metres.
49
+ globe : `~cartopy.crs.Globe`, optional
50
+ If omitted, a default globe is created.
51
+ """
52
+ docstring._snippet_manager["proj.reso"] = _reso_docstring
53
+ docstring._snippet_manager["proj.init"] = _init_docstring
54
+
55
+
56
+ class Aitoff(_WarpedRectangularProjection):
57
+ """
58
+ The `Aitoff <https://en.wikipedia.org/wiki/Aitoff_projection>`__ projection.
59
+ """
60
+
61
+ #: Registered projection name.
62
+ name = "aitoff"
63
+
64
+ @docstring._snippet_manager
65
+ def __init__(
66
+ self, central_longitude=0, globe=None, false_easting=None, false_northing=None
67
+ ):
68
+ """
69
+ %(proj.init)s
70
+ """
71
+ from cartopy.crs import WGS84_SEMIMAJOR_AXIS, Globe
72
+
73
+ if globe is None:
74
+ globe = Globe(semimajor_axis=WGS84_SEMIMAJOR_AXIS, ellipse=None)
75
+
76
+ a = globe.semimajor_axis or WGS84_SEMIMAJOR_AXIS
77
+ b = globe.semiminor_axis or a
78
+ if b != a or globe.ellipse is not None:
79
+ warnings.warn(
80
+ f"The {self.name!r} projection does not handle elliptical globes."
81
+ )
82
+
83
+ proj4_params = {"proj": "aitoff", "lon_0": central_longitude}
84
+ super().__init__(
85
+ proj4_params,
86
+ central_longitude,
87
+ false_easting=false_easting,
88
+ false_northing=false_northing,
89
+ globe=globe,
90
+ )
91
+
92
+ @docstring._snippet_manager
93
+ @property
94
+ def threshold(self): # how finely to interpolate line data, etc.
95
+ """
96
+ %(proj.reso)s
97
+ """
98
+ return 1e5
99
+
100
+
101
+ class Hammer(_WarpedRectangularProjection):
102
+ """
103
+ The `Hammer <https://en.wikipedia.org/wiki/Hammer_projection>`__ projection.
104
+ """
105
+
106
+ #: Registered projection name.
107
+ name = "hammer"
108
+
109
+ @docstring._snippet_manager
110
+ def __init__(
111
+ self, central_longitude=0, globe=None, false_easting=None, false_northing=None
112
+ ):
113
+ """
114
+ %(proj.init)s
115
+ """
116
+ from cartopy.crs import WGS84_SEMIMAJOR_AXIS, Globe
117
+
118
+ if globe is None:
119
+ globe = Globe(semimajor_axis=WGS84_SEMIMAJOR_AXIS, ellipse=None)
120
+
121
+ a = globe.semimajor_axis or WGS84_SEMIMAJOR_AXIS
122
+ b = globe.semiminor_axis or a
123
+ if b != a or globe.ellipse is not None:
124
+ warnings.warn(
125
+ f"The {self.name!r} projection does not handle elliptical globes."
126
+ )
127
+
128
+ proj4_params = {"proj": "hammer", "lon_0": central_longitude}
129
+ super().__init__(
130
+ proj4_params,
131
+ central_longitude,
132
+ false_easting=false_easting,
133
+ false_northing=false_northing,
134
+ globe=globe,
135
+ )
136
+
137
+ @docstring._snippet_manager
138
+ @property
139
+ def threshold(self): # how finely to interpolate line data, etc.
140
+ """
141
+ %(proj.reso)s
142
+ """
143
+ return 1e5
144
+
145
+
146
+ class KavrayskiyVII(_WarpedRectangularProjection):
147
+ """
148
+ The `Kavrayskiy VII \
149
+ <https://en.wikipedia.org/wiki/Kavrayskiy_VII_projection>`__ projection.
150
+ """
151
+
152
+ #: Registered projection name.
153
+ name = "kavrayskiyVII"
154
+
155
+ @docstring._snippet_manager
156
+ def __init__(
157
+ self, central_longitude=0, globe=None, false_easting=None, false_northing=None
158
+ ):
159
+ """
160
+ %(proj.init)s
161
+ """
162
+ from cartopy.crs import WGS84_SEMIMAJOR_AXIS, Globe
163
+
164
+ if globe is None:
165
+ globe = Globe(semimajor_axis=WGS84_SEMIMAJOR_AXIS, ellipse=None)
166
+
167
+ a = globe.semimajor_axis or WGS84_SEMIMAJOR_AXIS
168
+ b = globe.semiminor_axis or a
169
+ if b != a or globe.ellipse is not None:
170
+ warnings.warn(
171
+ f"The {self.name!r} projection does not handle elliptical globes."
172
+ )
173
+
174
+ proj4_params = {"proj": "kav7", "lon_0": central_longitude}
175
+ super().__init__(
176
+ proj4_params,
177
+ central_longitude,
178
+ false_easting=false_easting,
179
+ false_northing=false_northing,
180
+ globe=globe,
181
+ )
182
+
183
+ @docstring._snippet_manager
184
+ @property
185
+ def threshold(self):
186
+ """
187
+ %(proj.reso)s
188
+ """
189
+ return 1e5
190
+
191
+
192
+ class WinkelTripel(_WarpedRectangularProjection):
193
+ """
194
+ The `Winkel tripel (Winkel III) \
195
+ <https://en.wikipedia.org/wiki/Winkel_tripel_projection>`__ projection.
196
+ """
197
+
198
+ #: Registered projection name.
199
+ name = "winkeltripel"
200
+
201
+ @docstring._snippet_manager
202
+ def __init__(
203
+ self, central_longitude=0, globe=None, false_easting=None, false_northing=None
204
+ ):
205
+ """
206
+ %(proj.init)s
207
+ """
208
+ from cartopy.crs import WGS84_SEMIMAJOR_AXIS, Globe
209
+
210
+ if globe is None:
211
+ globe = Globe(semimajor_axis=WGS84_SEMIMAJOR_AXIS, ellipse=None)
212
+
213
+ a = globe.semimajor_axis or WGS84_SEMIMAJOR_AXIS
214
+ b = globe.semiminor_axis or a
215
+ if b != a or globe.ellipse is not None:
216
+ warnings.warn(
217
+ f"The {self.name!r} projection does not handle " "elliptical globes."
218
+ )
219
+
220
+ proj4_params = {"proj": "wintri", "lon_0": central_longitude}
221
+ super().__init__(
222
+ proj4_params,
223
+ central_longitude,
224
+ false_easting=false_easting,
225
+ false_northing=false_northing,
226
+ globe=globe,
227
+ )
228
+
229
+ @docstring._snippet_manager
230
+ @property
231
+ def threshold(self):
232
+ """
233
+ %(proj.reso)s
234
+ """
235
+ return 1e5
236
+
237
+
238
+ class NorthPolarAzimuthalEquidistant(AzimuthalEquidistant):
239
+ """
240
+ Analogous to `~cartopy.crs.NorthPolarStereo`.
241
+ """
242
+
243
+ @docstring._snippet_manager
244
+ def __init__(self, central_longitude=0.0, globe=None):
245
+ """
246
+ %(proj.init)s
247
+ """
248
+ super().__init__(
249
+ central_latitude=90, central_longitude=central_longitude, globe=globe
250
+ )
251
+
252
+
253
+ class SouthPolarAzimuthalEquidistant(AzimuthalEquidistant):
254
+ """
255
+ Analogous to `~cartopy.crs.SouthPolarStereo`.
256
+ """
257
+
258
+ @docstring._snippet_manager
259
+ def __init__(self, central_longitude=0.0, globe=None):
260
+ """
261
+ %(proj.init)s
262
+ """
263
+ super().__init__(
264
+ central_latitude=-90, central_longitude=central_longitude, globe=globe
265
+ )
266
+
267
+
268
+ class NorthPolarLambertAzimuthalEqualArea(LambertAzimuthalEqualArea):
269
+ """
270
+ Analogous to `~cartopy.crs.NorthPolarStereo`.
271
+ """
272
+
273
+ @docstring._snippet_manager
274
+ def __init__(self, central_longitude=0.0, globe=None):
275
+ """
276
+ %(proj.init)s
277
+ """
278
+ super().__init__(
279
+ central_latitude=90, central_longitude=central_longitude, globe=globe
280
+ )
281
+
282
+
283
+ class SouthPolarLambertAzimuthalEqualArea(LambertAzimuthalEqualArea):
284
+ """
285
+ Analogous to `~cartopy.crs.SouthPolarStereo`.
286
+ """
287
+
288
+ @docstring._snippet_manager
289
+ def __init__(self, central_longitude=0.0, globe=None):
290
+ """
291
+ %(proj.init)s
292
+ """
293
+ super().__init__(
294
+ central_latitude=-90, central_longitude=central_longitude, globe=globe
295
+ )
296
+
297
+
298
+ class NorthPolarGnomonic(Gnomonic):
299
+ """
300
+ Analogous to `~cartopy.crs.NorthPolarStereo`.
301
+ """
302
+
303
+ @docstring._snippet_manager
304
+ def __init__(self, central_longitude=0.0, globe=None):
305
+ """
306
+ %(proj.init)s
307
+ """
308
+ super().__init__(
309
+ central_latitude=90, central_longitude=central_longitude, globe=globe
310
+ )
311
+
312
+
313
+ class SouthPolarGnomonic(Gnomonic):
314
+ """
315
+ Analogous to `~cartopy.crs.SouthPolarStereo`.
316
+ """
317
+
318
+ @docstring._snippet_manager
319
+ def __init__(self, central_longitude=0.0, globe=None):
320
+ """
321
+ %(proj.init)s
322
+ """
323
+ super().__init__(
324
+ central_latitude=-90, central_longitude=central_longitude, globe=globe
325
+ )