plopp 25.4.1__tar.gz → 25.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. {plopp-25.4.1 → plopp-25.5.0}/PKG-INFO +1 -1
  2. {plopp-25.4.1 → plopp-25.5.0}/requirements/base.txt +1 -1
  3. {plopp-25.4.1 → plopp-25.5.0}/requirements/basetest.txt +1 -1
  4. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/graphicalview.py +15 -9
  5. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/common.py +37 -12
  6. {plopp-25.4.1 → plopp-25.5.0}/src/plopp.egg-info/PKG-INFO +1 -1
  7. {plopp-25.4.1 → plopp-25.5.0}/tests/graphics/canvas_test.py +16 -0
  8. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/common_test.py +33 -2
  9. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/plot_1d_test.py +10 -0
  10. {plopp-25.4.1 → plopp-25.5.0}/.copier-answers.yml +0 -0
  11. {plopp-25.4.1 → plopp-25.5.0}/.github/dependabot.yml +0 -0
  12. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/ci.yml +0 -0
  13. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/docs.yml +0 -0
  14. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/nightly_at_main.yml +0 -0
  15. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/nightly_at_release.yml +0 -0
  16. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/python-version-ci +0 -0
  17. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/release.yml +0 -0
  18. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/test.yml +0 -0
  19. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/unpinned.yml +0 -0
  20. {plopp-25.4.1 → plopp-25.5.0}/.github/workflows/weekly_windows_macos.yml +0 -0
  21. {plopp-25.4.1 → plopp-25.5.0}/.gitignore +0 -0
  22. {plopp-25.4.1 → plopp-25.5.0}/.pre-commit-config.yaml +0 -0
  23. {plopp-25.4.1 → plopp-25.5.0}/.python-version +0 -0
  24. {plopp-25.4.1 → plopp-25.5.0}/CODE_OF_CONDUCT.md +0 -0
  25. {plopp-25.4.1 → plopp-25.5.0}/CONTRIBUTING.md +0 -0
  26. {plopp-25.4.1 → plopp-25.5.0}/LICENSE +0 -0
  27. {plopp-25.4.1 → plopp-25.5.0}/MANIFEST.in +0 -0
  28. {plopp-25.4.1 → plopp-25.5.0}/README.md +0 -0
  29. {plopp-25.4.1 → plopp-25.5.0}/conda/meta.yaml +0 -0
  30. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/anaconda-icon.js +0 -0
  31. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/circle-exclamation.svg +0 -0
  32. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/custom.css +0 -0
  33. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/customization/custom-interfaces.png +0 -0
  34. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/customization/graph-node-tips.png +0 -0
  35. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/customization/subplots.png +0 -0
  36. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/customization/tweaking-figures.png +0 -0
  37. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/favicon.ico +0 -0
  38. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/gallery/README.txt +0 -0
  39. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/gallery/peeling-layers-thumbnail.png +0 -0
  40. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/gallery/scatter3d-with-slider-thumbnail.png +0 -0
  41. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/gallery/scatter3d-with-threshold-thumbnail.png +0 -0
  42. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/logo-dark.svg +0 -0
  43. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/logo-large-dark.svg +0 -0
  44. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/logo-large.svg +0 -0
  45. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/logo.svg +0 -0
  46. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/image-plot.png +0 -0
  47. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/inspector-plot.png +0 -0
  48. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/line-plot.png +0 -0
  49. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/mesh3d-plot.png +0 -0
  50. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/scatter-plot.png +0 -0
  51. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/scatter3d-plot.png +0 -0
  52. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/slicer-plot.png +0 -0
  53. {plopp-25.4.1 → plopp-25.5.0}/docs/_static/plotting/super-plot.png +0 -0
  54. {plopp-25.4.1 → plopp-25.5.0}/docs/_templates/class-template.rst +0 -0
  55. {plopp-25.4.1 → plopp-25.5.0}/docs/_templates/doc_version.html +0 -0
  56. {plopp-25.4.1 → plopp-25.5.0}/docs/_templates/module-template.rst +0 -0
  57. {plopp-25.4.1 → plopp-25.5.0}/docs/_templates/scipp-class-template.rst +0 -0
  58. {plopp-25.4.1 → plopp-25.5.0}/docs/_templates/scipp-module-template.rst +0 -0
  59. {plopp-25.4.1 → plopp-25.5.0}/docs/about/index.md +0 -0
  60. {plopp-25.4.1 → plopp-25.5.0}/docs/api-reference/index.md +0 -0
  61. {plopp-25.4.1 → plopp-25.5.0}/docs/api-reference/matplotlib.md +0 -0
  62. {plopp-25.4.1 → plopp-25.5.0}/docs/api-reference/plotly.md +0 -0
  63. {plopp-25.4.1 → plopp-25.5.0}/docs/api-reference/pythreejs.md +0 -0
  64. {plopp-25.4.1 → plopp-25.5.0}/docs/conf.py +0 -0
  65. {plopp-25.4.1 → plopp-25.5.0}/docs/customization/custom-interfaces.ipynb +0 -0
  66. {plopp-25.4.1 → plopp-25.5.0}/docs/customization/graph-node-tips.ipynb +0 -0
  67. {plopp-25.4.1 → plopp-25.5.0}/docs/customization/index.md +0 -0
  68. {plopp-25.4.1 → plopp-25.5.0}/docs/customization/subplots.ipynb +0 -0
  69. {plopp-25.4.1 → plopp-25.5.0}/docs/customization/tweaking-figures.ipynb +0 -0
  70. {plopp-25.4.1 → plopp-25.5.0}/docs/developer/coding-conventions.md +0 -0
  71. {plopp-25.4.1 → plopp-25.5.0}/docs/developer/dependency-management.md +0 -0
  72. {plopp-25.4.1 → plopp-25.5.0}/docs/developer/getting-started.md +0 -0
  73. {plopp-25.4.1 → plopp-25.5.0}/docs/developer/index.md +0 -0
  74. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/index.ipynb +0 -0
  75. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/interactive-masking.ipynb +0 -0
  76. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/masking-a-range.ipynb +0 -0
  77. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/nyc-taxi.ipynb +0 -0
  78. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/peeling-layers.ipynb +0 -0
  79. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/polar-plots.ipynb +0 -0
  80. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/rectangle-selection.ipynb +0 -0
  81. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/scatter3d-with-slider.ipynb +0 -0
  82. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/scatter3d-with-threshold.ipynb +0 -0
  83. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/streaming-plot.ipynb +0 -0
  84. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/tiled-random-samples.ipynb +0 -0
  85. {plopp-25.4.1 → plopp-25.5.0}/docs/gallery/updating-scatter.ipynb +0 -0
  86. {plopp-25.4.1 → plopp-25.5.0}/docs/getting-started/index.md +0 -0
  87. {plopp-25.4.1 → plopp-25.5.0}/docs/getting-started/installation.md +0 -0
  88. {plopp-25.4.1 → plopp-25.5.0}/docs/getting-started/numpy-pandas-xarray.ipynb +0 -0
  89. {plopp-25.4.1 → plopp-25.5.0}/docs/getting-started/overview.ipynb +0 -0
  90. {plopp-25.4.1 → plopp-25.5.0}/docs/getting-started/saving-figures.ipynb +0 -0
  91. {plopp-25.4.1 → plopp-25.5.0}/docs/index.md +0 -0
  92. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/image-plot.ipynb +0 -0
  93. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/index.md +0 -0
  94. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/inspector-plot.ipynb +0 -0
  95. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/line-plot.ipynb +0 -0
  96. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/mesh3d-plot.ipynb +0 -0
  97. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/scatter-plot.ipynb +0 -0
  98. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/scatter3d-plot.ipynb +0 -0
  99. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/slicer-plot.ipynb +0 -0
  100. {plopp-25.4.1 → plopp-25.5.0}/docs/plotting/super-plot.ipynb +0 -0
  101. {plopp-25.4.1 → plopp-25.5.0}/pyproject.toml +0 -0
  102. {plopp-25.4.1 → plopp-25.5.0}/requirements/base.in +0 -0
  103. {plopp-25.4.1 → plopp-25.5.0}/requirements/basetest.in +0 -0
  104. {plopp-25.4.1 → plopp-25.5.0}/requirements/ci.in +0 -0
  105. {plopp-25.4.1 → plopp-25.5.0}/requirements/ci.txt +0 -0
  106. {plopp-25.4.1 → plopp-25.5.0}/requirements/dev.in +0 -0
  107. {plopp-25.4.1 → plopp-25.5.0}/requirements/dev.txt +0 -0
  108. {plopp-25.4.1 → plopp-25.5.0}/requirements/docs.in +0 -0
  109. {plopp-25.4.1 → plopp-25.5.0}/requirements/docs.txt +0 -0
  110. {plopp-25.4.1 → plopp-25.5.0}/requirements/make_base.py +0 -0
  111. {plopp-25.4.1 → plopp-25.5.0}/requirements/mini.in +0 -0
  112. {plopp-25.4.1 → plopp-25.5.0}/requirements/mini.txt +0 -0
  113. {plopp-25.4.1 → plopp-25.5.0}/requirements/mypy.in +0 -0
  114. {plopp-25.4.1 → plopp-25.5.0}/requirements/mypy.txt +0 -0
  115. {plopp-25.4.1 → plopp-25.5.0}/requirements/nightly.in +0 -0
  116. {plopp-25.4.1 → plopp-25.5.0}/requirements/nightly.txt +0 -0
  117. {plopp-25.4.1 → plopp-25.5.0}/requirements/noplotly.in +0 -0
  118. {plopp-25.4.1 → plopp-25.5.0}/requirements/noplotly.txt +0 -0
  119. {plopp-25.4.1 → plopp-25.5.0}/requirements/static.in +0 -0
  120. {plopp-25.4.1 → plopp-25.5.0}/requirements/static.txt +0 -0
  121. {plopp-25.4.1 → plopp-25.5.0}/requirements/test.in +0 -0
  122. {plopp-25.4.1 → plopp-25.5.0}/requirements/test.txt +0 -0
  123. {plopp-25.4.1 → plopp-25.5.0}/requirements/wheels.in +0 -0
  124. {plopp-25.4.1 → plopp-25.5.0}/requirements/wheels.txt +0 -0
  125. {plopp-25.4.1 → plopp-25.5.0}/resources/logo-plopp-2022.svg +0 -0
  126. {plopp-25.4.1 → plopp-25.5.0}/setup.cfg +0 -0
  127. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/__init__.py +0 -0
  128. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/__init__.py +0 -0
  129. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/common.py +0 -0
  130. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/__init__.py +0 -0
  131. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/canvas.py +0 -0
  132. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/fast_image.py +0 -0
  133. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/figure.py +0 -0
  134. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/image.py +0 -0
  135. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/line.py +0 -0
  136. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/mesh_image.py +0 -0
  137. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/scatter.py +0 -0
  138. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/tiled.py +0 -0
  139. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/matplotlib/utils.py +0 -0
  140. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/plotly/__init__.py +0 -0
  141. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/plotly/canvas.py +0 -0
  142. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/plotly/figure.py +0 -0
  143. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/plotly/line.py +0 -0
  144. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/pythreejs/__init__.py +0 -0
  145. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/pythreejs/canvas.py +0 -0
  146. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/pythreejs/figure.py +0 -0
  147. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/pythreejs/mesh3d.py +0 -0
  148. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/pythreejs/outline.py +0 -0
  149. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/backends/pythreejs/scatter3d.py +0 -0
  150. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/__init__.py +0 -0
  151. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/__init__.pyi +0 -0
  152. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/graph.py +0 -0
  153. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/helpers.py +0 -0
  154. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/limits.py +0 -0
  155. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/node_class.py +0 -0
  156. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/typing.py +0 -0
  157. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/utils.py +0 -0
  158. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/core/view.py +0 -0
  159. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/data/__init__.py +0 -0
  160. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/data/examples.py +0 -0
  161. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/data/factory.py +0 -0
  162. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/data/testing.py +0 -0
  163. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/__init__.py +0 -0
  164. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/__init__.pyi +0 -0
  165. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/basefig.py +0 -0
  166. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/bbox.py +0 -0
  167. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/camera.py +0 -0
  168. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/colormapper.py +0 -0
  169. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/figures.py +0 -0
  170. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/graphics/tiled.py +0 -0
  171. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/__init__.py +0 -0
  172. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/__init__.pyi +0 -0
  173. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/inspector.py +0 -0
  174. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/mesh3d.py +0 -0
  175. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/plot.py +0 -0
  176. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/scatter.py +0 -0
  177. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/scatter3d.py +0 -0
  178. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/slicer.py +0 -0
  179. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/superplot.py +0 -0
  180. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/plotting/xyplot.py +0 -0
  181. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/py.typed +0 -0
  182. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/utils.py +0 -0
  183. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/__init__.py +0 -0
  184. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/__init__.pyi +0 -0
  185. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/box.py +0 -0
  186. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/checkboxes.py +0 -0
  187. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/clip3d.py +0 -0
  188. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/debounce.py +0 -0
  189. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/drawing.py +0 -0
  190. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/linesave.py +0 -0
  191. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/slice.py +0 -0
  192. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/style.py +0 -0
  193. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/toolbar.py +0 -0
  194. {plopp-25.4.1 → plopp-25.5.0}/src/plopp/widgets/tools.py +0 -0
  195. {plopp-25.4.1 → plopp-25.5.0}/src/plopp.egg-info/SOURCES.txt +0 -0
  196. {plopp-25.4.1 → plopp-25.5.0}/src/plopp.egg-info/dependency_links.txt +0 -0
  197. {plopp-25.4.1 → plopp-25.5.0}/src/plopp.egg-info/requires.txt +0 -0
  198. {plopp-25.4.1 → plopp-25.5.0}/src/plopp.egg-info/top_level.txt +0 -0
  199. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/matplotlib/mpl_image_test.py +0 -0
  200. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/matplotlib/mpl_line_test.py +0 -0
  201. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/matplotlib/mpl_plot_test.py +0 -0
  202. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/matplotlib/mpl_scatter_test.py +0 -0
  203. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/matplotlib/mpl_tiled_test.py +0 -0
  204. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/plotly/conftest.py +0 -0
  205. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/plotly/plotly_line_test.py +0 -0
  206. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/pythreejs/pythreejs_canvas_test.py +0 -0
  207. {plopp-25.4.1 → plopp-25.5.0}/tests/backends/pythreejs/pythreejs_scatter3d_test.py +0 -0
  208. {plopp-25.4.1 → plopp-25.5.0}/tests/conftest.py +0 -0
  209. {plopp-25.4.1 → plopp-25.5.0}/tests/core/graph_test.py +0 -0
  210. {plopp-25.4.1 → plopp-25.5.0}/tests/core/limits_test.py +0 -0
  211. {plopp-25.4.1 → plopp-25.5.0}/tests/core/node_test.py +0 -0
  212. {plopp-25.4.1 → plopp-25.5.0}/tests/core/utils_test.py +0 -0
  213. {plopp-25.4.1 → plopp-25.5.0}/tests/graphics/artists_test.py +0 -0
  214. {plopp-25.4.1 → plopp-25.5.0}/tests/graphics/colormapper_test.py +0 -0
  215. {plopp-25.4.1 → plopp-25.5.0}/tests/graphics/figures_test.py +0 -0
  216. {plopp-25.4.1 → plopp-25.5.0}/tests/high_level_test.py +0 -0
  217. {plopp-25.4.1 → plopp-25.5.0}/tests/minimal_plot_test.py +0 -0
  218. {plopp-25.4.1 → plopp-25.5.0}/tests/package_test.py +0 -0
  219. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/inspector_test.py +0 -0
  220. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/mesh3d_test.py +0 -0
  221. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/plot_2d_test.py +0 -0
  222. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/scatter3d_test.py +0 -0
  223. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/scatter_test.py +0 -0
  224. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/slicer_test.py +0 -0
  225. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/superplot_test.py +0 -0
  226. {plopp-25.4.1 → plopp-25.5.0}/tests/plotting/xyplot_test.py +0 -0
  227. {plopp-25.4.1 → plopp-25.5.0}/tests/widgets/box_test.py +0 -0
  228. {plopp-25.4.1 → plopp-25.5.0}/tests/widgets/checkboxes_test.py +0 -0
  229. {plopp-25.4.1 → plopp-25.5.0}/tests/widgets/clip3d_test.py +0 -0
  230. {plopp-25.4.1 → plopp-25.5.0}/tests/widgets/slice_test.py +0 -0
  231. {plopp-25.4.1 → plopp-25.5.0}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plopp
