Skip to content

Commit 9a3d254

Browse files
committed
Add bluesky_sys_test config
1 parent aaee94b commit 9a3d254

File tree

6 files changed

+93
-29
lines changed

6 files changed

+93
-29
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" ?>
2+
<blocks xmlns="http://epics.isis.rl.ac.uk/schema/blocks/1.0" xmlns:blk="http://epics.isis.rl.ac.uk/schema/blocks/1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
3+
<block>
4+
<name>p5</name>
5+
<read_pv>SIMPLE:VALUE:P5</read_pv>
6+
<local>True</local>
7+
<visible>True</visible>
8+
<rc_enabled>False</rc_enabled>
9+
<rc_lowlimit>0.0</rc_lowlimit>
10+
<rc_highlimit>0.0</rc_highlimit>
11+
<rc_suspend_on_invalid>False</rc_suspend_on_invalid>
12+
<log_periodic>True</log_periodic>
13+
<log_rate>30</log_rate>
14+
<log_deadband>0.0</log_deadband>
15+
<set_block>False</set_block>
16+
<set_block_val>None</set_block_val>
17+
</block>
18+
<block>
19+
<name>p3</name>
20+
<read_pv>SIMPLE:VALUE:P3</read_pv>
21+
<local>True</local>
22+
<visible>True</visible>
23+
<rc_enabled>False</rc_enabled>
24+
<rc_lowlimit>0.0</rc_lowlimit>
25+
<rc_highlimit>0.0</rc_highlimit>
26+
<rc_suspend_on_invalid>False</rc_suspend_on_invalid>
27+
<log_periodic>True</log_periodic>
28+
<log_rate>30</log_rate>
29+
<log_deadband>0.0</log_deadband>
30+
<set_block>False</set_block>
31+
<set_block_val>None</set_block_val>
32+
</block>
33+
</blocks>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" ?>
2+
<components xmlns="http://epics.isis.rl.ac.uk/schema/components/1.0" xmlns:comp="http://epics.isis.rl.ac.uk/schema/components/1.0" xmlns:xi="http://www.w3.org/2001/XInclude"/>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" ?>
2+
<groups xmlns="http://epics.isis.rl.ac.uk/schema/groups/1.0" xmlns:grp="http://epics.isis.rl.ac.uk/schema/groups/1.0" xmlns:xi="http://www.w3.org/2001/XInclude"/>
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" ?>
2+
<iocs xmlns="http://epics.isis.rl.ac.uk/schema/iocs/1.0" xmlns:ioc="http://epics.isis.rl.ac.uk/schema/iocs/1.0" xmlns:xi="http://www.w3.org/2001/XInclude">
3+
<ioc name="SIMPLE" autostart="true" restart="true" remotePvPrefix="" simlevel="none">
4+
<macros/>
5+
<pvs/>
6+
<pvsets/>
7+
</ioc>
8+
</iocs>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" ?>
2+
<meta>
3+
<description>Testing genie python advanced scripts</description>
4+
<synoptic>-- NONE --</synoptic>
5+
<edits>
6+
<edit>2024-07-08 13:01:05</edit>
7+
</edits>
8+
<isProtected>false</isProtected>
9+
<isDynamic>false</isDynamic>
10+
<configuresBlockGWAndArchiver>false</configuresBlockGWAndArchiver>
11+
</meta>

test_bluesky.py

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,41 @@
11
import unittest
2-
from io import StringIO
32

4-
from utilities.utilities import (
5-
g,
6-
load_config_if_not_already_loaded,
7-
set_genie_python_raises_exceptions,
8-
)
9-
from ibex_bluesky_core.run_engine import get_run_engine
10-
from bluesky.run_engine import RunEngine
113
import bluesky.plan_stubs as bps
124
import bluesky.plans as bp
13-
from ophyd_async.plan_stubs import ensure_connected
14-
from ibex_bluesky_core.devices.block import block_r, block_rw, block_rw_rbv
15-
from bluesky.preprocessors import subs_decorator
165
from bluesky.callbacks import LiveTable
17-
from ibex_bluesky_core.callbacks.plotting import LivePlot
6+
from bluesky.preprocessors import subs_decorator
7+
from bluesky.run_engine import RunEngine, RunEngineResult
8+
from genie_python import genie as g
189
from ibex_bluesky_core.devices import get_pv_prefix
10+
from ibex_bluesky_core.devices.block import block_r, block_rw_rbv
1911
from ibex_bluesky_core.devices.simpledae import SimpleDae
20-
from ibex_bluesky_core.devices.simpledae.controllers import PeriodPerPointController, RunPerPointController
12+
from ibex_bluesky_core.devices.simpledae.controllers import (
13+
PeriodPerPointController,
14+
RunPerPointController,
15+
)
16+
from ibex_bluesky_core.devices.simpledae.reducers import (
17+
GoodFramesNormalizer,
18+
PeriodGoodFramesNormalizer,
19+
)
2120
from ibex_bluesky_core.devices.simpledae.waiters import GoodFramesWaiter, PeriodGoodFramesWaiter
22-
from ibex_bluesky_core.devices.simpledae.reducers import GoodFramesNormalizer, PeriodGoodFramesNormalizer
21+
from ibex_bluesky_core.run_engine import get_run_engine
22+
from ophyd_async.plan_stubs import ensure_connected
23+
24+
from utilities.utilities import (
25+
load_config_if_not_already_loaded,
26+
set_genie_python_raises_exceptions,
27+
)
2328

