PlotPy 2.8.3__tar.gz → 2.9.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 (549) hide show
  1. {plotpy-2.8.3 → plotpy-2.9.0}/PKG-INFO +12 -7
  2. {plotpy-2.8.3 → plotpy-2.9.0}/PlotPy.egg-info/PKG-INFO +12 -7
  3. {plotpy-2.8.3 → plotpy-2.9.0}/PlotPy.egg-info/SOURCES.txt +7 -0
  4. {plotpy-2.8.3 → plotpy-2.9.0}/PlotPy.egg-info/requires.txt +3 -1
  5. {plotpy-2.8.3 → plotpy-2.9.0}/README.md +7 -5
  6. plotpy-2.9.0/doc/dev/gitworkflow.rst +311 -0
  7. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/index.rst +1 -0
  8. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/colormapmanager.rst +1 -0
  9. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/items/overview.rst +7 -0
  10. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/items/reference.rst +6 -0
  11. plotpy-2.9.0/doc/features/mathutils/colormaps.rst +2 -0
  12. {plotpy-2.8.3 → plotpy-2.9.0}/doc/intro/examples.rst +2 -2
  13. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.07.md +3 -0
  14. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.08.md +27 -1
  15. plotpy-2.9.0/doc/release_notes/release_2.09.md +58 -0
  16. {plotpy-2.8.3 → plotpy-2.9.0}/doc/requirements.rst +16 -16
  17. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/__init__.py +1 -1
  18. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/curvemarker.py +74 -6
  19. plotpy-2.9.0/plotpy/data/icons/items/quiver.png +0 -0
  20. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/events.py +6 -6
  21. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/io.py +7 -0
  22. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/__init__.py +1 -0
  23. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/curve/errorbar.py +4 -4
  24. plotpy-2.9.0/plotpy/items/quiver.py +513 -0
  25. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
  26. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/mathutils/arrayfuncs.py +16 -4
  27. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/mathutils/geometry.py +6 -1
  28. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/plot/base.py +10 -10
  29. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/plot/interactive.py +32 -9
  30. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/plot/plotwidget.py +28 -10
  31. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/shape.py +14 -3
  32. plotpy-2.9.0/plotpy/tests/benchmarks/test_bigcurves.py +89 -0
  33. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/benchmarks/test_large_number_of_annotations.py +2 -0
  34. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_pyplot.py +7 -0
  35. plotpy-2.9.0/plotpy/tests/features/test_quiver.py +75 -0
  36. plotpy-2.9.0/plotpy/tests/unit/test_arrayfuncs.py +49 -0
  37. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_geometry.py +14 -0
  38. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_io.py +30 -1
  39. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_multiline_tools.py +4 -1
  40. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_styles.py +24 -0
  41. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/vistools.py +2 -2
  42. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_plot_timecurve.py +1 -1
  43. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/base.py +13 -7
  44. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/curve.py +1 -1
  45. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/image.py +12 -5
  46. plotpy-2.9.0/plotpy/widgets/colormap/__init__.py +15 -0
  47. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/colormap/manager.py +47 -2
  48. {plotpy-2.8.3 → plotpy-2.9.0}/pyproject.toml +8 -6
  49. {plotpy-2.8.3 → plotpy-2.9.0}/requirements.txt +2 -1
  50. {plotpy-2.8.3 → plotpy-2.9.0}/src/histogram2d.c +275 -268
  51. {plotpy-2.8.3 → plotpy-2.9.0}/src/mandelbrot.c +275 -268
  52. plotpy-2.8.3/doc/features/mathutils/colormaps.rst +0 -1
  53. plotpy-2.8.3/plotpy/widgets/colormap/__init__.py +0 -16
  54. {plotpy-2.8.3 → plotpy-2.9.0}/LICENSE +0 -0
  55. {plotpy-2.8.3 → plotpy-2.9.0}/MANIFEST.in +0 -0
  56. {plotpy-2.8.3 → plotpy-2.9.0}/PlotPy.egg-info/dependency_links.txt +0 -0
  57. {plotpy-2.8.3 → plotpy-2.9.0}/PlotPy.egg-info/entry_points.txt +0 -0
  58. {plotpy-2.8.3 → plotpy-2.9.0}/PlotPy.egg-info/top_level.txt +0 -0
  59. {plotpy-2.8.3 → plotpy-2.9.0}/colormaps/README.md +0 -0
  60. {plotpy-2.8.3 → plotpy-2.9.0}/colormaps/_cm.py +0 -0
  61. {plotpy-2.8.3 → plotpy-2.9.0}/colormaps/colormap.py +0 -0
  62. {plotpy-2.8.3 → plotpy-2.9.0}/colormaps/matplotlib_cmaps.py +0 -0
  63. {plotpy-2.8.3 → plotpy-2.9.0}/doc/_static/favicon.ico +0 -0
  64. {plotpy-2.8.3 → plotpy-2.9.0}/doc/conf.py +0 -0
  65. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/build.rst +0 -0
  66. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/contribute.rst +0 -0
  67. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/guiqwt_to_plotpy.csv +0 -0
  68. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/guiqwt_to_plotpy.rst +0 -0
  69. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/platforms.rst +0 -0
  70. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/v1_to_guidata_v3.csv +0 -0
  71. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/v1_to_v2.csv +0 -0
  72. {plotpy-2.8.3 → plotpy-2.9.0}/doc/dev/v1_to_v2.rst +0 -0
  73. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/events.rst +0 -0
  74. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/fit.rst +0 -0
  75. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/fliprotate.rst +0 -0
  76. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/imagefile.rst +0 -0
  77. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/index.rst +0 -0
  78. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/io.rst +0 -0
  79. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/items/builder.rst +0 -0
  80. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/items/examples.rst +0 -0
  81. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/items/index.rst +0 -0
  82. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/mathutils/geometry.rst +0 -0
  83. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/mathutils/index.rst +0 -0
  84. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/mathutils/scaler.rst +0 -0
  85. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/panels/index.rst +0 -0
  86. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/panels/overview.rst +0 -0
  87. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/panels/reference.rst +0 -0
  88. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/plot/examples.rst +0 -0
  89. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/plot/index.rst +0 -0
  90. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/plot/overview.rst +0 -0
  91. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/plot/reference.rst +0 -0
  92. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/pyplot.rst +0 -0
  93. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/resizedialog.rst +0 -0
  94. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/rotatecrop.rst +0 -0
  95. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/selectdialog.rst +0 -0
  96. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/signals.rst +0 -0
  97. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/styles/index.rst +0 -0
  98. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/styles/overview.rst +0 -0
  99. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/styles/reference.rst +0 -0
  100. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/tools/examples.rst +0 -0
  101. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/tools/index.rst +0 -0
  102. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/tools/overview.rst +0 -0
  103. {plotpy-2.8.3 → plotpy-2.9.0}/doc/features/tools/reference.rst +0 -0
  104. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/my_plot_manager.png +0 -0
  105. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/my_plot_manager.svg +0 -0
  106. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/panorama-vertical.png +0 -0
  107. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/panorama-vertical.svg +0 -0
  108. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/panorama.png +0 -0
  109. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/panorama.svg +0 -0
  110. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/plot_widgets.png +0 -0
  111. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/plot_widgets.svg +0 -0
  112. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/plotpy-banner.png +0 -0
  113. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/plotpy-vertical.png +0 -0
  114. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/__init__.png +0 -0
  115. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/computations.png +0 -0
  116. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/contrast.png +0 -0
  117. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/cross_section.png +0 -0
  118. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/cross_section2.png +0 -0
  119. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/dotarraydemo.png +0 -0
  120. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/filtertest1.png +0 -0
  121. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/filtertest2.png +0 -0
  122. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/fit.png +0 -0
  123. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/get_point.png +0 -0
  124. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/hist2d.png +0 -0
  125. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/image_plot_tools.png +0 -0
  126. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/imagefilter.png +0 -0
  127. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/imagesuperp.png +0 -0
  128. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/imagexy.png +0 -0
  129. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/manager.png +0 -0
  130. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/mandelbrot.png +0 -0
  131. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/pcolor.png +0 -0
  132. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/plot.png +0 -0
  133. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/simple_dialog.png +0 -0
  134. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/simple_window.png +0 -0
  135. {plotpy-2.8.3 → plotpy-2.9.0}/doc/images/screenshots/transform.png +0 -0
  136. {plotpy-2.8.3 → plotpy-2.9.0}/doc/index.rst +0 -0
  137. {plotpy-2.8.3 → plotpy-2.9.0}/doc/intro/index.rst +0 -0
  138. {plotpy-2.8.3 → plotpy-2.9.0}/doc/intro/installation.rst +0 -0
  139. {plotpy-2.8.3 → plotpy-2.9.0}/doc/intro/licenses.rst +0 -0
  140. {plotpy-2.8.3 → plotpy-2.9.0}/doc/intro/motivation.rst +0 -0
  141. {plotpy-2.8.3 → plotpy-2.9.0}/doc/intro/overview.rst +0 -0
  142. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/index.rst +0 -0
  143. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.00.md +0 -0
  144. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.01.md +0 -0
  145. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.02.md +0 -0
  146. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.03.md +0 -0
  147. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.04.md +0 -0
  148. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.05.md +0 -0
  149. {plotpy-2.8.3 → plotpy-2.9.0}/doc/release_notes/release_2.06.md +0 -0
  150. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/__init__.py +0 -0
  151. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/annotation.py +0 -0
  152. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/image.py +0 -0
  153. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/label.py +0 -0
  154. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/plot.py +0 -0
  155. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/builder/shape.py +0 -0
  156. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/config.py +0 -0
  157. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/constants.py +0 -0
  158. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/coords.py +0 -0
  159. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/colormaps_default.json +0 -0
  160. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/apply.png +0 -0
  161. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/arredit.png +0 -0
  162. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/arrow_down.png +0 -0
  163. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/arrow_up.png +0 -0
  164. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/autorefresh.png +0 -0
  165. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/autoscale.png +0 -0
  166. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/axes.png +0 -0
  167. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/busy.png +0 -0
  168. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/cell_edit.png +0 -0
  169. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/center.png +0 -0
  170. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/cmap_edit.png +0 -0
  171. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/contrast.png +0 -0
  172. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/copy.png +0 -0
  173. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/copytoclipboard.png +0 -0
  174. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csapplylut.png +0 -0
  175. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csautoscale.png +0 -0
  176. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csection.png +0 -0
  177. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csection_a.png +0 -0
  178. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csection_line.png +0 -0
  179. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csection_oblique.png +0 -0
  180. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/csperimage.png +0 -0
  181. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curve_downsample.png +0 -0
  182. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curvestyles/dots.png +0 -0
  183. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curvestyles/lines.png +0 -0
  184. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curvestyles/steps.png +0 -0
  185. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curvestyles/sticks.png +0 -0
  186. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curvetypes/xfy.png +0 -0
  187. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/curvetypes/yfx.png +0 -0
  188. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/delete.png +0 -0
  189. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/edit.png +0 -0
  190. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/edit_point_selection.png +0 -0
  191. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/edit.png +0 -0
  192. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/edit_add.png +0 -0
  193. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/editcopy.png +0 -0
  194. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/editdelete.png +0 -0
  195. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/editpaste.png +0 -0
  196. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/fileimport.png +0 -0
  197. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/filesave.png +0 -0
  198. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/imshow.png +0 -0
  199. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/insert.png +0 -0
  200. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/plot.png +0 -0
  201. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/editors/rename.png +0 -0
  202. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/eliminate_outliers.png +0 -0
  203. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/eraser.png +0 -0
  204. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/exit.png +0 -0
  205. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/expander_down.png +0 -0
  206. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/expander_right.png +0 -0
  207. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/export.png +0 -0
  208. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/file.png +0 -0
  209. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/fileclose.png +0 -0
  210. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/fileimport.png +0 -0
  211. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filenew.png +0 -0
  212. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/fileopen.png +0 -0
  213. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filesave.png +0 -0
  214. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filesaveas.png +0 -0
  215. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/doc.png +0 -0
  216. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/gif.png +0 -0
  217. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/html.png +0 -0
  218. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/jpg.png +0 -0
  219. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/pdf.png +0 -0
  220. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/png.png +0 -0
  221. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/pps.png +0 -0
  222. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/ps.png +0 -0
  223. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/tar.png +0 -0
  224. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/tgz.png +0 -0
  225. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/tif.png +0 -0
  226. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/txt.png +0 -0
  227. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/xls.png +0 -0
  228. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/filetypes/zip.png +0 -0
  229. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/font.png +0 -0
  230. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/full_range.png +0 -0
  231. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/funct.png +0 -0
  232. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/hcursor.png +0 -0
  233. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/hflip.png +0 -0
  234. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/imagestats.png +0 -0
  235. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/item_list.png +0 -0
  236. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/annotation.png +0 -0
  237. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/curve.png +0 -0
  238. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/errorbar.png +0 -0
  239. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/grid.png +0 -0
  240. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/histogram.png +0 -0
  241. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/histogram2d.png +0 -0
  242. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/image.png +0 -0
  243. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/label.png +0 -0
  244. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/legend.png +0 -0
  245. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/items/polygonmap.png +0 -0
  246. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/magnifier.png +0 -0
  247. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/cross.png +0 -0
  248. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/diamond.png +0 -0
  249. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/ellipse.png +0 -0
  250. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/hexagon.png +0 -0
  251. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/point.png +0 -0
  252. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/square.png +0 -0
  253. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/star.png +0 -0
  254. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/triangle_d.png +0 -0
  255. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/triangle_l.png +0 -0
  256. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/triangle_r.png +0 -0
  257. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/triangle_u.png +0 -0
  258. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markers/xcross.png +0 -0
  259. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markerstyles/cross_marker.png +0 -0
  260. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markerstyles/horiz_marker.png +0 -0
  261. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/markerstyles/vert_marker.png +0 -0
  262. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/mask/mask_circle.png +0 -0
  263. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/mask/mask_circle_outside.png +0 -0
  264. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/mask/mask_rectangle.png +0 -0
  265. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/mask/mask_rectangle_outside.png +0 -0
  266. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/mask/mask_tool.png +0 -0
  267. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/max.png +0 -0
  268. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/min.png +0 -0
  269. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/move.png +0 -0
  270. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/multipoint_selection.png +0 -0
  271. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/none.png +0 -0
  272. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/not_found.png +0 -0
  273. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/on_curve.png +0 -0
  274. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/bdiagpattern.png +0 -0
  275. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/crosspattern.png +0 -0
  276. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense1pattern.png +0 -0
  277. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense2pattern.png +0 -0
  278. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense3pattern.png +0 -0
  279. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense4pattern.png +0 -0
  280. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense5pattern.png +0 -0
  281. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense6pattern.png +0 -0
  282. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/dense7pattern.png +0 -0
  283. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/diagcrosspattern.png +0 -0
  284. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/fdiagpattern.png +0 -0
  285. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/horpattern.png +0 -0
  286. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/nobrush.png +0 -0
  287. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/solidpattern.png +0 -0
  288. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/patterns/verpattern.png +0 -0
  289. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/plotpy-banner.svg +0 -0
  290. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/plotpy-vertical.svg +0 -0
  291. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/plotpy.svg +0 -0
  292. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/point_selection.png +0 -0
  293. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/print.png +0 -0
  294. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/python.png +0 -0
  295. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/quickview.png +0 -0
  296. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/refresh.png +0 -0
  297. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/save_all.png +0 -0
  298. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/scales/lin_lin.png +0 -0
  299. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/scales/lin_log.png +0 -0
  300. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/scales/log_lin.png +0 -0
  301. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/scales/log_log.png +0 -0
  302. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/select.svg +0 -0
  303. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/select_area.svg +0 -0
  304. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/settings.png +0 -0
  305. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shape.png +0 -0
  306. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/circle.png +0 -0
  307. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/contour.png +0 -0
  308. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/ellipse_shape.png +0 -0
  309. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/gtaxes.png +0 -0
  310. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/marker.png +0 -0
  311. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/oblique_rectangle.png +0 -0
  312. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/point_shape.png +0 -0
  313. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/polygon.png +0 -0
  314. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/polyline.png +0 -0
  315. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/rectangle.png +0 -0
  316. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/segment.png +0 -0
  317. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/xrange.png +0 -0
  318. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/shapes/yrange.png +0 -0
  319. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/snapshot.png +0 -0
  320. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/styles/dash.png +0 -0
  321. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/styles/dashdot.png +0 -0
  322. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/styles/dashdotdot.png +0 -0
  323. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/styles/dot.png +0 -0
  324. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/styles/solid.png +0 -0
  325. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/trash.png +0 -0
  326. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/trimage_lock.png +0 -0
  327. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/trimage_unlock.png +0 -0
  328. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/vcursor.png +0 -0
  329. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/vflip.png +0 -0
  330. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/xcursor.png +0 -0
  331. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/xmax.png +0 -0
  332. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/xmin.png +0 -0
  333. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/data/icons/zlog.svg +0 -0
  334. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/__init__.py +0 -0
  335. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/__init__.py +0 -0
  336. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/_generic_range_slider.py +0 -0
  337. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/_generic_slider.py +0 -0
  338. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/_labeled.py +0 -0
  339. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/_misc.py +0 -0
  340. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/_range_style.py +0 -0
  341. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/external/sliders/_sliders.py +0 -0
  342. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/interfaces/__init__.py +0 -0
  343. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/interfaces/items.py +0 -0
  344. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/interfaces/panel.py +0 -0
  345. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/interfaces/plotmanager.py +0 -0
  346. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/annotation.py +0 -0
  347. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/contour.py +0 -0
  348. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/curve/__init__.py +0 -0
  349. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/curve/base.py +0 -0
  350. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/grid.py +0 -0
  351. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/histogram.py +0 -0
  352. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/__init__.py +0 -0
  353. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/base.py +0 -0
  354. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/filter.py +0 -0
  355. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/masked.py +0 -0
  356. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/misc.py +0 -0
  357. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/standard.py +0 -0
  358. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/image/transform.py +0 -0
  359. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/label.py +0 -0
  360. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/polygonmap.py +0 -0
  361. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/__init__.py +0 -0
  362. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/axis.py +0 -0
  363. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/base.py +0 -0
  364. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/ellipse.py +0 -0
  365. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/marker.py +0 -0
  366. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/point.py +0 -0
  367. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/polygon.py +0 -0
  368. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/range.py +0 -0
  369. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/rectangle.py +0 -0
  370. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/segment.py +0 -0
  371. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/items/shape/svg.py +0 -0
  372. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/lutrange.py +0 -0
  373. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/mathutils/__init__.py +0 -0
  374. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/mathutils/colormap.py +0 -0
  375. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/mathutils/scaler.py +0 -0
  376. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/__init__.py +0 -0
  377. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/base.py +0 -0
  378. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/contrastadjustment.py +0 -0
  379. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/csection/__init__.py +0 -0
  380. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/csection/csitem.py +0 -0
  381. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/csection/csplot.py +0 -0
  382. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/csection/cswidget.py +0 -0
  383. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/panels/itemlist.py +0 -0
  384. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/plot/__init__.py +0 -0
  385. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/plot/manager.py +0 -0
  386. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/pyplot.py +0 -0
  387. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/__init__.py +0 -0
  388. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/axes.py +0 -0
  389. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/base.py +0 -0
  390. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/curve.py +0 -0
  391. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/errorbar.py +0 -0
  392. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/histogram.py +0 -0
  393. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/image.py +0 -0
  394. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/label.py +0 -0
  395. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/styles/polygonmap.py +0 -0
  396. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/__init__.py +0 -0
  397. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/benchmarks/__init__.py +0 -0
  398. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/benchmarks/test_benchmarks.py +0 -0
  399. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/benchmarks/test_bigimages.py +0 -0
  400. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/benchmarks/test_loadtest.py +0 -0
  401. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/conftest.py +0 -0
  402. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data/brain.png +0 -0
  403. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data/brain_cylinder.png +0 -0
  404. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data/datetime.txt +0 -0
  405. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data/mr-brain.dcm +0 -0
  406. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data/svg_target.svg +0 -0
  407. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data/svg_tool.svg +0 -0
  408. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/data.py +0 -0
  409. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/__init__.py +0 -0
  410. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_auto_curve_image.py +0 -0
  411. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_autoscale_shapes.py +0 -0
  412. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_builder.py +0 -0
  413. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_colormap_editor.py +0 -0
  414. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_colormap_manager.py +0 -0
  415. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_computations.py +0 -0
  416. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_contrast.py +0 -0
  417. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_cursors.py +0 -0
  418. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_data_update_curve.py +0 -0
  419. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_data_update_image.py +0 -0
  420. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_dicom_image.py +0 -0
  421. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_fit.py +0 -0
  422. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_fit_locked_params.py +0 -0
  423. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_image_coords.py +0 -0
  424. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_image_filter.py +0 -0
  425. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_image_superp.py +0 -0
  426. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_loadsaveitems_hdf5.py +0 -0
  427. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_loadsaveitems_json.py +0 -0
  428. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_loadsaveitems_pickle.py +0 -0
  429. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_manager.py +0 -0
  430. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_no_auto_tools.py +0 -0
  431. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_plot_log.py +0 -0
  432. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_plot_time.py +0 -0
  433. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_plot_types.py +0 -0
  434. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_plot_yreverse.py +0 -0
  435. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/features/test_resize.py +0 -0
  436. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/__init__.py +0 -0
  437. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_annotated_range.py +0 -0
  438. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_annotations.py +0 -0
  439. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_curves.py +0 -0
  440. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_curves_highdpi.py +0 -0
  441. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_hist2d.py +0 -0
  442. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_histogram.py +0 -0
  443. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image.py +0 -0
  444. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image_aspect_ratio.py +0 -0
  445. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image_contour.py +0 -0
  446. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image_masked.py +0 -0
  447. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image_masked_xy.py +0 -0
  448. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image_rgb.py +0 -0
  449. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_image_xy.py +0 -0
  450. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_mandelbrot.py +0 -0
  451. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_pcolor.py +0 -0
  452. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_polygons.py +0 -0
  453. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_svgshapes.py +0 -0
  454. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_to_bins.py +0 -0
  455. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/items/test_transform.py +0 -0
  456. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/__init__.py +0 -0
  457. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_actiontool.py +0 -0
  458. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_cross_section.py +0 -0
  459. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_cross_section_line.py +0 -0
  460. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_cross_section_oblique.py +0 -0
  461. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_customize_shape_tool.py +0 -0
  462. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_cyclic_import.py +0 -0
  463. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_downsample_curve.py +0 -0
  464. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_edit_point.py +0 -0
  465. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_get_point.py +0 -0
  466. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_get_points.py +0 -0
  467. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_get_rectangle.py +0 -0
  468. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_get_rectangle_with_svg.py +0 -0
  469. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_get_segment.py +0 -0
  470. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_image_plot_tools.py +0 -0
  471. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_stats_tools.py +0 -0
  472. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/tools/test_zaxislog.py +0 -0
  473. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/__init__.py +0 -0
  474. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_annotation_tools.py +0 -0
  475. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_aspect_ratio_tool.py +0 -0
  476. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_baseplot.py +0 -0
  477. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_builder_annotation.py +0 -0
  478. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_builder_curve.py +0 -0
  479. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_builder_image.py +0 -0
  480. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_builder_shape.py +0 -0
  481. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_contour.py +0 -0
  482. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_cursor_tools.py +0 -0
  483. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_curve_tools.py +0 -0
  484. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_datetime_axis.py +0 -0
  485. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_display_coords_tool.py +0 -0
  486. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_events.py +0 -0
  487. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_fontparam.py +0 -0
  488. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_line.py +0 -0
  489. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_line_cross_section_tool.py +0 -0
  490. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_manipulate_selection.py +0 -0
  491. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_mask_tool.py +0 -0
  492. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_masked_dtype_change.py +0 -0
  493. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_oblique_cross_section_tool.py +0 -0
  494. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_plot_curve.py +0 -0
  495. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_plot_image.py +0 -0
  496. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_rect_zoom.py +0 -0
  497. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_seg_dist.py +0 -0
  498. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/test_tools_export.py +0 -0
  499. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/unit/utils.py +0 -0
  500. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/__init__.py +0 -0
  501. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_dotarraydemo.py +0 -0
  502. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_filtertest1.py +0 -0
  503. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_filtertest2.py +0 -0
  504. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_fliprotate.py +0 -0
  505. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_qtdesigner.py +0 -0
  506. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_qtdesigner.ui +0 -0
  507. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_resize_dialog.py +0 -0
  508. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_rotatecrop.py +0 -0
  509. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_simple_dialog.py +0 -0
  510. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_simple_window.py +0 -0
  511. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_syncplot.py +0 -0
  512. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tests/widgets/test_theme.py +0 -0
  513. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/__init__.py +0 -0
  514. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/annotation.py +0 -0
  515. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/axes.py +0 -0
  516. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/cross_section.py +0 -0
  517. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/cursor.py +0 -0
  518. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/item.py +0 -0
  519. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/label.py +0 -0
  520. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/misc.py +0 -0
  521. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/plot.py +0 -0
  522. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/selection.py +0 -0
  523. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/tools/shape.py +0 -0
  524. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/__init__.py +0 -0
  525. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/about.py +0 -0
  526. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/basetransform.py +0 -0
  527. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/colormap/_slider.py +0 -0
  528. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/colormap/editor.py +0 -0
  529. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/colormap/widget.py +0 -0
  530. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/fit.py +0 -0
  531. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/fliprotate.py +0 -0
  532. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/imagefile.py +0 -0
  533. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/qtdesigner.py +0 -0
  534. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/resizedialog.py +0 -0
  535. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/rotatecrop.py +0 -0
  536. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy/widgets/selectdialog.py +0 -0
  537. {plotpy-2.8.3 → plotpy-2.9.0}/plotpy-tests.desktop +0 -0
  538. {plotpy-2.8.3 → plotpy-2.9.0}/qtdesigner/plotplugin.py +0 -0
  539. {plotpy-2.8.3 → plotpy-2.9.0}/setup.cfg +0 -0
  540. {plotpy-2.8.3 → plotpy-2.9.0}/setup.py +0 -0
  541. {plotpy-2.8.3 → plotpy-2.9.0}/src/arrays.hpp +0 -0
  542. {plotpy-2.8.3 → plotpy-2.9.0}/src/debug.hpp +0 -0
  543. {plotpy-2.8.3 → plotpy-2.9.0}/src/histogram2d.pyx +0 -0
  544. {plotpy-2.8.3 → plotpy-2.9.0}/src/mandelbrot.pyx +0 -0
  545. {plotpy-2.8.3 → plotpy-2.9.0}/src/pcolor.cpp +0 -0
  546. {plotpy-2.8.3 → plotpy-2.9.0}/src/points.hpp +0 -0
  547. {plotpy-2.8.3 → plotpy-2.9.0}/src/scaler.cpp +0 -0
  548. {plotpy-2.8.3 → plotpy-2.9.0}/src/scaler.hpp +0 -0
  549. {plotpy-2.8.3 → plotpy-2.9.0}/src/traits.hpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PlotPy
