bec-widgets 0.53.3__py3-none-any.whl → 0.55.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.
Files changed (72) hide show
  1. CHANGELOG.md +24 -26
  2. PKG-INFO +1 -1
  3. bec_widgets/cli/client.py +265 -13
  4. bec_widgets/cli/client_utils.py +0 -3
  5. bec_widgets/cli/generate_cli.py +10 -5
  6. bec_widgets/cli/rpc_wigdet_handler.py +2 -1
  7. bec_widgets/cli/server.py +5 -7
  8. bec_widgets/examples/jupyter_console/jupyter_console_window.py +11 -5
  9. bec_widgets/examples/motor_movement/motor_control_compilations.py +17 -16
  10. bec_widgets/widgets/__init__.py +1 -10
  11. bec_widgets/widgets/figure/figure.py +40 -23
  12. bec_widgets/widgets/figure/plots/__init__.py +0 -0
  13. bec_widgets/widgets/figure/plots/image/__init__.py +0 -0
  14. bec_widgets/widgets/{plots → figure/plots/image}/image.py +6 -416
  15. bec_widgets/widgets/figure/plots/image/image_item.py +277 -0
  16. bec_widgets/widgets/figure/plots/image/image_processor.py +152 -0
  17. bec_widgets/widgets/figure/plots/motor_map/__init__.py +0 -0
  18. bec_widgets/widgets/{plots → figure/plots/motor_map}/motor_map.py +2 -2
  19. bec_widgets/widgets/figure/plots/waveform/__init__.py +0 -0
  20. bec_widgets/widgets/{plots → figure/plots/waveform}/waveform.py +9 -222
  21. bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +227 -0
  22. bec_widgets/widgets/motor_control/__init__.py +0 -7
  23. bec_widgets/widgets/motor_control/motor_control.py +2 -948
  24. bec_widgets/widgets/motor_control/motor_table/__init__.py +0 -0
  25. bec_widgets/widgets/motor_control/motor_table/motor_table.py +483 -0
  26. bec_widgets/widgets/motor_control/movement_absolute/__init__.py +0 -0
  27. bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py +157 -0
  28. bec_widgets/widgets/motor_control/movement_relative/__init__.py +0 -0
  29. bec_widgets/widgets/motor_control/movement_relative/movement_relative.py +227 -0
  30. bec_widgets/widgets/motor_control/selection/__init__.py +0 -0
  31. bec_widgets/widgets/motor_control/selection/selection.py +110 -0
  32. bec_widgets/widgets/spiral_progress_bar/__init__.py +1 -0
  33. bec_widgets/widgets/spiral_progress_bar/ring.py +184 -0
  34. bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py +594 -0
  35. {bec_widgets-0.53.3.dist-info → bec_widgets-0.55.0.dist-info}/METADATA +1 -1
  36. {bec_widgets-0.53.3.dist-info → bec_widgets-0.55.0.dist-info}/RECORD +56 -53
  37. docs/requirements.txt +1 -0
  38. pyproject.toml +1 -1
  39. tests/end-2-end/test_bec_dock_rpc_e2e.py +82 -1
  40. tests/end-2-end/test_bec_figure_rpc_e2e.py +4 -4
  41. tests/end-2-end/test_rpc_register_e2e.py +1 -1
  42. tests/unit_tests/test_bec_dock.py +1 -1
  43. tests/unit_tests/test_bec_figure.py +6 -4
  44. tests/unit_tests/test_bec_motor_map.py +2 -3
  45. tests/unit_tests/test_motor_control.py +6 -5
  46. tests/unit_tests/test_spiral_progress_bar.py +338 -0
  47. tests/unit_tests/test_waveform1d.py +13 -1
  48. bec_widgets/validation/__init__.py +0 -2
  49. bec_widgets/validation/monitor_config_validator.py +0 -258
  50. bec_widgets/widgets/monitor/__init__.py +0 -1
  51. bec_widgets/widgets/monitor/config_dialog.py +0 -574
  52. bec_widgets/widgets/monitor/config_dialog.ui +0 -210
  53. bec_widgets/widgets/monitor/example_configs/config_device.yaml +0 -60
  54. bec_widgets/widgets/monitor/example_configs/config_scans.yaml +0 -92
  55. bec_widgets/widgets/monitor/monitor.py +0 -845
  56. bec_widgets/widgets/monitor/tab_template.ui +0 -180
  57. bec_widgets/widgets/motor_map/__init__.py +0 -1
  58. bec_widgets/widgets/motor_map/motor_map.py +0 -594
  59. bec_widgets/widgets/plots/__init__.py +0 -4
  60. tests/unit_tests/test_bec_monitor.py +0 -220
  61. tests/unit_tests/test_config_dialog.py +0 -178
  62. tests/unit_tests/test_motor_map.py +0 -171
  63. tests/unit_tests/test_validator_errors.py +0 -110
  64. /bec_widgets/{cli → assets}/bec_widgets_icon.png +0 -0
  65. /bec_widgets/{examples/jupyter_console → assets}/terminal_icon.png +0 -0
  66. /bec_widgets/widgets/{plots → figure/plots}/plot_base.py +0 -0
  67. /bec_widgets/widgets/motor_control/{motor_control_table.ui → motor_table/motor_table.ui} +0 -0
  68. /bec_widgets/widgets/motor_control/{motor_control_absolute.ui → movement_absolute/movement_absolute.ui} +0 -0
  69. /bec_widgets/widgets/motor_control/{motor_control_relative.ui → movement_relative/movement_relative.ui} +0 -0
  70. /bec_widgets/widgets/motor_control/{motor_control_selection.ui → selection/selection.ui} +0 -0
  71. {bec_widgets-0.53.3.dist-info → bec_widgets-0.55.0.dist-info}/WHEEL +0 -0
  72. {bec_widgets-0.53.3.dist-info → bec_widgets-0.55.0.dist-info}/licenses/LICENSE +0 -0
