PlotPy 2.0.1__tar.gz → 2.0.2__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 (469) hide show
  1. {PlotPy-2.0.1 → PlotPy-2.0.2}/PKG-INFO +1 -1
  2. {PlotPy-2.0.1 → PlotPy-2.0.2}/PlotPy.egg-info/PKG-INFO +1 -1
  3. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/__init__.py +1 -1
  4. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/interfaces/items.py +9 -5
  5. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/histogram.py +29 -6
  6. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/base.py +10 -4
  7. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/misc.py +10 -4
  8. PlotPy-2.0.2/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
  9. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/contrastadjustment.py +31 -19
  10. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/csection/csitem.py +0 -8
  11. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/plot/base.py +11 -4
  12. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/histogram.py +43 -23
  13. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_manager.py +21 -0
  14. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_mandelbrot.py +19 -13
  15. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_simple_window.py +60 -23
  16. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/misc.py +1 -1
  17. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/contour2d.c +96 -96
  18. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/histogram2d.c +97 -97
  19. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/mandelbrot.c +97 -97
  20. PlotPy-2.0.1/plotpy/locale/fr/LC_MESSAGES/plotpy.mo +0 -0
  21. {PlotPy-2.0.1 → PlotPy-2.0.2}/LICENSE +0 -0
  22. {PlotPy-2.0.1 → PlotPy-2.0.2}/MANIFEST.in +0 -0
  23. {PlotPy-2.0.1 → PlotPy-2.0.2}/PlotPy.egg-info/SOURCES.txt +0 -0
  24. {PlotPy-2.0.1 → PlotPy-2.0.2}/PlotPy.egg-info/dependency_links.txt +0 -0
  25. {PlotPy-2.0.1 → PlotPy-2.0.2}/PlotPy.egg-info/entry_points.txt +0 -0
  26. {PlotPy-2.0.1 → PlotPy-2.0.2}/PlotPy.egg-info/requires.txt +0 -0
  27. {PlotPy-2.0.1 → PlotPy-2.0.2}/PlotPy.egg-info/top_level.txt +0 -0
  28. {PlotPy-2.0.1 → PlotPy-2.0.2}/README.md +0 -0
  29. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/_static/favicon.ico +0 -0
  30. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/changelog.rst +0 -0
  31. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/conf.py +0 -0
  32. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/build.rst +0 -0
  33. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/contribute.rst +0 -0
  34. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/guiqwt_to_plotpy.csv +0 -0
  35. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/guiqwt_to_plotpy.rst +0 -0
  36. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/index.rst +0 -0
  37. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/platforms.rst +0 -0
  38. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/v1_to_v2.csv +0 -0
  39. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/dev/v1_to_v2.rst +0 -0
  40. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/fit.rst +0 -0
  41. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/fliprotate.rst +0 -0
  42. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/imagefile.rst +0 -0
  43. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/index.rst +0 -0
  44. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/io.rst +0 -0
  45. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/items/builder.rst +0 -0
  46. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/items/examples.rst +0 -0
  47. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/items/index.rst +0 -0
  48. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/items/overview.rst +0 -0
  49. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/items/reference.rst +0 -0
  50. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/mathutils/colormap.rst +0 -0
  51. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/mathutils/geometry.rst +0 -0
  52. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/mathutils/index.rst +0 -0
  53. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/mathutils/scaler.rst +0 -0
  54. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/panels/index.rst +0 -0
  55. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/panels/overview.rst +0 -0
  56. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/panels/reference.rst +0 -0
  57. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/plot/examples.rst +0 -0
  58. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/plot/index.rst +0 -0
  59. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/plot/overview.rst +0 -0
  60. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/plot/reference.rst +0 -0
  61. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/pyplot.rst +0 -0
  62. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/resizedialog.rst +0 -0
  63. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/rotatecrop.rst +0 -0
  64. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/selectdialog.rst +0 -0
  65. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/signals.rst +0 -0
  66. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/styles/index.rst +0 -0
  67. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/styles/overview.rst +0 -0
  68. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/styles/reference.rst +0 -0
  69. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/tools/examples.rst +0 -0
  70. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/tools/index.rst +0 -0
  71. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/tools/overview.rst +0 -0
  72. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/features/tools/reference.rst +0 -0
  73. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/my_plot_manager.png +0 -0
  74. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/my_plot_manager.svg +0 -0
  75. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/panorama.png +0 -0
  76. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/panorama.svg +0 -0
  77. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/plot_widgets.png +0 -0
  78. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/plot_widgets.svg +0 -0
  79. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/plotpy-banner.png +0 -0
  80. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/plotpy-vertical.png +0 -0
  81. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/__init__.png +0 -0
  82. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/computations.png +0 -0
  83. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/contrast.png +0 -0
  84. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/cross_section.png +0 -0
  85. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/cross_section2.png +0 -0
  86. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/dotarraydemo.png +0 -0
  87. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/filtertest1.png +0 -0
  88. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/filtertest2.png +0 -0
  89. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/fit.png +0 -0
  90. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/get_point.png +0 -0
  91. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/hist2d.png +0 -0
  92. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/image_plot_tools.png +0 -0
  93. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/imagefilter.png +0 -0
  94. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/imagesuperp.png +0 -0
  95. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/imagexy.png +0 -0
  96. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/manager.png +0 -0
  97. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/mandelbrot.png +0 -0
  98. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/pcolor.png +0 -0
  99. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/plot.png +0 -0
  100. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/simple_dialog.png +0 -0
  101. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/simple_window.png +0 -0
  102. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/images/screenshots/transform.png +0 -0
  103. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/index.rst +0 -0
  104. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/intro/examples.rst +0 -0
  105. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/intro/index.rst +0 -0
  106. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/intro/installation.rst +0 -0
  107. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/intro/licenses.rst +0 -0
  108. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/intro/motivation.rst +0 -0
  109. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/intro/overview.rst +0 -0
  110. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/requirements.rst +0 -0
  111. {PlotPy-2.0.1 → PlotPy-2.0.2}/doc/update_requirements.py +0 -0
  112. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/__init__.py +0 -0
  113. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/annotation.py +0 -0
  114. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/curvemarker.py +0 -0
  115. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/image.py +0 -0
  116. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/label.py +0 -0
  117. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/plot.py +0 -0
  118. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/builder/shape.py +0 -0
  119. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/config.py +0 -0
  120. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/constants.py +0 -0
  121. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/coords.py +0 -0
  122. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/events.py +0 -0
  123. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/apply.png +0 -0
  124. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/arredit.png +0 -0
  125. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/arrow_down.png +0 -0
  126. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/arrow_up.png +0 -0
  127. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/autorefresh.png +0 -0
  128. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/autoscale.png +0 -0
  129. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/axes.png +0 -0
  130. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/busy.png +0 -0
  131. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/cell_edit.png +0 -0
  132. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/center.png +0 -0
  133. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/contrast.png +0 -0
  134. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/copy.png +0 -0
  135. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/copytoclipboard.png +0 -0
  136. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/csapplylut.png +0 -0
  137. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/csautoscale.png +0 -0
  138. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/csection.png +0 -0
  139. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/csection_a.png +0 -0
  140. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/csection_oblique.png +0 -0
  141. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/csperimage.png +0 -0
  142. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/curvestyles/dots.png +0 -0
  143. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/curvestyles/lines.png +0 -0
  144. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/curvestyles/steps.png +0 -0
  145. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/curvestyles/sticks.png +0 -0
  146. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/curvetypes/xfy.png +0 -0
  147. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/curvetypes/yfx.png +0 -0
  148. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/delete.png +0 -0
  149. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/edit.png +0 -0
  150. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/edit.png +0 -0
  151. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/edit_add.png +0 -0
  152. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/editcopy.png +0 -0
  153. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/editdelete.png +0 -0
  154. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/editpaste.png +0 -0
  155. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/fileimport.png +0 -0
  156. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/filesave.png +0 -0
  157. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/imshow.png +0 -0
  158. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/insert.png +0 -0
  159. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/plot.png +0 -0
  160. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/editors/rename.png +0 -0
  161. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/eliminate_outliers.png +0 -0
  162. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/eraser.png +0 -0
  163. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/exit.png +0 -0
  164. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/expander_down.png +0 -0
  165. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/expander_right.png +0 -0
  166. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/export.png +0 -0
  167. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/file.png +0 -0
  168. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/fileclose.png +0 -0
  169. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/fileimport.png +0 -0
  170. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filenew.png +0 -0
  171. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/fileopen.png +0 -0
  172. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filesave.png +0 -0
  173. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filesaveas.png +0 -0
  174. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/doc.png +0 -0
  175. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/gif.png +0 -0
  176. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/html.png +0 -0
  177. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/jpg.png +0 -0
  178. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/pdf.png +0 -0
  179. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/png.png +0 -0
  180. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/pps.png +0 -0
  181. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/ps.png +0 -0
  182. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/tar.png +0 -0
  183. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/tgz.png +0 -0
  184. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/tif.png +0 -0
  185. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/txt.png +0 -0
  186. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/xls.png +0 -0
  187. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/filetypes/zip.png +0 -0
  188. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/font.png +0 -0
  189. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/full_range.png +0 -0
  190. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/funct.png +0 -0
  191. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/hcursor.png +0 -0
  192. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/hflip.png +0 -0
  193. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/imagestats.png +0 -0
  194. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/item_list.png +0 -0
  195. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/annotation.png +0 -0
  196. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/curve.png +0 -0
  197. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/errorbar.png +0 -0
  198. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/grid.png +0 -0
  199. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/histogram.png +0 -0
  200. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/histogram2d.png +0 -0
  201. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/image.png +0 -0
  202. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/label.png +0 -0
  203. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/items/legend.png +0 -0
  204. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/magnifier.png +0 -0
  205. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/cross.png +0 -0
  206. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/diamond.png +0 -0
  207. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/ellipse.png +0 -0
  208. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/hexagon.png +0 -0
  209. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/point.png +0 -0
  210. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/square.png +0 -0
  211. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/star.png +0 -0
  212. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/triangle_d.png +0 -0
  213. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/triangle_l.png +0 -0
  214. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/triangle_r.png +0 -0
  215. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/triangle_u.png +0 -0
  216. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markers/xcross.png +0 -0
  217. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markerstyles/cross_marker.png +0 -0
  218. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markerstyles/horiz_marker.png +0 -0
  219. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/markerstyles/vert_marker.png +0 -0
  220. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/mask/mask_circle.png +0 -0
  221. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/mask/mask_circle_outside.png +0 -0
  222. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/mask/mask_rectangle.png +0 -0
  223. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/mask/mask_rectangle_outside.png +0 -0
  224. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/mask/mask_tool.png +0 -0
  225. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/max.png +0 -0
  226. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/min.png +0 -0
  227. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/move.png +0 -0
  228. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/none.png +0 -0
  229. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/not_found.png +0 -0
  230. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/on_curve.png +0 -0
  231. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/bdiagpattern.png +0 -0
  232. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/crosspattern.png +0 -0
  233. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense1pattern.png +0 -0
  234. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense2pattern.png +0 -0
  235. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense3pattern.png +0 -0
  236. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense4pattern.png +0 -0
  237. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense5pattern.png +0 -0
  238. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense6pattern.png +0 -0
  239. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/dense7pattern.png +0 -0
  240. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/diagcrosspattern.png +0 -0
  241. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/fdiagpattern.png +0 -0
  242. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/horpattern.png +0 -0
  243. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/nobrush.png +0 -0
  244. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/solidpattern.png +0 -0
  245. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/patterns/verpattern.png +0 -0
  246. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/plotpy-banner.svg +0 -0
  247. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/plotpy-vertical.svg +0 -0
  248. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/plotpy.svg +0 -0
  249. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/point_selection.png +0 -0
  250. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/print.png +0 -0
  251. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/python.png +0 -0
  252. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/quickview.png +0 -0
  253. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/rectangular_select.png +0 -0
  254. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/refresh.png +0 -0
  255. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/save_all.png +0 -0
  256. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/scales/lin_lin.png +0 -0
  257. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/scales/lin_log.png +0 -0
  258. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/scales/log_lin.png +0 -0
  259. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/scales/log_log.png +0 -0
  260. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/selection.png +0 -0
  261. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/settings.png +0 -0
  262. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shape.png +0 -0
  263. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/circle.png +0 -0
  264. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/contour.png +0 -0
  265. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/ellipse_shape.png +0 -0
  266. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/freeform.png +0 -0
  267. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/gtaxes.png +0 -0
  268. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/marker.png +0 -0
  269. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/oblique_rectangle.png +0 -0
  270. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/point_shape.png +0 -0
  271. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/polyline.png +0 -0
  272. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/rectangle.png +0 -0
  273. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/shapes/segment.png +0 -0
  274. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/snapshot.png +0 -0
  275. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/styles/dash.png +0 -0
  276. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/styles/dashdot.png +0 -0
  277. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/styles/dashdotdot.png +0 -0
  278. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/styles/dot.png +0 -0
  279. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/styles/solid.png +0 -0
  280. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/trash.png +0 -0
  281. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/trimage_lock.png +0 -0
  282. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/trimage_unlock.png +0 -0
  283. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/vcursor.png +0 -0
  284. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/vflip.png +0 -0
  285. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/xcursor.png +0 -0
  286. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/xmax.png +0 -0
  287. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/xmin.png +0 -0
  288. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/images/xrange.png +0 -0
  289. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/interfaces/__init__.py +0 -0
  290. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/interfaces/panel.py +0 -0
  291. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/interfaces/plotmanager.py +0 -0
  292. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/io.py +0 -0
  293. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/__init__.py +0 -0
  294. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/annotation.py +0 -0
  295. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/contour.py +0 -0
  296. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/curve/__init__.py +0 -0
  297. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/curve/base.py +0 -0
  298. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/curve/errorbar.py +0 -0
  299. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/grid.py +0 -0
  300. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/__init__.py +0 -0
  301. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/filter.py +0 -0
  302. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/image_items.py +0 -0
  303. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/masked.py +0 -0
  304. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/image/transform.py +0 -0
  305. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/label.py +0 -0
  306. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/polygon.py +0 -0
  307. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/__init__.py +0 -0
  308. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/axis.py +0 -0
  309. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/base.py +0 -0
  310. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/ellipse.py +0 -0
  311. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/marker.py +0 -0
  312. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/point.py +0 -0
  313. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/polygon.py +0 -0
  314. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/range.py +0 -0
  315. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/rectangle.py +0 -0
  316. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/segment.py +0 -0
  317. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/items/shape/svg.py +0 -0
  318. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/lutrange.py +0 -0
  319. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/mathutils/__init__.py +0 -0
  320. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/mathutils/_cm.py +0 -0
  321. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/mathutils/arrayfuncs.py +0 -0
  322. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/mathutils/colormap.py +0 -0
  323. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/mathutils/geometry.py +0 -0
  324. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/mathutils/scaler.py +0 -0
  325. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/__init__.py +0 -0
  326. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/base.py +0 -0
  327. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/csection/__init__.py +0 -0
  328. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/csection/csplot.py +0 -0
  329. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/csection/cswidget.py +0 -0
  330. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/panels/itemlist.py +0 -0
  331. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/plot/__init__.py +0 -0
  332. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/plot/interactive.py +0 -0
  333. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/plot/manager.py +0 -0
  334. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/plot/plotwidget.py +0 -0
  335. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/pyplot.py +0 -0
  336. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/__init__.py +0 -0
  337. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/axes.py +0 -0
  338. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/base.py +0 -0
  339. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/curve.py +0 -0
  340. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/errorbar.py +0 -0
  341. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/image.py +0 -0
  342. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/label.py +0 -0
  343. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/styles/shape.py +0 -0
  344. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/__init__.py +0 -0
  345. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/benchmarks/__init__.py +0 -0
  346. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/benchmarks/test_benchmarks.py +0 -0
  347. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/benchmarks/test_bigimages.py +0 -0
  348. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/benchmarks/test_loadtest.py +0 -0
  349. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/conftest.py +0 -0
  350. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/data/brain.png +0 -0
  351. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/data/brain_cylinder.png +0 -0
  352. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/data/mr-brain.dcm +0 -0
  353. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/data/svg_target.svg +0 -0
  354. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/data/svg_tool.svg +0 -0
  355. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/data.py +0 -0
  356. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/__init__.py +0 -0
  357. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_auto_curve_image.py +0 -0
  358. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_autoscale_shapes.py +0 -0
  359. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_builder.py +0 -0
  360. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_computations.py +0 -0
  361. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_contrast.py +0 -0
  362. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_cursors.py +0 -0
  363. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_dicom_image.py +0 -0
  364. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_fit.py +0 -0
  365. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_image_coords.py +0 -0
  366. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_imagefilter.py +0 -0
  367. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_imagesuperp.py +0 -0
  368. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_loadsaveitems_hdf5.py +0 -0
  369. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_loadsaveitems_json.py +0 -0
  370. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_loadsaveitems_pickle.py +0 -0
  371. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_no_auto_tools.py +0 -0
  372. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_plot_log.py +0 -0
  373. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_plot_types.py +0 -0
  374. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_plot_yreverse.py +0 -0
  375. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_pyplot.py +0 -0
  376. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/features/test_resize.py +0 -0
  377. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/__init__.py +0 -0
  378. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_annotations.py +0 -0
  379. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_curves.py +0 -0
  380. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_hist2d.py +0 -0
  381. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_histogram.py +0 -0
  382. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_image.py +0 -0
  383. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_image_contour.py +0 -0
  384. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_image_masked.py +0 -0
  385. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_image_masked_xy.py +0 -0
  386. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_image_rgb.py +0 -0
  387. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_image_xy.py +0 -0
  388. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_pcolor.py +0 -0
  389. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_polygons.py +0 -0
  390. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_svgshapes.py +0 -0
  391. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/items/test_transform.py +0 -0
  392. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/__init__.py +0 -0
  393. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_actiontool.py +0 -0
  394. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_cross_section.py +0 -0
  395. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_cross_section_oblique.py +0 -0
  396. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_customize_shape_tool.py +0 -0
  397. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_get_point.py +0 -0
  398. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_get_rectangle.py +0 -0
  399. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_get_rectangle_with_svg.py +0 -0
  400. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_get_segment.py +0 -0
  401. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/tools/test_image_plot_tools.py +0 -0
  402. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/__init__.py +0 -0
  403. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_baseplot.py +0 -0
  404. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_builder_annotation.py +0 -0
  405. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_builder_curve.py +0 -0
  406. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_builder_image.py +0 -0
  407. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_builder_shape.py +0 -0
  408. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_contour.py +0 -0
  409. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_fontparam.py +0 -0
  410. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_geometry.py +0 -0
  411. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_highprecisionxy.py +0 -0
  412. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_io.py +0 -0
  413. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_line.py +0 -0
  414. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_plot_curve.py +0 -0
  415. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_plot_image.py +0 -0
  416. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_seg_dist.py +0 -0
  417. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_styles.py +0 -0
  418. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/unit/test_tools_export.py +0 -0
  419. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/vistools.py +0 -0
  420. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/__init__.py +0 -0
  421. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_dotarraydemo.py +0 -0
  422. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_filtertest1.py +0 -0
  423. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_filtertest2.py +0 -0
  424. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_fliprotate.py +0 -0
  425. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_plot_timecurve.py +0 -0
  426. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_qtdesigner.py +0 -0
  427. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_qtdesigner.ui +0 -0
  428. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_resize_dialog.py +0 -0
  429. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_rotatecrop.py +0 -0
  430. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_simple_dialog.py +0 -0
  431. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tests/widgets/test_syncplot.py +0 -0
  432. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/__init__.py +0 -0
  433. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/annotation.py +0 -0
  434. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/axes.py +0 -0
  435. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/base.py +0 -0
  436. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/cross_section.py +0 -0
  437. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/cursor.py +0 -0
  438. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/curve.py +0 -0
  439. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/image.py +0 -0
  440. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/item.py +0 -0
  441. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/label.py +0 -0
  442. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/plot.py +0 -0
  443. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/selection.py +0 -0
  444. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/tools/shape.py +0 -0
  445. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/__init__.py +0 -0
  446. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/about.py +0 -0
  447. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/basetransform.py +0 -0
  448. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/fit.py +0 -0
  449. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/fliprotate.py +0 -0
  450. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/imagefile.py +0 -0
  451. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/qtdesigner.py +0 -0
  452. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/resizedialog.py +0 -0
  453. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/rotatecrop.py +0 -0
  454. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy/widgets/selectdialog.py +0 -0
  455. {PlotPy-2.0.1 → PlotPy-2.0.2}/plotpy-tests.desktop +0 -0
  456. {PlotPy-2.0.1 → PlotPy-2.0.2}/pyproject.toml +0 -0
  457. {PlotPy-2.0.1 → PlotPy-2.0.2}/qtdesigner/plotplugin.py +0 -0
  458. {PlotPy-2.0.1 → PlotPy-2.0.2}/setup.cfg +0 -0
  459. {PlotPy-2.0.1 → PlotPy-2.0.2}/setup.py +0 -0
  460. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/arrays.hpp +0 -0
  461. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/contour2d.pyx +0 -0
  462. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/debug.hpp +0 -0
  463. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/histogram2d.pyx +0 -0
  464. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/mandelbrot.pyx +0 -0
  465. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/pcolor.cpp +0 -0
  466. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/points.hpp +0 -0
  467. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/scaler.cpp +0 -0
  468. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/scaler.hpp +0 -0
  469. {PlotPy-2.0.1 → PlotPy-2.0.2}/src/traits.hpp +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PlotPy
