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,776 @@
|
|
|
1
|
+
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
DataLab base proxy module
|
|
5
|
+
-------------------------
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
# How to add a new method to the proxy:
|
|
9
|
+
# -------------------------------------
|
|
10
|
+
#
|
|
11
|
+
# 1. Add the method to the AbstractDLControl class, as an abstract method
|
|
12
|
+
#
|
|
13
|
+
# 2a. If the method requires any data conversion to get through the XML-RPC layer,
|
|
14
|
+
# implement the method in both LocalProxy and RemoteClient classes
|
|
15
|
+
#
|
|
16
|
+
# 2b. If the method does not require any data conversion, implement the method
|
|
17
|
+
# directly in the BaseProxy class, so that it is available to both LocalProxy
|
|
18
|
+
# and RemoteClient classes without any code duplication
|
|
19
|
+
#
|
|
20
|
+
# 3. Implement the method in the DLMainWindow class
|
|
21
|
+
#
|
|
22
|
+
# 4. Implement the method in the RemoteServer class (it will be automatically
|
|
23
|
+
# registered as an XML-RPC method, like all methods of AbstractDLControl)
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
import abc
|
|
28
|
+
from contextlib import contextmanager
|
|
29
|
+
from typing import TYPE_CHECKING, Generator
|
|
30
|
+
|
|
31
|
+
import guidata.dataset as gds
|
|
32
|
+
import numpy as np
|
|
33
|
+
from sigima import ImageObj, SignalObj
|
|
34
|
+
|
|
35
|
+
if TYPE_CHECKING:
|
|
36
|
+
from collections.abc import Iterator
|
|
37
|
+
|
|
38
|
+
from datalab.control.remote import ServerProxy
|
|
39
|
+
from datalab.gui.main import DLMainWindow
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class AbstractDLControl(abc.ABC):
|
|
43
|
+
"""Abstract base class for controlling DataLab (main window or remote server)"""
|
|
44
|
+
|
|
45
|
+
def __len__(self) -> int:
|
|
46
|
+
"""Return number of objects"""
|
|
47
|
+
return len(self.get_object_uuids())
|
|
48
|
+
|
|
49
|
+
def __getitem__(self, nb_id_title: int | str | None = None) -> SignalObj | ImageObj:
|
|
50
|
+
"""Return object"""
|
|
51
|
+
return self.get_object(nb_id_title)
|
|
52
|
+
|
|
53
|
+
def __iter__(self) -> Iterator[SignalObj | ImageObj]:
|
|
54
|
+
"""Iterate over objects"""
|
|
55
|
+
uuids = self.get_object_uuids()
|
|
56
|
+
for uuid in uuids:
|
|
57
|
+
yield self.get_object(uuid)
|
|
58
|
+
|
|
59
|
+
def __str__(self) -> str:
|
|
60
|
+
"""Return object string representation"""
|
|
61
|
+
return super().__repr__()
|
|
62
|
+
|
|
63
|
+
def __repr__(self) -> str:
|
|
64
|
+
"""Return object representation"""
|
|
65
|
+
titles = self.get_object_titles()
|
|
66
|
+
uuids = self.get_object_uuids()
|
|
67
|
+
text = f"{str(self)} (DataLab, {len(titles)} items):\n"
|
|
68
|
+
for uuid, title in zip(uuids, titles):
|
|
69
|
+
text += f" {uuid}: {title}\n"
|
|
70
|
+
return text
|
|
71
|
+
|
|
72
|
+
def __bool__(self) -> bool:
|
|
73
|
+
"""Return True if model is not empty"""
|
|
74
|
+
return bool(self.get_object_uuids())
|
|
75
|
+
|
|
76
|
+
def __contains__(self, id_title: str) -> bool:
|
|
77
|
+
"""Return True if object (UUID or title) is in model"""
|
|
78
|
+
return id_title in (self.get_object_titles() + self.get_object_uuids())
|
|
79
|
+
|
|
80
|
+
@classmethod
|
|
81
|
+
def get_public_methods(cls) -> list[str]:
|
|
82
|
+
"""Return all public methods of the class, except itself.
|
|
83
|
+
|
|
84
|
+
Returns:
|
|
85
|
+
List of public methods
|
|
86
|
+
"""
|
|
87
|
+
return [
|
|
88
|
+
method
|
|
89
|
+
for method in dir(cls)
|
|
90
|
+
if not method.startswith(("_", "context_"))
|
|
91
|
+
and method != "get_public_methods"
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
@abc.abstractmethod
|
|
95
|
+
def get_version(self) -> str:
|
|
96
|
+
"""Return DataLab public version.
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
DataLab version
|
|
100
|
+
"""
|
|
101
|
+
|
|
102
|
+
@abc.abstractmethod
|
|
103
|
+
def close_application(self) -> None:
|
|
104
|
+
"""Close DataLab application"""
|
|
105
|
+
|
|
106
|
+
@abc.abstractmethod
|
|
107
|
+
def raise_window(self) -> None:
|
|
108
|
+
"""Raise DataLab window"""
|
|
109
|
+
|
|
110
|
+
@abc.abstractmethod
|
|
111
|
+
def get_current_panel(self) -> str:
|
|
112
|
+
"""Return current panel name.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Panel name (valid values: "signal", "image", "macro"))
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
@abc.abstractmethod
|
|
119
|
+
def set_current_panel(self, panel: str) -> None:
|
|
120
|
+
"""Switch to panel.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
panel: Panel name (valid values: "signal", "image", "macro"))
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
@abc.abstractmethod
|
|
127
|
+
def reset_all(self) -> None:
|
|
128
|
+
"""Reset all application data"""
|
|
129
|
+
|
|
130
|
+
@abc.abstractmethod
|
|
131
|
+
def toggle_auto_refresh(self, state: bool) -> None:
|
|
132
|
+
"""Toggle auto refresh state.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
state: Auto refresh state
|
|
136
|
+
"""
|
|
137
|
+
|
|
138
|
+
# Returns a context manager to temporarily disable autorefresh
|
|
139
|
+
@contextmanager
|
|
140
|
+
def context_no_refresh(self) -> Generator[None, None, None]:
|
|
141
|
+
"""Return a context manager to temporarily disable auto refresh.
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
Context manager
|
|
145
|
+
|
|
146
|
+
Example:
|
|
147
|
+
|
|
148
|
+
>>> with proxy.context_no_refresh():
|
|
149
|
+
... proxy.add_image("image1", data1)
|
|
150
|
+
... proxy.calc("fft")
|
|
151
|
+
... proxy.calc("wiener")
|
|
152
|
+
... proxy.calc("ifft")
|
|
153
|
+
... # Auto refresh is disabled during the above operations
|
|
154
|
+
"""
|
|
155
|
+
self.toggle_auto_refresh(False)
|
|
156
|
+
try:
|
|
157
|
+
yield
|
|
158
|
+
finally:
|
|
159
|
+
self.toggle_auto_refresh(True)
|
|
160
|
+
|
|
161
|
+
@abc.abstractmethod
|
|
162
|
+
def toggle_show_titles(self, state: bool) -> None:
|
|
163
|
+
"""Toggle show titles state.
|
|
164
|
+
|
|
165
|
+
Args:
|
|
166
|
+
state: Show titles state
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
@abc.abstractmethod
|
|
170
|
+
def save_to_h5_file(self, filename: str) -> None:
|
|
171
|
+
"""Save to a DataLab HDF5 file.
|
|
172
|
+
|
|
173
|
+
Args:
|
|
174
|
+
filename: HDF5 file name
|
|
175
|
+
"""
|
|
176
|
+
|
|
177
|
+
@abc.abstractmethod
|
|
178
|
+
def open_h5_files(
|
|
179
|
+
self,
|
|
180
|
+
h5files: list[str] | None = None,
|
|
181
|
+
import_all: bool | None = None,
|
|
182
|
+
reset_all: bool | None = None,
|
|
183
|
+
) -> None:
|
|
184
|
+
"""Open a DataLab HDF5 file or import from any other HDF5 file.
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
h5files: List of HDF5 files to open. Defaults to None.
|
|
188
|
+
import_all: Import all objects from HDF5 files. Defaults to None.
|
|
189
|
+
reset_all: Reset all application data. Defaults to None.
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
@abc.abstractmethod
|
|
193
|
+
def import_h5_file(self, filename: str, reset_all: bool | None = None) -> None:
|
|
194
|
+
"""Open DataLab HDF5 browser to Import HDF5 file.
|
|
195
|
+
|
|
196
|
+
Args:
|
|
197
|
+
filename: HDF5 file name
|
|
198
|
+
reset_all: Reset all application data. Defaults to None.
|
|
199
|
+
"""
|
|
200
|
+
|
|
201
|
+
@abc.abstractmethod
|
|
202
|
+
def load_from_files(self, filenames: list[str]) -> None:
|
|
203
|
+
"""Open objects from files in current panel (signals/images).
|
|
204
|
+
|
|
205
|
+
Args:
|
|
206
|
+
filenames: list of file names
|
|
207
|
+
"""
|
|
208
|
+
|
|
209
|
+
@abc.abstractmethod
|
|
210
|
+
def load_from_directory(self, path: str) -> None:
|
|
211
|
+
"""Open objects from directory in current panel (signals/images).
|
|
212
|
+
|
|
213
|
+
Args:
|
|
214
|
+
path: directory path
|
|
215
|
+
"""
|
|
216
|
+
|
|
217
|
+
@abc.abstractmethod
|
|
218
|
+
def add_signal(
|
|
219
|
+
self,
|
|
220
|
+
title: str,
|
|
221
|
+
xdata: np.ndarray,
|
|
222
|
+
ydata: np.ndarray,
|
|
223
|
+
xunit: str = "",
|
|
224
|
+
yunit: str = "",
|
|
225
|
+
xlabel: str = "",
|
|
226
|
+
ylabel: str = "",
|
|
227
|
+
group_id: str = "",
|
|
228
|
+
set_current: bool = True,
|
|
229
|
+
) -> bool: # pylint: disable=too-many-arguments
|
|
230
|
+
"""Add signal data to DataLab.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
title: Signal title
|
|
234
|
+
xdata: X data
|
|
235
|
+
ydata: Y data
|
|
236
|
+
xunit: X unit. Defaults to ""
|
|
237
|
+
yunit: Y unit. Defaults to ""
|
|
238
|
+
xlabel: X label. Defaults to ""
|
|
239
|
+
ylabel: Y label. Defaults to ""
|
|
240
|
+
group_id: group id in which to add the signal. Defaults to ""
|
|
241
|
+
set_current: if True, set the added signal as current
|
|
242
|
+
|
|
243
|
+
Returns:
|
|
244
|
+
True if signal was added successfully, False otherwise
|
|
245
|
+
|
|
246
|
+
Raises:
|
|
247
|
+
ValueError: Invalid xdata dtype
|
|
248
|
+
ValueError: Invalid ydata dtype
|
|
249
|
+
"""
|
|
250
|
+
|
|
251
|
+
@abc.abstractmethod
|
|
252
|
+
def add_image(
|
|
253
|
+
self,
|
|
254
|
+
title: str,
|
|
255
|
+
data: np.ndarray,
|
|
256
|
+
xunit: str = "",
|
|
257
|
+
yunit: str = "",
|
|
258
|
+
zunit: str = "",
|
|
259
|
+
xlabel: str = "",
|
|
260
|
+
ylabel: str = "",
|
|
261
|
+
zlabel: str = "",
|
|
262
|
+
group_id: str = "",
|
|
263
|
+
set_current: bool = True,
|
|
264
|
+
) -> bool: # pylint: disable=too-many-arguments
|
|
265
|
+
"""Add image data to DataLab.
|
|
266
|
+
|
|
267
|
+
Args:
|
|
268
|
+
title: Image title
|
|
269
|
+
data: Image data
|
|
270
|
+
xunit: X unit. Defaults to ""
|
|
271
|
+
yunit: Y unit. Defaults to ""
|
|
272
|
+
zunit: Z unit. Defaults to ""
|
|
273
|
+
xlabel: X label. Defaults to ""
|
|
274
|
+
ylabel: Y label. Defaults to ""
|
|
275
|
+
zlabel: Z label. Defaults to ""
|
|
276
|
+
group_id: group id in which to add the image. Defaults to ""
|
|
277
|
+
set_current: if True, set the added image as current
|
|
278
|
+
|
|
279
|
+
Returns:
|
|
280
|
+
True if image was added successfully, False otherwise
|
|
281
|
+
|
|
282
|
+
Raises:
|
|
283
|
+
ValueError: Invalid data dtype
|
|
284
|
+
"""
|
|
285
|
+
|
|
286
|
+
@abc.abstractmethod
|
|
287
|
+
def add_object(
|
|
288
|
+
self, obj: SignalObj | ImageObj, group_id: str = "", set_current: bool = True
|
|
289
|
+
) -> None:
|
|
290
|
+
"""Add object to DataLab.
|
|
291
|
+
|
|
292
|
+
Args:
|
|
293
|
+
obj: Signal or image object
|
|
294
|
+
group_id: group id in which to add the object. Defaults to ""
|
|
295
|
+
set_current: if True, set the added object as current
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
True if object was added successfully, False otherwise
|
|
299
|
+
"""
|
|
300
|
+
|
|
301
|
+
@abc.abstractmethod
|
|
302
|
+
def add_group(
|
|
303
|
+
self, title: str, panel: str | None = None, select: bool = False
|
|
304
|
+
) -> None:
|
|
305
|
+
"""Add group to DataLab.
|
|
306
|
+
|
|
307
|
+
Args:
|
|
308
|
+
title: Group title
|
|
309
|
+
panel: Panel name (valid values: "signal", "image"). Defaults to None.
|
|
310
|
+
select: Select the group after creation. Defaults to False.
|
|
311
|
+
"""
|
|
312
|
+
|
|
313
|
+
@abc.abstractmethod
|
|
314
|
+
def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]:
|
|
315
|
+
"""Return selected objects uuids.
|
|
316
|
+
|
|
317
|
+
Args:
|
|
318
|
+
include_groups: If True, also return objects from selected groups.
|
|
319
|
+
|
|
320
|
+
Returns:
|
|
321
|
+
List of selected objects uuids.
|
|
322
|
+
"""
|
|
323
|
+
|
|
324
|
+
@abc.abstractmethod
|
|
325
|
+
def select_objects(
|
|
326
|
+
self,
|
|
327
|
+
selection: list[int | str],
|
|
328
|
+
panel: str | None = None,
|
|
329
|
+
) -> None:
|
|
330
|
+
"""Select objects in current panel.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
selection: List of object numbers (1 to N) or uuids to select
|
|
334
|
+
panel: panel name (valid values: "signal", "image").
|
|
335
|
+
If None, current panel is used. Defaults to None.
|
|
336
|
+
"""
|
|
337
|
+
|
|
338
|
+
@abc.abstractmethod
|
|
339
|
+
def select_groups(
|
|
340
|
+
self, selection: list[int | str] | None = None, panel: str | None = None
|
|
341
|
+
) -> None:
|
|
342
|
+
"""Select groups in current panel.
|
|
343
|
+
|
|
344
|
+
Args:
|
|
345
|
+
selection: List of group numbers (1 to N), or list of group uuids,
|
|
346
|
+
or None to select all groups. Defaults to None.
|
|
347
|
+
panel: panel name (valid values: "signal", "image").
|
|
348
|
+
If None, current panel is used. Defaults to None.
|
|
349
|
+
"""
|
|
350
|
+
|
|
351
|
+
@abc.abstractmethod
|
|
352
|
+
def delete_metadata(
|
|
353
|
+
self, refresh_plot: bool = True, keep_roi: bool = False
|
|
354
|
+
) -> None:
|
|
355
|
+
"""Delete metadata of selected objects
|
|
356
|
+
|
|
357
|
+
Args:
|
|
358
|
+
refresh_plot: Refresh plot. Defaults to True.
|
|
359
|
+
keep_roi: Keep ROI. Defaults to False.
|
|
360
|
+
"""
|
|
361
|
+
|
|
362
|
+
@abc.abstractmethod
|
|
363
|
+
def get_group_titles_with_object_info(
|
|
364
|
+
self,
|
|
365
|
+
) -> tuple[list[str], list[list[str]], list[list[str]]]:
|
|
366
|
+
"""Return groups titles and lists of inner objects uuids and titles.
|
|
367
|
+
|
|
368
|
+
Returns:
|
|
369
|
+
Groups titles, lists of inner objects uuids and titles
|
|
370
|
+
"""
|
|
371
|
+
|
|
372
|
+
@abc.abstractmethod
|
|
373
|
+
def get_object_titles(self, panel: str | None = None) -> list[str]:
|
|
374
|
+
"""Get object (signal/image) list for current panel.
|
|
375
|
+
Objects are sorted by group number and object index in group.
|
|
376
|
+
|
|
377
|
+
Args:
|
|
378
|
+
panel: panel name (valid values: "signal", "image", "macro").
|
|
379
|
+
If None, current data panel is used (i.e. signal or image panel).
|
|
380
|
+
|
|
381
|
+
Returns:
|
|
382
|
+
List of object titles
|
|
383
|
+
|
|
384
|
+
Raises:
|
|
385
|
+
ValueError: if panel not found
|
|
386
|
+
"""
|
|
387
|
+
|
|
388
|
+
@abc.abstractmethod
|
|
389
|
+
def get_object(
|
|
390
|
+
self, nb_id_title: int | str | None = None, panel: str | None = None
|
|
391
|
+
) -> SignalObj | ImageObj:
|
|
392
|
+
"""Get object (signal/image) from index.
|
|
393
|
+
|
|
394
|
+
Args:
|
|
395
|
+
nb_id_title: Object number, or object id, or object title.
|
|
396
|
+
Defaults to None (current object).
|
|
397
|
+
panel: Panel name. Defaults to None (current panel).
|
|
398
|
+
|
|
399
|
+
Returns:
|
|
400
|
+
Object
|
|
401
|
+
|
|
402
|
+
Raises:
|
|
403
|
+
KeyError: if object not found
|
|
404
|
+
"""
|
|
405
|
+
|
|
406
|
+
@abc.abstractmethod
|
|
407
|
+
def get_object_uuids(
|
|
408
|
+
self, panel: str | None = None, group: int | str | None = None
|
|
409
|
+
) -> list[str]:
|
|
410
|
+
"""Get object (signal/image) uuid list for current panel.
|
|
411
|
+
Objects are sorted by group number and object index in group.
|
|
412
|
+
|
|
413
|
+
Args:
|
|
414
|
+
panel: panel name (valid values: "signal", "image").
|
|
415
|
+
If None, current panel is used.
|
|
416
|
+
group: Group number, or group id, or group title.
|
|
417
|
+
Defaults to None (all groups).
|
|
418
|
+
|
|
419
|
+
Returns:
|
|
420
|
+
List of object uuids
|
|
421
|
+
|
|
422
|
+
Raises:
|
|
423
|
+
ValueError: if panel not found
|
|
424
|
+
"""
|
|
425
|
+
|
|
426
|
+
@abc.abstractmethod
|
|
427
|
+
def get_object_shapes(
|
|
428
|
+
self,
|
|
429
|
+
nb_id_title: int | str | None = None,
|
|
430
|
+
panel: str | None = None,
|
|
431
|
+
) -> list:
|
|
432
|
+
"""Get plot item shapes associated to object (signal/image).
|
|
433
|
+
|
|
434
|
+
Args:
|
|
435
|
+
nb_id_title: Object number, or object id, or object title.
|
|
436
|
+
Defaults to None (current object).
|
|
437
|
+
panel: Panel name. Defaults to None (current panel).
|
|
438
|
+
|
|
439
|
+
Returns:
|
|
440
|
+
List of plot item shapes
|
|
441
|
+
"""
|
|
442
|
+
|
|
443
|
+
@abc.abstractmethod
|
|
444
|
+
def add_annotations_from_items(
|
|
445
|
+
self, items: list, refresh_plot: bool = True, panel: str | None = None
|
|
446
|
+
) -> None:
|
|
447
|
+
"""Add object annotations (annotation plot items).
|
|
448
|
+
|
|
449
|
+
Args:
|
|
450
|
+
items: annotation plot items
|
|
451
|
+
refresh_plot: refresh plot. Defaults to True.
|
|
452
|
+
panel: panel name (valid values: "signal", "image").
|
|
453
|
+
If None, current panel is used.
|
|
454
|
+
"""
|
|
455
|
+
|
|
456
|
+
@abc.abstractmethod
|
|
457
|
+
def add_label_with_title(
|
|
458
|
+
self, title: str | None = None, panel: str | None = None
|
|
459
|
+
) -> None:
|
|
460
|
+
"""Add a label with object title on the associated plot
|
|
461
|
+
|
|
462
|
+
Args:
|
|
463
|
+
title: Label title. Defaults to None.
|
|
464
|
+
If None, the title is the object title.
|
|
465
|
+
panel: panel name (valid values: "signal", "image").
|
|
466
|
+
If None, current panel is used.
|
|
467
|
+
"""
|
|
468
|
+
|
|
469
|
+
@abc.abstractmethod
|
|
470
|
+
def run_macro(self, number_or_title: int | str | None = None) -> None:
|
|
471
|
+
"""Run macro.
|
|
472
|
+
|
|
473
|
+
Args:
|
|
474
|
+
number: Number of the macro (starting at 1). Defaults to None (run
|
|
475
|
+
current macro, or does nothing if there is no macro).
|
|
476
|
+
"""
|
|
477
|
+
|
|
478
|
+
@abc.abstractmethod
|
|
479
|
+
def stop_macro(self, number_or_title: int | str | None = None) -> None:
|
|
480
|
+
"""Stop macro.
|
|
481
|
+
|
|
482
|
+
Args:
|
|
483
|
+
number: Number of the macro (starting at 1). Defaults to None (stop
|
|
484
|
+
current macro, or does nothing if there is no macro).
|
|
485
|
+
"""
|
|
486
|
+
|
|
487
|
+
@abc.abstractmethod
|
|
488
|
+
def import_macro_from_file(self, filename: str) -> None:
|
|
489
|
+
"""Import macro from file
|
|
490
|
+
|
|
491
|
+
Args:
|
|
492
|
+
filename: Filename.
|
|
493
|
+
"""
|
|
494
|
+
|
|
495
|
+
@abc.abstractmethod
|
|
496
|
+
def calc(self, name: str, param: gds.DataSet | None = None) -> gds.DataSet:
|
|
497
|
+
"""Call computation feature ``name``
|
|
498
|
+
|
|
499
|
+
.. note::
|
|
500
|
+
|
|
501
|
+
This calls either the processor's ``compute_<name>`` method (if it exists),
|
|
502
|
+
or the processor's ``<name>`` computation feature (if it is registered,
|
|
503
|
+
using the ``run_feature`` method).
|
|
504
|
+
It looks for the function in all panels, starting with the current one.
|
|
505
|
+
|
|
506
|
+
Args:
|
|
507
|
+
name: Compute function name
|
|
508
|
+
param: Compute function parameter. Defaults to None.
|
|
509
|
+
|
|
510
|
+
Raises:
|
|
511
|
+
ValueError: unknown function
|
|
512
|
+
"""
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
class BaseProxy(AbstractDLControl, metaclass=abc.ABCMeta):
|
|
516
|
+
"""Common base class for DataLab proxies
|
|
517
|
+
|
|
518
|
+
Args:
|
|
519
|
+
datalab: DLMainWindow instance or ServerProxy instance. If None, then the proxy
|
|
520
|
+
implementation will have to set it later (e.g. see RemoteClient).
|
|
521
|
+
"""
|
|
522
|
+
|
|
523
|
+
def __init__(self, datalab: DLMainWindow | ServerProxy | None = None) -> None:
|
|
524
|
+
self._datalab = datalab
|
|
525
|
+
|
|
526
|
+
def get_version(self) -> str:
|
|
527
|
+
"""Return DataLab public version.
|
|
528
|
+
|
|
529
|
+
Returns:
|
|
530
|
+
DataLab version
|
|
531
|
+
"""
|
|
532
|
+
return self._datalab.get_version()
|
|
533
|
+
|
|
534
|
+
def close_application(self) -> None:
|
|
535
|
+
"""Close DataLab application"""
|
|
536
|
+
self._datalab.close_application()
|
|
537
|
+
|
|
538
|
+
def raise_window(self) -> None:
|
|
539
|
+
"""Raise DataLab window"""
|
|
540
|
+
self._datalab.raise_window()
|
|
541
|
+
|
|
542
|
+
def get_current_panel(self) -> str:
|
|
543
|
+
"""Return current panel name.
|
|
544
|
+
|
|
545
|
+
Returns:
|
|
546
|
+
Panel name (valid values: "signal", "image", "macro"))
|
|
547
|
+
"""
|
|
548
|
+
return self._datalab.get_current_panel()
|
|
549
|
+
|
|
550
|
+
def set_current_panel(self, panel: str) -> None:
|
|
551
|
+
"""Switch to panel.
|
|
552
|
+
|
|
553
|
+
Args:
|
|
554
|
+
panel: Panel name (valid values: "signal", "image", "macro"))
|
|
555
|
+
"""
|
|
556
|
+
self._datalab.set_current_panel(panel)
|
|
557
|
+
|
|
558
|
+
def reset_all(self) -> None:
|
|
559
|
+
"""Reset all application data"""
|
|
560
|
+
self._datalab.reset_all()
|
|
561
|
+
|
|
562
|
+
def toggle_auto_refresh(self, state: bool) -> None:
|
|
563
|
+
"""Toggle auto refresh state.
|
|
564
|
+
|
|
565
|
+
Args:
|
|
566
|
+
state: Auto refresh state
|
|
567
|
+
"""
|
|
568
|
+
self._datalab.toggle_auto_refresh(state)
|
|
569
|
+
|
|
570
|
+
def toggle_show_titles(self, state: bool) -> None:
|
|
571
|
+
"""Toggle show titles state.
|
|
572
|
+
|
|
573
|
+
Args:
|
|
574
|
+
state: Show titles state
|
|
575
|
+
"""
|
|
576
|
+
self._datalab.toggle_show_titles(state)
|
|
577
|
+
|
|
578
|
+
def save_to_h5_file(self, filename: str) -> None:
|
|
579
|
+
"""Save to a DataLab HDF5 file.
|
|
580
|
+
|
|
581
|
+
Args:
|
|
582
|
+
filename: HDF5 file name
|
|
583
|
+
"""
|
|
584
|
+
self._datalab.save_to_h5_file(filename)
|
|
585
|
+
|
|
586
|
+
def open_h5_files(
|
|
587
|
+
self,
|
|
588
|
+
h5files: list[str] | None = None,
|
|
589
|
+
import_all: bool | None = None,
|
|
590
|
+
reset_all: bool | None = None,
|
|
591
|
+
) -> None:
|
|
592
|
+
"""Open a DataLab HDF5 file or import from any other HDF5 file.
|
|
593
|
+
|
|
594
|
+
Args:
|
|
595
|
+
h5files: List of HDF5 files to open. Defaults to None.
|
|
596
|
+
import_all: Import all objects from HDF5 files. Defaults to None.
|
|
597
|
+
reset_all: Reset all application data. Defaults to None.
|
|
598
|
+
"""
|
|
599
|
+
self._datalab.open_h5_files(h5files, import_all, reset_all)
|
|
600
|
+
|
|
601
|
+
def import_h5_file(self, filename: str, reset_all: bool | None = None) -> None:
|
|
602
|
+
"""Open DataLab HDF5 browser to Import HDF5 file.
|
|
603
|
+
|
|
604
|
+
Args:
|
|
605
|
+
filename: HDF5 file name
|
|
606
|
+
reset_all: Reset all application data. Defaults to None.
|
|
607
|
+
"""
|
|
608
|
+
self._datalab.import_h5_file(filename, reset_all)
|
|
609
|
+
|
|
610
|
+
def load_from_files(self, filenames: list[str]) -> None:
|
|
611
|
+
"""Open objects from files in current panel (signals/images).
|
|
612
|
+
|
|
613
|
+
Args:
|
|
614
|
+
filenames: list of file names
|
|
615
|
+
"""
|
|
616
|
+
self._datalab.load_from_files(filenames)
|
|
617
|
+
|
|
618
|
+
def load_from_directory(self, path: str) -> None:
|
|
619
|
+
"""Open objects from directory in current panel (signals/images).
|
|
620
|
+
|
|
621
|
+
Args:
|
|
622
|
+
path: directory path
|
|
623
|
+
"""
|
|
624
|
+
self._datalab.load_from_directory(path)
|
|
625
|
+
|
|
626
|
+
def get_sel_object_uuids(self, include_groups: bool = False) -> list[str]:
|
|
627
|
+
"""Return selected objects uuids.
|
|
628
|
+
|
|
629
|
+
Args:
|
|
630
|
+
include_groups: If True, also return objects from selected groups.
|
|
631
|
+
|
|
632
|
+
Returns:
|
|
633
|
+
List of selected objects uuids.
|
|
634
|
+
"""
|
|
635
|
+
return self._datalab.get_sel_object_uuids(include_groups)
|
|
636
|
+
|
|
637
|
+
def add_group(
|
|
638
|
+
self, title: str, panel: str | None = None, select: bool = False
|
|
639
|
+
) -> None:
|
|
640
|
+
"""Add group to DataLab.
|
|
641
|
+
|
|
642
|
+
Args:
|
|
643
|
+
title: Group title
|
|
644
|
+
panel: Panel name (valid values: "signal", "image"). Defaults to None.
|
|
645
|
+
select: Select the group after creation. Defaults to False.
|
|
646
|
+
"""
|
|
647
|
+
self._datalab.add_group(title, panel, select)
|
|
648
|
+
|
|
649
|
+
def select_objects(
|
|
650
|
+
self,
|
|
651
|
+
selection: list[int | str],
|
|
652
|
+
panel: str | None = None,
|
|
653
|
+
) -> None:
|
|
654
|
+
"""Select objects in current panel.
|
|
655
|
+
|
|
656
|
+
Args:
|
|
657
|
+
selection: List of object numbers (1 to N) or uuids to select
|
|
658
|
+
panel: panel name (valid values: "signal", "image").
|
|
659
|
+
If None, current panel is used. Defaults to None.
|
|
660
|
+
"""
|
|
661
|
+
self._datalab.select_objects(selection, panel)
|
|
662
|
+
|
|
663
|
+
def select_groups(
|
|
664
|
+
self, selection: list[int | str] | None = None, panel: str | None = None
|
|
665
|
+
) -> None:
|
|
666
|
+
"""Select groups in current panel.
|
|
667
|
+
|
|
668
|
+
Args:
|
|
669
|
+
selection: List of group numbers (1 to N), or list of group uuids,
|
|
670
|
+
or None to select all groups. Defaults to None.
|
|
671
|
+
panel: panel name (valid values: "signal", "image").
|
|
672
|
+
If None, current panel is used. Defaults to None.
|
|
673
|
+
"""
|
|
674
|
+
self._datalab.select_groups(selection, panel)
|
|
675
|
+
|
|
676
|
+
def delete_metadata(
|
|
677
|
+
self, refresh_plot: bool = True, keep_roi: bool = False
|
|
678
|
+
) -> None:
|
|
679
|
+
"""Delete metadata of selected objects
|
|
680
|
+
|
|
681
|
+
Args:
|
|
682
|
+
refresh_plot: Refresh plot. Defaults to True.
|
|
683
|
+
keep_roi: Keep ROI. Defaults to False.
|
|
684
|
+
"""
|
|
685
|
+
self._datalab.delete_metadata(refresh_plot, keep_roi)
|
|
686
|
+
|
|
687
|
+
def get_group_titles_with_object_info(
|
|
688
|
+
self,
|
|
689
|
+
) -> tuple[list[str], list[list[str]], list[list[str]]]:
|
|
690
|
+
"""Return groups titles and lists of inner objects uuids and titles.
|
|
691
|
+
|
|
692
|
+
Returns:
|
|
693
|
+
Tuple: groups titles, lists of inner objects uuids and titles
|
|
694
|
+
"""
|
|
695
|
+
return self._datalab.get_group_titles_with_object_info()
|
|
696
|
+
|
|
697
|
+
def get_object_titles(self, panel: str | None = None) -> list[str]:
|
|
698
|
+
"""Get object (signal/image) list for current panel.
|
|
699
|
+
Objects are sorted by group number and object index in group.
|
|
700
|
+
|
|
701
|
+
Args:
|
|
702
|
+
panel: panel name (valid values: "signal", "image", "macro").
|
|
703
|
+
If None, current data panel is used (i.e. signal or image panel).
|
|
704
|
+
|
|
705
|
+
Returns:
|
|
706
|
+
List of object titles
|
|
707
|
+
|
|
708
|
+
Raises:
|
|
709
|
+
ValueError: if panel not found
|
|
710
|
+
"""
|
|
711
|
+
return self._datalab.get_object_titles(panel)
|
|
712
|
+
|
|
713
|
+
def get_object_uuids(
|
|
714
|
+
self, panel: str | None = None, group: int | str | None = None
|
|
715
|
+
) -> list[str]:
|
|
716
|
+
"""Get object (signal/image) uuid list for current panel.
|
|
717
|
+
Objects are sorted by group number and object index in group.
|
|
718
|
+
|
|
719
|
+
Args:
|
|
720
|
+
panel: panel name (valid values: "signal", "image").
|
|
721
|
+
If None, current panel is used.
|
|
722
|
+
group: Group number, or group id, or group title.
|
|
723
|
+
Defaults to None (all groups).
|
|
724
|
+
|
|
725
|
+
Returns:
|
|
726
|
+
List of object uuids
|
|
727
|
+
|
|
728
|
+
Raises:
|
|
729
|
+
ValueError: if panel not found
|
|
730
|
+
"""
|
|
731
|
+
return self._datalab.get_object_uuids(panel, group)
|
|
732
|
+
|
|
733
|
+
def add_label_with_title(
|
|
734
|
+
self, title: str | None = None, panel: str | None = None
|
|
735
|
+
) -> None:
|
|
736
|
+
"""Add a label with object title on the associated plot
|
|
737
|
+
|
|
738
|
+
Args:
|
|
739
|
+
title: Label title. Defaults to None.
|
|
740
|
+
If None, the title is the object title.
|
|
741
|
+
panel: panel name (valid values: "signal", "image").
|
|
742
|
+
If None, current panel is used.
|
|
743
|
+
"""
|
|
744
|
+
self._datalab.add_label_with_title(title, panel)
|
|
745
|
+
|
|
746
|
+
def run_macro(self, number_or_title: int | str | None = None) -> None:
|
|
747
|
+
"""Run macro.
|
|
748
|
+
|
|
749
|
+
Args:
|
|
750
|
+
number_or_title: Macro number, or macro title.
|
|
751
|
+
Defaults to None (current macro).
|
|
752
|
+
|
|
753
|
+
Raises:
|
|
754
|
+
ValueError: if macro not found
|
|
755
|
+
"""
|
|
756
|
+
self._datalab.run_macro(number_or_title)
|
|
757
|
+
|
|
758
|
+
def stop_macro(self, number_or_title: int | str | None = None) -> None:
|
|
759
|
+
"""Stop macro.
|
|
760
|
+
|
|
761
|
+
Args:
|
|
762
|
+
number_or_title: Macro number, or macro title.
|
|
763
|
+
Defaults to None (current macro).
|
|
764
|
+
|
|
765
|
+
Raises:
|
|
766
|
+
ValueError: if macro not found
|
|
767
|
+
"""
|
|
768
|
+
self._datalab.stop_macro(number_or_title)
|
|
769
|
+
|
|
770
|
+
def import_macro_from_file(self, filename: str) -> None:
|
|
771
|
+
"""Import macro from file
|
|
772
|
+
|
|
773
|
+
Args:
|
|
774
|
+
filename: Filename.
|
|
775
|
+
"""
|
|
776
|
+
return self._datalab.import_macro_from_file(filename)
|