@@ -2,34 +2,34 @@
2
2
  .gitlab-ci.yml,sha256=_PqbjtXpiMv7OxzoU-B47YU7majkBeE_JSKBtjGC5bQ,7431
3
3
  .pylintrc,sha256=OstrgmEyP0smNFBKoIN5_26-UmNZgMHnbjvAWX0UrLs,18535
4
4
  .readthedocs.yaml,sha256=aSOc277LqXcsTI6lgvm_JY80lMlr69GbPKgivua2cS0,603
5
- CHANGELOG.md,sha256=qUtq-o16Y6IC8yUYlEIqiZMeJDYehUd7JCJztBBpsc8,6874
5
+ CHANGELOG.md,sha256=6VjUItLDP71wv088iD7ftDTxwfGh8gisqcKBRc0LJeI,6952
6
6
  LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
7
- PKG-INFO,sha256=I3d-cI8mL5QyLsNWu5bZzLGCE1vPJjiP7KxtR5Y8Tr0,1063
7
+ PKG-INFO,sha256=8Wn70dSc1GkR9LOnN7APfZyE_6cg1AVFDdUZPibL7fA,1063
8
8
  README.md,sha256=y4jB6wvArS7N8_iTbKWnSM_oRAqLA2GqgzUR-FMh5sU,2645
9
- pyproject.toml,sha256=7BByK-lgZsjBpVi4CUWhVqYARdrkY1oUq74BIPZZ_JU,1776
9
+ pyproject.toml,sha256=A4IXZwRt1wrG3z7hug1ah7hBxr03rkJ5GKSYS9nyPBs,1776
10
10
  .git_hooks/pre-commit,sha256=n3RofIZHJl8zfJJIUomcMyYGFi_rwq4CC19z0snz3FI,286
11
11
  .gitlab/issue_templates/bug_report_template.md,sha256=gAuyEwl7XlnebBrkiJ9AqffSNOywmr8vygUFWKTuQeI,386
12
12
  .gitlab/issue_templates/documentation_update_template.md,sha256=FHLdb3TS_D9aL4CYZCjyXSulbaW5mrN2CmwTaeLPbNw,860
13
13
  .gitlab/issue_templates/feature_request_template.md,sha256=vjxCnmj53Mp4FPzCrNxhkO-8StRQUZ36PlXu4K8VGaI,1543
14
14
  .gitlab/merge_request_templates/default.md,sha256=tfyFA0hRCsIunbLGSlGbxWBQFeB3USpsA3H7IvwQ5UY,715
15
15
  bec_widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ bec_widgets/assets/bec_widgets_icon.png,sha256=K8dgGwIjalDh9PRHUsSQBqgdX7a00nM3igZdc20pkYM,1747017
17
+ bec_widgets/assets/terminal_icon.png,sha256=bJl7Tft4Fi2uxvuXI8o14uMHnI9eAWKSU2uftXCH9ws,3889
16
18
  bec_widgets/cli/__init__.py,sha256=v5oaQMydRVEaqKNI73A3_AbQ0efXxBt2SLoUBKANrV8,301
17
19
  bec_widgets/cli/auto_updates.py,sha256=ptZeBKr13o9THc8oKLn93K_16i6G3pxzw8hZ4MUgjW4,3845
18
- bec_widgets/cli/bec_widgets_icon.png,sha256=K8dgGwIjalDh9PRHUsSQBqgdX7a00nM3igZdc20pkYM,1747017
19
- bec_widgets/cli/client.py,sha256=0qM-Zve4cXKNXrSNkxvTDtiWo6NvsYZGauOwLn4Rk3w,45622
20
- bec_widgets/cli/client_utils.py,sha256=pZ_O2NbGYvreaHJEgSHsjM9Y-7Vx4rFKskaA3fYMh7U,10648
21
- bec_widgets/cli/generate_cli.py,sha256=FFDAogkEewfXMP20jkBBB08vcQdg5k1gnHpldXUcgOw,4101
20
+ bec_widgets/cli/client.py,sha256=kg4hnEM6B1-V_i8qsypjZ1r45aTJTA9hz4VfjWlbYSE,52501
21
+ bec_widgets/cli/client_utils.py,sha256=IPWfseFBYFjCmBp4LsXyNUOcV5KTTdiW1jsLvG3jF5A,10536
22
+ bec_widgets/cli/generate_cli.py,sha256=tBt-F4Xccg9Pj2zuDEGHd0Ho1fKLfCf3PuSa8KmelQk,4431
22
23
  bec_widgets/cli/rpc_register.py,sha256=QxXUZu5XNg00Yf5O3UHWOXg3-f_pzKjjoZYMOa-MOJc,2216
23
- bec_widgets/cli/rpc_wigdet_handler.py,sha256=u54ctT3-pHIf_4788didF4YBXbvNFQI1TqleSILEaZU,783
24
- bec_widgets/cli/server.py,sha256=puRWFzb2HAjeWQYgTFp2gw9RVlNZh95Dd7JUeGVf0Uk,5868
24
+ bec_widgets/cli/rpc_wigdet_handler.py,sha256=OXHoiDFJPzbQ5RO0bzIX5aUXeMMlJTwAiTmB0_7Chj4,913
25
+ bec_widgets/cli/server.py,sha256=rsj31Vsx6ayThNe4PQelQFahGjYXFZjfrNyB2fnm6Ro,5737
25
26
  bec_widgets/examples/__init__.py,sha256=WWQ0cu7m8sA4Ehy-DWdTIqSISjaHsbxhsNmNrMnhDZU,202
26
27
  bec_widgets/examples/eiger_plot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
28
  bec_widgets/examples/eiger_plot/eiger_plot.py,sha256=Uxl2Usf8jEzaX7AT8zVqa1x8ZIEgI1HmazSlb-tRFWE,10359
28
29
  bec_widgets/examples/eiger_plot/eiger_plot.ui,sha256=grHfnO3OG_lelJhdRsnA0badCvRdDunPrIMIyNQ5N-w,5809