3
- Version: 2.0.1
3
+ Version: 2.0.2
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PlotPy
3
- Version: 2.0.1
3
+ Version: 2.0.2
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
@@ -20,7 +20,7 @@ External resources:
20
20
  .. _GitHub: https://github.com/PierreRaybaut/plotpy
21
21
  """
22
22
 
23
- __version__ = "2.0.1"
23
+ __version__ = "2.0.2"
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
@@ -489,20 +489,24 @@ class IBaseImageItem:
489
489
 
490
490
 
491
491
  class IHistDataSource:
492
- def get_histogram(self, nbins: int) -> tuple[np.ndarray, np.ndarray]:
492
+ def get_histogram(
493
+ self, nbins: int, drange: tuple[float, float] | None = None
494
+ ) -> tuple[np.ndarray, np.ndarray]:
493
495
  """
494
496
  Return a tuple (hist, bins) where hist is a list of histogram values
495
497
 
496
498
  Args:
497
- nbins (int): number of bins
499
+ nbins: number of bins
500
+ drange: lower and upper range of the bins. If not provided, range is
501
+ simply (data.min(), data.max()). Values outside the range are ignored.
498
502
 
499
503
  Returns:
500
- tuple: (hist, bins)
504
+ Tuple (hist, bins)
501
505
 
