ophyd-async 0.12.2__py3-none-any.whl → 0.12.3__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 CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.12.2'
21
- __version_tuple__ = version_tuple = (0, 12, 2)
20
+ __version__ = version = '0.12.3'
21
+ __version_tuple__ = version_tuple = (0, 12, 3)
@@ -33,7 +33,6 @@ from ._utils import (
33
33
  NDAttributeParam,
34
34
  NDAttributePv,
35
35
  NDAttributePvDbrType,
36
- stop_busy_record,
37
36
  )
38
37
 
39
38
  __all__ = [
@@ -64,7 +63,6 @@ __all__ = [
64
63
  "NDAttributePv",
65
64
  "NDAttributeParam",
66
65
  "NDAttributeDataType",
67
- "stop_busy_record",
68
66
  "NDAttributePvDbrType",
69
67
  "NDCBFlushOnSoftTrgMode",
70
68
  "NDPluginCBIO",
@@ -10,6 +10,7 @@ from ophyd_async.core import (
10
10
  observe_value,
11
11
  set_and_wait_for_value,
12
12
  )
13
+ from ophyd_async.epics.core import stop_busy_record
13
14
 
14
15
  from ._core_io import (
15
16
  ADBaseIO,
@@ -18,7 +19,7 @@ from ._core_io import (
18
19
  NDCBFlushOnSoftTrgMode,
19
20
  NDPluginCBIO,
20
21
  )
21
- from ._utils import ADImageMode, stop_busy_record
22
+ from ._utils import ADImageMode
22
23
 
23
24
  # Default set of states that we should consider "good" i.e. the acquisition
24
25
  # is complete and went well
@@ -16,10 +16,10 @@ from ophyd_async.core._providers import DatasetDescriber, PathInfo, PathProvider
16
16
  from ophyd_async.core._signal import (
17
17
  observe_value,
18
18
  set_and_wait_for_value,
19
- wait_for_value,
20
19
  )
21
20
  from ophyd_async.core._status import AsyncStatus
22
21
  from ophyd_async.core._utils import DEFAULT_TIMEOUT, error_if_none
22
+ from ophyd_async.epics.core import stop_busy_record
23
23
 
24
24
  # from ophyd_async.epics.adcore._core_logic import ADBaseDatasetDescriber
25
25
  from ._core_io import (
@@ -213,8 +213,7 @@ class ADWriter(DetectorWriter, Generic[NDFileIOT]):
213
213
 
214
214
  async def close(self):
215
215
  # Already done a caput callback in _capture_status, so can't do one here
216
- await self.fileio.capture.set(False, wait=False)
217
- await wait_for_value(self.fileio.capture, False, DEFAULT_TIMEOUT)
216
+ await stop_busy_record(self.fileio.capture, False, timeout=DEFAULT_TIMEOUT)
218
217
  if self._capture_status and not self._capture_status.done:
219
218
  # We kicked off an open, so wait for it to return
220
219
  await self._capture_status
@@ -1,14 +1,10 @@
1
1
  from dataclasses import dataclass
2
2
 
3
3
  from ophyd_async.core import (
4
- DEFAULT_TIMEOUT,
5
- SignalDatatypeT,
6
4
  SignalR,
7
- SignalRW,
8
5
  StrictEnum,
9
6
  SubsetEnum,
10
7
  SupersetEnum,
11
- wait_for_value,
12
8
  )
13
9
 
14
10
 
@@ -134,12 +130,3 @@ class NDAttributeParam:
134
130
  datatype: NDAttributeDataType # The datatype of the parameter
135
131
  addr: int = 0 # The address as seen in the INP link of the record
136
132
  description: str = "" # A description that appears in the HDF file as an attribute
137
-
138
-
139
- async def stop_busy_record(
140
- signal: SignalRW[SignalDatatypeT],
141
- value: SignalDatatypeT,
142
- timeout: float = DEFAULT_TIMEOUT,
143
- ) -> None:
144
- await signal.set(value, wait=False)
145
- await wait_for_value(signal, value, timeout=timeout)
@@ -10,6 +10,7 @@ from ._signal import (
10
10
  epics_signal_w,
11
11
  epics_signal_x,
12
12
  )
13
+ from ._util import stop_busy_record
13
14
 
14
15
  __all__ = [
15
16
  "PviDeviceConnector",
@@ -23,4 +24,5 @@ __all__ = [
23
24
  "epics_signal_rw_rbv",
24
25
  "epics_signal_w",
25
26
  "epics_signal_x",
27
+ "stop_busy_record",
26
28
  ]
@@ -4,13 +4,16 @@ from typing import Any, TypeVar, get_args, get_origin
4
4
  import numpy as np
5
5
 
6
6
  from ophyd_async.core import (
7
+ DEFAULT_TIMEOUT,
7
8
  SignalBackend,
8
9
  SignalDatatypeT,
10
+ SignalRW,
9
11
  StrictEnum,
10
12
  SubsetEnum,
11
13
  SupersetEnum,
12
14
  get_dtype,
13
15
  get_enum_cls,
16
+ wait_for_value,
14
17
  )
15
18
 
16
19
  T = TypeVar("T")
@@ -76,3 +79,12 @@ class EpicsSignalBackend(SignalBackend[SignalDatatypeT]):
76
79
  self.read_pv = read_pv
77
80
  self.write_pv = write_pv
78
81
  super().__init__(datatype)
82
+
83
+
84
+ async def stop_busy_record(
85
+ signal: SignalRW[SignalDatatypeT],
86
+ value: SignalDatatypeT,
87
+ timeout: float = DEFAULT_TIMEOUT,
88
+ ) -> None:
89
+ await signal.set(value, wait=False)
90
+ await wait_for_value(signal, value, timeout=timeout)
@@ -6,6 +6,7 @@ from event_model import DataKey # type: ignore
6
6
 
7
7
  from ophyd_async.core import (
8
8
  DEFAULT_TIMEOUT,
9
+ AsyncStatus,
9
10
  DetectorWriter,
10
11
  Device,
11
12
  DeviceVector,
@@ -21,6 +22,7 @@ from ophyd_async.epics.core import (
21
22
  epics_signal_r,
22
23
  epics_signal_rw,
23
24
  epics_signal_rw_rbv,
25
+ stop_busy_record,
24
26
  )
25
27
 
26
28
 
@@ -68,10 +70,15 @@ class Odin(Device):
68
70
 
69
71
  self.file_path = epics_signal_rw_rbv(str, f"{prefix}FilePath")
70
72
  self.file_name = epics_signal_rw_rbv(str, f"{prefix}FileName")
73
+ self.id = epics_signal_r(str, f"{prefix}AcquisitionID_RBV")
71
74
 
72
75
  self.num_frames_chunks = epics_signal_rw(int, prefix + "NumFramesChunks")
73
76
  self.meta_active = epics_signal_r(str, prefix + "META:AcquisitionActive_RBV")
74
77
  self.meta_writing = epics_signal_r(str, prefix + "META:Writing_RBV")
78
+ self.meta_file_name = epics_signal_r(str, f"{prefix}META:FileName_RBV")
79
+ self.meta_stop = epics_signal_rw(bool, f"{prefix}META:Stop")
80
+
81
+ self.fan_ready = epics_signal_rw(float, f"{prefix}FAN:StateReady_RBV")
75
82
 
76
83
  self.data_type = epics_signal_rw_rbv(str, f"{prefix}DataType")
77
84
 
@@ -88,6 +95,7 @@ class OdinWriter(DetectorWriter):
88
95
  self._drv = odin_driver
89
96
  self._path_provider = path_provider
90
97
  self._eiger_bit_depth = Reference(eiger_bit_depth)
98
+ self._capture_status: AsyncStatus | None = None
91
99
  super().__init__()
92
100
 
93
101
  async def open(self, name: str, exposures_per_event: int = 1) -> dict[str, DataKey]:
@@ -95,17 +103,23 @@ class OdinWriter(DetectorWriter):
95
103
  self._exposures_per_event = exposures_per_event
96
104
 
97
105
  await asyncio.gather(
98
- self._drv.file_path.set(str(info.directory_path)),
99
- self._drv.file_name.set(info.filename),
100
106
  self._drv.data_type.set(f"UInt{await self._eiger_bit_depth().get_value()}"),
101
107
  self._drv.num_to_capture.set(0),
108
+ self._drv.file_path.set(str(info.directory_path)),
109
+ self._drv.file_name.set(info.filename),
102
110
  )
103
111
 
104
- await wait_for_value(self._drv.meta_active, "Active", timeout=DEFAULT_TIMEOUT)
112
+ await asyncio.gather(
113
+ wait_for_value(
114
+ self._drv.meta_file_name, info.filename, timeout=DEFAULT_TIMEOUT
115
+ ),
116
+ wait_for_value(self._drv.id, info.filename, timeout=DEFAULT_TIMEOUT),
117
+ wait_for_value(self._drv.meta_active, "Active", timeout=DEFAULT_TIMEOUT),
118
+ )
105
119
 
106
- await self._drv.capture.set(
107
- Writing.CAPTURE, wait=False
108
- ) # TODO: Investigate why we do not get a put callback when setting capture pv https://github.com/bluesky/ophyd-async/issues/866
120
+ self._capture_status = await set_and_wait_for_value(
121
+ self._drv.capture, Writing.CAPTURE, wait_for_set_completion=False
122
+ )
109
123
 
110
124
  await asyncio.gather(
111
125
  wait_for_value(self._drv.capture_rbv, "Capturing", timeout=DEFAULT_TIMEOUT),
@@ -146,4 +160,8 @@ class OdinWriter(DetectorWriter):
146
160
  raise NotImplementedError()
147
161
 
148
162
  async def close(self) -> None:
149
- await set_and_wait_for_value(self._drv.capture, Writing.DONE)
163
+ await stop_busy_record(self._drv.capture, Writing.DONE, timeout=DEFAULT_TIMEOUT)
164
+ await self._drv.meta_stop.set(True, wait=True)
165
+ if self._capture_status and not self._capture_status.done:
166
+ await self._capture_status
167
+ self._capture_status = None
@@ -1,3 +1,3 @@
1
- from ._pmac_io import PmacAxisIO, PmacCoordIO, PmacIO, PmacTrajectoryIO
1
+ from ._pmac_io import PmacAxisAssignmentIO, PmacCoordIO, PmacIO, PmacTrajectoryIO
2
2
 
3
- __all__ = ["PmacAxisIO", "PmacCoordIO", "PmacIO", "PmacTrajectoryIO"]
3
+ __all__ = ["PmacAxisAssignmentIO", "PmacCoordIO", "PmacIO", "PmacTrajectoryIO"]
@@ -3,6 +3,7 @@ from collections.abc import Sequence
3
3
  import numpy as np
4
4
 
5
5
  from ophyd_async.core import Array1D, Device, DeviceVector, StandardReadable
6
+ from ophyd_async.epics import motor
6
7
  from ophyd_async.epics.core import epics_signal_r, epics_signal_rw
7
8
 
8
9
  CS_LETTERS = "ABCUVWXYZ"
@@ -13,52 +14,53 @@ class PmacTrajectoryIO(StandardReadable):
13
14
 
14
15
  def __init__(self, prefix: str, name: str = "") -> None:
15
16
  self.time_array = epics_signal_rw(
16
- Array1D[np.float64], prefix + ":ProfileTimeArray"
17
+ Array1D[np.float64], prefix + "ProfileTimeArray"
17
18
  )
18
- self.user_array = epics_signal_rw(Array1D[np.int32], prefix + ":UserArray")
19
+ self.user_array = epics_signal_rw(Array1D[np.int32], prefix + "UserArray")
19
20
  # 1 indexed CS axes so we can index into them from the compound motor input link
20
21
  self.positions = DeviceVector(
21
22
  {
22
23
  i + 1: epics_signal_rw(
23
- Array1D[np.float64], f"{prefix}:{letter}:Positions"
24
+ Array1D[np.float64], f"{prefix}{letter}:Positions"
24
25
  )
25
26
  for i, letter in enumerate(CS_LETTERS)
26
27
  }
27
28
  )
28
29
  self.use_axis = DeviceVector(
29
30
  {
30
- i + 1: epics_signal_rw(bool, f"{prefix}:{letter}:UseAxis")
31
+ i + 1: epics_signal_rw(bool, f"{prefix}{letter}:UseAxis")
31
32
  for i, letter in enumerate(CS_LETTERS)
32
33
  }
33
34
  )
34
35
  self.velocities = DeviceVector(
35
36
  {
36
37
  i + 1: epics_signal_rw(
37
- Array1D[np.float64], f"{prefix}:{letter}:Velocities"
38
+ Array1D[np.float64], f"{prefix}{letter}:Velocities"
38
39
  )
39
40
  for i, letter in enumerate(CS_LETTERS)
40
41
  }
41
42
  )
42
- self.points_to_build = epics_signal_rw(int, prefix + ":ProfilePointsToBuild")
43
- self.build_profile = epics_signal_rw(bool, prefix + ":ProfileBuild")
44
- self.execute_profile = epics_signal_rw(bool, prefix + ":ProfileExecute")
45
- self.scan_percent = epics_signal_r(float, prefix + ":TscanPercent_RBV")
46
- self.abort_profile = epics_signal_rw(bool, prefix + ":ProfileAbort")
47
- self.profile_cs_name = epics_signal_rw(str, prefix + ":ProfileCsName")
48
- self.calculate_velocities = epics_signal_rw(bool, prefix + ":ProfileCalcVel")
43
+ self.points_to_build = epics_signal_rw(int, prefix + "ProfilePointsToBuild")
44
+ self.build_profile = epics_signal_rw(bool, prefix + "ProfileBuild")
45
+ self.execute_profile = epics_signal_rw(bool, prefix + "ProfileExecute")
46
+ self.scan_percent = epics_signal_r(float, prefix + "TscanPercent_RBV")
47
+ self.abort_profile = epics_signal_rw(bool, prefix + "ProfileAbort")
48
+ self.profile_cs_name = epics_signal_rw(str, prefix + "ProfileCsName")
49
+ self.calculate_velocities = epics_signal_rw(bool, prefix + "ProfileCalcVel")
49
50
 
50
51
  super().__init__(name=name)
51
52
 
52
53
 
53
- class PmacAxisIO(Device):
54
+ class PmacAxisAssignmentIO(Device):
54
55
  """A Device that (direct) moves a PMAC Coordinate System Motor.
55
56
 
56
57
  Note that this does not go through a motor record.
57
58
  """
58
59
 
59
60
  def __init__(self, prefix: str, name: str = "") -> None:
60
- self.cs_axis_letter = epics_signal_r(str, f"{prefix}:CsAxis_RBV")
61
- self.cs_port = epics_signal_r(str, f"{prefix}:CsPort_RBV")
61
+ self.cs_axis_letter = epics_signal_r(str, f"{prefix}CsAxis_RBV")
62
+ self.cs_port = epics_signal_r(str, f"{prefix}CsPort_RBV")
63
+ self.cs_number = epics_signal_r(int, f"{prefix}CsRaw_RBV")
62
64
  super().__init__(name=name)
63
65
 
64
66
 
@@ -66,12 +68,10 @@ class PmacCoordIO(Device):
66
68
  """A Device that represents a Pmac Coordinate System."""
67
69
 
68
70
  def __init__(self, prefix: str, name: str = "") -> None:
69
- self.defer_moves = epics_signal_r(bool, f"{prefix}:DeferMoves")
71
+ self.defer_moves = epics_signal_rw(bool, f"{prefix}DeferMoves")
70
72
  self.cs_axis_setpoint = DeviceVector(
71
73
  {
72
- i + 1: epics_signal_rw(
73
- Array1D[np.float64], f"{prefix}:M{i + 1}:DirectDemand"
74
- )
74
+ i + 1: epics_signal_rw(np.float64, f"{prefix}M{i + 1}:DirectDemand")
75
75
  for i in range(len(CS_LETTERS))
76
76
  }
77
77
  )
@@ -84,15 +84,25 @@ class PmacIO(Device):
84
84
  def __init__(
85
85
  self,
86
86
  prefix: str,
87
- axis_nums: Sequence[int],
87
+ raw_motors: Sequence[motor.Motor],
88
88
  coord_nums: Sequence[int],
89
89
  name: str = "",
90
90
  ) -> None:
91
- self.axis = DeviceVector(
92
- {axis: PmacAxisIO(f"{prefix}:M{axis}") for axis in axis_nums}
91
+ motor_prefixes = [motor.motor_egu.source.split(".")[0] for motor in raw_motors]
92
+
93
+ self.assignment = DeviceVector(
94
+ {
95
+ i: PmacAxisAssignmentIO(motor_prefix)
96
+ for i, motor_prefix in enumerate(motor_prefixes)
97
+ }
93
98
  )
99
+
100
+ # Public Look up for motor to axis assignment DeviceVector index
101
+
102
+ self.motor_assignment_index = {motor: i for i, motor in enumerate(raw_motors)}
103
+
94
104
  self.coord = DeviceVector(
95
- {coord: PmacCoordIO(f"{prefix}:CS{coord}") for coord in coord_nums}
105
+ {coord: PmacCoordIO(prefix=f"{prefix}CS{coord}:") for coord in coord_nums}
96
106
  )
97
107
  # Trajectory PVs have the same prefix as the pmac device
98
108
  self.trajectory = PmacTrajectoryIO(prefix)
@@ -33,7 +33,7 @@ class EigerDetector(StandardDetector):
33
33
  OdinWriter(
34
34
  path_provider,
35
35
  self.odin,
36
- self.drv.detector.bit_depth_readout,
36
+ self.drv.detector.bit_depth_image,
37
37
  ),
38
38
  name=name,
39
39
  )
@@ -23,11 +23,12 @@ class EigerStreamIO(Device):
23
23
 
24
24
 
25
25
  class EigerDetectorIO(Device):
26
- bit_depth_readout: SignalR[int]
26
+ bit_depth_image: SignalR[int]
27
27
  state: SignalR[str]
28
28
  count_time: SignalRW[float]
29
29
  frame_time: SignalRW[float]
30
30
  nimages: SignalRW[int]
31
+ ntrigger: SignalRW[int]
31
32
  nexpi: SignalRW[int]
32
33
  trigger_mode: SignalRW[str]
33
34
  roi_mode: SignalRW[str]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ophyd-async
3
- Version: 0.12.2
3
+ Version: 0.12.3
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
@@ -52,7 +52,7 @@ Requires-Dist: stamina>=23.1.0
52
52
  Provides-Extra: sim
53
53
  Requires-Dist: h5py; extra == "sim"
54
54
  Provides-Extra: ca
55
- Requires-Dist: aioca>=1.6; extra == "ca"
55
+ Requires-Dist: aioca>=2.0a4; extra == "ca"
56
56
  Provides-Extra: pva
57
57
  Requires-Dist: p4p>=4.2.0; extra == "pva"
58
58
  Provides-Extra: tango
@@ -1,7 +1,7 @@
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=zZwBOgFsGuwXoMQE3ufj9-wsWZuT7V5jwWvKP04rOSE,513
4
+ ophyd_async/_version.py,sha256=QKKPnNa5xCXCbNQc8EGW9uiKKjn_cC1ywc6jE5v1hDo,513
5
5
  ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  ophyd_async/core/__init__.py,sha256=RtYk6FdJxc7lxoSReRV1D7weTRYFu9ylhNNd3DyN904,4752
7
7
  ophyd_async/core/_derived_signal.py,sha256=TuZza_j3J1Bw4QSqBYB9Ta2FyQP5BycO3nSHVtJ890Q,13015
@@ -35,16 +35,16 @@ ophyd_async/epics/adaravis/__init__.py,sha256=ZQaJVQiwcQn9hUZADrYgBE1sDfFEwjhVBJ
35
35
  ophyd_async/epics/adaravis/_aravis.py,sha256=Ju2wuebz9_ovl-Kza39s5VQ1pV-Omt_BaIWKqP4kcGA,1315
36
36
  ophyd_async/epics/adaravis/_aravis_controller.py,sha256=WiFR7_FAAu6_88zG-yzGLsR9YcO4L6xR73Wnjw9n0i4,1908
37
37
  ophyd_async/epics/adaravis/_aravis_io.py,sha256=af5RxeXF2ligvAXwMNMKHA4QHTR_WmNFz-f18qD2dbg,855
38
- ophyd_async/epics/adcore/__init__.py,sha256=sDvQO3TshdXfDvLGqzsSNJT95Wk7tUAmOowDwB00Td0,1625
38
+ ophyd_async/epics/adcore/__init__.py,sha256=L7muAe24Uo-ow0CoUTf_ooI2ntA1ZS57TTFimJeBQJ8,1579
39
39
  ophyd_async/epics/adcore/_core_detector.py,sha256=mRDaHgXCTZF-MIVsU1csoQx9jObutYDpMWayugx2-jI,2631
40
40
  ophyd_async/epics/adcore/_core_io.py,sha256=c1GqAUdv8lAQjklbKHtraLMhPOWEttDCsH9ow7M5I0U,7690
41
- ophyd_async/epics/adcore/_core_logic.py,sha256=3xZF06o6h1XD3FfBDzkZKOGBHepOAwIzZSZ3SwrS34w,8862
42
- ophyd_async/epics/adcore/_core_writer.py,sha256=6OEU8fcn7ATd3dml_aBZ_LmFgVGcdbNFyg1Sx2zqV7s,8522
41
+ ophyd_async/epics/adcore/_core_logic.py,sha256=eMS9mIF6Ef2oXg1PmzMyyVviAbhujzYGbZZGq9vzf5k,8896
42
+ ophyd_async/epics/adcore/_core_writer.py,sha256=pcnJhMHuWeZvlCyGSlW1QE_bNZjGbMuI8IsYEVHDtL0,8507
43
43
  ophyd_async/epics/adcore/_hdf_writer.py,sha256=AvCv_5dd2HdQoE12_CR6vH2hig2EdEIWklOu6CbPVlc,5816
44
44
  ophyd_async/epics/adcore/_jpeg_writer.py,sha256=VYpUWQGEjrKG2kiRGQZlBCPXVJ1BzWb9GyB9KhxPWgo,688
45
45
  ophyd_async/epics/adcore/_single_trigger.py,sha256=tFGLT1b_rZzAvbqWP-hyCccxJMRY26T5IER-VAqKXmc,1275
46
46
  ophyd_async/epics/adcore/_tiff_writer.py,sha256=197Ky9ltsJjUKNwl8_OAuoCe8dWIc7zCFs7wautwC7Y,689
47
- ophyd_async/epics/adcore/_utils.py,sha256=HOI-4a1m184QIn8wVQxLTxovHWfbFINUtttQ2E-OA3o,4187
47
+ ophyd_async/epics/adcore/_utils.py,sha256=eujvN4Tip_lIM2gYkbwkH_0cLRQSrQkylQOXUlpCo4k,3868
48
48
  ophyd_async/epics/adkinetix/__init__.py,sha256=A9xq3lGMrmza9lfukRixC0Up_kUDVFII8JguLr2x7Bw,308
49
49
  ophyd_async/epics/adkinetix/_kinetix.py,sha256=zZv0JZ8i1RSx7KBDn_1HGNOY0BoIP81mRK5TKq7d4eA,1302
50
50
  ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=UI-XcQpGj7jq-_e1ceoMOZkyfejwG6H5wX-Ntp_NJjg,1481
@@ -61,14 +61,14 @@ ophyd_async/epics/advimba/__init__.py,sha256=Onoe4N1DgjUZ0-00krm2-iJPXnNF8nPGs6I
61
61
  ophyd_async/epics/advimba/_vimba.py,sha256=4XlEnsJMGDzHLuYaIDUmaxx0gtOAehn5BKBZMUAzoHQ,1241
62
62
  ophyd_async/epics/advimba/_vimba_controller.py,sha256=v0av2bGnaJ01w9Igksupt2IlkuBEFlAeRCPOVma-Xa4,1980
63
63
  ophyd_async/epics/advimba/_vimba_io.py,sha256=cb2Nfp05fBZAcNVXpz-rqRIRS-TiZW5DPUJOmaFyAw0,1589
64
- ophyd_async/epics/core/__init__.py,sha256=8NoQxEEc2Ny_L9nrD2fnGSf_2gJr1wCR1LwUeLNcIJo,588
64
+ ophyd_async/epics/core/__init__.py,sha256=q73i4aJ_0HApVNmf3eAw-q30XuazAyZW2MW5TXk-pOY,648
65
65
  ophyd_async/epics/core/_aioca.py,sha256=elNR5c2-YcDUoyzuvTEVURoqx92wkVoMDNjwjeZ0WmA,13136
66
66
  ophyd_async/epics/core/_epics_connector.py,sha256=S4z_wbj-aogVcjqCyUgjhcq5Y4gDC7y6wXbsSz2nODY,1918
67
67
  ophyd_async/epics/core/_epics_device.py,sha256=wGdR24I7GSPh3HmM7jsWKZhBZgt4IyLrCn4Ut7Wx_xo,510
68
68
  ophyd_async/epics/core/_p4p.py,sha256=uWh3oWPme74G4YfeJ6k8ZlHdKOwcf8Xp1J82b9aa_JI,16407
69
69
  ophyd_async/epics/core/_pvi_connector.py,sha256=nAReSiasZA3j_0f8XhuWVO4_ck0MrusnKR9Jg-RT-ok,5584
70
70
  ophyd_async/epics/core/_signal.py,sha256=qAEe8mgXRMgBTcxuwN-KDGSRtJTwrhygThTDe5vA3EQ,5916
71
- ophyd_async/epics/core/_util.py,sha256=G2kYfwsQ5iS3EgGrGuPA8bgC_PEN_XxO28oBurIqJFQ,2522
71
+ ophyd_async/epics/core/_util.py,sha256=wcbZ6Qa2qqme6AlKAfxGI68EMEPEMJSl7BiDRz3mrEg,2820
72
72
  ophyd_async/epics/demo/__init__.py,sha256=WR2M3D8dbHcisJW2OIU2ManZu5SWez8ytZEp4jSBfDY,416
73
73
  ophyd_async/epics/demo/__main__.py,sha256=o6M0FSWduPHe2lN9yNEdsXb48NckSd54-XJGoLe20Pc,1116
74
74
  ophyd_async/epics/demo/_ioc.py,sha256=UtwTReKTR-1_tPIhdGBr7OxP_Vqi6xWyCcFABd9BYPY,1040
@@ -80,9 +80,9 @@ ophyd_async/epics/demo/motor.db,sha256=3xb6WTXo4crrvk-M8Y16G9pUidp27vD5vIKKBpLTU
80
80
  ophyd_async/epics/demo/point_detector.db,sha256=8kBa3XKpmfXCxetT4tq5_RFXa_XqS1Z2ZNzsa2AtLds,1366
81
81
  ophyd_async/epics/demo/point_detector_channel.db,sha256=FZ9H6HjqplhcF2jgimv_dT1nn-CBlfjs7Y--iCfHp5Y,632
82
82
  ophyd_async/epics/eiger/__init__.py,sha256=7kRqVzwoD8PVtp7Nj9iQWlgbLeoWE_8oiq-B0kixwTE,93
83
- ophyd_async/epics/eiger/_odin_io.py,sha256=vbIvMONlCyjI78tpyQGMIvWRX1Q2fASRRgln63N2lDY,5704
84
- ophyd_async/epics/pmac/__init__.py,sha256=RWqo5nYE2MMBdwvMxdeVG213MN38b9VPlpDHQWul8QQ,143
85
- ophyd_async/epics/pmac/_pmac_io.py,sha256=yMQpZ0Osh4l8VRd2aqWQE9ebJDfh5FwM_0pp1pe8-C0,3564
83
+ ophyd_async/epics/eiger/_odin_io.py,sha256=JTnsADwNszWJoXpFmdcrZrCDc_RshGlM3Bg_aeUdrUg,6491
84
+ ophyd_async/epics/pmac/__init__.py,sha256=QNL1imf90-4Jedsl1UU0bOF2SH5SWlmqAEVd2OD9_9I,163
85
+ ophyd_async/epics/pmac/_pmac_io.py,sha256=3ngcNE5ytTW8TSnl34roqR9jtAKG0qlHjb44b0fd3Fk,3962
86
86
  ophyd_async/epics/testing/__init__.py,sha256=aTIv4D2DYrpnGco5RQF8QuLG1SfFkIlTyM2uYEKXltA,522
87
87
  ophyd_async/epics/testing/_example_ioc.py,sha256=uUmfMXV_Pd2SMFyb0y_4uTc6gkGRUqU1cJ-XQC2ROW8,3915
88
88
  ophyd_async/epics/testing/_utils.py,sha256=9gxpwaWX0HGtacu1LTupcw7viXN8G78RmuNciU_-cjs,1702
@@ -91,9 +91,9 @@ ophyd_async/epics/testing/test_records_pva.db,sha256=HJAJSvLtPWG5B5dKv8OZ0_hPJxR
91
91
  ophyd_async/fastcs/__init__.py,sha256=qlIM9-pjJ8yWfnzTM9-T9cw7zQLKjeeNROQTni5Dr6M,80
92
92
  ophyd_async/fastcs/core.py,sha256=pL_srtTrfuoBHUjDFpxES92owFq9M4Jve0Skk1oeuFA,517
93
93
  ophyd_async/fastcs/eiger/__init__.py,sha256=RxwOFjERKy5tUD_IDGCGuMh716FaZgCq7R9elPixBwo,312
94
- ophyd_async/fastcs/eiger/_eiger.py,sha256=nTK48deELmZn9x4Pd8QlyH6qYpbThbUTiXTwjfY6eB8,1106
94
+ ophyd_async/fastcs/eiger/_eiger.py,sha256=X6KczJ9JMdZUEnlt2ozUhlL8Tk1MfzgmPIpVFXdisNw,1104
95
95
  ophyd_async/fastcs/eiger/_eiger_controller.py,sha256=Cucj-1M-1CaxSJxHZmHs3f_OXwtTIspcqUFhRNGzn_E,2361
96
- ophyd_async/fastcs/eiger/_eiger_io.py,sha256=KS1ppYt6PJvPpHiR2AaDaPAhkhYwC2ei8VuZnBBiBs8,1216
96
+ ophyd_async/fastcs/eiger/_eiger_io.py,sha256=yNozTKX4CMoqIaFvyKJEs5RXXGJ4VITP_T4TIFHWRmc,1242
97
97
  ophyd_async/fastcs/odin/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
98
98
  ophyd_async/fastcs/panda/__init__.py,sha256=ugrScVm4HPQFc-d1kTAfZ5UUzW9T3SPgTi0OD2s8ZH0,1003
99
99
  ophyd_async/fastcs/panda/_block.py,sha256=SM7NaWCRwLz2Pl4wgjZMrDgx3ZLdGPTw6nU0bA-65yA,2394
@@ -145,8 +145,8 @@ ophyd_async/testing/_one_of_everything.py,sha256=Di0hPoKwrDOSsx50-2UdSHM2EbIKrPG
145
145
  ophyd_async/testing/_single_derived.py,sha256=5-HOTzgePcZ354NK_ssVpyIbJoJmKyjVQCxSwQXUC-4,2730
146
146
  ophyd_async/testing/_utils.py,sha256=zClRo5ve8RGia7wQnby41W-Zprj-slOA5da1LfYnuhw,45
147
147
  ophyd_async/testing/_wait_for_pending.py,sha256=YZAR48n-CW0GsPey3zFRzMJ4byDAr3HvMIoawjmTrHw,732
148
- ophyd_async-0.12.2.dist-info/licenses/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
149
- ophyd_async-0.12.2.dist-info/METADATA,sha256=PsxUCpkt62MCT7kSrQCnN7-6S39f5nrFadKKmbNcf1A,7112
150
- ophyd_async-0.12.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
151
- ophyd_async-0.12.2.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
152
- ophyd_async-0.12.2.dist-info/RECORD,,
148
+ ophyd_async-0.12.3.dist-info/licenses/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
149
+ ophyd_async-0.12.3.dist-info/METADATA,sha256=iFBZBqmWlXn03HELUSW5OPBsJdcYikFX6w1BjfMdUP4,7114
150
+ ophyd_async-0.12.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
151
+ ophyd_async-0.12.3.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
152
+ ophyd_async-0.12.3.dist-info/RECORD,,