29
30
  bec_widgets/examples/jupyter_console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- bec_widgets/examples/jupyter_console/jupyter_console_window.py,sha256=s8ysnlktLv3932ody8pRA1mghH1QQcxLjQK1HTZ59b8,5642
31
+ bec_widgets/examples/jupyter_console/jupyter_console_window.py,sha256=I1bnNtA9hJS0HRKMJJsPeBwZwmeVh66JYadhlTMzkOo,5858
31
32
  bec_widgets/examples/jupyter_console/jupyter_console_window.ui,sha256=2A2mNTUMZBYygz8K4qWzrcjnNqZBMVyeHm26iLZVRWI,1473
32
- bec_widgets/examples/jupyter_console/terminal_icon.png,sha256=bJl7Tft4Fi2uxvuXI8o14uMHnI9eAWKSU2uftXCH9ws,3889
33
33
  bec_widgets/examples/mca_readout/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
34
  bec_widgets/examples/mca_readout/mca_plot.py,sha256=vjIOcTtHIsLmHW6N-bI7RTyjeYg0r8Ob-nZvvGC0kro,5124
35
35
  bec_widgets/examples/mca_readout/mca_sim.py,sha256=IbVW10lmorsxP0Ctqe81-b_WBi96jBPgzAHCUBoPzTY,818
@@ -40,7 +40,7 @@ bec_widgets/examples/motor_movement/__init__.py,sha256=LzPJkxLAxOsZCbXR-fRCPmeYo
40
40
  bec_widgets/examples/motor_movement/config_example.yaml,sha256=YT8Bl3ViTaP03cX9X8kIgWnkoxaQOFqS-oRrclGS2hc,356
41
41
  bec_widgets/examples/motor_movement/csax_bec_config.yaml,sha256=cqhzwfIhFgHfCt90oVW3no8aVlWg7V42t4iiJCnydSw,146
42
42
  bec_widgets/examples/motor_movement/csaxs_config.yaml,sha256=poNndp-1ptdnriIJ_RTnbAimFlOJ45VdxfkclGEQlgc,344
43
- bec_widgets/examples/motor_movement/motor_control_compilations.py,sha256=gj7SRjdKXDuX4jl4e8bnpM9U6l7B1wvwgGUPcVFOGCU,8978
43
+ bec_widgets/examples/motor_movement/motor_control_compilations.py,sha256=hEkhCOjRgY1t7vZ1e_Olus2IeYDorybd8waHoVaM53Y,9303
44
44
  bec_widgets/examples/motor_movement/motor_controller.ui,sha256=83XX6NGILwntoUIghvzWnMuGf80O8khK3SduVKTAEFM,29105
45
45
  bec_widgets/examples/motor_movement/motor_example.py,sha256=P7gYgHldDR1tmAsEBePQRT7xIylsaN_jNWviwpDNek4,53350
46
46
  bec_widgets/examples/stream_plot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -61,43 +61,49 @@ bec_widgets/utils/thread_checker.py,sha256=rDNuA3X6KQyA7JPb67mccTg0z8YkInynLAENQ
61
61
  bec_widgets/utils/validator_delegate.py,sha256=Emj1WF6W8Ke1ruBWUfmHdVJpmOSPezuOt4zvQTay_44,442
62
62
  bec_widgets/utils/widget_io.py,sha256=f36198CvT_EzWQ_cg2G-4tRRsaMdJ3yVqsZWKJCQEfA,10880
63
63
  bec_widgets/utils/yaml_dialog.py,sha256=cMVif-39SB9WjwGH5FWBJcFs4tnfFJFs5cacydRyhy0,1853
64
- bec_widgets/validation/__init__.py,sha256=ismd1bU5FhFb0zFPwNKuq7oT48G4Y2GfaMZOdNKUtGk,132
65
- bec_widgets/validation/monitor_config_validator.py,sha256=LJ0kk1cT0x6rAMuEM5XnmlUb-7caP-jqn4-UXe0Jjho,8145
66
- bec_widgets/widgets/__init__.py,sha256=NOgRDV9-uwrH1OK2JdfG5c0WcW77TSRz3PeNlGw22Lc,392
64
+ bec_widgets/widgets/__init__.py,sha256=LKgIuY3CI-NHCa_bY9pThYhxLH0MHDo8iNEJDDVIVmw,172
67
65
  bec_widgets/widgets/dock/__init__.py,sha256=B7foHt02gnhM7mFksa7GJVwT7n0j_JvYDCt6wc6XR5g,61
68
66
  bec_widgets/widgets/dock/dock.py,sha256=vnOQnOWWnd-3X07kniSW_I5l0uEHZOaWhfuqZkDGIqE,8467
69
67
  bec_widgets/widgets/dock/dock_area.py,sha256=UaI5Z-c9C16lhTbXmEVzfl55Y8ymKSk4sPWGleIsUVY,7182
70
68
  bec_widgets/widgets/figure/__init__.py,sha256=3hGx_KOV7QHCYAV06aNuUgKq4QIYCjUTad-DrwkUaBM,44
71
- bec_widgets/widgets/figure/figure.py,sha256=OSF5y9iMEjhZmPC1MvjCVASfDXapf_o4jeUH3JRhAl0,28565
72
- bec_widgets/widgets/monitor/__init__.py,sha256=afXuZcBOxNAuYdCkIQXX5J60R5A3Q_86lNEW2vpFtPI,32
73
- bec_widgets/widgets/monitor/config_dialog.py,sha256=ThR1ZGnIUHqsW4t6ns9pBLTINYLBQwDtS-ipjOg4snU,19993
74
- bec_widgets/widgets/monitor/config_dialog.ui,sha256=ISMcF7CLTAMXhfZh2Yv5yezzAjMtb9fxY1pmX4B_jCg,5932
75
- bec_widgets/widgets/monitor/monitor.py,sha256=3PU0NnbnE-CjGggT7IadDfiOjXGY_85g2HSyU8BmrBM,30229
76
- bec_widgets/widgets/monitor/tab_template.ui,sha256=JVB5fkzVhTjxMn9EdZCXsnfzBkeZpFMdTRuqTNSDSSo,4904
77
- bec_widgets/widgets/monitor/example_configs/config_device.yaml,sha256=jn8EGvL_fk4gizCAA8P--OGn1RZGnz2aSlzQI9BcYlU,1172
78
- bec_widgets/widgets/monitor/example_configs/config_scans.yaml,sha256=TwMhiE_4p88gBlaeoztmkwNObAeoVXLeBFIUsV1Nwu0,1889
79
- bec_widgets/widgets/motor_control/__init__.py,sha256=_4-G9AKcEnOyS6qVE26meRw3grEohNeMzACNMU5Sig0,153
80
- bec_widgets/widgets/motor_control/motor_control.py,sha256=sfH_uGes4B3mOFPP9BYVMtqMSCFD5fWJNQwNxV06288,42458
81
- bec_widgets/widgets/motor_control/motor_control_absolute.ui,sha256=nR3p6oevAkIBTLW5wM_zYOVWsCAUgeMZdRm10Q77COE,4126
82
- bec_widgets/widgets/motor_control/motor_control_relative.ui,sha256=PulNJNiws7TRAxHM2snNyvlmQ0tRShdArHmtaC85h4U,8684
83
- bec_widgets/widgets/motor_control/motor_control_selection.ui,sha256=vXXpvNWuL6xyHhW7Lx1zmVFX-95Z5AXGlhKQD2HmM1A,1779
84
- bec_widgets/widgets/motor_control/motor_control_table.ui,sha256=t6aRKiSmutMfp0AyupavbCs0cal-FANEnlKQiPzC9PQ,2792
85
- bec_widgets/widgets/motor_map/__init__.py,sha256=K3c-3A_LbxK0UJ0_bV3opL-wGLTwBLendsJXsg8GAqE,32
86
- bec_widgets/widgets/motor_map/motor_map.py,sha256=Gd6pl5kPwWwMn_guKA6znz5Rbkw711uoAAUzmdWvi2I,21723
87
- bec_widgets/widgets/plots/__init__.py,sha256=yaCWQEXiEVj3Oh9qvD3UDzY2HE2PiDKKyKINEcVeL2k,238
88
- bec_widgets/widgets/plots/image.py,sha256=cfxdd_CQsEy-N_jgcjJICLIY4FZH9yJ7qcBsfjrqTdo,32444
89
- bec_widgets/widgets/plots/motor_map.py,sha256=CVlPG_zO1Di_v1Vs4AMxZFtlGjm_R8Lrw9cBe6bRGS4,15223
90
- bec_widgets/widgets/plots/plot_base.py,sha256=oNUXEe94bD0_fVu-HPMRaoAuwPMW0DOAN8vvOeRz254,8513
91
- bec_widgets/widgets/plots/waveform.py,sha256=MEtgEVgZrz7K5axO4nuGXU0KJPngb0bqWABhi_eRUao,28621
69
+ bec_widgets/widgets/figure/figure.py,sha256=MbnG6d738aYgNiFuOFHgyaGre0eVLA8OdSg-Xx7XIYU,29712
70
+ bec_widgets/widgets/figure/plots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ bec_widgets/widgets/figure/plots/plot_base.py,sha256=oNUXEe94bD0_fVu-HPMRaoAuwPMW0DOAN8vvOeRz254,8513
72
+ bec_widgets/widgets/figure/plots/image/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ bec_widgets/widgets/figure/plots/image/image.py,sha256=fdANm_lMzmKeddwCq3Arc1p48VakAYRlhY2q3pZspDI,19669
74
+ bec_widgets/widgets/figure/plots/image/image_item.py,sha256=1oytCY2IIgRbtS3GRrp9JV02KOif78O2-iaK0qYuHFU,9058
75
+ bec_widgets/widgets/figure/plots/image/image_processor.py,sha256=59JwHMEBjLo72fmrAB7W1PFBT2oBe16heBaZfYM6MAk,4368
76
+ bec_widgets/widgets/figure/plots/motor_map/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
77
+ bec_widgets/widgets/figure/plots/motor_map/motor_map.py,sha256=HKRbt8sD8fmzpYcEWD8-nYs1Mv7pLup1BfRAEVmKN3A,15246
78
+ bec_widgets/widgets/figure/plots/waveform/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
+ bec_widgets/widgets/figure/plots/waveform/waveform.py,sha256=k6Lh08V00N9gATppaLgaSaij4Husf8sYU_HXTvF3oB4,21664
80
+ bec_widgets/widgets/figure/plots/waveform/waveform_curve.py,sha256=9q7nJfyH8y9rWw_AIOd6tk7cbckoAGNLHv2oHEKCCyo,7229
81
+ bec_widgets/widgets/motor_control/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
+ bec_widgets/widgets/motor_control/motor_control.py,sha256=UrLCvp3J6uiVxWV2jqQbsA2nsMf9s_rrDH2KjnUm-bk,7890
83
+ bec_widgets/widgets/motor_control/motor_table/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ bec_widgets/widgets/motor_control/motor_table/motor_table.py,sha256=XSTaNfTXg6qeycxxQ0Y0SBwJLW2toRPj7cGGbkzcEB0,17387
85
+ bec_widgets/widgets/motor_control/motor_table/motor_table.ui,sha256=t6aRKiSmutMfp0AyupavbCs0cal-FANEnlKQiPzC9PQ,2792
86
+ bec_widgets/widgets/motor_control/movement_absolute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
+ bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.py,sha256=Ol50UpMvF2_MJR7wesETUG5gUkNBmqRP5qTOeA4prH8,5516
88
+ bec_widgets/widgets/motor_control/movement_absolute/movement_absolute.ui,sha256=nR3p6oevAkIBTLW5wM_zYOVWsCAUgeMZdRm10Q77COE,4126
89
+ bec_widgets/widgets/motor_control/movement_relative/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
+ bec_widgets/widgets/motor_control/movement_relative/movement_relative.py,sha256=5gqdWvDfadT_DZm6o3qYw8UgdKlcpEwKDtU7_usP3oo,8706
91
+ bec_widgets/widgets/motor_control/movement_relative/movement_relative.ui,sha256=PulNJNiws7TRAxHM2snNyvlmQ0tRShdArHmtaC85h4U,8684
92
+ bec_widgets/widgets/motor_control/selection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ bec_widgets/widgets/motor_control/selection/selection.py,sha256=WNHndvv4JvxeAMnDFBMTvUILcn9u_0mWGRsgNiBZEsM,3988
94
+ bec_widgets/widgets/motor_control/selection/selection.ui,sha256=vXXpvNWuL6xyHhW7Lx1zmVFX-95Z5AXGlhKQD2HmM1A,1779
92
95
  bec_widgets/widgets/scan_control/__init__.py,sha256=IOfHl15vxb_uC6KN62-PeUzbBha_vQyqkkXbJ2HU674,38