2429
RE: RunEngine = get_run_engine()
2530

26-
P3_INIT_VALUE = 123.456
27-
P5_INIT_VALUE = 987.654321
31+
P3_INIT_VALUE: float = 123.456
32+
P5_INIT_VALUE: float = 987.654321
2833

2934

3035
class TestBluesky(unittest.TestCase):
31-
def setUp(self):
36+
def setUp(self) -> None:
3237
g.set_instrument(None)
33-
# load_config_if_not_already_loaded("bluesky_sys_test")
38+
load_config_if_not_already_loaded("bluesky_sys_test")
3439
set_genie_python_raises_exceptions(True)
3540
g.cset("p3", P3_INIT_VALUE)
3641
g.cset("p5", P5_INIT_VALUE)
@@ -69,17 +74,18 @@ def _period_per_point_dae(self) -> SimpleDae:
6974
)
7075
return dae
7176

72-
def test_rd_block(self):
77+
def test_rd_block(self) -> None:
7378
def _plan():
7479
p3 = block_r(float, "p3")
7580
yield from ensure_connected(p3)
7681
return (yield from bps.rd(p3))
7782

7883
result = RE(_plan())
84+
assert isinstance(result, RunEngineResult)
7985

8086
self.assertAlmostEqual(result.plan_result, P3_INIT_VALUE, places=5)
8187

82-
def test_abs_scan_two_blocks(self):
88+
def test_abs_scan_two_blocks(self) -> None:
8389
def _plan():
8490
p3 = block_r(float, "p3")
8591
p5 = block_rw_rbv(float, "p5")
@@ -91,7 +97,7 @@ def _plan():
9197
# At end of scan, p5 should be left at last value by default.
9298
self.assertAlmostEqual(g.cget("p5")["value"], 10)
9399

94-
def test_rel_scan_two_blocks(self):
100+
def test_rel_scan_two_blocks(self) -> None:
95101
def _plan():
96102
p3 = block_r(float, "p3")
97103
p5 = block_rw_rbv(float, "p5")
@@ -103,12 +109,14 @@ def _plan():
103109
# After a rel_scan, the movable is moved back to original value
104110
self.assertAlmostEqual(g.cget("p5")["value"], P5_INIT_VALUE)
105111

106-
def test_scan_with_livetable_callback(self):
112+
def test_scan_with_livetable_callback(self) -> None:
107113
livetable_lines = []
108114

109-
@subs_decorator([
110-
LiveTable(["p3", "p5"], out=livetable_lines.append),
111-
])
115+
@subs_decorator(
116+
[
117+
LiveTable(["p3", "p5"], out=livetable_lines.append),
118+
]
119+
)
112120
def _plan():
113121
p3 = block_r(float, "p3")
114122
p5 = block_rw_rbv(float, "p5")
@@ -119,11 +127,11 @@ def _plan():
119127

120128
# Tricky as livetable contains timestamps etc, but check that the table
121129
# describes the first and last point we were trying to measure, with appropriate
122-
# precisions.
130+
# precisions pulled from the PVs.
123131
self.assertTrue(any("| 123.456 | -10.00000 |" in line for line in livetable_lines))
124132
self.assertTrue(any("| 123.456 | 10.00000 |" in line for line in livetable_lines))
125133

126-
def test_count_simple_dae(self):
134+
def test_count_simple_dae(self) -> None:
127135
start_run_number = int(g.get_runnumber())
128136

129137
def _plan():
@@ -137,7 +145,7 @@ def _plan():
137145

138146
self.assertEqual(start_run_number + 1, end_run_number)
139147

140-
def test_scan_simple_dae_in_run_per_point_mode(self):
148+
def test_scan_simple_dae_in_run_per_point_mode(self) -> None:
141149
npoints = 3
142150
start_run_number = int(g.get_runnumber())
143151

@@ -154,7 +162,7 @@ def _plan():
154162
# Assert we've done npoints runs
155163
self.assertEqual(start_run_number + npoints, end_run_number)
156164

157-
def test_scan_simple_dae_in_period_per_point_mode(self):
165+
def test_scan_simple_dae_in_period_per_point_mode(self) -> None:
158166
npoints = 3
159167
start_run_number = int(g.get_runnumber())
160168

0 commit comments

Comments
 (0)