502
506
  Example of implementation:
503
507
 
504
- def get_histogram(self, nbins):
508
+ def get_histogram(self, nbins, drange=None):
505
509
  data = self.get_data()
506
- return np.histogram(data, nbins)
510
+ return np.histogram(data, bins=nbins, range=drange)
507
511
  """
508
512
  pass
@@ -38,17 +38,21 @@ class HistDataSource:
38
38
  def __init__(self, data: np.ndarray) -> None:
39
39
  self.data = data
40
40
 
41
- def get_histogram(self, nbins: int) -> tuple[np.ndarray, np.ndarray]:
41
+ def get_histogram(
42
+ self, nbins: int, drange: tuple[float, float] | None = None
43
+ ) -> tuple[np.ndarray, np.ndarray]:
42
44
  """
43
45
  Return a tuple (hist, bins) where hist is a list of histogram values
44
46
 
45
47
  Args:
46
- nbins (int): number of bins
48
+ nbins: number of bins
49
+ drange: lower and upper range of the bins. If not provided, range is
50
+ simply (data.min(), data.max()). Values outside the range are ignored.
47
51
 
48
52
  Returns:
49
- tuple: (hist, bins)
53
+ Tuple (hist, bins)
50
54
  """
51
- return np.histogram(self.data, nbins)
55
+ return np.histogram(self.data, bins=nbins, range=drange)
52
56
 
53
57
 
54
58
  assert_interfaces_valid(HistDataSource)
@@ -73,6 +77,7 @@ class HistogramItem(CurveItem):
73
77
  self.hist_count = None
74
78
  self.hist_bins = None
75
79
  self.bins = None
80
+ self.bin_range = None
76
81
  self.old_bins = None
77
82
  self.source: BaseImageItem | None = None
78
83
  self.logscale: bool | None = None
@@ -157,20 +162,38 @@ class HistogramItem(CurveItem):
157
162
  """
