PlotPy 2.8.4__tar.gz → 2.10.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 (552) hide show
  1. {plotpy-2.8.4 → plotpy-2.10.0}/PKG-INFO +7 -5
  2. {plotpy-2.8.4 → plotpy-2.10.0}/PlotPy.egg-info/PKG-INFO +7 -5
  3. {plotpy-2.8.4 → plotpy-2.10.0}/PlotPy.egg-info/SOURCES.txt +9 -0
  4. {plotpy-2.8.4 → plotpy-2.10.0}/PlotPy.egg-info/requires.txt +1 -1
  5. {plotpy-2.8.4 → plotpy-2.10.0}/README.md +5 -3
  6. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/items/overview.rst +7 -0
  7. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/items/reference.rst +6 -0
  8. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.07.md +3 -0
  9. plotpy-2.10.0/doc/release_notes/release_2.09.md +58 -0
  10. plotpy-2.10.0/doc/release_notes/release_2.10.md +34 -0
  11. {plotpy-2.8.4 → plotpy-2.10.0}/doc/requirements.rst +8 -2
  12. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/__init__.py +1 -1
  13. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/curvemarker.py +71 -3
  14. plotpy-2.10.0/plotpy/data/icons/items/quiver.png +0 -0
  15. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/io.py +7 -0
  16. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/__init__.py +2 -0
  17. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/curve/errorbar.py +4 -4
  18. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/__init__.py +1 -0
  19. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/base.py +49 -0
  20. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/misc.py +89 -6
  21. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/standard.py +5 -28
  22. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/transform.py +5 -1
  23. plotpy-2.10.0/plotpy/items/quiver.py +513 -0
  24. plotpy-2.10.0/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
  25. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/mathutils/arrayfuncs.py +16 -4
  26. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/mathutils/geometry.py +6 -1
  27. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/plot/base.py +58 -1
  28. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/plot/interactive.py +28 -4
  29. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/axes.py +24 -0
  30. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/base.py +5 -1
  31. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/shape.py +14 -3
  32. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_pyplot.py +7 -0
  33. plotpy-2.10.0/plotpy/tests/features/test_quiver.py +75 -0
  34. plotpy-2.10.0/plotpy/tests/unit/test_arrayfuncs.py +49 -0
  35. plotpy-2.10.0/plotpy/tests/unit/test_autoscale_strategy.py +116 -0
  36. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_geometry.py +14 -0
  37. plotpy-2.10.0/plotpy/tests/unit/test_image_log_set_data.py +70 -0
  38. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_io.py +30 -1
  39. plotpy-2.10.0/plotpy/tests/unit/test_snapshot_original_size.py +169 -0
  40. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_styles.py +24 -0
  41. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/vistools.py +2 -2
  42. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/base.py +13 -7
  43. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/curve.py +9 -9
  44. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/image.py +13 -7
  45. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/misc.py +34 -3
  46. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/colormap/manager.py +47 -2
  47. {plotpy-2.8.4 → plotpy-2.10.0}/pyproject.toml +1 -1
  48. {plotpy-2.8.4 → plotpy-2.10.0}/requirements.txt +4 -3
  49. {plotpy-2.8.4 → plotpy-2.10.0}/src/histogram2d.c +249 -253
  50. {plotpy-2.8.4 → plotpy-2.10.0}/src/mandelbrot.c +248 -252
  51. plotpy-2.8.4/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
  52. {plotpy-2.8.4 → plotpy-2.10.0}/LICENSE +0 -0
  53. {plotpy-2.8.4 → plotpy-2.10.0}/MANIFEST.in +0 -0
  54. {plotpy-2.8.4 → plotpy-2.10.0}/PlotPy.egg-info/dependency_links.txt +0 -0
  55. {plotpy-2.8.4 → plotpy-2.10.0}/PlotPy.egg-info/entry_points.txt +0 -0
  56. {plotpy-2.8.4 → plotpy-2.10.0}/PlotPy.egg-info/top_level.txt +0 -0
  57. {plotpy-2.8.4 → plotpy-2.10.0}/colormaps/README.md +0 -0
  58. {plotpy-2.8.4 → plotpy-2.10.0}/colormaps/_cm.py +0 -0
  59. {plotpy-2.8.4 → plotpy-2.10.0}/colormaps/colormap.py +0 -0
  60. {plotpy-2.8.4 → plotpy-2.10.0}/colormaps/matplotlib_cmaps.py +0 -0
  61. {plotpy-2.8.4 → plotpy-2.10.0}/doc/_static/favicon.ico +0 -0
  62. {plotpy-2.8.4 → plotpy-2.10.0}/doc/conf.py +0 -0
  63. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/build.rst +0 -0
  64. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/contribute.rst +0 -0
  65. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/gitworkflow.rst +0 -0
  66. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/guiqwt_to_plotpy.csv +0 -0
  67. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/guiqwt_to_plotpy.rst +0 -0
  68. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/index.rst +0 -0
  69. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/platforms.rst +0 -0
  70. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/v1_to_guidata_v3.csv +0 -0
  71. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/v1_to_v2.csv +0 -0
  72. {plotpy-2.8.4 → plotpy-2.10.0}/doc/dev/v1_to_v2.rst +0 -0
  73. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/colormapmanager.rst +0 -0
  74. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/events.rst +0 -0
  75. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/fit.rst +0 -0
  76. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/fliprotate.rst +0 -0
  77. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/imagefile.rst +0 -0
  78. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/index.rst +0 -0
  79. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/io.rst +0 -0
  80. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/items/builder.rst +0 -0
  81. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/items/examples.rst +0 -0
  82. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/items/index.rst +0 -0
  83. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/mathutils/colormaps.rst +0 -0
  84. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/mathutils/geometry.rst +0 -0
  85. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/mathutils/index.rst +0 -0
  86. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/mathutils/scaler.rst +0 -0
  87. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/panels/index.rst +0 -0
  88. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/panels/overview.rst +0 -0
  89. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/panels/reference.rst +0 -0
  90. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/plot/examples.rst +0 -0
  91. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/plot/index.rst +0 -0
  92. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/plot/overview.rst +0 -0
  93. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/plot/reference.rst +0 -0
  94. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/pyplot.rst +0 -0
  95. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/resizedialog.rst +0 -0
  96. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/rotatecrop.rst +0 -0
  97. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/selectdialog.rst +0 -0
  98. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/signals.rst +0 -0
  99. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/styles/index.rst +0 -0
  100. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/styles/overview.rst +0 -0
  101. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/styles/reference.rst +0 -0
  102. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/tools/examples.rst +0 -0
  103. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/tools/index.rst +0 -0
  104. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/tools/overview.rst +0 -0
  105. {plotpy-2.8.4 → plotpy-2.10.0}/doc/features/tools/reference.rst +0 -0
  106. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/my_plot_manager.png +0 -0
  107. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/my_plot_manager.svg +0 -0
  108. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/panorama-vertical.png +0 -0
  109. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/panorama-vertical.svg +0 -0
  110. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/panorama.png +0 -0
  111. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/panorama.svg +0 -0
  112. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/plot_widgets.png +0 -0
  113. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/plot_widgets.svg +0 -0
  114. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/plotpy-banner.png +0 -0
  115. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/plotpy-vertical.png +0 -0
  116. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/__init__.png +0 -0
  117. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/computations.png +0 -0
  118. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/contrast.png +0 -0
  119. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/cross_section.png +0 -0
  120. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/cross_section2.png +0 -0
  121. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/dotarraydemo.png +0 -0
  122. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/filtertest1.png +0 -0
  123. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/filtertest2.png +0 -0
  124. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/fit.png +0 -0
  125. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/get_point.png +0 -0
  126. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/hist2d.png +0 -0
  127. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/image_plot_tools.png +0 -0
  128. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/imagefilter.png +0 -0
  129. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/imagesuperp.png +0 -0
  130. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/imagexy.png +0 -0
  131. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/manager.png +0 -0
  132. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/mandelbrot.png +0 -0
  133. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/pcolor.png +0 -0
  134. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/plot.png +0 -0
  135. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/simple_dialog.png +0 -0
  136. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/simple_window.png +0 -0
  137. {plotpy-2.8.4 → plotpy-2.10.0}/doc/images/screenshots/transform.png +0 -0
  138. {plotpy-2.8.4 → plotpy-2.10.0}/doc/index.rst +0 -0
  139. {plotpy-2.8.4 → plotpy-2.10.0}/doc/intro/examples.rst +0 -0
  140. {plotpy-2.8.4 → plotpy-2.10.0}/doc/intro/index.rst +0 -0
  141. {plotpy-2.8.4 → plotpy-2.10.0}/doc/intro/installation.rst +0 -0
  142. {plotpy-2.8.4 → plotpy-2.10.0}/doc/intro/licenses.rst +0 -0
  143. {plotpy-2.8.4 → plotpy-2.10.0}/doc/intro/motivation.rst +0 -0
  144. {plotpy-2.8.4 → plotpy-2.10.0}/doc/intro/overview.rst +0 -0
  145. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/index.rst +0 -0
  146. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.00.md +0 -0
  147. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.01.md +0 -0
  148. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.02.md +0 -0
  149. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.03.md +0 -0
  150. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.04.md +0 -0
  151. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.05.md +0 -0
  152. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.06.md +0 -0
  153. {plotpy-2.8.4 → plotpy-2.10.0}/doc/release_notes/release_2.08.md +0 -0
  154. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/__init__.py +0 -0
  155. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/annotation.py +0 -0
  156. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/image.py +0 -0
  157. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/label.py +0 -0
  158. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/plot.py +0 -0
  159. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/builder/shape.py +0 -0
  160. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/config.py +0 -0
  161. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/constants.py +0 -0
  162. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/coords.py +0 -0
  163. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/colormaps_default.json +0 -0
  164. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/apply.png +0 -0
  165. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/arredit.png +0 -0
  166. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/arrow_down.png +0 -0
  167. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/arrow_up.png +0 -0
  168. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/autorefresh.png +0 -0
  169. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/autoscale.png +0 -0
  170. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/axes.png +0 -0
  171. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/busy.png +0 -0
  172. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/cell_edit.png +0 -0
  173. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/center.png +0 -0
  174. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/cmap_edit.png +0 -0
  175. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/contrast.png +0 -0
  176. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/copy.png +0 -0
  177. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/copytoclipboard.png +0 -0
  178. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csapplylut.png +0 -0
  179. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csautoscale.png +0 -0
  180. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csection.png +0 -0
  181. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csection_a.png +0 -0
  182. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csection_line.png +0 -0
  183. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csection_oblique.png +0 -0
  184. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/csperimage.png +0 -0
  185. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curve_downsample.png +0 -0
  186. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/dots.png +0 -0
  187. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/lines.png +0 -0
  188. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/steps.png +0 -0
  189. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curvestyles/sticks.png +0 -0
  190. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curvetypes/xfy.png +0 -0
  191. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/curvetypes/yfx.png +0 -0
  192. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/delete.png +0 -0
  193. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/edit.png +0 -0
  194. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/edit_point_selection.png +0 -0
  195. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/edit.png +0 -0
  196. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/edit_add.png +0 -0
  197. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/editcopy.png +0 -0
  198. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/editdelete.png +0 -0
  199. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/editpaste.png +0 -0
  200. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/fileimport.png +0 -0
  201. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/filesave.png +0 -0
  202. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/imshow.png +0 -0
  203. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/insert.png +0 -0
  204. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/plot.png +0 -0
  205. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/editors/rename.png +0 -0
  206. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/eliminate_outliers.png +0 -0
  207. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/eraser.png +0 -0
  208. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/exit.png +0 -0
  209. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/expander_down.png +0 -0
  210. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/expander_right.png +0 -0
  211. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/export.png +0 -0
  212. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/file.png +0 -0
  213. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/fileclose.png +0 -0
  214. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/fileimport.png +0 -0
  215. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filenew.png +0 -0
  216. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/fileopen.png +0 -0
  217. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filesave.png +0 -0
  218. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filesaveas.png +0 -0
  219. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/doc.png +0 -0
  220. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/gif.png +0 -0
  221. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/html.png +0 -0
  222. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/jpg.png +0 -0
  223. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/pdf.png +0 -0
  224. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/png.png +0 -0
  225. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/pps.png +0 -0
  226. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/ps.png +0 -0
  227. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/tar.png +0 -0
  228. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/tgz.png +0 -0
  229. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/tif.png +0 -0
  230. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/txt.png +0 -0
  231. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/xls.png +0 -0
  232. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/filetypes/zip.png +0 -0
  233. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/font.png +0 -0
  234. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/full_range.png +0 -0
  235. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/funct.png +0 -0
  236. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/hcursor.png +0 -0
  237. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/hflip.png +0 -0
  238. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/imagestats.png +0 -0
  239. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/item_list.png +0 -0
  240. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/annotation.png +0 -0
  241. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/curve.png +0 -0
  242. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/errorbar.png +0 -0
  243. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/grid.png +0 -0
  244. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/histogram.png +0 -0
  245. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/histogram2d.png +0 -0
  246. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/image.png +0 -0
  247. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/label.png +0 -0
  248. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/legend.png +0 -0
  249. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/items/polygonmap.png +0 -0
  250. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/magnifier.png +0 -0
  251. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/cross.png +0 -0
  252. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/diamond.png +0 -0
  253. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/ellipse.png +0 -0
  254. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/hexagon.png +0 -0
  255. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/point.png +0 -0
  256. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/square.png +0 -0
  257. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/star.png +0 -0
  258. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_d.png +0 -0
  259. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_l.png +0 -0
  260. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_r.png +0 -0
  261. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/triangle_u.png +0 -0
  262. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markers/xcross.png +0 -0
  263. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markerstyles/cross_marker.png +0 -0
  264. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markerstyles/horiz_marker.png +0 -0
  265. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/markerstyles/vert_marker.png +0 -0
  266. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_circle.png +0 -0
  267. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_circle_outside.png +0 -0
  268. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_rectangle.png +0 -0
  269. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_rectangle_outside.png +0 -0
  270. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/mask/mask_tool.png +0 -0
  271. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/max.png +0 -0
  272. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/min.png +0 -0
  273. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/move.png +0 -0
  274. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/multipoint_selection.png +0 -0
  275. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/none.png +0 -0
  276. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/not_found.png +0 -0
  277. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/on_curve.png +0 -0
  278. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/bdiagpattern.png +0 -0
  279. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/crosspattern.png +0 -0
  280. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense1pattern.png +0 -0
  281. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense2pattern.png +0 -0
  282. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense3pattern.png +0 -0
  283. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense4pattern.png +0 -0
  284. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense5pattern.png +0 -0
  285. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense6pattern.png +0 -0
  286. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/dense7pattern.png +0 -0
  287. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/diagcrosspattern.png +0 -0
  288. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/fdiagpattern.png +0 -0
  289. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/horpattern.png +0 -0
  290. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/nobrush.png +0 -0
  291. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/solidpattern.png +0 -0
  292. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/patterns/verpattern.png +0 -0
  293. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/plotpy-banner.svg +0 -0
  294. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/plotpy-vertical.svg +0 -0
  295. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/plotpy.svg +0 -0
  296. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/point_selection.png +0 -0
  297. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/print.png +0 -0
  298. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/python.png +0 -0
  299. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/quickview.png +0 -0
  300. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/refresh.png +0 -0
  301. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/save_all.png +0 -0
  302. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/scales/lin_lin.png +0 -0
  303. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/scales/lin_log.png +0 -0
  304. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/scales/log_lin.png +0 -0
  305. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/scales/log_log.png +0 -0
  306. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/select.svg +0 -0
  307. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/select_area.svg +0 -0
  308. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/settings.png +0 -0
  309. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shape.png +0 -0
  310. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/circle.png +0 -0
  311. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/contour.png +0 -0
  312. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/ellipse_shape.png +0 -0
  313. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/gtaxes.png +0 -0
  314. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/marker.png +0 -0
  315. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/oblique_rectangle.png +0 -0
  316. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/point_shape.png +0 -0
  317. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/polygon.png +0 -0
  318. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/polyline.png +0 -0
  319. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/rectangle.png +0 -0
  320. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/segment.png +0 -0
  321. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/xrange.png +0 -0
  322. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/shapes/yrange.png +0 -0
  323. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/snapshot.png +0 -0
  324. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/styles/dash.png +0 -0
  325. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/styles/dashdot.png +0 -0
  326. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/styles/dashdotdot.png +0 -0
  327. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/styles/dot.png +0 -0
  328. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/styles/solid.png +0 -0
  329. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/trash.png +0 -0
  330. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/trimage_lock.png +0 -0
  331. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/trimage_unlock.png +0 -0
  332. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/vcursor.png +0 -0
  333. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/vflip.png +0 -0
  334. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/xcursor.png +0 -0
  335. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/xmax.png +0 -0
  336. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/xmin.png +0 -0
  337. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/data/icons/zlog.svg +0 -0
  338. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/events.py +0 -0
  339. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/__init__.py +0 -0
  340. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/__init__.py +0 -0
  341. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/_generic_range_slider.py +0 -0
  342. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/_generic_slider.py +0 -0
  343. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/_labeled.py +0 -0
  344. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/_misc.py +0 -0
  345. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/_range_style.py +0 -0
  346. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/external/sliders/_sliders.py +0 -0
  347. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/interfaces/__init__.py +0 -0
  348. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/interfaces/items.py +0 -0
  349. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/interfaces/panel.py +0 -0
  350. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/interfaces/plotmanager.py +0 -0
  351. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/annotation.py +0 -0
  352. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/contour.py +0 -0
  353. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/curve/__init__.py +0 -0
  354. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/curve/base.py +0 -0
  355. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/grid.py +0 -0
  356. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/histogram.py +0 -0
  357. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/filter.py +0 -0
  358. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/image/masked.py +0 -0
  359. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/label.py +0 -0
  360. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/polygonmap.py +0 -0
  361. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/__init__.py +0 -0
  362. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/axis.py +0 -0
  363. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/base.py +0 -0
  364. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/ellipse.py +0 -0
  365. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/marker.py +0 -0
  366. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/point.py +0 -0
  367. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/polygon.py +0 -0
  368. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/range.py +0 -0
  369. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/rectangle.py +0 -0
  370. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/segment.py +0 -0
  371. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/items/shape/svg.py +0 -0
  372. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/lutrange.py +0 -0
  373. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/mathutils/__init__.py +0 -0
  374. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/mathutils/colormap.py +0 -0
  375. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/mathutils/scaler.py +0 -0
  376. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/__init__.py +0 -0
  377. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/base.py +0 -0
  378. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/contrastadjustment.py +0 -0
  379. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/csection/__init__.py +0 -0
  380. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/csection/csitem.py +0 -0
  381. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/csection/csplot.py +0 -0
  382. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/csection/cswidget.py +0 -0
  383. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/panels/itemlist.py +0 -0
  384. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/plot/__init__.py +0 -0
  385. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/plot/manager.py +0 -0
  386. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/plot/plotwidget.py +0 -0
  387. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/pyplot.py +0 -0
  388. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/__init__.py +0 -0
  389. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/curve.py +0 -0
  390. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/errorbar.py +0 -0
  391. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/histogram.py +0 -0
  392. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/image.py +0 -0
  393. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/label.py +0 -0
  394. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/styles/polygonmap.py +0 -0
  395. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/__init__.py +0 -0
  396. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/benchmarks/__init__.py +0 -0
  397. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_benchmarks.py +0 -0
  398. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_bigcurves.py +0 -0
  399. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_bigimages.py +0 -0
  400. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_large_number_of_annotations.py +0 -0
  401. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/benchmarks/test_loadtest.py +0 -0
  402. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/conftest.py +0 -0
  403. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data/brain.png +0 -0
  404. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data/brain_cylinder.png +0 -0
  405. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data/datetime.txt +0 -0
  406. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data/mr-brain.dcm +0 -0
  407. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data/svg_target.svg +0 -0
  408. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data/svg_tool.svg +0 -0
  409. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/data.py +0 -0
  410. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/__init__.py +0 -0
  411. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_auto_curve_image.py +0 -0
  412. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_autoscale_shapes.py +0 -0
  413. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_builder.py +0 -0
  414. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_colormap_editor.py +0 -0
  415. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_colormap_manager.py +0 -0
  416. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_computations.py +0 -0
  417. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_contrast.py +0 -0
  418. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_cursors.py +0 -0
  419. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_data_update_curve.py +0 -0
  420. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_data_update_image.py +0 -0
  421. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_dicom_image.py +0 -0
  422. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_fit.py +0 -0
  423. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_fit_locked_params.py +0 -0
  424. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_image_coords.py +0 -0
  425. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_image_filter.py +0 -0
  426. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_image_superp.py +0 -0
  427. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_loadsaveitems_hdf5.py +0 -0
  428. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_loadsaveitems_json.py +0 -0
  429. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_loadsaveitems_pickle.py +0 -0
  430. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_manager.py +0 -0
  431. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_no_auto_tools.py +0 -0
  432. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_plot_log.py +0 -0
  433. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_plot_time.py +0 -0
  434. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_plot_types.py +0 -0
  435. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_plot_yreverse.py +0 -0
  436. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/features/test_resize.py +0 -0
  437. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/__init__.py +0 -0
  438. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_annotated_range.py +0 -0
  439. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_annotations.py +0 -0
  440. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_curves.py +0 -0
  441. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_curves_highdpi.py +0 -0
  442. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_hist2d.py +0 -0
  443. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_histogram.py +0 -0
  444. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image.py +0 -0
  445. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image_aspect_ratio.py +0 -0
  446. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image_contour.py +0 -0
  447. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image_masked.py +0 -0
  448. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image_masked_xy.py +0 -0
  449. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image_rgb.py +0 -0
  450. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_image_xy.py +0 -0
  451. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_mandelbrot.py +0 -0
  452. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_pcolor.py +0 -0
  453. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_polygons.py +0 -0
  454. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_svgshapes.py +0 -0
  455. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_to_bins.py +0 -0
  456. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/items/test_transform.py +0 -0
  457. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/__init__.py +0 -0
  458. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_actiontool.py +0 -0
  459. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_cross_section.py +0 -0
  460. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_cross_section_line.py +0 -0
  461. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_cross_section_oblique.py +0 -0
  462. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_customize_shape_tool.py +0 -0
  463. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_cyclic_import.py +0 -0
  464. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_downsample_curve.py +0 -0
  465. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_edit_point.py +0 -0
  466. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_get_point.py +0 -0
  467. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_get_points.py +0 -0
  468. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_get_rectangle.py +0 -0
  469. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_get_rectangle_with_svg.py +0 -0
  470. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_get_segment.py +0 -0
  471. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_image_plot_tools.py +0 -0
  472. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_stats_tools.py +0 -0
  473. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/tools/test_zaxislog.py +0 -0
  474. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/__init__.py +0 -0
  475. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_annotation_tools.py +0 -0
  476. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_aspect_ratio_tool.py +0 -0
  477. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_baseplot.py +0 -0
  478. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_annotation.py +0 -0
  479. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_curve.py +0 -0
  480. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_image.py +0 -0
  481. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_builder_shape.py +0 -0
  482. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_contour.py +0 -0
  483. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_cursor_tools.py +0 -0
  484. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_curve_tools.py +0 -0
  485. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_datetime_axis.py +0 -0
  486. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_display_coords_tool.py +0 -0
  487. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_events.py +0 -0
  488. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_fontparam.py +0 -0
  489. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_line.py +0 -0
  490. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_line_cross_section_tool.py +0 -0
  491. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_manipulate_selection.py +0 -0
  492. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_mask_tool.py +0 -0
  493. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_masked_dtype_change.py +0 -0
  494. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_multiline_tools.py +0 -0
  495. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_oblique_cross_section_tool.py +0 -0
  496. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_plot_curve.py +0 -0
  497. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_plot_image.py +0 -0
  498. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_rect_zoom.py +0 -0
  499. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_seg_dist.py +0 -0
  500. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/test_tools_export.py +0 -0
  501. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/unit/utils.py +0 -0
  502. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/__init__.py +0 -0
  503. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_dotarraydemo.py +0 -0
  504. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_filtertest1.py +0 -0
  505. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_filtertest2.py +0 -0
  506. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_fliprotate.py +0 -0
  507. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_plot_timecurve.py +0 -0
  508. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_qtdesigner.py +0 -0
  509. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_qtdesigner.ui +0 -0
  510. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_resize_dialog.py +0 -0
  511. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_rotatecrop.py +0 -0
  512. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_simple_dialog.py +0 -0
  513. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_simple_window.py +0 -0
  514. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_syncplot.py +0 -0
  515. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tests/widgets/test_theme.py +0 -0
  516. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/__init__.py +0 -0
  517. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/annotation.py +0 -0
  518. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/axes.py +0 -0
  519. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/cross_section.py +0 -0
  520. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/cursor.py +0 -0
  521. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/item.py +0 -0
  522. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/label.py +0 -0
  523. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/plot.py +0 -0
  524. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/selection.py +0 -0
  525. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/tools/shape.py +0 -0
  526. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/__init__.py +0 -0
  527. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/about.py +0 -0
  528. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/basetransform.py +0 -0
  529. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/colormap/__init__.py +0 -0
  530. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/colormap/_slider.py +0 -0
  531. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/colormap/editor.py +0 -0
  532. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/colormap/widget.py +0 -0
  533. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/fit.py +0 -0
  534. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/fliprotate.py +0 -0
  535. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/imagefile.py +0 -0
  536. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/qtdesigner.py +0 -0
  537. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/resizedialog.py +0 -0
  538. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/rotatecrop.py +0 -0
  539. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy/widgets/selectdialog.py +0 -0
  540. {plotpy-2.8.4 → plotpy-2.10.0}/plotpy-tests.desktop +0 -0
  541. {plotpy-2.8.4 → plotpy-2.10.0}/qtdesigner/plotplugin.py +0 -0
  542. {plotpy-2.8.4 → plotpy-2.10.0}/setup.cfg +0 -0
  543. {plotpy-2.8.4 → plotpy-2.10.0}/setup.py +0 -0
  544. {plotpy-2.8.4 → plotpy-2.10.0}/src/arrays.hpp +0 -0
  545. {plotpy-2.8.4 → plotpy-2.10.0}/src/debug.hpp +0 -0
  546. {plotpy-2.8.4 → plotpy-2.10.0}/src/histogram2d.pyx +0 -0
  547. {plotpy-2.8.4 → plotpy-2.10.0}/src/mandelbrot.pyx +0 -0
  548. {plotpy-2.8.4 → plotpy-2.10.0}/src/pcolor.cpp +0 -0
  549. {plotpy-2.8.4 → plotpy-2.10.0}/src/points.hpp +0 -0
  550. {plotpy-2.8.4 → plotpy-2.10.0}/src/scaler.cpp +0 -0
  551. {plotpy-2.8.4 → plotpy-2.10.0}/src/scaler.hpp +0 -0
  552. {plotpy-2.8.4 → plotpy-2.10.0}/src/traits.hpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PlotPy
