datalab-platform 0.0.1.dev0__py3-none-any.whl → 1.0.0__py3-none-any.whl

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 (496) hide show
  1. datalab/__init__.py +35 -2
  2. datalab/adapters_metadata/__init__.py +31 -0
  3. datalab/adapters_metadata/base_adapter.py +316 -0
  4. datalab/adapters_metadata/common.py +422 -0
  5. datalab/adapters_metadata/geometry_adapter.py +98 -0
  6. datalab/adapters_metadata/table_adapter.py +84 -0
  7. datalab/adapters_plotpy/__init__.py +54 -0
  8. datalab/adapters_plotpy/annotations.py +124 -0
  9. datalab/adapters_plotpy/base.py +110 -0
  10. datalab/adapters_plotpy/converters.py +86 -0
  11. datalab/adapters_plotpy/factories.py +80 -0
  12. datalab/adapters_plotpy/objects/__init__.py +0 -0
  13. datalab/adapters_plotpy/objects/base.py +197 -0
  14. datalab/adapters_plotpy/objects/image.py +157 -0
  15. datalab/adapters_plotpy/objects/scalar.py +565 -0
  16. datalab/adapters_plotpy/objects/signal.py +264 -0
  17. datalab/adapters_plotpy/roi/__init__.py +0 -0
  18. datalab/adapters_plotpy/roi/base.py +146 -0
  19. datalab/adapters_plotpy/roi/factory.py +93 -0
  20. datalab/adapters_plotpy/roi/image.py +207 -0
  21. datalab/adapters_plotpy/roi/signal.py +72 -0
  22. datalab/app.py +98 -0
  23. datalab/config.py +817 -0
  24. datalab/control/__init__.py +0 -0
  25. datalab/control/baseproxy.py +776 -0
  26. datalab/control/proxy.py +343 -0
  27. datalab/control/remote.py +1005 -0
  28. datalab/data/doc/DataLab_en.pdf +0 -0
  29. datalab/data/doc/DataLab_fr.pdf +0 -0
  30. datalab/data/icons/analysis/delete_results.svg +109 -0
  31. datalab/data/icons/analysis/fw1e2.svg +156 -0
  32. datalab/data/icons/analysis/fwhm.svg +156 -0
  33. datalab/data/icons/analysis/histogram.svg +49 -0
  34. datalab/data/icons/analysis/peak_detect.svg +160 -0
  35. datalab/data/icons/analysis/plot_results.svg +151 -0
  36. datalab/data/icons/analysis/show_results.svg +83 -0
  37. datalab/data/icons/analysis/stats.svg +49 -0
  38. datalab/data/icons/analysis.svg +120 -0
  39. datalab/data/icons/apply.svg +3 -0
  40. datalab/data/icons/check_all.svg +15 -0
  41. datalab/data/icons/collapse.svg +44 -0
  42. datalab/data/icons/collapse_selection.svg +63 -0
  43. datalab/data/icons/console.svg +101 -0
  44. datalab/data/icons/create/1d-normal.svg +8 -0
  45. datalab/data/icons/create/1d-poisson.svg +9 -0
  46. datalab/data/icons/create/1d-uniform.svg +8 -0
  47. datalab/data/icons/create/1d-zero.svg +57 -0
  48. datalab/data/icons/create/2d-gaussian.svg +56 -0
  49. datalab/data/icons/create/2d-normal.svg +38 -0
  50. datalab/data/icons/create/2d-poisson.svg +38 -0
  51. datalab/data/icons/create/2d-ramp.svg +90 -0
  52. datalab/data/icons/create/2d-sinc.svg +62 -0
  53. datalab/data/icons/create/2d-uniform.svg +38 -0
  54. datalab/data/icons/create/2d-zero.svg +13 -0
  55. datalab/data/icons/create/checkerboard.svg +39 -0
  56. datalab/data/icons/create/cosine.svg +12 -0
  57. datalab/data/icons/create/exponential.svg +55 -0
  58. datalab/data/icons/create/gaussian.svg +12 -0
  59. datalab/data/icons/create/grating.svg +29 -0
  60. datalab/data/icons/create/linear_chirp.svg +7 -0
  61. datalab/data/icons/create/logistic.svg +7 -0
  62. datalab/data/icons/create/lorentzian.svg +12 -0
  63. datalab/data/icons/create/planck.svg +12 -0
  64. datalab/data/icons/create/polynomial.svg +7 -0
  65. datalab/data/icons/create/pulse.svg +12 -0
  66. datalab/data/icons/create/ring.svg +18 -0
  67. datalab/data/icons/create/sawtooth.svg +7 -0
  68. datalab/data/icons/create/siemens.svg +35 -0
  69. datalab/data/icons/create/sinc.svg +12 -0
  70. datalab/data/icons/create/sine.svg +7 -0
  71. datalab/data/icons/create/square.svg +7 -0
  72. datalab/data/icons/create/square_pulse.svg +7 -0
  73. datalab/data/icons/create/step.svg +7 -0
  74. datalab/data/icons/create/step_pulse.svg +12 -0
  75. datalab/data/icons/create/triangle.svg +7 -0
  76. datalab/data/icons/create/voigt.svg +12 -0
  77. datalab/data/icons/edit/annotations.svg +72 -0
  78. datalab/data/icons/edit/annotations_copy.svg +114 -0
  79. datalab/data/icons/edit/annotations_delete.svg +83 -0
  80. datalab/data/icons/edit/annotations_edit.svg +98 -0
  81. datalab/data/icons/edit/annotations_export.svg +85 -0
  82. datalab/data/icons/edit/annotations_import.svg +85 -0
  83. datalab/data/icons/edit/annotations_paste.svg +100 -0
  84. datalab/data/icons/edit/copy_titles.svg +109 -0
  85. datalab/data/icons/edit/delete.svg +84 -0
  86. datalab/data/icons/edit/delete_all.svg +214 -0
  87. datalab/data/icons/edit/duplicate.svg +64 -0
  88. datalab/data/icons/edit/goto_source.svg +60 -0
  89. datalab/data/icons/edit/metadata.svg +60 -0
  90. datalab/data/icons/edit/metadata_add.svg +80 -0
  91. datalab/data/icons/edit/metadata_copy.svg +96 -0
  92. datalab/data/icons/edit/metadata_delete.svg +62 -0
  93. datalab/data/icons/edit/metadata_export.svg +68 -0
  94. datalab/data/icons/edit/metadata_import.svg +68 -0
  95. datalab/data/icons/edit/metadata_paste.svg +79 -0
  96. datalab/data/icons/edit/move_down.svg +55 -0
  97. datalab/data/icons/edit/move_up.svg +54 -0
  98. datalab/data/icons/edit/new_group.svg +76 -0
  99. datalab/data/icons/edit/recompute.svg +60 -0
  100. datalab/data/icons/edit/rename.svg +49 -0
  101. datalab/data/icons/edit.svg +16 -0
  102. datalab/data/icons/expand.svg +44 -0
  103. datalab/data/icons/expand_selection.svg +63 -0
  104. datalab/data/icons/fit/cdf_fit.svg +56 -0
  105. datalab/data/icons/fit/exponential_fit.svg +55 -0
  106. datalab/data/icons/fit/gaussian_fit.svg +62 -0
  107. datalab/data/icons/fit/interactive_fit.svg +101 -0
  108. datalab/data/icons/fit/linear_fit.svg +57 -0
  109. datalab/data/icons/fit/lorentzian_fit.svg +209 -0
  110. datalab/data/icons/fit/multigaussian_fit.svg +85 -0
  111. datalab/data/icons/fit/multilorentzian_fit.svg +85 -0
  112. datalab/data/icons/fit/piecewiseexponential_fit.svg +209 -0
  113. datalab/data/icons/fit/planckian_fit.svg +62 -0
  114. datalab/data/icons/fit/polynomial_fit.svg +59 -0
  115. datalab/data/icons/fit/sigmoid_fit.svg +56 -0
  116. datalab/data/icons/fit/sinusoidal_fit.svg +72 -0
  117. datalab/data/icons/fit/twohalfgaussian_fit.svg +63 -0
  118. datalab/data/icons/fit/voigt_fit.svg +57 -0
  119. datalab/data/icons/group.svg +56 -0
  120. datalab/data/icons/h5/h5array.svg +59 -0
  121. datalab/data/icons/h5/h5attrs.svg +75 -0
  122. datalab/data/icons/h5/h5browser.svg +133 -0
  123. datalab/data/icons/h5/h5file.svg +69 -0
  124. datalab/data/icons/h5/h5group.svg +49 -0
  125. datalab/data/icons/h5/h5scalar.svg +1 -0
  126. datalab/data/icons/help_pdf.svg +46 -0
  127. datalab/data/icons/history.svg +7 -0
  128. datalab/data/icons/image.svg +135 -0
  129. datalab/data/icons/io/fileopen_directory.svg +60 -0
  130. datalab/data/icons/io/fileopen_h5.svg +84 -0
  131. datalab/data/icons/io/fileopen_ima.svg +187 -0
  132. datalab/data/icons/io/fileopen_py.svg +123 -0
  133. datalab/data/icons/io/fileopen_sig.svg +138 -0
  134. datalab/data/icons/io/filesave_h5.svg +97 -0
  135. datalab/data/icons/io/filesave_ima.svg +200 -0
  136. datalab/data/icons/io/filesave_py.svg +136 -0
  137. datalab/data/icons/io/filesave_sig.svg +151 -0
  138. datalab/data/icons/io/import_text.svg +144 -0
  139. datalab/data/icons/io/save_to_directory.svg +134 -0
  140. datalab/data/icons/io.svg +84 -0
  141. datalab/data/icons/libre-camera-flash-off.svg +1 -0
  142. datalab/data/icons/libre-camera-flash-on.svg +1 -0
  143. datalab/data/icons/libre-gui-about.svg +1 -0
  144. datalab/data/icons/libre-gui-action-delete.svg +1 -0
  145. datalab/data/icons/libre-gui-add.svg +1 -0
  146. datalab/data/icons/libre-gui-arrow-down.svg +1 -0
  147. datalab/data/icons/libre-gui-arrow-left.svg +1 -0
  148. datalab/data/icons/libre-gui-arrow-right.svg +1 -0
  149. datalab/data/icons/libre-gui-arrow-up.svg +1 -0
  150. datalab/data/icons/libre-gui-close.svg +40 -0
  151. datalab/data/icons/libre-gui-cogs.svg +1 -0
  152. datalab/data/icons/libre-gui-globe.svg +1 -0
  153. datalab/data/icons/libre-gui-help.svg +1 -0
  154. datalab/data/icons/libre-gui-link.svg +1 -0
  155. datalab/data/icons/libre-gui-menu.svg +1 -0
  156. datalab/data/icons/libre-gui-pencil.svg +1 -0
  157. datalab/data/icons/libre-gui-plugin.svg +1 -0
  158. datalab/data/icons/libre-gui-questions.svg +1 -0
  159. datalab/data/icons/libre-gui-settings.svg +1 -0
  160. datalab/data/icons/libre-gui-unlink.svg +1 -0
  161. datalab/data/icons/libre-tech-ram.svg +1 -0
  162. datalab/data/icons/libre-toolbox.svg +1 -0
  163. datalab/data/icons/logs.svg +1 -0
  164. datalab/data/icons/markers.svg +74 -0
  165. datalab/data/icons/menu.svg +13 -0
  166. datalab/data/icons/new_ima.svg +148 -0
  167. datalab/data/icons/new_sig.svg +123 -0
  168. datalab/data/icons/operations/abs.svg +116 -0
  169. datalab/data/icons/operations/arithmetic.svg +123 -0
  170. datalab/data/icons/operations/average.svg +124 -0
  171. datalab/data/icons/operations/complex_from_magnitude_phase.svg +116 -0
  172. datalab/data/icons/operations/complex_from_real_imag.svg +124 -0
  173. datalab/data/icons/operations/constant.svg +116 -0
  174. datalab/data/icons/operations/constant_add.svg +109 -0
  175. datalab/data/icons/operations/constant_divide.svg +109 -0
  176. datalab/data/icons/operations/constant_multiply.svg +109 -0
  177. datalab/data/icons/operations/constant_subtract.svg +109 -0
  178. datalab/data/icons/operations/convert_dtype.svg +117 -0
  179. datalab/data/icons/operations/convolution.svg +46 -0
  180. datalab/data/icons/operations/deconvolution.svg +57 -0
  181. datalab/data/icons/operations/derivative.svg +127 -0
  182. datalab/data/icons/operations/difference.svg +52 -0
  183. datalab/data/icons/operations/division.svg +139 -0
  184. datalab/data/icons/operations/exp.svg +116 -0
  185. datalab/data/icons/operations/flip_horizontally.svg +69 -0
  186. datalab/data/icons/operations/flip_vertically.svg +74 -0
  187. datalab/data/icons/operations/im.svg +124 -0
  188. datalab/data/icons/operations/integral.svg +50 -0
  189. datalab/data/icons/operations/inverse.svg +143 -0
  190. datalab/data/icons/operations/log10.svg +109 -0
  191. datalab/data/icons/operations/phase.svg +116 -0
  192. datalab/data/icons/operations/power.svg +118 -0
  193. datalab/data/icons/operations/product.svg +124 -0
  194. datalab/data/icons/operations/profile.svg +379 -0
  195. datalab/data/icons/operations/profile_average.svg +399 -0
  196. datalab/data/icons/operations/profile_radial.svg +261 -0
  197. datalab/data/icons/operations/profile_segment.svg +262 -0
  198. datalab/data/icons/operations/quadratic_difference.svg +84 -0
  199. datalab/data/icons/operations/re.svg +124 -0
  200. datalab/data/icons/operations/rotate_left.svg +72 -0
  201. datalab/data/icons/operations/rotate_right.svg +72 -0
  202. datalab/data/icons/operations/signals_to_image.svg +314 -0
  203. datalab/data/icons/operations/sqrt.svg +110 -0
  204. datalab/data/icons/operations/std.svg +124 -0
  205. datalab/data/icons/operations/sum.svg +102 -0
  206. datalab/data/icons/play_demo.svg +9 -0
  207. datalab/data/icons/processing/axis_transform.svg +62 -0
  208. datalab/data/icons/processing/bandpass.svg +79 -0
  209. datalab/data/icons/processing/bandstop.svg +71 -0
  210. datalab/data/icons/processing/binning.svg +126 -0
  211. datalab/data/icons/processing/clip.svg +119 -0
  212. datalab/data/icons/processing/detrending.svg +173 -0
  213. datalab/data/icons/processing/distribute_on_grid.svg +769 -0
  214. datalab/data/icons/processing/edge_detection.svg +46 -0
  215. datalab/data/icons/processing/erase.svg +1 -0
  216. datalab/data/icons/processing/exposure.svg +143 -0
  217. datalab/data/icons/processing/fourier.svg +104 -0
  218. datalab/data/icons/processing/highpass.svg +59 -0
  219. datalab/data/icons/processing/interpolation.svg +71 -0
  220. datalab/data/icons/processing/level_adjustment.svg +70 -0
  221. datalab/data/icons/processing/lowpass.svg +60 -0
  222. datalab/data/icons/processing/morphology.svg +49 -0
  223. datalab/data/icons/processing/noise_addition.svg +114 -0
  224. datalab/data/icons/processing/noise_reduction.svg +38 -0
  225. datalab/data/icons/processing/normalize.svg +84 -0
  226. datalab/data/icons/processing/offset_correction.svg +131 -0
  227. datalab/data/icons/processing/resampling1d.svg +101 -0
  228. datalab/data/icons/processing/resampling2d.svg +240 -0
  229. datalab/data/icons/processing/reset_positions.svg +185 -0
  230. datalab/data/icons/processing/resize.svg +9 -0
  231. datalab/data/icons/processing/reverse_signal_x.svg +171 -0
  232. datalab/data/icons/processing/stability.svg +11 -0
  233. datalab/data/icons/processing/swap_x_y.svg +65 -0
  234. datalab/data/icons/processing/thresholding.svg +63 -0
  235. datalab/data/icons/processing/windowing.svg +45 -0
  236. datalab/data/icons/properties.svg +26 -0
  237. datalab/data/icons/reset.svg +9 -0
  238. datalab/data/icons/restore.svg +40 -0
  239. datalab/data/icons/roi/roi.svg +76 -0
  240. datalab/data/icons/roi/roi_coordinate.svg +78 -0
  241. datalab/data/icons/roi/roi_copy.svg +112 -0
  242. datalab/data/icons/roi/roi_delete.svg +81 -0
  243. datalab/data/icons/roi/roi_export.svg +87 -0
  244. datalab/data/icons/roi/roi_graphical.svg +78 -0
  245. datalab/data/icons/roi/roi_grid.svg +67 -0
  246. datalab/data/icons/roi/roi_ima.svg +188 -0
  247. datalab/data/icons/roi/roi_import.svg +87 -0
  248. datalab/data/icons/roi/roi_new.svg +81 -0
  249. datalab/data/icons/roi/roi_new_circle.svg +95 -0
  250. datalab/data/icons/roi/roi_new_polygon.svg +110 -0
  251. datalab/data/icons/roi/roi_new_rectangle.svg +70 -0
  252. datalab/data/icons/roi/roi_paste.svg +98 -0
  253. datalab/data/icons/roi/roi_sig.svg +124 -0
  254. datalab/data/icons/shapes.svg +134 -0
  255. datalab/data/icons/signal.svg +103 -0
  256. datalab/data/icons/table.svg +85 -0
  257. datalab/data/icons/table_unavailable.svg +102 -0
  258. datalab/data/icons/to_signal.svg +124 -0
  259. datalab/data/icons/tour/next.svg +44 -0
  260. datalab/data/icons/tour/previous.svg +44 -0
  261. datalab/data/icons/tour/rewind.svg +51 -0
  262. datalab/data/icons/tour/stop.svg +47 -0
  263. datalab/data/icons/tour/tour.svg +16 -0
  264. datalab/data/icons/uncheck_all.svg +78 -0
  265. datalab/data/icons/view/curve_antialiasing.svg +50 -0
  266. datalab/data/icons/view/new_window.svg +98 -0
  267. datalab/data/icons/view/refresh-auto.svg +57 -0
  268. datalab/data/icons/view/refresh-manual.svg +51 -0
  269. datalab/data/icons/view/reset_curve_styles.svg +96 -0
  270. datalab/data/icons/view/show_first.svg +55 -0
  271. datalab/data/icons/view/show_titles.svg +46 -0
  272. datalab/data/icons/visualization.svg +51 -0
  273. datalab/data/logo/DataLab-Banner-150.png +0 -0
  274. datalab/data/logo/DataLab-Banner-200.png +0 -0
  275. datalab/data/logo/DataLab-Banner2-100.png +0 -0
  276. datalab/data/logo/DataLab-Splash.png +0 -0
  277. datalab/data/logo/DataLab-watermark.png +0 -0
  278. datalab/data/logo/DataLab.svg +83 -0
  279. datalab/data/tests/reordering_test.h5 +0 -0
  280. datalab/data/tutorials/fabry_perot/fabry-perot1.jpg +0 -0
  281. datalab/data/tutorials/fabry_perot/fabry-perot2.jpg +0 -0
  282. datalab/data/tutorials/laser_beam/TEM00_z_13.jpg +0 -0
  283. datalab/data/tutorials/laser_beam/TEM00_z_18.jpg +0 -0
  284. datalab/data/tutorials/laser_beam/TEM00_z_23.jpg +0 -0
  285. datalab/data/tutorials/laser_beam/TEM00_z_30.jpg +0 -0
  286. datalab/data/tutorials/laser_beam/TEM00_z_35.jpg +0 -0
  287. datalab/data/tutorials/laser_beam/TEM00_z_40.jpg +0 -0
  288. datalab/data/tutorials/laser_beam/TEM00_z_45.jpg +0 -0
  289. datalab/data/tutorials/laser_beam/TEM00_z_50.jpg +0 -0
  290. datalab/data/tutorials/laser_beam/TEM00_z_55.jpg +0 -0
  291. datalab/data/tutorials/laser_beam/TEM00_z_60.jpg +0 -0
  292. datalab/data/tutorials/laser_beam/TEM00_z_65.jpg +0 -0
  293. datalab/data/tutorials/laser_beam/TEM00_z_70.jpg +0 -0
  294. datalab/data/tutorials/laser_beam/TEM00_z_75.jpg +0 -0
  295. datalab/data/tutorials/laser_beam/TEM00_z_80.jpg +0 -0
  296. datalab/env.py +542 -0
  297. datalab/gui/__init__.py +89 -0
  298. datalab/gui/actionhandler.py +1701 -0
  299. datalab/gui/docks.py +473 -0
  300. datalab/gui/h5io.py +150 -0
  301. datalab/gui/macroeditor.py +310 -0
  302. datalab/gui/main.py +2081 -0
  303. datalab/gui/newobject.py +217 -0
  304. datalab/gui/objectview.py +766 -0
  305. datalab/gui/panel/__init__.py +48 -0
  306. datalab/gui/panel/base.py +3254 -0
  307. datalab/gui/panel/image.py +157 -0
  308. datalab/gui/panel/macro.py +607 -0
  309. datalab/gui/panel/signal.py +164 -0
  310. datalab/gui/plothandler.py +800 -0
  311. datalab/gui/processor/__init__.py +84 -0
  312. datalab/gui/processor/base.py +2456 -0
  313. datalab/gui/processor/catcher.py +75 -0
  314. datalab/gui/processor/image.py +1214 -0
  315. datalab/gui/processor/signal.py +755 -0
  316. datalab/gui/profiledialog.py +333 -0
  317. datalab/gui/roieditor.py +633 -0
  318. datalab/gui/roigrideditor.py +208 -0
  319. datalab/gui/settings.py +612 -0
  320. datalab/gui/tour.py +908 -0
  321. datalab/h5/__init__.py +12 -0
  322. datalab/h5/common.py +314 -0
  323. datalab/h5/generic.py +580 -0
  324. datalab/h5/native.py +39 -0
  325. datalab/h5/utils.py +95 -0
  326. datalab/objectmodel.py +640 -0
  327. datalab/plugins/_readme_.txt +9 -0
  328. datalab/plugins/datalab_imageformats.py +175 -0
  329. datalab/plugins/datalab_testdata.py +190 -0
  330. datalab/plugins.py +355 -0
  331. datalab/tests/__init__.py +199 -0
  332. datalab/tests/backbone/__init__.py +1 -0
  333. datalab/tests/backbone/config_unit_test.py +170 -0
  334. datalab/tests/backbone/config_versioning_unit_test.py +34 -0
  335. datalab/tests/backbone/dictlistserial_app_test.py +38 -0
  336. datalab/tests/backbone/errorcatcher_unit_test.py +69 -0
  337. datalab/tests/backbone/errormsgbox_unit_test.py +50 -0
  338. datalab/tests/backbone/execenv_unit.py +262 -0
  339. datalab/tests/backbone/loadtest_gdi.py +147 -0
  340. datalab/tests/backbone/long_callback.py +96 -0
  341. datalab/tests/backbone/main_app_test.py +137 -0
  342. datalab/tests/backbone/memory_leak.py +43 -0
  343. datalab/tests/backbone/procisolation1_unit.py +128 -0
  344. datalab/tests/backbone/procisolation2_unit.py +171 -0
  345. datalab/tests/backbone/procisolation_unit_test.py +22 -0
  346. datalab/tests/backbone/profiling_app.py +27 -0
  347. datalab/tests/backbone/strings_unit_test.py +65 -0
  348. datalab/tests/backbone/title_formatting_unit_test.py +82 -0
  349. datalab/tests/conftest.py +131 -0
  350. datalab/tests/features/__init__.py +1 -0
  351. datalab/tests/features/applauncher/__init__.py +1 -0
  352. datalab/tests/features/applauncher/launcher1_app_test.py +28 -0
  353. datalab/tests/features/applauncher/launcher2_app_test.py +30 -0
  354. datalab/tests/features/common/__init__.py +1 -0
  355. datalab/tests/features/common/add_metadata_app_test.py +134 -0
  356. datalab/tests/features/common/add_metadata_unit_test.py +267 -0
  357. datalab/tests/features/common/annotations_management_unit_test.py +152 -0
  358. datalab/tests/features/common/auto_analysis_recompute_unit_test.py +240 -0
  359. datalab/tests/features/common/createobject_unit_test.py +50 -0
  360. datalab/tests/features/common/geometry_results_app_test.py +135 -0
  361. datalab/tests/features/common/interactive_processing_test.py +1109 -0
  362. datalab/tests/features/common/io_app_test.py +75 -0
  363. datalab/tests/features/common/large_results_app_test.py +187 -0
  364. datalab/tests/features/common/metadata_all_patterns_test.py +103 -0
  365. datalab/tests/features/common/metadata_app_test.py +139 -0
  366. datalab/tests/features/common/metadata_io_unit_test.py +60 -0
  367. datalab/tests/features/common/misc_app_test.py +236 -0
  368. datalab/tests/features/common/multiple_geometry_results_unit_test.py +122 -0
  369. datalab/tests/features/common/multiple_table_results_unit_test.py +64 -0
  370. datalab/tests/features/common/operation_modes_app_test.py +392 -0
  371. datalab/tests/features/common/plot_results_app_test.py +278 -0
  372. datalab/tests/features/common/reorder_app_test.py +75 -0
  373. datalab/tests/features/common/result_deletion_unit_test.py +96 -0
  374. datalab/tests/features/common/result_merged_label_unit_test.py +154 -0
  375. datalab/tests/features/common/result_shape_settings_unit_test.py +223 -0
  376. datalab/tests/features/common/roi_plotitem_unit_test.py +64 -0
  377. datalab/tests/features/common/roieditor_unit_test.py +102 -0
  378. datalab/tests/features/common/save_to_dir_app_test.py +163 -0
  379. datalab/tests/features/common/save_to_dir_unit_test.py +474 -0
  380. datalab/tests/features/common/stat_app_test.py +40 -0
  381. datalab/tests/features/common/stats_tools_unit_test.py +77 -0
  382. datalab/tests/features/common/table_results_app_test.py +52 -0
  383. datalab/tests/features/common/textimport_unit_test.py +131 -0
  384. datalab/tests/features/common/uuid_preservation_test.py +281 -0
  385. datalab/tests/features/common/worker_unit_test.py +402 -0
  386. datalab/tests/features/control/__init__.py +1 -0
  387. datalab/tests/features/control/connect_dialog.py +28 -0
  388. datalab/tests/features/control/embedded1_unit_test.py +304 -0
  389. datalab/tests/features/control/embedded2_unit_test.py +52 -0
  390. datalab/tests/features/control/remoteclient_app_test.py +219 -0
  391. datalab/tests/features/control/remoteclient_unit.py +75 -0
  392. datalab/tests/features/control/simpleclient_unit_test.py +321 -0
  393. datalab/tests/features/hdf5/__init__.py +1 -0
  394. datalab/tests/features/hdf5/h5browser1_unit_test.py +31 -0
  395. datalab/tests/features/hdf5/h5browser2_unit.py +55 -0
  396. datalab/tests/features/hdf5/h5browser_app_test.py +77 -0
  397. datalab/tests/features/hdf5/h5import_app_test.py +25 -0
  398. datalab/tests/features/hdf5/h5importer_app_test.py +34 -0
  399. datalab/tests/features/image/__init__.py +1 -0
  400. datalab/tests/features/image/annotations_app_test.py +28 -0
  401. datalab/tests/features/image/annotations_unit_test.py +80 -0
  402. datalab/tests/features/image/average_app_test.py +46 -0
  403. datalab/tests/features/image/background_dialog_test.py +70 -0
  404. datalab/tests/features/image/blobs_app_test.py +50 -0
  405. datalab/tests/features/image/contour_app_test.py +42 -0
  406. datalab/tests/features/image/contour_fabryperot_app_test.py +51 -0
  407. datalab/tests/features/image/denoise_app_test.py +31 -0
  408. datalab/tests/features/image/distribute_on_grid_app_test.py +95 -0
  409. datalab/tests/features/image/edges_app_test.py +31 -0
  410. datalab/tests/features/image/erase_app_test.py +21 -0
  411. datalab/tests/features/image/fft2d_app_test.py +27 -0
  412. datalab/tests/features/image/flatfield_app_test.py +40 -0
  413. datalab/tests/features/image/geometry_transform_unit_test.py +396 -0
  414. datalab/tests/features/image/imagetools_app_test.py +51 -0
  415. datalab/tests/features/image/imagetools_unit_test.py +27 -0
  416. datalab/tests/features/image/load_app_test.py +73 -0
  417. datalab/tests/features/image/morph_app_test.py +32 -0
  418. datalab/tests/features/image/offsetcorrection_app_test.py +30 -0
  419. datalab/tests/features/image/peak2d_app_test.py +53 -0
  420. datalab/tests/features/image/profile_app_test.py +73 -0
  421. datalab/tests/features/image/profile_dialog_test.py +56 -0
  422. datalab/tests/features/image/roi_app_test.py +98 -0
  423. datalab/tests/features/image/roi_circ_app_test.py +62 -0
  424. datalab/tests/features/image/roi_manipulation_app_test.py +268 -0
  425. datalab/tests/features/image/roigrid_unit_test.py +60 -0
  426. datalab/tests/features/image/side_by_side_app_test.py +52 -0
  427. datalab/tests/features/macro/__init__.py +1 -0
  428. datalab/tests/features/macro/macro_app_test.py +28 -0
  429. datalab/tests/features/macro/macroeditor_unit_test.py +102 -0
  430. datalab/tests/features/signal/__init__.py +1 -0
  431. datalab/tests/features/signal/baseline_dialog_test.py +53 -0
  432. datalab/tests/features/signal/deltax_dialog_unit_test.py +34 -0
  433. datalab/tests/features/signal/fft1d_app_test.py +26 -0
  434. datalab/tests/features/signal/filter_app_test.py +44 -0
  435. datalab/tests/features/signal/fitdialog_unit_test.py +50 -0
  436. datalab/tests/features/signal/interpolation_app_test.py +110 -0
  437. datalab/tests/features/signal/loadbigsignal_app_test.py +80 -0
  438. datalab/tests/features/signal/multiple_rois_unit_test.py +132 -0
  439. datalab/tests/features/signal/pulse_features_app_test.py +118 -0
  440. datalab/tests/features/signal/pulse_features_roi_app_test.py +55 -0
  441. datalab/tests/features/signal/roi_app_test.py +78 -0
  442. datalab/tests/features/signal/roi_manipulation_app_test.py +261 -0
  443. datalab/tests/features/signal/select_xy_cursor_unit_test.py +46 -0
  444. datalab/tests/features/signal/signalpeakdetection_dialog_test.py +33 -0
  445. datalab/tests/features/signal/signals_to_image_app_test.py +98 -0
  446. datalab/tests/features/signal/xarray_compat_app_test.py +128 -0
  447. datalab/tests/features/tour_unit_test.py +22 -0
  448. datalab/tests/features/utilities/__init__.py +1 -0
  449. datalab/tests/features/utilities/installconf_unit_test.py +21 -0
  450. datalab/tests/features/utilities/logview_app_test.py +21 -0
  451. datalab/tests/features/utilities/logview_error.py +24 -0
  452. datalab/tests/features/utilities/logview_unit_test.py +21 -0
  453. datalab/tests/features/utilities/memstatus_app_test.py +42 -0
  454. datalab/tests/features/utilities/settings_unit_test.py +88 -0
  455. datalab/tests/scenarios/__init__.py +1 -0
  456. datalab/tests/scenarios/beautiful_app.py +121 -0
  457. datalab/tests/scenarios/common.py +463 -0
  458. datalab/tests/scenarios/demo.py +212 -0
  459. datalab/tests/scenarios/example_app_test.py +47 -0
  460. datalab/tests/scenarios/scenario_h5_app_test.py +75 -0
  461. datalab/tests/scenarios/scenario_ima1_app_test.py +34 -0
  462. datalab/tests/scenarios/scenario_ima2_app_test.py +34 -0
  463. datalab/tests/scenarios/scenario_mac_app_test.py +58 -0
  464. datalab/tests/scenarios/scenario_sig1_app_test.py +36 -0
  465. datalab/tests/scenarios/scenario_sig2_app_test.py +35 -0
  466. datalab/utils/__init__.py +1 -0
  467. datalab/utils/conf.py +304 -0
  468. datalab/utils/dephash.py +105 -0
  469. datalab/utils/qthelpers.py +633 -0
  470. datalab/utils/strings.py +34 -0
  471. datalab/utils/tests.py +0 -0
  472. datalab/widgets/__init__.py +1 -0
  473. datalab/widgets/connection.py +138 -0
  474. datalab/widgets/filedialog.py +91 -0
  475. datalab/widgets/fileviewer.py +84 -0
  476. datalab/widgets/fitdialog.py +788 -0
  477. datalab/widgets/h5browser.py +1048 -0
  478. datalab/widgets/imagebackground.py +111 -0
  479. datalab/widgets/instconfviewer.py +175 -0
  480. datalab/widgets/logviewer.py +80 -0
  481. datalab/widgets/signalbaseline.py +90 -0
  482. datalab/widgets/signalcursor.py +208 -0
  483. datalab/widgets/signaldeltax.py +151 -0
  484. datalab/widgets/signalpeak.py +199 -0
  485. datalab/widgets/status.py +249 -0
  486. datalab/widgets/textimport.py +786 -0
  487. datalab/widgets/warningerror.py +223 -0
  488. datalab/widgets/wizard.py +286 -0
  489. datalab_platform-1.0.0.dist-info/METADATA +121 -0
  490. datalab_platform-1.0.0.dist-info/RECORD +494 -0
  491. datalab_platform-0.0.1.dev0.dist-info/METADATA +0 -67
  492. datalab_platform-0.0.1.dev0.dist-info/RECORD +0 -7
  493. {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/WHEEL +0 -0
  494. {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/entry_points.txt +0 -0
  495. {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/licenses/LICENSE +0 -0
  496. {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,128 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ X-array compatibility application test.
5
+ """
6
+
7
+ # pylint: disable=invalid-name # Allows short reference names like x, y, ...
8
+ # guitest: show
9
+
10
+ import numpy as np
11
+ from sigima.objects import GaussParam, SignalObj, create_signal_from_param
12
+
13
+ from datalab.config import Conf
14
+ from datalab.tests import datalab_test_app_context
15
+
16
+
17
+ def __check_addition_result(
18
+ result: SignalObj, s_ref: SignalObj, context: str, coeff: float
19
+ ) -> None:
20
+ """Check that the Y data of the result is the same as the reference signal
21
+ multiplied by coeff."""
22
+ assert len(result.x) == len(s_ref.x), f"[{context}] Addition result length mismatch"
23
+ assert np.allclose(result.y, coeff * s_ref.y, atol=1e-4), (
24
+ f"[{context}] Addition result value mismatch"
25
+ )
26
+
27
+
28
+ def __check_difference_result(
29
+ result: SignalObj, s_ref: SignalObj, context: str
30
+ ) -> None:
31
+ """Check that the Y data of the result is zero."""
32
+ assert len(result.x) == len(s_ref.x), (
33
+ f"[{context}] Difference result length mismatch"
34
+ )
35
+ assert np.allclose(result.y, 0.0, atol=1e-4), (
36
+ f"[{context}] Difference result value mismatch"
37
+ )
38
+
39
+
40
+ def test_xarray_compatibility_app():
41
+ """X-array compatibility application test.
42
+
43
+ This test aims at verifying that the X-array compatibility feature works as expected
44
+ in the application context.
45
+ """
46
+ with datalab_test_app_context() as win:
47
+ panel = win.signalpanel
48
+
49
+ # Reference parameters:
50
+ p_ref = GaussParam.create(size=500, xmin=-10, xmax=10)
51
+
52
+ # Parameters with the same number of points but different X ranges:
53
+ p_same_nbp = GaussParam.create(size=500, xmin=-5, xmax=5)
54
+
55
+ # Parameters with different number of points but same X ranges:
56
+ p_same_range = GaussParam.create(size=1000, xmin=-10, xmax=10)
57
+
58
+ # Parameters with different number of points and different X ranges:
59
+ p_different = GaussParam.create(size=1000, xmin=-5, xmax=5)
60
+
61
+ panel.add_object(s_ref := create_signal_from_param(p_ref))
62
+ panel.add_object(s_same_nbp := create_signal_from_param(p_same_nbp))
63
+ panel.add_object(s_same_range := create_signal_from_param(p_same_range))
64
+ panel.add_object(s_different := create_signal_from_param(p_different))
65
+
66
+ # Test with addition operation:
67
+ with Conf.proc.xarray_compat_behavior.temp("interpolate"):
68
+ # Select signals with the same number of points but different X ranges:
69
+ panel.objview.select_objects([s_ref, s_same_nbp])
70
+ panel.processor.run_feature("addition")
71
+ __check_addition_result(
72
+ panel.objview.get_sel_objects()[0], s_ref, "same_nbp", 2.0
73
+ )
74
+
75
+ # Select signals with different number of points but same X ranges:
76
+ panel.objview.select_objects([s_ref, s_same_range])
77
+ panel.processor.run_feature("addition")
78
+ __check_addition_result(
79
+ panel.objview.get_sel_objects()[0], s_ref, "same_range", 2.0
80
+ )
81
+
82
+ # Select signals with different number of points and different X ranges:
83
+ panel.objview.select_objects([s_ref, s_different])
84
+ panel.processor.run_feature("addition")
85
+ __check_addition_result(
86
+ panel.objview.get_sel_objects()[0], s_ref, "different", 2.0
87
+ )
88
+
89
+ # Select all signals and add them:
90
+ panel.objview.select_objects([s_ref, s_same_nbp, s_same_range, s_different])
91
+ panel.processor.run_feature("addition")
92
+ __check_addition_result(
93
+ panel.objview.get_sel_objects()[0], s_ref, "all", 4.0
94
+ )
95
+
96
+ # Select all signals and average them:
97
+ panel.objview.select_objects([s_ref, s_same_nbp, s_same_range, s_different])
98
+ panel.processor.run_feature("average")
99
+ __check_addition_result(
100
+ panel.objview.get_sel_objects()[0], s_ref, "all", 1.0
101
+ )
102
+
103
+ # Test with subtraction operation:
104
+ with Conf.proc.xarray_compat_behavior.temp("interpolate"):
105
+ # Select signals with the same number of points but different X ranges:
106
+ panel.objview.select_objects([s_ref])
107
+ panel.processor.run_feature("difference", obj2=s_same_nbp)
108
+ __check_difference_result(
109
+ panel.objview.get_sel_objects()[0], s_ref, "same_nbp"
110
+ )
111
+
112
+ # Select signals with different number of points but same X ranges:
113
+ panel.objview.select_objects([s_ref])
114
+ panel.processor.run_feature("difference", obj2=s_same_range)
115
+ __check_difference_result(
116
+ panel.objview.get_sel_objects()[0], s_ref, "same_range"
117
+ )
118
+
119
+ # Select signals with different number of points and different X ranges:
120
+ panel.objview.select_objects([s_ref])
121
+ panel.processor.run_feature("difference", obj2=s_different)
122
+ __check_difference_result(
123
+ panel.objview.get_sel_objects()[0], s_ref, "different"
124
+ )
125
+
126
+
127
+ if __name__ == "__main__":
128
+ test_xarray_compatibility_app()
@@ -0,0 +1,22 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ Tour test
5
+ """
6
+
7
+ # guitest: show
8
+
9
+ from datalab.gui.tour import start
10
+ from datalab.tests import datalab_test_app_context
11
+
12
+
13
+ def test_tour() -> None:
14
+ """
15
+ Test the tour of DataLab features.
16
+ """
17
+ with datalab_test_app_context() as win:
18
+ start(win)
19
+
20
+
21
+ if __name__ == "__main__":
22
+ test_tour()
@@ -0,0 +1 @@
1
+ #
@@ -0,0 +1,21 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ Dependencies viewer test
5
+ """
6
+
7
+ # guitest: show
8
+
9
+ from guidata.qthelpers import qt_app_context
10
+
11
+ from datalab.widgets.instconfviewer import exec_datalab_installconfig_dialog
12
+
13
+
14
+ def test_dep_viewer():
15
+ """Test dep viewer window"""
16
+ with qt_app_context():
17
+ exec_datalab_installconfig_dialog()
18
+
19
+
20
+ if __name__ == "__main__":
21
+ test_dep_viewer()
@@ -0,0 +1,21 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ Log viewer test
5
+ """
6
+
7
+ # guitest: show
8
+
9
+ from datalab.app import run
10
+ from datalab.tests import helpers
11
+ from datalab.tests.features.utilities import logview_error
12
+
13
+
14
+ def test_logviewer_app():
15
+ """Test log viewer"""
16
+ helpers.exec_script(logview_error.__file__)
17
+ run()
18
+
19
+
20
+ if __name__ == "__main__":
21
+ test_logviewer_app()
@@ -0,0 +1,24 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ Log viewer test: raise an exception and create a seg fault in DataLab
5
+ """
6
+
7
+ # guitest: skip
8
+
9
+ from guidata.qthelpers import qt_app_context
10
+
11
+ from datalab.env import execenv
12
+ from datalab.gui.main import DLMainWindow
13
+
14
+
15
+ def error():
16
+ """Raise an exception and create a seg fault in DataLab"""
17
+ with execenv.context(unattended=True):
18
+ with qt_app_context(exec_loop=True):
19
+ win = DLMainWindow()
20
+ win.test_segfault_error()
21
+
22
+
23
+ if __name__ == "__main__":
24
+ error()
@@ -0,0 +1,21 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ Log viewer test
5
+ """
6
+
7
+ # guitest: show
8
+
9
+ from guidata.qthelpers import qt_app_context
10
+
11
+ from datalab.widgets.logviewer import exec_datalab_logviewer_dialog
12
+
13
+
14
+ def test_logviewer_dialog():
15
+ """Test log viewer window"""
16
+ with qt_app_context():
17
+ exec_datalab_logviewer_dialog()
18
+
19
+
20
+ if __name__ == "__main__":
21
+ test_logviewer_dialog()
@@ -0,0 +1,42 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ Memory status widget application test
5
+ """
6
+
7
+ # guitest: show
8
+
9
+ import numpy as np
10
+ import psutil
11
+ from sigima.objects import Gauss2DParam
12
+
13
+ from datalab import config
14
+ from datalab.env import execenv
15
+ from datalab.tests import datalab_test_app_context
16
+
17
+
18
+ def memory_alarm(threshold):
19
+ """Memory alarm test"""
20
+ config.Conf.main.available_memory_threshold.set(threshold)
21
+ rng = np.random.default_rng()
22
+ with datalab_test_app_context() as win:
23
+ panel = win.imagepanel
24
+ win.memorystatus.update_status() # Force memory status update
25
+ param = Gauss2DParam.create(
26
+ x0=rng.integers(-9, 9), y0=rng.integers(-9, 9), sigma=rng.integers(1, 20)
27
+ )
28
+ panel.new_object(param, edit=False)
29
+
30
+
31
+ def test_mem_status():
32
+ """Memory alarm test"""
33
+ mem_available = psutil.virtual_memory().available // (1024**2)
34
+ execenv.print(f"Memory status widget test (memory available: {mem_available} MB):")
35
+ for index, threshold in enumerate((mem_available * 2, mem_available - 100)):
36
+ execenv.print(f" Threshold {index}: {threshold} MB")
37
+ memory_alarm(threshold)
38
+ config.reset()
39
+
40
+
41
+ if __name__ == "__main__":
42
+ test_mem_status()
@@ -0,0 +1,88 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ DataLab settings test
5
+ """
6
+
7
+ # guitest: show
8
+
9
+ import guidata.dataset as gds
10
+ from guidata.dataset.qtwidgets import DataSetGroupEditDialog
11
+ from guidata.qthelpers import qt_app_context
12
+ from qtpy import QtWidgets as QW
13
+
14
+ from datalab.config import _
15
+ from datalab.env import execenv
16
+ from datalab.gui.settings import create_dataset_dict, edit_settings
17
+ from datalab.utils import qthelpers as qth
18
+
19
+
20
+ def test_edit_settings():
21
+ """Test edit settings"""
22
+ with qt_app_context():
23
+ changed = edit_settings(None)
24
+ execenv.print(changed)
25
+
26
+
27
+ def capture_settings_screenshots():
28
+ """Capture screenshots of each settings tab
29
+
30
+ Note: Screenshot filenames are language-independent (use English names)
31
+ to ensure consistency across different language builds.
32
+ """
33
+ with qt_app_context(exec_loop=False):
34
+ paramdict = create_dataset_dict()
35
+ params = gds.DataSetGroup(paramdict.values(), title=_("Settings"))
36
+ names = list(paramdict.keys())
37
+
38
+ # Define fixed sub-tab names for View settings (language-independent)
39
+ # These correspond to the order of BeginGroup items in ViewSettings
40
+ view_subtab_names = ["common", "signals", "images", "results"]
41
+
42
+ # Create the dialog manually so we can access the tab widget
43
+ dialog = DataSetGroupEditDialog(
44
+ instance=params, icon="", parent=None, apply=None, wordwrap=True, size=None
45
+ )
46
+
47
+ # Find the main QTabWidget in the dialog
48
+ main_tab_widget = dialog.findChild(QW.QTabWidget)
49
+
50
+ if main_tab_widget is not None:
51
+ # Take a screenshot of each main tab
52
+ for i in range(main_tab_widget.count()):
53
+ main_tab_widget.setCurrentIndex(i)
54
+ dialog.show()
55
+ tab_name = names[i]
56
+
57
+ # Check if this tab contains a nested tab widget (like View settings)
58
+ current_widget = main_tab_widget.currentWidget()
59
+ nested_tab_widgets = current_widget.findChildren(QW.QTabWidget)
60
+
61
+ if nested_tab_widgets:
62
+ # Handle nested tabs (e.g., Common, Signals, Images, Results)
63
+ nested_tab_widget = nested_tab_widgets[0]
64
+ for j in range(nested_tab_widget.count()):
65
+ nested_tab_widget.setCurrentIndex(j)
66
+ # Use predefined names instead of translated tab text
67
+ if tab_name == "view" and j < len(view_subtab_names):
68
+ nested_tab_name = view_subtab_names[j]
69
+ else:
70
+ # Fallback for any other potential nested tabs
71
+ nested_tab_name = f"tab{j}"
72
+ qth.grab_save_window(
73
+ dialog,
74
+ f"settings_{tab_name}_{nested_tab_name}",
75
+ add_timestamp=False,
76
+ )
77
+ else:
78
+ # No nested tabs, just take a screenshot of the main tab
79
+ qth.grab_save_window(
80
+ dialog, f"settings_{tab_name}", add_timestamp=False
81
+ )
82
+
83
+ # Don't execute the dialog, just close it
84
+ dialog.close()
85
+
86
+
87
+ if __name__ == "__main__":
88
+ capture_settings_screenshots()
@@ -0,0 +1 @@
1
+ #
@@ -0,0 +1,121 @@
1
+ # Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
2
+
3
+ """
4
+ beautiful_app
5
+ -------------
6
+
7
+ A high-level test scenario producing beautiful screenshots.
8
+
9
+ .. note::
10
+
11
+ This scenario is used to produce screenshots for the documentation.
12
+ Thus, it is not run by default when running all tests.
13
+
14
+ .. warning::
15
+
16
+ When modifying this scenario, please update the script "update_screenshots.py"
17
+ in the "doc" folder.
18
+ """
19
+
20
+ # pylint: disable=invalid-name # Allows short reference names like x, y, ...
21
+ # guitest: show,skip
22
+
23
+ import sigima.objects
24
+ import sigima.params
25
+ from sigima.tests.data import get_test_image
26
+
27
+ from datalab.config import Conf
28
+ from datalab.tests import datalab_test_app_context
29
+
30
+
31
+ def run_beautiful_scenario(screenshots: bool = False) -> None:
32
+ """High-level test scenario producing beautiful screenshots"""
33
+ data_size = 500
34
+ with datalab_test_app_context(console=False, exec_loop=not screenshots) as win:
35
+ # Beautiful screenshot of a signal
36
+ panel = win.signalpanel
37
+ sig = sigima.objects.create_signal_from_param(sigima.objects.LorentzParam())
38
+ panel.add_object(sig)
39
+ panel.processor.run_feature("fft")
40
+ panel.processor.run_feature("wiener")
41
+ panel.processor.run_feature("derivative")
42
+ panel.processor.run_feature("integral")
43
+ panel.processor.run_feature("gaussian_filter", sigima.params.GaussianParam())
44
+ panel.processor.run_feature("fft")
45
+ panel.processor.run_feature("derivative")
46
+ # Beautiful screenshot of an image
47
+ panel = win.imagepanel
48
+ param = sigima.objects.Gauss2DParam.create(height=data_size, width=data_size)
49
+ ima = sigima.objects.create_image_from_param(param)
50
+ ima.set_metadata_option("colormap", "jet")
51
+ panel.add_object(ima)
52
+ panel.processor.run_feature("equalize_hist", sigima.params.EqualizeHistParam())
53
+ panel.processor.run_feature(
54
+ "equalize_adapthist", sigima.params.EqualizeAdaptHistParam()
55
+ )
56
+ panel.processor.run_feature("denoise_tv", sigima.params.DenoiseTVParam())
57
+ panel.processor.run_feature(
58
+ "denoise_wavelet", sigima.params.DenoiseWaveletParam()
59
+ )
60
+ panel.processor.run_feature("white_tophat", sigima.params.MorphologyParam())
61
+ panel.processor.run_feature("denoise_tv", sigima.params.DenoiseTVParam())
62
+ n = data_size // 3
63
+ roi = sigima.objects.create_image_roi(
64
+ "rectangle", [n, n, data_size - 2 * n, data_size - 2 * n]
65
+ )
66
+ panel.processor.compute_roi_extraction(roi)
67
+ if screenshots:
68
+ win.statusBar().hide()
69
+ win.take_screenshot("i_beautiful")
70
+ win.take_menu_screenshots()
71
+ win.set_current_panel(win.signalpanel)
72
+ win.take_screenshot("s_beautiful")
73
+
74
+
75
+ def run_blob_detection_on_flower_image(screenshots: bool = False) -> None:
76
+ """High-level test scenario for flower image with ROI extraction
77
+
78
+ This scenario creates:
79
+ - A flower test image
80
+ - Roberts edge detection filter applied
81
+ - A rectangular ROI extraction
82
+ - A closing morphological filter to clean up the result
83
+ - Blob detection using OpenCV algorithm
84
+ """
85
+ with datalab_test_app_context(console=False, exec_loop=not screenshots) as win:
86
+ # Create an image panel
87
+ panel = win.imagepanel
88
+
89
+ # Load the flower test image
90
+ ima = get_test_image("flower.npy")
91
+ ima.title = "Test image 'flower.npy'"
92
+ panel.add_object(ima)
93
+
94
+ # Apply Roberts filter for edge detection
95
+ panel.processor.run_feature("roberts")
96
+
97
+ # Extract a rectangular ROI
98
+ roi = sigima.objects.create_image_roi("rectangle", [32, 64, 448, 384])
99
+ panel.processor.compute_roi_extraction(roi)
100
+
101
+ # Apply a closing morphological filter to clean up the result
102
+ closing_param = sigima.params.MorphologyParam.create(radius=10)
103
+ panel.processor.run_feature("closing", closing_param)
104
+
105
+ # Detect blobs using OpenCV algorithm
106
+ param = sigima.params.BlobOpenCVParam()
107
+ param.filter_by_color = False
108
+ param.min_area = 400
109
+ param.max_area = 1000
110
+ param.filter_by_circularity = True
111
+ param.min_circularity = 0.7
112
+ with Conf.proc.show_result_dialog.temp(False):
113
+ with Conf.view.show_result_label.temp(False):
114
+ panel.processor.run_feature("blob_opencv", param)
115
+ if screenshots:
116
+ win.statusBar().hide()
117
+ win.take_screenshot("i_blob_detection_flower")
118
+
119
+
120
+ if __name__ == "__main__":
121
+ run_blob_detection_on_flower_image(screenshots=False)