158
163
  return self.bins
159
164
 
165
+ def set_bin_range(self, bin_range: tuple[float, float] | None) -> None:
166
+ """Sets the range of the bins
167
+
168
+ Args:
169
+ bin_range: (min, max) or None for automatic range
170
+ """
171
+ self.bin_range = bin_range
172
+ self.update_histogram()
173
+
174
+ def get_bin_range(self) -> tuple[float, float] | None:
175
+ """Returns the range of the bins
176
+
177
+ Returns:
178
+ tuple: (min, max)
179
+ """
180
+ return self.bin_range
181
+
160
182
  def compute_histogram(self) -> tuple[np.ndarray, np.ndarray]:
161
183
  """Compute histogram data
162
184
 
163
185
  Returns:
164
186
  tuple: (hist, bins)
165
187
  """
166
- return self.get_hist_source().get_histogram(self.bins)
188
+ return self.get_hist_source().get_histogram(self.bins, self.bin_range)
167
189
 
168
190
  def update_histogram(self) -> None:
169
191
  """Update histogram data"""
170
192
  if self.get_hist_source() is None:
171
193
  return
172
194
  hist, bin_edges = self.compute_histogram()
173
- hist = np.concatenate((hist, [0]))
195
+ # Duplicate the first `hist` value to get a step-like histogram:
196
+ hist = np.concatenate(([hist[0]], hist))
174
197
  if self.logscale:
175
198
  hist = np.log(hist + 1)
176
199
 
@@ -946,22 +946,28 @@ class BaseImageItem(QwtPlotItem):
946
946
  """
947
947
  return False
948
948
 
949
- def get_histogram(self, nbins: int) -> tuple[np.ndarray, np.ndarray]:
949
+ def get_histogram(
950
+ self, nbins: int, drange: tuple[float, float] | None = None
951
+ ) -> tuple[np.ndarray, np.ndarray]:
950
952
  """
951
953
  Return a tuple (hist, bins) where hist is a list of histogram values
952
954
 
953
955
  Args:
954
- nbins (int): number of bins
956
+ nbins: number of bins
957
+ drange: lower and upper range of the bins. If not provided, range is
958
+ simply (data.min(), data.max()). Values outside the range are ignored.
955
959
 
956
960
  Returns:
957
- tuple: (hist, bins)
961
+ Tuple (hist, bins)
958
962
  """
959
963
  if self.data is None:
960
964
  return [0], [0, 1]
961
965
  if self.histogram_cache is None or nbins != self.histogram_cache[0].shape[0]:
962
966
  if True:
963
967
  # Note: np.histogram does not accept data with NaN
964
- res = np.histogram(self.data[~np.isnan(self.data)], nbins)
968
+ res = np.histogram(
969
+ self.data[~np.isnan(self.data)], bins=nbins, range=drange
970
+ )
965
971
  else:
966
972
  # TODO: _histogram is faster, but caching is buggy in this version
967
973
  _min, _max = get_nan_range(self.data)
@@ -405,20 +405,26 @@ class Histogram2DItem(BaseImageItem):
405
405
  """
406
406
  return True
407
407
 
408
- def get_histogram(self, nbins: int) -> tuple[np.ndarray, np.ndarray]:
408
+ def get_histogram(
409
+ self, nbins: int, drange: tuple[float, float] | None = None
410
+ ) -> tuple[np.ndarray, np.ndarray]:
409
411
  """
410
412
  Return a tuple (hist, bins) where hist is a list of histogram values
411
413
 
412
414
  Args:
413
- nbins (int): number of bins
415
+ nbins: number of bins
416
+ drange: lower and upper range of the bins. If not provided, range is
417
+ simply (data.min(), data.max()). Values outside the range are ignored.
414
418
 
415
419
  Returns:
416
- tuple: (hist, bins)
420
+ Tuple (hist, bins)
417
421
  """
418
422
  if self.data is None:
419
423
  return [0], [0, 1]
420
424
  _min, _max = get_nan_range(self.data)