93
96
  bec_widgets/widgets/scan_control/scan_control.py,sha256=B5n2U2iVtTCY3Tx93JyBqzGCDCmWhWwAOhbPelLI-bs,17168
97
+ bec_widgets/widgets/spiral_progress_bar/__init__.py,sha256=4efbtcqCToMIw5bkQrTzy2TzuBCXvlhuUPh1bYC_Yzg,51
98
+ bec_widgets/widgets/spiral_progress_bar/ring.py,sha256=ILAAYEubRcEGyOvwAPpIlccPfi08sZH2giNiym4v2kw,7013
99
+ bec_widgets/widgets/spiral_progress_bar/spiral_progress_bar.py,sha256=Geev5PwJUsYgzoY0a-fx6ZmBOptKTPeJa_Mp8Ouh0fY,22563
94
100
  bec_widgets/widgets/toolbar/__init__.py,sha256=d-TP4_cr_VbpwreMM4ePnfZ5YXsEPQ45ibEf75nuGoE,36
95
101
  bec_widgets/widgets/toolbar/toolbar.py,sha256=e0zCD_0q7K4NVhrzD8001Qvfxt-VhqHTgofchS9NgCM,5125
96
102
  docs/Makefile,sha256=i2WHuFlgfyAPEW4ssEP8NY4cOibDJrVjvzSEU8_Ggwc,634
97
103
  docs/conf.py,sha256=pASMheaNEMnHl91PHQWUW0uu3OqXByYnDeSrlrVAUeI,2474
98
104
  docs/index.md,sha256=6HrqaPXb5uUPEtM2gZaVUi1wM1kUYmdC2aIFpmItzZ0,453
99
105
  docs/make.bat,sha256=vKazJE8RW49Cy8K7hm8QYbletvAd8YkeKsaPA_dWnXs,800
100
- docs/requirements.txt,sha256=5IJN7-VApjTeFouHsaWAb5b4p6wS6wI9fKcJBxcX9QY,134
106
+ docs/requirements.txt,sha256=SbcWrLYX6tEZNMCUETgsE50Y7VioR1VX6YCeifuJWEc,140
101
107
  docs/_templates/custom-class-template.rst,sha256=HPuPaGJob2zXlWOl5FmA-hAZRbUTGQmdqo3HS1iIFog,711
102
108
  docs/_templates/custom-module-template.rst,sha256=MXYXAz06HP_mbblO--iFwL08xROmSBo7U4O-hPbMcZU,1228
103
109
  docs/developer/developer.md,sha256=xJvO-EAf-9SqDARRnqFLRd8k_o258U97V0DmvgZKMos,477
@@ -118,31 +124,28 @@ docs/user/widgets/w1D.gif,sha256=tuHbleJpl6bJFNNC2OdndF5LF7IyfvlkFCMGZajrQPs,622
118
124
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
119
125
  tests/end-2-end/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
120
126
  tests/end-2-end/conftest.py,sha256=b5Yebbj8C1-IcXq23XGbOnXF0kOZD_Po46Z-p4cBwfs,1346
121
- tests/end-2-end/test_bec_dock_rpc_e2e.py,sha256=NnvlTpyHrA8DJ0RHXtQfp4rApuszv7NXZuWrlvthkC0,4558
122
- tests/end-2-end/test_bec_figure_rpc_e2e.py,sha256=rQh9H6k-Ln4yDfCYIYv2DW-l70PXY_MjzshmZdirBgQ,5471
123
- tests/end-2-end/test_rpc_register_e2e.py,sha256=Jrv46F-fyJa0tls1KPTeIxXQ4oUNgWkhAMwzvMQBRR8,1581
127
+ tests/end-2-end/test_bec_dock_rpc_e2e.py,sha256=q-cbAB13Dv3lvJNYpPNdo2j-2meDzu_3SJGFEE6ENeg,7577
128
+ tests/end-2-end/test_bec_figure_rpc_e2e.py,sha256=X8lQLx2NsB6-nU61IhVtAw1-pJ4A2qFgx5PxOWC0V7Q,5527
129
+ tests/end-2-end/test_rpc_register_e2e.py,sha256=M7sSq3us2yQIW5tAIFOFfBULatZTQNLdt0frh1bINts,1595
124
130
  tests/unit_tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
131
  tests/unit_tests/client_mocks.py,sha256=ErrklY7446jXE2_XGKebs_a-2Pqif5ECOPvxVAKRZXY,4170
126
132
  tests/unit_tests/conftest.py,sha256=KrnktXPWmZhnKNue-xGWOLD1XGEvdz9Vf7V2eO3XQ3A,596
127
133
  tests/unit_tests/test_bec_connector.py,sha256=f2XXGGw3NoZLIUrDuZuEWwF_ttOYmmquCgUrV5XkIOY,1951
128
134
  tests/unit_tests/test_bec_dispatcher.py,sha256=rYPiRizHaswhGZw55IBMneDFxmPiCCLAZQBqjEkpdyY,3992
129
- tests/unit_tests/test_bec_dock.py,sha256=ZnHUoVQCGbikd0mM64XBL_k0Kxp0d3UqCHpcyY59emg,3596
130
- tests/unit_tests/test_bec_figure.py,sha256=1nRSX2lJE_wv_R4WteECBxD0NwpQT8NaZH5q66gT-jo,7829
131
- tests/unit_tests/test_bec_monitor.py,sha256=mN7gBY7oXY6j65zzihpy8r-FvwVoCQlie3F6SoVq0mo,7042
132
- tests/unit_tests/test_bec_motor_map.py,sha256=oAhnahV9UcPknsCgoP_TwTIlagKola2HFajmtkxzSyo,4588
135
+ tests/unit_tests/test_bec_dock.py,sha256=gvtNkkCPrDFY_1qZ53ZXChdgmQFSwwQrr1VeZC5ybKc,3610
136
+ tests/unit_tests/test_bec_figure.py,sha256=xYAftY8bI_EH-SlNPD0Tjd7FS_47ouZ1E4hrpjPt7O4,8002
137
+ tests/unit_tests/test_bec_motor_map.py,sha256=AfD_9-x6VV3TPnkQgNfFYRndPHDsGx-a_YknFeDr6hc,4588
133
138
  tests/unit_tests/test_client_utils.py,sha256=fIApd5WgnJuyIzV-hdSABn6T-aOel2Wr2xuUX4Z651A,774
134
- tests/unit_tests/test_config_dialog.py,sha256=Y8I9zGG8G9jh0MRCsNl5dQT17bZL6BWaDja7fW1ncCs,6924
135
139
  tests/unit_tests/test_crosshair.py,sha256=d7fX-ymboZPALNqqiAj86PZ96llmGZ_3jf0yjVP0S94,5039
136
140
  tests/unit_tests/test_eiger_plot.py,sha256=bWnKBQid0YcLMQeBLy6ojb4ZpwTG-rFVT0kMg9Y08p8,4427
137
141
  tests/unit_tests/test_generate_cli_client.py,sha256=J7CFoO67txGu_u1Mwk32EejRX204FRuvmVg_yhAr1WM,2397
138
- tests/unit_tests/test_motor_control.py,sha256=210qBSZdg4hSDflgwez-pWsoU4m3W8hmGCJEdCeu6MA,20321
139
- tests/unit_tests/test_motor_map.py,sha256=aKhJtgHOLMOlpniguuH5iGKh72ihYZ1L2S2KEmZUC0k,5875
142
+ tests/unit_tests/test_motor_control.py,sha256=ksjzcml9hAr-mMxL4NVAeEYGBaSDvE2pR_n3Rvz8fEQ,20579
140
143
  tests/unit_tests/test_plot_base.py,sha256=bOdlgAxh9oKk5PwiQ_MSFmzr44uJ61Tlg242RCIhl5c,2610
141
144
  tests/unit_tests/test_rpc_register.py,sha256=hECjZEimd440mwRrO0rg7L3PKN7__3DgjmESN6wx3bo,1179
142
145
  tests/unit_tests/test_scan_control.py,sha256=7dtGpE0g4FqUhhQeCkyJl-9o7NH3DFZJgEaqDmBYbBc,7551
146
+ tests/unit_tests/test_spiral_progress_bar.py,sha256=NY-zFt_fQ-_4_J2Paql8VdqJ-mozOFYZrZ-Y3iKNYcA,12383
143
147
  tests/unit_tests/test_stream_plot.py,sha256=gMd-ga72OCGzE09vRuoLDH8dqeEJOnrvK-4Lu-TG5RY,5760
144
- tests/unit_tests/test_validator_errors.py,sha256=NFxyv0TIOXeZKZRRUBfVQ7bpunwY4KkG95yTUdQmvns,3532
145
- tests/unit_tests/test_waveform1d.py,sha256=cBtESTQgsVQdv-Wl75eHK9D8YY-b60Z5wqtPCo9ohu0,15002
148
+ tests/unit_tests/test_waveform1d.py,sha256=Xi9TdZmxoMmmje37lq03FG9lytEdZCTUEjtOC0LvZjA,15263
146
149
  tests/unit_tests/test_widget_io.py,sha256=FeL3ZYSBQnRt6jxj8VGYw1cmcicRQyHKleahw7XIyR0,3475
147
150
  tests/unit_tests/test_yaml_dialog.py,sha256=HNrqferkdg02-9ieOhhI2mr2Qvt7GrYgXmQ061YCTbg,5794
148
151
  tests/unit_tests/test_configs/config_device.yaml,sha256=h3zNb5ZaT_sA59Sf-24qsXs54MgUsspo-GOJmKWHx3o,695
@@ -150,7 +153,7 @@ tests/unit_tests/test_configs/config_device_no_entry.yaml,sha256=hdvue9KLc_kfNzG
150
153
  tests/unit_tests/test_configs/config_scan.yaml,sha256=vo484BbWOjA_e-h6bTjSV9k7QaQHrlAvx-z8wtY-P4E,1915
151
154
  tests/unit_tests/test_msgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
155
  tests/unit_tests/test_msgs/available_scans_message.py,sha256=m_z97hIrjHXXMa2Ex-UvsPmTxOYXfjxyJaGkIY6StTY,46532
