ophyd-async 0.14.2__py3-none-any.whl → 0.15__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.
- ophyd_async/_version.py +2 -2
- ophyd_async/core/__init__.py +17 -5
- ophyd_async/core/{_table.py → _datatypes.py} +18 -9
- ophyd_async/core/_derived_signal.py +2 -2
- ophyd_async/core/_derived_signal_backend.py +1 -5
- ophyd_async/core/_device_filler.py +4 -6
- ophyd_async/core/_mock_signal_backend.py +25 -7
- ophyd_async/core/_mock_signal_utils.py +7 -11
- ophyd_async/core/_signal.py +11 -11
- ophyd_async/core/_signal_backend.py +7 -19
- ophyd_async/core/_soft_signal_backend.py +6 -6
- ophyd_async/core/_status.py +81 -4
- ophyd_async/core/_typing.py +0 -0
- ophyd_async/core/_utils.py +57 -7
- ophyd_async/epics/adcore/_core_io.py +12 -5
- ophyd_async/epics/adcore/_core_logic.py +1 -1
- ophyd_async/epics/core/__init__.py +2 -1
- ophyd_async/epics/core/_aioca.py +13 -3
- ophyd_async/epics/core/_epics_connector.py +4 -1
- ophyd_async/epics/core/_p4p.py +13 -3
- ophyd_async/epics/core/_signal.py +18 -6
- ophyd_async/epics/core/_util.py +23 -3
- ophyd_async/epics/demo/_motor.py +2 -2
- ophyd_async/epics/motor.py +15 -17
- ophyd_async/epics/odin/_odin_io.py +1 -1
- ophyd_async/epics/pmac/_pmac_io.py +23 -4
- ophyd_async/epics/pmac/_pmac_trajectory.py +47 -10
- ophyd_async/fastcs/eiger/_eiger_io.py +20 -1
- ophyd_async/fastcs/jungfrau/_signals.py +4 -1
- ophyd_async/fastcs/panda/_block.py +28 -6
- ophyd_async/fastcs/panda/_writer.py +1 -3
- ophyd_async/tango/core/_tango_transport.py +7 -17
- ophyd_async/tango/demo/_counter.py +2 -2
- {ophyd_async-0.14.2.dist-info → ophyd_async-0.15.dist-info}/METADATA +1 -1
- {ophyd_async-0.14.2.dist-info → ophyd_async-0.15.dist-info}/RECORD +38 -37
- {ophyd_async-0.14.2.dist-info → ophyd_async-0.15.dist-info}/WHEEL +1 -1
- {ophyd_async-0.14.2.dist-info → ophyd_async-0.15.dist-info}/licenses/LICENSE +0 -0
- {ophyd_async-0.14.2.dist-info → ophyd_async-0.15.dist-info}/top_level.txt +0 -0
|
@@ -2,13 +2,18 @@ import asyncio
|
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
|
|
4
4
|
import numpy as np
|
|
5
|
+
from bluesky.protocols import (
|
|
6
|
+
Flyable,
|
|
7
|
+
Preparable,
|
|
8
|
+
Stageable,
|
|
9
|
+
)
|
|
5
10
|
from scanspec.core import Path, Slice
|
|
6
11
|
from scanspec.specs import Spec
|
|
7
12
|
|
|
8
13
|
from ophyd_async.core import (
|
|
9
14
|
DEFAULT_TIMEOUT,
|
|
10
15
|
AsyncStatus,
|
|
11
|
-
|
|
16
|
+
Device,
|
|
12
17
|
error_if_none,
|
|
13
18
|
gather_dict,
|
|
14
19
|
observe_value,
|
|
@@ -17,8 +22,8 @@ from ophyd_async.core import (
|
|
|
17
22
|
)
|
|
18
23
|
from ophyd_async.epics.motor import Motor
|
|
19
24
|
|
|
20
|
-
from ._pmac_io import CS_INDEX, PmacIO
|
|
21
|
-
from ._pmac_trajectory_generation import PVT, Trajectory
|
|
25
|
+
from ._pmac_io import CS_INDEX, PmacExecuteState, PmacIO
|
|
26
|
+
from ._pmac_trajectory_generation import PVT, Trajectory, UserProgram
|
|
22
27
|
from ._utils import (
|
|
23
28
|
_PmacMotorInfo,
|
|
24
29
|
calculate_ramp_position_and_duration,
|
|
@@ -40,14 +45,21 @@ class PmacPrepareContext:
|
|
|
40
45
|
ramp_up_time: float
|
|
41
46
|
|
|
42
47
|
|
|
43
|
-
class PmacTrajectoryTriggerLogic(
|
|
44
|
-
|
|
48
|
+
class PmacTrajectoryTriggerLogic(
|
|
49
|
+
Device,
|
|
50
|
+
Stageable,
|
|
51
|
+
Preparable,
|
|
52
|
+
Flyable,
|
|
53
|
+
):
|
|
54
|
+
def __init__(self, pmac: PmacIO, name: str = "") -> None:
|
|
45
55
|
self.pmac = pmac
|
|
46
56
|
self._next_pvt: PVT | None
|
|
47
57
|
self._loaded: int = 0
|
|
48
58
|
self._trajectory_status: AsyncStatus | None = None
|
|
49
59
|
self._prepare_context: PmacPrepareContext | None = None
|
|
60
|
+
super().__init__(name=name)
|
|
50
61
|
|
|
62
|
+
@AsyncStatus.wrap
|
|
51
63
|
async def prepare(self, value: Spec[Motor]):
|
|
52
64
|
path = Path(value.calculate())
|
|
53
65
|
slice = path.consume(SLICE_SIZE)
|
|
@@ -65,6 +77,7 @@ class PmacTrajectoryTriggerLogic(FlyerController):
|
|
|
65
77
|
self._move_to_start(motor_info, ramp_up_pos),
|
|
66
78
|
)
|
|
67
79
|
|
|
80
|
+
@AsyncStatus.wrap
|
|
68
81
|
async def kickoff(self):
|
|
69
82
|
prepare_context = error_if_none(
|
|
70
83
|
self._prepare_context, "Cannot kickoff. Must call prepare first."
|
|
@@ -80,6 +93,7 @@ class PmacTrajectoryTriggerLogic(FlyerController):
|
|
|
80
93
|
prepare_context.ramp_up_time + DEFAULT_TIMEOUT,
|
|
81
94
|
)
|
|
82
95
|
|
|
96
|
+
@AsyncStatus.wrap
|
|
83
97
|
async def complete(self):
|
|
84
98
|
trajectory_status = error_if_none(
|
|
85
99
|
self._trajectory_status, "Cannot complete. Must call kickoff first."
|
|
@@ -89,14 +103,37 @@ class PmacTrajectoryTriggerLogic(FlyerController):
|
|
|
89
103
|
self._trajectory_status = None
|
|
90
104
|
self._loaded = 0
|
|
91
105
|
|
|
92
|
-
|
|
93
|
-
|
|
106
|
+
@AsyncStatus.wrap
|
|
107
|
+
async def stage(self) -> None:
|
|
108
|
+
await self._stop_if_running()
|
|
109
|
+
|
|
110
|
+
# Run an empty fly scan to reset EQU on Panda Brick
|
|
111
|
+
for use_axis in self.pmac.trajectory.use_axis.values():
|
|
112
|
+
await use_axis.set(False)
|
|
113
|
+
|
|
114
|
+
await asyncio.gather(
|
|
115
|
+
self.pmac.trajectory.time_array.set(np.array(0)),
|
|
116
|
+
self.pmac.trajectory.user_array.set(np.array(UserProgram.END)),
|
|
117
|
+
self.pmac.trajectory.points_to_build.set(1),
|
|
118
|
+
)
|
|
119
|
+
await self.pmac.trajectory.build_profile.trigger()
|
|
120
|
+
await self.pmac.trajectory.execute_profile.set(True)
|
|
121
|
+
|
|
122
|
+
@AsyncStatus.wrap
|
|
123
|
+
async def unstage(self) -> None:
|
|
124
|
+
await self._stop_if_running()
|
|
125
|
+
|
|
126
|
+
async def _stop_if_running(self):
|
|
127
|
+
# Abort current trajectory, if one is running
|
|
128
|
+
if (
|
|
129
|
+
await self.pmac.trajectory.execute_state.get_value()
|
|
130
|
+
== PmacExecuteState.EXECUTING
|
|
131
|
+
):
|
|
132
|
+
await self.pmac.trajectory.abort_profile.trigger()
|
|
94
133
|
|
|
95
134
|
@AsyncStatus.wrap
|
|
96
135
|
async def _execute_trajectory(self, path: Path, motor_info: _PmacMotorInfo):
|
|
97
|
-
execute_status = self.pmac.trajectory.execute_profile.set(
|
|
98
|
-
True, wait=True, timeout=None
|
|
99
|
-
)
|
|
136
|
+
execute_status = self.pmac.trajectory.execute_profile.set(True, timeout=None)
|
|
100
137
|
# We consume SLICE_SIZE from self.path and parse a trajectory
|
|
101
138
|
# containing at least 2 * SLICE_SIZE, as a gapless trajectory
|
|
102
139
|
# will contain 2 points per slice frame. If gaps are present,
|
|
@@ -15,14 +15,29 @@ class EigerTriggerMode(StrictEnum):
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
class EigerMonitorIO(Device):
|
|
18
|
+
"""Driver for Eiger Monitor subsystem.
|
|
19
|
+
|
|
20
|
+
This mirrors the interface provided by https://media.dectris.com/SIMPLON_APIReference_v1p6.pdf#page=25
|
|
21
|
+
"""
|
|
22
|
+
|
|
18
23
|
pass
|
|
19
24
|
|
|
20
25
|
|
|
21
26
|
class EigerStreamIO(Device):
|
|
27
|
+
"""Driver for Eiger Stream subsystem.
|
|
28
|
+
|
|
29
|
+
This mirrors the interface provided by https://media.dectris.com/SIMPLON_APIReference_v1p6.pdf#page=32
|
|
30
|
+
"""
|
|
31
|
+
|
|
22
32
|
pass
|
|
23
33
|
|
|
24
34
|
|
|
25
35
|
class EigerDetectorIO(Device):
|
|
36
|
+
"""Driver for Eiger Detector subsystem.
|
|
37
|
+
|
|
38
|
+
This mirrors the interface provided by https://media.dectris.com/SIMPLON_APIReference_v1p6.pdf#page=17
|
|
39
|
+
"""
|
|
40
|
+
|
|
26
41
|
bit_depth_image: SignalR[int]
|
|
27
42
|
state: SignalR[str]
|
|
28
43
|
count_time: SignalRW[float]
|
|
@@ -44,7 +59,11 @@ class EigerDetectorIO(Device):
|
|
|
44
59
|
|
|
45
60
|
|
|
46
61
|
class EigerDriverIO(Device):
|
|
47
|
-
"""Contains signals for handling IO on the Eiger detector.
|
|
62
|
+
"""Contains signals for handling IO on the Eiger detector.
|
|
63
|
+
|
|
64
|
+
This mirrors the interface provided by
|
|
65
|
+
https://github.com/DiamondLightSource/fastcs-eiger/blob/main/src/fastcs_eiger/controllers/eiger_controller.py
|
|
66
|
+
"""
|
|
48
67
|
|
|
49
68
|
stale_parameters: SignalR[bool]
|
|
50
69
|
monitor: EigerMonitorIO
|
|
@@ -58,7 +58,10 @@ JUNGFRAU_TRIGGER_MODE_MAP = {
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
class JungfrauDriverIO(Device):
|
|
61
|
-
"""Contains signals for handling IO on the Jungfrau detector.
|
|
61
|
+
"""Contains signals for handling IO on the Jungfrau detector.
|
|
62
|
+
|
|
63
|
+
This mirrors the intefrace provided by slsDetector/Db/slsDetector.template
|
|
64
|
+
"""
|
|
62
65
|
|
|
63
66
|
exposure_time: SignalRW[float] # in s
|
|
64
67
|
|
|
@@ -19,7 +19,11 @@ class PandaCaptureMode(StrictEnum):
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class DataBlock(Device):
|
|
22
|
-
"""Data block for the PandA. Used for writing data through the IOC.
|
|
22
|
+
"""Data block for the PandA. Used for writing data through the IOC.
|
|
23
|
+
|
|
24
|
+
This mirrors the interface provided by
|
|
25
|
+
https://github.com/PandABlocks/fastcs-PandABlocks/blob/main/src/fastcs_pandablocks/panda/blocks/data.py
|
|
26
|
+
"""
|
|
23
27
|
|
|
24
28
|
# In future we may decide to make hdf_* optional
|
|
25
29
|
hdf_directory: SignalRW[str]
|
|
@@ -56,7 +60,11 @@ class PandaPosMux(SubsetEnum):
|
|
|
56
60
|
|
|
57
61
|
|
|
58
62
|
class PulseBlock(Device):
|
|
59
|
-
"""Used for configuring pulses in the PandA.
|
|
63
|
+
"""Used for configuring pulses in the PandA.
|
|
64
|
+
|
|
65
|
+
This mirrors the interface provided by
|
|
66
|
+
PandABlocks-FPGA/modules/pulse/pulse.block.ini
|
|
67
|
+
"""
|
|
60
68
|
|
|
61
69
|
enable: SignalRW[PandaBitMux]
|
|
62
70
|
delay: SignalRW[float]
|
|
@@ -66,7 +74,11 @@ class PulseBlock(Device):
|
|
|
66
74
|
|
|
67
75
|
|
|
68
76
|
class PcompBlock(Device):
|
|
69
|
-
"""Position compare block in the PandA.
|
|
77
|
+
"""Position compare block in the PandA.
|
|
78
|
+
|
|
79
|
+
This mirrors the interface provided by
|
|
80
|
+
PandABlocks-FPGA/modules/pcomp/pcomp.block.ini
|
|
81
|
+
"""
|
|
70
82
|
|
|
71
83
|
active: SignalR[bool]
|
|
72
84
|
dir: SignalRW[PandaPcompDirection]
|
|
@@ -87,7 +99,10 @@ class PandaTimeUnits(StrictEnum):
|
|
|
87
99
|
|
|
88
100
|
|
|
89
101
|
class SeqBlock(Device):
|
|
90
|
-
"""Sequencer block in the PandA.
|
|
102
|
+
"""Sequencer block in the PandA.
|
|
103
|
+
|
|
104
|
+
This mirrors the interface provided by PandABlocks-FPGA/modules/seq/seq.block.ini
|
|
105
|
+
"""
|
|
91
106
|
|
|
92
107
|
table: SignalRW[SeqTable]
|
|
93
108
|
active: SignalR[bool]
|
|
@@ -99,14 +114,21 @@ class SeqBlock(Device):
|
|
|
99
114
|
|
|
100
115
|
|
|
101
116
|
class PcapBlock(Device):
|
|
102
|
-
"""Position capture block in the PandA.
|
|
117
|
+
"""Position capture block in the PandA.
|
|
118
|
+
|
|
119
|
+
This mirrors the interface provided by PandABlocks-FPGA/modules/pcap/pcap.block.ini
|
|
120
|
+
"""
|
|
103
121
|
|
|
104
122
|
active: SignalR[bool]
|
|
105
123
|
arm: SignalRW[bool]
|
|
106
124
|
|
|
107
125
|
|
|
108
126
|
class InencBlock(Device):
|
|
109
|
-
"""In encoder block in the PandA.
|
|
127
|
+
"""In encoder block in the PandA.
|
|
128
|
+
|
|
129
|
+
This mirrors the interface provided by
|
|
130
|
+
PandABlocks-FPGA/modules/inenc/inenc.block.ini
|
|
131
|
+
"""
|
|
110
132
|
|
|
111
133
|
val_scale: SignalRW[float]
|
|
112
134
|
val_offset: SignalRW[float]
|
|
@@ -159,6 +159,4 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
159
159
|
|
|
160
160
|
# Could put this function as default for StandardDetector
|
|
161
161
|
async def close(self):
|
|
162
|
-
await self.panda_data_block.capture.set(
|
|
163
|
-
False, wait=True, timeout=DEFAULT_TIMEOUT
|
|
164
|
-
)
|
|
162
|
+
await self.panda_data_block.capture.set(False, timeout=DEFAULT_TIMEOUT)
|
|
@@ -195,7 +195,7 @@ class TangoProxy:
|
|
|
195
195
|
|
|
196
196
|
@abstractmethod
|
|
197
197
|
async def put(
|
|
198
|
-
self, value: object | None,
|
|
198
|
+
self, value: object | None, timeout: float | None = None
|
|
199
199
|
) -> AsyncStatus | None:
|
|
200
200
|
"""Put value to TRL."""
|
|
201
201
|
|
|
@@ -272,13 +272,8 @@ class AttributeProxy(TangoProxy):
|
|
|
272
272
|
|
|
273
273
|
@ensure_proper_executor
|
|
274
274
|
async def put( # type: ignore
|
|
275
|
-
self, value: object | None,
|
|
275
|
+
self, value: object | None, timeout: float | None = None
|
|
276
276
|
) -> AsyncStatus | None:
|
|
277
|
-
if wait is False:
|
|
278
|
-
raise RuntimeWarning(
|
|
279
|
-
"wait=False is not supported in Tango."
|
|
280
|
-
"Simply don't await the status object."
|
|
281
|
-
)
|
|
282
277
|
# TODO: remove the timeout from this as it is handled at the signal level
|
|
283
278
|
value = self._converter.write_value(value)
|
|
284
279
|
try:
|
|
@@ -522,7 +517,7 @@ class CommandProxy(TangoProxy):
|
|
|
522
517
|
if self._read_character == CommandProxyReadCharacter.READ_WRITE:
|
|
523
518
|
return self._last_reading["value"]
|
|
524
519
|
elif self._read_character == CommandProxyReadCharacter.READ:
|
|
525
|
-
await self.put(value=None,
|
|
520
|
+
await self.put(value=None, timeout=None)
|
|
526
521
|
return self._last_reading["value"]
|
|
527
522
|
|
|
528
523
|
async def get_w_value(self) -> object:
|
|
@@ -534,13 +529,8 @@ class CommandProxy(TangoProxy):
|
|
|
534
529
|
|
|
535
530
|
@ensure_proper_executor
|
|
536
531
|
async def put( # type: ignore
|
|
537
|
-
self, value: object | None,
|
|
532
|
+
self, value: object | None, timeout: float | None = None
|
|
538
533
|
) -> AsyncStatus | None:
|
|
539
|
-
if wait is False:
|
|
540
|
-
raise RuntimeError(
|
|
541
|
-
"wait=False is not supported in Tango."
|
|
542
|
-
" Simply don't await the status object."
|
|
543
|
-
)
|
|
544
534
|
value = self._converter.write_value(value)
|
|
545
535
|
try:
|
|
546
536
|
|
|
@@ -568,7 +558,7 @@ class CommandProxy(TangoProxy):
|
|
|
568
558
|
|
|
569
559
|
async def get_reading(self) -> Reading:
|
|
570
560
|
if self._read_character == CommandProxyReadCharacter.READ:
|
|
571
|
-
await self.put(value=None,
|
|
561
|
+
await self.put(value=None, timeout=None)
|
|
572
562
|
return self._last_reading
|
|
573
563
|
else:
|
|
574
564
|
return self._last_reading
|
|
@@ -923,11 +913,11 @@ class TangoSignalBackend(SignalBackend[SignalDatatypeT]):
|
|
|
923
913
|
self.converter = make_converter(self.trl_configs[self.read_trl], self.datatype)
|
|
924
914
|
self.proxies[self.read_trl].set_converter(self.converter) # type: ignore
|
|
925
915
|
|
|
926
|
-
async def put(self, value: SignalDatatypeT | None,
|
|
916
|
+
async def put(self, value: SignalDatatypeT | None, timeout=None) -> None:
|
|
927
917
|
if self.proxies[self.write_trl] is None:
|
|
928
918
|
raise NotConnectedError(f"Not connected to {self.write_trl}")
|
|
929
919
|
self.status = None
|
|
930
|
-
put_status = await self.proxies[self.write_trl].put(value,
|
|
920
|
+
put_status = await self.proxies[self.write_trl].put(value, timeout) # type: ignore
|
|
931
921
|
self.status = put_status
|
|
932
922
|
|
|
933
923
|
async def get_datakey(self, source: str) -> DataKey:
|
|
@@ -28,8 +28,8 @@ class TangoCounter(TangoDevice, StandardReadable):
|
|
|
28
28
|
async def trigger(self) -> None:
|
|
29
29
|
sample_time = await self.sample_time.get_value()
|
|
30
30
|
timeout = sample_time + DEFAULT_TIMEOUT
|
|
31
|
-
await self.start.trigger(
|
|
31
|
+
await self.start.trigger(timeout=timeout)
|
|
32
32
|
|
|
33
33
|
@AsyncStatus.wrap
|
|
34
34
|
async def reset(self) -> None:
|
|
35
|
-
await self.reset_.trigger(
|
|
35
|
+
await self.reset_.trigger(timeout=DEFAULT_TIMEOUT)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.15
|
|
4
4
|
Summary: Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango
|
|
5
5
|
Author-email: Tom Cobb <tom.cobb@diamond.ac.uk>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -1,33 +1,34 @@
|
|
|
1
1
|
ophyd_async/__init__.py,sha256=dcAA3qsj1nNIMe5l-v2tlduZ_ypwBmyuHe45Lsq4k4w,206
|
|
2
2
|
ophyd_async/__main__.py,sha256=n_U4O9bgm97OuboUB_9eK7eFiwy8BZSgXJ0OzbE0DqU,481
|
|
3
3
|
ophyd_async/_docs_parser.py,sha256=gPYrigfSbYCF7QoSf2UvE-cpQu4snSssl7ZWN-kKDzI,352
|
|
4
|
-
ophyd_async/_version.py,sha256=
|
|
4
|
+
ophyd_async/_version.py,sha256=PoKyHbEj9RCTgE7Yy971GX8SAg4Ykby8LuwUO7eDG5Q,701
|
|
5
5
|
ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
ophyd_async/core/__init__.py,sha256=
|
|
7
|
-
ophyd_async/core/
|
|
8
|
-
ophyd_async/core/
|
|
6
|
+
ophyd_async/core/__init__.py,sha256=tScD6-v7XHYXe9Mt52il0QnUIxVi-M8_CA9BCJIWJ3U,6293
|
|
7
|
+
ophyd_async/core/_datatypes.py,sha256=9ItymwrWqvl2Vj7aTIJfnvG7mlm1fXL8Cxwx88UHvyw,7677
|
|
8
|
+
ophyd_async/core/_derived_signal.py,sha256=ensigHhfsrAQD8Tb0vJRYOoCogy0dYHyImpU_tdDzhU,14107
|
|
9
|
+
ophyd_async/core/_derived_signal_backend.py,sha256=5uAeTdRCBOPWsh8dlGhc6-uXpz4FFpKzp-wtTg09jTs,12493
|
|
9
10
|
ophyd_async/core/_detector.py,sha256=9fYbBPmRnMGADcDTYkspDAL2uzhtNNiKCEeBUU0oKaY,14942
|
|
10
11
|
ophyd_async/core/_device.py,sha256=tm-khZLMy-Q7nn86GYHkbXRJOc83DgkbrdQ6WCjZhUs,17638
|
|
11
|
-
ophyd_async/core/_device_filler.py,sha256=
|
|
12
|
+
ophyd_async/core/_device_filler.py,sha256=jOQiUSSjfnMWBnOZQTx-ZexLJydokCA4HZ-QqX4TQ98,15772
|
|
12
13
|
ophyd_async/core/_enums.py,sha256=2vh6x0rZ6SLiw2xxq1xVIn-GpbLDFc8wZoVdA55QiE8,370
|
|
13
14
|
ophyd_async/core/_flyer.py,sha256=8zKyU5aQOr_t59GIUwsYeb8NSabdvBp0swwuRe4v5VQ,3457
|
|
14
15
|
ophyd_async/core/_hdf_dataset.py,sha256=0bIX_ZbFSMdXqDwRtEvV-0avHnwXhjPddE5GVNmo7H8,2608
|
|
15
16
|
ophyd_async/core/_log.py,sha256=DxKR4Nz3SgTaTzKBZWqt-w48yT8WUAr_3Qr223TEWRw,3587
|
|
16
|
-
ophyd_async/core/_mock_signal_backend.py,sha256=
|
|
17
|
-
ophyd_async/core/_mock_signal_utils.py,sha256=
|
|
17
|
+
ophyd_async/core/_mock_signal_backend.py,sha256=TbIOiPA0f2nnz2UJJDuPb31lZur7VwzCoKtIjodttP8,4081
|
|
18
|
+
ophyd_async/core/_mock_signal_utils.py,sha256=Ryh_SmYrgnoHuyzQJ8bkvoL10Ga1d7PnHFo7TY1srKM,5394
|
|
18
19
|
ophyd_async/core/_protocol.py,sha256=wQ_snxhTprHqEjQb1HgFwBljwolMY6A8C3xgV1PXwdU,4051
|
|
19
20
|
ophyd_async/core/_providers.py,sha256=IO6xlAVQLkbECT96ezgzoDfZ_OhbD9NrDdXvEcyWJkI,13087
|
|
20
21
|
ophyd_async/core/_readable.py,sha256=iBo1YwA5bsAbzLbznvmSnzKDWUuGkLh850Br3BXsgeU,11707
|
|
21
22
|
ophyd_async/core/_settings.py,sha256=_ZccbXKP7j5rG6-bMKk7aaLr8hChdRDAPY_YSR71XXM,4213
|
|
22
|
-
ophyd_async/core/_signal.py,sha256=
|
|
23
|
-
ophyd_async/core/_signal_backend.py,sha256=
|
|
24
|
-
ophyd_async/core/_soft_signal_backend.py,sha256=
|
|
25
|
-
ophyd_async/core/_status.py,sha256=
|
|
26
|
-
ophyd_async/core/
|
|
27
|
-
ophyd_async/core/_utils.py,sha256
|
|
23
|
+
ophyd_async/core/_signal.py,sha256=CXxrwk0IUk-vrJDJLOmbBCeR5no_5fl-bGsF8FASgkc,28426
|
|
24
|
+
ophyd_async/core/_signal_backend.py,sha256=HEPaWVm6KexwyaNqPvOlhMWjOz4P8Z-lOmJYqPDfclw,6460
|
|
25
|
+
ophyd_async/core/_soft_signal_backend.py,sha256=gnpg-hhPSa1a0_SoyijUNPGiAdxD_ARldtXXVIR39ic,6235
|
|
26
|
+
ophyd_async/core/_status.py,sha256=9lP6yZunLlkjueOod8o_wzRA_0PQ1JqdxJnEI6Y0f9A,9863
|
|
27
|
+
ophyd_async/core/_typing.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
+
ophyd_async/core/_utils.py,sha256=-MZ_hynTM2jgP8KTue9Lw6-7w8UakGz1iJVPMOEVaR8,12986
|
|
28
29
|
ophyd_async/core/_yaml_settings.py,sha256=Qojhku9l5kPSkTnEylCRWTe0gpw6S_XP5av5dPpqFgQ,2089
|
|
29
30
|
ophyd_async/epics/__init__.py,sha256=ou4yEaH9VZHz70e8oM614-arLMQvUfQyXhRJsnEpWn8,60
|
|
30
|
-
ophyd_async/epics/motor.py,sha256=
|
|
31
|
+
ophyd_async/epics/motor.py,sha256=RMefrfezxhpiqDNJJ4VKM4_qGM1rJ6cqFU_LetZ5tDU,11774
|
|
31
32
|
ophyd_async/epics/signal.py,sha256=0A-supp9ajr63O6aD7F9oG0-Q26YmRjk-ZGh57-jo1Y,239
|
|
32
33
|
ophyd_async/epics/adandor/__init__.py,sha256=dlitllrAdhvh16PAcVMUSSEytTDNMu6_HuYk8KD1EoY,343
|
|
33
34
|
ophyd_async/epics/adandor/_andor.py,sha256=TijGjNVxuH-P0X7UACPt9eLLQ449DwMyVhbn1kV7Le8,1245
|
|
@@ -39,8 +40,8 @@ ophyd_async/epics/adaravis/_aravis_controller.py,sha256=aqIIj6awD2h870HAT3rPXg3R
|
|
|
39
40
|
ophyd_async/epics/adaravis/_aravis_io.py,sha256=af639qsO2V8NU5I0LgxK8jrxuhXgM6eMxEFJwsCPdjQ,624
|
|
40
41
|
ophyd_async/epics/adcore/__init__.py,sha256=NWNLe2uFqU86P5mYbKINfHHrUVoTHeDN6829-7lBHxE,1631
|
|
41
42
|
ophyd_async/epics/adcore/_core_detector.py,sha256=m821Ji4WVMYd0CI5NOXSkHMiHzkO1aA0mvQzWrig6Z0,2592
|
|
42
|
-
ophyd_async/epics/adcore/_core_io.py,sha256=
|
|
43
|
-
ophyd_async/epics/adcore/_core_logic.py,sha256
|
|
43
|
+
ophyd_async/epics/adcore/_core_io.py,sha256=3ScIswkmtj82beeVfgq3RrRIosfN_oKKVFX9SQtRq2M,10059
|
|
44
|
+
ophyd_async/epics/adcore/_core_logic.py,sha256=-yL21VZya7WcOBS74krwypaJ8GnSvc2J9AdGZ-wpT4g,8960
|
|
44
45
|
ophyd_async/epics/adcore/_core_writer.py,sha256=iQV5xodp63Fsoww1ply5dyQMIysVY_f6_EryzoNkjbk,8383
|
|
45
46
|
ophyd_async/epics/adcore/_hdf_writer.py,sha256=nKXOjVZfM6_BlYv5f1l8nwo7tjenYjx-3AN18gzhUBA,6074
|
|
46
47
|
ophyd_async/epics/adcore/_jpeg_writer.py,sha256=VYpUWQGEjrKG2kiRGQZlBCPXVJ1BzWb9GyB9KhxPWgo,688
|
|
@@ -63,18 +64,18 @@ ophyd_async/epics/advimba/__init__.py,sha256=fPfuakXOwQsFej26gLksqkfBiP6BZlfTyut
|
|
|
63
64
|
ophyd_async/epics/advimba/_vimba.py,sha256=4XlEnsJMGDzHLuYaIDUmaxx0gtOAehn5BKBZMUAzoHQ,1241
|
|
64
65
|
ophyd_async/epics/advimba/_vimba_controller.py,sha256=KSbP4LHqYkCDplpmBk7hdf0Yz9J2vOxWn0fStFFAklA,1942
|
|
65
66
|
ophyd_async/epics/advimba/_vimba_io.py,sha256=E3XlCKLQbGOWho0dQPeD4xeEl5pZGINyYstGD43qNrM,1492
|
|
66
|
-
ophyd_async/epics/core/__init__.py,sha256=
|
|
67
|
-
ophyd_async/epics/core/_aioca.py,sha256=
|
|
68
|
-
ophyd_async/epics/core/_epics_connector.py,sha256
|
|
67
|
+
ophyd_async/epics/core/__init__.py,sha256=fOGvQnGOBdwLqITsEndechnFTEpoK5Ku7L1ueJlL7Mo,682
|
|
68
|
+
ophyd_async/epics/core/_aioca.py,sha256=JBgVMUREozDEWD6wOF2bTPT4qFl0tn57rNwo7HmakUk,13452
|
|
69
|
+
ophyd_async/epics/core/_epics_connector.py,sha256=-jJXU11qtdIhksTxkbx7IHhoG-eIPYWXv2NPQCdUsy8,2681
|
|
69
70
|
ophyd_async/epics/core/_epics_device.py,sha256=wGdR24I7GSPh3HmM7jsWKZhBZgt4IyLrCn4Ut7Wx_xo,510
|
|
70
|
-
ophyd_async/epics/core/_p4p.py,sha256=
|
|
71
|
+
ophyd_async/epics/core/_p4p.py,sha256=4jPb102HZFpu6u0k39d6ZarARQby-6xYT5INVl2ZO1k,16607
|
|
71
72
|
ophyd_async/epics/core/_pvi_connector.py,sha256=SfKkZqGCRvJJtQpJQzmfuLJQqOge0wBsMeuTSQ-KPjs,5553
|
|
72
|
-
ophyd_async/epics/core/_signal.py,sha256=
|
|
73
|
-
ophyd_async/epics/core/_util.py,sha256=
|
|
73
|
+
ophyd_async/epics/core/_signal.py,sha256=cPYEQ4DK-btrb-wEm6UH5xUYr8Exg2U5GQKODT-WHjg,6293
|
|
74
|
+
ophyd_async/epics/core/_util.py,sha256=Gk2NwQyz6D9wRZ9hIPuzq9si2qLDzkZ5O9gAQFqd5gs,3559
|
|
74
75
|
ophyd_async/epics/demo/__init__.py,sha256=WR2M3D8dbHcisJW2OIU2ManZu5SWez8ytZEp4jSBfDY,416
|
|
75
76
|
ophyd_async/epics/demo/__main__.py,sha256=o6M0FSWduPHe2lN9yNEdsXb48NckSd54-XJGoLe20Pc,1116
|
|
76
77
|
ophyd_async/epics/demo/_ioc.py,sha256=UtwTReKTR-1_tPIhdGBr7OxP_Vqi6xWyCcFABd9BYPY,1040
|
|
77
|
-
ophyd_async/epics/demo/_motor.py,sha256=
|
|
78
|
+
ophyd_async/epics/demo/_motor.py,sha256=Obljz5QUaKUxnzT5g0p3rsn0oK_-LHRwTDDbq1KcgOc,3175
|
|
78
79
|
ophyd_async/epics/demo/_point_detector.py,sha256=5m00mBh5knkChnuZD3JNDPaHIGLN0g0toksYm_hpFKo,1398
|
|
79
80
|
ophyd_async/epics/demo/_point_detector_channel.py,sha256=UkidtyaHR_u00lxLb64F7xYhqJowFQQe6kUXKMPHDqE,721
|
|
80
81
|
ophyd_async/epics/demo/_stage.py,sha256=KPnwr5EX8f_0xxkNWT-70a0AqB0D9DoiTbxMmy0iOTo,485
|
|
@@ -82,10 +83,10 @@ ophyd_async/epics/demo/motor.db,sha256=3xb6WTXo4crrvk-M8Y16G9pUidp27vD5vIKKBpLTU
|
|
|
82
83
|
ophyd_async/epics/demo/point_detector.db,sha256=8kBa3XKpmfXCxetT4tq5_RFXa_XqS1Z2ZNzsa2AtLds,1366
|
|
83
84
|
ophyd_async/epics/demo/point_detector_channel.db,sha256=FZ9H6HjqplhcF2jgimv_dT1nn-CBlfjs7Y--iCfHp5Y,632
|
|
84
85
|
ophyd_async/epics/odin/__init__.py,sha256=7kRqVzwoD8PVtp7Nj9iQWlgbLeoWE_8oiq-B0kixwTE,93
|
|
85
|
-
ophyd_async/epics/odin/_odin_io.py,sha256=
|
|
86
|
+
ophyd_async/epics/odin/_odin_io.py,sha256=jnFeE9Lqq-LTDBeIbsrtmfJuu_1jlQBXikvBI0ZEAOA,6522
|
|
86
87
|
ophyd_async/epics/pmac/__init__.py,sha256=GqJTiJudqE9pu050ZNED09F9tKRfazn0wBsojsMH2gg,273
|
|
87
|
-
ophyd_async/epics/pmac/_pmac_io.py,sha256=
|
|
88
|
-
ophyd_async/epics/pmac/_pmac_trajectory.py,sha256=
|
|
88
|
+
ophyd_async/epics/pmac/_pmac_io.py,sha256=oiIKEIYSeGoay5BFXPaZEx5xpF7H9aI7hGRhSx_R6BE,4918
|
|
89
|
+
ophyd_async/epics/pmac/_pmac_trajectory.py,sha256=MAn_6r7y98swUuYaXbG5yFAI70Z33iJYEI2JH6Hbsy0,9291
|
|
89
90
|
ophyd_async/epics/pmac/_pmac_trajectory_generation.py,sha256=3IIxXa0r6-2uNnILKLGxp3xosOZx8MubKF-F_OM7uaw,27331
|
|
90
91
|
ophyd_async/epics/pmac/_utils.py,sha256=MfuY6NicT7wkwVIWAZkWoCu1ZoSzy6jda1wLK9XAOLA,8614
|
|
91
92
|
ophyd_async/epics/testing/__init__.py,sha256=aTIv4D2DYrpnGco5RQF8QuLG1SfFkIlTyM2uYEKXltA,522
|
|
@@ -98,20 +99,20 @@ ophyd_async/fastcs/core.py,sha256=pL_srtTrfuoBHUjDFpxES92owFq9M4Jve0Skk1oeuFA,51
|
|
|
98
99
|
ophyd_async/fastcs/eiger/__init__.py,sha256=RxwOFjERKy5tUD_IDGCGuMh716FaZgCq7R9elPixBwo,312
|
|
99
100
|
ophyd_async/fastcs/eiger/_eiger.py,sha256=jo3K5dM3Co_RDYIyO6poCVDqp2g_1z4MqnYftwnMhUk,1103
|
|
100
101
|
ophyd_async/fastcs/eiger/_eiger_controller.py,sha256=Cucj-1M-1CaxSJxHZmHs3f_OXwtTIspcqUFhRNGzn_E,2361
|
|
101
|
-
ophyd_async/fastcs/eiger/_eiger_io.py,sha256=
|
|
102
|
+
ophyd_async/fastcs/eiger/_eiger_io.py,sha256=mnoBllyltac2rJRMPF59x2ONAYxu3_Dqez7O-7HvYA0,1892
|
|
102
103
|
ophyd_async/fastcs/jungfrau/__init__.py,sha256=xwTaPiqvtyyljP2acz07FSlUW79Io8EsKks9ENgbumA,765
|
|
103
104
|
ophyd_async/fastcs/jungfrau/_controller.py,sha256=TvUxRuP3NJFTOcyHeMn5-1Va7HzOJswWCYSGdp1NMFI,5778
|
|
104
105
|
ophyd_async/fastcs/jungfrau/_jungfrau.py,sha256=KAHCmRHMyzIh-r2JXVJcQOGLkCOOdW5Mao_KChITO2s,929
|
|
105
|
-
ophyd_async/fastcs/jungfrau/_signals.py,sha256=
|
|
106
|
+
ophyd_async/fastcs/jungfrau/_signals.py,sha256=MIFd44I0M9RDOdoODXQ9qH4aVpfmqSNtqCQVkjtVFy0,2585
|
|
106
107
|
ophyd_async/fastcs/jungfrau/_utils.py,sha256=QpdWbPT_31Jwyi7INFMRq9hncSZIK_4J3l6wpuppzn8,2875
|
|
107
108
|
ophyd_async/fastcs/odin/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
|
|
108
109
|
ophyd_async/fastcs/panda/__init__.py,sha256=GbnPqH_13wvyPK1CvRHGAViamKVWHY9n-sTmfAdcnMA,1229
|
|
109
|
-
ophyd_async/fastcs/panda/_block.py,sha256=
|
|
110
|
+
ophyd_async/fastcs/panda/_block.py,sha256=NCz05yZliJmbeUxQHr6bqu-a37vZKqKQRA3COsIdbu4,3322
|
|
110
111
|
ophyd_async/fastcs/panda/_control.py,sha256=lUogRZMkQk4eZFghTuhwSDLqxR16-DQvx9MyFpg10Qc,1387
|
|
111
112
|
ophyd_async/fastcs/panda/_hdf_panda.py,sha256=tL_OWHxlMQcMZGq9sxHLSeag6hP9MRIbTPn1W0u0iNI,1237
|
|
112
113
|
ophyd_async/fastcs/panda/_table.py,sha256=maKGoKypEuYqTSVWGgDO6GMEKOtlDm9Dn5YiYdBzu6c,2486
|
|
113
114
|
ophyd_async/fastcs/panda/_trigger.py,sha256=iBxW4YMfRYrpg7AoQaHb7rHKCE95UbSxguRuR9FOgw8,7610
|
|
114
|
-
ophyd_async/fastcs/panda/_writer.py,sha256=
|
|
115
|
+
ophyd_async/fastcs/panda/_writer.py,sha256=j3GlbbUJ9h4mCKjg6oxSCn3NiJWwWL8xEhz0YiEBIcI,6148
|
|
115
116
|
ophyd_async/plan_stubs/__init__.py,sha256=sRe1Jna_6i7aKjE3pPzsP4iNMWeWdtiptLnOq9pov9M,619
|
|
116
117
|
ophyd_async/plan_stubs/_ensure_connected.py,sha256=YR6VRj7koccJ4x35NV-Ugl4ZbxgAoGN9PjVIjhv0gpw,894
|
|
117
118
|
ophyd_async/plan_stubs/_fly.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -136,10 +137,10 @@ ophyd_async/tango/core/__init__.py,sha256=cgO5GWfEZqjH0Aj9KUeoZwxMrOQOTn9V9kaYel
|
|
|
136
137
|
ophyd_async/tango/core/_base_device.py,sha256=X5ncxaWKOfRhhqPyT8tmTBJGc3ldGthw1ZCe_j_M2Tg,5088
|
|
137
138
|
ophyd_async/tango/core/_converters.py,sha256=xI_RhMR8dY6IVORUZVVCL9LdYnEE6TA6BBPX_lTu06w,2183
|
|
138
139
|
ophyd_async/tango/core/_signal.py,sha256=8mIxRVEVjhDN33LDbbKZWGMUYn9Gl5ZMEIYw6GSBTUE,5569
|
|
139
|
-
ophyd_async/tango/core/_tango_transport.py,sha256=
|
|
140
|
+
ophyd_async/tango/core/_tango_transport.py,sha256=lknp46-lJwkQ1ego7meq6jOgyoIOYOVGL76aad91rHA,36710
|
|
140
141
|
ophyd_async/tango/core/_utils.py,sha256=pwT7V1DNWSyPOSzvDZ6OsDZTjaV-pAeDLDlmgtHVcNM,1673
|
|
141
142
|
ophyd_async/tango/demo/__init__.py,sha256=_j-UicTnckuIBp8PnieFMOMnLFGivnaKdmo9o0hYtzc,256
|
|
142
|
-
ophyd_async/tango/demo/_counter.py,sha256=
|
|
143
|
+
ophyd_async/tango/demo/_counter.py,sha256=01dZBMh9C1r2lp4qdXyfBPTz3kic_k2PbDKt04PxCFo,1178
|
|
143
144
|
ophyd_async/tango/demo/_detector.py,sha256=X5YWHAjukKZ7iYF1fBNle4CBDj1X5rvj0lnPMOcnRCU,1340
|
|
144
145
|
ophyd_async/tango/demo/_mover.py,sha256=FyG9g1TLaWoqjbLblqWK8inMuDcNVlioq0MIeD5npz4,2913
|
|
145
146
|
ophyd_async/tango/demo/_tango/__init__.py,sha256=FfONT7vM49nNo3a1Lv-LcMZO9EHv6bv91yY-RnxIib4,85
|
|
@@ -154,8 +155,8 @@ ophyd_async/testing/_one_of_everything.py,sha256=U9ui7B-iNHDM3H3hIWUuaCb8Gc2eLlU
|
|
|
154
155
|
ophyd_async/testing/_single_derived.py,sha256=5-HOTzgePcZ354NK_ssVpyIbJoJmKyjVQCxSwQXUC-4,2730
|
|
155
156
|
ophyd_async/testing/_utils.py,sha256=zClRo5ve8RGia7wQnby41W-Zprj-slOA5da1LfYnuhw,45
|
|
156
157
|
ophyd_async/testing/_wait_for_pending.py,sha256=YZAR48n-CW0GsPey3zFRzMJ4byDAr3HvMIoawjmTrHw,732
|
|
157
|
-
ophyd_async-0.
|
|
158
|
-
ophyd_async-0.
|
|
159
|
-
ophyd_async-0.
|
|
160
|
-
ophyd_async-0.
|
|
161
|
-
ophyd_async-0.
|
|
158
|
+
ophyd_async-0.15.dist-info/licenses/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
|
|
159
|
+
ophyd_async-0.15.dist-info/METADATA,sha256=wwFA5EcCu6U5BWhZAIu-rMMqhlaYgqE07MOnNfQusd0,5701
|
|
160
|
+
ophyd_async-0.15.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
161
|
+
ophyd_async-0.15.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
|
|
162
|
+
ophyd_async-0.15.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|