3
- Version: 2.8.3
3
+ Version: 2.9.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
@@ -50,6 +50,7 @@ Classifier: Programming Language :: Python :: 3.10
50
50
  Classifier: Programming Language :: Python :: 3.11
51
51
  Classifier: Programming Language :: Python :: 3.12
52
52
  Classifier: Programming Language :: Python :: 3.13
53
+ Classifier: Programming Language :: Python :: 3.14
53
54
  Classifier: Topic :: Scientific/Engineering
54
55
  Classifier: Topic :: Scientific/Engineering :: Image Processing
55
56
  Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
@@ -61,7 +62,7 @@ Classifier: Topic :: Utilities
61
62
  Requires-Python: <4,>=3.9
62
63
  Description-Content-Type: text/markdown
63
64
  License-File: LICENSE
64
- Requires-Dist: guidata>=3.13
65
+ Requires-Dist: guidata>=3.14.1
65
66
  Requires-Dist: PythonQwt>=0.15
66
67
  Requires-Dist: numpy>=1.22
67
68
  Requires-Dist: SciPy>=1.7.3
@@ -78,6 +79,8 @@ Requires-Dist: Cython>=3.0; extra == "dev"
78
79
  Requires-Dist: pylint; extra == "dev"
79
80
  Requires-Dist: ruff; extra == "dev"
80
81
  Requires-Dist: pre-commit; extra == "dev"
82
+ Requires-Dist: setuptools; extra == "dev"
83
+ Requires-Dist: wheel; extra == "dev"
81
84
  Provides-Extra: doc
82
85
  Requires-Dist: sphinx; extra == "doc"
83
86
  Requires-Dist: myst_parser; extra == "doc"
@@ -111,6 +114,8 @@ It is part of the [PlotPyStack](https://github.com/PlotPyStack) project, aiming
111
114
  * [guidata](https://pypi.python.org/pypi/guidata) automatic GUI generation library
112
115
  * [PythonQwt](https://pypi.python.org/pypi/PythonQwt) plotting widgets library
113
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
114
119
 
115
120
  <img src="https://raw.githubusercontent.com/PlotPyStack/plotpy/master/doc/images/panorama.png">
116
121
 
@@ -118,7 +123,7 @@ See [documentation](https://plotpy.readthedocs.io/en/latest/) for more details o
118
123
 
119
124
  Copyrights and licensing:
120
125
 
121
- * 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).
122
127
  * Licensed under the terms of the BSD 3-Clause (see [LICENSE](https://github.com/PlotPyStack/PlotPy/blob/master/LICENSE)).
123
128
 
124
129
  ## Features
@@ -129,7 +134,7 @@ General plotting features:
129
134
 
130
135
  * Ready-to-use [plot widgets and dialog boxes](https://plotpy.readthedocs.io/en/latest/features/plot/index.html)
131
136
  * [pyplot](https://plotpy.readthedocs.io/en/latest/features/pyplot.html): interactive plotting widgets, equivalent to `matplotlib.pyplot`, at least for the implemented functions
132
- * 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, ...
133
138
 
134
139
  Interactive features (i.e. not only programmatic plotting but also with mouse/keyboard):
135
140
 
@@ -138,7 +143,7 @@ Interactive features (i.e. not only programmatic plotting but also with mouse/ke
138
143
  * Customizable aspect ratio for images
139
144
  * Tons of ready-to-use tools: plot canvas export to image file, image snapshot, interval selection, image rectangular filter, etc.
140
145
  * Curve fitting tool with automatic fit, manual fit with sliders, ...
141
- * 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, ...
142
147
  * X-axis and Y-axis cross-sections: support for multiple images, average cross-section tool on a rectangular area, ...
143
148
  * Apply any affine transform to displayed images in real-time (rotation, magnification, translation, horizontal/vertical flip, ...)
144
149
 
@@ -158,8 +163,8 @@ Compatibility table:
158
163
 
159
164
  | PlotPy version | PyQt5 | PyQt6 | PySide2 | PySide6 |
160
165
  |----------------|-------|-------|---------|---------|
161
- | 2.0-2.5 | ✅ | ⚠️ | ❌ | ⚠️ |
162
- | Latest | ✅ | ✅ | ❌ | ✅ |
166
+ | 2.0-2.5 | ✅ | ⚠️ | ❌ | ⚠️ |
167
+ | Latest | ✅ | ✅ | ❌ | ✅ |
163
168
 
164
169
  ### Other dependencies and installation
165
170
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PlotPy
3
- Version: 2.8.3
3
+ Version: 2.9.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
@@ -50,6 +50,7 @@ Classifier: Programming Language :: Python :: 3.10
50
50
  Classifier: Programming Language :: Python :: 3.11
51
51
  Classifier: Programming Language :: Python :: 3.12
52
52
  Classifier: Programming Language :: Python :: 3.13
53
+ Classifier: Programming Language :: Python :: 3.14
53
54
  Classifier: Topic :: Scientific/Engineering
54
55
  Classifier: Topic :: Scientific/Engineering :: Image Processing
55
56
  Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
@@ -61,7 +62,7 @@ Classifier: Topic :: Utilities
61
62
  Requires-Python: <4,>=3.9
62
63
  Description-Content-Type: text/markdown
63
64
  License-File: LICENSE
64
- Requires-Dist: guidata>=3.13
65
+ Requires-Dist: guidata>=3.14.1
65
66
  Requires-Dist: PythonQwt>=0.15
66
67
  Requires-Dist: numpy>=1.22
67
68
  Requires-Dist: SciPy>=1.7.3
@@ -78,6 +79,8 @@ Requires-Dist: Cython>=3.0; extra == "dev"
78
79
  Requires-Dist: pylint; extra == "dev"
79
80
  Requires-Dist: ruff; extra == "dev"
80
81
  Requires-Dist: pre-commit; extra == "dev"
82
+ Requires-Dist: setuptools; extra == "dev"
83
+ Requires-Dist: wheel; extra == "dev"
81
84
  Provides-Extra: doc
82
85
  Requires-Dist: sphinx; extra == "doc"
83
86
  Requires-Dist: myst_parser; extra == "doc"
@@ -111,6 +114,8 @@ It is part of the [PlotPyStack](https://github.com/PlotPyStack) project, aiming
111
114
  * [guidata](https://pypi.python.org/pypi/guidata) automatic GUI generation library
112
115
  * [PythonQwt](https://pypi.python.org/pypi/PythonQwt) plotting widgets library
113
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
114
119
 
115
120
  <img src="https://raw.githubusercontent.com/PlotPyStack/plotpy/master/doc/images/panorama.png">
116
121
 
@@ -118,7 +123,7 @@ See [documentation](https://plotpy.readthedocs.io/en/latest/) for more details o
118
123
 
119
124
  Copyrights and licensing:
120
125
 
121
- * 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).
122
127
  * Licensed under the terms of the BSD 3-Clause (see [LICENSE](https://github.com/PlotPyStack/PlotPy/blob/master/LICENSE)).
123
128
 
124
129
  ## Features
@@ -129,7 +134,7 @@ General plotting features:
129
134
 
130
135
  * Ready-to-use [plot widgets and dialog boxes](https://plotpy.readthedocs.io/en/latest/features/plot/index.html)
131
136
  * [pyplot](https://plotpy.readthedocs.io/en/latest/features/pyplot.html): interactive plotting widgets, equivalent to `matplotlib.pyplot`, at least for the implemented functions
132
- * 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, ...
133
138
 
134
139
  Interactive features (i.e. not only programmatic plotting but also with mouse/keyboard):
135
140
 
@@ -138,7 +143,7 @@ Interactive features (i.e. not only programmatic plotting but also with mouse/ke
138
143
  * Customizable aspect ratio for images
139
144
  * Tons of ready-to-use tools: plot canvas export to image file, image snapshot, interval selection, image rectangular filter, etc.
140
145
  * Curve fitting tool with automatic fit, manual fit with sliders, ...
141
- * 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, ...
142
147
  * X-axis and Y-axis cross-sections: support for multiple images, average cross-section tool on a rectangular area, ...
143
148
  * Apply any affine transform to displayed images in real-time (rotation, magnification, translation, horizontal/vertical flip, ...)
144
149
 
@@ -158,8 +163,8 @@ Compatibility table:
158
163
 
159
164
  | PlotPy version | PyQt5 | PyQt6 | PySide2 | PySide6 |
160
165
  |----------------|-------|-------|---------|---------|
161
- | 2.0-2.5 | ✅ | ⚠️ | ❌ | ⚠️ |
162
- | Latest | ✅ | ✅ | ❌ | ✅ |
166
+ | 2.0-2.5 | ✅ | ⚠️ | ❌ | ⚠️ |
167
+ | Latest | ✅ | ✅ | ❌ | ✅ |
163
168
 
164
169
  ### Other dependencies and installation
165
170
 
@@ -25,6 +25,7 @@ doc/requirements.rst
25
25
  doc/_static/favicon.ico
26
26
  doc/dev/build.rst
27
27
  doc/dev/contribute.rst
28
+ doc/dev/gitworkflow.rst
28
29
  doc/dev/guiqwt_to_plotpy.csv
29
30
  doc/dev/guiqwt_to_plotpy.rst
30
31
  doc/dev/index.rst
@@ -115,6 +116,7 @@ doc/release_notes/release_2.05.md
115
116
  doc/release_notes/release_2.06.md
116
117
  doc/release_notes/release_2.07.md
117
118
  doc/release_notes/release_2.08.md
119
+ doc/release_notes/release_2.09.md
118
120
  plotpy/__init__.py
119
121
  plotpy/config.py
120
122
  plotpy/constants.py
@@ -248,6 +250,7 @@ plotpy/data/icons/items/image.png
248
250
  plotpy/data/icons/items/label.png
249
251
  plotpy/data/icons/items/legend.png
250
252
  plotpy/data/icons/items/polygonmap.png
253
+ plotpy/data/icons/items/quiver.png
251
254
  plotpy/data/icons/markers/cross.png
252
255
  plotpy/data/icons/markers/diamond.png
253
256
  plotpy/data/icons/markers/ellipse.png
@@ -324,6 +327,7 @@ plotpy/items/grid.py
324
327
  plotpy/items/histogram.py
325
328
  plotpy/items/label.py
326
329
  plotpy/items/polygonmap.py
330
+ plotpy/items/quiver.py
327
331
  plotpy/items/curve/__init__.py
328
332
  plotpy/items/curve/base.py
329
333
  plotpy/items/curve/errorbar.py
@@ -380,6 +384,7 @@ plotpy/tests/data.py
380
384
  plotpy/tests/vistools.py
381
385
  plotpy/tests/benchmarks/__init__.py
382
386
  plotpy/tests/benchmarks/test_benchmarks.py
387
+ plotpy/tests/benchmarks/test_bigcurves.py
383
388
  plotpy/tests/benchmarks/test_bigimages.py
384
389
  plotpy/tests/benchmarks/test_large_number_of_annotations.py
385
390
  plotpy/tests/benchmarks/test_loadtest.py
@@ -416,6 +421,7 @@ plotpy/tests/features/test_plot_time.py
416
421
  plotpy/tests/features/test_plot_types.py
417
422
  plotpy/tests/features/test_plot_yreverse.py
418
423
  plotpy/tests/features/test_pyplot.py
424
+ plotpy/tests/features/test_quiver.py
419
425
  plotpy/tests/features/test_resize.py
420
426
  plotpy/tests/items/__init__.py
421
427
  plotpy/tests/items/test_annotated_range.py
@@ -456,6 +462,7 @@ plotpy/tests/tools/test_stats_tools.py
456
462
  plotpy/tests/tools/test_zaxislog.py
457
463
  plotpy/tests/unit/__init__.py
458
464
  plotpy/tests/unit/test_annotation_tools.py
465
+ plotpy/tests/unit/test_arrayfuncs.py
459
466
  plotpy/tests/unit/test_aspect_ratio_tool.py
460
467
  plotpy/tests/unit/test_baseplot.py
461
468
  plotpy/tests/unit/test_builder_annotation.py
@@ -1,4 +1,4 @@
1
- guidata>=3.13
1
+ guidata>=3.14.1
2
2
  PythonQwt>=0.15
3
3
  numpy>=1.22
4
4
  SciPy>=1.7.3
@@ -14,6 +14,8 @@ Cython>=3.0
14
14
  pylint
15
15
  ruff
16
16
  pre-commit
17
+ setuptools
18
+ wheel
17
19
 
18
20
  [doc]
19
21
  sphinx
@@ -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
 
@@ -67,8 +69,8 @@ Compatibility table:
67
69
 
68
70
  | PlotPy version | PyQt5 | PyQt6 | PySide2 | PySide6 |
69
71
  |----------------|-------|-------|---------|---------|
70
- | 2.0-2.5 | ✅ | ⚠️ | ❌ | ⚠️ |
71
- | Latest | ✅ | ✅ | ❌ | ✅ |
72
+ | 2.0-2.5 | ✅ | ⚠️ | ❌ | ⚠️ |
73
+ | Latest | ✅ | ✅ | ❌ | ✅ |
72
74
 
73
75
  ### Other dependencies and installation
74
76
 
@@ -0,0 +1,311 @@
1
+ .. _gitworkflow:
2
+
3
+ Git Workflow
4
+ ============
5
+
6
+ This document describes the Git workflow used in the PlotPy project,
7
+ based on a ``master`` branch, a ``develop`` branch, and feature-specific branches.
8
+ It also defines how bug fixes are managed.
9
+
10
+ .. note::
11
+
12
+ This workflow is a simplified version of the `Gitflow Workflow <https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow>`_.
13
+ It has been adapted to suit the needs of the PlotPy project at the current stage of development.
14
+
15
+ Branching Model
16
+ ---------------
17
+
18
+ Main Branches
19
+ ^^^^^^^^^^^^^
20
+
21
+ - ``master``: Represents the stable, production-ready version of the project.
22
+ - ``develop``: Used for ongoing development and integration of new features.
23
+
24
+ Feature Branches
25
+ ^^^^^^^^^^^^^^^^
26
+
27
+ - ``feature/feature_name``: Used for the development of new features.
28
+
29
+ - Created from ``develop``.
30
+ - Merged back into ``develop`` once completed.
31
+ - Deleted after merging.
32
+
33
+ Release Branch
34
+ ^^^^^^^^^^^^^^
35
+
36
+ - ``release``: Represents the current maintenance line for patch releases.
37
+
38
+ - Created from ``master`` after a stable release when the first patch is needed.
39
+ - Accepts ``fix/xxx`` and ``hotfix/xxx`` branch merges.
40
+ - Merged back into ``master`` for each patch release tag (e.g., 2.8.1, 2.8.2).
41
+ - Reset or recreated when starting a new minor/major release cycle.
42
+
43
+ .. note::
44
+
45
+ The ``release`` branch is not versioned (no ``release/2.8.x``). It always
46
+ represents "the current maintenance line." When a new minor version is released
47
+ (e.g., 2.9.0), the old ``release`` branch is deleted and a new one is created
48
+ from the fresh tag when the first patch for 2.9.1 is needed.
49
+
50
+ Bug Fix Branches
51
+ ^^^^^^^^^^^^^^^^
52
+
53
+ - ``fix/xxx``: Used for general bug fixes that are not urgent.
54
+
55
+ - Created from ``develop`` (for next feature release) or ``release`` (for patch release).
56
+ - Merged back into the originating branch once completed.
57
+ - Deleted after merging.
58
+
59
+ - ``hotfix/xxx``: Used for urgent production-critical fixes.
60
+
61
+ - Created from ``release`` (if exists) or ``master`` (if no ``release`` branch yet).
62
+ - Merged back into ``release`` or ``master``.
63
+ - The fix is then cherry-picked into ``develop``.
64
+ - Deleted after merging.
65
+
66
+ .. note::
67
+
68
+ Hotfixes (high-priority fixes) will be integrated in the next maintenance
69
+ release (X.Y.Z -> Z+1), while fixes (low-priority fixes) will be integrated
70
+ in the next feature release (X.Y -> Y+1).
71
+
72
+
73
+ Documentation Branches
74
+ ----------------------
75
+
76
+ When working on documentation that is not related to source code
77
+ (e.g. training materials, user guides), branches should be named
78
+ using the ``doc/`` prefix.
79
+
80
+ Examples:
81
+
82
+ - ``doc/training-materials``
83
+ - ``doc/user-guide``
84
+
85
+ This naming convention improves clarity by clearly separating
86
+ documentation efforts from code-related development (features, fixes, etc.).
87
+
88
+
89
+ Workflow for New Features
90
+ -------------------------
91
+
92
+ 1. Create a new feature branch from ``develop``:
93
+
94
+ .. code-block:: sh
95
+
96
+ git checkout develop
97
+ git checkout -b develop/feature_name
98
+
99
+ 2. Develop the feature and commit changes.
100
+
101
+ 3. Merge the feature branch back into ``develop``:
102
+
103
+ .. code-block:: sh
104
+
105
+ git checkout develop
106
+ git merge --no-ff develop/feature_name
107
+
108
+ 4. Delete the feature branch:
109
+
110
+ .. code-block:: sh
111
+
112
+ git branch -d develop/feature_name
113
+
114
+ .. warning::
115
+
116
+ Do not leave feature branches unmerged for too long.
117
+ Regularly rebase them on ``develop`` to minimize conflicts.
118
+
119
+ Workflow for Regular Bug Fixes
120
+ ------------------------------
121
+
122
+ For next feature release (target: ``develop``):
123
+
124
+ 1. Create a bug fix branch from ``develop``:
125
+
126
+ .. code-block:: sh
127
+
128
+ git checkout develop
129
+ git checkout -b fix/bug_description
130
+
131
+ 2. Apply the fix and commit changes.
132
+
133
+ 3. Merge the fix branch back into ``develop``:
134
+
135
+ .. code-block:: sh
136
+
137
+ git checkout develop
138
+ git merge --no-ff fix/bug_description
139
+
140
+ 4. Delete the fix branch:
141
+
142
+ .. code-block:: sh
143
+
144
+ git branch -d fix/bug_description
145
+
146
+ For current maintenance release (target: ``release``):
147
+
148
+ 1. Create a bug fix branch from ``release``:
149
+
150
+ .. code-block:: sh
151
+
152
+ git checkout release
153
+ git checkout -b fix/bug_description
154
+
155
+ 2. Apply the fix and commit changes.
156
+
157
+ 3. Merge the fix branch back into ``release``:
158
+
159
+ .. code-block:: sh
160
+
161
+ git checkout release
162
+ git merge --no-ff fix/bug_description
163
+
164
+ 4. Delete the fix branch:
165
+
166
+ .. code-block:: sh
167
+
168
+ git branch -d fix/bug_description
169
+
170
+ .. warning::
171
+
172
+ Do not create a ``fix/xxx`` branch from a ``develop/feature_name`` branch.
173
+ Always branch from ``develop`` or ``release`` to ensure fixes are correctly propagated.
174
+
175
+ .. code-block:: sh
176
+
177
+ # Incorrect:
178
+ git checkout develop/feature_name
179
+ git checkout -b fix/wrong_branch
180
+
181
+ .. code-block:: sh
182
+
183
+ # Correct:
184
+ git checkout develop
185
+ git checkout -b fix/correct_branch
186
+
187
+ Workflow for Critical Hotfixes
188
+ ------------------------------
189
+
190
+ 1. Create a hotfix branch from ``release`` (or ``master`` if no ``release`` branch exists):
191
+
192
+ .. code-block:: sh
193
+
194
+ git checkout release # or: git checkout master
195
+ git checkout -b hotfix/critical_bug
196
+
197
+ 2. Apply the fix and commit changes.
198
+
199
+ 3. Merge the fix back into ``release`` (or ``master``):
200
+
201
+ .. code-block:: sh
202
+
203
+ git checkout release # or: git checkout master
204
+ git merge --no-ff hotfix/critical_bug
205
+
206
+ 4. Cherry-pick the fix into ``develop``:
207
+
208
+ .. code-block:: sh
209
+
210
+ git checkout develop
211
+ git cherry-pick <commit_hash>
212
+
213
+ 5. Delete the hotfix branch:
214
+
215
+ .. code-block:: sh
216
+
217
+ git branch -d hotfix/critical_bug
218
+
219
+ .. warning::
220
+
221
+ Do not merge ``fix/xxx`` or ``hotfix/xxx`` directly into ``master`` without following the workflow.
222
+ Ensure hotfixes are cherry-picked into ``develop`` to avoid losing fixes in future releases.
223
+
224
+ Workflow for Patch Releases
225
+ ----------------------------
226
+
227
+ When ready to release a patch version (e.g., 2.8.1, 2.8.2):
228
+
229
+ 1. Ensure the ``release`` branch contains all desired fixes.
230
+
231
+ 2. Merge ``release`` into ``master``:
232
+
233
+ .. code-block:: sh
234
+
235
+ git checkout master
236
+ git merge --no-ff release
237
+
238
+ 3. Tag the release on ``master``:
239
+
240
+ .. code-block:: sh
241
+
242
+ git tag -a v2.8.1 -m "Release version 2.8.1"
243
+ git push origin master --tags
244
+
245
+ 4. Keep the ``release`` branch for additional patches in the same minor version series.
246
+
247
+ Workflow for Minor/Major Releases
248
+ ----------------------------------
249
+
250
+ When ready to release a new minor or major version (e.g., 2.9.0, 3.0.0):
251
+
252
+ 1. Merge ``develop`` into ``master``:
253
+
254
+ .. code-block:: sh
255
+
256
+ git checkout master
257
+ git merge --no-ff develop
258
+
259
+ 2. Tag the release on ``master``:
260
+
261
+ .. code-block:: sh
262
+
263
+ git tag -a v2.9.0 -m "Release version 2.9.0"
264
+ git push origin master --tags
265
+
266
+ 3. Delete the old ``release`` branch (if exists):
267
+
268
+ .. code-block:: sh
269
+
270
+ git branch -d release
271
+ git push origin --delete release
272
+
273
+ 4. Create a new ``release`` branch from ``master`` when the first patch for 2.9.1 is needed:
274
+
275
+ .. code-block:: sh
276
+
277
+ git checkout master
278
+ git checkout -b release
279
+ git push -u origin release
280
+
281
+ Best Practices
282
+ --------------
283
+
284
+ - Regularly **rebase feature branches** on ``develop`` to stay up to date:
285
+
286
+ .. code-block:: sh
287
+
288
+ git checkout develop/feature_name
289
+ git rebase develop
290
+
291
+ - Avoid long-lived branches to minimize merge conflicts.
292
+
293
+ - Ensure bug fixes in ``release`` or ``master`` are **always cherry-picked** to ``develop``.
294
+
295
+ - Clearly differentiate between ``fix/xxx`` (non-urgent fixes) and ``hotfix/xxx`` (critical production fixes).
296
+
297
+ - When creating the ``release`` branch, update release notes to indicate which version it targets (e.g., add a comment in the merge commit: "Create release branch for v2.8.x maintenance").
298
+
299
+ - The ``release`` branch always represents the current maintenance line. To know which version it targets, check the most recent tag on ``master`` or the release notes.
300
+
301
+ Takeaway
302
+ --------
303
+
304
+ This workflow ensures a structured yet flexible development process while keeping
305
+ ``master`` stable and ``develop`` always updated with the latest changes.
306
+
307
+ The ``release`` branch provides a dedicated maintenance line for patch releases,
308
+ allowing ``develop`` to proceed with new features without interference. This solves
309
+ the problem of coordinating unreleased changes across the PlotPyStack ecosystem
310
+ (DataLab, Sigima, PlotPy, guidata, PythonQwt) by providing a stable branch for
311
+ CI testing during maintenance cycles.
@@ -6,6 +6,7 @@ Development
6
6
  :caption: Contents:
7
7
 
8
8
  contribute
9
+ gitworkflow
9
10
  build
10
11
  guiqwt_to_plotpy
11
12
  v1_to_v2
@@ -1 +1,2 @@
1
1
  .. automodule:: plotpy.widgets.colormap
2
+ :no-index:
@@ -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
 
@@ -0,0 +1,2 @@
1
+ .. automodule:: plotpy.mathutils.colormap
2
+ :no-index:
@@ -22,7 +22,7 @@ Curve plotting
22
22
  Basic curve plotting
23
23
  ~~~~~~~~~~~~~~~~~~~~
24
24
 
25
- .. literalinclude:: ../../plotpy/tests/items/test_curve.py
25
+ .. literalinclude:: ../../plotpy/tests/items/test_curves.py
26
26
  :start-after: guitest:
27
27
 
28
28
 
@@ -86,7 +86,7 @@ Affine transforms example on 3000x3000 images (real-time transforms):
86
86
  Image rectangular filter
87
87
  ~~~~~~~~~~~~~~~~~~~~~~~~
88
88
 
89
- .. literalinclude:: ../../plotpy/tests/features/test_imagefilter.py
89
+ .. literalinclude:: ../../plotpy/tests/features/test_image_filter.py
90
90
  :start-after: guitest:
91
91
 
92
92
 
@@ -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