3
- Version: 25.4.1
3
+ Version: 25.5.0
4
4
  Summary: Visualization library for Scipp
5
5
  Author: Scipp contributors
6
6
  License: BSD 3-Clause License
@@ -32,7 +32,7 @@ pyparsing==3.2.1
32
32
  # via matplotlib
33
33
  python-dateutil==2.9.0.post0
34
34
  # via matplotlib
35
- scipp==25.4.0
35
+ scipp==25.5.0
36
36
  # via -r base.in
37
37
  six==1.17.0
38
38
  # via python-dateutil
@@ -134,7 +134,7 @@ pytz==2025.1
134
134
  # via pandas
135
135
  requests==2.32.3
136
136
  # via pooch
137
- scipp==25.4.0
137
+ scipp==25.5.0
138
138
  # via -r basetest.in
139
139
  scipy==1.15.2
140
140
  # via -r basetest.in
@@ -21,6 +21,15 @@ def _none_if_not_finite(x: float | None) -> float | int | None:
21
21
  return x if np.isfinite(x) else None
22
22
 
23
23
 
24
+ def _make_range(
25
+ old: tuple[float, float], new: tuple[float, float]
26
+ ) -> tuple[float | None, float | None]:
27
+ new = (_none_if_not_finite(new[0]), _none_if_not_finite(new[1]))
28
+ if (old is not None) and (None not in old) and (old[0] > old[1]):
29
+ new = (new[1], new[0])
30
+ return new
31
+
32
+
24
33
  class GraphicalView(View):