421
- if self.data.dtype in (np.float64, np.float32):
425
+ if drange is not None:
426
+ bins = np.linspace(drange[0], drange[1], nbins + 1)
427
+ elif self.data.dtype in (np.float64, np.float32):
422
428
  bins = np.unique(
423
429
  np.array(np.linspace(_min, _max, nbins + 1), dtype=self.data.dtype)
424
430
  )
@@ -19,6 +19,7 @@ from __future__ import annotations
19
19
 
20
20
  from typing import TYPE_CHECKING
21
21
 
22
+ import numpy as np
22
23
  from guidata.configtools import get_icon, get_image_layout
23
24
  from guidata.dataset import DataSet, FloatItem
24
25
  from guidata.qthelpers import add_actions, create_action
@@ -37,7 +38,7 @@ from plotpy.styles import CurveParam, HistogramParam
37
38
  from plotpy.tools import AntiAliasingTool, BasePlotMenuTool, SelectPointTool, SelectTool
38
39
 
39
40
  if TYPE_CHECKING: # pragma: no cover
40
- from collections.abc import Callable
41
+ from collections.abc import Callable, Generator
41
42
 
42
43
  from qtpy.QtWidgets import QWidget
43
44
 
@@ -65,14 +66,10 @@ class LevelsHistogram(BasePlot):
65
66
  self.antialiased = False
66
67
 
67
68
  # a dict of dict : plot -> selected items -> HistogramItem
68
- self._tracked_items: dict[BasePlot, dict[BaseImageItem, CurveItem]] = {}
69
+ self._tracked_items: dict[BasePlot, dict[BaseImageItem, HistogramItem]] = {}
69
70
  self.param = CurveParam(_("Curve"), icon="curve.png")
70
71
  self.param.read_config(CONF, "histogram", "curve")
71
72
 
72
- self.histparam = HistogramParam(_("Histogram"), icon="histogram.png")
73
- self.histparam.logscale = False
74
- self.histparam.n_bins = 256
75
-
76
73
  self.range = XRangeSelection(0, 1)
77
74
  self.range_mono_color = self.range.shapeparam.sel_line.color
78
75
  self.range_multi_color = CONF.get("histogram", "range/multi/color", "red")
@@ -103,11 +100,13 @@ class LevelsHistogram(BasePlot):
103
100
  plot.SIG_ITEM_REMOVED.connect(self.item_removed)
104
101
  plot.SIG_ACTIVE_ITEM_CHANGED.connect(self.active_item_changed)
105
102
 
106
- def tracked_items_gen(self) -> tuple[BaseImageItem, CurveItem]:
103
+ def tracked_items_gen(
104
+ self,
105
+ ) -> Generator[tuple[BaseImageItem, HistogramItem], None, None]:
107
106
  """Generator of tracked items"""
108
- for plot, items in list(self._tracked_items.items()):
109
- for item in list(items.items()):
110
- yield item # tuple item,curve
107
+ for _plot, items in list(self._tracked_items.items()):
108
+ for item_curve_tuple in list(items.items()):
109
+ yield item_curve_tuple # tuple item,curve
111
110
 
112
111
  def __del_known_items(self, known_items: dict, items: list) -> None:
113
112
  """Delete known items
@@ -129,7 +128,9 @@ class LevelsHistogram(BasePlot):
129
128
  Args:
130
129
  plot: plot whose selection changed
131
130
  """
132
- items = plot.get_selected_items(item_type=IVoiImageItemType)
131
+ items: list[BaseImageItem] = plot.get_selected_items(
132
+ item_type=IVoiImageItemType
133
+ )
133
134
  known_items = self._tracked_items.setdefault(plot, {})
134
135
 
135
136
  if items:
@@ -153,13 +154,10 @@ class LevelsHistogram(BasePlot):
153
154
 
154
155
  for item in items:
155
156
  if item not in known_items:
156
- imin, imax = item.get_lut_range_full()
157
- delta = int(float(imax) - float(imin))
158
- if delta > 0 and delta < 256:
159
- self.histparam.n_bins = delta
160
- else:
161
- self.histparam.n_bins = 256
162
- curve = HistogramItem(self.param, self.histparam, keep_weakref=True)
157
+ histparam = HistogramParam(_("Histogram"), icon="histogram.png")
158
+ histparam.logscale = False
159
+ histparam.n_bins = 256
160
+ curve = HistogramItem(self.param, histparam, keep_weakref=True)
163
161
  curve.set_hist_source(item)
164
162
  self.add_item(curve, z=0)
165
163
  known_items[item] = curve
@@ -170,8 +168,18 @@ class LevelsHistogram(BasePlot):
170
168
  return
171
169
  self.param.shade = 1.0 / nb_selected
172
170
  for item, curve in self.tracked_items_gen():
171
+ if np.issubdtype(item.data.dtype, np.integer):
172
+ # For integer data, we use the full range of data type
173
+ info = np.iinfo(item.data.dtype)
174
+ curve.histparam.bin_min = info.min
175
+ curve.histparam.bin_max = info.max
176
+ curve.histparam.n_bins = min(info.max - info.min + 1, 256)
177
+ else:
178
+ curve.histparam.bin_min = None
179
+ curve.histparam.bin_max = None
180
+ curve.histparam.n_bins = 256
173
181
  self.param.update_item(curve)
174
- self.histparam.update_hist(curve)
182
+ curve.histparam.update_hist(curve)
175
183
 
176
184
  self.active_item_changed(plot)
177
185
 
@@ -467,6 +475,7 @@ class ContrastAdjustment(PanelWidget):
467
475
  tip=_("Select minimum level on image"),
468
476
  toolbar_id="contrast",
469
477
  end_callback=self.apply_min_selection,
478
+ switch_to_default_tool=True,
470
479
  )
