ophyd-async 0.8.0a5__py3-none-any.whl → 0.9.0a1__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 +4 -26
- ophyd_async/core/_detector.py +9 -9
- ophyd_async/core/_device.py +27 -8
- ophyd_async/core/_protocol.py +0 -28
- ophyd_async/core/_signal.py +111 -136
- ophyd_async/core/_table.py +9 -4
- ophyd_async/core/_utils.py +11 -2
- ophyd_async/epics/adaravis/_aravis_controller.py +8 -8
- ophyd_async/epics/adaravis/_aravis_io.py +4 -4
- ophyd_async/epics/adcore/_core_io.py +21 -21
- ophyd_async/epics/adcore/_core_logic.py +6 -3
- ophyd_async/epics/adcore/_hdf_writer.py +6 -3
- ophyd_async/epics/adcore/_single_trigger.py +1 -1
- ophyd_async/epics/adcore/_utils.py +35 -35
- ophyd_async/epics/adkinetix/_kinetix_controller.py +7 -7
- ophyd_async/epics/adkinetix/_kinetix_io.py +7 -7
- ophyd_async/epics/adpilatus/_pilatus.py +3 -3
- ophyd_async/epics/adpilatus/_pilatus_controller.py +4 -4
- ophyd_async/epics/adpilatus/_pilatus_io.py +5 -5
- ophyd_async/epics/adsimdetector/_sim_controller.py +2 -2
- ophyd_async/epics/advimba/_vimba_controller.py +14 -14
- ophyd_async/epics/advimba/_vimba_io.py +23 -23
- ophyd_async/epics/core/_p4p.py +19 -0
- ophyd_async/epics/core/_pvi_connector.py +4 -2
- ophyd_async/epics/core/_signal.py +9 -2
- ophyd_async/epics/core/_util.py +9 -0
- ophyd_async/epics/demo/_mover.py +2 -2
- ophyd_async/epics/demo/_sensor.py +2 -2
- ophyd_async/epics/eiger/_eiger_controller.py +10 -5
- ophyd_async/epics/eiger/_eiger_io.py +3 -3
- ophyd_async/epics/motor.py +8 -5
- ophyd_async/epics/testing/__init__.py +24 -0
- ophyd_async/epics/testing/_example_ioc.py +107 -0
- ophyd_async/epics/testing/_utils.py +78 -0
- ophyd_async/epics/testing/test_records.db +158 -0
- ophyd_async/epics/testing/test_records_pva.db +177 -0
- ophyd_async/fastcs/core.py +2 -2
- ophyd_async/fastcs/panda/_block.py +9 -9
- ophyd_async/fastcs/panda/_control.py +2 -2
- ophyd_async/fastcs/panda/_hdf_panda.py +4 -1
- ophyd_async/fastcs/panda/_trigger.py +7 -7
- ophyd_async/plan_stubs/_fly.py +1 -1
- ophyd_async/sim/demo/_sim_motor.py +34 -32
- ophyd_async/tango/__init__.py +0 -43
- ophyd_async/tango/{signal → core}/__init__.py +7 -2
- ophyd_async/tango/{base_devices → core}/_base_device.py +38 -64
- ophyd_async/tango/{signal → core}/_signal.py +13 -3
- ophyd_async/tango/{base_devices → core}/_tango_readable.py +3 -4
- ophyd_async/tango/{signal → core}/_tango_transport.py +1 -1
- ophyd_async/tango/demo/_counter.py +6 -7
- ophyd_async/tango/demo/_mover.py +8 -7
- ophyd_async/testing/__init__.py +33 -0
- ophyd_async/testing/_assert.py +128 -0
- ophyd_async/{core → testing}/_mock_signal_utils.py +12 -8
- ophyd_async/testing/_wait_for_pending.py +22 -0
- {ophyd_async-0.8.0a5.dist-info → ophyd_async-0.9.0a1.dist-info}/METADATA +49 -47
- ophyd_async-0.9.0a1.dist-info/RECORD +119 -0
- {ophyd_async-0.8.0a5.dist-info → ophyd_async-0.9.0a1.dist-info}/WHEEL +1 -1
- ophyd_async/tango/base_devices/__init__.py +0 -4
- ophyd_async-0.8.0a5.dist-info/RECORD +0 -112
- {ophyd_async-0.8.0a5.dist-info → ophyd_async-0.9.0a1.dist-info}/LICENSE +0 -0
- {ophyd_async-0.8.0a5.dist-info → ophyd_async-0.9.0a1.dist-info}/entry_points.txt +0 -0
- {ophyd_async-0.8.0a5.dist-info → ophyd_async-0.9.0a1.dist-info}/top_level.txt +0 -0
|
@@ -189,7 +189,7 @@ class AttributeProxy(TangoProxy):
|
|
|
189
189
|
raise TimeoutError(f"{self._name} attr put failed: Timeout") from te
|
|
190
190
|
except DevFailed as de:
|
|
191
191
|
raise RuntimeError(
|
|
192
|
-
f"{self._name} device
|
|
192
|
+
f"{self._name} device failure: {de.args[0].desc}"
|
|
193
193
|
) from de
|
|
194
194
|
|
|
195
195
|
else:
|
|
@@ -2,18 +2,17 @@ from typing import Annotated as A
|
|
|
2
2
|
|
|
3
3
|
from ophyd_async.core import DEFAULT_TIMEOUT, AsyncStatus, SignalR, SignalRW, SignalX
|
|
4
4
|
from ophyd_async.core import StandardReadableFormat as Format
|
|
5
|
-
from ophyd_async.tango import
|
|
5
|
+
from ophyd_async.tango.core import TangoPolling, TangoReadable
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
# Enable device level polling, useful for servers that do not support events
|
|
9
|
-
# Polling for individual signal can be enabled with a dict
|
|
10
|
-
@tango_polling({"counts": (1.0, 0.1, 0.1), "sample_time": (0.1, 0.1, 0.1)})
|
|
11
8
|
class TangoCounter(TangoReadable):
|
|
12
9
|
# Enter the name and type of the signals you want to use
|
|
13
|
-
# If
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
# If the server doesn't support events, the TangoPolling annotation gives
|
|
11
|
+
# the parameters for ophyd to poll instead
|
|
12
|
+
counts: A[SignalR[int], Format.HINTED_SIGNAL, TangoPolling(1.0, 0.1, 0.1)]
|
|
13
|
+
sample_time: A[SignalRW[float], Format.CONFIG_SIGNAL, TangoPolling(0.1, 0.1, 0.1)]
|
|
16
14
|
start: SignalX
|
|
15
|
+
# If a tango name clashes with a bluesky verb, add a trailing underscore
|
|
17
16
|
reset_: SignalX
|
|
18
17
|
|
|
19
18
|
@AsyncStatus.wrap
|
ophyd_async/tango/demo/_mover.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
+
from typing import Annotated as A
|
|
2
3
|
|
|
3
4
|
from bluesky.protocols import Movable, Stoppable
|
|
4
5
|
|
|
@@ -16,18 +17,18 @@ from ophyd_async.core import (
|
|
|
16
17
|
wait_for_value,
|
|
17
18
|
)
|
|
18
19
|
from ophyd_async.core import StandardReadableFormat as Format
|
|
19
|
-
from ophyd_async.tango import
|
|
20
|
+
from ophyd_async.tango.core import TangoPolling, TangoReadable
|
|
20
21
|
from tango import DevState
|
|
21
22
|
|
|
22
23
|
|
|
23
|
-
# Enable device level polling, useful for servers that do not support events
|
|
24
|
-
@tango_polling((0.1, 0.1, 0.1))
|
|
25
24
|
class TangoMover(TangoReadable, Movable, Stoppable):
|
|
26
25
|
# Enter the name and type of the signals you want to use
|
|
27
|
-
# If
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
# If the server doesn't support events, the TangoPolling annotation gives
|
|
27
|
+
# the parameters for ophyd to poll instead
|
|
28
|
+
position: A[SignalRW[float], TangoPolling(0.1, 0.1, 0.1)]
|
|
29
|
+
velocity: A[SignalRW[float], TangoPolling(0.1, 0.1, 0.1)]
|
|
30
|
+
state: A[SignalR[DevState], TangoPolling(0.1)]
|
|
31
|
+
# If a tango name clashes with a bluesky verb, add a trailing underscore
|
|
31
32
|
stop_: SignalX
|
|
32
33
|
|
|
33
34
|
def __init__(self, trl: str | None = "", name=""):
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
from ._assert import (
|
|
2
|
+
assert_configuration,
|
|
3
|
+
assert_emitted,
|
|
4
|
+
assert_reading,
|
|
5
|
+
assert_value,
|
|
6
|
+
)
|
|
7
|
+
from ._mock_signal_utils import (
|
|
8
|
+
callback_on_mock_put,
|
|
9
|
+
get_mock,
|
|
10
|
+
get_mock_put,
|
|
11
|
+
mock_puts_blocked,
|
|
12
|
+
reset_mock_put_calls,
|
|
13
|
+
set_mock_put_proceeds,
|
|
14
|
+
set_mock_value,
|
|
15
|
+
set_mock_values,
|
|
16
|
+
)
|
|
17
|
+
from ._wait_for_pending import wait_for_pending_wakeups
|
|
18
|
+
|
|
19
|
+
__all__ = [
|
|
20
|
+
"assert_configuration",
|
|
21
|
+
"assert_emitted",
|
|
22
|
+
"assert_reading",
|
|
23
|
+
"assert_value",
|
|
24
|
+
"callback_on_mock_put",
|
|
25
|
+
"get_mock",
|
|
26
|
+
"get_mock_put",
|
|
27
|
+
"mock_puts_blocked",
|
|
28
|
+
"reset_mock_put_calls",
|
|
29
|
+
"set_mock_put_proceeds",
|
|
30
|
+
"set_mock_value",
|
|
31
|
+
"set_mock_values",
|
|
32
|
+
"wait_for_pending_wakeups",
|
|
33
|
+
]
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
from collections.abc import Mapping
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from bluesky.protocols import Reading
|
|
5
|
+
|
|
6
|
+
from ophyd_async.core import AsyncConfigurable, AsyncReadable, SignalDatatypeT, SignalR
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _generate_assert_error_msg(name: str, expected_result, actual_result) -> str:
|
|
10
|
+
WARNING = "\033[93m"
|
|
11
|
+
FAIL = "\033[91m"
|
|
12
|
+
ENDC = "\033[0m"
|
|
13
|
+
return (
|
|
14
|
+
f"Expected {WARNING}{name}{ENDC} to produce"
|
|
15
|
+
+ f"\n{FAIL}{expected_result}{ENDC}"
|
|
16
|
+
+ f"\nbut actually got \n{FAIL}{actual_result}{ENDC}"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
async def assert_value(signal: SignalR[SignalDatatypeT], value: Any) -> None:
|
|
21
|
+
"""Assert a signal's value and compare it an expected signal.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
signal:
|
|
26
|
+
signal with get_value.
|
|
27
|
+
value:
|
|
28
|
+
The expected value from the signal.
|
|
29
|
+
|
|
30
|
+
Notes
|
|
31
|
+
-----
|
|
32
|
+
Example usage::
|
|
33
|
+
await assert_value(signal, value)
|
|
34
|
+
|
|
35
|
+
"""
|
|
36
|
+
actual_value = await signal.get_value()
|
|
37
|
+
assert actual_value == value, _generate_assert_error_msg(
|
|
38
|
+
name=signal.name,
|
|
39
|
+
expected_result=value,
|
|
40
|
+
actual_result=actual_value,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
async def assert_reading(
|
|
45
|
+
readable: AsyncReadable, expected_reading: Mapping[str, Reading]
|
|
46
|
+
) -> None:
|
|
47
|
+
"""Assert readings from readable.
|
|
48
|
+
|
|
49
|
+
Parameters
|
|
50
|
+
----------
|
|
51
|
+
readable:
|
|
52
|
+
Callable with readable.read function that generate readings.
|
|
53
|
+
|
|
54
|
+
reading:
|
|
55
|
+
The expected readings from the readable.
|
|
56
|
+
|
|
57
|
+
Notes
|
|
58
|
+
-----
|
|
59
|
+
Example usage::
|
|
60
|
+
await assert_reading(readable, reading)
|
|
61
|
+
|
|
62
|
+
"""
|
|
63
|
+
actual_reading = await readable.read()
|
|
64
|
+
assert expected_reading == actual_reading, _generate_assert_error_msg(
|
|
65
|
+
name=readable.name,
|
|
66
|
+
expected_result=expected_reading,
|
|
67
|
+
actual_result=actual_reading,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
async def assert_configuration(
|
|
72
|
+
configurable: AsyncConfigurable,
|
|
73
|
+
configuration: Mapping[str, Reading],
|
|
74
|
+
) -> None:
|
|
75
|
+
"""Assert readings from Configurable.
|
|
76
|
+
|
|
77
|
+
Parameters
|
|
78
|
+
----------
|
|
79
|
+
configurable:
|
|
80
|
+
Configurable with Configurable.read function that generate readings.
|
|
81
|
+
|
|
82
|
+
configuration:
|
|
83
|
+
The expected readings from configurable.
|
|
84
|
+
|
|
85
|
+
Notes
|
|
86
|
+
-----
|
|
87
|
+
Example usage::
|
|
88
|
+
await assert_configuration(configurable configuration)
|
|
89
|
+
|
|
90
|
+
"""
|
|
91
|
+
actual_configurable = await configurable.read_configuration()
|
|
92
|
+
assert configuration == actual_configurable, _generate_assert_error_msg(
|
|
93
|
+
name=configurable.name,
|
|
94
|
+
expected_result=configuration,
|
|
95
|
+
actual_result=actual_configurable,
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def assert_emitted(docs: Mapping[str, list[dict]], **numbers: int):
|
|
100
|
+
"""Assert emitted document generated by running a Bluesky plan
|
|
101
|
+
|
|
102
|
+
Parameters
|
|
103
|
+
----------
|
|
104
|
+
Doc:
|
|
105
|
+
A dictionary
|
|
106
|
+
|
|
107
|
+
numbers:
|
|
108
|
+
expected emission in kwarg from
|
|
109
|
+
|
|
110
|
+
Notes
|
|
111
|
+
-----
|
|
112
|
+
Example usage::
|
|
113
|
+
docs = defaultdict(list)
|
|
114
|
+
RE.subscribe(lambda name, doc: docs[name].append(doc))
|
|
115
|
+
RE(my_plan())
|
|
116
|
+
assert_emitted(docs, start=1, descriptor=1, event=1, stop=1)
|
|
117
|
+
"""
|
|
118
|
+
assert list(docs) == list(numbers), _generate_assert_error_msg(
|
|
119
|
+
name="documents",
|
|
120
|
+
expected_result=list(numbers),
|
|
121
|
+
actual_result=list(docs),
|
|
122
|
+
)
|
|
123
|
+
actual_numbers = {name: len(d) for name, d in docs.items()}
|
|
124
|
+
assert actual_numbers == numbers, _generate_assert_error_msg(
|
|
125
|
+
name="emitted",
|
|
126
|
+
expected_result=numbers,
|
|
127
|
+
actual_result=actual_numbers,
|
|
128
|
+
)
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
from collections.abc import Awaitable, Callable, Iterable
|
|
2
|
-
from contextlib import
|
|
2
|
+
from contextlib import contextmanager
|
|
3
3
|
from unittest.mock import AsyncMock, Mock
|
|
4
4
|
|
|
5
|
-
from .
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
from ophyd_async.core import (
|
|
6
|
+
Device,
|
|
7
|
+
LazyMock,
|
|
8
|
+
MockSignalBackend,
|
|
9
|
+
Signal,
|
|
10
|
+
SignalConnector,
|
|
11
|
+
SignalDatatypeT,
|
|
12
|
+
SignalR,
|
|
13
|
+
)
|
|
10
14
|
|
|
11
15
|
|
|
12
16
|
def get_mock(device: Device | Signal) -> Mock:
|
|
@@ -40,8 +44,8 @@ def set_mock_put_proceeds(signal: Signal, proceeds: bool):
|
|
|
40
44
|
backend.put_proceeds.clear()
|
|
41
45
|
|
|
42
46
|
|
|
43
|
-
@
|
|
44
|
-
|
|
47
|
+
@contextmanager
|
|
48
|
+
def mock_puts_blocked(*signals: Signal):
|
|
45
49
|
for signal in signals:
|
|
46
50
|
set_mock_put_proceeds(signal, False)
|
|
47
51
|
yield
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
async def wait_for_pending_wakeups(max_yields=20, raise_if_exceeded=True):
|
|
5
|
+
"""Allow any ready asyncio tasks to be woken up.
|
|
6
|
+
|
|
7
|
+
Used in:
|
|
8
|
+
|
|
9
|
+
- Tests to allow tasks like ``set()`` to start so that signal
|
|
10
|
+
puts can be tested
|
|
11
|
+
- `observe_value` to allow it to be wrapped in `asyncio.wait_for`
|
|
12
|
+
with a timeout
|
|
13
|
+
"""
|
|
14
|
+
loop = asyncio.get_event_loop()
|
|
15
|
+
# If anything has called loop.call_soon or is scheduled a wakeup
|
|
16
|
+
# then let it run
|
|
17
|
+
for _ in range(max_yields):
|
|
18
|
+
await asyncio.sleep(0)
|
|
19
|
+
if not loop._ready: # type: ignore # noqa: SLF001
|
|
20
|
+
return
|
|
21
|
+
if raise_if_exceeded:
|
|
22
|
+
raise RuntimeError(f"Tasks still scheduling wakeups after {max_yields} yields")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0a1
|
|
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
|
|
@@ -37,65 +37,67 @@ Classifier: Development Status :: 3 - Alpha
|
|
|
37
37
|
Classifier: License :: OSI Approved :: BSD License
|
|
38
38
|
Classifier: Programming Language :: Python :: 3.10
|
|
39
39
|
Classifier: Programming Language :: Python :: 3.11
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
40
41
|
Requires-Python: >=3.10
|
|
41
42
|
Description-Content-Type: text/markdown
|
|
42
43
|
License-File: LICENSE
|
|
43
|
-
Requires-Dist: networkx
|
|
44
|
+
Requires-Dist: networkx>=2.0
|
|
44
45
|
Requires-Dist: numpy
|
|
45
46
|
Requires-Dist: packaging
|
|
46
47
|
Requires-Dist: pint
|
|
47
|
-
Requires-Dist: bluesky
|
|
48
|
-
Requires-Dist: event-model
|
|
49
|
-
Requires-Dist: p4p
|
|
48
|
+
Requires-Dist: bluesky>=1.13
|
|
49
|
+
Requires-Dist: event-model>=1.22.1
|
|
50
|
+
Requires-Dist: p4p>=4.2.0a3
|
|
50
51
|
Requires-Dist: pyyaml
|
|
51
52
|
Requires-Dist: colorlog
|
|
52
|
-
Requires-Dist: pydantic
|
|
53
|
+
Requires-Dist: pydantic>=2.0
|
|
53
54
|
Requires-Dist: pydantic-numpy
|
|
54
55
|
Provides-Extra: ca
|
|
55
|
-
Requires-Dist: aioca
|
|
56
|
-
Provides-Extra: dev
|
|
57
|
-
Requires-Dist: ophyd-async[pva] ; extra == 'dev'
|
|
58
|
-
Requires-Dist: ophyd-async[sim] ; extra == 'dev'
|
|
59
|
-
Requires-Dist: ophyd-async[ca] ; extra == 'dev'
|
|
60
|
-
Requires-Dist: ophyd-async[tango] ; extra == 'dev'
|
|
61
|
-
Requires-Dist: inflection ; extra == 'dev'
|
|
62
|
-
Requires-Dist: ipython ; extra == 'dev'
|
|
63
|
-
Requires-Dist: ipywidgets ; extra == 'dev'
|
|
64
|
-
Requires-Dist: matplotlib ; extra == 'dev'
|
|
65
|
-
Requires-Dist: myst-parser ; extra == 'dev'
|
|
66
|
-
Requires-Dist: numpydoc ; extra == 'dev'
|
|
67
|
-
Requires-Dist: ophyd ; extra == 'dev'
|
|
68
|
-
Requires-Dist: pickleshare ; extra == 'dev'
|
|
69
|
-
Requires-Dist: pipdeptree ; extra == 'dev'
|
|
70
|
-
Requires-Dist: pre-commit ; extra == 'dev'
|
|
71
|
-
Requires-Dist: pydata-sphinx-theme >=0.12 ; extra == 'dev'
|
|
72
|
-
Requires-Dist: pyepics >=3.4.2 ; extra == 'dev'
|
|
73
|
-
Requires-Dist: pyright ; extra == 'dev'
|
|
74
|
-
Requires-Dist: pyside6 ==6.7.0 ; extra == 'dev'
|
|
75
|
-
Requires-Dist: pytest ; extra == 'dev'
|
|
76
|
-
Requires-Dist: pytest-asyncio ; extra == 'dev'
|
|
77
|
-
Requires-Dist: pytest-cov ; extra == 'dev'
|
|
78
|
-
Requires-Dist: pytest-faulthandler ; extra == 'dev'
|
|
79
|
-
Requires-Dist: pytest-forked ; extra == 'dev'
|
|
80
|
-
Requires-Dist: pytest-rerunfailures ; extra == 'dev'
|
|
81
|
-
Requires-Dist: pytest-timeout ; extra == 'dev'
|
|
82
|
-
Requires-Dist: ruff ; extra == 'dev'
|
|
83
|
-
Requires-Dist: sphinx <7.4.0 ; extra == 'dev'
|
|
84
|
-
Requires-Dist: sphinx-autobuild ; extra == 'dev'
|
|
85
|
-
Requires-Dist: autodoc-pydantic ; extra == 'dev'
|
|
86
|
-
Requires-Dist: sphinxcontrib-mermaid ; extra == 'dev'
|
|
87
|
-
Requires-Dist: sphinx-copybutton ; extra == 'dev'
|
|
88
|
-
Requires-Dist: sphinx-design ; extra == 'dev'
|
|
89
|
-
Requires-Dist: super-state-machine ; extra == 'dev'
|
|
90
|
-
Requires-Dist: tox-direct ; extra == 'dev'
|
|
91
|
-
Requires-Dist: types-mock ; extra == 'dev'
|
|
92
|
-
Requires-Dist: types-pyyaml ; extra == 'dev'
|
|
56
|
+
Requires-Dist: aioca>=1.6; extra == "ca"
|
|
93
57
|
Provides-Extra: pva
|
|
94
|
-
Requires-Dist: p4p
|
|
58
|
+
Requires-Dist: p4p; extra == "pva"
|
|
95
59
|
Provides-Extra: sim
|
|
96
|
-
Requires-Dist: h5py
|
|
60
|
+
Requires-Dist: h5py; extra == "sim"
|
|
97
61
|
Provides-Extra: tango
|
|
98
|
-
Requires-Dist: pytango
|
|
62
|
+
Requires-Dist: pytango>=10.0.0; extra == "tango"
|
|
63
|
+
Provides-Extra: dev
|
|
64
|
+
Requires-Dist: ophyd_async[pva]; extra == "dev"
|
|
65
|
+
Requires-Dist: ophyd_async[sim]; extra == "dev"
|
|
66
|
+
Requires-Dist: ophyd_async[ca]; extra == "dev"
|
|
67
|
+
Requires-Dist: ophyd_async[tango]; extra == "dev"
|
|
68
|
+
Requires-Dist: inflection; extra == "dev"
|
|
69
|
+
Requires-Dist: ipython; extra == "dev"
|
|
70
|
+
Requires-Dist: ipywidgets; extra == "dev"
|
|
71
|
+
Requires-Dist: import-linter; extra == "dev"
|
|
72
|
+
Requires-Dist: matplotlib; extra == "dev"
|
|
73
|
+
Requires-Dist: myst-parser; extra == "dev"
|
|
74
|
+
Requires-Dist: numpydoc; extra == "dev"
|
|
75
|
+
Requires-Dist: ophyd; extra == "dev"
|
|
76
|
+
Requires-Dist: pickleshare; extra == "dev"
|
|
77
|
+
Requires-Dist: pipdeptree; extra == "dev"
|
|
78
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
79
|
+
Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
|
|
80
|
+
Requires-Dist: pyepics>=3.4.2; extra == "dev"
|
|
81
|
+
Requires-Dist: pyright; extra == "dev"
|
|
82
|
+
Requires-Dist: pyside6==6.7.0; 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: sphinx<7.4.0; extra == "dev"
|
|
92
|
+
Requires-Dist: sphinx-autobuild; extra == "dev"
|
|
93
|
+
Requires-Dist: autodoc-pydantic; 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: super_state_machine; extra == "dev"
|
|
98
|
+
Requires-Dist: tox-direct; extra == "dev"
|
|
99
|
+
Requires-Dist: types-mock; extra == "dev"
|
|
100
|
+
Requires-Dist: types-pyyaml; extra == "dev"
|
|
99
101
|
|
|
100
102
|
[](https://github.com/bluesky/ophyd-async/actions/workflows/ci.yml)
|
|
101
103
|
[](https://codecov.io/gh/bluesky/ophyd-async)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
ophyd_async/__init__.py,sha256=tEfgj45lRItQ-_u8SRFPM-mpBh3gWvHXr3emhiJJG_M,225
|
|
2
|
+
ophyd_async/__main__.py,sha256=n_U4O9bgm97OuboUB_9eK7eFiwy8BZSgXJ0OzbE0DqU,481
|
|
3
|
+
ophyd_async/_version.py,sha256=fqly1zb7P_f9515NUzRb7AMheEwRLpJkaVG_Pep_nis,413
|
|
4
|
+
ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
ophyd_async/core/__init__.py,sha256=GQCfHqV_nypbNkzzycqq_JxCnIIP1rwBiSB9gBq1EE0,3805
|
|
6
|
+
ophyd_async/core/_detector.py,sha256=Zyrc5dMSmOM4bC_tOXHFfWtXnTtEQGkrAN6kydvUIFw,14307
|
|
7
|
+
ophyd_async/core/_device.py,sha256=oIC-P6Lu6MDAdB_bHPzuT-ox8gTBAcjRNRNEh89IABk,13000
|
|
8
|
+
ophyd_async/core/_device_filler.py,sha256=Nw-DUyuXYpvt4mmCAQaNVA0LFBBaPK84ubZo3bR39Ak,11407
|
|
9
|
+
ophyd_async/core/_device_save_loader.py,sha256=OViN9_LWNOLuajzrHDKYEqd5I47u5npQACdGceKcIGY,8375
|
|
10
|
+
ophyd_async/core/_flyer.py,sha256=us5z6MNGCvIfgPDTmFTxNERSP37g0WVRkRD0Z2JiMgM,1701
|
|
11
|
+
ophyd_async/core/_hdf_dataset.py,sha256=wW_OL8OYLGOsE01ny3hGaapOrxK7BzhWTxKgz8CIXK0,2492
|
|
12
|
+
ophyd_async/core/_log.py,sha256=UbL9AtnHVUg7r9LofzgmuKEtBESy03usCp7ejmDltG4,3679
|
|
13
|
+
ophyd_async/core/_mock_signal_backend.py,sha256=8Upnz6QrSigeDXemjZ-jB4sV2yIPUzid-6GOfTZ-7Io,2805
|
|
14
|
+
ophyd_async/core/_protocol.py,sha256=0pwF_EUu7LZjr-Hg6LKy6B1-5y4gpsU81JsPiNI5g_s,3317
|
|
15
|
+
ophyd_async/core/_providers.py,sha256=ff9ZT5-PZ6rhTTdE-q8w9l_k9DuZqLWLebsKZLeJ0Ds,7112
|
|
16
|
+
ophyd_async/core/_readable.py,sha256=7FxqxhAT1wBQqOEivgnY731zA9QoK1Tt-ZGcH7GBOXM,10623
|
|
17
|
+
ophyd_async/core/_signal.py,sha256=KCIJongFllgRBRJxN1EjsmYR17qTu_wBm-b1OrdhT2w,20558
|
|
18
|
+
ophyd_async/core/_signal_backend.py,sha256=YWPgLSPbfPnWIUDHvP1ArCVK8zKXJxzzbloqQe_ucCI,5040
|
|
19
|
+
ophyd_async/core/_soft_signal_backend.py,sha256=w9zzD4eoD9SsJpORXNSaFOLJrD6biYBbCSVAybLa_7k,5926
|
|
20
|
+
ophyd_async/core/_status.py,sha256=OUKhblRQ4KU5PDsWbpvYduM7G60JMk1NqeV4eqyPtKc,5131
|
|
21
|
+
ophyd_async/core/_table.py,sha256=tNu396gDGjpX1xUBQXgKI7aiDugaBl2McH_kVZPn_kQ,5535
|
|
22
|
+
ophyd_async/core/_utils.py,sha256=bzgxs1KdB35mkONzpDOg3eH6bVMIbJt49qRY0PrFqi4,9870
|
|
23
|
+
ophyd_async/epics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
ophyd_async/epics/motor.py,sha256=d5EwfpTmblxuO1H37rzIOTDgNy1OlZmp10FWXOVUQ4o,9076
|
|
25
|
+
ophyd_async/epics/signal.py,sha256=hJCGIIWjRVhjEHkeL1I_oPEaaN7dDFKmm7G7ZmgoTYQ,219
|
|
26
|
+
ophyd_async/epics/adaravis/__init__.py,sha256=u979_9nQTYB0TvDOTXFN4qMrbDP8-xQFfXYMGzLVBo4,207
|
|
27
|
+
ophyd_async/epics/adaravis/_aravis.py,sha256=XBuLQBZYj2tptY39bVzXjl6t-ZpPwqrUOwpR54l-hSo,1952
|
|
28
|
+
ophyd_async/epics/adaravis/_aravis_controller.py,sha256=3zt-BWr-UnM1nguphHhJBNHXgBD6ntzifYXYL2o9VCM,2831
|
|
29
|
+
ophyd_async/epics/adaravis/_aravis_io.py,sha256=_RViDrTDaTutitRbHlJ5VV23X70lvfhyY3DTzgXy6yI,1603
|
|
30
|
+
ophyd_async/epics/adcore/__init__.py,sha256=3wMOyFGaq1X61LqK4iY4pq-m_BjhOgYZD2-mNCAjpzk,1086
|
|
31
|
+
ophyd_async/epics/adcore/_core_io.py,sha256=4yGdsV-uivrJYas07fDFbjNwnqJukB654YneBHGsZJU,6076
|
|
32
|
+
ophyd_async/epics/adcore/_core_logic.py,sha256=2QUWoHc6wJDwFVV81CN0rAOxhgb0SFJNLCeBxKv1Fi4,3632
|
|
33
|
+
ophyd_async/epics/adcore/_hdf_writer.py,sha256=y0K-u3E27a8vJTklvyKrWlzRPNBp1G7DHipUtvUtOWc,7338
|
|
34
|
+
ophyd_async/epics/adcore/_single_trigger.py,sha256=5-s0kgqqrPeNv9gjAB2pNXuxa9oEgwt9KBq58JRta6Y,1208
|
|
35
|
+
ophyd_async/epics/adcore/_utils.py,sha256=qXOT79_CNwtO8BdpHybi4meG3Xq4pqEvWYW-Jjt_elA,3932
|
|
36
|
+
ophyd_async/epics/adkinetix/__init__.py,sha256=cvnwOqbvEENf70eFp6bPGwayP0u14UTIhs3WiZEcF_Q,262
|
|
37
|
+
ophyd_async/epics/adkinetix/_kinetix.py,sha256=JsQVc4d7lRCnVObJlM775hHLfp3rYRSRgOoIyRvrSek,1184
|
|
38
|
+
ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=R5l7TaPlibeGPY67o18-Ra3i65IVIxRQ_1Zbn8kmi5s,1701
|
|
39
|
+
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=3zqfmoTCTkhd7kiqD4wiYrnu5EADzzegaCRJFBaZuVk,910
|
|
40
|
+
ophyd_async/epics/adpilatus/__init__.py,sha256=daimScOCCMHR2eb8VbezHOcGOkd6uIRZQiyeTQsaAx4,308
|
|
41
|
+
ophyd_async/epics/adpilatus/_pilatus.py,sha256=hsHYeMbYJiePn3uci-YSUivQRhAaYAgicr3K145HbBA,1751
|
|
42
|
+
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=Bef_-2uJe8hTM-VO_xScMCnEB172n7jSmhdUevPtdJY,2676
|
|
43
|
+
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=Jznmhwidmr_YaUdWXazWFYNQq4wn_sI1dXeo9Zhyf0M,738
|
|
44
|
+
ophyd_async/epics/adsimdetector/__init__.py,sha256=t3crUgTEvVJGI8o6FsfN42k0A-l4v9ZBwXIYtixoE-M,128
|
|
45
|
+
ophyd_async/epics/adsimdetector/_sim.py,sha256=jzsPJdcwdciR2mVPbvg9KhGHWWGNDQwK5TwPcS7_tco,1009
|
|
46
|
+
ophyd_async/epics/adsimdetector/_sim_controller.py,sha256=WXKj5SclfLJ0IywCk81GmFj0ZGMkDnX7jRfatXe1EYo,1677
|
|
47
|
+
ophyd_async/epics/advimba/__init__.py,sha256=l0ElP3Zyff_pzrTRdj9oUO9xigCfmzo3pMVjstlVsJY,320
|
|
48
|
+
ophyd_async/epics/advimba/_vimba.py,sha256=E_RJ0uJQt-RWAY7uFTNkHaOdGYS5sa7ZbRgAe6ngXTA,1125
|
|
49
|
+
ophyd_async/epics/advimba/_vimba_controller.py,sha256=DZNNtYeii1ogFuoW4IV8YYDdNyyt4TwcktMEr4TlJoI,2226
|
|
50
|
+
ophyd_async/epics/advimba/_vimba_io.py,sha256=il-SZSiApx5OUQCYHUGoa0Ywu9pY01DSDvOttU15khQ,1864
|
|
51
|
+
ophyd_async/epics/core/__init__.py,sha256=8NoQxEEc2Ny_L9nrD2fnGSf_2gJr1wCR1LwUeLNcIJo,588
|
|
52
|
+
ophyd_async/epics/core/_aioca.py,sha256=iQWiHWYbMJLa7qeBrCz4_e16Y8A-NYYi6oYNi8oOFVY,11617
|
|
53
|
+
ophyd_async/epics/core/_epics_connector.py,sha256=n1FlQYui8HdobPxaX3VAflrzi2UT7QCe3cFasssmVLw,1789
|
|
54
|
+
ophyd_async/epics/core/_epics_device.py,sha256=kshNiKQhevsL2OZXa-r093L_sQGvGK_0J4PWVLg3Eqw,437
|
|
55
|
+
ophyd_async/epics/core/_p4p.py,sha256=xtN45sJovj_5bo_e6ZUf0A_uIAeMUVgTcYJi-AtzMmw,15518
|
|
56
|
+
ophyd_async/epics/core/_pvi_connector.py,sha256=wi9PiiWtWWE8mlHAfgDd6zKHvXn35E5DaqDvk4k5KD0,3755
|
|
57
|
+
ophyd_async/epics/core/_signal.py,sha256=0_g2dd60tUl1inEY9hUQvWrEka4uvNW8hylrhnB76Q8,4842
|
|
58
|
+
ophyd_async/epics/core/_util.py,sha256=wdwFd6sJoFQo3eGElPzhPaJi3KqLf5Zq_03Hoya7YsE,2079
|
|
59
|
+
ophyd_async/epics/demo/__init__.py,sha256=wCrgemEo-zR4TTvaqCKnQ-AIUHorotV5jhftbq1tXz0,1368
|
|
60
|
+
ophyd_async/epics/demo/_mover.py,sha256=tuAvP8TuyJtHhdSloNol7pBpiBQMcqUtGil52VjpGsE,3666
|
|
61
|
+
ophyd_async/epics/demo/_sensor.py,sha256=VMxsjLV_V3LeLqnSqIsDHVJgpu5SmASV-rlzok_lLws,1040
|
|
62
|
+
ophyd_async/epics/demo/mover.db,sha256=RFz0rxZue689Wh1sWTZwWeFMUrH04ttPq2u5xJH_Fp4,998
|
|
63
|
+
ophyd_async/epics/demo/sensor.db,sha256=AstyG9E0R4KZBz2FZQSrV_QlrfLoU6M2cvYc15Lf548,553
|
|
64
|
+
ophyd_async/epics/eiger/__init__.py,sha256=b3Tt4pVLk23Giyj50R4e94d2MxWDDmNHWhWwNq2jlaw,221
|
|
65
|
+
ophyd_async/epics/eiger/_eiger.py,sha256=hkMsjVwrzDcE1u5BRIQtn8RSR2e0b1JMpDvuIONoNaI,1133
|
|
66
|
+
ophyd_async/epics/eiger/_eiger_controller.py,sha256=ZJGTwSjQam15mtgG4GQ9nPNv_cA-lSLMFgTMkTK79Gg,2343
|
|
67
|
+
ophyd_async/epics/eiger/_eiger_io.py,sha256=qTBT0SebqzlcNXtLQywSoTmAbVC2wl4i0Wn2fbcEISM,1806
|
|
68
|
+
ophyd_async/epics/eiger/_odin_io.py,sha256=3E33ysvMlf8t0bbSVPnzUrvPgUwA7491uoViWpivpf8,4153
|
|
69
|
+
ophyd_async/epics/testing/__init__.py,sha256=terWt7TtNaxk4dCdAGQs-7HM2Z7Vcy34eX6kcngDbi8,498
|
|
70
|
+
ophyd_async/epics/testing/_example_ioc.py,sha256=-GC4mYacZcbLSZMmOj7Kdz08ZrGv9fsYJ4STs3n6ddQ,3481
|
|
71
|
+
ophyd_async/epics/testing/_utils.py,sha256=-D6aKJydhM-n6290DyyKlnwCHFkbQ-j4tu5AD2JjWZ0,2443
|
|
72
|
+
ophyd_async/epics/testing/test_records.db,sha256=25aW0vPe7ScFXI7zE83DfG6StgdrBwCEwDbfK9_hwVw,3198
|
|
73
|
+
ophyd_async/epics/testing/test_records_pva.db,sha256=NyceNGaCZXNYaXjH2VLhvKl8Z-L6dwfE_kYZKqdIcTU,4054
|
|
74
|
+
ophyd_async/fastcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
ophyd_async/fastcs/core.py,sha256=MpbRLaPJwmaAuunnIV34oq1AUjT1nfv5ggtgw4I42vY,376
|
|
76
|
+
ophyd_async/fastcs/odin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
|
+
ophyd_async/fastcs/panda/__init__.py,sha256=_o7n7ckoTM6hTRHpLphpL7r_9sADE59MRNM0gq_ut2o,980
|
|
78
|
+
ophyd_async/fastcs/panda/_block.py,sha256=UZBWos3g4yhxGhX9oB3g_GU7jGGelgoQ2Yt2sm1MPJM,1709
|
|
79
|
+
ophyd_async/fastcs/panda/_control.py,sha256=QIfF5y4nmjhnATeIuBTNTwXfKkNR6D9E7X0RQub0j1k,1021
|
|
80
|
+
ophyd_async/fastcs/panda/_hdf_panda.py,sha256=UnKG8TJugDJGBm8_Grx9EtR07RtEafx1lin-JClujaQ,1172
|
|
81
|
+
ophyd_async/fastcs/panda/_table.py,sha256=5YyAfsl3H7kxH3bDjUKHuH9DyrWQmAn9dv-v0NYzFNo,2289
|
|
82
|
+
ophyd_async/fastcs/panda/_trigger.py,sha256=z9VGb4XPaw3xrOsvTbgpLHbduDbQJB0M4HP3w5YPB_E,3056
|
|
83
|
+
ophyd_async/fastcs/panda/_utils.py,sha256=NdvzdKy0SOG1eCVMQo_nwRXpBo0wyi6lM5Xw3HvssOw,508
|
|
84
|
+
ophyd_async/fastcs/panda/_writer.py,sha256=wDN6uWX1ENofmI3JBXJ7_CGooI7WsZP-JJQrRiSc6sM,6000
|
|
85
|
+
ophyd_async/plan_stubs/__init__.py,sha256=wjpEj_BoBZJ9x2fhUPY6BzWMqyYH96JrBlJvV7frdN4,524
|
|
86
|
+
ophyd_async/plan_stubs/_ensure_connected.py,sha256=uoqfAzghjifdfD_JM860TvMvj9T2Y12nKPvtI5l6zZc,1021
|
|
87
|
+
ophyd_async/plan_stubs/_fly.py,sha256=ZR3oivJuMIQYXTm_QjZaCtnXY21_T8BB3dVqAnp6EHo,6208
|
|
88
|
+
ophyd_async/plan_stubs/_nd_attributes.py,sha256=TVfy3bhnrLFBXZ6b2bREBj0LzEviEGzuGvgWK3I7tII,2198
|
|
89
|
+
ophyd_async/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
+
ophyd_async/sim/demo/__init__.py,sha256=JKWFnHqmFuRRMvvU0aBuclke3OdF0iq89yvHEd4J7Bg,371
|
|
91
|
+
ophyd_async/sim/demo/_sim_motor.py,sha256=gfvhW9TSgolAf5iAk30GviuHh680pT_RcxxTviZCzvk,3997
|
|
92
|
+
ophyd_async/sim/demo/_pattern_detector/__init__.py,sha256=o_dSZDIl_CyS3YPSNKpGiQiR9UaC4cNzZ8_ByEN9dIk,402
|
|
93
|
+
ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py,sha256=R-UbcxHLFfCK9tBryKZN5Dit0IjYeJGP-QKV2ssKFoQ,1275
|
|
94
|
+
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py,sha256=HqlKNgjd_9pjy6pc74xdJ7JtV1Iko6cNxB2aZReJozw,1999
|
|
95
|
+
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py,sha256=nQOks4EK1Ax0Ib1pkCrmJPF8Jqr7tPusMnby-HGUnP0,1370
|
|
96
|
+
ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py,sha256=gP0Q1-1p_3KOH7mWZc5m-8OUEx_jb7SAdRXcpleRqX4,7096
|
|
97
|
+
ophyd_async/sim/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
|
+
ophyd_async/tango/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
99
|
+
ophyd_async/tango/core/__init__.py,sha256=pBslTNkIt22-g-CDbG9N7pKLQVJqFe6DYXHFFYJZIo8,905
|
|
100
|
+
ophyd_async/tango/core/_base_device.py,sha256=IN1HF1DOf9W9_FhVlzWyuU58gBFu86rYOD1vDZ_a7Wc,4717
|
|
101
|
+
ophyd_async/tango/core/_signal.py,sha256=5ks0dyzCX66cV9R_CnmM949H1RzNQH3Q1XIUhHQCOaI,6421
|
|
102
|
+
ophyd_async/tango/core/_tango_readable.py,sha256=c6xVH56oBp5o3C3y3PuHA5MftvmjKm20BBvrgsTO260,913
|
|
103
|
+
ophyd_async/tango/core/_tango_transport.py,sha256=6yT-UqE7YyH6OxSisUPvwcEqf29i18jHfse6Ag4JtY0,28986
|
|
104
|
+
ophyd_async/tango/demo/__init__.py,sha256=_j-UicTnckuIBp8PnieFMOMnLFGivnaKdmo9o0hYtzc,256
|
|
105
|
+
ophyd_async/tango/demo/_counter.py,sha256=efBqrFj6ejzDh1aggtPXpn1iub1zB4XocRvHqBEiwcs,1105
|
|
106
|
+
ophyd_async/tango/demo/_detector.py,sha256=0wwk7Y-Dl9QF1YsCIU_BxqI6-PQ40qN_0gknrYBkxsY,1292
|
|
107
|
+
ophyd_async/tango/demo/_mover.py,sha256=c5whb380th1eCThs35ftW1bfNRyYRmcofg7xUp6zvV8,2837
|
|
108
|
+
ophyd_async/tango/demo/_tango/__init__.py,sha256=FfONT7vM49nNo3a1Lv-LcMZO9EHv6bv91yY-RnxIib4,85
|
|
109
|
+
ophyd_async/tango/demo/_tango/_servers.py,sha256=MwkkoZWJQm_cgafCBBXeQfwyAiOgU8cE90_uNfcdcGA,2916
|
|
110
|
+
ophyd_async/testing/__init__.py,sha256=O7PFrKkVoPzhyn6f5xv6Jx6-ZahP6iBUAiqdTpalXng,706
|
|
111
|
+
ophyd_async/testing/_assert.py,sha256=dFiy3GC_pJOTbpxvHZ3Mh357j1XtKZcuW74DlkrpJLE,3372
|
|
112
|
+
ophyd_async/testing/_mock_signal_utils.py,sha256=VbnUQhp0QwBK4nTWirwIWRCl9pVudDj9y_qH2LhkCMc,5210
|
|
113
|
+
ophyd_async/testing/_wait_for_pending.py,sha256=YZAR48n-CW0GsPey3zFRzMJ4byDAr3HvMIoawjmTrHw,732
|
|
114
|
+
ophyd_async-0.9.0a1.dist-info/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
|
|
115
|
+
ophyd_async-0.9.0a1.dist-info/METADATA,sha256=94_s1cZumUz1BuiXeodSWxW4AhoIf7Wo4tli2ddQDY0,6753
|
|
116
|
+
ophyd_async-0.9.0a1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
117
|
+
ophyd_async-0.9.0a1.dist-info/entry_points.txt,sha256=O0YNJTEufO0w9BozXi-JurTy2U1_o0ypeCgJLQ727Jk,58
|
|
118
|
+
ophyd_async-0.9.0a1.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
|
|
119
|
+
ophyd_async-0.9.0a1.dist-info/RECORD,,
|