25
34
  """
26
35
  Base class for graphical 1d and 2d views.
@@ -113,18 +122,15 @@ class GraphicalView(View):
113
122
  bbox = bbox.union(artist.bbox(**scales))
114
123
  self.bbox = bbox
115
124
  self.bbox = self.bbox.override(self.canvas.bbox)
116
- self.canvas.xrange = (
117
- _none_if_not_finite(self.bbox.xmin),
118
- _none_if_not_finite(self.bbox.xmax),
125
+ self.canvas.xrange = _make_range(
126
+ old=self.canvas.xrange, new=(self.bbox.xmin, self.bbox.xmax)
119
127
  )
120
- self.canvas.yrange = (
121
- _none_if_not_finite(self.bbox.ymin),
122
- _none_if_not_finite(self.bbox.ymax),
128
+ self.canvas.yrange = _make_range(
129
+ old=self.canvas.yrange, new=(self.bbox.ymin, self.bbox.ymax)
123
130
  )
124
131
  if hasattr(self.canvas, 'zrange'):
125
- self.canvas.zrange = (
126
- _none_if_not_finite(self.bbox.zmin),
127
- _none_if_not_finite(self.bbox.zmax),
132
+ self.canvas.zrange = _make_range(
133
+ old=self.canvas.zrange, new=(self.bbox.zmin, self.bbox.zmax)
128
134
  )
129
135
 
130
136
  def update(self, *args, **kwargs) -> None:
@@ -2,7 +2,7 @@
2
2
  # Copyright (c) 2023 Scipp contributors (https://github.com/scipp)
3
3
 
4
4
  import warnings
5
- from collections.abc import Callable
5
+ from collections.abc import Callable, Iterable
6
6
  from typing import Any
7
7
 
8
8
  import numpy as np
@@ -76,8 +76,30 @@ def to_variable(obj) -> sc.Variable:
76
76
  return out
77
77
 
78
78
 
79
+ def _ensure_data_array_coords(
80
+ da: sc.DataArray, coords: list[str] | None
81
+ ) -> sc.DataArray:
82
+ if coords is None:
83
+ coords = list(da.dims)
84
+ elif missing := set(coords) - set(da.coords.keys()):
85
+ raise ValueError(f"Specified coords do not exist: {missing}")
86
+
87
+ # Remove unused coords
88
+ da = da.drop_coords(list(set(da.coords) - set(coords)))
89
+ # Assign dim coords where missing. The above checks ensure that all missing
90
+ # coords are dim coords, i.e., that `name in out.dims`.
91
+ da = da.assign_coords(
92
+ {
93
+ name: sc.arange(name, da.sizes[name], unit=None)
94
+ for name in set(coords) - set(da.coords)
95
+ }
96
+ )
97
+ return da
98
+
99
+
79
100
  def to_data_array(
80
101
  obj: Plottable | list,
102
+ coords: list[str] | None = None,
81
103
  ) -> sc.DataArray:
82
104
  """
