ophyd-async 0.13.4__py3-none-any.whl → 0.13.6__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 (34) hide show
  1. ophyd_async/_version.py +2 -2
  2. ophyd_async/core/__init__.py +24 -2
  3. ophyd_async/core/_derived_signal_backend.py +2 -1
  4. ophyd_async/core/_detector.py +2 -2
  5. ophyd_async/core/_device.py +9 -9
  6. ophyd_async/core/_enums.py +5 -0
  7. ophyd_async/core/_mock_signal_backend.py +7 -3
  8. ophyd_async/core/_signal.py +34 -38
  9. ophyd_async/core/_signal_backend.py +3 -1
  10. ophyd_async/core/_status.py +2 -2
  11. ophyd_async/core/_utils.py +11 -11
  12. ophyd_async/epics/adcore/_utils.py +4 -4
  13. ophyd_async/epics/core/_aioca.py +2 -2
  14. ophyd_async/epics/core/_p4p.py +2 -2
  15. ophyd_async/epics/motor.py +28 -7
  16. ophyd_async/epics/pmac/_pmac_trajectory_generation.py +3 -0
  17. ophyd_async/fastcs/panda/_block.py +10 -9
  18. ophyd_async/sim/_motor.py +4 -2
  19. ophyd_async/sim/_stage.py +14 -4
  20. ophyd_async/tango/core/__init__.py +17 -3
  21. ophyd_async/tango/core/_signal.py +18 -22
  22. ophyd_async/tango/core/_tango_transport.py +407 -239
  23. ophyd_async/tango/core/_utils.py +9 -0
  24. ophyd_async/tango/demo/_mover.py +1 -2
  25. ophyd_async/tango/testing/__init__.py +2 -1
  26. ophyd_async/tango/testing/_one_of_everything.py +13 -5
  27. ophyd_async/tango/testing/_test_config.py +11 -0
  28. ophyd_async/testing/_assert.py +2 -2
  29. ophyd_async/testing/_mock_signal_utils.py +5 -2
  30. {ophyd_async-0.13.4.dist-info → ophyd_async-0.13.6.dist-info}/METADATA +2 -36
  31. {ophyd_async-0.13.4.dist-info → ophyd_async-0.13.6.dist-info}/RECORD +34 -33
  32. {ophyd_async-0.13.4.dist-info → ophyd_async-0.13.6.dist-info}/WHEEL +0 -0
  33. {ophyd_async-0.13.4.dist-info → ophyd_async-0.13.6.dist-info}/licenses/LICENSE +0 -0
  34. {ophyd_async-0.13.4.dist-info → ophyd_async-0.13.6.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  import re
2
+ from typing import Any
2
3
 
3
4
  from ophyd_async.core import StrictEnum
4
5
 
@@ -45,3 +46,11 @@ def get_device_trl_and_attr(name: str):
45
46
  groups[2] = groups[2].removesuffix("/") # remove trailing slash from device name
46
47
  device = "".join(groups)
47
48
  return device, attr
49
+
50
+
51
+ def try_to_cast_as_float(value: Any) -> float | None:
52
+ """Attempt to cast a value to float, returning None on failure."""
53
+ try:
54
+ return float(value)
55
+ except (ValueError, TypeError):
56
+ return None
@@ -53,8 +53,7 @@ class TangoMover(TangoReadable, Movable, Stoppable):
53
53
 
54
54
  if not (isinstance(timeout, float) or timeout is None):
55
55
  raise ValueError("Timeout must be a float or None")
56
- # For this server, set returns immediately so this status should not be awaited
57
- await self.position.set(value, wait=False, timeout=timeout)
56
+ await self.position.set(value, timeout=timeout)
58
57
 
59
58
  move_status = AsyncStatus(
60
59
  wait_for_value(self.state, DevStateEnum.ON, timeout=timeout)
@@ -2,5 +2,6 @@ from ._one_of_everything import (
2
2
  ExampleStrEnum,
3
3
  OneOfEverythingTangoDevice,
4
4
  )
5
+ from ._test_config import TestConfig
5
6
 
6
- __all__ = ["ExampleStrEnum", "OneOfEverythingTangoDevice"]
7
+ __all__ = ["ExampleStrEnum", "OneOfEverythingTangoDevice", "TestConfig"]
@@ -1,4 +1,5 @@
1
1
  import textwrap
2
+ from collections.abc import Sequence
2
3
  from dataclasses import dataclass
3
4
  from typing import Any, Generic, TypeVar
4
5
 
@@ -51,7 +52,7 @@ class AttributeData(Generic[T]):
51
52
  name: str
52
53
  tango_type: str
53
54
  initial_scalar: T
54
- initial_spectrum: Array1D
55
+ initial_spectrum: Array1D | Sequence[T]
55
56
 
56
57
 
57
58
  _all_attribute_definitions = [
@@ -59,7 +60,7 @@ _all_attribute_definitions = [
59
60
  "str",
60
61
  "DevString",
61
62
  "test_string",
62
- np.array(["one", "two", "three"], dtype=str),
63
+ ["one", "two", "three"],
63
64
  ),
64
65
  AttributeData(
65
66
  "bool",
@@ -82,7 +83,7 @@ _all_attribute_definitions = [
82
83
  "my_state",
83
84
  "DevState",
84
85
  DevState.INIT,
85
- np.array([DevState.INIT, DevState.ON, DevState.MOVING], dtype=DevState),
86
+ np.array(list(DevState.names.values()), dtype=DevState),
86
87
  ),
87
88
  ]
88
89
 
@@ -111,6 +112,10 @@ class OneOfEverythingTangoDevice(Device):
111
112
 
112
113
  def add_array_attrs(self, name: str, dtype: str, initial_value: np.ndarray):
113
114
  spectrum_name = f"{name}_spectrum"
115
+ if hasattr(initial_value, "shape"):
116
+ max_dim_x = initial_value.shape[-1]
117
+ else:
118
+ max_dim_x = len(initial_value)
114
119
  spectrum_attr = attribute(
115
120
  name=spectrum_name,
116
121
  dtype=dtype,
@@ -118,7 +123,7 @@ class OneOfEverythingTangoDevice(Device):
118
123
  access=AttrWriteType.READ_WRITE,
119
124
  fget=self.read,
120
125
  fset=self.write,
121
- max_dim_x=initial_value.shape[-1],
126
+ max_dim_x=max_dim_x,
122
127
  enum_labels=[e.value for e in ExampleStrEnum],
123
128
  )
124
129
  image_name = f"{name}_image"
@@ -129,12 +134,15 @@ class OneOfEverythingTangoDevice(Device):
129
134
  access=AttrWriteType.READ_WRITE,
130
135
  fget=self.read,
131
136
  fset=self.write,
132
- max_dim_x=initial_value.shape[-1],
137
+ max_dim_x=max_dim_x,
133
138
  max_dim_y=2,
134
139
  enum_labels=[e.value for e in ExampleStrEnum],
135
140
  )
136
141
  self._add_attr(spectrum_attr, initial_value)
137
142
  # have image just be 2 of the initial spectrum stacked
143
+ # String images are not supported, do not add their attribute data
144
+ if name in ["str", "strenum", "my_state"]:
145
+ return
138
146
  self._add_attr(image_attr, np.vstack((initial_value, initial_value)))
139
147
 
140
148
  def add_scalar_command(self, name: str, dtype: str):
@@ -0,0 +1,11 @@
1
+ """Helpful config class for testing."""
2
+
3
+ from tango import AttrDataFormat, CmdArgType
4
+
5
+
6
+ class TestConfig:
7
+ """Configuration for a test."""
8
+
9
+ data_type: CmdArgType
10
+ data_format: AttrDataFormat
11
+ enum_labels: list[str]
@@ -132,7 +132,7 @@ async def assert_describe_signal(signal: SignalR, /, **metadata):
132
132
  assert actual_datakey == expected_datakey
133
133
 
134
134
 
135
- def assert_emitted(docs: dict[str, list[dict]], **numbers: int):
135
+ def assert_emitted(docs: Mapping[str, list[dict]], **numbers: int):
136
136
  """Assert emitted document generated by running a Bluesky plan.
137
137
 
138
138
  :param docs: A mapping of document type -> list of documents that have been emitted.
@@ -195,7 +195,7 @@ class MonitorQueue(AbstractContextManager):
195
195
  _assert_readings_approx_equal(expected_reading, update)
196
196
 
197
197
  def __enter__(self):
198
- self.signal.subscribe(self.updates.put_nowait)
198
+ self.signal.subscribe_reading(self.updates.put_nowait)
199
199
  return self
200
200
 
201
201
  def __exit__(self, exc_type, exc_value, traceback):
@@ -119,14 +119,17 @@ def _unset_side_effect_cm(put_mock: AsyncMock):
119
119
 
120
120
  def callback_on_mock_put(
121
121
  signal: Signal[SignalDatatypeT],
122
- callback: Callable[[SignalDatatypeT, bool], None]
123
- | Callable[[SignalDatatypeT, bool], Awaitable[None]],
122
+ callback: Callable[[SignalDatatypeT, bool], SignalDatatypeT | None]
123
+ | Callable[[SignalDatatypeT, bool], Awaitable[SignalDatatypeT | None]],
124
124
  ):
125
125
  """For setting a callback when a backend is put to.
126
126
 
127
127
  Can either be used in a context, with the callback being unset on exit, or
128
128
  as an ordinary function.
129
129
 
130
+ The value that the callback returns (if not None) will be set to the signal
131
+ readback. If None is returned then the readback will be set to the setpoint.
132
+
130
133
  :param signal: A signal with a `MockSignalBackend` backend.
131
134
  :param callback: The callback to call when the backend is put to during the
132
135
  context.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ophyd-async
3
- Version: 0.13.4
3
+ Version: 0.13.6
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
@@ -58,45 +58,11 @@ Requires-Dist: aioca>=2.0a4; extra == "ca"
58
58
  Provides-Extra: pva
59
59
  Requires-Dist: p4p>=4.2.0; extra == "pva"
60
60
  Provides-Extra: tango
61
- Requires-Dist: pytango==10.0.2; extra == "tango"
61
+ Requires-Dist: pytango>=10.0.2; extra == "tango"
62
62
  Provides-Extra: demo
63
63
  Requires-Dist: ipython; extra == "demo"
64
64
  Requires-Dist: matplotlib; extra == "demo"
65
65
  Requires-Dist: pyqt6; extra == "demo"
66
- Provides-Extra: dev
67
- Requires-Dist: ophyd_async[sim]; extra == "dev"
68
- Requires-Dist: ophyd_async[ca]; extra == "dev"
69
- Requires-Dist: ophyd_async[pva]; extra == "dev"
70
- Requires-Dist: ophyd_async[tango]; extra == "dev"
71
- Requires-Dist: ophyd_async[demo]; extra == "dev"
72
- Requires-Dist: inflection; extra == "dev"
73
- Requires-Dist: import-linter; extra == "dev"
74
- Requires-Dist: myst-parser; extra == "dev"
75
- Requires-Dist: numpydoc; extra == "dev"
76
- Requires-Dist: ophyd>=1.10.7; extra == "dev"
77
- Requires-Dist: pickleshare; extra == "dev"
78
- Requires-Dist: pipdeptree; extra == "dev"
79
- Requires-Dist: pre-commit; extra == "dev"
80
- Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
81
- Requires-Dist: pyepics>=3.4.2; extra == "dev"
82
- Requires-Dist: pyright; extra == "dev"
83
- Requires-Dist: pytest; extra == "dev"
84
- Requires-Dist: pytest-asyncio; extra == "dev"
85
- Requires-Dist: pytest-cov; extra == "dev"
86
- Requires-Dist: pytest-faulthandler; extra == "dev"
87
- Requires-Dist: pytest-forked; extra == "dev"
88
- Requires-Dist: pytest-rerunfailures; extra == "dev"
89
- Requires-Dist: pytest-timeout; extra == "dev"
90
- Requires-Dist: ruff; extra == "dev"
91
- Requires-Dist: scanspec>=1.0a1; extra == "dev"
92
- Requires-Dist: sphinx-autobuild; extra == "dev"
93
- Requires-Dist: sphinx-autodoc2; extra == "dev"
94
- Requires-Dist: sphinxcontrib-mermaid; extra == "dev"
95
- Requires-Dist: sphinx-copybutton; extra == "dev"
96
- Requires-Dist: sphinx-design; extra == "dev"
97
- Requires-Dist: tox-direct; extra == "dev"
98
- Requires-Dist: types-mock; extra == "dev"
99
- Requires-Dist: types-pyyaml; extra == "dev"
100
66
  Dynamic: license-file
101
67
 
102
68
  [![CI](https://github.com/bluesky/ophyd-async/actions/workflows/ci.yml/badge.svg)](https://github.com/bluesky/ophyd-async/actions/workflows/ci.yml)
@@ -1,32 +1,32 @@
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=jkUE3cKd2dkiA6VGIHg5JjUEnRJjfyS9aYL_45rUBmo,706
4
+ ophyd_async/_version.py,sha256=opPR5vtgMqtAtI-1B5Bg_MEreSc0tb9JwaQhHrD7xNE,706
5
5
  ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- ophyd_async/core/__init__.py,sha256=xugzZ-bLD11qdk_bJYxPXEeDMRTxEPZzxxhMjp6KqW8,5015
6
+ ophyd_async/core/__init__.py,sha256=yGbkVju5otO8DmA3KyerYB0gLtcX5sdxlq3ajyGha4M,5531
7
7
  ophyd_async/core/_derived_signal.py,sha256=TuZza_j3J1Bw4QSqBYB9Ta2FyQP5BycO3nSHVtJ890Q,13015
8
- ophyd_async/core/_derived_signal_backend.py,sha256=PYyyont_nUR9LBC9eqVwueHCMwLJfQ_F7R_14sivBTU,12510
9
- ophyd_async/core/_detector.py,sha256=bPTQYLTjbxs7-wjV8szAZ0TQI20fV12vkq1OaA5L_z8,14938
10
- ophyd_async/core/_device.py,sha256=lSm8FBul9NTn9VO0rsAlV9pctJyUsMdU2ztEf5CqH5M,14716
8
+ ophyd_async/core/_derived_signal_backend.py,sha256=Ibce9JHghiI5Ir8w0pUYULHL2qWkobeUYc0-CDrsO2E,12615
9
+ ophyd_async/core/_detector.py,sha256=9fYbBPmRnMGADcDTYkspDAL2uzhtNNiKCEeBUU0oKaY,14942
10
+ ophyd_async/core/_device.py,sha256=_M3hwiYv8xO-7pfQkOzeZEEsB05Oa2HTRKOEc69C_a8,14743
11
11
  ophyd_async/core/_device_filler.py,sha256=MDz8eQQ-eEAwo-UEMxfqPfpcBuMG01tLCGR6utwVnmE,14825
12
- ophyd_async/core/_enums.py,sha256=7VpEvh9tFa-E3wn3x0SdXUlCG7AxSPwCRkf37B-0JbM,313
12
+ ophyd_async/core/_enums.py,sha256=2vh6x0rZ6SLiw2xxq1xVIn-GpbLDFc8wZoVdA55QiE8,370
13
13
  ophyd_async/core/_flyer.py,sha256=8zKyU5aQOr_t59GIUwsYeb8NSabdvBp0swwuRe4v5VQ,3457
14
14
  ophyd_async/core/_hdf_dataset.py,sha256=0bIX_ZbFSMdXqDwRtEvV-0avHnwXhjPddE5GVNmo7H8,2608
15
15
  ophyd_async/core/_log.py,sha256=DxKR4Nz3SgTaTzKBZWqt-w48yT8WUAr_3Qr223TEWRw,3587
16
- ophyd_async/core/_mock_signal_backend.py,sha256=SPdCbVWss6-iL9C3t9u0IvR_Ln9JeDypVd18WlivdjE,3156
16
+ ophyd_async/core/_mock_signal_backend.py,sha256=N6rzwBR3QwHZMcifIZg6sbno6-Ts-1jK0aFVt-3jHAg,3289
17
17
  ophyd_async/core/_protocol.py,sha256=wQ_snxhTprHqEjQb1HgFwBljwolMY6A8C3xgV1PXwdU,4051
18
18
  ophyd_async/core/_providers.py,sha256=WBht3QCgvGc0stNcwH6z4Zr6hAz3e01-88NjsYI2w6I,9740
19
19
  ophyd_async/core/_readable.py,sha256=iBo1YwA5bsAbzLbznvmSnzKDWUuGkLh850Br3BXsgeU,11707
20
20
  ophyd_async/core/_settings.py,sha256=_ZccbXKP7j5rG6-bMKk7aaLr8hChdRDAPY_YSR71XXM,4213
21
- ophyd_async/core/_signal.py,sha256=ghgxtfUG9vkwgvuu6qXa_ECux5-3j9WwxB5mN5G6jqU,28421
22
- ophyd_async/core/_signal_backend.py,sha256=PvwTbbSVEGqM-2s5BNRrKGwM_MiYL71qMxYAgyZ7wRM,6930
21
+ ophyd_async/core/_signal.py,sha256=085vcyjhEyZECi4Svjq6DUM5kxrzZh8s5DoHR2LALOc,28195
22
+ ophyd_async/core/_signal_backend.py,sha256=F3ma45cIIJ3D702zsVZIqn4Jv7u05YzMQBQND70QCbQ,6987
23
23
  ophyd_async/core/_soft_signal_backend.py,sha256=NJUuyaCKtBZjggt8WKi7_lKQRHasToxviuQvl5xbhLU,6222
24
- ophyd_async/core/_status.py,sha256=h4TtWFM7wFtpxxyAYYSITgcVzArYZdYBHbya6qIX5t0,6553
24
+ ophyd_async/core/_status.py,sha256=a2IDvv_GvUcFuhjQA5bQzWm9ngR6zGc9PR4XcZiaeqk,6557
25
25
  ophyd_async/core/_table.py,sha256=ryJ7AwJBglQUzwP9_aSjR8cu8EKvYXfo1q1byhke3Uc,7248
26
- ophyd_async/core/_utils.py,sha256=-iKbqsvVR7P29E6VpOgI5WfDwGBRdud_gvExIoUVlG4,12495
26
+ ophyd_async/core/_utils.py,sha256=gUewO4XPrBxsEWzObNumqAB2Q7Hwrd5F_Nc6B2XwQIM,12532
27
27
  ophyd_async/core/_yaml_settings.py,sha256=Qojhku9l5kPSkTnEylCRWTe0gpw6S_XP5av5dPpqFgQ,2089
28
28
  ophyd_async/epics/__init__.py,sha256=ou4yEaH9VZHz70e8oM614-arLMQvUfQyXhRJsnEpWn8,60
29
- ophyd_async/epics/motor.py,sha256=YbhzyP56X_2KjFLyPVHXMxYmntxUzDl4K3np_V2akhk,9024
29
+ ophyd_async/epics/motor.py,sha256=nS6Vx4-6vYso3b_QtpE8p8dlys5jRr2LK7prZCkZMc8,9558
30
30
  ophyd_async/epics/signal.py,sha256=0A-supp9ajr63O6aD7F9oG0-Q26YmRjk-ZGh57-jo1Y,239
31
31
  ophyd_async/epics/adandor/__init__.py,sha256=dlitllrAdhvh16PAcVMUSSEytTDNMu6_HuYk8KD1EoY,343
32
32
  ophyd_async/epics/adandor/_andor.py,sha256=TijGjNVxuH-P0X7UACPt9eLLQ449DwMyVhbn1kV7Le8,1245
@@ -45,7 +45,7 @@ ophyd_async/epics/adcore/_hdf_writer.py,sha256=nKXOjVZfM6_BlYv5f1l8nwo7tjenYjx-3
45
45
  ophyd_async/epics/adcore/_jpeg_writer.py,sha256=VYpUWQGEjrKG2kiRGQZlBCPXVJ1BzWb9GyB9KhxPWgo,688
46
46
  ophyd_async/epics/adcore/_single_trigger.py,sha256=tFGLT1b_rZzAvbqWP-hyCccxJMRY26T5IER-VAqKXmc,1275
47
47
  ophyd_async/epics/adcore/_tiff_writer.py,sha256=197Ky9ltsJjUKNwl8_OAuoCe8dWIc7zCFs7wautwC7Y,689
48
- ophyd_async/epics/adcore/_utils.py,sha256=L7YQBrsNt6gL1JqVK_rW4fkHaRiDrDYlOtiLakMbXE8,5233
48
+ ophyd_async/epics/adcore/_utils.py,sha256=iKSUh-D99sjipmZxWuo_XsA6UG-vJlMlFrAmZW4FZns,5241
49
49
  ophyd_async/epics/adkinetix/__init__.py,sha256=A9xq3lGMrmza9lfukRixC0Up_kUDVFII8JguLr2x7Bw,308
50
50
  ophyd_async/epics/adkinetix/_kinetix.py,sha256=zZv0JZ8i1RSx7KBDn_1HGNOY0BoIP81mRK5TKq7d4eA,1302
51
51
  ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=UI-XcQpGj7jq-_e1ceoMOZkyfejwG6H5wX-Ntp_NJjg,1481
@@ -63,10 +63,10 @@ ophyd_async/epics/advimba/_vimba.py,sha256=4XlEnsJMGDzHLuYaIDUmaxx0gtOAehn5BKBZM
63
63
  ophyd_async/epics/advimba/_vimba_controller.py,sha256=KSbP4LHqYkCDplpmBk7hdf0Yz9J2vOxWn0fStFFAklA,1942
64
64
  ophyd_async/epics/advimba/_vimba_io.py,sha256=E3XlCKLQbGOWho0dQPeD4xeEl5pZGINyYstGD43qNrM,1492
65
65
  ophyd_async/epics/core/__init__.py,sha256=q73i4aJ_0HApVNmf3eAw-q30XuazAyZW2MW5TXk-pOY,648
66
- ophyd_async/epics/core/_aioca.py,sha256=38aW5dd3MzwhoweNMjkOfnfZHI2JZFateO0YABGVSfQ,13230
66
+ ophyd_async/epics/core/_aioca.py,sha256=KnD_LWBlIiJFf3ujPe7ZH3_j2P5uWtg5d9_XaVk-cqQ,13240
67
67
  ophyd_async/epics/core/_epics_connector.py,sha256=KXQ1WVpNrgQ30KiiXTYRwfoHdaU5oWv1jVZAvx3tGig,2557
68
68
  ophyd_async/epics/core/_epics_device.py,sha256=wGdR24I7GSPh3HmM7jsWKZhBZgt4IyLrCn4Ut7Wx_xo,510
69
- ophyd_async/epics/core/_p4p.py,sha256=Q6o4rlyrg2VXlqi1uHkGbnYc1gZ8YX5ZaJDcL0eAr_8,16385
69
+ ophyd_async/epics/core/_p4p.py,sha256=IUu0cROcgRee9er6qyskkX7GMS4Ixr94TV4_4a7joYA,16395
70
70
  ophyd_async/epics/core/_pvi_connector.py,sha256=SfKkZqGCRvJJtQpJQzmfuLJQqOge0wBsMeuTSQ-KPjs,5553
71
71
  ophyd_async/epics/core/_signal.py,sha256=qAEe8mgXRMgBTcxuwN-KDGSRtJTwrhygThTDe5vA3EQ,5916
72
72
  ophyd_async/epics/core/_util.py,sha256=wcbZ6Qa2qqme6AlKAfxGI68EMEPEMJSl7BiDRz3mrEg,2820
@@ -85,7 +85,7 @@ ophyd_async/epics/odin/_odin_io.py,sha256=YDBrS15PnEKe5SHmz397Emh--lZSQEnbR3G7p8
85
85
  ophyd_async/epics/pmac/__init__.py,sha256=GqJTiJudqE9pu050ZNED09F9tKRfazn0wBsojsMH2gg,273
86
86
  ophyd_async/epics/pmac/_pmac_io.py,sha256=E7tdaq9FAM6BeGQG1L8ALEYpXOlyqTXl_NLLSWzmCdk,4345
87
87
  ophyd_async/epics/pmac/_pmac_trajectory.py,sha256=7wTaetNNy9uj7C_skcs0VH5BthuY4Ec5zn-m4ROxd8k,7866
88
- ophyd_async/epics/pmac/_pmac_trajectory_generation.py,sha256=l-jFlJCs2-LowoF6vJn2ex0Evcon2OeYPMHWzEZnEgk,27136
88
+ ophyd_async/epics/pmac/_pmac_trajectory_generation.py,sha256=3IIxXa0r6-2uNnILKLGxp3xosOZx8MubKF-F_OM7uaw,27331
89
89
  ophyd_async/epics/pmac/_utils.py,sha256=n4vh9n7hmaWe9g02FtguF2oDsYuVvsTgmK7fYEyGuIE,6092
90
90
  ophyd_async/epics/testing/__init__.py,sha256=aTIv4D2DYrpnGco5RQF8QuLG1SfFkIlTyM2uYEKXltA,522
91
91
  ophyd_async/epics/testing/_example_ioc.py,sha256=zb4ZEUzuB2MrSw5ETPLIiHhf-2BRU1Bdxco6Kh4iI1I,3880
@@ -105,7 +105,7 @@ ophyd_async/fastcs/jungfrau/_signals.py,sha256=8seZCkKTb-xJL0IdB2el8VTEbWNaCvZIh
105
105
  ophyd_async/fastcs/jungfrau/_utils.py,sha256=QpdWbPT_31Jwyi7INFMRq9hncSZIK_4J3l6wpuppzn8,2875
106
106
  ophyd_async/fastcs/odin/__init__.py,sha256=da1PTClDMl-IBkrSvq6JC1lnS-K_BASzCvxVhNxN5Ls,13
107
107
  ophyd_async/fastcs/panda/__init__.py,sha256=GbnPqH_13wvyPK1CvRHGAViamKVWHY9n-sTmfAdcnMA,1229
108
- ophyd_async/fastcs/panda/_block.py,sha256=ejWajojXpP85kdWoB4zl6Z4s9S-Izs4brBdxosfjYbA,2645
108
+ ophyd_async/fastcs/panda/_block.py,sha256=Bffta9IkuSq_NSvidDvLyC1YUrfQCwMhppsu1Te7vec,2679
109
109
  ophyd_async/fastcs/panda/_control.py,sha256=xtW3dH_MLQoycgP-4vJtYx1M9alHjWo13iu9UFTgwzY,1306
110
110
  ophyd_async/fastcs/panda/_hdf_panda.py,sha256=tL_OWHxlMQcMZGq9sxHLSeag6hP9MRIbTPn1W0u0iNI,1237
111
111
  ophyd_async/fastcs/panda/_table.py,sha256=maKGoKypEuYqTSVWGgDO6GMEKOtlDm9Dn5YiYdBzu6c,2486
@@ -126,36 +126,37 @@ ophyd_async/sim/_blob_detector_controller.py,sha256=y1aSNQJUPnsT2qnj2sk254Mp18an
126
126
  ophyd_async/sim/_blob_detector_writer.py,sha256=_Pd0OaP4_mZfwxtUF35v7hsktLP_wYljR4nylr5CzJo,3346
127
127
  ophyd_async/sim/_mirror_horizontal.py,sha256=Jsqa8Snjy1jQDboZtAQFJjGor5uKk8FBC7OCe-GoZDw,1478
128
128
  ophyd_async/sim/_mirror_vertical.py,sha256=HUD44mYT0jQ0GKiQKxD7k_7y6o6OdE6TztgdPUJIK_g,2085
129
- ophyd_async/sim/_motor.py,sha256=EUykjGfQgBnf0Pmr66XeDlhz8DU0eAIXUvIgbtJccoA,9226
129
+ ophyd_async/sim/_motor.py,sha256=QRs9oBMKQBsUvP2kaTbh9apMgPvS3DwqbVUwgQAffAQ,9277
130
130
  ophyd_async/sim/_pattern_generator.py,sha256=kuxvyX2gIxrywhQRhaO1g8YluBT7LBkE20IsurZS-6o,3734
131
131
  ophyd_async/sim/_point_detector.py,sha256=wMG_ncvm99WMCPihlFyuMEf3UknAxCpB1hpk3uKiENE,3024
132
- ophyd_async/sim/_stage.py,sha256=fOR5HGWfqWw47-0HrMmQ5rait_qPVNneF329wCx8KKY,1233
132
+ ophyd_async/sim/_stage.py,sha256=_SywbmSQwxf7JLx68qwo0RpiB3oIWlbTLmvRKxUoig0,1602
133
133
  ophyd_async/tango/__init__.py,sha256=g9xzjlzPpUAP12YI-kYwfAoLSYPAQdL1S11R2c-cius,60
134
- ophyd_async/tango/core/__init__.py,sha256=IMvQ7MWcTof99h_pr483KWKvQV2-h7zo_iRpLA2PUYQ,1108
134
+ ophyd_async/tango/core/__init__.py,sha256=OOVdHu07cssK90F-caG0CY7qKpPYy0MSV421YNAI-_8,1413
135
135
  ophyd_async/tango/core/_base_device.py,sha256=e9oqSL-fDOj8r9nUUFZkbibhRGbI6HYtlnZjK5B_2fE,5033
136
136
  ophyd_async/tango/core/_converters.py,sha256=xI_RhMR8dY6IVORUZVVCL9LdYnEE6TA6BBPX_lTu06w,2183
137
- ophyd_async/tango/core/_signal.py,sha256=6KXDzV8Z08hrtCqG8J4AYnhemQjtL6Eofngo6yNo52o,5798
137
+ ophyd_async/tango/core/_signal.py,sha256=8mIxRVEVjhDN33LDbbKZWGMUYn9Gl5ZMEIYw6GSBTUE,5569
138
138
  ophyd_async/tango/core/_tango_readable.py,sha256=ctR6YcBGGatW6Jp2kvddA1hVZ2v1CidPsF9FmJK9BYg,406
139
- ophyd_async/tango/core/_tango_transport.py,sha256=kKBUSgZs80ZcldkD8gU16A5VYVlZneFNz-TSYd8QoQ0,31887
140
- ophyd_async/tango/core/_utils.py,sha256=FrX524jwa-0EQxpcGaKF6yqyHm5BWIFSE82FcIB0aAY,1430
139
+ ophyd_async/tango/core/_tango_transport.py,sha256=KxjhHqKADrOvzGi9tbOQXUWdsJ0NKGejWxHItxpUsjg,37401
140
+ ophyd_async/tango/core/_utils.py,sha256=pwT7V1DNWSyPOSzvDZ6OsDZTjaV-pAeDLDlmgtHVcNM,1673
141
141
  ophyd_async/tango/demo/__init__.py,sha256=_j-UicTnckuIBp8PnieFMOMnLFGivnaKdmo9o0hYtzc,256
142
142
  ophyd_async/tango/demo/_counter.py,sha256=2J4SCHnBWLF0O5mFWlJdO4tmnElvlx5sRrk4op_AC9U,1139
143
143
  ophyd_async/tango/demo/_detector.py,sha256=X5YWHAjukKZ7iYF1fBNle4CBDj1X5rvj0lnPMOcnRCU,1340
144
- ophyd_async/tango/demo/_mover.py,sha256=c-IxrWQN0YX-Iuf720xlKfsPbNfh7bUz_AVnbwYkW08,2984
144
+ ophyd_async/tango/demo/_mover.py,sha256=i-Tq5nDmYi4RcC4O6mOJoVeMEIIxuqyS_2AfjTpAcnk,2884
145
145
  ophyd_async/tango/demo/_tango/__init__.py,sha256=FfONT7vM49nNo3a1Lv-LcMZO9EHv6bv91yY-RnxIib4,85
146
146
  ophyd_async/tango/demo/_tango/_servers.py,sha256=putvERDyibibaTbhdWyqZB_axj2fURXqzDsZb9oSW14,2991
147
- ophyd_async/tango/testing/__init__.py,sha256=SYXPAS00ny3jlUMOJKpaewO4ljPjK1_z1smj7IfsBQg,148
148
- ophyd_async/tango/testing/_one_of_everything.py,sha256=tsxWgy2f_m9f0FH4XCVO_I8OtEquKbJQZbr4KaXMJL4,6571
147
+ ophyd_async/tango/testing/__init__.py,sha256=l52SmX9XuxZUBuLpOYJzHfskkWVYhx3RkSbGL_wUu5Y,199
148
+ ophyd_async/tango/testing/_one_of_everything.py,sha256=eJg5K8n1ExwPfruDCHNZcWjx4aRTA1Vs_7NQHSHjpgc,6851
149
+ ophyd_async/tango/testing/_test_config.py,sha256=i3t5d4wjUEtAvvSSZNz_bH_r5VEvUphUcEOEd8LKxQQ,228
149
150
  ophyd_async/testing/__init__.py,sha256=jDBzUAHGDMfkhd-_9u0CJWEq0E0sPrIGGlLmVzEyxY8,1742
150
151
  ophyd_async/testing/__pytest_assert_rewrite.py,sha256=_SU2UfChPgEf7CFY7aYH2B7MLp-07_qYnVLyu6QtDL8,129
151
- ophyd_async/testing/_assert.py,sha256=8j7NtHBdG2AjFY4yxgMx3oGX22rYvzj0337o-shfH40,8784
152
- ophyd_async/testing/_mock_signal_utils.py,sha256=d-n_923ii59-ae9TbqVuIK9MAJpDmu0k47fzgJLj8t8,5195
152
+ ophyd_async/testing/_assert.py,sha256=Ss_XDToi1ymUfr0Z1r45A2Fmg7-9UOv9gYkJEBsZPv8,8795
153
+ ophyd_async/testing/_mock_signal_utils.py,sha256=GOjELaRFg9zJKcpeLFXjN7ViMT1AK2Hu52lkLMI5XUc,5393
153
154
  ophyd_async/testing/_one_of_everything.py,sha256=U9ui7B-iNHDM3H3hIWUuaCb8Gc2eLlUh0sBHUlQldT0,4741
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.13.4.dist-info/licenses/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
158
- ophyd_async-0.13.4.dist-info/METADATA,sha256=gy3t1HyZjSGBSDOguEsn4LV_SQ8duzNLIXhZgpm9qoI,7222
159
- ophyd_async-0.13.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
160
- ophyd_async-0.13.4.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
161
- ophyd_async-0.13.4.dist-info/RECORD,,
158
+ ophyd_async-0.13.6.dist-info/licenses/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
159
+ ophyd_async-0.13.6.dist-info/METADATA,sha256=o3yNVUgIIR1UiWECtmQX9WZLuZAu4et3sru1DKoOsDM,5703
160
+ ophyd_async-0.13.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
161
+ ophyd_async-0.13.6.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
162
+ ophyd_async-0.13.6.dist-info/RECORD,,