pymodaq 4.2.4__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.

Files changed (399) hide show
  1. pymodaq/__init__.py +30 -23
  2. pymodaq/control_modules/daq_move.py +27 -14
  3. pymodaq/control_modules/daq_move_ui.py +28 -12
  4. pymodaq/control_modules/daq_viewer.py +38 -28
  5. pymodaq/control_modules/daq_viewer_ui.py +6 -6
  6. pymodaq/control_modules/mocks.py +1 -1
  7. pymodaq/control_modules/move_utility_classes.py +19 -10
  8. pymodaq/control_modules/utils.py +18 -12
  9. pymodaq/control_modules/viewer_utility_classes.py +13 -4
  10. pymodaq/dashboard.py +164 -115
  11. pymodaq/examples/custom_app.py +13 -16
  12. pymodaq/examples/custom_viewer.py +6 -6
  13. pymodaq/examples/function_plotter.py +13 -12
  14. pymodaq/examples/parameter_ex.py +50 -25
  15. pymodaq/examples/tcp_client.py +1 -1
  16. pymodaq/extensions/__init__.py +1 -1
  17. pymodaq/extensions/bayesian/bayesian_optimisation.py +15 -12
  18. pymodaq/extensions/bayesian/utils.py +10 -10
  19. pymodaq/extensions/console.py +10 -13
  20. pymodaq/extensions/{daq_logger.py → daq_logger/daq_logger.py} +36 -56
  21. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger.py +16 -15
  22. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger_models.py +2 -0
  23. pymodaq/{utils/h5modules → extensions/daq_logger}/h5logging.py +7 -8
  24. pymodaq/extensions/daq_scan.py +153 -247
  25. pymodaq/extensions/daq_scan_ui.py +11 -9
  26. pymodaq/extensions/h5browser.py +8 -8
  27. pymodaq/extensions/pid/__init__.py +6 -3
  28. pymodaq/extensions/pid/daq_move_PID.py +4 -2
  29. pymodaq/extensions/pid/pid_controller.py +15 -12
  30. pymodaq/extensions/pid/utils.py +10 -5
  31. pymodaq/extensions/utils.py +5 -3
  32. pymodaq/post_treatment/load_and_plot.py +10 -7
  33. pymodaq/resources/preset_default.xml +1 -1
  34. pymodaq/utils/array_manipulation.py +4 -384
  35. pymodaq/utils/calibration_camera.py +12 -9
  36. pymodaq/utils/chrono_timer.py +7 -5
  37. pymodaq/utils/config.py +3 -450
  38. pymodaq/utils/daq_utils.py +6 -708
  39. pymodaq/utils/data.py +9 -2774
  40. pymodaq/utils/exceptions.py +0 -4
  41. pymodaq/utils/gui_utils/__init__.py +8 -8
  42. pymodaq/utils/gui_utils/loader_utils.py +38 -0
  43. pymodaq/utils/gui_utils/utils.py +6 -138
  44. pymodaq/utils/h5modules/__init__.py +0 -4
  45. pymodaq/utils/h5modules/module_saving.py +15 -8
  46. pymodaq/utils/leco/__init__.py +2 -2
  47. pymodaq/utils/leco/daq_move_LECODirector.py +2 -2
  48. pymodaq/utils/leco/daq_xDviewer_LECODirector.py +2 -2
  49. pymodaq/utils/leco/director_utils.py +2 -2
  50. pymodaq/utils/leco/leco_director.py +3 -3
  51. pymodaq/utils/leco/pymodaq_listener.py +2 -2
  52. pymodaq/utils/leco/utils.py +1 -1
  53. pymodaq/utils/logger.py +4 -76
  54. pymodaq/utils/managers/batchscan_manager.py +16 -19
  55. pymodaq/utils/managers/modules_manager.py +10 -7
  56. pymodaq/utils/managers/overshoot_manager.py +3 -5
  57. pymodaq/utils/managers/preset_manager.py +37 -15
  58. pymodaq/utils/managers/preset_manager_utils.py +11 -9
  59. pymodaq/utils/managers/remote_manager.py +12 -10
  60. pymodaq/utils/math_utils.py +4 -572
  61. pymodaq/utils/parameter/__init__.py +4 -11
  62. pymodaq/utils/parameter/utils.py +4 -299
  63. pymodaq/utils/scanner/scan_config.py +1 -1
  64. pymodaq/utils/scanner/scan_factory.py +16 -12
  65. pymodaq/utils/{plotting → scanner}/scan_selector.py +19 -20
  66. pymodaq/utils/scanner/scanner.py +10 -8
  67. pymodaq/utils/scanner/scanners/_1d_scanners.py +8 -5
  68. pymodaq/utils/scanner/scanners/_2d_scanners.py +5 -5
  69. pymodaq/utils/scanner/scanners/sequential.py +8 -8
  70. pymodaq/utils/scanner/scanners/tabular.py +9 -9
  71. pymodaq/utils/scanner/utils.py +6 -4
  72. pymodaq/utils/svg/svg_viewer2D.py +3 -4
  73. pymodaq/utils/tcp_ip/serializer.py +64 -16
  74. pymodaq/utils/tcp_ip/tcp_server_client.py +10 -8
  75. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/METADATA +5 -3
  76. pymodaq-5.0.0.dist-info/RECORD +123 -0
  77. pymodaq/post_treatment/process_to_scalar.py +0 -263
  78. pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  79. pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  80. pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  81. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  82. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  83. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  84. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  85. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  86. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  87. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  88. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  89. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  90. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  91. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  92. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  93. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  94. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  95. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  96. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  97. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  98. pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  99. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  100. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  101. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  102. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  103. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  104. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  105. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  106. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  107. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  108. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  109. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  110. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  111. pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  112. pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  113. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  114. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  115. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  116. pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  117. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  118. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  119. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  120. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  121. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  122. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  123. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  124. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  125. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  126. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  127. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  128. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  129. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  130. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  131. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  132. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  133. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  134. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  135. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  136. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  137. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  138. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  139. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  140. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  141. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  142. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  143. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  144. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  145. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  146. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  147. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  148. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  149. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  150. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  151. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  152. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  153. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  154. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  155. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  156. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  157. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  158. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  159. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  160. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  161. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  162. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  163. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  164. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  165. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  166. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  167. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  168. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  169. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  170. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  171. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  172. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  173. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  174. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  175. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  176. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  177. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  178. pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  179. pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  180. pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  181. pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  182. pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  183. pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  184. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  185. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  186. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  187. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  188. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  189. pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  190. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  191. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  192. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  193. pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  194. pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  195. pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  196. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  197. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  198. pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  199. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  200. pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  201. pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  202. pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  203. pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  204. pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  205. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  206. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  207. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  208. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  209. pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  210. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  211. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  212. pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  213. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  214. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  215. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  216. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  217. pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  218. pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  219. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  220. pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  221. pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  222. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  223. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  224. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  225. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  226. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  227. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  228. pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  229. pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  230. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  231. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  232. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  233. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  234. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  235. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  236. pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  237. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  238. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  239. pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  240. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  241. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
  242. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  243. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  244. pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  245. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  246. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  247. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  248. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  249. pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  250. pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  251. pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  252. pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  253. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  254. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  255. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  256. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  257. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  258. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  259. pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  260. pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  261. pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  262. pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  263. pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  264. pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  265. pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  266. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  267. pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  268. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  269. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  270. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  271. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  272. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
  273. pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  274. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  275. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  276. pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  277. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  278. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  279. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  280. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  281. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  282. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  283. pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  284. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
  285. pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  286. pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  287. pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  288. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  289. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  290. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  291. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  292. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  293. pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  294. pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  295. pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
  296. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  297. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  298. pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  299. pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  300. pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  301. pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  302. pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  303. pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  304. pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  305. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  306. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  307. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  308. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -2
  309. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -234
  310. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -127150
  311. pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -142
  312. pymodaq/resources/VERSION +0 -1
  313. pymodaq/resources/config_template.toml +0 -94
  314. pymodaq/resources/triangulation_data.npy +0 -0
  315. pymodaq/utils/abstract/__init__.py +0 -48
  316. pymodaq/utils/db/__init__.py +0 -0
  317. pymodaq/utils/db/db_logger/__init__.py +0 -0
  318. pymodaq/utils/enums.py +0 -76
  319. pymodaq/utils/factory.py +0 -82
  320. pymodaq/utils/gui_utils/custom_app.py +0 -133
  321. pymodaq/utils/gui_utils/dock.py +0 -107
  322. pymodaq/utils/gui_utils/file_io.py +0 -93
  323. pymodaq/utils/gui_utils/layout.py +0 -34
  324. pymodaq/utils/gui_utils/list_picker.py +0 -38
  325. pymodaq/utils/gui_utils/widgets/__init__.py +0 -5
  326. pymodaq/utils/gui_utils/widgets/label.py +0 -24
  327. pymodaq/utils/gui_utils/widgets/lcd.py +0 -111
  328. pymodaq/utils/gui_utils/widgets/push.py +0 -149
  329. pymodaq/utils/gui_utils/widgets/qled.py +0 -62
  330. pymodaq/utils/gui_utils/widgets/spinbox.py +0 -24
  331. pymodaq/utils/gui_utils/widgets/table.py +0 -263
  332. pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -188
  333. pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -102
  334. pymodaq/utils/h5modules/backends.py +0 -1022
  335. pymodaq/utils/h5modules/browsing.py +0 -625
  336. pymodaq/utils/h5modules/data_saving.py +0 -1105
  337. pymodaq/utils/h5modules/exporter.py +0 -119
  338. pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  339. pymodaq/utils/h5modules/exporters/base.py +0 -111
  340. pymodaq/utils/h5modules/exporters/flimj.py +0 -63
  341. pymodaq/utils/h5modules/exporters/hyperspy.py +0 -143
  342. pymodaq/utils/h5modules/saving.py +0 -866
  343. pymodaq/utils/h5modules/utils.py +0 -115
  344. pymodaq/utils/managers/action_manager.py +0 -489
  345. pymodaq/utils/managers/parameter_manager.py +0 -282
  346. pymodaq/utils/managers/roi_manager.py +0 -726
  347. pymodaq/utils/messenger.py +0 -66
  348. pymodaq/utils/parameter/ioxml.py +0 -542
  349. pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -38
  350. pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -31
  351. pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -126
  352. pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -143
  353. pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -265
  354. pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -44
  355. pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -150
  356. pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -18
  357. pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -175
  358. pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -145
  359. pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -135
  360. pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -149
  361. pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -142
  362. pymodaq/utils/plotting/__init__.py +0 -0
  363. pymodaq/utils/plotting/data_viewers/__init__.py +0 -10
  364. pymodaq/utils/plotting/data_viewers/base.py +0 -286
  365. pymodaq/utils/plotting/data_viewers/viewer.py +0 -274
  366. pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -298
  367. pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -826
  368. pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -231
  369. pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -1118
  370. pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -146
  371. pymodaq/utils/plotting/data_viewers/viewerND.py +0 -800
  372. pymodaq/utils/plotting/gant_chart.py +0 -123
  373. pymodaq/utils/plotting/image_viewer.py +0 -97
  374. pymodaq/utils/plotting/items/__init__.py +0 -0
  375. pymodaq/utils/plotting/items/axis_scaled.py +0 -93
  376. pymodaq/utils/plotting/items/crosshair.py +0 -94
  377. pymodaq/utils/plotting/items/image.py +0 -388
  378. pymodaq/utils/plotting/navigator.py +0 -353
  379. pymodaq/utils/plotting/plotter/plotter.py +0 -94
  380. pymodaq/utils/plotting/plotter/plotters/__init__.py +0 -0
  381. pymodaq/utils/plotting/plotter/plotters/matplotlib_plotters.py +0 -134
  382. pymodaq/utils/plotting/plotter/plotters/qt_plotters.py +0 -78
  383. pymodaq/utils/plotting/utils/__init__.py +0 -0
  384. pymodaq/utils/plotting/utils/axes_viewer.py +0 -88
  385. pymodaq/utils/plotting/utils/filter.py +0 -585
  386. pymodaq/utils/plotting/utils/lineout.py +0 -226
  387. pymodaq/utils/plotting/utils/plot_utils.py +0 -579
  388. pymodaq/utils/plotting/utils/signalND.py +0 -1347
  389. pymodaq/utils/plotting/widgets.py +0 -76
  390. pymodaq/utils/qvariant.py +0 -12
  391. pymodaq/utils/slicing.py +0 -63
  392. pymodaq/utils/units.py +0 -216
  393. pymodaq-4.2.4.dist-info/RECORD +0 -438
  394. /pymodaq/{post_treatment/daq_analysis → extensions/daq_logger}/__init__.py +0 -0
  395. /pymodaq/{utils/abstract/logger.py → extensions/daq_logger/abstract.py} +0 -0
  396. /pymodaq/{resources/QtDesigner_Ressources → extensions/daq_logger/db}/__init__.py +0 -0
  397. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/WHEEL +0 -0
  398. {pymodaq-4.2.4.dist-info → pymodaq-5.0.0.dist-info}/entry_points.txt +0 -0
  399. {pymodaq-4.2.4.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 pymodaq.utils import data as data_mod
14
- from pymodaq.utils.data import DataWithAxes, DataToExport, Axis, DwaType
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 convert it back
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 object_deserialization(self):
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.object_deserialization())
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
- dwa = getattr(data_mod, class_name)(self.string_deserialization(),
694
- source=self.string_deserialization(),
695
- dim=self.string_deserialization(),
696
- distribution=self.string_deserialization(),
697
- data=self.list_deserialization(),
698
- labels=self.list_deserialization(),
699
- origin=self.string_deserialization(),
700
- nav_indexes=tuple(self.list_deserialization()),
701
- axes=self.list_deserialization(),
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.object_deserialization())
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
- from pymodaq.utils.parameter import utils as putils
18
- from pymodaq.utils.parameter import ioxml
19
- from pymodaq.utils.daq_utils import getLineInfo, ThreadCommand
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 pymodaq.utils.managers.parameter_manager import ParameterManager
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: 4.2.4
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.7
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)