83
105
  Convert an input to a DataArray, potentially adding fake coordinates if they are
@@ -87,6 +109,8 @@ def to_data_array(
87
109
  ----------
88
110
  obj:
89
111
  The input object to be converted.
112
+ coords:
113
+ If supplied, use these coords instead of the input's dimension coordinates.
90
114
  """
91
115
  out = _maybe_to_variable(obj)
92
116
  if isinstance(out, sc.Variable):
@@ -94,15 +118,13 @@ def to_data_array(
94
118
  out = from_compatible_lib(out)
95
119
  if not isinstance(out, sc.DataArray):
96
120
  raise TypeError(f"Cannot convert input of type {type(obj)} to a DataArray.")
97
- out = out.copy(deep=False)
98
- for dim, size in out.sizes.items():
99
- if dim not in out.coords:
100
- out.coords[dim] = sc.arange(dim, size, unit=None)
101
- if not out.coords[dim].dims:
121
+ out = _ensure_data_array_coords(out, coords)
122
+ for name, coord in out.coords.items():
123
+ if not coord.dims:
102
124
  raise ValueError(
103
125
  "Input data cannot be plotted: it has a scalar coordinate along "
104
- f"dimension {dim}. Consider dropping this coordinate before plotting. "
105
- f"Use ``data.drop_coords('{dim}').plot()``."
126
+ f"dimension {name}. Consider dropping this coordinate before plotting. "
127
+ f"Use ``data.drop_coords('{name}').plot()``."
106
128
  )
107
129
  for name in out.coords:
108
130
  other_dims = [dim for dim in out.coords[name].dims if dim not in out.dims]
@@ -171,7 +193,7 @@ def preprocess(
171
193
  obj: Plottable | list,
172
194
  name: str | None = None,
173
195
  ignore_size: bool = False,
174
- coords: list[str] | None = None,
196
+ coords: Iterable[str] | str | None = None,
175
197
  ) -> sc.DataArray:
176
198
  """
177
199
  Pre-process input data for plotting.
@@ -192,7 +214,12 @@ def preprocess(
192
214
  coords:
193
215
  If supplied, use these coords instead of the input's dimension coordinates.
194
216
  """
195
- out = to_data_array(obj)
217
+ if isinstance(coords, str):
218
+ coords = [coords]
219
+ elif coords is not None:
220
+ coords = list(coords)
221
+
222
+ out = to_data_array(obj, coords)
196
223
  check_not_binned(out)
197
224
  check_allowed_dtypes(out)
198
225
  if name is not None:
@@ -201,8 +228,6 @@ def preprocess(
201
228
  _check_size(out)
202
229
  if coords is not None:
203
230
  renamed_dims = {}
204
- if isinstance(coords, str):
205
- coords = [coords]
206
231
  for dim in coords:
207
232
  underlying = out.coords[dim].dims[-1]
208
233
  if underlying in renamed_dims:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plopp
3
- Version: 25.4.1
3
+ Version: 25.5.0
4
4
  Summary: Visualization library for Scipp
5
5
  Author: Scipp contributors
6
6
  License: BSD 3-Clause License
@@ -148,6 +148,22 @@ class TestCanvasNo3d:
148
148
  assert canvas.xscale == 'linear'
149
149
  assert canvas.yscale == 'log'
150
150
 
151
+ def test_xrange_order_preserved(self, set_backend, backend, figure, data):
152
+ da = data()
153
+ fig = figure(Node(da))
154
+ fig.canvas.xrange = (52.0, -5.0)
155
+ fig.view.autoscale()
156
+ new_range = fig.canvas.xrange
157
+ assert new_range[0] > new_range[1]
158
+
159
+ def test_yrange_order_preserved(self, set_backend, backend, figure, data):
160
+ da = data()
161
+ fig = figure(Node(da))
162
+ fig.canvas.yrange = (61.0, -6.6)
163
+ fig.view.autoscale()
164
+ new_range = fig.canvas.yrange
165
+ assert new_range[0] > new_range[1]
166
+
151
167
 
152
168
  CASES1DINTERACTIVE = {
153
169
  k: c for k, c in CASES.items() if (c[1] is linefigure and c[0][1] != 'mpl-static')
@@ -25,6 +25,14 @@ def test_preprocess_use_non_dimension_coords():
25
25
  assert out.coords['yy2'].max() == 3.3 * da.coords['yy'].max()
26
26
 
27
27
 
28
+ def test_preprocess_use_non_dimension_coord_single_str():
29
+ da = data_array(ndim=1)
30
+ da.coords['xx2'] = 7.5 * da.coords['xx']
31
+ out = preprocess(da, coords='xx2')
32
+ assert set(out.dims) == {'xx2'}
33
+ assert out.coords['xx2'].max() == 7.5 * da.coords['xx'].max()
34
+
35
+
28
36
  def test_preprocess_warns_when_coordinate_is_not_sorted():
29
37
  da = data_array(ndim=1)
30
38
  unsorted = sc.concat([da['xx', 20:], da['xx', :20]], dim='xx')
@@ -40,12 +48,12 @@ def test_preprocess_no_warning_if_dtype_cannot_be_sorted():
40
48
  dims=['xx'], values=np.random.random((da.sizes['xx'], 3))
41
49
  )
42
50
  out = preprocess(da) # no warning should be emitted
43
- assert 'vecs' in out.coords
51
+ assert 'vecs' not in out.coords # coord doesn't participate in plot
44
52
  da.coords['strings'] = sc.array(
45
53
  dims=['xx'], values=list('ba' * (da.sizes['xx'] // 2))
46
54
  )
47
55
  out = preprocess(da) # no warning should be emitted
48
- assert 'strings' in out.coords
56
+ assert 'strings' not in out.coords # coord doesn't participate in plot
49
57
 
50
58
 
51
59
  @pytest.mark.parametrize(
@@ -70,3 +78,26 @@ def test_preprocess_raises_for_unsupported_dtype(dtype_and_shape):
70
78
  match=f'The input has dtype {dtype} which is not supported by Plopp',
71
79
  ):
72
80
  preprocess(v)
81
+
82
+
83
+ def test_preprocess_drops_coords_that_are_not_plotted_dim_coords():
84
+ da = data_array(ndim=2)
85
+ da.coords['xx2'] = 7.5 * da.coords['xx']
86
+ da.coords['yy2'] = 3.3 * da.coords['yy']
87
+ out = preprocess(da)
88
+ assert set(out.coords) == {'xx', 'yy'}
89
+
90
+
91
+ def test_preprocess_drops_coords_that_are_not_plotted_custom_coords():
92
+ da = data_array(ndim=2)
93
+ da.coords['xx2'] = 7.5 * da.coords['xx']
94
+ da.coords['yy2'] = 3.3 * da.coords['yy']
95
+ out = preprocess(da, coords=['yy2', 'xx'])
96
+ assert set(out.coords) == {'xx', 'yy2'}
97
+
98
+
99
+ def test_preprocess_drops_coords_that_are_not_plotted_custom_coord_single_str():
100
+ da = data_array(ndim=1)
101
+ da.coords['xx2'] = 7.5 * da.coords['xx']
102
+ out = preprocess(da, coords='xx')
103
+ assert set(out.coords) == {'xx'}
@@ -414,6 +414,16 @@ def test_plot_1d_datetime_length_1():
414
414
  pp.plot(da)
415
415
 
416
416
 
417
+ def test_plot_1d_extra_datetime_coord_binedges():
418
+ da = data_array(ndim=1)
419
+ dim = da.dim
420
+ size = da.sizes[dim]
421
+ da.coords['times'] = (sc.arange('t', 2 * size, unit='s') + sc.epoch(unit='s')).fold(
422
+ dim='t', sizes={dim: size, 't': 2}
423
+ )
424
+ pp.plot(da)
425
+
426
+
417
427
  def test_plot_1d_data_with_errorbars():
418
428
  da = data_array(ndim=1, variances=True)
419
429
  p = da.plot()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes