PlotPy 2.7.2__tar.gz → 2.7.4__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 (525) hide show
  1. {plotpy-2.7.2 → plotpy-2.7.4}/CHANGELOG.md +27 -0
  2. {plotpy-2.7.2/PlotPy.egg-info → plotpy-2.7.4}/PKG-INFO +3 -2
  3. {plotpy-2.7.2 → plotpy-2.7.4/PlotPy.egg-info}/PKG-INFO +3 -2
  4. {plotpy-2.7.2 → plotpy-2.7.4}/PlotPy.egg-info/SOURCES.txt +6 -5
  5. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/__init__.py +1 -1
  6. plotpy-2.7.4/plotpy/data/icons/select.svg +49 -0
  7. plotpy-2.7.4/plotpy/data/icons/select_area.svg +63 -0
  8. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/base.py +40 -7
  9. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/filter.py +1 -1
  10. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/image_items.py +10 -0
  11. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/misc.py +6 -2
  12. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/transform.py +2 -0
  13. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/csection/csplot.py +1 -0
  14. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/plot/manager.py +74 -89
  15. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/data.py +14 -2
  16. plotpy-2.7.4/plotpy/tests/features/test_data_update_curve.py +138 -0
  17. plotpy-2.7.2/plotpy/tests/features/test_image_data_update.py → plotpy-2.7.4/plotpy/tests/features/test_data_update_image.py +2 -2
  18. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_fit.py +2 -2
  19. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_mandelbrot.py +4 -3
  20. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_dotarraydemo.py +2 -0
  21. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/plot.py +1 -1
  22. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/selection.py +1 -1
  23. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/fit.py +7 -7
  24. {plotpy-2.7.2 → plotpy-2.7.4}/src/histogram2d.c +174 -192
  25. {plotpy-2.7.2 → plotpy-2.7.4}/src/mandelbrot.c +174 -192
  26. plotpy-2.7.2/plotpy/data/icons/rectangular_select.png +0 -0
  27. plotpy-2.7.2/plotpy/data/icons/selection.png +0 -0
  28. {plotpy-2.7.2 → plotpy-2.7.4}/LICENSE +0 -0
  29. {plotpy-2.7.2 → plotpy-2.7.4}/MANIFEST.in +0 -0
  30. {plotpy-2.7.2 → plotpy-2.7.4}/PlotPy.egg-info/dependency_links.txt +0 -0
  31. {plotpy-2.7.2 → plotpy-2.7.4}/PlotPy.egg-info/entry_points.txt +0 -0
  32. {plotpy-2.7.2 → plotpy-2.7.4}/PlotPy.egg-info/requires.txt +0 -0
  33. {plotpy-2.7.2 → plotpy-2.7.4}/PlotPy.egg-info/top_level.txt +0 -0
  34. {plotpy-2.7.2 → plotpy-2.7.4}/README.md +0 -0
  35. {plotpy-2.7.2 → plotpy-2.7.4}/colormaps/README.md +0 -0
  36. {plotpy-2.7.2 → plotpy-2.7.4}/colormaps/_cm.py +0 -0
  37. {plotpy-2.7.2 → plotpy-2.7.4}/colormaps/colormap.py +0 -0
  38. {plotpy-2.7.2 → plotpy-2.7.4}/colormaps/matplotlib_cmaps.py +0 -0
  39. {plotpy-2.7.2 → plotpy-2.7.4}/doc/_static/favicon.ico +0 -0
  40. {plotpy-2.7.2 → plotpy-2.7.4}/doc/changelog.rst +0 -0
  41. {plotpy-2.7.2 → plotpy-2.7.4}/doc/conf.py +0 -0
  42. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/build.rst +0 -0
  43. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/contribute.rst +0 -0
  44. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/guiqwt_to_plotpy.csv +0 -0
  45. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/guiqwt_to_plotpy.rst +0 -0
  46. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/index.rst +0 -0
  47. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/platforms.rst +0 -0
  48. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/v1_to_guidata_v3.csv +0 -0
  49. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/v1_to_v2.csv +0 -0
  50. {plotpy-2.7.2 → plotpy-2.7.4}/doc/dev/v1_to_v2.rst +0 -0
  51. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/colormapmanager.rst +0 -0
  52. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/events.rst +0 -0
  53. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/fit.rst +0 -0
  54. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/fliprotate.rst +0 -0
  55. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/imagefile.rst +0 -0
  56. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/index.rst +0 -0
  57. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/io.rst +0 -0
  58. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/items/builder.rst +0 -0
  59. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/items/examples.rst +0 -0
  60. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/items/index.rst +0 -0
  61. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/items/overview.rst +0 -0
  62. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/items/reference.rst +0 -0
  63. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/mathutils/colormaps.rst +0 -0
  64. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/mathutils/geometry.rst +0 -0
  65. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/mathutils/index.rst +0 -0
  66. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/mathutils/scaler.rst +0 -0
  67. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/panels/index.rst +0 -0
  68. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/panels/overview.rst +0 -0
  69. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/panels/reference.rst +0 -0
  70. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/plot/examples.rst +0 -0
  71. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/plot/index.rst +0 -0
  72. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/plot/overview.rst +0 -0
  73. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/plot/reference.rst +0 -0
  74. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/pyplot.rst +0 -0
  75. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/resizedialog.rst +0 -0
  76. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/rotatecrop.rst +0 -0
  77. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/selectdialog.rst +0 -0
  78. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/signals.rst +0 -0
  79. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/styles/index.rst +0 -0
  80. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/styles/overview.rst +0 -0
  81. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/styles/reference.rst +0 -0
  82. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/tools/examples.rst +0 -0
  83. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/tools/index.rst +0 -0
  84. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/tools/overview.rst +0 -0
  85. {plotpy-2.7.2 → plotpy-2.7.4}/doc/features/tools/reference.rst +0 -0
  86. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/my_plot_manager.png +0 -0
  87. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/my_plot_manager.svg +0 -0
  88. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/panorama-vertical.png +0 -0
  89. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/panorama-vertical.svg +0 -0
  90. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/panorama.png +0 -0
  91. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/panorama.svg +0 -0
  92. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/plot_widgets.png +0 -0
  93. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/plot_widgets.svg +0 -0
  94. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/plotpy-banner.png +0 -0
  95. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/plotpy-vertical.png +0 -0
  96. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/__init__.png +0 -0
  97. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/computations.png +0 -0
  98. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/contrast.png +0 -0
  99. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/cross_section.png +0 -0
  100. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/cross_section2.png +0 -0
  101. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/dotarraydemo.png +0 -0
  102. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/filtertest1.png +0 -0
  103. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/filtertest2.png +0 -0
  104. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/fit.png +0 -0
  105. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/get_point.png +0 -0
  106. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/hist2d.png +0 -0
  107. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/image_plot_tools.png +0 -0
  108. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/imagefilter.png +0 -0
  109. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/imagesuperp.png +0 -0
  110. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/imagexy.png +0 -0
  111. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/manager.png +0 -0
  112. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/mandelbrot.png +0 -0
  113. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/pcolor.png +0 -0
  114. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/plot.png +0 -0
  115. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/simple_dialog.png +0 -0
  116. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/simple_window.png +0 -0
  117. {plotpy-2.7.2 → plotpy-2.7.4}/doc/images/screenshots/transform.png +0 -0
  118. {plotpy-2.7.2 → plotpy-2.7.4}/doc/index.rst +0 -0
  119. {plotpy-2.7.2 → plotpy-2.7.4}/doc/intro/examples.rst +0 -0
  120. {plotpy-2.7.2 → plotpy-2.7.4}/doc/intro/index.rst +0 -0
  121. {plotpy-2.7.2 → plotpy-2.7.4}/doc/intro/installation.rst +0 -0
  122. {plotpy-2.7.2 → plotpy-2.7.4}/doc/intro/licenses.rst +0 -0
  123. {plotpy-2.7.2 → plotpy-2.7.4}/doc/intro/motivation.rst +0 -0
  124. {plotpy-2.7.2 → plotpy-2.7.4}/doc/intro/overview.rst +0 -0
  125. {plotpy-2.7.2 → plotpy-2.7.4}/doc/requirements.rst +0 -0
  126. {plotpy-2.7.2 → plotpy-2.7.4}/doc/update_requirements.py +0 -0
  127. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/__init__.py +0 -0
  128. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/annotation.py +0 -0
  129. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/curvemarker.py +0 -0
  130. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/image.py +0 -0
  131. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/label.py +0 -0
  132. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/plot.py +0 -0
  133. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/builder/shape.py +0 -0
  134. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/config.py +0 -0
  135. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/constants.py +0 -0
  136. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/coords.py +0 -0
  137. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/colormaps_default.json +0 -0
  138. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/apply.png +0 -0
  139. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/arredit.png +0 -0
  140. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/arrow_down.png +0 -0
  141. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/arrow_up.png +0 -0
  142. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/autorefresh.png +0 -0
  143. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/autoscale.png +0 -0
  144. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/axes.png +0 -0
  145. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/busy.png +0 -0
  146. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/cell_edit.png +0 -0
  147. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/center.png +0 -0
  148. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/cmap_edit.png +0 -0
  149. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/contrast.png +0 -0
  150. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/copy.png +0 -0
  151. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/copytoclipboard.png +0 -0
  152. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csapplylut.png +0 -0
  153. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csautoscale.png +0 -0
  154. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csection.png +0 -0
  155. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csection_a.png +0 -0
  156. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csection_line.png +0 -0
  157. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csection_oblique.png +0 -0
  158. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/csperimage.png +0 -0
  159. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curve_downsample.png +0 -0
  160. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curvestyles/dots.png +0 -0
  161. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curvestyles/lines.png +0 -0
  162. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curvestyles/steps.png +0 -0
  163. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curvestyles/sticks.png +0 -0
  164. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curvetypes/xfy.png +0 -0
  165. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/curvetypes/yfx.png +0 -0
  166. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/delete.png +0 -0
  167. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/edit.png +0 -0
  168. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/edit_point_selection.png +0 -0
  169. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/edit.png +0 -0
  170. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/edit_add.png +0 -0
  171. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/editcopy.png +0 -0
  172. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/editdelete.png +0 -0
  173. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/editpaste.png +0 -0
  174. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/fileimport.png +0 -0
  175. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/filesave.png +0 -0
  176. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/imshow.png +0 -0
  177. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/insert.png +0 -0
  178. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/plot.png +0 -0
  179. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/editors/rename.png +0 -0
  180. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/eliminate_outliers.png +0 -0
  181. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/eraser.png +0 -0
  182. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/exit.png +0 -0
  183. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/expander_down.png +0 -0
  184. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/expander_right.png +0 -0
  185. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/export.png +0 -0
  186. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/file.png +0 -0
  187. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/fileclose.png +0 -0
  188. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/fileimport.png +0 -0
  189. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filenew.png +0 -0
  190. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/fileopen.png +0 -0
  191. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filesave.png +0 -0
  192. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filesaveas.png +0 -0
  193. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/doc.png +0 -0
  194. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/gif.png +0 -0
  195. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/html.png +0 -0
  196. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/jpg.png +0 -0
  197. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/pdf.png +0 -0
  198. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/png.png +0 -0
  199. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/pps.png +0 -0
  200. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/ps.png +0 -0
  201. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/tar.png +0 -0
  202. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/tgz.png +0 -0
  203. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/tif.png +0 -0
  204. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/txt.png +0 -0
  205. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/xls.png +0 -0
  206. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/filetypes/zip.png +0 -0
  207. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/font.png +0 -0
  208. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/full_range.png +0 -0
  209. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/funct.png +0 -0
  210. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/hcursor.png +0 -0
  211. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/hflip.png +0 -0
  212. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/imagestats.png +0 -0
  213. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/item_list.png +0 -0
  214. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/annotation.png +0 -0
  215. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/curve.png +0 -0
  216. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/errorbar.png +0 -0
  217. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/grid.png +0 -0
  218. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/histogram.png +0 -0
  219. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/histogram2d.png +0 -0
  220. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/image.png +0 -0
  221. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/label.png +0 -0
  222. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/legend.png +0 -0
  223. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/items/polygonmap.png +0 -0
  224. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/magnifier.png +0 -0
  225. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/cross.png +0 -0
  226. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/diamond.png +0 -0
  227. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/ellipse.png +0 -0
  228. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/hexagon.png +0 -0
  229. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/point.png +0 -0
  230. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/square.png +0 -0
  231. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/star.png +0 -0
  232. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/triangle_d.png +0 -0
  233. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/triangle_l.png +0 -0
  234. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/triangle_r.png +0 -0
  235. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/triangle_u.png +0 -0
  236. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markers/xcross.png +0 -0
  237. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markerstyles/cross_marker.png +0 -0
  238. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markerstyles/horiz_marker.png +0 -0
  239. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/markerstyles/vert_marker.png +0 -0
  240. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/mask/mask_circle.png +0 -0
  241. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/mask/mask_circle_outside.png +0 -0
  242. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/mask/mask_rectangle.png +0 -0
  243. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/mask/mask_rectangle_outside.png +0 -0
  244. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/mask/mask_tool.png +0 -0
  245. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/max.png +0 -0
  246. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/min.png +0 -0
  247. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/move.png +0 -0
  248. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/multipoint_selection.png +0 -0
  249. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/none.png +0 -0
  250. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/not_found.png +0 -0
  251. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/on_curve.png +0 -0
  252. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/bdiagpattern.png +0 -0
  253. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/crosspattern.png +0 -0
  254. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense1pattern.png +0 -0
  255. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense2pattern.png +0 -0
  256. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense3pattern.png +0 -0
  257. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense4pattern.png +0 -0
  258. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense5pattern.png +0 -0
  259. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense6pattern.png +0 -0
  260. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/dense7pattern.png +0 -0
  261. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/diagcrosspattern.png +0 -0
  262. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/fdiagpattern.png +0 -0
  263. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/horpattern.png +0 -0
  264. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/nobrush.png +0 -0
  265. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/solidpattern.png +0 -0
  266. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/patterns/verpattern.png +0 -0
  267. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/plotpy-banner.svg +0 -0
  268. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/plotpy-vertical.svg +0 -0
  269. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/plotpy.svg +0 -0
  270. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/point_selection.png +0 -0
  271. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/print.png +0 -0
  272. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/python.png +0 -0
  273. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/quickview.png +0 -0
  274. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/refresh.png +0 -0
  275. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/save_all.png +0 -0
  276. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/scales/lin_lin.png +0 -0
  277. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/scales/lin_log.png +0 -0
  278. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/scales/log_lin.png +0 -0
  279. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/scales/log_log.png +0 -0
  280. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/settings.png +0 -0
  281. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shape.png +0 -0
  282. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/circle.png +0 -0
  283. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/contour.png +0 -0
  284. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/ellipse_shape.png +0 -0
  285. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/gtaxes.png +0 -0
  286. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/marker.png +0 -0
  287. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/oblique_rectangle.png +0 -0
  288. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/point_shape.png +0 -0
  289. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/polygon.png +0 -0
  290. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/polyline.png +0 -0
  291. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/rectangle.png +0 -0
  292. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/shapes/segment.png +0 -0
  293. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/snapshot.png +0 -0
  294. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/styles/dash.png +0 -0
  295. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/styles/dashdot.png +0 -0
  296. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/styles/dashdotdot.png +0 -0
  297. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/styles/dot.png +0 -0
  298. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/styles/solid.png +0 -0
  299. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/trash.png +0 -0
  300. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/trimage_lock.png +0 -0
  301. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/trimage_unlock.png +0 -0
  302. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/vcursor.png +0 -0
  303. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/vflip.png +0 -0
  304. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/xcursor.png +0 -0
  305. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/xmax.png +0 -0
  306. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/xmin.png +0 -0
  307. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/xrange.png +0 -0
  308. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/data/icons/zlog.svg +0 -0
  309. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/events.py +0 -0
  310. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/__init__.py +0 -0
  311. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/__init__.py +0 -0
  312. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/_generic_range_slider.py +0 -0
  313. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/_generic_slider.py +0 -0
  314. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/_labeled.py +0 -0
  315. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/_misc.py +0 -0
  316. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/_range_style.py +0 -0
  317. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/external/sliders/_sliders.py +0 -0
  318. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/interfaces/__init__.py +0 -0
  319. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/interfaces/items.py +0 -0
  320. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/interfaces/panel.py +0 -0
  321. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/interfaces/plotmanager.py +0 -0
  322. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/io.py +0 -0
  323. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/__init__.py +0 -0
  324. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/annotation.py +0 -0
  325. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/contour.py +0 -0
  326. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/curve/__init__.py +0 -0
  327. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/curve/base.py +0 -0
  328. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/curve/errorbar.py +0 -0
  329. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/grid.py +0 -0
  330. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/histogram.py +0 -0
  331. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/__init__.py +0 -0
  332. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/image/masked.py +0 -0
  333. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/label.py +0 -0
  334. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/polygonmap.py +0 -0
  335. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/__init__.py +0 -0
  336. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/axis.py +0 -0
  337. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/base.py +0 -0
  338. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/ellipse.py +0 -0
  339. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/marker.py +0 -0
  340. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/point.py +0 -0
  341. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/polygon.py +0 -0
  342. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/range.py +0 -0
  343. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/rectangle.py +0 -0
  344. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/segment.py +0 -0
  345. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/items/shape/svg.py +0 -0
  346. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
  347. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/lutrange.py +0 -0
  348. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/mathutils/__init__.py +0 -0
  349. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/mathutils/arrayfuncs.py +0 -0
  350. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/mathutils/colormap.py +0 -0
  351. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/mathutils/geometry.py +0 -0
  352. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/mathutils/scaler.py +0 -0
  353. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/__init__.py +0 -0
  354. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/base.py +0 -0
  355. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/contrastadjustment.py +0 -0
  356. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/csection/__init__.py +0 -0
  357. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/csection/csitem.py +0 -0
  358. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/csection/cswidget.py +0 -0
  359. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/panels/itemlist.py +0 -0
  360. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/plot/__init__.py +0 -0
  361. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/plot/base.py +0 -0
  362. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/plot/interactive.py +0 -0
  363. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/plot/plotwidget.py +0 -0
  364. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/pyplot.py +0 -0
  365. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/__init__.py +0 -0
  366. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/axes.py +0 -0
  367. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/base.py +0 -0
  368. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/curve.py +0 -0
  369. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/errorbar.py +0 -0
  370. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/histogram.py +0 -0
  371. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/image.py +0 -0
  372. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/label.py +0 -0
  373. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/polygonmap.py +0 -0
  374. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/styles/shape.py +0 -0
  375. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/__init__.py +0 -0
  376. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/benchmarks/__init__.py +0 -0
  377. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/benchmarks/test_benchmarks.py +0 -0
  378. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/benchmarks/test_bigimages.py +0 -0
  379. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/benchmarks/test_loadtest.py +0 -0
  380. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/conftest.py +0 -0
  381. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/data/brain.png +0 -0
  382. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/data/brain_cylinder.png +0 -0
  383. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/data/mr-brain.dcm +0 -0
  384. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/data/svg_target.svg +0 -0
  385. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/data/svg_tool.svg +0 -0
  386. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/__init__.py +0 -0
  387. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_auto_curve_image.py +0 -0
  388. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_autoscale_shapes.py +0 -0
  389. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_builder.py +0 -0
  390. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_colormap_editor.py +0 -0
  391. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_colormap_manager.py +0 -0
  392. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_computations.py +0 -0
  393. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_contrast.py +0 -0
  394. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_cursors.py +0 -0
  395. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_dicom_image.py +0 -0
  396. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_image_coords.py +0 -0
  397. /plotpy-2.7.2/plotpy/tests/features/test_imagefilter.py → /plotpy-2.7.4/plotpy/tests/features/test_image_filter.py +0 -0
  398. /plotpy-2.7.2/plotpy/tests/features/test_imagesuperp.py → /plotpy-2.7.4/plotpy/tests/features/test_image_superp.py +0 -0
  399. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_loadsaveitems_hdf5.py +0 -0
  400. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_loadsaveitems_json.py +0 -0
  401. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_loadsaveitems_pickle.py +0 -0
  402. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_manager.py +0 -0
  403. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_no_auto_tools.py +0 -0
  404. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_plot_log.py +0 -0
  405. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_plot_types.py +0 -0
  406. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_plot_yreverse.py +0 -0
  407. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_pyplot.py +0 -0
  408. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/features/test_resize.py +0 -0
  409. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/__init__.py +0 -0
  410. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_annotations.py +0 -0
  411. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_curves.py +0 -0
  412. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_curves_highdpi.py +0 -0
  413. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_hist2d.py +0 -0
  414. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_histogram.py +0 -0
  415. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_image.py +0 -0
  416. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_image_contour.py +0 -0
  417. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_image_masked.py +0 -0
  418. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_image_masked_xy.py +0 -0
  419. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_image_rgb.py +0 -0
  420. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_image_xy.py +0 -0
  421. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_pcolor.py +0 -0
  422. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_polygons.py +0 -0
  423. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_svgshapes.py +0 -0
  424. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/items/test_transform.py +0 -0
  425. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/__init__.py +0 -0
  426. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_actiontool.py +0 -0
  427. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_cross_section.py +0 -0
  428. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_cross_section_line.py +0 -0
  429. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_cross_section_oblique.py +0 -0
  430. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_customize_shape_tool.py +0 -0
  431. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_cyclic_import.py +0 -0
  432. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_downsample_curve.py +0 -0
  433. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_edit_point.py +0 -0
  434. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_get_point.py +0 -0
  435. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_get_points.py +0 -0
  436. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_get_rectangle.py +0 -0
  437. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_get_rectangle_with_svg.py +0 -0
  438. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_get_segment.py +0 -0
  439. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_image_plot_tools.py +0 -0
  440. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_stats_tools.py +0 -0
  441. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/tools/test_zaxislog.py +0 -0
  442. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/__init__.py +0 -0
  443. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_annotation_tools.py +0 -0
  444. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_aspect_ratio_tool.py +0 -0
  445. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_baseplot.py +0 -0
  446. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_builder_annotation.py +0 -0
  447. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_builder_curve.py +0 -0
  448. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_builder_image.py +0 -0
  449. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_builder_shape.py +0 -0
  450. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_contour.py +0 -0
  451. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_cursor_tools.py +0 -0
  452. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_curve_tools.py +0 -0
  453. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_display_coords_tool.py +0 -0
  454. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_events.py +0 -0
  455. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_fontparam.py +0 -0
  456. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_geometry.py +0 -0
  457. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_io.py +0 -0
  458. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_line.py +0 -0
  459. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_line_cross_section_tool.py +0 -0
  460. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_manipulate_selection.py +0 -0
  461. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_mask_tool.py +0 -0
  462. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_multiline_tools.py +0 -0
  463. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_oblique_cross_section_tool.py +0 -0
  464. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_plot_curve.py +0 -0
  465. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_plot_image.py +0 -0
  466. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_rect_zoom.py +0 -0
  467. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_seg_dist.py +0 -0
  468. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_styles.py +0 -0
  469. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/test_tools_export.py +0 -0
  470. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/unit/utils.py +0 -0
  471. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/vistools.py +0 -0
  472. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/__init__.py +0 -0
  473. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_filtertest1.py +0 -0
  474. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_filtertest2.py +0 -0
  475. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_fliprotate.py +0 -0
  476. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_plot_timecurve.py +0 -0
  477. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_qtdesigner.py +0 -0
  478. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_qtdesigner.ui +0 -0
  479. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_resize_dialog.py +0 -0
  480. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_rotatecrop.py +0 -0
  481. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_simple_dialog.py +0 -0
  482. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_simple_window.py +0 -0
  483. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_syncplot.py +0 -0
  484. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tests/widgets/test_theme.py +0 -0
  485. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/__init__.py +0 -0
  486. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/annotation.py +0 -0
  487. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/axes.py +0 -0
  488. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/base.py +0 -0
  489. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/cross_section.py +0 -0
  490. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/cursor.py +0 -0
  491. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/curve.py +0 -0
  492. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/image.py +0 -0
  493. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/item.py +0 -0
  494. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/label.py +0 -0
  495. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/misc.py +0 -0
  496. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/tools/shape.py +0 -0
  497. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/__init__.py +0 -0
  498. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/about.py +0 -0
  499. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/basetransform.py +0 -0
  500. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/colormap/__init__.py +0 -0
  501. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/colormap/_slider.py +0 -0
  502. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/colormap/editor.py +0 -0
  503. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/colormap/manager.py +0 -0
  504. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/colormap/widget.py +0 -0
  505. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/fliprotate.py +0 -0
  506. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/imagefile.py +0 -0
  507. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/qtdesigner.py +0 -0
  508. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/resizedialog.py +0 -0
  509. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/rotatecrop.py +0 -0
  510. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy/widgets/selectdialog.py +0 -0
  511. {plotpy-2.7.2 → plotpy-2.7.4}/plotpy-tests.desktop +0 -0
  512. {plotpy-2.7.2 → plotpy-2.7.4}/pyproject.toml +0 -0
  513. {plotpy-2.7.2 → plotpy-2.7.4}/qtdesigner/plotplugin.py +0 -0
  514. {plotpy-2.7.2 → plotpy-2.7.4}/requirements.txt +0 -0
  515. {plotpy-2.7.2 → plotpy-2.7.4}/setup.cfg +0 -0
  516. {plotpy-2.7.2 → plotpy-2.7.4}/setup.py +0 -0
  517. {plotpy-2.7.2 → plotpy-2.7.4}/src/arrays.hpp +0 -0
  518. {plotpy-2.7.2 → plotpy-2.7.4}/src/debug.hpp +0 -0
  519. {plotpy-2.7.2 → plotpy-2.7.4}/src/histogram2d.pyx +0 -0
  520. {plotpy-2.7.2 → plotpy-2.7.4}/src/mandelbrot.pyx +0 -0
  521. {plotpy-2.7.2 → plotpy-2.7.4}/src/pcolor.cpp +0 -0
  522. {plotpy-2.7.2 → plotpy-2.7.4}/src/points.hpp +0 -0
  523. {plotpy-2.7.2 → plotpy-2.7.4}/src/scaler.cpp +0 -0
  524. {plotpy-2.7.2 → plotpy-2.7.4}/src/scaler.hpp +0 -0
  525. {plotpy-2.7.2 → plotpy-2.7.4}/src/traits.hpp +0 -0
