bec-widgets 0.99.1__py3-none-any.whl → 0.99.9__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 (250) hide show
  1. .gitlab-ci.yml +0 -1
  2. CHANGELOG.md +76 -70
  3. PKG-INFO +2 -2
  4. bec_widgets/cli/client.py +3 -3
  5. bec_widgets/qt_utils/toolbar.py +11 -5
  6. bec_widgets/utils/bec_widget.py +11 -2
  7. bec_widgets/utils/colors.py +18 -2
  8. bec_widgets/utils/plugin_templates/plugin.template +2 -2
  9. bec_widgets/widgets/bec_queue/bec_queue.py +2 -0
  10. bec_widgets/widgets/bec_queue/bec_queue_plugin.py +1 -1
  11. bec_widgets/widgets/bec_status_box/bec_status_box.py +2 -0
  12. bec_widgets/widgets/bec_status_box/bec_status_box_plugin.py +1 -1
  13. bec_widgets/widgets/color_button/color_button.py +2 -0
  14. bec_widgets/widgets/color_button/color_button_plugin.py +1 -1
  15. bec_widgets/widgets/colormap_selector/colormap_selector.py +1 -0
  16. bec_widgets/widgets/colormap_selector/colormap_selector_plugin.py +1 -1
  17. bec_widgets/widgets/dark_mode_button/dark_mode_button.py +12 -3
  18. bec_widgets/widgets/dark_mode_button/dark_mode_button_plugin.py +1 -1
  19. bec_widgets/widgets/device_browser/device_browser.py +2 -0
  20. bec_widgets/widgets/device_browser/device_browser_plugin.py +1 -1
  21. bec_widgets/widgets/device_combobox/device_combo_box_plugin.py +1 -1
  22. bec_widgets/widgets/device_combobox/device_combobox.py +2 -0
  23. bec_widgets/widgets/device_line_edit/device_line_edit.py +2 -0
  24. bec_widgets/widgets/device_line_edit/device_line_edit_plugin.py +1 -1
  25. bec_widgets/widgets/dock/dock.py +1 -0
  26. bec_widgets/widgets/dock/dock_area.py +30 -10
  27. bec_widgets/widgets/dock/dock_area_plugin.py +1 -1
  28. bec_widgets/widgets/figure/figure.py +1 -1
  29. bec_widgets/widgets/figure/plots/waveform/waveform.py +12 -7
  30. bec_widgets/widgets/figure/plots/waveform/waveform_curve.py +3 -3
  31. bec_widgets/widgets/image/bec_image_widget_plugin.py +1 -1
  32. bec_widgets/widgets/image/image_widget.py +1 -0
  33. bec_widgets/widgets/motor_map/bec_motor_map_widget_plugin.py +1 -1
  34. bec_widgets/widgets/motor_map/motor_map_widget.py +1 -0
  35. bec_widgets/widgets/position_indicator/position_indicator.py +2 -0
  36. bec_widgets/widgets/position_indicator/position_indicator_plugin.py +1 -1
  37. bec_widgets/widgets/positioner_box/positioner_box.py +1 -0
  38. bec_widgets/widgets/positioner_box/positioner_box_plugin.py +1 -1
  39. bec_widgets/widgets/positioner_box/positioner_control_line.py +2 -0
  40. bec_widgets/widgets/positioner_box/positioner_control_line_plugin.py +1 -1
  41. bec_widgets/widgets/ring_progress_bar/ring_progress_bar.py +1 -0
  42. bec_widgets/widgets/ring_progress_bar/ring_progress_bar_plugin.py +1 -1
  43. bec_widgets/widgets/scan_control/scan_control.py +2 -0
  44. bec_widgets/widgets/scan_control/scan_control_plugin.py +1 -4
  45. bec_widgets/widgets/spinner/spinner.py +2 -0
  46. bec_widgets/widgets/spinner/spinner_widget_plugin.py +1 -1
  47. bec_widgets/widgets/stop_button/stop_button.py +2 -0
  48. bec_widgets/widgets/stop_button/stop_button_plugin.py +1 -1
  49. bec_widgets/widgets/text_box/text_box.py +1 -0
  50. bec_widgets/widgets/text_box/text_box_plugin.py +1 -1
  51. bec_widgets/widgets/toggle/toggle.py +1 -0
  52. bec_widgets/widgets/toggle/toggle_switch_plugin.py +1 -1
  53. bec_widgets/widgets/vscode/vs_code_editor_plugin.py +1 -1
  54. bec_widgets/widgets/vscode/vscode.py +1 -0
  55. bec_widgets/widgets/waveform/bec_waveform_widget_plugin.py +1 -1
  56. bec_widgets/widgets/waveform/waveform_popups/curve_dialog/curve_dialog.py +14 -13
  57. bec_widgets/widgets/waveform/waveform_widget.py +3 -2
  58. bec_widgets/widgets/website/website.py +42 -10
  59. bec_widgets/widgets/website/website_widget_plugin.py +1 -1
  60. {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/METADATA +2 -2
  61. bec_widgets-0.99.9.dist-info/RECORD +231 -0
  62. pyproject.toml +7 -2
  63. bec_widgets/assets/toolbar_icons/add.svg +0 -3
  64. bec_widgets/assets/toolbar_icons/attach_all.svg +0 -3
  65. bec_widgets/assets/toolbar_icons/auto_range.svg +0 -3
  66. bec_widgets/assets/toolbar_icons/compare.svg +0 -3
  67. bec_widgets/assets/toolbar_icons/connection.svg +0 -4
  68. bec_widgets/assets/toolbar_icons/device_line_edit.svg +0 -3
  69. bec_widgets/assets/toolbar_icons/drag_pan_mode.svg +0 -3
  70. bec_widgets/assets/toolbar_icons/export.svg +0 -9
  71. bec_widgets/assets/toolbar_icons/fft.svg +0 -11
  72. bec_widgets/assets/toolbar_icons/fitting_parameters.svg +0 -3
  73. bec_widgets/assets/toolbar_icons/history.svg +0 -4
  74. bec_widgets/assets/toolbar_icons/image.svg +0 -3
  75. bec_widgets/assets/toolbar_icons/image_autorange.svg +0 -3
  76. bec_widgets/assets/toolbar_icons/import.svg +0 -9
  77. bec_widgets/assets/toolbar_icons/line_axis.svg +0 -3
  78. bec_widgets/assets/toolbar_icons/line_curve.svg +0 -3
  79. bec_widgets/assets/toolbar_icons/lock_aspect_ratio.svg +0 -3
  80. bec_widgets/assets/toolbar_icons/log_scale.png +0 -0
  81. bec_widgets/assets/toolbar_icons/motor_map.svg +0 -3
  82. bec_widgets/assets/toolbar_icons/photo_library.svg +0 -3
  83. bec_widgets/assets/toolbar_icons/positioner_box.svg +0 -3
  84. bec_widgets/assets/toolbar_icons/progress.svg +0 -3
  85. bec_widgets/assets/toolbar_icons/queue.svg +0 -3
  86. bec_widgets/assets/toolbar_icons/rectangle_mode.svg +0 -3
  87. bec_widgets/assets/toolbar_icons/remove.svg +0 -5
  88. bec_widgets/assets/toolbar_icons/reset_settings.svg +0 -3
  89. bec_widgets/assets/toolbar_icons/restore_state.svg +0 -3
  90. bec_widgets/assets/toolbar_icons/ring_progress.svg +0 -3
  91. bec_widgets/assets/toolbar_icons/rotate_left.svg +0 -3
  92. bec_widgets/assets/toolbar_icons/rotate_right.svg +0 -3
  93. bec_widgets/assets/toolbar_icons/save.svg +0 -3
  94. bec_widgets/assets/toolbar_icons/save_state.svg +0 -3
  95. bec_widgets/assets/toolbar_icons/scan_control.svg +0 -3
  96. bec_widgets/assets/toolbar_icons/settings.svg +0 -4
  97. bec_widgets/assets/toolbar_icons/status.svg +0 -3
  98. bec_widgets/assets/toolbar_icons/terminal.svg +0 -3
  99. bec_widgets/assets/toolbar_icons/transform.svg +0 -3
  100. bec_widgets/assets/toolbar_icons/waveform.svg +0 -3
  101. bec_widgets-0.99.1.dist-info/RECORD +0 -415
  102. docs/Makefile +0 -20
  103. docs/_static/custom.css +0 -170
  104. docs/_templates/custom-class-template.rst +0 -34
  105. docs/_templates/custom-module-template.rst +0 -66
  106. docs/api_reference/api_reference.md +0 -12
  107. docs/assets/apps_48dp.svg +0 -1
  108. docs/assets/display_settings_48dp.svg +0 -1
  109. docs/assets/index_api.svg +0 -97
  110. docs/assets/index_contribute.svg +0 -76
  111. docs/assets/index_getting_started.svg +0 -66
  112. docs/assets/index_user_guide.svg +0 -67
  113. docs/assets/rocket_launch_48dp.svg +0 -1
  114. docs/assets/widget_screenshots/buttons.png +0 -0
  115. docs/assets/widget_screenshots/device_box.png +0 -0
  116. docs/assets/widget_screenshots/device_browser.png +0 -0
  117. docs/assets/widget_screenshots/device_inputs.png +0 -0
  118. docs/assets/widget_screenshots/dock_area.png +0 -0
  119. docs/assets/widget_screenshots/figure.png +0 -0
  120. docs/assets/widget_screenshots/image_widget.png +0 -0
  121. docs/assets/widget_screenshots/motor_map_widget.png +0 -0
  122. docs/assets/widget_screenshots/position_indicator.png +0 -0
  123. docs/assets/widget_screenshots/queue.png +0 -0
  124. docs/assets/widget_screenshots/ring_progress_bar.png +0 -0
  125. docs/assets/widget_screenshots/scan_controller.png +0 -0
  126. docs/assets/widget_screenshots/spinner.gif +0 -0
  127. docs/assets/widget_screenshots/status_box.png +0 -0
  128. docs/assets/widget_screenshots/text_box.png +0 -0
  129. docs/assets/widget_screenshots/toggle.png +0 -0
  130. docs/assets/widget_screenshots/waveform_widget.png +0 -0
  131. docs/assets/widget_screenshots/website.png +0 -0
  132. docs/conf.py +0 -82
  133. docs/developer/developer.md +0 -52
  134. docs/developer/introduction/concepts.md +0 -14
  135. docs/developer/introduction/contributing.md +0 -28
  136. docs/developer/introduction/introduction.md +0 -16
  137. docs/developer/introduction/useful_links.md +0 -23
  138. docs/developer/widget_development/bec_dispatcher.md +0 -143
  139. docs/developer/widget_development/widget_development.md +0 -13
  140. docs/index.md +0 -74
  141. docs/introduction/introduction.md +0 -18
  142. docs/make.bat +0 -35
  143. docs/requirements.txt +0 -12
  144. docs/user/api_reference/api_reference.md +0 -11
  145. docs/user/applications/applications.md +0 -10
  146. docs/user/customisation.md +0 -123
  147. docs/user/getting_started/BECDockArea.png +0 -0
  148. docs/user/getting_started/auto_updates.md +0 -82
  149. docs/user/getting_started/getting_started.md +0 -15
  150. docs/user/getting_started/gui_complex_gui.gif +0 -0
  151. docs/user/getting_started/installation.md +0 -33
  152. docs/user/getting_started/quick_start.md +0 -110
  153. docs/user/getting_started/video_tutorials.md +0 -17
  154. docs/user/user.md +0 -71
  155. docs/user/widgets/bec_figure/BECFigure.png +0 -0
  156. docs/user/widgets/bec_figure/bec_figure.md +0 -105
  157. docs/user/widgets/bec_status_box/bec_status_box.gif +0 -0
  158. docs/user/widgets/bec_status_box/bec_status_box.md +0 -38
  159. docs/user/widgets/buttons/buttons.md +0 -63
  160. docs/user/widgets/buttons/dark_mode_disabled.png +0 -0
  161. docs/user/widgets/buttons/dark_mode_enabled.png +0 -0
  162. docs/user/widgets/device_browser/device_browser.md +0 -36
  163. docs/user/widgets/device_browser/device_browser.png +0 -0
  164. docs/user/widgets/device_input/device_input.md +0 -100
  165. docs/user/widgets/dock_area/BECDockArea.png +0 -0
  166. docs/user/widgets/dock_area/bec_dock_area.md +0 -107
  167. docs/user/widgets/image/image_plot.gif +0 -0
  168. docs/user/widgets/image/image_widget.md +0 -84
  169. docs/user/widgets/motor_map/motor.gif +0 -0
  170. docs/user/widgets/motor_map/motor_map.md +0 -80
  171. docs/user/widgets/position_indicator/position_indicator.md +0 -76
  172. docs/user/widgets/positioner_box/positioner_box.md +0 -63
  173. docs/user/widgets/progress_bar/progress_bar.gif +0 -0
  174. docs/user/widgets/progress_bar/ring_progress_bar.md +0 -103
  175. docs/user/widgets/queue/queue.md +0 -41
  176. docs/user/widgets/scan_control/hide_scan_control.png +0 -0
  177. docs/user/widgets/scan_control/scan_control.gif +0 -0
  178. docs/user/widgets/scan_control/scan_control.md +0 -54
  179. docs/user/widgets/spinner/spinner.md +0 -75
  180. docs/user/widgets/text_box/text_box.md +0 -74
  181. docs/user/widgets/toggle/toggle.md +0 -66
  182. docs/user/widgets/waveform/bec_figure_dap.gif +0 -0
  183. docs/user/widgets/waveform/scatter_2D.gif +0 -0
  184. docs/user/widgets/waveform/w1D.gif +0 -0
  185. docs/user/widgets/waveform/waveform_widget.md +0 -132
  186. docs/user/widgets/website/website.md +0 -69
  187. docs/user/widgets/widgets.md +0 -220
  188. tests/__init__.py +0 -0
  189. tests/end-2-end/__init__.py +0 -0
  190. tests/end-2-end/conftest.py +0 -53
  191. tests/end-2-end/test_bec_dock_rpc_e2e.py +0 -298
  192. tests/end-2-end/test_bec_figure_rpc_e2e.py +0 -212
  193. tests/end-2-end/test_rpc_register_e2e.py +0 -40
  194. tests/end-2-end/test_scan_control_e2e.py +0 -71
  195. tests/references/SpinnerWidget/SpinnerWidget_darwin.png +0 -0
  196. tests/references/SpinnerWidget/SpinnerWidget_linux.png +0 -0
  197. tests/references/SpinnerWidget/SpinnerWidget_started_darwin.png +0 -0
  198. tests/references/SpinnerWidget/SpinnerWidget_started_linux.png +0 -0
  199. tests/unit_tests/__init__.py +0 -0
  200. tests/unit_tests/client_mocks.py +0 -189
  201. tests/unit_tests/conftest.py +0 -64
  202. tests/unit_tests/test_bec_connector.py +0 -80
  203. tests/unit_tests/test_bec_dispatcher.py +0 -119
  204. tests/unit_tests/test_bec_dock.py +0 -155
  205. tests/unit_tests/test_bec_figure.py +0 -270
  206. tests/unit_tests/test_bec_image.py +0 -63
  207. tests/unit_tests/test_bec_image_widget.py +0 -217
  208. tests/unit_tests/test_bec_motor_map.py +0 -282
  209. tests/unit_tests/test_bec_queue.py +0 -111
  210. tests/unit_tests/test_bec_status_box.py +0 -123
  211. tests/unit_tests/test_client_utils.py +0 -76
  212. tests/unit_tests/test_color_map_selector.py +0 -42
  213. tests/unit_tests/test_color_validation.py +0 -75
  214. tests/unit_tests/test_configs/config_device.yaml +0 -33
  215. tests/unit_tests/test_configs/config_device_no_entry.yaml +0 -27
  216. tests/unit_tests/test_configs/config_scan.yaml +0 -82
  217. tests/unit_tests/test_crosshair.py +0 -143
  218. tests/unit_tests/test_dark_mode_button.py +0 -70
  219. tests/unit_tests/test_device_browser.py +0 -83
  220. tests/unit_tests/test_device_input_base.py +0 -76
  221. tests/unit_tests/test_device_input_widgets.py +0 -178
  222. tests/unit_tests/test_error_utils.py +0 -63
  223. tests/unit_tests/test_generate_cli_client.py +0 -123
  224. tests/unit_tests/test_generate_plugin.py +0 -155
  225. tests/unit_tests/test_motor_map_widget.py +0 -194
  226. tests/unit_tests/test_msgs/__init__.py +0 -0
  227. tests/unit_tests/test_msgs/available_scans_message.py +0 -989
  228. tests/unit_tests/test_plot_base.py +0 -95
  229. tests/unit_tests/test_plugin_utils.py +0 -13
  230. tests/unit_tests/test_positioner_box.py +0 -130
  231. tests/unit_tests/test_ring_progress_bar.py +0 -337
  232. tests/unit_tests/test_rpc_register.py +0 -52
  233. tests/unit_tests/test_rpc_server.py +0 -42
  234. tests/unit_tests/test_rpc_widget_handler.py +0 -7
  235. tests/unit_tests/test_scan_control.py +0 -324
  236. tests/unit_tests/test_scan_control_group_box.py +0 -160
  237. tests/unit_tests/test_setting_dialog.py +0 -96
  238. tests/unit_tests/test_spinner.py +0 -31
  239. tests/unit_tests/test_stop_button.py +0 -27
  240. tests/unit_tests/test_text_box_widget.py +0 -54
  241. tests/unit_tests/test_toggle.py +0 -38
  242. tests/unit_tests/test_vscode_widget.py +0 -75
  243. tests/unit_tests/test_waveform1d.py +0 -712
  244. tests/unit_tests/test_waveform_widget.py +0 -462
  245. tests/unit_tests/test_website_widget.py +0 -25
  246. tests/unit_tests/test_widget_io.py +0 -90
  247. tests/unit_tests/test_yaml_dialog.py +0 -163
  248. {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/WHEEL +0 -0
  249. {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/entry_points.txt +0 -0
  250. {bec_widgets-0.99.1.dist-info → bec_widgets-0.99.9.dist-info}/licenses/LICENSE +0 -0
@@ -1,220 +0,0 @@
1
- (user.widgets)=
2
- # Widgets
3
-
4
- BEC Widgets offers a range of tools designed to make data visualization in beamline experiments easier and more
5
- interactive. These widgets help users better understand their data by providing clear, intuitive displays that enhance
6
- the overall experience.
7
-
8
- ## Widget Containers
9
-
10
- Serves as containers to organise and display other widgets.
11
-
12
- ````{grid} 3
13
- :gutter: 2
14
-
15
- ```{grid-item-card} BEC Dock Area
16
- :link: user.widgets.bec_dock_area
17
- :link-type: ref
18
- :img-top: /assets/widget_screenshots/dock_area.png
19
-
20
- Quickly build dynamic GUI.
21
-
22
- ```
23
-
24
- ```{grid-item-card} BEC Figure
25
- :link: user.widgets.bec_figure
26
- :link-type: ref
27
- :img-top: /assets/widget_screenshots/figure.png
28
-
29
- Display 1D and 2D data.
30
- ```
31
- ````
32
-
33
- ## Plotting Widgets
34
-
35
- Plotting widgets are used to display data in a graphical format.
36
-
37
- ````{grid} 3
38
- :gutter: 2
39
-
40
- ```{grid-item-card} Waveform Widget
41
- :link: user.widgets.waveform_widget
42
- :link-type: ref
43
- :img-top: /assets/widget_screenshots/waveform_widget.png
44
-
45
- Display 1D detector signals.
46
- ```
47
-
48
- ```{grid-item-card} Image Widget
49
- :link: user.widgets.image_widget
50
- :link-type: ref
51
- :img-top: /assets/widget_screenshots/image_widget.png
52
-
53
- Display signal from 2D detector.
54
- ```
55
-
56
- ```{grid-item-card} Motor Map Widget
57
- :link: user.widgets.motor_map
58
- :link-type: ref
59
- :img-top: /assets/widget_screenshots/motor_map_widget.png
60
-
61
- Track position for motors.
62
- ```
63
-
64
- ````
65
-
66
- ## Device Control Widgets
67
-
68
- Control and monitor devices/scan in the BEC environment.
69
-
70
- ````{grid} 3
71
- :gutter: 2
72
-
73
- ```{grid-item-card} Scan Control Widget
74
- :link: user.widgets.scan_control
75
- :link-type: ref
76
- :img-top: /assets/widget_screenshots/scan_controller.png
77
-
78
- Launch scans.
79
- ```
80
-
81
- ```{grid-item-card} Device Browser
82
- :link: user.widgets.device_browser
83
- :link-type: ref
84
- :img-top: /assets/widget_screenshots/device_browser.png
85
-
86
- Find and drag devices.
87
- ```
88
-
89
- ```{grid-item-card} Positioner Box
90
- :link: user.widgets.positioner_box
91
- :link-type: ref
92
- :img-top: /assets/widget_screenshots/device_box.png
93
-
94
- Control individual device.
95
- ```
96
-
97
- ```{grid-item-card} Ring Progress Bar
98
- :link: user.widgets.ring_progress_bar
99
- :link-type: ref
100
- :img-top: /assets/widget_screenshots/ring_progress_bar.png
101
-
102
- Nested progress bar.
103
- ```
104
-
105
- ````
106
-
107
- ## BEC Service Widgets
108
-
109
- Visualise the status of BEC services.
110
-
111
- ````{grid} 3
112
- :gutter: 2
113
-
114
- ```{grid-item-card} BEC Status Box
115
- :link: user.widgets.bec_status_box
116
- :link-type: ref
117
- :img-top: /assets/widget_screenshots/status_box.png
118
-
119
- Display status of BEC services.
120
- ```
121
-
122
- ```{grid-item-card} BEC Queue Table
123
- :link: user.widgets.bec_queue
124
- :link-type: ref
125
- :img-top: /assets/widget_screenshots/queue.png
126
-
127
- Display current scan queue.
128
- ```
129
- ````
130
-
131
- ## BEC Utility Widgets
132
-
133
- Various utility widgets to enhance user experience.
134
-
135
- ````{grid} 3
136
- :gutter: 2
137
-
138
- ```{grid-item-card} Service Buttons
139
- :link: user.widgets.buttons
140
- :link-type: ref
141
- :img-top: /assets/widget_screenshots/buttons.png
142
-
143
- Various service buttons.
144
- ```
145
-
146
- ```{grid-item-card} Device Input Widgets
147
- :link: user.widgets.device_input
148
- :link-type: ref
149
- :img-top: /assets/widget_screenshots/device_inputs.png
150
-
151
- Choose individual device from current session.
152
- ```
153
-
154
- ```{grid-item-card} Text Box Widget
155
- :link: user.widgets.text_box
156
- :link-type: ref
157
- :img-top: /assets/widget_screenshots/text_box.png
158
-
159
- Display custom text or HTML content.
160
- ```
161
-
162
- ```{grid-item-card} Website Widget
163
- :link: user.widgets.website
164
- :link-type: ref
165
- :img-top: /assets/widget_screenshots/website.png
166
-
167
- Display website content.
168
- ```
169
-
170
- ```{grid-item-card} Toogle Widget
171
- :link: user.widgets.toggle
172
- :link-type: ref
173
- :img-top: /assets/widget_screenshots/toggle.png
174
-
175
- Angular like toggle switch.
176
- ```
177
-
178
- ```{grid-item-card} Spinner
179
- :link: user.widgets.spinner
180
- :link-type: ref
181
- :img-top: /assets/widget_screenshots/spinner.gif
182
-
183
- Display spinner widget for loading or device movement.
184
- ```
185
-
186
- ```{grid-item-card} Position Indicator
187
- :link: user.widgets.position_indicator
188
- :link-type: ref
189
- :img-top: /assets/widget_screenshots/position_indicator.png
190
-
191
- Display position of motor withing its limits.
192
- ```
193
- ````
194
-
195
- ```{toctree}
196
- ---
197
- maxdepth: 1
198
- hidden: true
199
- ---
200
-
201
- dock_area/bec_dock_area.md
202
- bec_figure/bec_figure.md
203
- waveform/waveform_widget.md
204
- image/image_widget.md
205
- motor_map/motor_map.md
206
- scan_control/scan_control.md
207
- progress_bar/ring_progress_bar.md
208
- bec_status_box/bec_status_box.md
209
- queue/queue.md
210
- buttons/buttons.md
211
- device_browser/device_browser.md
212
- positioner_box/positioner_box.md
213
- text_box/text_box.md
214
- website/website.md
215
- toggle/toggle.md
216
- spinner/spinner.md
217
- device_input/device_input.md
218
- position_indicator/position_indicator.md
219
-
220
- ```
tests/__init__.py DELETED
File without changes
File without changes
@@ -1,53 +0,0 @@
1
- import random
2
- import time
3
- from contextlib import contextmanager
4
-
5
- import pytest
6
- from bec_lib.endpoints import MessageEndpoints
7
-
8
- from bec_widgets.cli.client_utils import _start_plot_process
9
- from bec_widgets.cli.rpc_register import RPCRegister
10
- from bec_widgets.utils import BECDispatcher
11
- from bec_widgets.widgets.dock import BECDockArea
12
- from bec_widgets.widgets.figure import BECFigure
13
-
14
-
15
- # make threads check in autouse, **will be executed at the end**; better than
16
- # having it in fixtures for each test, since it prevents from needing to
17
- # 'manually' shutdown bec_client_lib (for example) to make it happy, whereas
18
- # whereas in fact bec_client_lib makes its on cleanup
19
- @pytest.fixture(autouse=True)
20
- def threads_check_fixture(threads_check):
21
- return
22
-
23
-
24
- @pytest.fixture
25
- def gui_id():
26
- return f"figure_{random.randint(0,100)}" # make a new gui id each time, to ensure no 'gui is alive' zombie key can perturbate
27
-
28
-
29
- @contextmanager
30
- def plot_server(gui_id, klass, client_lib):
31
- dispatcher = BECDispatcher(client=client_lib) # Has to init singleton with fixture client
32
- process, _ = _start_plot_process(gui_id, klass, client_lib._client._service_config.config_path)
33
- try:
34
- while client_lib._client.connector.get(MessageEndpoints.gui_heartbeat(gui_id)) is None:
35
- time.sleep(0.3)
36
- yield gui_id
37
- finally:
38
- process.terminate()
39
- process.wait()
40
- dispatcher.disconnect_all()
41
- dispatcher.reset_singleton()
42
-
43
-
44
- @pytest.fixture
45
- def rpc_server_figure(gui_id, bec_client_lib):
46
- with plot_server(gui_id, BECFigure, bec_client_lib) as server:
47
- yield server
48
-
49
-
50
- @pytest.fixture
51
- def rpc_server_dock(gui_id, bec_client_lib):
52
- with plot_server(gui_id, BECDockArea, bec_client_lib) as server:
53
- yield server
@@ -1,298 +0,0 @@
1
- import time
2
-
3
- import numpy as np
4
- import pytest
5
- from bec_lib.client import BECClient
6
- from bec_lib.endpoints import MessageEndpoints
7
-
8
- from bec_widgets.cli.auto_updates import AutoUpdates
9
- from bec_widgets.cli.client import BECDockArea, BECFigure, BECImageShow, BECMotorMap, BECWaveform
10
- from bec_widgets.utils import Colors
11
-
12
- # pylint: disable=unused-argument
13
- # pylint: disable=redefined-outer-name
14
- # pylint: disable=too-many-locals
15
-
16
-
17
- def test_rpc_add_dock_with_figure_e2e(bec_client_lib, rpc_server_dock):
18
- # BEC client shortcuts
19
- dock = BECDockArea(rpc_server_dock)
20
- client = bec_client_lib
21
- dev = client.device_manager.devices
22
- scans = client.scans
23
- queue = client.queue
24
-
25
- # Create 3 docks
26
- d0 = dock.add_dock("dock_0")
27
- d1 = dock.add_dock("dock_1")
28
- d2 = dock.add_dock("dock_2")
29
-
30
- dock_config = dock._config_dict
31
- assert len(dock_config["docks"]) == 3
32
- # Add 3 figures with some widgets
33
- fig0 = d0.add_widget("BECFigure")
34
- fig1 = d1.add_widget("BECFigure")
35
- fig2 = d2.add_widget("BECFigure")
36
-
37
- dock_config = dock._config_dict
38
- assert len(dock_config["docks"]) == 3
39
- assert len(dock_config["docks"]["dock_0"]["widgets"]) == 1
40
- assert len(dock_config["docks"]["dock_1"]["widgets"]) == 1
41
- assert len(dock_config["docks"]["dock_2"]["widgets"]) == 1
42
-
43
- assert fig1.__class__.__name__ == "BECFigure"
44
- assert fig1.__class__ == BECFigure
45
- assert fig2.__class__.__name__ == "BECFigure"
46
- assert fig2.__class__ == BECFigure
47
-
48
- mm = fig0.motor_map("samx", "samy")
49
- plt = fig1.plot(x_name="samx", y_name="bpm4i")
50
- im = fig2.image("eiger")
51
-
52
- assert mm.__class__.__name__ == "BECMotorMap"
53
- assert mm.__class__ == BECMotorMap
54
- assert plt.__class__.__name__ == "BECWaveform"
55
- assert plt.__class__ == BECWaveform
56
- assert im.__class__.__name__ == "BECImageShow"
57
- assert im.__class__ == BECImageShow
58
-
59
- assert mm._config_dict["signals"] == {
60
- "dap": None,
61
- "source": "device_readback",
62
- "x": {
63
- "name": "samx",
64
- "entry": "samx",
65
- "unit": None,
66
- "modifier": None,
67
- "limits": [-50.0, 50.0],
68
- },
69
- "y": {
70
- "name": "samy",
71
- "entry": "samy",
72
- "unit": None,
73
- "modifier": None,
74
- "limits": [-50.0, 50.0],
75
- },
76
- "z": None,
77
- }
78
- assert plt._config_dict["curves"]["bpm4i-bpm4i"]["signals"] == {
79
- "dap": None,
80
- "source": "scan_segment",
81
- "x": {"name": "samx", "entry": "samx", "unit": None, "modifier": None, "limits": None},
82
- "y": {"name": "bpm4i", "entry": "bpm4i", "unit": None, "modifier": None, "limits": None},
83
- "z": None,
84
- }
85
- assert im._config_dict["images"]["eiger"]["monitor"] == "eiger"
86
-
87
- # check initial position of motor map
88
- initial_pos_x = dev.samx.read()["samx"]["value"]
89
- initial_pos_y = dev.samy.read()["samy"]["value"]
90
-
91
- # Try to make a scan
92
- status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
93
-
94
- # wait for scan to finish
95
- while not status.status == "COMPLETED":
96
- time.sleep(0.2)
97
-
98
- # plot
99
- plt_last_scan_data = queue.scan_storage.storage[-1].data
100
- plt_data = plt.get_all_data()
101
- assert plt_data["bpm4i-bpm4i"]["x"] == plt_last_scan_data["samx"]["samx"].val
102
- assert plt_data["bpm4i-bpm4i"]["y"] == plt_last_scan_data["bpm4i"]["bpm4i"].val
103
-
104
- # image
105
- last_image_device = client.connector.get_last(MessageEndpoints.device_monitor_2d("eiger"))[
106
- "data"
107
- ].data
108
- time.sleep(0.5)
109
- last_image_plot = im.images[0].get_data()
110
- np.testing.assert_equal(last_image_device, last_image_plot)
111
-
112
- # motor map
113
- final_pos_x = dev.samx.read()["samx"]["value"]
114
- final_pos_y = dev.samy.read()["samy"]["value"]
115
-
116
- # check final coordinates of motor map
117
- motor_map_data = mm.get_data()
118
-
119
- np.testing.assert_equal(
120
- [motor_map_data["x"][0], motor_map_data["y"][0]], [initial_pos_x, initial_pos_y]
121
- )
122
- np.testing.assert_equal(
123
- [motor_map_data["x"][-1], motor_map_data["y"][-1]], [final_pos_x, final_pos_y]
124
- )
125
-
126
-
127
- def test_dock_manipulations_e2e(rpc_server_dock):
128
- dock = BECDockArea(rpc_server_dock)
129
-
130
- d0 = dock.add_dock("dock_0")
131
- d1 = dock.add_dock("dock_1")
132
- d2 = dock.add_dock("dock_2")
133
- dock_config = dock._config_dict
134
- assert len(dock_config["docks"]) == 3
135
-
136
- d0.detach()
137
- dock.detach_dock("dock_2")
138
- dock_config = dock._config_dict
139
- assert len(dock_config["docks"]) == 3
140
- assert len(dock.temp_areas) == 2
141
-
142
- d0.attach()
143
- dock_config = dock._config_dict
144
- assert len(dock_config["docks"]) == 3
145
- assert len(dock.temp_areas) == 1
146
-
147
- d2.remove()
148
- dock_config = dock._config_dict
149
- assert len(dock_config["docks"]) == 2
150
-
151
- assert ["dock_0", "dock_1"] == list(dock_config["docks"])
152
-
153
- dock.clear_all()
154
-
155
- dock_config = dock._config_dict
156
- assert len(dock_config["docks"]) == 0
157
- assert len(dock.temp_areas) == 0
158
-
159
-
160
- def test_ring_bar(rpc_server_dock):
161
- dock = BECDockArea(rpc_server_dock)
162
-
163
- d0 = dock.add_dock(name="dock_0")
164
-
165
- bar = d0.add_widget("RingProgressBar")
166
- assert bar.__class__.__name__ == "RingProgressBar"
167
-
168
- bar.set_number_of_bars(5)
169
- bar.set_colors_from_map("viridis")
170
- bar.set_value([10, 20, 30, 40, 50])
171
-
172
- bar_config = bar._config_dict
173
-
174
- expected_colors = [list(color) for color in Colors.golden_angle_color("viridis", 5, "RGB")]
175
- bar_colors = [ring._config_dict["color"] for ring in bar.rings]
176
- bar_values = [ring._config_dict["value"] for ring in bar.rings]
177
- assert bar_config["num_bars"] == 5
178
- assert bar_values == [10, 20, 30, 40, 50]
179
- assert bar_colors == expected_colors
180
-
181
-
182
- def test_ring_bar_scan_update(bec_client_lib, rpc_server_dock):
183
- dock = BECDockArea(rpc_server_dock)
184
-
185
- d0 = dock.add_dock("dock_0")
186
-
187
- bar = d0.add_widget("RingProgressBar")
188
-
189
- client = bec_client_lib
190
- dev = client.device_manager.devices
191
- dev.samx.tolerance.set(0)
192
- dev.samy.tolerance.set(0)
193
- scans = client.scans
194
-
195
- status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
196
- status.wait()
197
-
198
- bar_config = bar._config_dict
199
- assert bar_config["num_bars"] == 1
200
- assert bar_config["rings"][0]["value"] == 10
201
- assert bar_config["rings"][0]["min_value"] == 0
202
- assert bar_config["rings"][0]["max_value"] == 10
203
-
204
- status = scans.grid_scan(dev.samx, -5, 5, 4, dev.samy, -10, 10, 4, relative=True, exp_time=0.1)
205
- status.wait()
206
-
207
- bar_config = bar._config_dict
208
- assert bar_config["num_bars"] == 1
209
- assert bar_config["rings"][0]["value"] == 16
210
- assert bar_config["rings"][0]["min_value"] == 0
211
- assert bar_config["rings"][0]["max_value"] == 16
212
-
213
- init_samx = dev.samx.read()["samx"]["value"]
214
- init_samy = dev.samy.read()["samy"]["value"]
215
- final_samx = init_samx + 5
216
- final_samy = init_samy + 10
217
-
218
- dev.samx.velocity.put(5)
219
- dev.samy.velocity.put(5)
220
-
221
- status = scans.umv(dev.samx, 5, dev.samy, 10, relative=True)
222
- status.wait()
223
-
224
- bar_config = bar._config_dict
225
- assert bar_config["num_bars"] == 2
226
- assert bar_config["rings"][0]["value"] == final_samx
227
- assert bar_config["rings"][1]["value"] == final_samy
228
- assert bar_config["rings"][0]["min_value"] == init_samx
229
- assert bar_config["rings"][0]["max_value"] == final_samx
230
- assert bar_config["rings"][1]["min_value"] == init_samy
231
- assert bar_config["rings"][1]["max_value"] == final_samy
232
-
233
-
234
- def test_auto_update(bec_client_lib, rpc_server_dock, qtbot):
235
- dock = BECDockArea(rpc_server_dock)
236
-
237
- AutoUpdates.enabled = True
238
- AutoUpdates.create_default_dock = True
239
- dock.auto_updates = AutoUpdates(gui=dock)
240
- dock.auto_updates.start_default_dock()
241
-
242
- def get_default_figure():
243
- return dock.auto_updates.get_default_figure()
244
-
245
- qtbot.waitUntil(lambda: get_default_figure() is not None, timeout=10000)
246
- plt = get_default_figure()
247
-
248
- dock.selected_device = "bpm4i"
249
-
250
- # we need to start the update script manually; normally this is done when the GUI is started
251
- dock._start_update_script()
252
-
253
- client = bec_client_lib
254
- dev = client.device_manager.devices
255
- scans = client.scans
256
- queue = client.queue
257
-
258
- status = scans.line_scan(dev.samx, -5, 5, steps=10, exp_time=0.05, relative=False)
259
- status.wait()
260
-
261
- last_scan_data = queue.scan_storage.storage[-1].data
262
-
263
- # get data from curves
264
- widgets = plt.widget_list
265
- plt_data = widgets[0].get_all_data()
266
-
267
- # check plotted data
268
- assert (
269
- plt_data[f"Scan {status.scan.scan_number} - bpm4i"]["x"]
270
- == last_scan_data["samx"]["samx"].val
271
- )
272
- assert (
273
- plt_data[f"Scan {status.scan.scan_number} - bpm4i"]["y"]
274
- == last_scan_data["bpm4i"]["bpm4i"].val
275
- )
276
-
277
- status = scans.grid_scan(
278
- dev.samx, -10, 10, 5, dev.samy, -5, 5, 5, exp_time=0.05, relative=False
279
- )
280
- status.wait()
281
-
282
- plt = dock.auto_updates.get_default_figure()
283
- widgets = plt.widget_list
284
- qtbot.waitUntil(lambda: len(plt.widget_list) > 0, timeout=5000)
285
- plt_data = widgets[0].get_all_data()
286
-
287
- last_scan_data = queue.scan_storage.storage[-1].data
288
-
289
- # check plotted data
290
- assert (
291
- plt_data[f"Scan {status.scan.scan_number} - {dock.selected_device}"]["x"]
292
- == last_scan_data["samx"]["samx"].val
293
- )
294
- assert (
295
- plt_data[f"Scan {status.scan.scan_number} - {dock.selected_device}"]["y"]
296
- == last_scan_data["samy"]["samy"].val
297
- )
298
- dock.auto_updates.shutdown()