153
- bec_widgets-0.53.3.dist-info/METADATA,sha256=I3d-cI8mL5QyLsNWu5bZzLGCE1vPJjiP7KxtR5Y8Tr0,1063
154
- bec_widgets-0.53.3.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
155
- bec_widgets-0.53.3.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
156
- bec_widgets-0.53.3.dist-info/RECORD,,
156
+ bec_widgets-0.55.0.dist-info/METADATA,sha256=8Wn70dSc1GkR9LOnN7APfZyE_6cg1AVFDdUZPibL7fA,1063
157
+ bec_widgets-0.55.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
158
+ bec_widgets-0.55.0.dist-info/licenses/LICENSE,sha256=YRKe85CBRyP7UpEAWwU8_qSIyuy5-l_9C-HKg5Qm8MQ,1511
159
+ bec_widgets-0.55.0.dist-info/RECORD,,
docs/requirements.txt CHANGED
@@ -6,5 +6,6 @@ pydata-sphinx-theme
6
6
  sphinx-copybutton
7
7
  myst-parser
8
8
  sphinx-design
9
+ PyQt6
9
10
  bec-widgets
10
11
  tomli
pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_widgets"
7
- version = "0.53.3"
7
+ version = "0.55.0"
8
8
  description = "BEC Widgets"
9
9
  requires-python = ">=3.10"
