bec-ipython-client 3.173.1__tar.gz → 4.0.1__tar.gz

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 (44) hide show
  1. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/.gitignore +4 -1
  2. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/PKG-INFO +3 -3
  3. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/demo.py +0 -4
  4. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/pyproject.toml +4 -90
  5. bec_ipython_client-3.173.1/tests/end-2-end/test_scans_v4_lib_e2e.py → bec_ipython_client-4.0.1/tests/end-2-end/test_scan_workflows_lib_e2e.py +16 -16
  6. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/end-2-end/test_scans_e2e.py +5 -34
  7. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/__init__.py +0 -0
  8. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/beamline_mixin.py +0 -0
  9. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/bec_magics.py +0 -0
  10. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/bec_startup.py +0 -0
  11. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/callbacks/__init__.py +0 -0
  12. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/callbacks/device_progress.py +0 -0
  13. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/callbacks/ipython_live_updates.py +0 -0
  14. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/callbacks/live_table.py +0 -0
  15. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/callbacks/move_device.py +0 -0
  16. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/callbacks/utils.py +0 -0
  17. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/high_level_interfaces/__init__.py +0 -0
  18. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/high_level_interfaces/bec_hli.py +0 -0
  19. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/high_level_interfaces/spec_hli.py +0 -0
  20. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/main.py +0 -0
  21. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/plugins/SLS/__init__.py +0 -0
  22. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/plugins/SLS/sls_info.py +0 -0
  23. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/plugins/XTreme/__init__.py +0 -0
  24. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/plugins/XTreme/x-treme.py +0 -0
  25. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/plugins/__init__.py +0 -0
  26. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/plugins/flomni/flomni_config.yaml +0 -0
  27. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/prettytable.py +0 -0
  28. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/progressbar.py +0 -0
  29. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/bec_ipython_client/signals.py +0 -0
  30. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/conftest.py +0 -0
  31. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_beamline_mixins.py +0 -0
  32. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_bec_client.py +0 -0
  33. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_device_progress.py +0 -0
  34. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_ipython_live_updates.py +0 -0
  35. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_live_table.py +0 -0
  36. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_move_callback.py +0 -0
  37. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_pretty_table.py +0 -0
  38. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/client_tests/test_signals.py +0 -0
  39. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/conftest.py +0 -0
  40. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/end-2-end/_ensure_requirements_container.py +0 -0
  41. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/end-2-end/test_acl_e2e.py +0 -0
  42. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/end-2-end/test_actors_e2e.py +0 -0
  43. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/end-2-end/test_procedures_e2e.py +0 -0
  44. {bec_ipython_client-3.173.1 → bec_ipython_client-4.0.1}/tests/end-2-end/test_scans_lib_e2e.py +0 -0
@@ -1,6 +1,8 @@
1
1
  **/*_venv
2
2
  **/.idea
3
3
  *.log
4
+ *.log.gz
5
+ *.rdb
4
6
  **/__pycache__
5
7
  **/.DS_Store
6
8
  **/out
@@ -71,6 +73,7 @@ coverage.xml
71
73
  *.py,cover
72
74
  .hypothesis/
73
75
  .pytest_cache/
76
+ .ruff_cache/
74
77
  cover/
75
78
 
76
79
  # Translations
@@ -187,4 +190,4 @@ cython_debug/
187
190
 
188
191
 
189
192
  # Local agent configuration file
190
- AGENTS_PERSONAL.md
193
+ AGENTS_PERSONAL.md
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: bec_ipython_client
3
- Version: 3.173.1
3
+ Version: 4.0.1
4
4
  Summary: BEC IPython client
5
5
  Project-URL: Bug Tracker, https://github.com/bec-project/bec/issues
6
6
  Project-URL: Homepage, https://github.com/bec-project/bec
@@ -8,7 +8,7 @@ Classifier: Development Status :: 3 - Alpha
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Topic :: Scientific/Engineering
10
10
  Requires-Python: >=3.11
11
- Requires-Dist: bec-lib~=3.0
11
+ Requires-Dist: bec-lib>=3.0
12
12
  Requires-Dist: ipython<10.0,>=8.22
13
13
  Requires-Dist: numpy<3.0,>=1.24
14
14
  Requires-Dist: pyepics~=3.5
@@ -19,7 +19,7 @@ Requires-Dist: black~=26.0; extra == 'dev'
19
19
  Requires-Dist: coverage~=7.0; extra == 'dev'
20
20
  Requires-Dist: isort>=5.13.2,~=5.13; extra == 'dev'
21
21
  Requires-Dist: pylint<5,>=3; extra == 'dev'
