datalab-platform 0.0.1.dev0__py3-none-any.whl → 1.0.1__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.1.dist-info/METADATA +121 -0
- datalab_platform-1.0.1.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.1.dist-info}/WHEEL +0 -0
- {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.1.dist-info}/entry_points.txt +0 -0
- {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.1.dist-info}/licenses/LICENSE +0 -0
- {datalab_platform-0.0.1.dev0.dist-info → datalab_platform-1.0.1.dist-info}/top_level.txt +0 -0
datalab/__init__.py
CHANGED
|
@@ -1,2 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
DataLab
|
|
5
|
+
=======
|
|
6
|
+
|
|
7
|
+
DataLab is a generic signal and image processing software based on Python
|
|
8
|
+
scientific libraries (such as NumPy, SciPy or scikit-image) and Qt graphical
|
|
9
|
+
user interfaces (thanks to `PlotPyStack`_ libraries).
|
|
10
|
+
|
|
11
|
+
.. _PlotPyStack: https://github.com/PlotPyStack
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import multiprocessing
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
# Set multiprocessing start method to 'spawn' early to avoid fork-related warnings
|
|
18
|
+
# on Linux systems when using Qt and multithreading. This must be done before
|
|
19
|
+
# any multiprocessing.Pool is created.
|
|
20
|
+
try:
|
|
21
|
+
multiprocessing.set_start_method("spawn")
|
|
22
|
+
except RuntimeError:
|
|
23
|
+
# This exception is raised if the method is already set (this may happen because
|
|
24
|
+
# this module is imported more than once, e.g. when running tests)
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
__version__ = "1.0.1"
|
|
28
|
+
__docurl__ = __homeurl__ = "https://datalab-platform.com/"
|
|
29
|
+
__supporturl__ = "https://github.com/DataLab-Platform/DataLab/issues/new/choose"
|
|
30
|
+
|
|
31
|
+
os.environ["DATALAB_VERSION"] = __version__
|
|
32
|
+
|
|
33
|
+
# Dear (Debian, RPM, ...) package makers, please feel free to customize the
|
|
34
|
+
# following path to module's data (images) and translations:
|
|
35
|
+
DATAPATH = LOCALEPATH = ""
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Adapters for Sigima's TableResult and GeometryResult, providing features
|
|
5
|
+
for storing and retrieving those objects as metadata for DataLab's signal
|
|
6
|
+
and image objects.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from .base_adapter import BaseResultAdapter
|
|
10
|
+
from .common import (
|
|
11
|
+
ResultData,
|
|
12
|
+
create_resultdata_dict,
|
|
13
|
+
have_geometry_results,
|
|
14
|
+
have_results,
|
|
15
|
+
resultadapter_to_html,
|
|
16
|
+
show_resultdata,
|
|
17
|
+
)
|
|
18
|
+
from .geometry_adapter import GeometryAdapter
|
|
19
|
+
from .table_adapter import TableAdapter
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"BaseResultAdapter",
|
|
23
|
+
"GeometryAdapter",
|
|
24
|
+
"ResultData",
|
|
25
|
+
"TableAdapter",
|
|
26
|
+
"create_resultdata_dict",
|
|
27
|
+
"have_geometry_results",
|
|
28
|
+
"have_results",
|
|
29
|
+
"resultadapter_to_html",
|
|
30
|
+
"show_resultdata",
|
|
31
|
+
]
|
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# Copyright (c) DataLab Platform Developers, BSD 3-Clause license, see LICENSE file.
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Base adapter class for result objects, providing common functionality
|
|
5
|
+
for storing and retrieving result objects as metadata for DataLab's signal
|
|
6
|
+
and image objects.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from abc import ABC, abstractmethod
|
|
12
|
+
from typing import TYPE_CHECKING, Any, ClassVar, Generator
|
|
13
|
+
|
|
14
|
+
import guidata.dataset as gds
|
|
15
|
+
from sigima.objects import ImageObj, SignalObj
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
import pandas as pd
|
|
19
|
+
from sigima.objects.scalar import GeometryResult, TableResult
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class BaseResultAdapter(ABC):
|
|
23
|
+
"""Base adapter for result objects.
|
|
24
|
+
|
|
25
|
+
This base class provides common functionality for working with result objects,
|
|
26
|
+
including metadata storage/retrieval and various data representations.
|
|
27
|
+
|
|
28
|
+
Args:
|
|
29
|
+
result: Result object to adapt
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
# Class constants for metadata storage - to be overridden by subclasses
|
|
33
|
+
META_PREFIX: ClassVar[str] = ""
|
|
34
|
+
META_SUFFIX: ClassVar[str] = "_dict"
|
|
35
|
+
|
|
36
|
+
def __init__(self, result: TableResult | GeometryResult) -> None:
|
|
37
|
+
self.result = result
|
|
38
|
+
|
|
39
|
+
def set_applicative_attr(self, key: str, value: Any) -> None:
|
|
40
|
+
"""Set an applicative attribute for the result.
|
|
41
|
+
|
|
42
|
+
Args:
|
|
43
|
+
key: Attribute key
|
|
44
|
+
value: Attribute value
|
|
45
|
+
"""
|
|
46
|
+
self.result.attrs[key] = value
|
|
47
|
+
|
|
48
|
+
def get_applicative_attr(self, key: str, default: Any = None) -> Any:
|
|
49
|
+
"""Get an applicative attribute for the result.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
key: Attribute key
|
|
53
|
+
default: Default value to return if key not found
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
Attribute value, or default if not set. If default is not None, assign it
|
|
57
|
+
to the attribute if it was not already set.
|
|
58
|
+
"""
|
|
59
|
+
if key not in self.result.attrs and default is not None:
|
|
60
|
+
self.result.attrs[key] = default
|
|
61
|
+
return self.result.attrs.get(key, default)
|
|
62
|
+
|
|
63
|
+
@property
|
|
64
|
+
def title(self) -> str:
|
|
65
|
+
"""Get the title.
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Title
|
|
69
|
+
"""
|
|
70
|
+
return self.result.title
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def name(self) -> str:
|
|
74
|
+
"""Get the result kind name.
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
The string value of the kind attribute (e.g., "segment", "circle",
|
|
78
|
+
"statistics"). This is NOT unique - multiple results can share the
|
|
79
|
+
same kind.
|
|
80
|
+
"""
|
|
81
|
+
return self.result.name
|
|
82
|
+
|
|
83
|
+
@property
|
|
84
|
+
def func_name(self) -> str:
|
|
85
|
+
"""Get the computation function name.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
The name of the computation function that produced this result.
|
|
89
|
+
"""
|
|
90
|
+
return self.result.func_name
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
@abstractmethod
|
|
94
|
+
def headers(self) -> list[str]:
|
|
95
|
+
"""Get column headers.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
List of column headers
|
|
99
|
+
"""
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
@abstractmethod
|
|
103
|
+
def category(self) -> str:
|
|
104
|
+
"""Get the category.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Category
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
def get_roi_data(self, roi_index: int) -> "pd.DataFrame":
|
|
111
|
+
"""Get data for a specific ROI index.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
roi_index: ROI index to filter by
|
|
115
|
+
|
|
116
|
+
Returns:
|
|
117
|
+
DataFrame containing only data for the specified ROI
|
|
118
|
+
"""
|
|
119
|
+
df = self.to_dataframe()
|
|
120
|
+
if "roi_index" in df.columns:
|
|
121
|
+
return df[df["roi_index"] == roi_index].drop(columns=["roi_index"])
|
|
122
|
+
return df
|
|
123
|
+
|
|
124
|
+
def get_column_values(self, column_name: str, roi_index: int = None) -> list:
|
|
125
|
+
"""Get values for a specific column, optionally filtered by ROI.
|
|
126
|
+
|
|
127
|
+
Args:
|
|
128
|
+
column_name: Name of the column to retrieve
|
|
129
|
+
roi_index: Optional ROI index to filter by
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
List of values for the specified column
|
|
133
|
+
"""
|
|
134
|
+
df = self.to_dataframe()
|
|
135
|
+
if roi_index is not None and "roi_index" in df.columns:
|
|
136
|
+
df = df[df["roi_index"] == roi_index]
|
|
137
|
+
return df[column_name].tolist()
|
|
138
|
+
|
|
139
|
+
def get_unique_roi_indices(self) -> list[int]:
|
|
140
|
+
"""Get unique ROI indices present in the data.
|
|
141
|
+
|
|
142
|
+
Returns:
|
|
143
|
+
List of unique ROI indices
|
|
144
|
+
"""
|
|
145
|
+
df = self.to_dataframe()
|
|
146
|
+
if "roi_index" in df.columns:
|
|
147
|
+
return sorted(df["roi_index"].unique().tolist())
|
|
148
|
+
return [] if len(df) == 0 else [0] # Default ROI index for result data
|
|
149
|
+
|
|
150
|
+
@property
|
|
151
|
+
def metadata_key(self) -> str:
|
|
152
|
+
"""Get the metadata key used to store this result.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
Metadata key based on the result's title
|
|
156
|
+
"""
|
|
157
|
+
return f"{self.META_PREFIX}{self.func_name}{self.META_SUFFIX}"
|
|
158
|
+
|
|
159
|
+
def add_to(
|
|
160
|
+
self, obj: SignalObj | ImageObj, param: gds.DataSet | None = None
|
|
161
|
+
) -> None:
|
|
162
|
+
"""Add result to object metadata.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
obj: Signal or image object
|
|
166
|
+
param: Optional parameter dataset associated with this result
|
|
167
|
+
"""
|
|
168
|
+
assert self.func_name, "func_name must be set before adding to object metadata"
|
|
169
|
+
# Store parameter in result attrs (will be serialized with result)
|
|
170
|
+
if param is not None:
|
|
171
|
+
self.result.attrs["param_json"] = gds.dataset_to_json(param)
|
|
172
|
+
obj.metadata[self.metadata_key] = self.result.to_dict()
|
|
173
|
+
|
|
174
|
+
def get_param(self) -> gds.DataSet | None:
|
|
175
|
+
"""Get parameter dataset associated with this result.
|
|
176
|
+
|
|
177
|
+
Returns:
|
|
178
|
+
Parameter dataset if present, None otherwise
|
|
179
|
+
"""
|
|
180
|
+
param_json = self.result.attrs.get("param_json")
|
|
181
|
+
if param_json is not None:
|
|
182
|
+
return gds.json_to_dataset(param_json)
|
|
183
|
+
return None
|
|
184
|
+
|
|
185
|
+
def remove_from(self, obj: SignalObj | ImageObj) -> None:
|
|
186
|
+
"""Remove result from object metadata.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
obj: Signal or image object
|
|
190
|
+
"""
|
|
191
|
+
obj.metadata.pop(self.metadata_key, None)
|
|
192
|
+
|
|
193
|
+
@classmethod
|
|
194
|
+
def remove_all_from(cls, obj: SignalObj | ImageObj) -> None:
|
|
195
|
+
"""Remove all results of this type from object metadata.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
obj: Signal or image object
|
|
199
|
+
"""
|
|
200
|
+
# Find all results in the object and remove them
|
|
201
|
+
for adapter in list(cls.iterate_from_obj(obj)):
|
|
202
|
+
adapter.remove_from(obj)
|
|
203
|
+
|
|
204
|
+
@classmethod
|
|
205
|
+
def match(cls, key: str, _value: Any) -> bool:
|
|
206
|
+
"""Check if the key matches the pattern for this result type.
|
|
207
|
+
|
|
208
|
+
Args:
|
|
209
|
+
key: Metadata key
|
|
210
|
+
_value: Metadata value (unused)
|
|
211
|
+
|
|
212
|
+
Returns:
|
|
213
|
+
True if the key matches the pattern
|
|
214
|
+
"""
|
|
215
|
+
return key.startswith(cls.META_PREFIX) and key.endswith(cls.META_SUFFIX)
|
|
216
|
+
|
|
217
|
+
@classmethod
|
|
218
|
+
@abstractmethod
|
|
219
|
+
def from_metadata_entry(cls, obj: SignalObj | ImageObj, key: str):
|
|
220
|
+
"""Create a result adapter from a metadata entry.
|
|
221
|
+
|
|
222
|
+
Args:
|
|
223
|
+
obj: Object containing the metadata
|
|
224
|
+
key: Metadata key for the result data
|
|
225
|
+
|
|
226
|
+
Returns:
|
|
227
|
+
Adapter object
|
|
228
|
+
|
|
229
|
+
Raises:
|
|
230
|
+
ValueError: Invalid metadata entry
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
@classmethod
|
|
234
|
+
def from_obj(
|
|
235
|
+
cls, obj: SignalObj | ImageObj, func_name: str
|
|
236
|
+
) -> BaseResultAdapter | None:
|
|
237
|
+
"""Create a result adapter from an object's metadata entry.
|
|
238
|
+
|
|
239
|
+
Args:
|
|
240
|
+
obj: Signal or image object
|
|
241
|
+
func_name: Function name to look for
|
|
242
|
+
|
|
243
|
+
Returns:
|
|
244
|
+
Adapter object if found, None otherwise
|
|
245
|
+
"""
|
|
246
|
+
for adapter in cls.iterate_from_obj(obj):
|
|
247
|
+
if adapter.func_name == func_name:
|
|
248
|
+
return adapter
|
|
249
|
+
return None
|
|
250
|
+
|
|
251
|
+
@classmethod
|
|
252
|
+
def iterate_from_obj(
|
|
253
|
+
cls, obj: SignalObj | ImageObj
|
|
254
|
+
) -> Generator["BaseResultAdapter", None, None]:
|
|
255
|
+
"""Iterate over results stored in an object's metadata.
|
|
256
|
+
|
|
257
|
+
Args:
|
|
258
|
+
obj: Signal or image object
|
|
259
|
+
|
|
260
|
+
Yields:
|
|
261
|
+
Adapter objects
|
|
262
|
+
"""
|
|
263
|
+
for key, value in obj.metadata.items():
|
|
264
|
+
if cls.match(key, value):
|
|
265
|
+
try:
|
|
266
|
+
yield cls.from_metadata_entry(obj, key)
|
|
267
|
+
except (ValueError, TypeError):
|
|
268
|
+
# Skip invalid entries
|
|
269
|
+
pass
|
|
270
|
+
|
|
271
|
+
def to_dataframe(self, visible_only: bool = False):
|
|
272
|
+
"""Convert the result to a pandas DataFrame.
|
|
273
|
+
|
|
274
|
+
Args:
|
|
275
|
+
visible_only: If True, include only visible headers based on display
|
|
276
|
+
preferences. Default is False.
|
|
277
|
+
|
|
278
|
+
Returns:
|
|
279
|
+
DataFrame with an optional 'roi_index' column.
|
|
280
|
+
If visible_only is True, only columns with visible headers are included.
|
|
281
|
+
"""
|
|
282
|
+
return self.result.to_dataframe(visible_only=visible_only)
|
|
283
|
+
|
|
284
|
+
def to_html(
|
|
285
|
+
self,
|
|
286
|
+
obj=None,
|
|
287
|
+
visible_only: bool = True,
|
|
288
|
+
transpose_single_row: bool = True,
|
|
289
|
+
**kwargs,
|
|
290
|
+
) -> str:
|
|
291
|
+
"""Convert the result to HTML format.
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
obj: Optional SignalObj or ImageObj for ROI title extraction
|
|
295
|
+
visible_only: If True, include only visible headers based on display
|
|
296
|
+
preferences. Default is False.
|
|
297
|
+
transpose_single_row: If True, transpose the table when there's only one row
|
|
298
|
+
**kwargs: Additional arguments passed to DataFrame.to_html()
|
|
299
|
+
|
|
300
|
+
Returns:
|
|
301
|
+
HTML representation of the result
|
|
302
|
+
"""
|
|
303
|
+
return self.result.to_html(
|
|
304
|
+
obj=obj,
|
|
305
|
+
visible_only=visible_only,
|
|
306
|
+
transpose_single_row=transpose_single_row,
|
|
307
|
+
**kwargs,
|
|
308
|
+
)
|
|
309
|
+
|
|
310
|
+
def get_visible_headers(self) -> list[str]:
|
|
311
|
+
"""Get list of currently visible headers based on display preferences.
|
|
312
|
+
|
|
313
|
+
Returns:
|
|
314
|
+
List of header names that should be displayed
|
|
315
|
+
"""
|
|
316
|
+
return self.result.get_visible_headers()
|