3
- Version: 2.8.4
3
+ Version: 2.10.0
4
4
  Summary: Curve and image plotting tools for Python/Qt applications
5
5
  Author-email: Codra <p.raybaut@codra.fr>
6
6
  License: BSD 3-Clause License
@@ -63,7 +63,7 @@ Requires-Python: <4,>=3.9
63
63
  Description-Content-Type: text/markdown
64
64
  License-File: LICENSE
65
65
  Requires-Dist: guidata>=3.14.1
66
- Requires-Dist: PythonQwt>=0.15
66
+ Requires-Dist: PythonQwt>=0.16
67
67
  Requires-Dist: numpy>=1.22
68
68
  Requires-Dist: SciPy>=1.7.3
69
69
  Requires-Dist: scikit-image>=0.19
@@ -114,6 +114,8 @@ It is part of the [PlotPyStack](https://github.com/PlotPyStack) project, aiming
114
114
  * [guidata](https://pypi.python.org/pypi/guidata) automatic GUI generation library
115
115
  * [PythonQwt](https://pypi.python.org/pypi/PythonQwt) plotting widgets library
116
116
  * [NumPy](https://pypi.python.org/pypi/NumPy) and [SciPy](https://pypi.python.org/pypi/SciPy) scientific computing libraries
117
+ * [scikit-image](https://pypi.python.org/pypi/scikit-image) image processing library
118
+ * [Pillow](https://pypi.python.org/pypi/Pillow) imaging library and [tifffile](https://pypi.python.org/pypi/tifffile) TIFF I/O library
117
119
 
118
120
  <img src="https://raw.githubusercontent.com/PlotPyStack/plotpy/master/doc/images/panorama.png">
119
121
 
@@ -121,7 +123,7 @@ See [documentation](https://plotpy.readthedocs.io/en/latest/) for more details o
121
123
 
122
124
  Copyrights and licensing:
123
125
 
124
- * Copyright © 2023 [CEA](https://www.cea.fr), [Codra](https://codra.net/), [Pierre Raybaut](https://github.com/PierreRaybaut).
126
+ * Copyright © 2023-2026 [CEA](https://www.cea.fr), [Codra](https://codra.net/), [Pierre Raybaut](https://github.com/PierreRaybaut).
125
127
  * Licensed under the terms of the BSD 3-Clause (see [LICENSE](https://github.com/PlotPyStack/PlotPy/blob/master/LICENSE)).
126
128
 
127
129
  ## Features
@@ -132,7 +134,7 @@ General plotting features:
132
134
 
133
135
  * Ready-to-use [plot widgets and dialog boxes](https://plotpy.readthedocs.io/en/latest/features/plot/index.html)
134
136
  * [pyplot](https://plotpy.readthedocs.io/en/latest/features/pyplot.html): interactive plotting widgets, equivalent to `matplotlib.pyplot`, at least for the implemented functions
135
- * Supported [plot items](https://plotpy.readthedocs.io/en/latest/features/items/index.html): curves, images, contours, histograms, labels, shapes, annotations, ...
137
+ * Supported [plot items](https://plotpy.readthedocs.io/en/latest/features/items/index.html): curves, images, contours, histograms, vector fields (quiver plots), labels, shapes, annotations, ...
136
138
 
137
139
  Interactive features (i.e. not only programmatic plotting but also with mouse/keyboard):
138
140
 
@@ -141,7 +143,7 @@ Interactive features (i.e. not only programmatic plotting but also with mouse/ke
141
143
  * Customizable aspect ratio for images
142
144
  * Tons of ready-to-use tools: plot canvas export to image file, image snapshot, interval selection, image rectangular filter, etc.
143
145
  * Curve fitting tool with automatic fit, manual fit with sliders, ...
144
- * Contrast adjustment panel for images: select the LUT by moving a range selection object on the image levels histogram, eliminate outliers, ...
146
+ * Contrast adjustment panel for images: select the LUT by moving a range selection object on the image levels histogram, eliminate outliers, invert colormaps, ...
145
147
  * X-axis and Y-axis cross-sections: support for multiple images, average cross-section tool on a rectangular area, ...
146
148
  * Apply any affine transform to displayed images in real-time (rotation, magnification, translation, horizontal/vertical flip, ...)
147
149
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PlotPy
3
- Version: 2.8.4
3
+ Version: 2.10.0
4
4
  Summary: Curve and image plotting tools for Python/Qt applications
5
5
  Author-email: Codra <p.raybaut@codra.fr>
6
6
  License: BSD 3-Clause License
@@ -63,7 +63,7 @@ Requires-Python: <4,>=3.9
63
63
  Description-Content-Type: text/markdown
64
64
  License-File: LICENSE
65
65
  Requires-Dist: guidata>=3.14.1
66
- Requires-Dist: PythonQwt>=0.15
66
+ Requires-Dist: PythonQwt>=0.16
67
67
  Requires-Dist: numpy>=1.22
68
68
  Requires-Dist: SciPy>=1.7.3
69
69
  Requires-Dist: scikit-image>=0.19
@@ -114,6 +114,8 @@ It is part of the [PlotPyStack](https://github.com/PlotPyStack) project, aiming
114
114
  * [guidata](https://pypi.python.org/pypi/guidata) automatic GUI generation library
115
115
  * [PythonQwt](https://pypi.python.org/pypi/PythonQwt) plotting widgets library
116
116
  * [NumPy](https://pypi.python.org/pypi/NumPy) and [SciPy](https://pypi.python.org/pypi/SciPy) scientific computing libraries
117
+ * [scikit-image](https://pypi.python.org/pypi/scikit-image) image processing library
118
+ * [Pillow](https://pypi.python.org/pypi/Pillow) imaging library and [tifffile](https://pypi.python.org/pypi/tifffile) TIFF I/O library
117
119
 
118
120
  <img src="https://raw.githubusercontent.com/PlotPyStack/plotpy/master/doc/images/panorama.png">
119
121
 
@@ -121,7 +123,7 @@ See [documentation](https://plotpy.readthedocs.io/en/latest/) for more details o
121
123
 
122
124
  Copyrights and licensing:
123
125
 
124
- * Copyright © 2023 [CEA](https://www.cea.fr), [Codra](https://codra.net/), [Pierre Raybaut](https://github.com/PierreRaybaut).
126
+ * Copyright © 2023-2026 [CEA](https://www.cea.fr), [Codra](https://codra.net/), [Pierre Raybaut](https://github.com/PierreRaybaut).
125
127
  * Licensed under the terms of the BSD 3-Clause (see [LICENSE](https://github.com/PlotPyStack/PlotPy/blob/master/LICENSE)).
126
128
 
127
129
  ## Features
@@ -132,7 +134,7 @@ General plotting features:
132
134
 
133
135
  * Ready-to-use [plot widgets and dialog boxes](https://plotpy.readthedocs.io/en/latest/features/plot/index.html)
134
136
  * [pyplot](https://plotpy.readthedocs.io/en/latest/features/pyplot.html): interactive plotting widgets, equivalent to `matplotlib.pyplot`, at least for the implemented functions
135
- * Supported [plot items](https://plotpy.readthedocs.io/en/latest/features/items/index.html): curves, images, contours, histograms, labels, shapes, annotations, ...
137
+ * Supported [plot items](https://plotpy.readthedocs.io/en/latest/features/items/index.html): curves, images, contours, histograms, vector fields (quiver plots), labels, shapes, annotations, ...
136
138
 
137
139
  Interactive features (i.e. not only programmatic plotting but also with mouse/keyboard):
138
140
 
@@ -141,7 +143,7 @@ Interactive features (i.e. not only programmatic plotting but also with mouse/ke
141
143
  * Customizable aspect ratio for images
142
144
  * Tons of ready-to-use tools: plot canvas export to image file, image snapshot, interval selection, image rectangular filter, etc.
143
145
  * Curve fitting tool with automatic fit, manual fit with sliders, ...
144
- * Contrast adjustment panel for images: select the LUT by moving a range selection object on the image levels histogram, eliminate outliers, ...
146
+ * Contrast adjustment panel for images: select the LUT by moving a range selection object on the image levels histogram, eliminate outliers, invert colormaps, ...
145
147
  * X-axis and Y-axis cross-sections: support for multiple images, average cross-section tool on a rectangular area, ...
146
148
  * Apply any affine transform to displayed images in real-time (rotation, magnification, translation, horizontal/vertical flip, ...)
147
149
 
@@ -116,6 +116,8 @@ doc/release_notes/release_2.05.md
116
116
  doc/release_notes/release_2.06.md
117
117
  doc/release_notes/release_2.07.md
118
118
  doc/release_notes/release_2.08.md
119
+ doc/release_notes/release_2.09.md
120
+ doc/release_notes/release_2.10.md
119
121
  plotpy/__init__.py
120
122
  plotpy/config.py
121
123
  plotpy/constants.py
@@ -249,6 +251,7 @@ plotpy/data/icons/items/image.png
249
251
  plotpy/data/icons/items/label.png
250
252
  plotpy/data/icons/items/legend.png
251
253
  plotpy/data/icons/items/polygonmap.png
254
+ plotpy/data/icons/items/quiver.png
252
255
  plotpy/data/icons/markers/cross.png
253
256
  plotpy/data/icons/markers/diamond.png
254
257
  plotpy/data/icons/markers/ellipse.png
@@ -325,6 +328,7 @@ plotpy/items/grid.py
325
328
  plotpy/items/histogram.py
326
329
  plotpy/items/label.py
327
330
  plotpy/items/polygonmap.py
331
+ plotpy/items/quiver.py
328
332
  plotpy/items/curve/__init__.py
329
333
  plotpy/items/curve/base.py
330
334
  plotpy/items/curve/errorbar.py
@@ -418,6 +422,7 @@ plotpy/tests/features/test_plot_time.py
418
422
  plotpy/tests/features/test_plot_types.py
419
423
  plotpy/tests/features/test_plot_yreverse.py
420
424
  plotpy/tests/features/test_pyplot.py
425
+ plotpy/tests/features/test_quiver.py
421
426
  plotpy/tests/features/test_resize.py
422
427
  plotpy/tests/items/__init__.py
423
428
  plotpy/tests/items/test_annotated_range.py
@@ -458,7 +463,9 @@ plotpy/tests/tools/test_stats_tools.py
458
463
  plotpy/tests/tools/test_zaxislog.py
459
464
  plotpy/tests/unit/__init__.py
460
465
  plotpy/tests/unit/test_annotation_tools.py
466
+ plotpy/tests/unit/test_arrayfuncs.py
461
467
  plotpy/tests/unit/test_aspect_ratio_tool.py
468
+ plotpy/tests/unit/test_autoscale_strategy.py
462
469
  plotpy/tests/unit/test_baseplot.py
463
470
  plotpy/tests/unit/test_builder_annotation.py
464
471
  plotpy/tests/unit/test_builder_curve.py
@@ -472,6 +479,7 @@ plotpy/tests/unit/test_display_coords_tool.py
472
479
  plotpy/tests/unit/test_events.py
473
480
  plotpy/tests/unit/test_fontparam.py
474
481
  plotpy/tests/unit/test_geometry.py
482
+ plotpy/tests/unit/test_image_log_set_data.py
475
483
  plotpy/tests/unit/test_io.py
476
484
  plotpy/tests/unit/test_line.py
477
485
  plotpy/tests/unit/test_line_cross_section_tool.py
@@ -484,6 +492,7 @@ plotpy/tests/unit/test_plot_curve.py
484
492
  plotpy/tests/unit/test_plot_image.py
485
493
  plotpy/tests/unit/test_rect_zoom.py
486
494
  plotpy/tests/unit/test_seg_dist.py
495
+ plotpy/tests/unit/test_snapshot_original_size.py
487
496
  plotpy/tests/unit/test_styles.py
488
497
  plotpy/tests/unit/test_tools_export.py
489
498
  plotpy/tests/unit/utils.py
@@ -1,5 +1,5 @@
1
1
  guidata>=3.14.1
2
- PythonQwt>=0.15
2
+ PythonQwt>=0.16
3
3
  numpy>=1.22
4
4
  SciPy>=1.7.3
5
5
  scikit-image>=0.19
@@ -20,6 +20,8 @@ It is part of the [PlotPyStack](https://github.com/PlotPyStack) project, aiming
20
20
  * [guidata](https://pypi.python.org/pypi/guidata) automatic GUI generation library
21
21
  * [PythonQwt](https://pypi.python.org/pypi/PythonQwt) plotting widgets library
22
22
  * [NumPy](https://pypi.python.org/pypi/NumPy) and [SciPy](https://pypi.python.org/pypi/SciPy) scientific computing libraries
23
+ * [scikit-image](https://pypi.python.org/pypi/scikit-image) image processing library
24
+ * [Pillow](https://pypi.python.org/pypi/Pillow) imaging library and [tifffile](https://pypi.python.org/pypi/tifffile) TIFF I/O library
23
25
 
24
26
  <img src="https://raw.githubusercontent.com/PlotPyStack/plotpy/master/doc/images/panorama.png">
25
27
 
@@ -27,7 +29,7 @@ See [documentation](https://plotpy.readthedocs.io/en/latest/) for more details o
27
29
 
28
30
  Copyrights and licensing:
29
31
 
30
- * Copyright © 2023 [CEA](https://www.cea.fr), [Codra](https://codra.net/), [Pierre Raybaut](https://github.com/PierreRaybaut).
32
+ * Copyright © 2023-2026 [CEA](https://www.cea.fr), [Codra](https://codra.net/), [Pierre Raybaut](https://github.com/PierreRaybaut).
31
33
  * Licensed under the terms of the BSD 3-Clause (see [LICENSE](https://github.com/PlotPyStack/PlotPy/blob/master/LICENSE)).
32
34
 
33
35
  ## Features
@@ -38,7 +40,7 @@ General plotting features:
38
40
 
39
41
  * Ready-to-use [plot widgets and dialog boxes](https://plotpy.readthedocs.io/en/latest/features/plot/index.html)
40
42
  * [pyplot](https://plotpy.readthedocs.io/en/latest/features/pyplot.html): interactive plotting widgets, equivalent to `matplotlib.pyplot`, at least for the implemented functions
41
- * Supported [plot items](https://plotpy.readthedocs.io/en/latest/features/items/index.html): curves, images, contours, histograms, labels, shapes, annotations, ...
43
+ * Supported [plot items](https://plotpy.readthedocs.io/en/latest/features/items/index.html): curves, images, contours, histograms, vector fields (quiver plots), labels, shapes, annotations, ...
42
44
 
43
45
  Interactive features (i.e. not only programmatic plotting but also with mouse/keyboard):
44
46
 
@@ -47,7 +49,7 @@ Interactive features (i.e. not only programmatic plotting but also with mouse/ke
47
49
  * Customizable aspect ratio for images
48
50
  * Tons of ready-to-use tools: plot canvas export to image file, image snapshot, interval selection, image rectangular filter, etc.
49
51
  * Curve fitting tool with automatic fit, manual fit with sliders, ...
50
- * Contrast adjustment panel for images: select the LUT by moving a range selection object on the image levels histogram, eliminate outliers, ...
52
+ * Contrast adjustment panel for images: select the LUT by moving a range selection object on the image levels histogram, eliminate outliers, invert colormaps, ...
51
53
  * X-axis and Y-axis cross-sections: support for multiple images, average cross-section tool on a rectangular area, ...
52
54
  * Apply any affine transform to displayed images in real-time (rotation, magnification, translation, horizontal/vertical flip, ...)
53
55
 
@@ -41,6 +41,13 @@ The following image items are available:
41
41
  * :py:func:`.get_plot_qrect`
42
42
  * :py:func:`.get_image_from_plot`
43
43
 
44
+ Flow fields
45
+ ^^^^^^^^^^^
46
+
47
+ The following flow field items are available:
48
+
49
+ * :py:class:`.QuiverItem`: a flow field item with arrows
50
+
44
51
  Grid
45
52
  ^^^^
46
53
 
@@ -71,6 +71,12 @@ Histograms
71
71
  .. autoclass:: plotpy.items.Histogram2DItem
72
72
  :members:
73
73
 
74
+ Flow fields
75
+ ^^^^^^^^^^^
76
+
77
+ .. autoclass:: plotpy.items.QuiverItem
78
+ :members:
79
+
74
80
  Grid
75
81
  ^^^^
76
82
 
@@ -14,6 +14,9 @@ Other changes:
14
14
 
15
15
  * Updated `guidata` dependency to V3.10.0
16
16
  * Using new `guidata` translation utility based on `babel`
17
+ * Development environment:
18
+ * Historically, the default Python interpreter for development was handled by the `PPSTACK_PYTHONEXE` environment variable, for example to run VS Code tasks with the correct Python interpreter.
19
+ * This approach has been replaced by relying on the virtual environment management as provided by VS Code itself, which is more standard and compatible with various tools.
17
20
 
18
21
  ## PlotPy Version 2.7.4 (2025-04-26) ##
19
22
 
@@ -0,0 +1,58 @@
1
+ # Version 2.9 #
2
+
3
+ ## PlotPy Version 2.9.0 ##
4
+
5
+ 💥 New features:
6
+
7
+ * Added `QuiverItem` for displaying 2D vector fields (quiver plots), similar to
8
+ Matplotlib's `quiver`. This closes
9
+ [Issue #54](https://github.com/PlotPyStack/PlotPy/issues/54):
10
+ * New `QuiverItem` plot item class supporting X, Y, U, V arrays (1D or 2D)
11
+ * Auto-meshgrid expansion when X, Y are 1D and U, V are 2D
12
+ * Configurable arrow scale, head size, and color
13
+ * New `make.quiver()` builder method for easy item creation
14
+ * New `quiver()` function in the interactive plotting interface (`plotpy.pyplot`)
15
+ * Integrated with plot autoscale (initial zoom and middle-click reset)
16
+ * Item icon displayed in the item list widget
17
+ * Added "Invert colormap" checkbox directly in the Colormap Manager dialog. This
18
+ closes [Issue #53](https://github.com/PlotPyStack/PlotPy/issues/53):
19
+ * Reflects the current inversion state when the dialog is opened
20
+ * Allows toggling inversion from the colormap selection widget
21
+ * Updates the colormap preview in real-time when toggled
22
+ * Inversion is treated as a display parameter, independent of the colormap
23
+ definition (toggling does not mark the colormap as having unsaved changes)
24
+
25
+ 🛠️ Bug fixes:
26
+
27
+ * Fixed marker style parameters being overwritten when updating selected markers:
28
+ * `MarkerParam.update_param` now correctly reads back the selected or unselected
29
+ visual state into the matching parameter set, instead of overwriting the base
30
+ (normal) style with the selected style
31
+ * This preserves distinct normal and selected appearance for markers
32
+ * Fixed error-bar curve cursor snapping: clicking near an error-bar bound on an
33
+ `ErrorBarCurveItem` now correctly returns the closest bar end coordinate.
34
+ Previously a typo (`abs(y - y)` / `abs(x - x)` instead of `abs(y - yi)` /
35
+ `abs(x - xi)`) made the snap-to-bound branches dead code, so the closest
36
+ coordinate was always the central curve point regardless of cursor position
37
+ * Fixed image export via `Figure.print_` (`plotpy.pyplot`) leaking the underlying
38
+ `QPainter`: the painter is now always released, even when an axis fails to
39
+ render. This avoids "QPainter::begin: A paint device can only be painted by
40
+ one painter at a time" warnings, GDI/GL resource leaks, and truncated output
41
+ files on subsequent paints
42
+ * Fixed `vector_projection` raising a division-by-zero warning and returning NaN
43
+ coordinates when the two reference points A and B coincided. The function now
44
+ detects the degenerate zero-length AB vector and returns point B
45
+ * Fixed `scale_data_to_dtype` (`plotpy.io`) producing NaN values when the input
46
+ array was constant (`dmax == dmin`). The function now returns a finite
47
+ constant array set to the target dtype's minimum value instead of dividing by
48
+ zero
49
+ * Fixed `get_nan_min` / `get_nan_max` (`plotpy.mathutils.arrayfuncs`) raising
50
+ `ValueError` on empty arrays and emitting `RuntimeWarning` on all-NaN inputs.
51
+ Both helpers now return NaN for empty or fully-NaN arrays without warnings
52
+
53
+ 🔧 Other changes:
54
+
55
+ * CI: gate PyPI deployment on test suite passing
56
+ * Development environment: improved `scripts/run_with_env.py` to support multiple
57
+ Python environment contexts (WinPython, venv, etc.) with legacy support for the
58
+ `WINPYDIRBASE` environment variable
@@ -0,0 +1,34 @@
1
+ # Version 2.10 #
2
+
3
+ ## PlotPy Version 2.10.0 ##
4
+
5
+ ✨ New features:
6
+
7
+ * **Per-axis autoscale strategy**: Added configurable autoscale behavior for each axis via the axis parameters dialog. Three strategies are available: *Auto* (default — compute bounds from items), *Fixed range* (apply user-defined Min/Max values) and *Disabled* (leave the axis untouched on autoscale). New API: `BasePlot.set_axis_autoscale_strategy()` / `BasePlot.get_axis_autoscale_strategy()` (closes [Issue #63](https://github.com/PlotPyStack/PlotPy/issues/63), partial)
8
+ * **Symbol border width**: Added an `edgewidth` parameter to `SymbolParam` for customizable marker border thickness — previously the border was always 1 pixel wide
9
+
10
+ 🛠️ Bug fixes:
11
+
12
+ * **Rectangular snapshot tool** — Fixed the "Original size" computation (closes [Issue #57](https://github.com/PlotPyStack/PlotPy/issues/57)):
13
+ * The preview no longer displays negative dimensions when the X or Y axis is
14
+ reversed
15
+ * The "Original size" is now computed from pixel coordinates instead of axis
16
+ units, so it is correct for `XYImageItem` (and any item with non-uniform
17
+ axis scaling) regardless of axis orientation
18
+ * The `ValueError` raised by the resize dialog when the selection produced
19
+ negative dimensions on a reversed axis is gone
20
+ * Selecting a region larger than the plotted image now reports the same
21
+ native pixel resolution for both `ImageItem` and `XYImageItem`
22
+ (previously `XYImageItem` reported ``shape - 1`` while `ImageItem`
23
+ reported the full oversized resolution): exporting at "Original size"
24
+ now consistently preserves the source pixel density and avoids
25
+ upsampling, regardless of the item type
26
+ * **Snapshot tool cursor** — Fixed the mouse cursor remaining stuck as a cross (`+`) outside the plot canvas (axes, toolbar) after using the snapshot tool. The modal dialogs are now opened after Qt has released the implicit pointer grab, so the cursor is correctly restored (closes [Issue #58](https://github.com/PlotPyStack/PlotPy/issues/58))
27
+ * **Z-axis log tool** — Fixed the `ZAxisLogTool` being always disabled for non-`ImageItem` image types (`XYImageItem`, `MaskedImageItem`, `MaskedXYImageItem`, `TrImageItem`, `RGBImageItem`). The Z-axis log API (`get_zaxis_log_state` / `set_zaxis_log_state`) was moved from `ImageItem` up to `BaseImageItem` so all image item types support it. This notably fixes the tool being permanently greyed out in DataLab's image panel (closes [Issue #59](https://github.com/PlotPyStack/PlotPy/issues/59))
28
+ * **Z-axis log data update** — Fixed image data not being recomputed when calling `set_data()` while Z-axis log scale is active — the log-transformed data is now refreshed and the LUT range preserved in log mode
29
+ * **`YRangeCursorTool`** — Fixed incorrect inequality display and negative ∆y when the Y-range cursors are inverted (dragging the top cursor below the bottom one). Values are now sorted and ∆y is always positive (closes [Issue #55](https://github.com/PlotPyStack/PlotPy/issues/55))
30
+ * **`CurveStatsTool`** — Replaced `min`/`max`/`mean`/`std`/`sum` with their NaN-safe equivalents (`nanmin`, `nanmax`, `nanmean`, `nanstd`, `nansum`) so that signal statistics are computed correctly when the data contains NaN values
31
+
32
+ ⚙️ Dependencies:
33
+
34
+ * Bumped minimum PythonQwt version from 0.15 to **0.16** to benefit from the Qt6 performance optimizations (closes [Issue #22](https://github.com/PlotPyStack/PlotPy/issues/22) — see [PythonQwt#93](https://github.com/PlotPyStack/PythonQwt/issues/93) for the full optimization log)
@@ -11,10 +11,10 @@ The `PlotPy` package requires the following Python modules:
11
11
  - >=3.9, <4
12
12
  - Python programming language
13
13
  * - guidata
14
- - >= 3.13
14
+ - >= 3.14.1
15
15
  - Automatic GUI generation for easy dataset editing and display
16
16
  * - PythonQwt
17
- - >= 0.15
17
+ - >= 0.16
18
18
  - Qt plotting widgets for Python
19
19
  * - numpy
20
20
  - >= 1.22
@@ -75,6 +75,12 @@ Optional modules for development:
75
75
  * - pre-commit
76
76
  -
77
77
  - A framework for managing and maintaining multi-language pre-commit hooks.
78
+ * - setuptools
79
+ -
80
+ - Most extensible Python build backend with support for C/C++ extension modules
81
+ * - wheel
82
+ -
83
+ - Command line tool for manipulating wheel files
78
84
 
79
85
  Optional modules for building the documentation:
80
86
 
@@ -20,7 +20,7 @@ External resources:
20
20
  .. _GitHub: https://github.com/PierreRaybaut/plotpy
21
21
  """
22
22
 
23
- __version__ = "2.8.4"
23
+ __version__ = "2.10.0"
24
24
  __VERSION__ = tuple([int(number) for number in __version__.split(".")])
25
25
 
26
26
  # --- Important note: DATAPATH and LOCALEPATH are used by guidata.configtools
@@ -6,11 +6,11 @@
6
6
  # pylint: disable=C0103
7
7
 
8
8
  """
9
- Curve/cursor/marker Item builder
10
- --------------------------------
9
+ Curve/cursor/marker/... Item builder
10
+ ------------------------------------
11
11
 
12
12
  This module provides a set of factory functions to simplify the creation of
13
- curve, cursor and marker items.
13
+ curve, cursor, marker, histogram and flow field items.
14
14
  """
15
15
 
16
16
  # Note: when adding method to builder classes, please do not forget to update the
@@ -32,6 +32,7 @@ from plotpy.items import (
32
32
  ErrorBarCurveItem,
33
33
  HistogramItem,
34
34
  Marker,
35
+ QuiverItem,
35
36
  XRangeSelection,
36
37
  YRangeSelection,
37
38
  )
@@ -1023,3 +1024,70 @@ class CurveMarkerCursorBuilder:
1023
1024
  marker.set_movable(False)
1024
1025
  marker.set_resizable(False)
1025
1026
  return marker
1027
+
1028
+ def quiver(
1029
+ self,
1030
+ x: numpy.ndarray,
1031
+ y: numpy.ndarray,
1032
+ u: numpy.ndarray,
1033
+ v: numpy.ndarray,
1034
+ title: str = "",
1035
+ color: str | None = None,
1036
+ arrow_scale: float = 30.0,
1037
+ arrow_head_size: float = 6.0,
1038
+ headwidth: float = 0.7,
1039
+ xaxis: str = "bottom",
1040
+ yaxis: str = "left",
1041
+ ) -> QuiverItem:
1042
+ """Make a quiver (vector field) `plot item`
1043
+
1044
+ Displays arrows at grid positions (x, y) with direction and magnitude
1045
+ defined by (u, v) components, similar to Matplotlib's ``quiver``.
1046
+
1047
+ Args:
1048
+ x: 1D or 2D array of arrow X positions
1049
+ y: 1D or 2D array of arrow Y positions
1050
+ u: 1D or 2D array of arrow X components
1051
+ v: 1D or 2D array of arrow Y components
1052
+ title: plot item title. Default is ''
1053
+ color: arrow color name. Default is None (black)
1054
+ arrow_scale: scale factor for arrow length in pixels.
1055
+ Default is 30.0. Larger values produce longer arrows.
1056
+ arrow_head_size: size of arrow heads in pixels.
1057
+ Default is 6.0
1058
+ headwidth: arrow head width as multiple of head size.
1059
+ Default is 0.7
1060
+ xaxis: x axis name. Default is 'bottom'
1061
+ yaxis: y axis name. Default is 'left'
1062
+
1063
+ Returns:
1064
+ :py:class:`.QuiverItem` object
1065
+
1066
+ Example::
1067
+
1068
+ import numpy as np
1069
+ x = np.linspace(-2, 2, 10)
1070
+ y = np.linspace(-2, 2, 10)
1071
+ X, Y = np.meshgrid(x, y)
1072
+ U, V = -Y, X # Rotational field
1073
+ quiver(X, Y, U, V, title="Rotation", color="blue")
1074
+ """
1075
+ if color is None:
1076
+ color = "black"
1077
+ item = QuiverItem(
1078
+ x,
1079
+ y,
1080
+ u,
1081
+ v,
1082
+ color=color,
1083
+ arrow_scale=arrow_scale,
1084
+ arrow_head_size=arrow_head_size,
1085
+ headwidth=headwidth,
1086
+ )
1087
+ if title:
1088
+ item.setTitle(title)
1089
+ else:
1090
+ item.setTitle(_("Vector field"))
1091
+ item.setXAxis(BasePlot.AXIS_NAMES[xaxis])
1092
+ item.setYAxis(BasePlot.AXIS_NAMES[yaxis])
1093
+ return item
@@ -64,6 +64,12 @@ def scale_data_to_dtype(data: np.ndarray, dtype: np.dtype) -> np.ndarray:
64
64
  info = np.iinfo(dtype)
65
65
  dmin = data.min()
66
66
  dmax = data.max()
67
+ if dmax == dmin:
68
+ # Constant data: avoid 0/0 division (which would yield NaN). Map every
69
+ # sample to the dtype range minimum so downstream image rendering keeps
70
+ # working instead of seeing NaNs.
71
+ data = np.full_like(data, float(info.min))
72
+ return np.array(data, dtype)
67
73
  data -= dmin
68
74
  data = data * float(info.max - info.min) / (dmax - dmin)
69
75
  data = data + float(info.min)
@@ -594,6 +600,7 @@ register_serializable_items(
594
600
  "plotpy.items",
595
601
  [
596
602
  "CurveItem",
603
+ "QuiverItem",
597
604
  "PolygonMapItem",
598
605
  "ErrorBarCurveItem",
599
606
  "RawImageItem",
@@ -33,6 +33,7 @@ from .image import (
33
33
  XYImageFilterItem,
34
34
  XYImageItem,
35
35
  assemble_imageitems,
36
+ compute_image_items_original_size,
36
37
  compute_trimageitems_original_size,
37
38
  get_image_from_plot,
38
39
  get_image_from_qrect,
@@ -55,6 +56,7 @@ from .label import (
55
56
  SelectedLegendBoxItem,
56
57
  )
57
58
  from .polygonmap import PolygonMapItem
59
+ from .quiver import QuiverItem
58
60
  from .shape import (
59
61
  AbstractShape,
60
62
  Axes,
@@ -221,13 +221,13 @@ class ErrorBarCurveItem(CurveItem):
221
221
  xi = self.dsamp(self._x)[i]
222
222
  yi = self.dsamp(self._y)[i]
223
223
  xmin, xmax, ymin, ymax = self.get_minmax_arrays()
224
- if abs(y - y) > abs(y - ymin[i]):
224
+ if abs(y - yi) > abs(y - ymin[i]):
225
225
  yi = ymin[i]
226
- elif abs(y - y) > abs(y - ymax[i]):
226
+ elif abs(y - yi) > abs(y - ymax[i]):
227
227
  yi = ymax[i]
228
- if abs(x - x) > abs(x - xmin[i]):
228
+ if abs(x - xi) > abs(x - xmin[i]):
229
229
  xi = xmin[i]
230
- elif abs(x - x) > abs(x - xmax[i]):
230
+ elif abs(x - xi) > abs(x - xmax[i]):
231
231
  xi = xmax[i]
232
232
  return xi, yi
233
233
 
@@ -11,6 +11,7 @@ from .misc import (
11
11
  Histogram2DItem,
12
12
  QuadGridItem,
13
13
  assemble_imageitems,
14
+ compute_image_items_original_size,
14
15
  compute_trimageitems_original_size,
15
16
  get_image_from_plot,
16
17
  get_image_from_qrect,
@@ -132,6 +132,12 @@ class BaseImageItem(QwtPlotItem):
132
132
  self._filename = None # The file this image comes from
133
133
 
134
134
  self.histogram_cache = None
135
+
136
+ # Z-axis logarithmic scale support
137
+ self._log_data: np.ndarray | None = None
138
+ self._lin_lut_range: tuple[float, float] | None = None
139
+ self._is_zaxis_log = False
140
+
135
141
  if data is not None:
136
142
  self.set_data(data)
137
143
  self.param.update_item(self)
@@ -334,6 +340,15 @@ class BaseImageItem(QwtPlotItem):
334
340
  """
335
341
  return self.get_x_values(i0, i1)
336
342
 
343
+ def _recompute_log_data(self) -> None:
344
+ """Refresh the cached log10 data from the current ``self.data``.
345
+
346
+ Used both when toggling the Z-axis log scale on and when the underlying
347
+ data is replaced (e.g. via :meth:`set_data`) while the log scale is
348
+ already active.
349
+ """
350
+ self._log_data = np.array(np.log10(self.data.clip(1)), dtype=np.float64)
351
+
337
352
  def set_data(
338
353
  self, data: np.ndarray, lut_range: tuple[float, float] | None = None
339
354
  ) -> None:
@@ -347,9 +362,15 @@ class BaseImageItem(QwtPlotItem):
347
362
  self.histogram_cache = None
348
363
  self.update_bounds()
349
364
  self.update_border()
365
+ # Refresh the cached log10 data when log scale is active, otherwise the
366
+ # display would keep using the previous (now stale) log data.
367
+ if self.get_zaxis_log_state():
368
+ self._recompute_log_data()
350
369
  if not self.param.keep_lut_range:
351
370
  if lut_range is not None:
352
371
  _min, _max = lut_range
372
+ elif self.get_zaxis_log_state():
373
+ _min, _max = get_nan_range(self._log_data)
353
374
  else:
354
375
  _min, _max = get_nan_range(data)
355
376
  self.set_lut_range((_min, _max))
@@ -552,6 +573,34 @@ class BaseImageItem(QwtPlotItem):
552
573
  """
553
574
  return get_nan_range(self.data)
554
575
 
576
+ # ---- Z-axis logarithmic scale --------------------------------------------
577
+ def get_zaxis_log_state(self) -> bool:
578
+ """Return True if Z-axis is in logarithmic scale"""
579
+ return self._is_zaxis_log
580
+
581
+ def set_zaxis_log_state(self, state: bool) -> None:
582
+ """Set Z-axis logarithmic scale state
583
+
584
+ Args:
585
+ state: True to enable logarithmic scale, False otherwise
586
+ """
587
+ self._is_zaxis_log = state
588
+ plot = self.plot()
589
+ if state:
590
+ self._lin_lut_range = self.get_lut_range()
591
+ if self._log_data is None:
592
+ self._recompute_log_data()
593
+ self.set_lut_range(get_nan_range(self._log_data))
594
+ dtype = self._log_data.dtype
595
+ else:
596
+ self._log_data = None
597
+ self.set_lut_range(self._lin_lut_range)
598
+ dtype = self.data.dtype
599
+ if self.interpolate[0] == INTERP_AA:
600
+ self.interpolate = (INTERP_AA, self.interpolate[1].astype(dtype))
601
+ if plot is not None:
602
+ plot.update_colormap_axis(self)
603
+
555
604
  def get_lut_range_max(self) -> tuple[float, float]:
556
605
  """Get maximum range for this dataset
557
606