22
- Requires-Dist: pytest-bec-e2e~=3.0; extra == 'dev'
22
+ Requires-Dist: pytest-bec-e2e>=3.0; extra == 'dev'
23
23
  Requires-Dist: pytest-random-order~=1.1; extra == 'dev'
24
24
  Requires-Dist: pytest-redis<6.0,>=3.1; extra == 'dev'
25
25
  Requires-Dist: pytest-retry~=1.1; extra == 'dev'
@@ -35,7 +35,6 @@ scans.umv(dev.samx, 5, dev.samy, 20, relative=False)
35
35
  # scans.line_scan(dev.samx, -5, 5, dev.samy, -5, 5, steps=10, exp_time=0.1, relative=True)
36
36
 
37
37
  # scans.round_scan_fly(dev.flyer_sim, 0, 50, 20, 3, exp_time=0.1, relative=True)
38
- # scans.monitor_scan(dev.samx, -100, 100, relative=False)
39
38
 
40
39
  # from bec_ipython_client.plotting import GrumpyConnector
41
40
 
@@ -171,9 +170,6 @@ scans.umv(dev.samx, 5, dev.samy, 20, relative=False)
171
170
  # scans.umv(dev.samx, 1000)
172
171
 
173
172
 
174
- # scans.grid_scan(dev.samx, -5, 5, 10, dev.samy, -5, 5, 10, exp_time=0.02, md={"queue_group": queue_group})
175
- # scans.grid_scan(dev.samx, -5, 5, 10, dev.samy, -5, 5, 10, exp_time=0.02, md={"queue_group": queue_group})
176
-
177
173
  # scans.grid_scan(dev.samx, -5, 5, 10, dev.samy, -5, 5, 10, exp_time=1)
178
174
 
179
175
  # event = threading.Event()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bec_ipython_client"
7
- version = "3.173.1"
7
+ version = "4.0.1"
8
8
  description = "BEC IPython client"
9
9
  requires-python = ">=3.11"
10
10
  classifiers = [
@@ -13,7 +13,7 @@ classifiers = [
13
13
  "Topic :: Scientific/Engineering",
14
14
  ]
15
15
  dependencies = [
16
- "bec-lib~=3.0",
16
+ "bec-lib>=3.0",
17
17
  "ipython>=8.22,<10.0",
18
18
  "numpy>=1.24, <3.0",
19
19
  "pyepics~=3.5",
@@ -27,7 +27,7 @@ dev = [
27
27
  "coverage~=7.0",
28
28
  "isort~=5.13, >=5.13.2",
29
29
  "pylint>=3,<5",
30
- "pytest-bec-e2e~=3.0",
30
+ "pytest-bec-e2e>=3.0",
31
31
  "pytest-random-order~=1.1",
32
32
  "pytest-redis>=3.1,<6.0",
33
33
  "pytest-retry~=1.1",
@@ -43,88 +43,6 @@ bec = "bec_ipython_client.main:main"
43
43
  Homepage = "https://github.com/bec-project/bec"
44
44
 
45
45
 
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
-
122
-
123
-
124
-
125
-
126
-
127
-
128
46
  [tool.hatch.build.targets.wheel]
129
47
  include = ["*"]
130
48
 
@@ -146,8 +64,4 @@ line-length = 100
146
64
  skip-magic-trailing-comma = true
147
65
 
148
66
  [tool.ruff.lint.isort]
149
- known-first-party = [
150
- "bec_lib",
151
- "bec_server",
152
- "bec_ipython_client",
153
- ]
67
+ known-first-party = ["bec_lib", "bec_server", "bec_ipython_client"]
@@ -15,15 +15,15 @@ from bec_lib.utils.plugin_manager import create as plugin_create
15
15
  from bec_server.scan_server.scans import position_generators
16
16
 
17
17
 
18
- def _get_v4_scan_runner(bec, scan_name: str):
18
+ def _get_scan_runner(bec, scan_name: str):
19
19
  return getattr(bec.scans, scan_name)
20
20
 
21
21
 
22
- def _run_v4_scan(
22
+ def _run_scan(
23
23
  bec, scan_name: str, *args, timeout: float = 60, wait_for_num_points: bool = True, **kwargs
24
24
  ):
25
- bec.metadata.update({"unit_test": f"test_v4_{scan_name}_lib"})
26
- status = _get_v4_scan_runner(bec, scan_name)(*args, **kwargs)
25
+ bec.metadata.update({"unit_test": f"test_{scan_name}_lib"})
26
+ status = _get_scan_runner(bec, scan_name)(*args, **kwargs)
27
27
  status.wait(timeout=timeout, num_points=wait_for_num_points, file_written=False)
28
28
  return status
29
29
 
@@ -97,7 +97,7 @@ def _remove_scan_export(init_file: Path, scan_name: str):
97
97
  init_file.write_text(content.replace(import_line, ""), encoding="utf-8")
98
98
 
99
99
 
100
- def _wait_for_v4_scan_registration(bec, scan_name: str, timeout: float = 60):
100
+ def _wait_for_scan_registration(bec, scan_name: str, timeout: float = 60):
101
101
  deadline = time.time() + timeout
102
102
  while time.time() < deadline:
103
103
  available_scans = bec.connector.get(MessageEndpoints.available_scans())
@@ -215,14 +215,14 @@ def _wait_for_v4_scan_registration(bec, scan_name: str, timeout: float = 60):
215
215
  ("time_scan", (), {"points": 3, "interval": 0.05, "exp_time": 0.01}, 3, 3),
216
216
  ],
217
217
  )
218
- def test_v4_fixed_point_scans_lib(
218
+ def test_fixed_point_scans_lib(
219
219
  bec_client_lib, scan_name, scan_args, scan_kwargs, expected_num_points, expected_num_readouts
220
220
  ):
221
221
  bec = bec_client_lib
222
222
  dev = bec.device_manager.devices
223
223
  resolved_args = _resolve_scan_args(scan_args, dev)
224
224
 
225
- status = _run_v4_scan(bec, scan_name, *resolved_args, **scan_kwargs)
225
+ status = _run_scan(bec, scan_name, *resolved_args, **scan_kwargs)
226
226
 
227
227
  assert status.scan is not None
228
228
  assert status.scan.num_points == expected_num_points
@@ -235,7 +235,7 @@ def test_mv_scan_lib(bec_client_lib):
235
235
  bec = bec_client_lib
236
236
  dev = bec.device_manager.devices
237
237
 
238
- status = _run_v4_scan(bec, "mv", dev.samx, 1.5, dev.samy, -1.5, relative=False)
238
+ status = _run_scan(bec, "mv", dev.samx, 1.5, dev.samy, -1.5, relative=False)
239
239
  status.wait(timeout=30)
240
240
 
241
241
  _assert_device_position(dev.samx, 1.5, timeout=5)
@@ -247,7 +247,7 @@ def test_umv_scan_lib(bec_client_lib):
247
247
  bec = bec_client_lib
248
248
  dev = bec.device_manager.devices
249
249
 
250
- status = _run_v4_scan(bec, "umv", dev.samx, -1.0, dev.samy, 1.0, relative=False)
250
+ status = _run_scan(bec, "umv", dev.samx, -1.0, dev.samy, 1.0, relative=False)
251
251
  status.wait(timeout=30)
252
252
 
253
253
  _assert_device_position(dev.samx, -1.0, timeout=5)
@@ -261,7 +261,7 @@ def test_cont_line_scan_lib(bec_client_lib):
261
261
  original_velocity = dev.samx.velocity.get()
262
262
  try:
263
263
  dev.samx.velocity.set(1).wait()
264
- status = _run_v4_scan(
264
+ status = _run_scan(
265
265
  bec, "cont_line_scan", dev.samx, 0.0, 0.2, steps=3, exp_time=0.01, relative=False
266
266
  )
267
267
  finally:
@@ -282,7 +282,7 @@ def test_line_sweep_scan_lib(bec_client_lib):
282
282
  scans.umv(dev.samx, -5.0, relative=False).wait()
283
283
  dev.samx.velocity.set(5).wait()
284
284
  dev.samx.limits = [-50, 50]
285
- status = _run_v4_scan(
285
+ status = _run_scan(
286
286
  bec,
287
287
  "line_sweep_scan",
288
288
  dev.samx,
@@ -301,9 +301,9 @@ def test_line_sweep_scan_lib(bec_client_lib):
301
301
 
302
302
 
303
303
  @pytest.mark.timeout(120)
304
- def test_v4_scan_lib_stop_resolves_cleanly(bec_client_lib):
304
+ def test_scan_lib_stop_resolves_cleanly(bec_client_lib):
305
305
  bec = bec_client_lib
306
- status = _get_v4_scan_runner(bec, "time_scan")(points=100, interval=0.2, exp_time=0.01)
306
+ status = _get_scan_runner(bec, "time_scan")(points=100, interval=0.2, exp_time=0.01)
307
307
 
308
308
  time.sleep(0.5)
309
309
  status.cancel()
@@ -312,7 +312,7 @@ def test_v4_scan_lib_stop_resolves_cleanly(bec_client_lib):
312
312
 
313
313
 
314
314
  @pytest.mark.timeout(180)
315
- def test_v4_generated_scan_e2e(bec_client_lib):
315
+ def test_generated_scan_e2e(bec_client_lib):
316
316
  bec = bec_client_lib
317
317
  scan_name = f"e2e_generated_scan_{uuid.uuid4().hex[:8]}"
318
318
  try:
@@ -338,9 +338,9 @@ def test_v4_generated_scan_e2e(bec_client_lib):
338
338
  assert scan_file.exists()
339
339
 
340
340
  bec._request_scan_reload()
341
- scan_runner = _wait_for_v4_scan_registration(bec, scan_name)
341
+ scan_runner = _wait_for_scan_registration(bec, scan_name)
342
342
 
343
- bec.metadata.update({"unit_test": "test_v4_generated_scan_e2e"})
343
+ bec.metadata.update({"unit_test": "test_generated_scan_e2e"})
344
344
  status = scan_runner()
345
345
  status.wait(timeout=60, num_points=False, file_written=True)
346
346
 
@@ -375,17 +375,6 @@ def test_queued_scan(bec_ipython_client_fixture):
375
375
  assert scan_number_end == scan_number_start + 2
376
376
 
377
377
 
378
- @pytest.mark.timeout(100)
379
- def test_fly_scan(bec_ipython_client_fixture):
380
- bec = bec_ipython_client_fixture
381
- bec.metadata.update({"unit_test": "test_fly_scan"})
382
- scans = bec.scans
383
- dev = bec.device_manager.devices
384
- status = scans.round_scan_fly(dev.flyer_sim, 0, 40, 5, 3, exp_time=0.05, relative=True)
385
- assert len(status.scan.live_data) == 63
386
- assert status.scan.num_points == 63
387
-
388
-
389
378
  @pytest.mark.timeout(100)
390
379
  def test_scan_restart(bec_ipython_client_fixture):
391
380
  bec = bec_ipython_client_fixture
@@ -599,18 +588,6 @@ def test_time_scan(bec_ipython_client_fixture):
599
588
  assert len(status.scan.live_data) == 5
600
589
 
601
590
 
602
- @pytest.mark.timeout(100)
603
- def test_monitor_scan(bec_ipython_client_fixture):
604
- bec = bec_ipython_client_fixture
605
- bec.metadata.update({"unit_test": "test_monitor_scan"})
606
- scans = bec.scans
607
- dev = bec.device_manager.devices
608
- dev.samx.limits = [-1100, 1100]
609
- time.sleep(5)
610
- status = scans.monitor_scan(dev.samx, -100, 100, min_update=0.01, relative=False)
611
- assert len(status.scan.live_data) > 100
612
-
613
-
614
591
  @pytest.mark.timeout(100)
615
592
  def test_rpc_calls(bec_ipython_client_fixture):
616
593
  bec = bec_ipython_client_fixture
@@ -777,7 +754,7 @@ def test_device_preview(bec_ipython_client_fixture):
777
754
 
778
755
  @pytest.mark.timeout(100)
779
756
  def test_async_data(bec_ipython_client_fixture):
780
- """Test "extend" and "append" for async data and their expected return values"""
757
+ """Test "add_slice" and "add" async signal data written to disk."""
781
758
  bec = bec_ipython_client_fixture
782
759
  bec.metadata.update({"unit_test": "test_async_data"})
783
760
  dev = bec.device_manager.devices
@@ -787,21 +764,15 @@ def test_async_data(bec_ipython_client_fixture):
787
764
  dev.waveform.sim.select_model("ConstantModel")
788
765
  dev.waveform.sim.params = {"noise": "none", "c": amplitude}
789
766
  dev.waveform.waveform_shape.set(10)
790
- dev.waveform.async_update.set("append")
767
+ dev.waveform.async_update.set("add_slice")
791
768
  s1 = scans.line_scan(dev.samx, 0, 1, steps=10, relative=False)
792
769
  s1.wait()
793
- while True:
794
- waveform_data = s1.scan.data.devices.waveform.waveform_waveform.read()
795
- if len(waveform_data["value"]) == 10:
796
- break
770
+ waveform_data = s1.scan.data.devices.waveform.waveform_data.read()
797
771
  np.testing.assert_array_equal(waveform_data["value"], amplitude * np.ones((10, 10)))
798
- dev.waveform.async_update.set("extend")
772
+ dev.waveform.async_update.set("add")
799
773
  s1 = scans.line_scan(dev.samx, 0, 1, steps=10, relative=False)
800
774
  s1.wait()
801
- while True:
802
- waveform_data = s1.scan.data.devices.waveform.waveform_waveform.read()
803
- if len(waveform_data["value"]) == 100:
804
- break
775
+ waveform_data = s1.scan.data.devices.waveform.waveform_data.read()
805
776
  np.testing.assert_array_equal(waveform_data["value"], amplitude * np.ones(100))
806
777
 
807
778