10
10
  classifiers = [
@@ -3,6 +3,7 @@ import pytest
3
3
  from bec_lib.endpoints import MessageEndpoints
4
4
 
5
5
  from bec_widgets.cli.client import BECDockArea, BECFigure, BECImageShow, BECMotorMap, BECWaveform
6
+ from bec_widgets.utils import Colors
6
7
 
7
8
 
8
9
  def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
@@ -38,7 +39,7 @@ def test_rpc_add_dock_with_figure_e2e(rpc_server_dock, qtbot):
38
39
  assert fig2.__class__ == BECFigure
39
40
 
40
41
  mm = fig0.motor_map("samx", "samy")
41
- plt = fig1.plot("samx", "bpm4i")
42
+ plt = fig1.plot(x_name="samx", y_name="bpm4i")
42
43
  im = fig2.image("eiger")
43
44
 
44
45
  assert mm.__class__.__name__ == "BECMotorMap"
@@ -143,3 +144,83 @@ def test_dock_manipulations_e2e(rpc_server_dock, qtbot):
143
144
 
144
145
  assert len(dock_server.docks) == 0
145
146
  assert len(dock_server.tempAreas) == 0
147
+
148
+
149
+ def test_spiral_bar(rpc_server_dock):
150
+ dock = BECDockArea(rpc_server_dock.gui_id)
151
+ dock_server = rpc_server_dock.gui
152
+
153
+ d0 = dock.add_dock("dock_0")
154
+
155
+ bar = d0.add_widget_bec("SpiralProgressBar")
156
+ assert bar.__class__.__name__ == "SpiralProgressBar"
157
+
158
+ bar.set_number_of_bars(5)
159
+ bar.set_colors_from_map("viridis")
160
+ bar.set_value([10, 20, 30, 40, 50])
161
+
162
+ bar_server = dock_server.docks["dock_0"].widgets[0]
163
+
164
+ expected_colors = Colors.golden_angle_color("viridis", 5, "RGB")
165
+ bar_colors = [ring.color.getRgb() for ring in bar_server.rings]
166
+ bar_values = [ring.value for ring in bar_server.rings]
167
+ assert bar_values == [10, 20, 30, 40, 50]
168
+ assert bar_colors == expected_colors
169
+
170
+
171
+ def test_spiral_bar_scan_update(rpc_server_dock, qtbot):
172
+ dock = BECDockArea(rpc_server_dock.gui_id)
173
+ dock_server = rpc_server_dock.gui
174
+
175
+ d0 = dock.add_dock("dock_0")
176
+
177
+ d0.add_widget_bec("SpiralProgressBar")
178
+
179
+ client = rpc_server_dock.client
180
+ dev = client.device_manager.devices
181
+ scans = client.scans
182
+
183
+ status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
184
+
185
+ while not status.status == "COMPLETED":
186
+ qtbot.wait(200)
187
+
188
+ qtbot.wait(200)
189
+ bar_server = dock_server.docks["dock_0"].widgets[0]
190
+ assert bar_server.config.num_bars == 1
191
+ np.testing.assert_allclose(bar_server.rings[0].value, 10, atol=0.1)
192
+ np.testing.assert_allclose(bar_server.rings[0].config.min_value, 0, atol=0.1)
193
+ np.testing.assert_allclose(bar_server.rings[0].config.max_value, 10, atol=0.1)
194
+
195
+ status = scans.grid_scan(dev.samx, -5, 5, 4, dev.samy, -10, 10, 4, relative=True, exp_time=0.1)
196
+
197
+ while not status.status == "COMPLETED":
198
+ qtbot.wait(200)
199
+
200
+ qtbot.wait(200)
201
+ assert bar_server.config.num_bars == 1
202
+ np.testing.assert_allclose(bar_server.rings[0].value, 16, atol=0.1)
203
+ np.testing.assert_allclose(bar_server.rings[0].config.min_value, 0, atol=0.1)
204
+ np.testing.assert_allclose(bar_server.rings[0].config.max_value, 16, atol=0.1)
205
+
206
+ init_samx = dev.samx.read()["samx"]["value"]
207
+ init_samy = dev.samy.read()["samy"]["value"]
208
+ final_samx = init_samx + 5
209
+ final_samy = init_samy + 10
210
+
211
+ dev.samx.velocity.put(5)
212
+ dev.samy.velocity.put(5)
213
+
214
+ status = scans.umv(dev.samx, 5, dev.samy, 10, relative=True)
215
+
216
+ while not status.status == "COMPLETED":
217
+ qtbot.wait(200)
218
+
219
+ qtbot.wait(200)
220
+ assert bar_server.config.num_bars == 2
221
+ np.testing.assert_allclose(bar_server.rings[0].value, final_samx, atol=0.1)
222
+ np.testing.assert_allclose(bar_server.rings[1].value, final_samy, atol=0.1)
223
+ np.testing.assert_allclose(bar_server.rings[0].config.min_value, init_samx, atol=0.1)
224
+ np.testing.assert_allclose(bar_server.rings[1].config.min_value, init_samy, atol=0.1)
225
+ np.testing.assert_allclose(bar_server.rings[0].config.max_value, final_samx, atol=0.1)
226
+ np.testing.assert_allclose(bar_server.rings[1].config.max_value, final_samy, atol=0.1)
@@ -23,7 +23,7 @@ def test_rpc_plotting_shortcuts_init_configs(rpc_server_figure, qtbot):
23
23
  fig = BECFigure(rpc_server_figure.gui_id)
24
24
  fig_server = rpc_server_figure.gui
25
25
 
26
- plt = fig.plot("samx", "bpm4i")
26
+ plt = fig.plot(x_name="samx", y_name="bpm4i")
27
27
  im = fig.image("eiger")
28
28
  motor_map = fig.motor_map("samx", "samy")
29
29
  plt_z = fig.add_plot("samx", "samy", "bpm4i")
@@ -79,9 +79,9 @@ def test_rpc_waveform_scan(rpc_server_figure, qtbot):
79
79
  fig = BECFigure(rpc_server_figure.gui_id)
80
80
 
81
81
  # add 3 different curves to track
82
- plt = fig.plot("samx", "bpm4i")
83
- fig.plot("samx", "bpm3a")
84
- fig.plot("samx", "bpm4d")
82
+ plt = fig.plot(x_name="samx", y_name="bpm4i")
83
+ fig.plot(x_name="samx", y_name="bpm3a")
84
+ fig.plot(x_name="samx", y_name="bpm4d")
85
85
 
86
86
  client = rpc_server_figure.client
87
87
  dev = client.device_manager.devices
@@ -22,7 +22,7 @@ def test_rpc_register_list_connections(rpc_server_figure, rpc_register, qtbot):
22
22
  fig = BECFigure(rpc_server_figure.gui_id)
23
23
  fig_server = rpc_server_figure.gui
24
24
 
25
- plt = fig.plot("samx", "bpm4i")
25
+ plt = fig.plot(x_name="samx", y_name="bpm4i")
26
26
  im = fig.image("eiger")
27
27
  motor_map = fig.motor_map("samx", "samy")
28
28
  plt_z = fig.add_plot("samx", "samy", "bpm4i")
@@ -59,7 +59,7 @@ def test_bec_dock_area_add_remove_dock(bec_dock_area, qtbot):
59
59
  def test_add_remove_bec_figure_to_dock(bec_dock_area):
60
60
  d0 = bec_dock_area.add_dock()
61
61
  fig = d0.add_widget_bec("BECFigure")
62
- plt = fig.plot("samx", "bpm4i")
62
+ plt = fig.plot(x_name="samx", y_name="bpm4i")
63
63
  im = fig.image("eiger")
64
64
  mm = fig.motor_map("samx", "samy")
65
65
 
@@ -3,8 +3,10 @@
3
3
  import numpy as np
4
4
  import pytest
5
5
 
6
- from bec_widgets.widgets import BECFigure, BECMotorMap, BECWaveform
7
- from bec_widgets.widgets.plots import BECImageShow
6
+ from bec_widgets.widgets import BECFigure
7
+ from bec_widgets.widgets.figure.plots.image.image import BECImageShow
8
+ from bec_widgets.widgets.figure.plots.motor_map.motor_map import BECMotorMap
9
+ from bec_widgets.widgets.figure.plots.waveform.waveform import BECWaveform
8
10
 
9
11
  from .client_mocks import mocked_client
10
12
 
@@ -63,7 +65,7 @@ def test_bec_figure_add_remove_plot(bec_figure):
63
65
 
64
66
 
65
67
  def test_add_different_types_of_widgets(bec_figure):
66
- plt = bec_figure.plot("samx", "bpm4i")
68
+ plt = bec_figure.plot(x_name="samx", y_name="bpm4i")
67
69
  im = bec_figure.image("eiger")
68
70
  motor_map = bec_figure.motor_map("samx", "samy")
69
71
 
@@ -226,7 +228,7 @@ def test_clear_all(bec_figure):
226
228
 
227
229
 
228
230
  def test_shortcuts(bec_figure):
229
- plt = bec_figure.plot("samx", "bpm4i")
231
+ plt = bec_figure.plot(x_name="samx", y_name="bpm4i")
230
232
  im = bec_figure.image("eiger")
231
233
  motor_map = bec_figure.motor_map("samx", "samy")
232
234
 
@@ -1,8 +1,7 @@
1
1
  import pytest
2
2
 
3
- from bec_widgets.widgets import BECMotorMap
4
- from bec_widgets.widgets.plots.motor_map import MotorMapConfig
5
- from bec_widgets.widgets.plots.waveform import Signal, SignalData
3
+ from bec_widgets.widgets.figure.plots.motor_map.motor_map import BECMotorMap, MotorMapConfig
4
+ from bec_widgets.widgets.figure.plots.waveform.waveform_curve import SignalData
6
5
 
7
6
  from .client_mocks import mocked_client
8
7
 
@@ -11,14 +11,15 @@ from bec_widgets.examples import (
11
11
  MotorControlPanelAbsolute,
12
12
  MotorControlPanelRelative,
13
13
  )
14
- from bec_widgets.widgets import (
14
+ from bec_widgets.widgets.motor_control.motor_control import MotorActions, MotorThread
15
+ from bec_widgets.widgets.motor_control.motor_table.motor_table import MotorCoordinateTable
16
+ from bec_widgets.widgets.motor_control.movement_absolute.movement_absolute import (
15
17
  MotorControlAbsolute,
18
+ )
19
+ from bec_widgets.widgets.motor_control.movement_relative.movement_relative import (
16
20
  MotorControlRelative,
17
- MotorControlSelection,
18
- MotorCoordinateTable,
19
- MotorThread,
20
21
  )
21
- from bec_widgets.widgets.motor_control.motor_control import MotorActions
22
+ from bec_widgets.widgets.motor_control.selection.selection import MotorControlSelection
22
23
 
23
24
  from .client_mocks import mocked_client
24
25