471
480
  self.max_select_tool = self.manager.add_tool(
472
481
  SelectPointTool,
@@ -476,6 +485,7 @@ class ContrastAdjustment(PanelWidget):
476
485
  tip=_("Select maximum level on image"),
477
486
  toolbar_id="contrast",
478
487
  end_callback=self.apply_max_selection,
488
+ switch_to_default_tool=True,
479
489
  )
480
490
 
481
491
  def get_plot(self) -> BasePlot:
@@ -536,6 +546,7 @@ class ContrastAdjustment(PanelWidget):
536
546
  point = self.min_select_tool.get_coordinates()
537
547
  z = item.get_data(*point)
538
548
  self.histogram.set_min(z)
549
+ tool.SIG_TOOL_JOB_FINISHED.emit()
539
550
 
540
551
  def apply_max_selection(self, tool: SelectPointTool) -> None:
541
552
  """Apply maximum selection
@@ -547,6 +558,7 @@ class ContrastAdjustment(PanelWidget):
547
558
  point = self.max_select_tool.get_coordinates()
548
559
  z = item.get_data(*point)
549
560
  self.histogram.set_max(z)
561
+ tool.SIG_TOOL_JOB_FINISHED.emit()
550
562
 
551
563
  def set_range(self, _min: float, _max: float) -> None:
552
564
  """Set contrast panel's histogram range
@@ -311,14 +311,6 @@ class CrossSectionItem(ErrorBarCurveItem):
311
311
  sectx, secty = self.get_cross_section(obj)
312
312
  if secty.size == 0 or np.all(np.isnan(secty)):
313
313
  sectx, secty = np.array([]), np.array([])
314
- elif self.param.curvestyle != "Steps":
315
- # Center the symbols at the middle of pixels
316
- # Bugfix, we deactivate warnings only for numpy method call.
317
- # (V1.0.10 => V1.0.11)
318
- # Deactivate following warnings after 20210218 mail
319
- # warnings.filterwarnings('ignore')
320
- sectx[:-1] += np.mean(np.diff(sectx) / 2)
321
- # warnings.filterwarnings('default')
322
314
  if self.orientation() == QC.Qt.Orientation.Vertical:
323
315
  self.process_curve_data(secty, sectx)
324
316
  else:
@@ -2172,17 +2172,22 @@ class BasePlot(qwt.QwtPlot):
2172
2172
  return x0, x1, y0, y1
2173
2173
 
2174
2174
  # ---- Image scale/aspect ratio -related API -------------------------------
2175
- def get_current_aspect_ratio(self) -> float:
2175
+ def get_current_aspect_ratio(self) -> float | None:
2176
2176
  """Return current aspect ratio
2177
2177
 
2178
2178
  Returns:
2179
- float: the current aspect ratio
2179
+ The current aspect ratio or None if the aspect ratio cannot be computed
2180
+ (this happens when the plot has been shrunk to a size so that the
2181
+ width is zero)
2180
2182
  """
2181
2183
  dx = self.axisScaleDiv(self.X_BOTTOM).range()
2182
2184
  dy = self.axisScaleDiv(self.Y_LEFT).range()
2183
2185
  h = self.canvasMap(self.Y_LEFT).pDist()
2184
2186
  w = self.canvasMap(self.X_BOTTOM).pDist()
2185
- return fabs((h * dx) / (w * dy))
2187
+ try:
2188
+ return fabs((h * dx) / (w * dy))
2189
+ except ZeroDivisionError:
2190
+ return None
2186
2191
 
2187
2192
  def get_aspect_ratio(self) -> float:
2188
2193
  """Return aspect ratio
@@ -2220,7 +2225,9 @@ class BasePlot(qwt.QwtPlot):
2220
2225
  if not self.isVisible():
2221
2226
  return
2222
2227
  current_aspect = self.get_current_aspect_ratio()
2223
- if abs(current_aspect - self.__aspect_ratio) < self.EPSILON_ASPECT_RATIO:
2228
+ if current_aspect is None or (
2229
+ abs(current_aspect - self.__aspect_ratio) < self.EPSILON_ASPECT_RATIO
2230
+ ):
2224
2231
  return
2225
2232
  ymap = self.canvasMap(self.Y_LEFT)
2226
2233
  xmap = self.canvasMap(self.X_BOTTOM)
@@ -1,10 +1,15 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
3
7
  from guidata.dataset import (
4
8
  BoolItem,
5
9
  ChoiceItem,
6
10
  ColorItem,
7
11
  DataSet,
12
+ FloatItem,
8
13
  GetAttrProp,
9
14
  IntItem,
10
15
  StringItem,
@@ -14,26 +19,39 @@ from plotpy.config import _
14
19
  from plotpy.styles.base import ItemParameters
15
20
  from plotpy.styles.image import BaseImageParam
16
21
 
22
+ if TYPE_CHECKING: # pragma: no cover
23
+ from plotpy.items import Histogram2DItem, HistogramItem
24
+
17
25
 
18
26
  class HistogramParam(DataSet):
19
27
  n_bins = IntItem(_("Bins"), default=100, min=1, help=_("Number of bins"))
28
+ bin_min = FloatItem(_("Min"), default=None, help=_("Minimum value"), check=False)
29
+ bin_max = FloatItem(_("Max"), default=None, help=_("Maximum value"), check=False)
20
30
  logscale = BoolItem(_("logarithmic"), _("Y-axis scale"), default=False)
21
31
 
22
- def update_param(self, obj):
23
- """
32
+ def update_param(self, item: HistogramItem) -> None:
33
+ """Update the histogram parameters from the plot item
24
34
 
25
- :param obj:
35
+ Args:
36
+ item: Histogram item
26
37
  """
27
- self.n_bins = obj.get_bins()
28
- self.logscale = obj.get_logscale()
38
+ self.n_bins = item.get_bins()
39
+ self.bin_min, self.bin_max = item.get_bin_range()
40
+ self.logscale = item.get_logscale()
29
41
 
