ultraplot 0.99.3__tar.gz

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