pymodaq 4.2.3__py3-none-any.whl → 5.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.
Potentially problematic release.
This version of pymodaq might be problematic. Click here for more details.
- pymodaq/__init__.py +30 -23
- pymodaq/control_modules/daq_move.py +27 -14
- pymodaq/control_modules/daq_move_ui.py +33 -16
- pymodaq/control_modules/daq_viewer.py +38 -28
- pymodaq/control_modules/daq_viewer_ui.py +6 -6
- pymodaq/control_modules/mocks.py +1 -1
- pymodaq/control_modules/move_utility_classes.py +19 -10
- pymodaq/control_modules/utils.py +18 -12
- pymodaq/control_modules/viewer_utility_classes.py +13 -4
- pymodaq/dashboard.py +166 -118
- pymodaq/examples/custom_app.py +13 -16
- pymodaq/examples/custom_viewer.py +7 -7
- pymodaq/examples/function_plotter.py +13 -12
- pymodaq/examples/parameter_ex.py +50 -25
- pymodaq/examples/tcp_client.py +1 -1
- pymodaq/extensions/__init__.py +1 -1
- pymodaq/extensions/bayesian/bayesian_optimisation.py +15 -12
- pymodaq/extensions/bayesian/utils.py +10 -10
- pymodaq/extensions/console.py +10 -13
- pymodaq/extensions/{daq_logger.py → daq_logger/daq_logger.py} +36 -56
- pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger.py +16 -15
- pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger_models.py +2 -0
- pymodaq/{utils/h5modules → extensions/daq_logger}/h5logging.py +7 -8
- pymodaq/extensions/daq_scan.py +153 -247
- pymodaq/extensions/daq_scan_ui.py +11 -9
- pymodaq/extensions/h5browser.py +8 -8
- pymodaq/extensions/pid/__init__.py +6 -3
- pymodaq/extensions/pid/daq_move_PID.py +4 -2
- pymodaq/extensions/pid/pid_controller.py +15 -12
- pymodaq/extensions/pid/utils.py +10 -5
- pymodaq/extensions/utils.py +5 -3
- pymodaq/post_treatment/load_and_plot.py +10 -7
- pymodaq/resources/preset_default.xml +1 -1
- pymodaq/utils/array_manipulation.py +4 -384
- pymodaq/utils/calibration_camera.py +12 -9
- pymodaq/utils/chrono_timer.py +7 -5
- pymodaq/utils/config.py +3 -450
- pymodaq/utils/daq_utils.py +6 -664
- pymodaq/utils/data.py +9 -2774
- pymodaq/utils/exceptions.py +0 -4
- pymodaq/utils/gui_utils/__init__.py +8 -8
- pymodaq/utils/gui_utils/loader_utils.py +38 -0
- pymodaq/utils/gui_utils/utils.py +6 -138
- pymodaq/utils/h5modules/__init__.py +0 -4
- pymodaq/utils/h5modules/module_saving.py +15 -8
- pymodaq/utils/leco/__init__.py +2 -2
- pymodaq/utils/leco/daq_move_LECODirector.py +2 -2
- pymodaq/utils/leco/daq_xDviewer_LECODirector.py +2 -2
- pymodaq/utils/leco/director_utils.py +2 -2
- pymodaq/utils/leco/leco_director.py +3 -3
- pymodaq/utils/leco/pymodaq_listener.py +2 -2
- pymodaq/utils/leco/utils.py +1 -1
- pymodaq/utils/logger.py +4 -76
- pymodaq/utils/managers/batchscan_manager.py +16 -19
- pymodaq/utils/managers/modules_manager.py +10 -7
- pymodaq/utils/managers/overshoot_manager.py +3 -5
- pymodaq/utils/managers/preset_manager.py +37 -15
- pymodaq/utils/managers/preset_manager_utils.py +11 -9
- pymodaq/utils/managers/remote_manager.py +12 -10
- pymodaq/utils/math_utils.py +4 -572
- pymodaq/utils/parameter/__init__.py +4 -11
- pymodaq/utils/parameter/utils.py +4 -299
- pymodaq/utils/scanner/scan_config.py +1 -1
- pymodaq/utils/scanner/scan_factory.py +16 -12
- pymodaq/utils/{plotting → scanner}/scan_selector.py +19 -20
- pymodaq/utils/scanner/scanner.py +10 -8
- pymodaq/utils/scanner/scanners/_1d_scanners.py +8 -5
- pymodaq/utils/scanner/scanners/_2d_scanners.py +5 -5
- pymodaq/utils/scanner/scanners/sequential.py +8 -8
- pymodaq/utils/scanner/scanners/tabular.py +9 -9
- pymodaq/utils/scanner/utils.py +6 -4
- pymodaq/utils/svg/svg_viewer2D.py +3 -4
- pymodaq/utils/tcp_ip/serializer.py +64 -16
- pymodaq/utils/tcp_ip/tcp_server_client.py +10 -8
- {pymodaq-4.2.3.dist-info → pymodaq-5.0.0.dist-info}/METADATA +5 -3
- pymodaq-5.0.0.dist-info/RECORD +123 -0
- {pymodaq-4.2.3.dist-info → pymodaq-5.0.0.dist-info}/WHEEL +1 -1
- pymodaq/post_treatment/process_to_scalar.py +0 -263
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -2
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -234
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -127150
- pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -142
- pymodaq/resources/VERSION +0 -1
- pymodaq/resources/config_template.toml +0 -90
- pymodaq/resources/triangulation_data.npy +0 -0
- pymodaq/utils/abstract/__init__.py +0 -48
- pymodaq/utils/db/__init__.py +0 -0
- pymodaq/utils/db/db_logger/__init__.py +0 -0
- pymodaq/utils/enums.py +0 -76
- pymodaq/utils/factory.py +0 -82
- pymodaq/utils/gui_utils/custom_app.py +0 -133
- pymodaq/utils/gui_utils/dock.py +0 -107
- pymodaq/utils/gui_utils/file_io.py +0 -93
- pymodaq/utils/gui_utils/layout.py +0 -34
- pymodaq/utils/gui_utils/list_picker.py +0 -38
- pymodaq/utils/gui_utils/widgets/__init__.py +0 -5
- pymodaq/utils/gui_utils/widgets/label.py +0 -24
- pymodaq/utils/gui_utils/widgets/lcd.py +0 -111
- pymodaq/utils/gui_utils/widgets/push.py +0 -149
- pymodaq/utils/gui_utils/widgets/qled.py +0 -62
- pymodaq/utils/gui_utils/widgets/spinbox.py +0 -24
- pymodaq/utils/gui_utils/widgets/table.py +0 -263
- pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -188
- pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -102
- pymodaq/utils/h5modules/backends.py +0 -1022
- pymodaq/utils/h5modules/browsing.py +0 -625
- pymodaq/utils/h5modules/data_saving.py +0 -1101
- pymodaq/utils/h5modules/exporter.py +0 -119
- pymodaq/utils/h5modules/exporters/__init__.py +0 -0
- pymodaq/utils/h5modules/exporters/base.py +0 -111
- pymodaq/utils/h5modules/exporters/flimj.py +0 -63
- pymodaq/utils/h5modules/exporters/hyperspy.py +0 -143
- pymodaq/utils/h5modules/saving.py +0 -866
- pymodaq/utils/h5modules/utils.py +0 -115
- pymodaq/utils/managers/action_manager.py +0 -489
- pymodaq/utils/managers/parameter_manager.py +0 -282
- pymodaq/utils/managers/roi_manager.py +0 -726
- pymodaq/utils/messenger.py +0 -66
- pymodaq/utils/parameter/ioxml.py +0 -542
- pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -38
- pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -31
- pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -126
- pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -143
- pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -265
- pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -44
- pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -150
- pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -18
- pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -175
- pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -145
- pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -135
- pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -149
- pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -142
- pymodaq/utils/plotting/__init__.py +0 -0
- pymodaq/utils/plotting/data_viewers/__init__.py +0 -10
- pymodaq/utils/plotting/data_viewers/base.py +0 -286
- pymodaq/utils/plotting/data_viewers/viewer.py +0 -274
- pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -298
- pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -820
- pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -231
- pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -1118
- pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -146
- pymodaq/utils/plotting/data_viewers/viewerND.py +0 -800
- pymodaq/utils/plotting/gant_chart.py +0 -123
- pymodaq/utils/plotting/image_viewer.py +0 -97
- pymodaq/utils/plotting/items/__init__.py +0 -0
- pymodaq/utils/plotting/items/axis_scaled.py +0 -93
- pymodaq/utils/plotting/items/crosshair.py +0 -94
- pymodaq/utils/plotting/items/image.py +0 -388
- pymodaq/utils/plotting/navigator.py +0 -353
- pymodaq/utils/plotting/plotter/plotter.py +0 -94
- pymodaq/utils/plotting/plotter/plotters/__init__.py +0 -0
- pymodaq/utils/plotting/plotter/plotters/matplotlib_plotters.py +0 -134
- pymodaq/utils/plotting/plotter/plotters/qt_plotters.py +0 -78
- pymodaq/utils/plotting/utils/__init__.py +0 -0
- pymodaq/utils/plotting/utils/axes_viewer.py +0 -88
- pymodaq/utils/plotting/utils/filter.py +0 -585
- pymodaq/utils/plotting/utils/lineout.py +0 -226
- pymodaq/utils/plotting/utils/plot_utils.py +0 -579
- pymodaq/utils/plotting/utils/signalND.py +0 -1347
- pymodaq/utils/plotting/widgets.py +0 -76
- pymodaq/utils/qvariant.py +0 -12
- pymodaq/utils/slicing.py +0 -63
- pymodaq/utils/units.py +0 -216
- pymodaq-4.2.3.dist-info/RECORD +0 -438
- /pymodaq/{post_treatment/daq_analysis → extensions/daq_logger}/__init__.py +0 -0
- /pymodaq/{utils/abstract/logger.py → extensions/daq_logger/abstract.py} +0 -0
- /pymodaq/{resources/QtDesigner_Ressources → extensions/daq_logger/db}/__init__.py +0 -0
- {pymodaq-4.2.3.dist-info → pymodaq-5.0.0.dist-info}/entry_points.txt +0 -0
- {pymodaq-4.2.3.dist-info → pymodaq-5.0.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -8,10 +8,13 @@ from base64 import b64encode, b64decode
|
|
|
8
8
|
import numbers
|
|
9
9
|
from typing import Tuple, List, Union, TYPE_CHECKING, Iterable
|
|
10
10
|
|
|
11
|
-
|
|
12
11
|
import numpy as np
|
|
13
|
-
from
|
|
14
|
-
from
|
|
12
|
+
from pymodaq_data import data as data_mod
|
|
13
|
+
from pymodaq_data.data import DataWithAxes, DataToExport, Axis, DwaType
|
|
14
|
+
|
|
15
|
+
from pymodaq_gui.parameter import Parameter, utils as putils, ioxml
|
|
16
|
+
|
|
17
|
+
import pymodaq.utils.data as data_mod_pymodaq
|
|
15
18
|
|
|
16
19
|
if TYPE_CHECKING:
|
|
17
20
|
from pymodaq.utils.tcp_ip.mysocket import Socket
|
|
@@ -270,7 +273,8 @@ class Serializer:
|
|
|
270
273
|
return bytes_string
|
|
271
274
|
|
|
272
275
|
def object_type_serialization(self, obj: Union[Axis, DataToExport, DataWithAxes]) -> bytes:
|
|
273
|
-
""" Convert an object type into a bytes message as a string together with the info to
|
|
276
|
+
""" Convert an object type into a bytes message as a string together with the info to
|
|
277
|
+
convert it back
|
|
274
278
|
|
|
275
279
|
Applies to Data object from the pymodaq.utils.data module
|
|
276
280
|
"""
|
|
@@ -361,6 +365,10 @@ class Serializer:
|
|
|
361
365
|
bytes_string += self.string_serialization('array')
|
|
362
366
|
bytes_string += self.ndarray_serialization(obj)
|
|
363
367
|
|
|
368
|
+
elif isinstance(obj, bytes):
|
|
369
|
+
bytes_string += self.string_serialization('bytes')
|
|
370
|
+
bytes_string += self.bytes_serialization(obj)
|
|
371
|
+
|
|
364
372
|
elif isinstance(obj, str):
|
|
365
373
|
bytes_string += self.string_serialization('string')
|
|
366
374
|
bytes_string += self.string_serialization(obj)
|
|
@@ -377,6 +385,17 @@ class Serializer:
|
|
|
377
385
|
bytes_string += self.string_serialization('list')
|
|
378
386
|
bytes_string += self.list_serialization(obj)
|
|
379
387
|
|
|
388
|
+
elif isinstance(obj, putils.ParameterWithPath):
|
|
389
|
+
path = obj.path
|
|
390
|
+
param_as_xml = ioxml.parameter_to_xml_string(obj.parameter)
|
|
391
|
+
bytes_string += self.string_serialization('parameter')
|
|
392
|
+
bytes_string += self.list_serialization(path)
|
|
393
|
+
bytes_string += self.string_serialization(param_as_xml)
|
|
394
|
+
|
|
395
|
+
elif isinstance(obj, DataToExport):
|
|
396
|
+
bytes_string += self.string_serialization('dte')
|
|
397
|
+
bytes_string += self.dte_serialization(obj)
|
|
398
|
+
|
|
380
399
|
else:
|
|
381
400
|
raise TypeError(
|
|
382
401
|
f'the element {obj} type cannot be serialized into bytes, only numpy arrays'
|
|
@@ -550,6 +569,11 @@ class DeSerializer:
|
|
|
550
569
|
int_obj = self.bytes_to_int(self._bytes_string.get_first_nbytes(4))
|
|
551
570
|
return int_obj
|
|
552
571
|
|
|
572
|
+
def bytes_deserialization(self) -> bytes:
|
|
573
|
+
bstring_len = self._int_deserialization()
|
|
574
|
+
bstr = self._bytes_string.get_first_nbytes(bstring_len)
|
|
575
|
+
return bstr
|
|
576
|
+
|
|
553
577
|
def string_deserialization(self) -> str:
|
|
554
578
|
"""Convert bytes into a str object
|
|
555
579
|
|
|
@@ -617,23 +641,36 @@ class DeSerializer:
|
|
|
617
641
|
ndarray = np.atleast_1d(ndarray) # remove singleton dimensions
|
|
618
642
|
return ndarray
|
|
619
643
|
|
|
620
|
-
def
|
|
644
|
+
def type_and_object_deserialization(self):
|
|
645
|
+
""" Deserialize specific objects from their binary representation (inverse of `Serializer.type_and_object_serialization`).
|
|
646
|
+
|
|
647
|
+
See Also
|
|
648
|
+
--------
|
|
649
|
+
Serializer.dwa_serialization, Serializer.dte_serialization
|
|
650
|
+
|
|
651
|
+
"""
|
|
621
652
|
obj_type = self.string_deserialization()
|
|
622
653
|
elt = None
|
|
623
654
|
if obj_type == 'scalar':
|
|
624
655
|
elt = self.scalar_deserialization()
|
|
625
656
|
elif obj_type == 'string':
|
|
626
657
|
elt = self.string_deserialization()
|
|
658
|
+
elif obj_type == 'bytes':
|
|
659
|
+
elt = self.bytes_deserialization()
|
|
627
660
|
elif obj_type == 'array':
|
|
628
661
|
elt = self.ndarray_deserialization()
|
|
629
662
|
elif obj_type == 'dwa':
|
|
630
663
|
elt = self.dwa_deserialization()
|
|
664
|
+
elif obj_type == 'dte':
|
|
665
|
+
elt = self.dte_deserialization()
|
|
631
666
|
elif obj_type == 'axis':
|
|
632
667
|
elt = self.axis_deserialization()
|
|
633
668
|
elif obj_type == 'bool':
|
|
634
669
|
elt = self.boolean_deserialization()
|
|
635
670
|
elif obj_type == 'list':
|
|
636
671
|
elt = self.list_deserialization()
|
|
672
|
+
elif obj_type == 'parameter':
|
|
673
|
+
elt = self.parameter_deserialization()
|
|
637
674
|
else:
|
|
638
675
|
print(f'invalid object type {obj_type}')
|
|
639
676
|
return elt
|
|
@@ -651,9 +688,16 @@ class DeSerializer:
|
|
|
651
688
|
list_len = self._int_deserialization()
|
|
652
689
|
|
|
653
690
|
for ind in range(list_len):
|
|
654
|
-
list_obj.append(self.
|
|
691
|
+
list_obj.append(self.type_and_object_deserialization())
|
|
655
692
|
return list_obj
|
|
656
693
|
|
|
694
|
+
def parameter_deserialization(self) -> putils.ParameterWithPath:
|
|
695
|
+
path = self.list_deserialization()
|
|
696
|
+
param_as_xml = self.string_deserialization()
|
|
697
|
+
param_dict = ioxml.XML_string_to_parameter(param_as_xml)
|
|
698
|
+
param_obj = Parameter(**param_dict[0])
|
|
699
|
+
return putils.ParameterWithPath(param_obj, path)
|
|
700
|
+
|
|
657
701
|
def axis_deserialization(self) -> Axis:
|
|
658
702
|
"""Convert bytes into an Axis object
|
|
659
703
|
|
|
@@ -690,22 +734,26 @@ class DeSerializer:
|
|
|
690
734
|
if class_name not in DwaType.names():
|
|
691
735
|
raise TypeError(f'Attempting to deserialize a DataWithAxes flavor but got the bytes for a {class_name}')
|
|
692
736
|
timestamp = self.scalar_deserialization()
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
737
|
+
try:
|
|
738
|
+
dwa_class = getattr(data_mod, class_name)
|
|
739
|
+
except AttributeError: # in case it is a particular data object defined only in pymodaq
|
|
740
|
+
dwa_class = getattr(data_mod_pymodaq, class_name)
|
|
741
|
+
dwa = dwa_class(self.string_deserialization(),
|
|
742
|
+
source=self.string_deserialization(),
|
|
743
|
+
dim=self.string_deserialization(),
|
|
744
|
+
distribution=self.string_deserialization(),
|
|
745
|
+
data=self.list_deserialization(),
|
|
746
|
+
labels=self.list_deserialization(),
|
|
747
|
+
origin=self.string_deserialization(),
|
|
748
|
+
nav_indexes=tuple(self.list_deserialization()),
|
|
749
|
+
axes=self.list_deserialization(),
|
|
702
750
|
)
|
|
703
751
|
errors = self.list_deserialization()
|
|
704
752
|
if len(errors) != 0:
|
|
705
753
|
dwa.errors = errors
|
|
706
754
|
dwa.extra_attributes = self.list_deserialization()
|
|
707
755
|
for attribute in dwa.extra_attributes:
|
|
708
|
-
setattr(dwa, attribute, self.
|
|
756
|
+
setattr(dwa, attribute, self.type_and_object_deserialization())
|
|
709
757
|
|
|
710
758
|
dwa.timestamp = timestamp
|
|
711
759
|
return dwa
|
|
@@ -14,17 +14,19 @@ import numpy as np
|
|
|
14
14
|
from qtpy.QtCore import QObject, Signal, Slot, QThread
|
|
15
15
|
from qtpy import QtWidgets
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
from
|
|
19
|
-
from
|
|
17
|
+
|
|
18
|
+
from pymodaq_utils.utils import getLineInfo, ThreadCommand
|
|
19
|
+
from pymodaq_utils import math_utils as mutils
|
|
20
|
+
from pymodaq_utils.config import Config
|
|
21
|
+
from pymodaq_gui.parameter import utils as putils
|
|
22
|
+
from pymodaq_gui.parameter import ioxml
|
|
23
|
+
from pymodaq_gui.parameter import Parameter
|
|
24
|
+
from pymodaq_data.data import DataToExport
|
|
25
|
+
|
|
20
26
|
from pymodaq.utils.data import DataFromPlugins, DataActuator
|
|
21
|
-
from pymodaq.utils import math_utils as mutils
|
|
22
|
-
from pymodaq.utils.config import Config
|
|
23
|
-
from pymodaq.utils.parameter import Parameter
|
|
24
|
-
from pymodaq.utils.data import DataToExport
|
|
25
27
|
from pymodaq.utils.tcp_ip.mysocket import Socket
|
|
26
28
|
from pymodaq.utils.tcp_ip.serializer import Serializer, DeSerializer
|
|
27
|
-
from
|
|
29
|
+
from pymodaq_gui.managers.parameter_manager import ParameterManager
|
|
28
30
|
|
|
29
31
|
config = Config()
|
|
30
32
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pymodaq
|
|
3
|
-
Version:
|
|
3
|
+
Version: 5.0.0
|
|
4
4
|
Summary: Modular Data Acquisition with Python
|
|
5
5
|
Project-URL: Homepage, http://pymodaq.cnrs.fr
|
|
6
6
|
Project-URL: Source, https://github.com/PyMoDAQ/PyMoDAQ
|
|
@@ -34,7 +34,6 @@ Classifier: Intended Audience :: Science/Research
|
|
|
34
34
|
Classifier: License :: OSI Approved :: MIT License
|
|
35
35
|
Classifier: Natural Language :: English
|
|
36
36
|
Classifier: Operating System :: OS Independent
|
|
37
|
-
Classifier: Programming Language :: Python :: 3.7
|
|
38
37
|
Classifier: Programming Language :: Python :: 3.8
|
|
39
38
|
Classifier: Programming Language :: Python :: 3.9
|
|
40
39
|
Classifier: Programming Language :: Python :: 3.10
|
|
@@ -43,7 +42,7 @@ Classifier: Topic :: Scientific/Engineering :: Human Machine Interfaces
|
|
|
43
42
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
44
43
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
45
44
|
Classifier: Topic :: Software Development :: User Interfaces
|
|
46
|
-
Requires-Python: >=3.
|
|
45
|
+
Requires-Python: >=3.8
|
|
47
46
|
Requires-Dist: bayesian-optimization
|
|
48
47
|
Requires-Dist: easydict
|
|
49
48
|
Requires-Dist: importlib-metadata; python_version < '3.8'
|
|
@@ -52,8 +51,11 @@ Requires-Dist: numpy<2.0.0
|
|
|
52
51
|
Requires-Dist: packaging
|
|
53
52
|
Requires-Dist: pint
|
|
54
53
|
Requires-Dist: pyleco; python_version >= '3.8'
|
|
54
|
+
Requires-Dist: pymodaq-data
|
|
55
|
+
Requires-Dist: pymodaq-gui
|
|
55
56
|
Requires-Dist: pymodaq-plugin-manager>=0.0.17
|
|
56
57
|
Requires-Dist: pymodaq-plugins-mock
|
|
58
|
+
Requires-Dist: pymodaq-utils
|
|
57
59
|
Requires-Dist: pyqtgraph>=0.12
|
|
58
60
|
Requires-Dist: python-dateutil
|
|
59
61
|
Requires-Dist: qdarkstyle
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
pymodaq/__init__.py,sha256=Tfgreu3lNKud62iXpSWOUBFBDZIw-_w7bt4yDDgveT0,4286
|
|
2
|
+
pymodaq/dashboard.py,sha256=ZiVfhjXXIkap8ALHW-3yd9kSY_cUBSD7NhPc4AJcwWU,64853
|
|
3
|
+
pymodaq/icon.ico,sha256=hOHHfNDENKphQvG1WDleSEYcHukneR2eRFJu8isIlD4,74359
|
|
4
|
+
pymodaq/splash.png,sha256=ow8IECF3tPRUMA4tf2tMu1aRiMaxx91_Y2ckVxkrmF0,53114
|
|
5
|
+
pymodaq/control_modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
pymodaq/control_modules/daq_move.py,sha256=CbwFwbIFTr6VV283lSeD3NwcaFfy-530GzWVVvpSDV8,35377
|
|
7
|
+
pymodaq/control_modules/daq_move_ui.py,sha256=Zi5c56-dwP2VtojiUT8TJtW9EECzcyRpm9rspnyLd1Y,15219
|
|
8
|
+
pymodaq/control_modules/daq_viewer.py,sha256=Pzh0poR_0Iln5PAgcIB936WKx2HsVj9jWFmTrZX2onY,57904
|
|
9
|
+
pymodaq/control_modules/daq_viewer_ui.py,sha256=7XTidYrYlzj--DbbE1Wx4UBjvp1upGpziGhSTPoMKCc,15677
|
|
10
|
+
pymodaq/control_modules/mocks.py,sha256=CdczKJDAuM2oL7VvIpSBWiYtTCqK_6x9unxavezp3_s,1954
|
|
11
|
+
pymodaq/control_modules/move_utility_classes.py,sha256=bUK5w54hO7jTHuvhoN-etrpKd-81Zpnxq3VLKOKMvtY,33590
|
|
12
|
+
pymodaq/control_modules/utils.py,sha256=4FKT8m2qOdkVOX8-xrdxDKXH0OM6pptSPDhPLfBaQ2A,20003
|
|
13
|
+
pymodaq/control_modules/viewer_utility_classes.py,sha256=rYwKy9Qo6psFERKPSPo4kTzIwo8DqFwtmfIGAa9lnhQ,26699
|
|
14
|
+
pymodaq/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
pymodaq/examples/custom_app.py,sha256=xfx-Zzvc9XotBCLR0Jb1WLk0EQr_4qm3xHRiHy46v0E,10323
|
|
16
|
+
pymodaq/examples/custom_viewer.py,sha256=brNji-nTFihyOedDvu6-iYefHos0fL90D4toWMZcMuM,4799
|
|
17
|
+
pymodaq/examples/function_plotter.py,sha256=z9zjvs35nwuq_Ux-EeKv4mELfVCWr1QqQG8F_AFctlk,6109
|
|
18
|
+
pymodaq/examples/nonlinearscanner.py,sha256=x0R2_FP0YnuOCCAmYRiAiZ1jfUdRxu5RqIYLyGQMZ0U,3790
|
|
19
|
+
pymodaq/examples/parameter_ex.py,sha256=dLw9Wmv4bTt07r0XR1zjYPujaRTUNcY-tHR9BK71nVA,8626
|
|
20
|
+
pymodaq/examples/preset_MockCamera.xml,sha256=quQlMsX6YSoqqc9_9Y-9zu3TDM6Xvnuc2JSWwg9f948,15774
|
|
21
|
+
pymodaq/examples/tcp_client.py,sha256=AGkLR307r11YmPej4e8WMXwAOuXpDcqeMCrWo1whiKw,2583
|
|
22
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases,sha256=t0eKH9Uq_AMk4wQ-6Pm5mKUjGcCvfT9GtvMsvDhkCUk,47
|
|
23
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps,sha256=VZHH96rKSnRYKeCAXUmKI3vQOX8Wz53FYCF2yXuqnaU,84
|
|
24
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvproj,sha256=eYzmQO3XFxCJS-WMTjfyUBmmogxJUi7Nu5h64tKVlow,1984
|
|
25
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.vi,sha256=3O69SPlNetv7-VXpAeVDd1for0iQYPtexdd5Q_5a9To,69358
|
|
26
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_1Dgaussian.vi,sha256=VDrTmIZNkgQDIQ99WvhpDk29cziPLKejhOd3aIS4zEk,21969
|
|
27
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_2Dgaussian.vi,sha256=Yk4wYsikAyg4zTKnQReIH_Kw5mca_JiRGV5hDNzE2I8,29785
|
|
28
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_cmd.vi,sha256=DwASW4Vj20j2y6WNEyDHd2e08WYMr3w8Gz6gGwyyqx8,18148
|
|
29
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_float.vi,sha256=LZRP9jUOkQ7TMqV7my4h_MwCJ_RF4vXKpjQE6DPVqS8,20622
|
|
30
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_int.vi,sha256=vmQHX8gBhLjVeCatUoM_o0Ai92oFOoybvdPENwKsu5M,11828
|
|
31
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_data.vi,sha256=fq53wXWWLaw6y02R1Wff0oUvKJvrPWIJKdSMmh7xG94,23025
|
|
32
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_int.vi,sha256=uxMD-Jn-xDmhQlaB6DgbhADzfpRCuJ6eG01Qy2f3ZzE,9072
|
|
33
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi,sha256=uYnMjYMQdfQqRugCtwgKM-IGpxw_M_vGM2oUBwj-UnM,19039
|
|
34
|
+
pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi,sha256=hdHU78daP5EOrX-co1TofhMLcKMQ9ODGXKcFx_IScGM,19791
|
|
35
|
+
pymodaq/examples/Labview_TCP_Client/client_state.ctl,sha256=IxYi5Og0QXFB1e0VeBL23sIOYOCImf7uMzitIuPlagw,4293
|
|
36
|
+
pymodaq/examples/Labview_TCP_Client/cmd_types.ctl,sha256=gwuDyGcte11Zqx0C-U8ljRyYCQleUPh18MYqg9GtxPg,4618
|
|
37
|
+
pymodaq/extensions/__init__.py,sha256=PXelEHNgMwhjWlvxwObYU1joSLJnaIsFBZs9ZTR8w5c,470
|
|
38
|
+
pymodaq/extensions/console.py,sha256=kkuHHog_a2Y_5cYrAFTD7IGRQ4BA4NBQz4hrwFYanQY,2277
|
|
39
|
+
pymodaq/extensions/daq_scan.py,sha256=yJKRDrH71dZPix8M8qeHfRDDILmkY2vaMSdrS2J7QcQ,49331
|
|
40
|
+
pymodaq/extensions/daq_scan_ui.py,sha256=vrIIm6ev21iIIKFdXM6uZiBwJU717XC8PvudjxmjPM0,10119
|
|
41
|
+
pymodaq/extensions/h5browser.py,sha256=7WbF2hj7sdU0kCqTxB4nXvfKGqUnoIsa2_AhCtCBNQo,1131
|
|
42
|
+
pymodaq/extensions/utils.py,sha256=F5my3dPLqDrfsIYrdqDetdyNLS6hL8LKXjoltgug8fU,1897
|
|
43
|
+
pymodaq/extensions/bayesian/__init__.py,sha256=QMV9tq8Axi6YjoGj4UguBO8Zvuh26r5s91bm6YU7Itk,55
|
|
44
|
+
pymodaq/extensions/bayesian/bayesian_optimisation.py,sha256=B-_upVsBuZaWlHDvRYsGspHyQh52nkL2tPchvPnZuJI,30002
|
|
45
|
+
pymodaq/extensions/bayesian/utils.py,sha256=4CniISXJKwmYiN6-utZYnpIfFLU8SLSH7HxjArqLlMw,15384
|
|
46
|
+
pymodaq/extensions/daq_logger/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
+
pymodaq/extensions/daq_logger/abstract.py,sha256=I-t-2nSIVHHUfHJ-3IoqsuULZiIsXRe4saotaEL3-Fk,1095
|
|
48
|
+
pymodaq/extensions/daq_logger/daq_logger.py,sha256=HU6rs8FxsnKMZaYVsvikowmXjlvDqwLxZxzzYYLoh9A,18451
|
|
49
|
+
pymodaq/extensions/daq_logger/h5logging.py,sha256=Z512PrN4HyKMgqZ7sStFRoY1u2Baiau7X4II5Mb4Ofo,2434
|
|
50
|
+
pymodaq/extensions/daq_logger/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
pymodaq/extensions/daq_logger/db/db_logger.py,sha256=E607KSCloojpAa9QObhaLAe1tKfh0qEkDLrafElM8rc,10460
|
|
52
|
+
pymodaq/extensions/daq_logger/db/db_logger_models.py,sha256=r9672aG8vUPqtHq6gFSuIFP-7hf8HhJavsRZrYo20Ns,3461
|
|
53
|
+
pymodaq/extensions/pid/__init__.py,sha256=mAua3boQaY2hS18jCn3ECVF8O1-u9XxJ6ZYPPioT118,518
|
|
54
|
+
pymodaq/extensions/pid/daq_move_PID.py,sha256=LgPDBwBrdypZkQsNY_NaYVhdIkOzZUWzyuHMBle1pFc,3088
|
|
55
|
+
pymodaq/extensions/pid/pid_controller.py,sha256=qAJWBFoUXHuB2JNBYkf3xOOwtXkvxzvTI2wTQIhDvdk,28372
|
|
56
|
+
pymodaq/extensions/pid/utils.py,sha256=TqMOL-Xf28SGl70VwB0ORuKS4-SmbBwUdDKlEWt2zwQ,7971
|
|
57
|
+
pymodaq/post_treatment/__init__.py,sha256=xaaLFZJ7OLqI_7yPurFk89A7m2ywSbYDXAsdE-QQ8Zg,81
|
|
58
|
+
pymodaq/post_treatment/load_and_plot.py,sha256=dqDhZv_g3YY_Ah8bJ6OoOfPxR5xb-CuggbzlfSkPMvU,12158
|
|
59
|
+
pymodaq/post_treatment/daq_measurement/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
+
pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py,sha256=1u7hWDaiwsZE56c0eDTUw6qfuezoxji_QaIjkcNx0eg,7438
|
|
61
|
+
pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui,sha256=PyzbCWPMkh5oIYYteZczXyWMeHKW9EJmM1QlzXhnyTk,7037
|
|
62
|
+
pymodaq/post_treatment/daq_measurement/daq_measurement_main.py,sha256=CAKwcWMOD86aXB8mbdxOK7e8nZRos5d59FzDtqK1QoY,17093
|
|
63
|
+
pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat,sha256=e1tu2A67MS9fk3jhriF6saQgRxWIucIvNW92iWXFP6E,164
|
|
64
|
+
pymodaq/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
+
pymodaq/resources/preset_default.xml,sha256=3OMyj4d0SeArDNcgT41JHUWSEuITM56QsP3CHgLhhqQ,26382
|
|
66
|
+
pymodaq/resources/setup_plugin.py,sha256=yab26FHPB-zsUZ6ZiKQ7Rm9H1ZhoZW8RQoW4wPK-T94,3130
|
|
67
|
+
pymodaq/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
|
+
pymodaq/utils/array_manipulation.py,sha256=lU-MwuAIv0ZFc0_E11w0TSX5AfGarJOG58yIZZk36GY,272
|
|
69
|
+
pymodaq/utils/calibration_camera.py,sha256=WTRXFbacR5tL01rFH1JZ5ejEXGcxOVUM8kRA5GPyCc8,8869
|
|
70
|
+
pymodaq/utils/chrono_timer.py,sha256=857iYyD_K27UyL4wPj38Ht0X9KiY-SbRd7j_1kjUF8k,7205
|
|
71
|
+
pymodaq/utils/config.py,sha256=w0EkWEvUbLCq7nTNZQccaMWVILuFaGW1JsIgX3VIKKc,1155
|
|
72
|
+
pymodaq/utils/conftests.py,sha256=3Ak8WEpa3EhAp73Yb1LLq8YFONhPqiL7gG9eSDIoTNc,58
|
|
73
|
+
pymodaq/utils/daq_utils.py,sha256=noKCkWmDtXkbXzx5rljBDgRBBB9BhxoRQ1ICrmczpLA,5954
|
|
74
|
+
pymodaq/utils/data.py,sha256=cU44xkLS2en9wzF0xjZupoaXFkix2evA7XjKggf5b3c,4393
|
|
75
|
+
pymodaq/utils/exceptions.py,sha256=xWORkqBplDEKI3t5N4LEYPlowlxIs9E007AtYe4E8Y4,627
|
|
76
|
+
pymodaq/utils/logger.py,sha256=6x5BPpWXw1zW2M7F4lRGIOP2TtnqJHz2m7XSqI8g0u0,293
|
|
77
|
+
pymodaq/utils/math_utils.py,sha256=uBnk15-O2ucoF0dH-f41HqQYWIFsqNdkCb7AngwN8BI,248
|
|
78
|
+
pymodaq/utils/gui_utils/__init__.py,sha256=MUGjejjsXUzTtDTqDzaQTL9W8Sc850ZZxYBlJn6xlxg,539
|
|
79
|
+
pymodaq/utils/gui_utils/loader_utils.py,sha256=7sfAvktORgF1DAcYCHsWrl57koaO8v4D4UCqXgUPxbU,1301
|
|
80
|
+
pymodaq/utils/gui_utils/utils.py,sha256=S2lRoGwVwS9VFRE3Ap3MX0tByHW_d4TUbetneg_KSgc,543
|
|
81
|
+
pymodaq/utils/h5modules/__init__.py,sha256=daEdpEyAJIa8b2VkCqSKcw8PaExcB6Qro80XNes_sHA,2
|
|
82
|
+
pymodaq/utils/h5modules/module_saving.py,sha256=wGI4eHKvcHOyfJ4MTclKIpqIM8MOlBYNBvqqs6nV3qA,14112
|
|
83
|
+
pymodaq/utils/leco/__init__.py,sha256=PVxGVZx5uHCsZmFWrVTkVX1lE5C2V95bKBj0vK9KZQU,878
|
|
84
|
+
pymodaq/utils/leco/daq_move_LECODirector.py,sha256=RSIcHolo-eH5dSi04_6zLZHZaPYmf-KdHuWDi562XrU,6376
|
|
85
|
+
pymodaq/utils/leco/daq_xDviewer_LECODirector.py,sha256=7dZBGWzD4qlQxrPk9CgMQgVcHxlabnujGfhUn-kSN7I,5984
|
|
86
|
+
pymodaq/utils/leco/desktop.ini,sha256=2zopClaSQqdFfIsC8CGo2Oc-14x9h1gV0-fUrDtLFmA,82
|
|
87
|
+
pymodaq/utils/leco/director_utils.py,sha256=0inrKh5aI-1pQs3fTXYvmjvwZ6TiyEEAupr2Hw_pMj0,2105
|
|
88
|
+
pymodaq/utils/leco/leco_director.py,sha256=TVd8DNKGoq7Uh9P5JNHFBDt1Q0VxIYPweciDbpTpa8M,3046
|
|
89
|
+
pymodaq/utils/leco/pymodaq_listener.py,sha256=MIp5pAYO5ZaeXBkBtZycKP24OS3q91Nw_a13yFwPXY8,10693
|
|
90
|
+
pymodaq/utils/leco/utils.py,sha256=Hx0ulVmZyYgBNNqWrGacqYt4Djr2376o-DSdX0D81I4,1394
|
|
91
|
+
pymodaq/utils/managers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
|
+
pymodaq/utils/managers/batchscan_manager.py,sha256=rhz2qeVfePX0h8sjIY1tHQckIHIxKhH-zOIzvM0_1Ag,13666
|
|
93
|
+
pymodaq/utils/managers/modules_manager.py,sha256=hD6zfRIDTPNcv7J5_souTGnNT3PJjjpUmS9FAVPKANU,20738
|
|
94
|
+
pymodaq/utils/managers/overshoot_manager.py,sha256=6xcl9ZGbMcUSSYSu7GesZHbyANEYlwQAno72t_DvO8g,7058
|
|
95
|
+
pymodaq/utils/managers/preset_manager.py,sha256=36ojPlAUjvlDTL4cAWrnR0RQ2pWNmxbkZoDVZwCEXJY,9472
|
|
96
|
+
pymodaq/utils/managers/preset_manager_utils.py,sha256=X4s6Wz4JI-fDsplyf9qE6INfEV_nZ53cm1damPvjiFQ,8105
|
|
97
|
+
pymodaq/utils/managers/remote_manager.py,sha256=LuigmTfFuu9HupV0MWJ0kpVVOjyboCfRSf3HOkim_oQ,22160
|
|
98
|
+
pymodaq/utils/parameter/__init__.py,sha256=SuuIhV7A1zQyxj6j1ppFJKyTYXT2v3stdDXOr6uD5BI,285
|
|
99
|
+
pymodaq/utils/parameter/utils.py,sha256=atxN31PFrLDPjpX0ITEL_ugBvreOVI-RfjbOU_YCMhw,247
|
|
100
|
+
pymodaq/utils/scanner/__init__.py,sha256=LqY1QwGnJEgr8CcW8uLWzbWy55Nvkmjmww4nl7xMpYU,171
|
|
101
|
+
pymodaq/utils/scanner/scan_config.py,sha256=GJeH8oeZ_zMtujwkLM1jpKDQFLFKIN1wlkxXbOv6nWM,325
|
|
102
|
+
pymodaq/utils/scanner/scan_factory.py,sha256=fu4kQrAoYsXeVg1VlHT2cyLZTuCQBJcz6X97CgMb0kw,8577
|
|
103
|
+
pymodaq/utils/scanner/scan_selector.py,sha256=uu55xcijjg1fcvF59VVbtRLzXLoxb_3klEJPLiAuyws,16319
|
|
104
|
+
pymodaq/utils/scanner/scanner.py,sha256=QxQwkkGpJvBfaoUQHGX6EK2EbIQGQFj47qBd8VQ7A0k,10898
|
|
105
|
+
pymodaq/utils/scanner/utils.py,sha256=YjjrWWKs9q_OgP5xK277IyEsMqp15qFxU19kQ8f5R-c,3680
|
|
106
|
+
pymodaq/utils/scanner/scanners/_1d_scanners.py,sha256=ArT1H8zl1_TztvxelDhjviEBtyv4AOO9Rt54EMKIuuQ,7812
|
|
107
|
+
pymodaq/utils/scanner/scanners/_2d_scanners.py,sha256=AAHHHgyMtkXQTWnuPh3IY5ytATG5Lqc-AHJRpXIYApw,13851
|
|
108
|
+
pymodaq/utils/scanner/scanners/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
109
|
+
pymodaq/utils/scanner/scanners/sequential.py,sha256=X0slsfHCqid7N0Kj6EVeV8gStljlow2rZxPpRqj5VB4,8053
|
|
110
|
+
pymodaq/utils/scanner/scanners/tabular.py,sha256=QPwW1kmJQY2YK4-clYd3r3Loolk3QYrkR2RqMIrrEvc,12752
|
|
111
|
+
pymodaq/utils/svg/__init__.py,sha256=QWpeotkNhAQkoVTdWBH8t6MRr9-lrPJx4bXn7J6fCNA,81
|
|
112
|
+
pymodaq/utils/svg/svg_renderer.py,sha256=USEcrOWmQAq8UM620e_XIGPI6z9IQmhyJuqbPo3jLzE,406
|
|
113
|
+
pymodaq/utils/svg/svg_view.py,sha256=bmXpDqnw9S-Bp3F8Hi_oeYB5Y9gebiCNsQWVJzCq-PA,901
|
|
114
|
+
pymodaq/utils/svg/svg_viewer2D.py,sha256=HbJKT90bu1fTY1m018NBtXCZGBXnGNAFemBDrMxc0PY,1427
|
|
115
|
+
pymodaq/utils/tcp_ip/__init__.py,sha256=1e_EK0AgvdoLAD_CSGGEaITZdy6OWCO7ih9IAIp7HT4,81
|
|
116
|
+
pymodaq/utils/tcp_ip/mysocket.py,sha256=StAWj8dzHeMnbLj68Sel81uWFy-YkKVNRnVf7gXrESI,3452
|
|
117
|
+
pymodaq/utils/tcp_ip/serializer.py,sha256=SR8o_tB_keXWvYgNLYyMJhlKoXmlrM2QynbfopNP-7E,27650
|
|
118
|
+
pymodaq/utils/tcp_ip/tcp_server_client.py,sha256=cNWWfMuiWlS53d1boEBWPz37Y40n5DS-Ebiw2fYiOsU,30649
|
|
119
|
+
pymodaq-5.0.0.dist-info/METADATA,sha256=H0azQSIVc3WPtJjcM58K3wzGoS-eBg3Lfqm60DPfGD0,7699
|
|
120
|
+
pymodaq-5.0.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
121
|
+
pymodaq-5.0.0.dist-info/entry_points.txt,sha256=RAzdYNjvUT28I2eiCKki_g2NzXq0woWxhev6lwzwRv8,348
|
|
122
|
+
pymodaq-5.0.0.dist-info/licenses/LICENSE,sha256=VKOejxexXAe3XwfhAhcFGqeXQ12irxVHdeAojZwFEI8,1108
|
|
123
|
+
pymodaq-5.0.0.dist-info/RECORD,,
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
"""
|
|
3
|
-
Created the 04/11/2022
|
|
4
|
-
|
|
5
|
-
@author: Sebastien Weber
|
|
6
|
-
"""
|
|
7
|
-
import numpy as np
|
|
8
|
-
from numbers import Number
|
|
9
|
-
from typing import List, Tuple
|
|
10
|
-
from abc import ABCMeta, abstractmethod, abstractproperty
|
|
11
|
-
|
|
12
|
-
from pymodaq.utils.factory import ObjectFactory
|
|
13
|
-
from pymodaq.utils import math_utils as mutils
|
|
14
|
-
from pymodaq.utils.data import DataWithAxes, Axis, DataRaw, DataBase, DataDim, DataCalculated
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
config_processors = {
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
class DataProcessorBase(metaclass=ABCMeta):
|
|
22
|
-
"""Apply processing functions to signal data. This function should return a DataWithAxes.
|
|
23
|
-
|
|
24
|
-
Attributes
|
|
25
|
-
----------
|
|
26
|
-
apply_to: DataDim
|
|
27
|
-
Specify on which type of data dimensionality this processor can be applied to, if only 1D:
|
|
28
|
-
apply_to = DataDim['Data1D']
|
|
29
|
-
|
|
30
|
-
"""
|
|
31
|
-
|
|
32
|
-
apply_to: DataDim = abstractproperty
|
|
33
|
-
|
|
34
|
-
def process(self, data: DataWithAxes) -> DataWithAxes:
|
|
35
|
-
return self.operate(data)
|
|
36
|
-
|
|
37
|
-
@abstractmethod
|
|
38
|
-
def operate(self, sub_data: DataWithAxes):
|
|
39
|
-
pass
|
|
40
|
-
|
|
41
|
-
@staticmethod
|
|
42
|
-
def flatten_signal_dim(sub_data: DataWithAxes) -> Tuple[Tuple, np.ndarray]:
|
|
43
|
-
"""flattens data's ndarrays along the signal dimensions"""
|
|
44
|
-
data_arrays = []
|
|
45
|
-
new_shape = [sub_data.shape[ind] for ind in sub_data.nav_indexes]
|
|
46
|
-
new_shape.append(np.prod([sub_data.shape[ind] for ind in sub_data.sig_indexes]))
|
|
47
|
-
|
|
48
|
-
# for each data in subdata, apply the function, here argmax, along the flattened dimension. Then unravel the
|
|
49
|
-
# possible multiple indexes (1 for 1D, 2 for 2D)
|
|
50
|
-
for ind, data in enumerate(sub_data):
|
|
51
|
-
data_arrays.append(data.reshape(new_shape))
|
|
52
|
-
return new_shape, data_arrays
|
|
53
|
-
|
|
54
|
-
def __call__(self, **kwargs):
|
|
55
|
-
return self(**kwargs)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
class DataProcessorFactory(ObjectFactory):
|
|
59
|
-
def get(self, processor_name, **kwargs) -> DataProcessorBase:
|
|
60
|
-
return self.create(processor_name, **kwargs)
|
|
61
|
-
|
|
62
|
-
@property
|
|
63
|
-
def functions(self):
|
|
64
|
-
"""Get the list of processor functions"""
|
|
65
|
-
return self.keys_function(do_sort=False)
|
|
66
|
-
|
|
67
|
-
def functions_filtered(self, dim: DataDim):
|
|
68
|
-
"""Get the list of processor functions that could be applied to data having a given dimensionality"""
|
|
69
|
-
return [key for key in self.functions if self.get(key).apply_to >= dim]
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
@DataProcessorFactory.register('mean')
|
|
73
|
-
class MeanProcessor(DataProcessorBase):
|
|
74
|
-
apply_to = DataDim['DataND']
|
|
75
|
-
|
|
76
|
-
def operate(self, sub_data: DataWithAxes):
|
|
77
|
-
data_arrays = [np.atleast_1d(np.mean(data, axis=sub_data.sig_indexes)) for data in sub_data]
|
|
78
|
-
return sub_data.deepcopy_with_new_data(data_arrays, sub_data.sig_indexes)
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
@DataProcessorFactory.register('std')
|
|
82
|
-
class StdProcessor(DataProcessorBase):
|
|
83
|
-
apply_to = DataDim['DataND']
|
|
84
|
-
|
|
85
|
-
def operate(self, sub_data: DataWithAxes):
|
|
86
|
-
data_arrays = [np.atleast_1d(np.std(data, axis=sub_data.sig_indexes)) for data in sub_data]
|
|
87
|
-
return sub_data.deepcopy_with_new_data(data_arrays, sub_data.sig_indexes)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
@DataProcessorFactory.register('sum')
|
|
91
|
-
class SumProcessor(DataProcessorBase):
|
|
92
|
-
apply_to = DataDim['DataND']
|
|
93
|
-
|
|
94
|
-
def operate(self, sub_data: DataWithAxes):
|
|
95
|
-
data_arrays = [np.atleast_1d(np.sum(data, axis=sub_data.sig_indexes)) for data in sub_data]
|
|
96
|
-
return sub_data.deepcopy_with_new_data(data_arrays, sub_data.sig_indexes)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
@DataProcessorFactory.register('max')
|
|
100
|
-
class MaxProcessor(DataProcessorBase):
|
|
101
|
-
apply_to = DataDim['DataND']
|
|
102
|
-
|
|
103
|
-
def operate(self, sub_data: DataWithAxes):
|
|
104
|
-
data_arrays = [np.atleast_1d(np.max(data, axis=sub_data.sig_indexes)) for data in sub_data]
|
|
105
|
-
return sub_data.deepcopy_with_new_data(data_arrays, sub_data.sig_indexes)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
@DataProcessorFactory.register('min')
|
|
109
|
-
class MinProcessor(DataProcessorBase):
|
|
110
|
-
apply_to = DataDim['DataND']
|
|
111
|
-
|
|
112
|
-
def operate(self, sub_data: DataWithAxes):
|
|
113
|
-
data_arrays = [np.atleast_1d(np.min(data, axis=sub_data.sig_indexes)) for data in sub_data]
|
|
114
|
-
return sub_data.deepcopy_with_new_data(data_arrays, sub_data.sig_indexes)
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
@DataProcessorFactory.register('argmax')
|
|
118
|
-
class ArgMaxProcessor(DataProcessorBase):
|
|
119
|
-
apply_to = DataDim['DataND']
|
|
120
|
-
|
|
121
|
-
def operate(self, sub_data: DataWithAxes):
|
|
122
|
-
"""Extract info from sub-DataWithAxes
|
|
123
|
-
|
|
124
|
-
Retrieve the signal axis values of the maximum position of the data
|
|
125
|
-
|
|
126
|
-
Notes
|
|
127
|
-
-----
|
|
128
|
-
For more complex processors, such as the argmin, argmax ... , one cannot use directly the numpy function
|
|
129
|
-
(compared to min, max, mean...). Indeed one has to first flatten the data arrays on the signal axes, then apply
|
|
130
|
-
the function on the flatten dimension, here get the indexes of the minimum along the flattened dimension (as
|
|
131
|
-
a function of the eventual navigations dimensions). From this index, on then obtain as many indexes as signal
|
|
132
|
-
dimensions (1 for 1D Signals, 2 for 2D signals). And we do this for as many data there is in sub_data.
|
|
133
|
-
"""
|
|
134
|
-
new_data_arrays = []
|
|
135
|
-
new_shape, flattened_arrays = self.flatten_signal_dim(sub_data)
|
|
136
|
-
|
|
137
|
-
for dat in flattened_arrays:
|
|
138
|
-
indexes = np.unravel_index(np.nanargmax(dat, len(new_shape)-1), sub_data.shape)[len(sub_data.nav_indexes):]
|
|
139
|
-
# from the unraveled index, retrieve the corresponding axis value
|
|
140
|
-
for ind in range(len(indexes)):
|
|
141
|
-
axis_data = sub_data.get_axis_from_index(sub_data.sig_indexes[ind])[0].get_data()
|
|
142
|
-
new_data_arrays.append(np.atleast_1d(axis_data[indexes[ind]]))
|
|
143
|
-
return DataCalculated('processed_data', data=new_data_arrays, nav_indexes=sub_data.nav_indexes,
|
|
144
|
-
axes=[axis for axis in sub_data.axes if axis.index in sub_data.nav_indexes],
|
|
145
|
-
distribution=sub_data.distribution)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
@DataProcessorFactory.register('argmin')
|
|
149
|
-
class ArgMinProcessor(DataProcessorBase):
|
|
150
|
-
apply_to = DataDim['DataND']
|
|
151
|
-
|
|
152
|
-
def operate(self, sub_data: DataWithAxes):
|
|
153
|
-
"""Extract info from sub-DataWithAxes
|
|
154
|
-
|
|
155
|
-
Retrieve the signal axis values of the minimum position of the data
|
|
156
|
-
|
|
157
|
-
Notes
|
|
158
|
-
-----
|
|
159
|
-
For more complex processors, such as the argmin, argmax ... , one cannot use directly the numpy function
|
|
160
|
-
(compared to min, max, mean...). Indeed one has to first flatten the data arrays on the signal axes, then apply
|
|
161
|
-
the function on the flatten dimension, here get the indexes of the minimum along the flattened dimension (as
|
|
162
|
-
a function of the eventual navigations dimensions). From this index, on then obtain as many indexes as signal
|
|
163
|
-
dimensions (1 for 1D Signals, 2 for 2D signals). And we do this for as many data there is in sub_data.
|
|
164
|
-
"""
|
|
165
|
-
new_data_arrays = []
|
|
166
|
-
new_shape, flattened_arrays = self.flatten_signal_dim(sub_data)
|
|
167
|
-
|
|
168
|
-
for dat in flattened_arrays:
|
|
169
|
-
indexes = np.unravel_index(np.nanargmin(dat, len(new_shape)-1), sub_data.shape)[len(sub_data.nav_indexes):]
|
|
170
|
-
# from the unraveled index, retrieve the corresponding axis value
|
|
171
|
-
for ind in range(len(indexes)):
|
|
172
|
-
axis_data = sub_data.get_axis_from_index(sub_data.sig_indexes[ind])[0].get_data()
|
|
173
|
-
new_data_arrays.append(np.atleast_1d(axis_data[indexes[ind]]))
|
|
174
|
-
return DataCalculated('processed_data', data=new_data_arrays, nav_indexes=sub_data.nav_indexes,
|
|
175
|
-
axes=[axis for axis in sub_data.axes if axis.index in sub_data.nav_indexes],
|
|
176
|
-
distribution=sub_data.distribution)
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
@DataProcessorFactory.register('argmean')
|
|
180
|
-
class ArgMeanProcessor(DataProcessorBase):
|
|
181
|
-
apply_to = DataDim['Data1D']
|
|
182
|
-
|
|
183
|
-
def operate(self, sub_data: DataWithAxes):
|
|
184
|
-
"""Extract info from sub-DataWithAxes
|
|
185
|
-
|
|
186
|
-
Retrieve the signal mean axis values
|
|
187
|
-
|
|
188
|
-
Notes
|
|
189
|
-
-----
|
|
190
|
-
For more complex processors, such as the argmin, argmax ... , one cannot use directly the numpy function
|
|
191
|
-
(compared to min, max, mean...). Indeed one has to first flatten the data arrays on the signal axes, then apply
|
|
192
|
-
the function on the flatten dimension, here get the indexes of the minimum along the flattened dimension (as
|
|
193
|
-
a function of the eventual navigations dimensions). From this index, on then obtain as many indexes as signal
|
|
194
|
-
dimensions (1 for 1D Signals, 2 for 2D signals). And we do this for as many data there is in sub_data.
|
|
195
|
-
"""
|
|
196
|
-
new_data_arrays = []
|
|
197
|
-
new_shape, flattened_arrays = self.flatten_signal_dim(sub_data)
|
|
198
|
-
values = sub_data.get_axis_from_index(sub_data.sig_indexes[0])[0].get_data()
|
|
199
|
-
for dat in flattened_arrays:
|
|
200
|
-
weights = dat
|
|
201
|
-
new_data_arrays.append(np.atleast_1d(np.average(values, axis=len(new_shape) - 1, weights=weights)))
|
|
202
|
-
return DataCalculated('processed_data', data=new_data_arrays, nav_indexes=sub_data.nav_indexes,
|
|
203
|
-
axes=[axis for axis in sub_data.axes if axis.index in sub_data.nav_indexes])
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
@DataProcessorFactory.register('argstd')
|
|
207
|
-
class ArgStdProcessor(DataProcessorBase):
|
|
208
|
-
apply_to = DataDim['Data1D']
|
|
209
|
-
|
|
210
|
-
def operate(self, sub_data: DataWithAxes):
|
|
211
|
-
"""Extract info from sub-DataWithAxes
|
|
212
|
-
|
|
213
|
-
Retrieve the signal mean axis values
|
|
214
|
-
|
|
215
|
-
Notes
|
|
216
|
-
-----
|
|
217
|
-
For more complex processors, such as the argmin, argmax ... , one cannot use directly the numpy function
|
|
218
|
-
(compared to min, max, mean...). Indeed one has to first flatten the data arrays on the signal axes, then apply
|
|
219
|
-
the function on the flatten dimension, here get the indexes of the minimum along the flattened dimension (as
|
|
220
|
-
a function of the eventual navigations dimensions). From this index, on then obtain as many indexes as signal
|
|
221
|
-
dimensions (1 for 1D Signals, 2 for 2D signals). And we do this for as many data there is in sub_data.
|
|
222
|
-
"""
|
|
223
|
-
new_data_arrays = []
|
|
224
|
-
new_shape, flattened_arrays = self.flatten_signal_dim(sub_data)
|
|
225
|
-
values = sub_data.get_axis_from_index(sub_data.sig_indexes[0])[0].get_data()
|
|
226
|
-
for dat in flattened_arrays:
|
|
227
|
-
weights = dat
|
|
228
|
-
w_avg = np.atleast_1d(np.average(values, axis=len(new_shape) - 1, weights=weights))
|
|
229
|
-
new_data_arrays.append(np.atleast_1d(np.sqrt(
|
|
230
|
-
np.sum(weights * (values - w_avg) ** 2, axis=len(new_shape) - 1) /
|
|
231
|
-
np.sum(weights, axis=len(new_shape) - 1))))
|
|
232
|
-
return DataCalculated('processed_data', data=new_data_arrays, nav_indexes=sub_data.nav_indexes,
|
|
233
|
-
axes=[axis for axis in sub_data.axes if axis.index in sub_data.nav_indexes])
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if __name__ == '__main__':
|
|
237
|
-
import copy
|
|
238
|
-
processors = DataProcessorFactory()
|
|
239
|
-
print('Builders:\n'
|
|
240
|
-
f'{processors.builders}')
|
|
241
|
-
|
|
242
|
-
print('Math functions:\n'
|
|
243
|
-
f'{processors.functions}')
|
|
244
|
-
|
|
245
|
-
# test 2D signals
|
|
246
|
-
Nsigx = 200
|
|
247
|
-
Nsigy = 100
|
|
248
|
-
Nnav = 10
|
|
249
|
-
x = np.linspace(-Nsigx / 2, Nsigx / 2 - 1, Nsigx)
|
|
250
|
-
y = np.linspace(-Nsigy / 2, Nsigy / 2 - 1, Nsigy)
|
|
251
|
-
|
|
252
|
-
dat = np.zeros((Nnav, Nsigy, Nsigx))
|
|
253
|
-
for ind in range(Nnav):
|
|
254
|
-
dat[ind] = ind * mutils.gauss2D(x, 10 * (ind - Nnav / 2), 25 / np.sqrt(2),
|
|
255
|
-
y, 2 * (ind - Nnav / 2), 10 / np.sqrt(2))
|
|
256
|
-
|
|
257
|
-
data = DataRaw('mydata', data=[dat], nav_indexes=(0,),
|
|
258
|
-
axes=[Axis('nav', data=np.linspace(0, Nnav-1, Nnav), index=0),
|
|
259
|
-
Axis('sigy', data=y, index=1),
|
|
260
|
-
Axis('sigx', data=x, index=2)])
|
|
261
|
-
new_data = processors.get('sum', **config_processors).operate(data.isig[25:75, 75:125])
|
|
262
|
-
print(new_data)
|
|
263
|
-
print(new_data.data)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|