30
- def update_hist(self, hist):
31
- """
42
+ def update_hist(self, item: HistogramItem) -> None:
43
+ """Update the histogram plot item from the parameters
32
44
 
33
- :param hist:
45
+ Args:
46
+ item: Histogram item
34
47
  """
35
- hist.set_bins(self.n_bins)
36
- hist.set_logscale(self.logscale)
48
+ if self.bin_min is None or self.bin_max is None:
49
+ item.bin_range = None
50
+ else:
51
+ item.bin_range = (self.bin_min, self.bin_max)
52
+ item.bins = self.n_bins
53
+ item.logscale = self.logscale
54
+ item.update_histogram()
37
55
 
38
56
 
39
57
  class Histogram2DParam(BaseImageParam):
@@ -79,24 +97,26 @@ class Histogram2DParam(BaseImageParam):
79
97
  help=_("Background color when no data is present"),
80
98
  )
81
99
 
82
- def update_param(self, obj):
83
- """
100
+ def update_param(self, item: Histogram2DItem) -> None:
101
+ """Update the histogram parameters from the plot item
84
102
 
85
- :param obj:
103
+ Args:
104
+ item: 2D Histogram item
86
105
  """
87
- super().update_param(obj)
88
- self.logscale = obj.logscale
89
- self.nx_bins, self.ny_bins = obj.nx_bins, obj.ny_bins
106
+ super().update_param(item)
107
+ self.logscale = item.logscale
108
+ self.nx_bins, self.ny_bins = item.nx_bins, item.ny_bins
90
109
 
91
- def update_histogram(self, histogram):
92
- """
110
+ def update_histogram(self, item: Histogram2DItem) -> None:
111
+ """Update the histogram plot item from the parameters
93
112
 
94
- :param histogram:
113
+ Args:
114
+ item: 2D Histogram item
95
115
  """
96
- histogram.logscale = int(self.logscale)
97
- histogram.set_background_color(self.background)
98
- histogram.set_bins(self.nx_bins, self.ny_bins)
99
- self.update_item(histogram)
116
+ item.logscale = int(self.logscale)
117
+ item.set_background_color(self.background)
118
+ item.set_bins(self.nx_bins, self.ny_bins)
119
+ self.update_item(item)
100
120
 
101
121
 
102
122
  class Histogram2DParam_MS(Histogram2DParam):
@@ -8,6 +8,7 @@
8
8
  # guitest: show
9
9
 
10
10
  from guidata.qthelpers import qt_app_context, win32_fix_title_bar_background
11
+ from qtpy import QtCore as QC
11
12
  from qtpy import QtWidgets as QW
12
13
 
13
14
  from plotpy.builder import make
@@ -45,6 +46,12 @@ class CentralWidget(QW.QWidget):
45
46
  def register_tools(self):
46
47
  self.manager.register_all_image_tools()
47
48
 
49
+ def minimumSizeHint(self):
50
+ """Override QWidget method"""
51
+ # The purpose of this reimplementation is to trigger the issue #3
52
+ # (see https://github.com/PlotPyStack/PlotPy/issues/3)
53
+ return QC.QSize(150, 100)
54
+
48
55
 
49
56
  class Window(QW.QMainWindow):
50
57
  def __init__(self):
@@ -75,5 +82,19 @@ def test_manager():
75
82
  win.show()
76
83
 
77
84
 
85
+ def test_resize_to_minimum_width():
86
+ """Testing resize window to minimum width"""
87
+ # This test was failing at the time of Issue #3
88
+ # (see https://github.com/PlotPyStack/PlotPy/issues/3)
89
+ with qt_app_context(exec_loop=False):
90
+ win = Window()
91
+ win.show()
92
+ width = 350
93
+ while width > win.minimumWidth():
94
+ width -= 1
95
+ win.resize(width, 100)
96
+
97
+
78
98
  if __name__ == "__main__":
79
99
  test_manager()
100
+ # test_resize_to_minimum_width()
@@ -15,7 +15,7 @@ from plotpy.builder import make
15
15
  from plotpy.config import _
16
16
  from plotpy.items import RawImageItem
17
17
  from plotpy.mandelbrot import mandelbrot
18
- from plotpy.tools.base import ToggleTool
18
+ from plotpy.tools import ToggleTool
19
19
 
20
20
 
21
21
  class FullScale(ToggleTool):
@@ -64,20 +64,26 @@ class MandelItem(RawImageItem):
64
64
  )
65
65
 
66
66
 
67
+ def create_mandelbrot_window():
68
+ """Create a Mandelbrot set window"""
69
+ win = make.window(
70
+ toolbar=True,
71
+ wintitle="Mandelbrot",
72
+ yreverse=False,
73
+ type="image",
74
+ )
75
+ mandel = MandelItem(-1.5, 0.5, -1.0, 1.0)
76
+ fstool = win.manager.add_tool(FullScale, mandel)
77
+ plot = win.get_plot()
78
+ plot.set_aspect_ratio(lock=False)
79
+ plot.add_item(mandel)
80
+ return win, mandel, fstool
81
+
82
+
67
83
  def test_mandel():
84
+ """Test Mandelbrot set window"""
68
85
  with qt_app_context(exec_loop=True):
69
- win = make.dialog(
70
- edit=True,
71
- toolbar=True,
72
- wintitle="Mandelbrot",
73
- yreverse=False,
74
- type="image",
75
- )
76
- mandel = MandelItem(-1.5, 0.5, -1.0, 1.0)
77
- win.manager.add_tool(FullScale, mandel)
78
- plot = win.manager.get_plot()
79
- plot.set_aspect_ratio(lock=False)
80
- plot.add_item(mandel)
86
+ win, _mandel, _fstool = create_mandelbrot_window()
81
87
  win.show()
82
88
 
83
89