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.
- datalab/__init__.py +35 -2
- datalab/adapters_metadata/__init__.py +31 -0
- datalab/adapters_metadata/base_adapter.py +316 -0
- datalab/adapters_metadata/common.py +422 -0
- datalab/adapters_metadata/geometry_adapter.py +98 -0
- datalab/adapters_metadata/table_adapter.py +84 -0
- datalab/adapters_plotpy/__init__.py +54 -0
- datalab/adapters_plotpy/annotations.py +124 -0
- datalab/adapters_plotpy/base.py +110 -0
- datalab/adapters_plotpy/converters.py +86 -0
- datalab/adapters_plotpy/factories.py +80 -0
- datalab/adapters_plotpy/objects/__init__.py +0 -0
- datalab/adapters_plotpy/objects/base.py +197 -0
- datalab/adapters_plotpy/objects/image.py +157 -0
- datalab/adapters_plotpy/objects/scalar.py +565 -0
- datalab/adapters_plotpy/objects/signal.py +264 -0
- datalab/adapters_plotpy/roi/__init__.py +0 -0
- datalab/adapters_plotpy/roi/base.py +146 -0
- datalab/adapters_plotpy/roi/factory.py +93 -0
- datalab/adapters_plotpy/roi/image.py +207 -0
- datalab/adapters_plotpy/roi/signal.py +72 -0
- datalab/app.py +98 -0
- datalab/config.py +817 -0
- datalab/control/__init__.py +0 -0
- datalab/control/baseproxy.py +776 -0
- datalab/control/proxy.py +343 -0
- datalab/control/remote.py +1005 -0
- datalab/data/doc/DataLab_en.pdf +0 -0
- datalab/data/doc/DataLab_fr.pdf +0 -0
- datalab/data/icons/analysis/delete_results.svg +109 -0
- datalab/data/icons/analysis/fw1e2.svg +156 -0
- datalab/data/icons/analysis/fwhm.svg +156 -0
- datalab/data/icons/analysis/histogram.svg +49 -0
- datalab/data/icons/analysis/peak_detect.svg +160 -0
- datalab/data/icons/analysis/plot_results.svg +151 -0
- datalab/data/icons/analysis/show_results.svg +83 -0
- datalab/data/icons/analysis/stats.svg +49 -0
- datalab/data/icons/analysis.svg +120 -0
- datalab/data/icons/apply.svg +3 -0
- datalab/data/icons/check_all.svg +15 -0
- datalab/data/icons/collapse.svg +44 -0
- datalab/data/icons/collapse_selection.svg +63 -0
- datalab/data/icons/console.svg +101 -0
- datalab/data/icons/create/1d-normal.svg +8 -0
- datalab/data/icons/create/1d-poisson.svg +9 -0
- datalab/data/icons/create/1d-uniform.svg +8 -0
- datalab/data/icons/create/1d-zero.svg +57 -0
- datalab/data/icons/create/2d-gaussian.svg +56 -0
- datalab/data/icons/create/2d-normal.svg +38 -0
- datalab/data/icons/create/2d-poisson.svg +38 -0
- datalab/data/icons/create/2d-ramp.svg +90 -0
- datalab/data/icons/create/2d-sinc.svg +62 -0
- datalab/data/icons/create/2d-uniform.svg +38 -0
- datalab/data/icons/create/2d-zero.svg +13 -0
- datalab/data/icons/create/checkerboard.svg +39 -0
- datalab/data/icons/create/cosine.svg +12 -0
- datalab/data/icons/create/exponential.svg +55 -0
- datalab/data/icons/create/gaussian.svg +12 -0
- datalab/data/icons/create/grating.svg +29 -0
- datalab/data/icons/create/linear_chirp.svg +7 -0
- datalab/data/icons/create/logistic.svg +7 -0
- datalab/data/icons/create/lorentzian.svg +12 -0
- datalab/data/icons/create/planck.svg +12 -0
- datalab/data/icons/create/polynomial.svg +7 -0
- datalab/data/icons/create/pulse.svg +12 -0
- datalab/data/icons/create/ring.svg +18 -0
- datalab/data/icons/create/sawtooth.svg +7 -0
- datalab/data/icons/create/siemens.svg +35 -0
- datalab/data/icons/create/sinc.svg +12 -0
- datalab/data/icons/create/sine.svg +7 -0
- datalab/data/icons/create/square.svg +7 -0
- datalab/data/icons/create/square_pulse.svg +7 -0
- datalab/data/icons/create/step.svg +7 -0
- datalab/data/icons/create/step_pulse.svg +12 -0
- datalab/data/icons/create/triangle.svg +7 -0
- datalab/data/icons/create/voigt.svg +12 -0
- datalab/data/icons/edit/annotations.svg +72 -0
- datalab/data/icons/edit/annotations_copy.svg +114 -0
- datalab/data/icons/edit/annotations_delete.svg +83 -0
- datalab/data/icons/edit/annotations_edit.svg +98 -0
- datalab/data/icons/edit/annotations_export.svg +85 -0
- datalab/data/icons/edit/annotations_import.svg +85 -0
- datalab/data/icons/edit/annotations_paste.svg +100 -0
- datalab/data/icons/edit/copy_titles.svg +109 -0
- datalab/data/icons/edit/delete.svg +84 -0
- datalab/data/icons/edit/delete_all.svg +214 -0
- datalab/data/icons/edit/duplicate.svg +64 -0
- datalab/data/icons/edit/goto_source.svg +60 -0
- datalab/data/icons/edit/metadata.svg +60 -0
- datalab/data/icons/edit/metadata_add.svg +80 -0
- datalab/data/icons/edit/metadata_copy.svg +96 -0
- datalab/data/icons/edit/metadata_delete.svg +62 -0
- datalab/data/icons/edit/metadata_export.svg +68 -0
- datalab/data/icons/edit/metadata_import.svg +68 -0
- datalab/data/icons/edit/metadata_paste.svg +79 -0
- datalab/data/icons/edit/move_down.svg +55 -0
- datalab/data/icons/edit/move_up.svg +54 -0
- datalab/data/icons/edit/new_group.svg +76 -0
- datalab/data/icons/edit/recompute.svg +60 -0
- datalab/data/icons/edit/rename.svg +49 -0
- datalab/data/icons/edit.svg +16 -0
- datalab/data/icons/expand.svg +44 -0
- datalab/data/icons/expand_selection.svg +63 -0
- datalab/data/icons/fit/cdf_fit.svg +56 -0
- datalab/data/icons/fit/exponential_fit.svg +55 -0
- datalab/data/icons/fit/gaussian_fit.svg +62 -0
- datalab/data/icons/fit/interactive_fit.svg +101 -0
- datalab/data/icons/fit/linear_fit.svg +57 -0
- datalab/data/icons/fit/lorentzian_fit.svg +209 -0
- datalab/data/icons/fit/multigaussian_fit.svg +85 -0
- datalab/data/icons/fit/multilorentzian_fit.svg +85 -0
- datalab/data/icons/fit/piecewiseexponential_fit.svg +209 -0
- datalab/data/icons/fit/planckian_fit.svg +62 -0
- datalab/data/icons/fit/polynomial_fit.svg +59 -0
- datalab/data/icons/fit/sigmoid_fit.svg +56 -0
- datalab/data/icons/fit/sinusoidal_fit.svg +72 -0
- datalab/data/icons/fit/twohalfgaussian_fit.svg +63 -0
- datalab/data/icons/fit/voigt_fit.svg +57 -0
- datalab/data/icons/group.svg +56 -0
- datalab/data/icons/h5/h5array.svg +59 -0
- datalab/data/icons/h5/h5attrs.svg +75 -0
- datalab/data/icons/h5/h5browser.svg +133 -0
- datalab/data/icons/h5/h5file.svg +69 -0
- datalab/data/icons/h5/h5group.svg +49 -0
- datalab/data/icons/h5/h5scalar.svg +1 -0
- datalab/data/icons/help_pdf.svg +46 -0
- datalab/data/icons/history.svg +7 -0
- datalab/data/icons/image.svg +135 -0
- datalab/data/icons/io/fileopen_directory.svg +60 -0
- datalab/data/icons/io/fileopen_h5.svg +84 -0
- datalab/data/icons/io/fileopen_ima.svg +187 -0
- datalab/data/icons/io/fileopen_py.svg +123 -0
- datalab/data/icons/io/fileopen_sig.svg +138 -0
- datalab/data/icons/io/filesave_h5.svg +97 -0
- datalab/data/icons/io/filesave_ima.svg +200 -0
- datalab/data/icons/io/filesave_py.svg +136 -0
- datalab/data/icons/io/filesave_sig.svg +151 -0
- datalab/data/icons/io/import_text.svg +144 -0
- datalab/data/icons/io/save_to_directory.svg +134 -0
- datalab/data/icons/io.svg +84 -0
- datalab/data/icons/libre-camera-flash-off.svg +1 -0
- datalab/data/icons/libre-camera-flash-on.svg +1 -0
- datalab/data/icons/libre-gui-about.svg +1 -0
- datalab/data/icons/libre-gui-action-delete.svg +1 -0
- datalab/data/icons/libre-gui-add.svg +1 -0
- datalab/data/icons/libre-gui-arrow-down.svg +1 -0
- datalab/data/icons/libre-gui-arrow-left.svg +1 -0
- datalab/data/icons/libre-gui-arrow-right.svg +1 -0
- datalab/data/icons/libre-gui-arrow-up.svg +1 -0
- datalab/data/icons/libre-gui-close.svg +40 -0
- datalab/data/icons/libre-gui-cogs.svg +1 -0
- datalab/data/icons/libre-gui-globe.svg +1 -0
- datalab/data/icons/libre-gui-help.svg +1 -0
- datalab/data/icons/libre-gui-link.svg +1 -0
- datalab/data/icons/libre-gui-menu.svg +1 -0
- datalab/data/icons/libre-gui-pencil.svg +1 -0
- datalab/data/icons/libre-gui-plugin.svg +1 -0
- datalab/data/icons/libre-gui-questions.svg +1 -0
- datalab/data/icons/libre-gui-settings.svg +1 -0
- datalab/data/icons/libre-gui-unlink.svg +1 -0
- datalab/data/icons/libre-tech-ram.svg +1 -0
- datalab/data/icons/libre-toolbox.svg +1 -0
- datalab/data/icons/logs.svg +1 -0
- datalab/data/icons/markers.svg +74 -0
- datalab/data/icons/menu.svg +13 -0
- datalab/data/icons/new_ima.svg +148 -0
- datalab/data/icons/new_sig.svg +123 -0
- datalab/data/icons/operations/abs.svg +116 -0
- datalab/data/icons/operations/arithmetic.svg +123 -0
- datalab/data/icons/operations/average.svg +124 -0
- datalab/data/icons/operations/complex_from_magnitude_phase.svg +116 -0
- datalab/data/icons/operations/complex_from_real_imag.svg +124 -0
- datalab/data/icons/operations/constant.svg +116 -0
- datalab/data/icons/operations/constant_add.svg +109 -0
- datalab/data/icons/operations/constant_divide.svg +109 -0
- datalab/data/icons/operations/constant_multiply.svg +109 -0
- datalab/data/icons/operations/constant_subtract.svg +109 -0
- datalab/data/icons/operations/convert_dtype.svg +117 -0
- datalab/data/icons/operations/convolution.svg +46 -0
- datalab/data/icons/operations/deconvolution.svg +57 -0
- datalab/data/icons/operations/derivative.svg +127 -0
- datalab/data/icons/operations/difference.svg +52 -0
- datalab/data/icons/operations/division.svg +139 -0
- datalab/data/icons/operations/exp.svg +116 -0
- datalab/data/icons/operations/flip_horizontally.svg +69 -0
- datalab/data/icons/operations/flip_vertically.svg +74 -0
- datalab/data/icons/operations/im.svg +124 -0
- datalab/data/icons/operations/integral.svg +50 -0
- datalab/data/icons/operations/inverse.svg +143 -0
- datalab/data/icons/operations/log10.svg +109 -0
- datalab/data/icons/operations/phase.svg +116 -0
- datalab/data/icons/operations/power.svg +118 -0
- datalab/data/icons/operations/product.svg +124 -0
- datalab/data/icons/operations/profile.svg +379 -0
- datalab/data/icons/operations/profile_average.svg +399 -0
- datalab/data/icons/operations/profile_radial.svg +261 -0
- datalab/data/icons/operations/profile_segment.svg +262 -0
- datalab/data/icons/operations/quadratic_difference.svg +84 -0
- datalab/data/icons/operations/re.svg +124 -0
- datalab/data/icons/operations/rotate_left.svg +72 -0
- datalab/data/icons/operations/rotate_right.svg +72 -0
- datalab/data/icons/operations/signals_to_image.svg +314 -0
- datalab/data/icons/operations/sqrt.svg +110 -0
- datalab/data/icons/operations/std.svg +124 -0
- datalab/data/icons/operations/sum.svg +102 -0
- datalab/data/icons/play_demo.svg +9 -0
- datalab/data/icons/processing/axis_transform.svg +62 -0
- datalab/data/icons/processing/bandpass.svg +79 -0
- datalab/data/icons/processing/bandstop.svg +71 -0
- datalab/data/icons/processing/binning.svg +126 -0
- datalab/data/icons/processing/clip.svg +119 -0
- datalab/data/icons/processing/detrending.svg +173 -0
- datalab/data/icons/processing/distribute_on_grid.svg +769 -0
- datalab/data/icons/processing/edge_detection.svg +46 -0
- datalab/data/icons/processing/erase.svg +1 -0
- datalab/data/icons/processing/exposure.svg +143 -0
- datalab/data/icons/processing/fourier.svg +104 -0
- datalab/data/icons/processing/highpass.svg +59 -0
- datalab/data/icons/processing/interpolation.svg +71 -0
- datalab/data/icons/processing/level_adjustment.svg +70 -0
- datalab/data/icons/processing/lowpass.svg +60 -0
- datalab/data/icons/processing/morphology.svg +49 -0
- datalab/data/icons/processing/noise_addition.svg +114 -0
- datalab/data/icons/processing/noise_reduction.svg +38 -0
- datalab/data/icons/processing/normalize.svg +84 -0
- datalab/data/icons/processing/offset_correction.svg +131 -0
- datalab/data/icons/processing/resampling1d.svg +101 -0
- datalab/data/icons/processing/resampling2d.svg +240 -0
- datalab/data/icons/processing/reset_positions.svg +185 -0
- datalab/data/icons/processing/resize.svg +9 -0
- datalab/data/icons/processing/reverse_signal_x.svg +171 -0
- datalab/data/icons/processing/stability.svg +11 -0
- datalab/data/icons/processing/swap_x_y.svg +65 -0
- datalab/data/icons/processing/thresholding.svg +63 -0
- datalab/data/icons/processing/windowing.svg +45 -0
- datalab/data/icons/properties.svg +26 -0
- datalab/data/icons/reset.svg +9 -0
- datalab/data/icons/restore.svg +40 -0
- datalab/data/icons/roi/roi.svg +76 -0
- datalab/data/icons/roi/roi_coordinate.svg +78 -0
- datalab/data/icons/roi/roi_copy.svg +112 -0
- datalab/data/icons/roi/roi_delete.svg +81 -0
- datalab/data/icons/roi/roi_export.svg +87 -0
- datalab/data/icons/roi/roi_graphical.svg +78 -0
- datalab/data/icons/roi/roi_grid.svg +67 -0
- datalab/data/icons/roi/roi_ima.svg +188 -0
- datalab/data/icons/roi/roi_import.svg +87 -0
- datalab/data/icons/roi/roi_new.svg +81 -0
- datalab/data/icons/roi/roi_new_circle.svg +95 -0
- datalab/data/icons/roi/roi_new_polygon.svg +110 -0
- datalab/data/icons/roi/roi_new_rectangle.svg +70 -0
- datalab/data/icons/roi/roi_paste.svg +98 -0
- datalab/data/icons/roi/roi_sig.svg +124 -0
- datalab/data/icons/shapes.svg +134 -0
- datalab/data/icons/signal.svg +103 -0
- datalab/data/icons/table.svg +85 -0
- datalab/data/icons/table_unavailable.svg +102 -0
- datalab/data/icons/to_signal.svg +124 -0
- datalab/data/icons/tour/next.svg +44 -0
- datalab/data/icons/tour/previous.svg +44 -0
- datalab/data/icons/tour/rewind.svg +51 -0
- datalab/data/icons/tour/stop.svg +47 -0
- datalab/data/icons/tour/tour.svg +16 -0
- datalab/data/icons/uncheck_all.svg +78 -0
- datalab/data/icons/view/curve_antialiasing.svg +50 -0
- datalab/data/icons/view/new_window.svg +98 -0
- datalab/data/icons/view/refresh-auto.svg +57 -0
- datalab/data/icons/view/refresh-manual.svg +51 -0
- datalab/data/icons/view/reset_curve_styles.svg +96 -0
- datalab/data/icons/view/show_first.svg +55 -0
- datalab/data/icons/view/show_titles.svg +46 -0
- datalab/data/icons/visualization.svg +51 -0
- datalab/data/logo/DataLab-Banner-150.png +0 -0
- datalab/data/logo/DataLab-Banner-200.png +0 -0
- datalab/data/logo/DataLab-Banner2-100.png +0 -0
- datalab/data/logo/DataLab-Splash.png +0 -0
- datalab/data/logo/DataLab-watermark.png +0 -0
- datalab/data/logo/DataLab.svg +83 -0
- datalab/data/tests/reordering_test.h5 +0 -0
- datalab/data/tutorials/fabry_perot/fabry-perot1.jpg +0 -0
- datalab/data/tutorials/fabry_perot/fabry-perot2.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_13.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_18.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_23.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_30.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_35.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_40.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_45.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_50.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_55.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_60.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_65.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_70.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_75.jpg +0 -0
- datalab/data/tutorials/laser_beam/TEM00_z_80.jpg +0 -0
- datalab/env.py +542 -0
- datalab/gui/__init__.py +89 -0
- datalab/gui/actionhandler.py +1701 -0
- datalab/gui/docks.py +473 -0
- datalab/gui/h5io.py +150 -0
- datalab/gui/macroeditor.py +310 -0
- datalab/gui/main.py +2081 -0
- datalab/gui/newobject.py +217 -0
- datalab/gui/objectview.py +766 -0
- datalab/gui/panel/__init__.py +48 -0
- datalab/gui/panel/base.py +3254 -0
- datalab/gui/panel/image.py +157 -0
- datalab/gui/panel/macro.py +607 -0
- datalab/gui/panel/signal.py +164 -0
- datalab/gui/plothandler.py +800 -0
- datalab/gui/processor/__init__.py +84 -0
- datalab/gui/processor/base.py +2456 -0
- datalab/gui/processor/catcher.py +75 -0
- datalab/gui/processor/image.py +1214 -0
- datalab/gui/processor/signal.py +755 -0
- datalab/gui/profiledialog.py +333 -0
- datalab/gui/roieditor.py +633 -0
- datalab/gui/roigrideditor.py +208 -0
- datalab/gui/settings.py +612 -0
- datalab/gui/tour.py +908 -0
- datalab/h5/__init__.py +12 -0
- datalab/h5/common.py +314 -0
- datalab/h5/generic.py +580 -0
- datalab/h5/native.py +39 -0
- datalab/h5/utils.py +95 -0
- datalab/objectmodel.py +640 -0
- datalab/plugins/_readme_.txt +9 -0
- datalab/plugins/datalab_imageformats.py +175 -0
- datalab/plugins/datalab_testdata.py +190 -0
- datalab/plugins.py +355 -0
- datalab/tests/__init__.py +199 -0
- datalab/tests/backbone/__init__.py +1 -0
- datalab/tests/backbone/config_unit_test.py +170 -0
- datalab/tests/backbone/config_versioning_unit_test.py +34 -0
- datalab/tests/backbone/dictlistserial_app_test.py +38 -0
- datalab/tests/backbone/errorcatcher_unit_test.py +69 -0
- datalab/tests/backbone/errormsgbox_unit_test.py +50 -0
- datalab/tests/backbone/execenv_unit.py +262 -0
- datalab/tests/backbone/loadtest_gdi.py +147 -0
- datalab/tests/backbone/long_callback.py +96 -0
- datalab/tests/backbone/main_app_test.py +137 -0
- datalab/tests/backbone/memory_leak.py +43 -0
- datalab/tests/backbone/procisolation1_unit.py +128 -0
- datalab/tests/backbone/procisolation2_unit.py +171 -0
- datalab/tests/backbone/procisolation_unit_test.py +22 -0
- datalab/tests/backbone/profiling_app.py +27 -0
- datalab/tests/backbone/strings_unit_test.py +65 -0
- datalab/tests/backbone/title_formatting_unit_test.py +82 -0
- datalab/tests/conftest.py +131 -0
- datalab/tests/features/__init__.py +1 -0
- datalab/tests/features/applauncher/__init__.py +1 -0
- datalab/tests/features/applauncher/launcher1_app_test.py +28 -0
- datalab/tests/features/applauncher/launcher2_app_test.py +30 -0
- datalab/tests/features/common/__init__.py +1 -0
- datalab/tests/features/common/add_metadata_app_test.py +134 -0
- datalab/tests/features/common/add_metadata_unit_test.py +267 -0
- datalab/tests/features/common/annotations_management_unit_test.py +152 -0
- datalab/tests/features/common/auto_analysis_recompute_unit_test.py +240 -0
- datalab/tests/features/common/createobject_unit_test.py +50 -0
- datalab/tests/features/common/geometry_results_app_test.py +135 -0
- datalab/tests/features/common/interactive_processing_test.py +1109 -0
- datalab/tests/features/common/io_app_test.py +75 -0
- datalab/tests/features/common/large_results_app_test.py +187 -0
- datalab/tests/features/common/metadata_all_patterns_test.py +103 -0
- datalab/tests/features/common/metadata_app_test.py +139 -0
- datalab/tests/features/common/metadata_io_unit_test.py +60 -0
- datalab/tests/features/common/misc_app_test.py +236 -0
- datalab/tests/features/common/multiple_geometry_results_unit_test.py +122 -0
- datalab/tests/features/common/multiple_table_results_unit_test.py +64 -0
- datalab/tests/features/common/operation_modes_app_test.py +392 -0
- datalab/tests/features/common/plot_results_app_test.py +278 -0
- datalab/tests/features/common/reorder_app_test.py +75 -0
- datalab/tests/features/common/result_deletion_unit_test.py +96 -0
- datalab/tests/features/common/result_merged_label_unit_test.py +154 -0
- datalab/tests/features/common/result_shape_settings_unit_test.py +223 -0
- datalab/tests/features/common/roi_plotitem_unit_test.py +64 -0
- datalab/tests/features/common/roieditor_unit_test.py +102 -0
- datalab/tests/features/common/save_to_dir_app_test.py +163 -0
- datalab/tests/features/common/save_to_dir_unit_test.py +474 -0
- datalab/tests/features/common/stat_app_test.py +40 -0
- datalab/tests/features/common/stats_tools_unit_test.py +77 -0
- datalab/tests/features/common/table_results_app_test.py +52 -0
- datalab/tests/features/common/textimport_unit_test.py +131 -0
- datalab/tests/features/common/uuid_preservation_test.py +281 -0
- datalab/tests/features/common/worker_unit_test.py +402 -0
- datalab/tests/features/control/__init__.py +1 -0
- datalab/tests/features/control/connect_dialog.py +28 -0
- datalab/tests/features/control/embedded1_unit_test.py +304 -0
- datalab/tests/features/control/embedded2_unit_test.py +52 -0
- datalab/tests/features/control/remoteclient_app_test.py +219 -0
- datalab/tests/features/control/remoteclient_unit.py +75 -0
- datalab/tests/features/control/simpleclient_unit_test.py +321 -0
- datalab/tests/features/hdf5/__init__.py +1 -0
- datalab/tests/features/hdf5/h5browser1_unit_test.py +31 -0
- datalab/tests/features/hdf5/h5browser2_unit.py +55 -0
- datalab/tests/features/hdf5/h5browser_app_test.py +77 -0
- datalab/tests/features/hdf5/h5import_app_test.py +25 -0
- datalab/tests/features/hdf5/h5importer_app_test.py +34 -0
- datalab/tests/features/image/__init__.py +1 -0
- datalab/tests/features/image/annotations_app_test.py +28 -0
- datalab/tests/features/image/annotations_unit_test.py +80 -0
- datalab/tests/features/image/average_app_test.py +46 -0
- datalab/tests/features/image/background_dialog_test.py +70 -0
- datalab/tests/features/image/blobs_app_test.py +50 -0
- datalab/tests/features/image/contour_app_test.py +42 -0
- datalab/tests/features/image/contour_fabryperot_app_test.py +51 -0
- datalab/tests/features/image/denoise_app_test.py +31 -0
- datalab/tests/features/image/distribute_on_grid_app_test.py +95 -0
- datalab/tests/features/image/edges_app_test.py +31 -0
- datalab/tests/features/image/erase_app_test.py +21 -0
- datalab/tests/features/image/fft2d_app_test.py +27 -0
- datalab/tests/features/image/flatfield_app_test.py +40 -0
- datalab/tests/features/image/geometry_transform_unit_test.py +396 -0
- datalab/tests/features/image/imagetools_app_test.py +51 -0
- datalab/tests/features/image/imagetools_unit_test.py +27 -0
- datalab/tests/features/image/load_app_test.py +73 -0
- datalab/tests/features/image/morph_app_test.py +32 -0
- datalab/tests/features/image/offsetcorrection_app_test.py +30 -0
- datalab/tests/features/image/peak2d_app_test.py +53 -0
- datalab/tests/features/image/profile_app_test.py +73 -0
- datalab/tests/features/image/profile_dialog_test.py +56 -0
- datalab/tests/features/image/roi_app_test.py +98 -0
- datalab/tests/features/image/roi_circ_app_test.py +62 -0
- datalab/tests/features/image/roi_manipulation_app_test.py +268 -0
- datalab/tests/features/image/roigrid_unit_test.py +60 -0
- datalab/tests/features/image/side_by_side_app_test.py +52 -0
- datalab/tests/features/macro/__init__.py +1 -0
- datalab/tests/features/macro/macro_app_test.py +28 -0
- datalab/tests/features/macro/macroeditor_unit_test.py +102 -0
- datalab/tests/features/signal/__init__.py +1 -0
- datalab/tests/features/signal/baseline_dialog_test.py +53 -0
- datalab/tests/features/signal/deltax_dialog_unit_test.py +34 -0
- datalab/tests/features/signal/fft1d_app_test.py +26 -0
- datalab/tests/features/signal/filter_app_test.py +44 -0
- datalab/tests/features/signal/fitdialog_unit_test.py +50 -0
- datalab/tests/features/signal/interpolation_app_test.py +110 -0
- datalab/tests/features/signal/loadbigsignal_app_test.py +80 -0
- datalab/tests/features/signal/multiple_rois_unit_test.py +132 -0
- datalab/tests/features/signal/pulse_features_app_test.py +118 -0
- datalab/tests/features/signal/pulse_features_roi_app_test.py +55 -0
- datalab/tests/features/signal/roi_app_test.py +78 -0
- datalab/tests/features/signal/roi_manipulation_app_test.py +261 -0
- datalab/tests/features/signal/select_xy_cursor_unit_test.py +46 -0
- datalab/tests/features/signal/signalpeakdetection_dialog_test.py +33 -0
- datalab/tests/features/signal/signals_to_image_app_test.py +98 -0
- datalab/tests/features/signal/xarray_compat_app_test.py +128 -0
- datalab/tests/features/tour_unit_test.py +22 -0
- datalab/tests/features/utilities/__init__.py +1 -0
- datalab/tests/features/utilities/installconf_unit_test.py +21 -0
- datalab/tests/features/utilities/logview_app_test.py +21 -0
- datalab/tests/features/utilities/logview_error.py +24 -0
- datalab/tests/features/utilities/logview_unit_test.py +21 -0
- datalab/tests/features/utilities/memstatus_app_test.py +42 -0
- datalab/tests/features/utilities/settings_unit_test.py +88 -0
- datalab/tests/scenarios/__init__.py +1 -0
- datalab/tests/scenarios/beautiful_app.py +121 -0
- datalab/tests/scenarios/common.py +463 -0
- datalab/tests/scenarios/demo.py +212 -0
- datalab/tests/scenarios/example_app_test.py +47 -0
- datalab/tests/scenarios/scenario_h5_app_test.py +75 -0
- datalab/tests/scenarios/scenario_ima1_app_test.py +34 -0
- datalab/tests/scenarios/scenario_ima2_app_test.py +34 -0
- datalab/tests/scenarios/scenario_mac_app_test.py +58 -0
- datalab/tests/scenarios/scenario_sig1_app_test.py +36 -0
- datalab/tests/scenarios/scenario_sig2_app_test.py +35 -0
- datalab/utils/__init__.py +1 -0
- datalab/utils/conf.py +304 -0
- datalab/utils/dephash.py +105 -0
- datalab/utils/qthelpers.py +633 -0
- datalab/utils/strings.py +34 -0
- datalab/utils/tests.py +0 -0
- datalab/widgets/__init__.py +1 -0
- datalab/widgets/connection.py +138 -0
- datalab/widgets/filedialog.py +91 -0
- datalab/widgets/fileviewer.py +84 -0
- datalab/widgets/fitdialog.py +788 -0
- datalab/widgets/h5browser.py +1048 -0
- datalab/widgets/imagebackground.py +111 -0
- datalab/widgets/instconfviewer.py +175 -0
- datalab/widgets/logviewer.py +80 -0
- datalab/widgets/signalbaseline.py +90 -0
- datalab/widgets/signalcursor.py +208 -0
- datalab/widgets/signaldeltax.py +151 -0
- datalab/widgets/signalpeak.py +199 -0
- datalab/widgets/status.py +249 -0
- datalab/widgets/textimport.py +786 -0
- datalab/widgets/warningerror.py +223 -0
- datalab/widgets/wizard.py +286 -0
- datalab_platform-1.0.0.dist-info/METADATA +121 -0
- datalab_platform-1.0.0.dist-info/RECORD +494 -0
- datalab_platform-0.0.1.dev0.dist-info/METADATA +0 -67
- datalab_platform-0.0.1.dev0.dist-info/RECORD +0 -7
- {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/WHEEL +0 -0
- {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/entry_points.txt +0 -0
- {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.0.dist-info}/licenses/LICENSE +0 -0
- {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)
|