@@ -1,5 +1,32 @@
1
1
  # Changelog #
2
2
 
3
+ ## Version 2.7.4 ##
4
+
5
+ In this release, test coverage is 80%.
6
+
7
+ 🛠️ Bug fixes:
8
+
9
+ * [Issue #42](https://github.com/PlotPyStack/PlotPy/issues/42) - Image profiles: when moving/resizing image, profile plots are not refreshed
10
+ * [Issue #41](https://github.com/PlotPyStack/PlotPy/issues/41) - Average profile visualization: empty profile is displayed when the target rectangular area is outside the image area
11
+
12
+ ## Version 2.7.3 ##
13
+
14
+ In this release, test coverage is 80%.
15
+
16
+ 🛠️ Bug fixes:
17
+
18
+ * [Issue #40](https://github.com/PlotPyStack/PlotPy/issues/40) - Z-axis logarithmic scale (`ZAxisLogTool` tool) is not compatible with anti-aliasing interpolation
19
+ * Fix intersection check for destination rectangle in `XYImageFilterItem`
20
+ * [Issue #36](https://github.com/PlotPyStack/PlotPy/issues/36) - Image items are not properly scaling along Y-axis with logarithmic scale:
21
+ * Actually, image items do not support non-linear scales (this is an historical limitation)
22
+ * This is not documented at all, so we've added an explicit warning: a red colored message is displayed at the center of the image frame when any non-linear scale is applied to either X or Y axis
23
+ * When dealing with non-linear scales, PlotPy provides an alternative solution: the user may rely on `XYImageItem` (e.g. by using `make.xyimage`) as this item supports arbitrary X and Y pixel coordinates
24
+ * [Issue #34](https://github.com/PlotPyStack/PlotPy/issues/34) - `ValueError` when trying to plot 2D histogram items with `PyQt6`
25
+
26
+ Other changes:
27
+
28
+ * Replace deprecated icon files with new SVG icons for selection tools
29
+
3
30
  ## Version 2.7.2 ##
4
31
 
5
32
  🛠️ Bug fixes:
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: PlotPy
3
- Version: 2.7.2
3
+ Version: 2.7.4
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
@@ -83,6 +83,7 @@ Requires-Dist: python-docs-theme; extra == "doc"
83
83
  Provides-Extra: test
84
84
  Requires-Dist: pytest; extra == "test"
85
85
  Requires-Dist: pytest-xvfb; extra == "test"
86
+ Dynamic: license-file
86
87
 
87
88
  # PlotPy: Curve and image plotting tools for Python/Qt applications
88
89
 
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: PlotPy
3
- Version: 2.7.2
3
+ Version: 2.7.4
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
@@ -83,6 +83,7 @@ Requires-Dist: python-docs-theme; extra == "doc"
83
83
  Provides-Extra: test
84
84
  Requires-Dist: pytest; extra == "test"
85
85
  Requires-Dist: pytest-xvfb; extra == "test"
86
+ Dynamic: license-file
86
87
 
87
88
  # PlotPy: Curve and image plotting tools for Python/Qt applications
88
89
 
@@ -184,10 +184,10 @@ plotpy/data/icons/point_selection.png
184
184
  plotpy/data/icons/print.png
185
185
  plotpy/data/icons/python.png
186
186
  plotpy/data/icons/quickview.png
187
- plotpy/data/icons/rectangular_select.png
188
187
  plotpy/data/icons/refresh.png
189
188
  plotpy/data/icons/save_all.png
190
- plotpy/data/icons/selection.png
189
+ plotpy/data/icons/select.svg
190
+ plotpy/data/icons/select_area.svg
191
191
  plotpy/data/icons/settings.png
192
192
  plotpy/data/icons/shape.png
193
193
  plotpy/data/icons/snapshot.png
@@ -388,12 +388,13 @@ plotpy/tests/features/test_colormap_manager.py
388
388
  plotpy/tests/features/test_computations.py
389
389
  plotpy/tests/features/test_contrast.py
390
390
  plotpy/tests/features/test_cursors.py
391
+ plotpy/tests/features/test_data_update_curve.py
392
+ plotpy/tests/features/test_data_update_image.py
391
393
  plotpy/tests/features/test_dicom_image.py
392
394
  plotpy/tests/features/test_fit.py
393
395
  plotpy/tests/features/test_image_coords.py
394
- plotpy/tests/features/test_image_data_update.py
395
- plotpy/tests/features/test_imagefilter.py
396
- plotpy/tests/features/test_imagesuperp.py
396
+ plotpy/tests/features/test_image_filter.py
397
+ plotpy/tests/features/test_image_superp.py
397
398
  plotpy/tests/features/test_loadsaveitems_hdf5.py
398
399
  plotpy/tests/features/test_loadsaveitems_json.py
399
400
  plotpy/tests/features/test_loadsaveitems_pickle.py
@@ -20,7 +20,7 @@ External resources:
20
20
  .. _GitHub: https://github.com/PierreRaybaut/plotpy
21
21
  """
22
22
 
23
- __version__ = "2.7.2"
23
+ __version__ = "2.7.4"
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
@@ -0,0 +1,49 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+
4
+ <svg
5
+ width="800px"
6
+ height="800px"
7
+ viewBox="0 0 16 16"
8
+ version="1.1"
9
+ id="svg1"
10
+ sodipodi:docname="selection.svg"
11
+ inkscape:version="1.4 (86a8ad7, 2024-10-11)"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg">
16
+ <defs
17
+ id="defs1" />
18
+ <sodipodi:namedview
19
+ id="namedview1"
20
+ pagecolor="#ffffff"
21
+ bordercolor="#000000"
22
+ borderopacity="0.25"
23
+ inkscape:showpageshadow="2"
24
+ inkscape:pageopacity="0.0"
25
+ inkscape:pagecheckerboard="0"
26
+ inkscape:deskcolor="#d1d1d1"
27
+ inkscape:zoom="0.71329397"
28
+ inkscape:cx="270.57568"
29
+ inkscape:cy="428.29466"
30
+ inkscape:window-width="1920"
31
+ inkscape:window-height="1009"
32
+ inkscape:window-x="-8"
33
+ inkscape:window-y="-8"
34
+ inkscape:window-maximized="1"
35
+ inkscape:current-layer="svg1" />
36
+ <g
37
+ id="g1"
38
+ transform="matrix(0.88784428,0,0,0.88784428,0.95332363,0.89724577)">
39
+ <path
40
+ fill="#444444"
41
+ d="M 5,2.6 10.75,9 H 8.29 l 0.63,1.41 1.8,4 -0.91,0.34 -1.88,-4.3 -0.5,-1.11 -1,0.71 L 5,11.07 Z M 4,0 V 13 L 7,10.86 9.26,16 12.06,15 9.83,10 H 13 Z"
42
+ id="path1" />
43
+ <path
44
+ style="fill:#ffffff;stroke-width:1.19165;stroke-linecap:square;stroke-dashoffset:1.1932"
45
+ d="m 490.09419,734.12823 c -0.67954,-1.27167 -22.05472,-49.94327 -47.5004,-108.1591 C 396.26003,519.9646 373.2364,468.10145 371.93278,466.79782 c -0.38275,-0.38274 -27.76081,18.58526 -60.84013,42.15111 l -60.14422,42.847 -0.35938,-105.321 c -0.19767,-57.92657 -0.19767,-152.31589 0,-209.75406 l 0.35938,-104.43303 142.0959,158.16753 142.09589,158.16752 -60.4325,0.36537 c -33.23788,0.20097 -60.43252,0.88758 -60.43252,1.52581 0,0.63824 4.6488,11.51415 10.33066,24.16869 5.68185,12.65455 32.44633,72.21658 59.47659,132.36009 27.03027,60.1435 49.35142,110.20446 49.60256,111.24657 0.31025,1.28737 -6.40508,4.50021 -20.94934,10.02285 -18.97837,7.20633 -21.54607,7.86591 -22.64148,5.81596 z"
46
+ id="path2"
47
+ transform="scale(0.02)" />
48
+ </g>
49
+ </svg>
@@ -0,0 +1,63 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
3
+
4
+ <svg
5
+ width="800px"
6
+ height="800px"
7
+ viewBox="0 0 16 16"
8
+ version="1.1"
9
+ id="svg2"
10
+ sodipodi:docname="select_area.svg"
11
+ inkscape:version="1.4 (86a8ad7, 2024-10-11)"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
14
+ xmlns="http://www.w3.org/2000/svg"
15
+ xmlns:svg="http://www.w3.org/2000/svg">
16
+ <defs
17
+ id="defs2" />
18
+ <sodipodi:namedview
19
+ id="namedview2"
20
+ pagecolor="#ffffff"
21
+ bordercolor="#000000"
22
+ borderopacity="0.25"
23
+ inkscape:showpageshadow="2"
24
+ inkscape:pageopacity="0.0"
25
+ inkscape:pagecheckerboard="true"
26
+ inkscape:deskcolor="#d1d1d1"
27
+ inkscape:zoom="0.71329397"
28
+ inkscape:cx="278.28639"
29
+ inkscape:cy="361.00123"
30
+ inkscape:window-width="1920"
31
+ inkscape:window-height="1009"
32
+ inkscape:window-x="-8"
33
+ inkscape:window-y="-8"
34
+ inkscape:window-maximized="1"
35
+ inkscape:current-layer="svg2" />
36
+ <path
37
+ style="fill:#ffffff;stroke-width:0.920918;stroke-linecap:square;stroke-dasharray:1.8096, 1.2064"
38
+ d="M 2.3167695,2.4490864 V 2.7494641 3.0516405 3.3592128 3.6595906 H 2.9211222 V 3.3592128 3.0516405 H 4.428407 4.7305834 V 2.4490864 H 4.428407 2.9211222 2.6189458 Z m 3.0163681,0 V 3.0516405 H 5.6353139 7.4447742 7.7469505 V 2.4490864 H 7.4447742 5.6353139 Z m 3.0163671,0 v 0.6025541 h 0.3021764 1.8094619 0.300378 V 2.4490864 H 10.461143 8.6516811 Z m 3.0163683,0 v 0.6025541 h 0.300378 1.366989 v 0.1420947 h 0.602554 V 2.8915589 2.4490864 h -1.969543 z m 1.667367,1.347203 v 0.3021763 1.809461 0.3021763 h 0.602554 V 5.9079267 4.0984657 3.7962894 Z M 2.3167695,4.2639433 V 4.5643209 6.3755806 6.6759583 H 2.9211222 V 6.3755806 4.5643209 4.2639433 Z M 13.03324,6.8126572 v 0.3021763 1.8094609 0.3003778 h 0.602554 V 8.9242944 7.1148335 6.8126572 Z M 2.3167695,7.2803111 V 7.5806888 9.3901502 9.6923266 H 2.9211222 V 9.3901502 7.5806888 7.2803111 Z m 0,3.0145679 v 0.302177 1.647581 h 0.7662327 0.3021764 v -0.604353 h -0.3021764 -0.16188 v -1.043228 -0.302177 z m 1.6709633,1.345405 v 0.604353 H 4.2899091 6.0993703 6.4015466 V 11.640284 H 6.0993703 4.2899091 Z"
39
+ id="path4-4"
40
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
41
+ <path
42
+ style="fill:#ffffff;stroke-linecap:square;stroke-dasharray:1.965, 1.31;fill-opacity:0.60000002"
43
+ d="M 2.1589979,2.3552702 H 13.795154 V 12.337129 H 2.1589979 Z"
44
+ id="path3" />
45
+ <path
46
+ style="fill:#444444;stroke-linecap:square;stroke-dasharray:1.965, 1.31"
47
+ d="m 1.8307733,2.0285024 v 0.3261719 0.328125 0.3339843 0.326172 h 0.65625 V 3.0167836 2.6827993 H 4.123742 4.451867 V 2.0285024 H 4.123742 2.4870233 2.1588983 Z m 3.2753906,0 v 0.6542969 h 0.328125 1.9648437 0.328125 V 2.0285024 H 7.3991326 5.4342889 Z m 3.2753906,0 v 0.6542969 h 0.328125 1.9648435 0.326172 V 2.0285024 H 10.674523 8.7096795 Z m 3.2753905,0 v 0.6542969 h 0.326172 1.484375 v 0.1542968 h 0.654297 V 2.5089711 2.0285024 h -2.138672 z m 1.810547,1.4628907 v 0.3281249 1.9648438 0.328125 h 0.654297 V 5.7843618 3.819518 3.4913931 Z M 1.8307733,3.9992055 v 0.3261718 1.966797 0.3261719 h 0.65625 V 6.2921743 4.3253773 3.9992055 Z M 13.467492,6.7667837 v 0.328125 1.9648437 0.3261719 h 0.654297 V 9.0597524 7.0949087 6.7667837 Z M 1.8307733,7.2745962 v 0.3261719 1.9648442 0.328125 h 0.65625 V 9.5656123 7.6007681 7.2745962 Z m 0,3.2734368 v 0.328125 1.789063 h 0.8320312 0.328125 v -0.65625 H 2.6628045 2.4870233 v -1.132813 -0.328125 z m 1.8144531,1.460938 v 0.65625 h 0.328125 1.9648437 0.328125 v -0.65625 H 5.9381951 3.9733514 Z"
48
+ id="path4"
49
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
50
+ <g
51
+ id="g2"
52
+ transform="matrix(0.70442294,0,0,0.70442294,4.554049,4.547731)">
53
+ <path
54
+ fill="#444444"
55
+ d="M 5,2.6 10.75,9 H 8.29 l 0.63,1.41 1.8,4 -0.91,0.34 -1.88,-4.3 -0.5,-1.11 -1,0.71 L 5,11.07 Z M 4,0 V 13 L 7,10.86 9.26,16 12.06,15 9.83,10 H 13 Z"
56
+ id="path1-0" />
57
+ <path
58
+ style="fill:#ffffff;stroke-width:1.19165;stroke-linecap:square;stroke-dashoffset:1.1932"
59
+ d="m 490.09419,734.12823 c -0.67954,-1.27167 -22.05472,-49.94327 -47.5004,-108.1591 C 396.26003,519.9646 373.2364,468.10145 371.93278,466.79782 c -0.38275,-0.38274 -27.76081,18.58526 -60.84013,42.15111 l -60.14422,42.847 -0.35938,-105.321 c -0.19767,-57.92657 -0.19767,-152.31589 0,-209.75406 l 0.35938,-104.43303 142.0959,158.16753 142.09589,158.16752 -60.4325,0.36537 c -33.23788,0.20097 -60.43252,0.88758 -60.43252,1.52581 0,0.63824 4.6488,11.51415 10.33066,24.16869 5.68185,12.65455 32.44633,72.21658 59.47659,132.36009 27.03027,60.1435 49.35142,110.20446 49.60256,111.24657 0.31025,1.28737 -6.40508,4.50021 -20.94934,10.02285 -18.97837,7.20633 -21.54607,7.86591 -22.64148,5.81596 z"
60
+ id="path2-9"
61
+ transform="scale(0.02)" />
62
+ </g>
63
+ </svg>
@@ -14,7 +14,7 @@ from guidata.dataset import update_dataset
14
14
  from guidata.utils.misc import assert_interfaces_valid
15
15
  from qtpy import QtCore as QC
16
16
  from qtpy import QtGui as QG
17
- from qwt import QwtPlotItem
17
+ from qwt import QwtLinearScaleEngine, QwtPlotItem
18
18
 
19
19
  from plotpy import io
20
20
  from plotpy._scaler import (
@@ -55,6 +55,7 @@ if TYPE_CHECKING:
55
55
  from qtpy.QtGui import QColor, QPainter
56
56
 
57
57
  from plotpy.interfaces import IItemType
58
+ from plotpy.plot import BasePlot
58
59
  from plotpy.styles.base import ItemParameters
59
60
  from plotpy.widgets.colormap.widget import EditableColormap
60
61
 
@@ -215,15 +216,18 @@ class BaseImageItem(QwtPlotItem):
215
216
  return i, j
216
217
 
217
218
  def get_closest_index_rect(
218
- self, x0: float, y0: float, x1: float, y1: float
219
+ self, x0: float, y0: float, x1: float, y1: float, avoid_empty: bool = True
219
220
  ) -> tuple[int, int, int, int]:
220
- """Get closest image rectangular pixel area index bounds
221
+ """Get closest image rectangular pixel area index bounds, optionally
222
+ avoid returning an empty rectangular area (return at least 1x1 pixel area)
221
223
 
222
224
  Args:
223
225
  x0: X coordinate of first point
224
226
  y0: Y coordinate of first point
225
227
  x1: X coordinate of second point
226
228
  y1: Y coordinate of second point
229
+ avoid_empty: True to avoid returning an empty rectangular area.
230
+ Defaults to True.
227
231
 
228
232
  Returns:
229
233
  Closest image rectangular pixel area index bounds
@@ -239,9 +243,9 @@ class BaseImageItem(QwtPlotItem):
239
243
  ix1, ix0 = ix0, ix1
240
244
  if iy0 > iy1:
241
245
  iy1, iy0 = iy0, iy1
242
- if ix0 == ix1:
246
+ if ix0 == ix1 and avoid_empty:
243
247
  ix1 += 1
244
- if iy0 == iy1:
248
+ if iy0 == iy1 and avoid_empty:
245
249
  iy1 += 1
246
250
  return ix0, iy0, ix1, iy1
247
251
 
@@ -582,6 +586,29 @@ class BaseImageItem(QwtPlotItem):
582
586
  """
583
587
  self.border_rect.draw(painter, xMap, yMap, canvasRect)
584
588
 
589
+ def warn_if_non_linear_scale(self, painter: QPainter, canvasRect: QRectF) -> bool:
590
+ """Warn if non-linear scale
591
+
592
+ Args:
593
+ painter: Painter
594
+ canvasRect: Canvas rectangle
595
+
596
+ Returns:
597
+ True if non-linear scale
598
+ """
599
+ plot: BasePlot = self.plot()
600
+ if not isinstance(
601
+ plot.axisScaleEngine(plot.X_BOTTOM), QwtLinearScaleEngine
602
+ ) or not isinstance(plot.axisScaleEngine(plot.Y_LEFT), QwtLinearScaleEngine):
603
+ painter.setPen(QC.Qt.red)
604
+ painter.drawText(
605
+ canvasRect,
606
+ QC.Qt.AlignCenter,
607
+ _("Non-linear scales are not supported for image items"),
608
+ )
609
+ return True
610
+ return False
611
+
585
612
  def draw_image(
586
613
  self,
587
614
  painter: QPainter,
@@ -601,6 +628,8 @@ class BaseImageItem(QwtPlotItem):
601
628
  xMap: X axis scale map
602
629
  yMap: Y axis scale map
603
630
  """
631
+ if self.warn_if_non_linear_scale(painter, canvasRect):
632
+ return
604
633
  dest = _scale_rect(
605
634
  self.data, src_rect, self._offscreen, dst_rect, self.lut, self.interpolate
606
635
  )
@@ -1057,7 +1086,9 @@ class BaseImageItem(QwtPlotItem):
1057
1086
  Returns:
1058
1087
  Average cross section along x-axis
1059
1088
  """
1060
- ix0, iy0, ix1, iy1 = self.get_closest_index_rect(x0, y0, x1, y1)
1089
+ ix0, iy0, ix1, iy1 = self.get_closest_index_rect(
1090
+ x0, y0, x1, y1, avoid_empty=False
1091
+ )
1061
1092
  ydata = self.data[iy0:iy1, ix0:ix1]
1062
1093
  if ydata.size == 0:
1063
1094
  return np.array([]), np.array([])
@@ -1082,7 +1113,9 @@ class BaseImageItem(QwtPlotItem):
1082
1113
  Returns:
1083
1114
  Average cross section along y-axis
1084
1115
  """
1085
- ix0, iy0, ix1, iy1 = self.get_closest_index_rect(x0, y0, x1, y1)
1116
+ ix0, iy0, ix1, iy1 = self.get_closest_index_rect(
1117
+ x0, y0, x1, y1, avoid_empty=False
1118
+ )
1086
1119
  ydata = self.data[iy0:iy1, ix0:ix1]
1087
1120
  if ydata.size == 0:
1088
1121
  return np.array([]), np.array([])
@@ -313,7 +313,7 @@ class XYImageFilterItem(ImageFilterItem):
313
313
  j0, j1 = int(yMap.transform(y0)), int(yMap.transform(y1))
314
314
 
315
315
  dstRect = QC.QRect(i0, j0, i1 - i0, j1 - j0)
316
- if not dstRect.intersects(canvasRect):
316
+ if not dstRect.intersects(canvasRect.toAlignedRect()):
317
317
  return
318
318
 
319
319
  x, y, data = self.image.get_data(x0, y0, x1, y1)
@@ -11,6 +11,7 @@ from guidata.utils.misc import assert_interfaces_valid
11
11
  from qtpy import QtCore as QC
12
12
 
13
13
  from plotpy import io
14
+ from plotpy._scaler import INTERP_AA
14
15
  from plotpy.config import _
15
16
  from plotpy.constants import LUTAlpha
16
17
  from plotpy.coords import canvas_to_axes, pixelround
@@ -241,9 +242,13 @@ class ImageItem(RawImageItem):
241
242
  if self._log_data is None:
242
243
  self._log_data = np.array(np.log10(self.data.clip(1)), dtype=np.float64)
243
244
  self.set_lut_range(get_nan_range(self._log_data))
245
+ dtype = self._log_data.dtype
244
246
  else:
245
247
  self._log_data = None
246
248
  self.set_lut_range(self._lin_lut_range)
249
+ dtype = self.data.dtype
250
+ if self.interpolate[0] == INTERP_AA:
251
+ self.interpolate = (INTERP_AA, self.interpolate[1].astype(dtype))
247
252
  plot.update_colormap_axis(self)
248
253
 
249
254
  # ---- BaseImageItem API ---------------------------------------------------
@@ -376,6 +381,9 @@ class ImageItem(RawImageItem):
376
381
  """
377
382
  if self.data is None:
378
383
  return
384
+ if self.warn_if_non_linear_scale(painter, canvasRect):
385
+ return
386
+
379
387
  src2 = self._rescale_src_rect(src_rect)
380
388
  dst_rect = tuple([int(i) for i in dst_rect])
381
389
 
@@ -651,6 +659,8 @@ class XYImageItem(RawImageItem):
651
659
  xMap: X axis scale map
652
660
  yMap: Y axis scale map
653
661
  """
662
+ if self.warn_if_non_linear_scale(painter, canvasRect):
663
+ return
654
664
  xytr = self.x, self.y, src_rect
655
665
  dst_rect = tuple([int(i) for i in dst_rect])
656
666
  dest = _scale_xy(
@@ -39,7 +39,7 @@ except ImportError:
39
39
  file=sys.stderr,
40
40
  )
41
41
  print(
42
- ("try running :" "python setup.py build_ext --inplace -c mingw32"),
42
+ ("try running: python setup.py build_ext --inplace"),
43
43
  file=sys.stderr,
44
44
  )
45
45
  raise
@@ -169,6 +169,8 @@ class QuadGridItem(RawImageItem):
169
169
  xMap: X axis scale map
170
170
  yMap: Y axis scale map
171
171
  """
172
+ if self.warn_if_non_linear_scale(painter, canvasRect):
173
+ return
172
174
  self._offscreen[...] = np.uint32(0)
173
175
  dest = _scale_quads(
174
176
  self.X,
@@ -294,6 +296,8 @@ class Histogram2DItem(BaseImageItem):
294
296
  xMap: X axis scale map
295
297
  yMap: Y axis scale map
296
298
  """
299
+ if self.warn_if_non_linear_scale(painter, canvasRect):
300
+ return
297
301
  computation = self.histparam.computation
298
302
  i1, j1, i2, j2 = src_rect
299
303
 
@@ -340,7 +344,7 @@ class Histogram2DItem(BaseImageItem):
340
344
  return BaseImageItem.draw_image(self, *args)
341
345
 
342
346
  if self.fill_canvas:
343
- x1, y1, x2, y2 = canvasRect.getCoords()
347
+ x1, y1, x2, y2 = canvasRect.toAlignedRect().getCoords()
344
348
  drawfunc(painter, canvasRect, src_rect, (x1, y1, x2, y2), xMap, yMap)
345
349
  else:
346
350
  dst_rect = tuple([int(i) for i in dst_rect])
@@ -257,6 +257,8 @@ class TrImageItem(RawImageItem):
257
257
  xMap: X axis scale map
258
258
  yMap: Y axis scale map
259
259
  """
260
+ if self.warn_if_non_linear_scale(painter, canvasRect):
261
+ return
260
262
  W = canvasRect.width()
261
263
  H = canvasRect.height()
262
264
  if W <= 1 or H <= 1:
@@ -231,6 +231,7 @@ class BaseCrossSectionPlot(BasePlot):
231
231
  self.do_autoscale(replot=False, axis_id=self.Z_AXIS)
232
232
  vmin, vmax = plot.get_axis_limits(self.CS_AXIS)
233
233
  self.set_axis_limits(self.CS_AXIS, vmin, vmax)
234
+ self.replot()
234
235
 
235
236
  def is_shape_known(self, shape: Any) -> bool:
236
237
  """Return whether shape is known
@@ -13,49 +13,6 @@ from qtpy import QtWidgets as QW
13
13
  from plotpy.constants import ID_CONTRAST, ID_ITEMLIST, ID_XCS, ID_YCS
14
14
  from plotpy.interfaces import IPlotManager
15
15
  from plotpy.plot import BasePlot
16
- from plotpy.tools import (
17
- AboutTool,
18
- AnnotatedCircleTool,
19
- AnnotatedEllipseTool,
20
- AnnotatedObliqueRectangleTool,
21
- AnnotatedPointTool,
22
- AnnotatedRectangleTool,
23
- AnnotatedSegmentTool,
24
- AntiAliasingTool,
25
- AspectRatioTool,
26
- AverageCrossSectionTool,
27
- AxisScaleTool,
28
- BasePlotMenuTool,
29
- ColormapTool,
30
- ContrastPanelTool,
31
- CopyToClipboardTool,
32
- CrossSectionTool,
33
- CurveStatsTool,
34
- DeleteItemTool,
35
- DisplayCoordsTool,
36
- DoAutoscaleTool,
37
- DownSamplingTool,
38
- DummySeparatorTool,
39
- EditItemDataTool,
40
- ExportItemDataTool,
41
- HelpTool,
42
- ImageStatsTool,
43
- ItemCenterTool,
44
- ItemListPanelTool,
45
- LabelTool,
46
- PrintTool,
47
- RectangularSelectionTool,
48
- RectZoomTool,
49
- ReverseColormapTool,
50
- ReverseXAxisTool,
51
- ReverseYAxisTool,
52
- SaveAsTool,
53
- SelectTool,
54
- SnapshotTool,
55
- XCSPanelTool,
56
- YCSPanelTool,
57
- ZAxisLogTool,
58
- )
59
16
 
60
17
  if TYPE_CHECKING:
61
18
  from typing import Callable
@@ -241,12 +198,16 @@ class PlotManager:
241
198
  Args:
242
199
  toolbar_id: toolbar's id (default to None)
243
200
  """
201
+ # This avoids circular imports (see Issue #39)
202
+ # pylint: disable=import-outside-toplevel
203
+ import plotpy.tools as tools
204
+
244
205
  if toolbar_id is None:
245
206
  for _id, toolbar in list(self.toolbars.items()):
246
207
  if toolbar is self.get_default_toolbar():
247
208
  toolbar_id = _id
248
209
  break
249
- self.add_tool(DummySeparatorTool, toolbar_id)
210
+ self.add_tool(tools.DummySeparatorTool, toolbar_id)
250
211
 
251
212
  def set_default_tool(self, tool: GuiTool) -> None:
252
213
  """
@@ -547,22 +508,26 @@ class PlotManager:
547
508
  Registering basic tools for standard plot dialog
548
509
  --> top of the context-menu
549
510
  """
550
- t = self.add_tool(SelectTool)
511
+ # This avoids circular imports (see Issue #39)
512
+ # pylint: disable=import-outside-toplevel
513
+ import plotpy.tools as tools
514
+
515
+ t = self.add_tool(tools.SelectTool)
551
516
  self.set_default_tool(t)
552
- self.add_tool(RectangularSelectionTool, intersect=False)
553
- self.add_tool(RectZoomTool)
554
- self.add_tool(DoAutoscaleTool)
555
- self.add_tool(BasePlotMenuTool, "item")
556
- self.add_tool(ExportItemDataTool)
557
- self.add_tool(EditItemDataTool)
558
- self.add_tool(ItemCenterTool)
559
- self.add_tool(DeleteItemTool)
517
+ self.add_tool(tools.RectangularSelectionTool, intersect=False)
518
+ self.add_tool(tools.RectZoomTool)
519
+ self.add_tool(tools.DoAutoscaleTool)
520
+ self.add_tool(tools.BasePlotMenuTool, "item")
521
+ self.add_tool(tools.ExportItemDataTool)
522
+ self.add_tool(tools.EditItemDataTool)
523
+ self.add_tool(tools.ItemCenterTool)
524
+ self.add_tool(tools.DeleteItemTool)
560
525
  self.add_separator_tool()
561
- self.add_tool(BasePlotMenuTool, "grid")
562
- self.add_tool(BasePlotMenuTool, "axes")
563
- self.add_tool(DisplayCoordsTool)
526
+ self.add_tool(tools.BasePlotMenuTool, "grid")
527
+ self.add_tool(tools.BasePlotMenuTool, "axes")
528
+ self.add_tool(tools.DisplayCoordsTool)
564
529
  if self.get_itemlist_panel():
565
- self.add_tool(ItemListPanelTool)
530
+ self.add_tool(tools.ItemListPanelTool)
566
531
 
567
532
  def register_curve_tools(self) -> None:
568
533
  """
@@ -580,10 +545,14 @@ class PlotManager:
580
545
 
581
546
  :py:meth:`.plot.manager.PlotManager.register_all_tools`
582
547
  """
583
- self.add_tool(CurveStatsTool)
584
- self.add_tool(AntiAliasingTool)
585
- self.add_tool(AxisScaleTool)
586
- self.add_tool(DownSamplingTool)
548
+ # This avoids circular imports (see Issue #39)
549
+ # pylint: disable=import-outside-toplevel
550
+ import plotpy.tools as tools
551
+
552
+ self.add_tool(tools.CurveStatsTool)
553
+ self.add_tool(tools.AntiAliasingTool)
554
+ self.add_tool(tools.AxisScaleTool)
555
+ self.add_tool(tools.DownSamplingTool)
587
556
 
588
557
  def register_image_tools(self) -> None:
589
558
  """
@@ -601,21 +570,25 @@ class PlotManager:
601
570
 
602
571
  :py:meth:`.plot.manager.PlotManager.register_all_tools`
603
572
  """
604
- self.add_tool(ColormapTool)
605
- self.add_tool(ReverseColormapTool)
606
- self.add_tool(ReverseXAxisTool)
607
- self.add_tool(ReverseYAxisTool)
608
- self.add_tool(ZAxisLogTool)
609
- self.add_tool(AspectRatioTool)
573
+ # This avoids circular imports (see Issue #39)
574
+ # pylint: disable=import-outside-toplevel
575
+ import plotpy.tools as tools
576
+
577
+ self.add_tool(tools.ColormapTool)
578
+ self.add_tool(tools.ReverseColormapTool)
579
+ self.add_tool(tools.ReverseXAxisTool)
580
+ self.add_tool(tools.ReverseYAxisTool)
581
+ self.add_tool(tools.ZAxisLogTool)
582
+ self.add_tool(tools.AspectRatioTool)
610
583
  if self.get_contrast_panel():
611
- self.add_tool(ContrastPanelTool)
612
- self.add_tool(SnapshotTool)
613
- self.add_tool(ImageStatsTool)
584
+ self.add_tool(tools.ContrastPanelTool)
585
+ self.add_tool(tools.SnapshotTool)
586
+ self.add_tool(tools.ImageStatsTool)
614
587
  if self.get_xcs_panel() and self.get_ycs_panel():
615
- self.add_tool(XCSPanelTool)
616
- self.add_tool(YCSPanelTool)
617
- self.add_tool(CrossSectionTool)
618
- self.add_tool(AverageCrossSectionTool)
588
+ self.add_tool(tools.XCSPanelTool)
589
+ self.add_tool(tools.YCSPanelTool)
590
+ self.add_tool(tools.CrossSectionTool)
591
+ self.add_tool(tools.AverageCrossSectionTool)
619
592
 
620
593
  def register_other_tools(self) -> None:
621
594
  """
@@ -633,11 +606,15 @@ class PlotManager:
633
606
 
634
607
  :py:meth:`.plot.manager.PlotManager.register_all_tools`
635
608
  """
636
- self.add_tool(SaveAsTool)
637
- self.add_tool(CopyToClipboardTool)
638
- self.add_tool(PrintTool)
639
- self.add_tool(HelpTool)
640
- self.add_tool(AboutTool)
609
+ # This avoids circular imports (see Issue #39)
610
+ # pylint: disable=import-outside-toplevel
611
+ import plotpy.tools as tools
612
+
613
+ self.add_tool(tools.SaveAsTool)
614
+ self.add_tool(tools.CopyToClipboardTool)
615
+ self.add_tool(tools.PrintTool)
616
+ self.add_tool(tools.HelpTool)
617
+ self.add_tool(tools.AboutTool)
641
618
 
642
619
  def register_all_curve_tools(self) -> None:
643
620
  """
@@ -732,23 +709,31 @@ class PlotManager:
732
709
  """
733
710
  Register all annotation tools for the plot
734
711
  """
712
+ # This avoids circular imports (see Issue #39)
713
+ # pylint: disable=import-outside-toplevel
714
+ import plotpy.tools as tools
715
+
735
716
  self.add_separator_tool()
736
- self.add_tool(AnnotatedPointTool)
737
- self.add_tool(AnnotatedSegmentTool)
738
- self.add_tool(AnnotatedRectangleTool)
739
- self.add_tool(AnnotatedObliqueRectangleTool)
740
- self.add_tool(AnnotatedCircleTool)
741
- self.add_tool(AnnotatedEllipseTool)
742
- self.add_tool(LabelTool)
717
+ self.add_tool(tools.AnnotatedPointTool)
718
+ self.add_tool(tools.AnnotatedSegmentTool)
719
+ self.add_tool(tools.AnnotatedRectangleTool)
720
+ self.add_tool(tools.AnnotatedObliqueRectangleTool)
721
+ self.add_tool(tools.AnnotatedCircleTool)
722
+ self.add_tool(tools.AnnotatedEllipseTool)
723
+ self.add_tool(tools.LabelTool)
743
724
 
744
725
  def register_curve_annotation_tools(self) -> None:
745
726
  """
746
727
  Register all curve friendly annotation tools for the plot
747
728
  """
729
+ # This avoids circular imports (see Issue #39)
730
+ # pylint: disable=import-outside-toplevel
731
+ import plotpy.tools as tools
732
+
748
733
  self.add_separator_tool()
749
- self.add_tool(AnnotatedPointTool)
750
- self.add_tool(AnnotatedSegmentTool)
751
- self.add_tool(LabelTool)
734
+ self.add_tool(tools.AnnotatedPointTool)
735
+ self.add_tool(tools.AnnotatedSegmentTool)
736
+ self.add_tool(tools.LabelTool)
752
737
 
753
738
  def register_image_annotation_tools(self) -> None:
754
739
  """