ophyd-async 0.7.0__py3-none-any.whl → 0.8.0__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 +34 -9
- ophyd_async/core/_detector.py +5 -10
- ophyd_async/core/_device.py +170 -68
- ophyd_async/core/_device_filler.py +269 -0
- ophyd_async/core/_device_save_loader.py +6 -7
- ophyd_async/core/_mock_signal_backend.py +35 -40
- ophyd_async/core/_mock_signal_utils.py +25 -16
- ophyd_async/core/_protocol.py +28 -8
- ophyd_async/core/_readable.py +133 -134
- ophyd_async/core/_signal.py +219 -163
- ophyd_async/core/_signal_backend.py +131 -64
- ophyd_async/core/_soft_signal_backend.py +131 -194
- ophyd_async/core/_status.py +22 -6
- ophyd_async/core/_table.py +102 -100
- ophyd_async/core/_utils.py +143 -32
- ophyd_async/epics/adaravis/_aravis_controller.py +2 -2
- ophyd_async/epics/adaravis/_aravis_io.py +8 -6
- ophyd_async/epics/adcore/_core_io.py +5 -7
- ophyd_async/epics/adcore/_core_logic.py +3 -1
- ophyd_async/epics/adcore/_hdf_writer.py +2 -2
- ophyd_async/epics/adcore/_single_trigger.py +6 -10
- ophyd_async/epics/adcore/_utils.py +15 -10
- ophyd_async/epics/adkinetix/__init__.py +2 -1
- ophyd_async/epics/adkinetix/_kinetix_controller.py +6 -3
- ophyd_async/epics/adkinetix/_kinetix_io.py +4 -5
- ophyd_async/epics/adpilatus/_pilatus_controller.py +2 -2
- ophyd_async/epics/adpilatus/_pilatus_io.py +3 -4
- ophyd_async/epics/adsimdetector/_sim_controller.py +2 -2
- ophyd_async/epics/advimba/__init__.py +4 -1
- ophyd_async/epics/advimba/_vimba_controller.py +6 -3
- ophyd_async/epics/advimba/_vimba_io.py +8 -9
- ophyd_async/epics/core/__init__.py +26 -0
- ophyd_async/epics/core/_aioca.py +323 -0
- ophyd_async/epics/core/_epics_connector.py +53 -0
- ophyd_async/epics/core/_epics_device.py +13 -0
- ophyd_async/epics/core/_p4p.py +383 -0
- ophyd_async/epics/core/_pvi_connector.py +91 -0
- ophyd_async/epics/core/_signal.py +171 -0
- ophyd_async/epics/core/_util.py +61 -0
- ophyd_async/epics/demo/_mover.py +4 -5
- ophyd_async/epics/demo/_sensor.py +14 -13
- ophyd_async/epics/eiger/_eiger.py +1 -2
- ophyd_async/epics/eiger/_eiger_controller.py +7 -2
- ophyd_async/epics/eiger/_eiger_io.py +3 -5
- ophyd_async/epics/eiger/_odin_io.py +5 -5
- ophyd_async/epics/motor.py +4 -5
- ophyd_async/epics/signal.py +11 -0
- ophyd_async/epics/testing/__init__.py +24 -0
- ophyd_async/epics/testing/_example_ioc.py +105 -0
- ophyd_async/epics/testing/_utils.py +78 -0
- ophyd_async/epics/testing/test_records.db +152 -0
- ophyd_async/epics/testing/test_records_pva.db +177 -0
- ophyd_async/fastcs/core.py +9 -0
- ophyd_async/fastcs/panda/__init__.py +4 -4
- ophyd_async/fastcs/panda/_block.py +18 -13
- ophyd_async/fastcs/panda/_control.py +3 -5
- ophyd_async/fastcs/panda/_hdf_panda.py +5 -19
- ophyd_async/fastcs/panda/_table.py +30 -52
- ophyd_async/fastcs/panda/_trigger.py +8 -8
- ophyd_async/fastcs/panda/_writer.py +2 -5
- ophyd_async/plan_stubs/_ensure_connected.py +20 -13
- ophyd_async/plan_stubs/_fly.py +2 -2
- ophyd_async/plan_stubs/_nd_attributes.py +5 -4
- ophyd_async/py.typed +0 -0
- ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +1 -2
- ophyd_async/sim/demo/_sim_motor.py +3 -4
- ophyd_async/tango/__init__.py +0 -45
- ophyd_async/tango/{signal → core}/__init__.py +9 -6
- ophyd_async/tango/core/_base_device.py +132 -0
- ophyd_async/tango/{signal → core}/_signal.py +42 -53
- ophyd_async/tango/{base_devices → core}/_tango_readable.py +3 -4
- ophyd_async/tango/{signal → core}/_tango_transport.py +38 -40
- ophyd_async/tango/demo/_counter.py +12 -23
- ophyd_async/tango/demo/_mover.py +13 -13
- {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0.dist-info}/METADATA +52 -55
- ophyd_async-0.8.0.dist-info/RECORD +116 -0
- {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0.dist-info}/WHEEL +1 -1
- ophyd_async/epics/pvi/__init__.py +0 -3
- ophyd_async/epics/pvi/_pvi.py +0 -338
- ophyd_async/epics/signal/__init__.py +0 -21
- ophyd_async/epics/signal/_aioca.py +0 -378
- ophyd_async/epics/signal/_common.py +0 -57
- ophyd_async/epics/signal/_epics_transport.py +0 -34
- ophyd_async/epics/signal/_p4p.py +0 -518
- ophyd_async/epics/signal/_signal.py +0 -114
- ophyd_async/tango/base_devices/__init__.py +0 -4
- ophyd_async/tango/base_devices/_base_device.py +0 -225
- ophyd_async-0.7.0.dist-info/RECORD +0 -108
- {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0.dist-info}/LICENSE +0 -0
- {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0.dist-info}/entry_points.txt +0 -0
- {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0.dist-info}/top_level.txt +0 -0
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import (
|
|
4
|
-
TypeVar,
|
|
5
|
-
get_args,
|
|
6
|
-
get_origin,
|
|
7
|
-
get_type_hints,
|
|
8
|
-
)
|
|
9
|
-
|
|
10
|
-
from ophyd_async.core import (
|
|
11
|
-
DEFAULT_TIMEOUT,
|
|
12
|
-
Device,
|
|
13
|
-
Signal,
|
|
14
|
-
)
|
|
15
|
-
from ophyd_async.tango.signal import (
|
|
16
|
-
TangoSignalBackend,
|
|
17
|
-
__tango_signal_auto,
|
|
18
|
-
make_backend,
|
|
19
|
-
)
|
|
20
|
-
from tango import DeviceProxy as DeviceProxy
|
|
21
|
-
from tango.asyncio import DeviceProxy as AsyncDeviceProxy
|
|
22
|
-
|
|
23
|
-
T = TypeVar("T")
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class TangoDevice(Device):
|
|
27
|
-
"""
|
|
28
|
-
General class for TangoDevices. Extends Device to provide attributes for Tango
|
|
29
|
-
devices.
|
|
30
|
-
|
|
31
|
-
Parameters
|
|
32
|
-
----------
|
|
33
|
-
trl: str
|
|
34
|
-
Tango resource locator, typically of the device server.
|
|
35
|
-
device_proxy: Optional[Union[AsyncDeviceProxy, SyncDeviceProxy]]
|
|
36
|
-
Asynchronous or synchronous DeviceProxy object for the device. If not provided,
|
|
37
|
-
an asynchronous DeviceProxy object will be created using the trl and awaited
|
|
38
|
-
when the device is connected.
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
trl: str = ""
|
|
42
|
-
proxy: DeviceProxy | None = None
|
|
43
|
-
_polling: tuple[bool, float, float | None, float | None] = (False, 0.1, None, 0.1)
|
|
44
|
-
_signal_polling: dict[str, tuple[bool, float, float, float]] = {}
|
|
45
|
-
_poll_only_annotated_signals: bool = True
|
|
46
|
-
|
|
47
|
-
def __init__(
|
|
48
|
-
self,
|
|
49
|
-
trl: str | None = None,
|
|
50
|
-
device_proxy: DeviceProxy | None = None,
|
|
51
|
-
name: str = "",
|
|
52
|
-
) -> None:
|
|
53
|
-
self.trl = trl if trl else ""
|
|
54
|
-
self.proxy = device_proxy
|
|
55
|
-
tango_create_children_from_annotations(self)
|
|
56
|
-
super().__init__(name=name)
|
|
57
|
-
|
|
58
|
-
def set_trl(self, trl: str):
|
|
59
|
-
"""Set the Tango resource locator."""
|
|
60
|
-
if not isinstance(trl, str):
|
|
61
|
-
raise ValueError("TRL must be a string.")
|
|
62
|
-
self.trl = trl
|
|
63
|
-
|
|
64
|
-
async def connect(
|
|
65
|
-
self,
|
|
66
|
-
mock: bool = False,
|
|
67
|
-
timeout: float = DEFAULT_TIMEOUT,
|
|
68
|
-
force_reconnect: bool = False,
|
|
69
|
-
):
|
|
70
|
-
if self.trl and self.proxy is None:
|
|
71
|
-
self.proxy = await AsyncDeviceProxy(self.trl)
|
|
72
|
-
elif self.proxy and not self.trl:
|
|
73
|
-
self.trl = self.proxy.name()
|
|
74
|
-
|
|
75
|
-
# Set the trl of the signal backends
|
|
76
|
-
for child in self.children():
|
|
77
|
-
if isinstance(child[1], Signal):
|
|
78
|
-
if isinstance(child[1]._backend, TangoSignalBackend): # noqa: SLF001
|
|
79
|
-
resource_name = child[0].lstrip("_")
|
|
80
|
-
read_trl = f"{self.trl}/{resource_name}"
|
|
81
|
-
child[1]._backend.set_trl(read_trl, read_trl) # noqa: SLF001
|
|
82
|
-
|
|
83
|
-
if self.proxy is not None:
|
|
84
|
-
self.register_signals()
|
|
85
|
-
await _fill_proxy_entries(self)
|
|
86
|
-
|
|
87
|
-
# set_name should be called again to propagate the new signal names
|
|
88
|
-
self.set_name(self.name)
|
|
89
|
-
|
|
90
|
-
# Set the polling configuration
|
|
91
|
-
if self._polling[0]:
|
|
92
|
-
for child in self.children():
|
|
93
|
-
child_type = type(child[1])
|
|
94
|
-
if issubclass(child_type, Signal):
|
|
95
|
-
if isinstance(child[1]._backend, TangoSignalBackend): # noqa: SLF001 # type: ignore
|
|
96
|
-
child[1]._backend.set_polling(*self._polling) # noqa: SLF001 # type: ignore
|
|
97
|
-
child[1]._backend.allow_events(False) # noqa: SLF001 # type: ignore
|
|
98
|
-
if self._signal_polling:
|
|
99
|
-
for signal_name, polling in self._signal_polling.items():
|
|
100
|
-
if hasattr(self, signal_name):
|
|
101
|
-
attr = getattr(self, signal_name)
|
|
102
|
-
if isinstance(attr._backend, TangoSignalBackend): # noqa: SLF001
|
|
103
|
-
attr._backend.set_polling(*polling) # noqa: SLF001
|
|
104
|
-
attr._backend.allow_events(False) # noqa: SLF001
|
|
105
|
-
|
|
106
|
-
await super().connect(mock=mock, timeout=timeout)
|
|
107
|
-
|
|
108
|
-
# Users can override this method to register new signals
|
|
109
|
-
def register_signals(self):
|
|
110
|
-
pass
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def tango_polling(
|
|
114
|
-
polling: tuple[float, float, float]
|
|
115
|
-
| dict[str, tuple[float, float, float]]
|
|
116
|
-
| None = None,
|
|
117
|
-
signal_polling: dict[str, tuple[float, float, float]] | None = None,
|
|
118
|
-
):
|
|
119
|
-
"""
|
|
120
|
-
Class decorator to configure polling for Tango devices.
|
|
121
|
-
|
|
122
|
-
This decorator allows for the configuration of both device-level and signal-level
|
|
123
|
-
polling for Tango devices. Polling is useful for device servers that do not support
|
|
124
|
-
event-driven updates.
|
|
125
|
-
|
|
126
|
-
Parameters
|
|
127
|
-
----------
|
|
128
|
-
polling : Optional[Union[Tuple[float, float, float],
|
|
129
|
-
Dict[str, Tuple[float, float, float]]]], optional
|
|
130
|
-
Device-level polling configuration as a tuple of three floats representing the
|
|
131
|
-
polling interval, polling timeout, and polling delay. Alternatively,
|
|
132
|
-
a dictionary can be provided to specify signal-level polling configurations
|
|
133
|
-
directly.
|
|
134
|
-
signal_polling : Optional[Dict[str, Tuple[float, float, float]]], optional
|
|
135
|
-
Signal-level polling configuration as a dictionary where keys are signal names
|
|
136
|
-
and values are tuples of three floats representing the polling interval, polling
|
|
137
|
-
timeout, and polling delay.
|
|
138
|
-
"""
|
|
139
|
-
if isinstance(polling, dict):
|
|
140
|
-
signal_polling = polling
|
|
141
|
-
polling = None
|
|
142
|
-
|
|
143
|
-
def decorator(cls):
|
|
144
|
-
if polling is not None:
|
|
145
|
-
cls._polling = (True, *polling)
|
|
146
|
-
if signal_polling is not None:
|
|
147
|
-
cls._signal_polling = {k: (True, *v) for k, v in signal_polling.items()}
|
|
148
|
-
return cls
|
|
149
|
-
|
|
150
|
-
return decorator
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
def tango_create_children_from_annotations(
|
|
154
|
-
device: TangoDevice, included_optional_fields: tuple[str, ...] = ()
|
|
155
|
-
):
|
|
156
|
-
"""Initialize blocks at __init__ of `device`."""
|
|
157
|
-
for name, device_type in get_type_hints(type(device)).items():
|
|
158
|
-
if name in ("_name", "parent"):
|
|
159
|
-
continue
|
|
160
|
-
|
|
161
|
-
# device_type, is_optional = _strip_union(device_type)
|
|
162
|
-
# if is_optional and name not in included_optional_fields:
|
|
163
|
-
# continue
|
|
164
|
-
#
|
|
165
|
-
# is_device_vector, device_type = _strip_device_vector(device_type)
|
|
166
|
-
# if is_device_vector:
|
|
167
|
-
# n_device_vector = DeviceVector()
|
|
168
|
-
# setattr(device, name, n_device_vector)
|
|
169
|
-
|
|
170
|
-
# else:
|
|
171
|
-
origin = get_origin(device_type)
|
|
172
|
-
origin = origin if origin else device_type
|
|
173
|
-
|
|
174
|
-
if issubclass(origin, Signal):
|
|
175
|
-
type_args = get_args(device_type)
|
|
176
|
-
datatype = type_args[0] if type_args else None
|
|
177
|
-
backend = make_backend(datatype=datatype, device_proxy=device.proxy)
|
|
178
|
-
setattr(device, name, origin(name=name, backend=backend))
|
|
179
|
-
|
|
180
|
-
elif issubclass(origin, Device) or isinstance(origin, Device):
|
|
181
|
-
assert callable(origin), f"{origin} is not callable."
|
|
182
|
-
setattr(device, name, origin())
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
async def _fill_proxy_entries(device: TangoDevice):
|
|
186
|
-
if device.proxy is None:
|
|
187
|
-
raise RuntimeError(f"Device proxy is not connected for {device.name}")
|
|
188
|
-
proxy_trl = device.trl
|
|
189
|
-
children = [name.lstrip("_") for name, _ in device.children()]
|
|
190
|
-
proxy_attributes = list(device.proxy.get_attribute_list())
|
|
191
|
-
proxy_commands = list(device.proxy.get_command_list())
|
|
192
|
-
combined = proxy_attributes + proxy_commands
|
|
193
|
-
|
|
194
|
-
for name in combined:
|
|
195
|
-
if name not in children:
|
|
196
|
-
full_trl = f"{proxy_trl}/{name}"
|
|
197
|
-
try:
|
|
198
|
-
auto_signal = await __tango_signal_auto(
|
|
199
|
-
trl=full_trl, device_proxy=device.proxy
|
|
200
|
-
)
|
|
201
|
-
setattr(device, name, auto_signal)
|
|
202
|
-
except RuntimeError as e:
|
|
203
|
-
if "Commands with different in and out dtypes" in str(e):
|
|
204
|
-
print(
|
|
205
|
-
f"Skipping {name}. Commands with different in and out dtypes"
|
|
206
|
-
f" are not supported."
|
|
207
|
-
)
|
|
208
|
-
continue
|
|
209
|
-
raise e
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
# def _strip_union(field: T | T) -> tuple[T, bool]:
|
|
213
|
-
# if get_origin(field) is Union:
|
|
214
|
-
# args = get_args(field)
|
|
215
|
-
# is_optional = type(None) in args
|
|
216
|
-
# for arg in args:
|
|
217
|
-
# if arg is not type(None):
|
|
218
|
-
# return arg, is_optional
|
|
219
|
-
# return field, False
|
|
220
|
-
#
|
|
221
|
-
#
|
|
222
|
-
# def _strip_device_vector(field: type[Device]) -> tuple[bool, type[Device]]:
|
|
223
|
-
# if get_origin(field) is DeviceVector:
|
|
224
|
-
# return True, get_args(field)[0]
|
|
225
|
-
# return False, field
|
|
@@ -1,108 +0,0 @@
|
|
|
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=akvr8ObxvMF-aaLBzW41juT4_KL3BjQUrjbwkIuQXMk,411
|
|
4
|
-
ophyd_async/core/__init__.py,sha256=KxYHMQxnbA9J00pSCQKmu80RP8CgEbbTeSh5xu99iKY,3911
|
|
5
|
-
ophyd_async/core/_detector.py,sha256=5QtOcBc3lA_RD6bK4gEG9EPhA5XvlDPvUN72N_cZQK4,14284
|
|
6
|
-
ophyd_async/core/_device.py,sha256=uT0tXZhl4m-IkV-Hb1QEeN1OXEFS7xZUQwwOh4vG3Tw,7952
|
|
7
|
-
ophyd_async/core/_device_save_loader.py,sha256=o1BXzLZJA2a3NoHXrvYQ6jhaak4QB_CdH1hX1hFQZK8,8450
|
|
8
|
-
ophyd_async/core/_flyer.py,sha256=us5z6MNGCvIfgPDTmFTxNERSP37g0WVRkRD0Z2JiMgM,1701
|
|
9
|
-
ophyd_async/core/_hdf_dataset.py,sha256=wW_OL8OYLGOsE01ny3hGaapOrxK7BzhWTxKgz8CIXK0,2492
|
|
10
|
-
ophyd_async/core/_log.py,sha256=UbL9AtnHVUg7r9LofzgmuKEtBESy03usCp7ejmDltG4,3679
|
|
11
|
-
ophyd_async/core/_mock_signal_backend.py,sha256=Ga3ajwnePjV9oN-ZJUkUh6U7um1suY4CbMVYNfCmGF0,2882
|
|
12
|
-
ophyd_async/core/_mock_signal_utils.py,sha256=HKAqQPqSUC9hbvXkrxKzrY-FlDbxj1FtbMB_zABOdog,4809
|
|
13
|
-
ophyd_async/core/_protocol.py,sha256=GNcnsFfHmvrsXJ9l25l6KXTaUWsAh7MGu0y2f6rsRdA,3413
|
|
14
|
-
ophyd_async/core/_providers.py,sha256=ff9ZT5-PZ6rhTTdE-q8w9l_k9DuZqLWLebsKZLeJ0Ds,7112
|
|
15
|
-
ophyd_async/core/_readable.py,sha256=mbKTlnjRa7ez7zRHiXvii7EGxmym8FeP5kcnB8luSo0,9097
|
|
16
|
-
ophyd_async/core/_signal.py,sha256=q4ttdHuzhS5Z2vmc9wwFnx2JrHG8ztYcjzhnbn2CFDM,19914
|
|
17
|
-
ophyd_async/core/_signal_backend.py,sha256=PNR7GrzWp9mTZaHSFRhPuNAEWeaYb919YJ3rV3l70sY,2851
|
|
18
|
-
ophyd_async/core/_soft_signal_backend.py,sha256=Z9WCMDbrTrHuFdab0fyHm5CVlVZHvkMXofT6yW-6rPE,7593
|
|
19
|
-
ophyd_async/core/_status.py,sha256=7jaxc2WkY8LCTwfEsjNMqxLKuWfiFWmEentmp7oSU5s,4594
|
|
20
|
-
ophyd_async/core/_table.py,sha256=qHXCSAMSDfDVNAPi2oPIeHepi0FgYM7sQjNeFysPVKg,5497
|
|
21
|
-
ophyd_async/core/_utils.py,sha256=QYH4wMQFJWkE21eS_IX-7uwuvJ1VTeEpghe8trxyvvU,5949
|
|
22
|
-
ophyd_async/epics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
-
ophyd_async/epics/motor.py,sha256=mOrFiTt6WrXJM4d5Stksrxc_j9Vcd3L3w1QLCX_K0zM,8752
|
|
24
|
-
ophyd_async/epics/adaravis/__init__.py,sha256=u979_9nQTYB0TvDOTXFN4qMrbDP8-xQFfXYMGzLVBo4,207
|
|
25
|
-
ophyd_async/epics/adaravis/_aravis.py,sha256=XBuLQBZYj2tptY39bVzXjl6t-ZpPwqrUOwpR54l-hSo,1952
|
|
26
|
-
ophyd_async/epics/adaravis/_aravis_controller.py,sha256=wzigo8fL5zl8XymRahdzI_kmbRg-WflKgzzGrV-cW5A,2845
|
|
27
|
-
ophyd_async/epics/adaravis/_aravis_io.py,sha256=c6esqJO_86NTv3Mo9BKmQD74kGYLpCXelxcEGZcbKa0,1583
|
|
28
|
-
ophyd_async/epics/adcore/__init__.py,sha256=3wMOyFGaq1X61LqK4iY4pq-m_BjhOgYZD2-mNCAjpzk,1086
|
|
29
|
-
ophyd_async/epics/adcore/_core_io.py,sha256=s0vqTOzQ94IZU0z2K3fgTYEaOtwWHgk--WViAgKqXVY,6086
|
|
30
|
-
ophyd_async/epics/adcore/_core_logic.py,sha256=JjrSmKErRFSv1C98or1Upwi01k3NWDRMi2fPHVWMmWw,3561
|
|
31
|
-
ophyd_async/epics/adcore/_hdf_writer.py,sha256=4ezsPHHt2OWj9H6t4yk-mV9jkwv5vmIRrq5zGsfpGRc,7225
|
|
32
|
-
ophyd_async/epics/adcore/_single_trigger.py,sha256=NaTOHKDD0nzAPPrva-4dR-h102khpJ3cPKqEmS3HzY8,1168
|
|
33
|
-
ophyd_async/epics/adcore/_utils.py,sha256=MRgLwfta-1Dl45aJP_yLScAcxVll0WWR7GGCv3qNqZY,3902
|
|
34
|
-
ophyd_async/epics/adkinetix/__init__.py,sha256=QEft12PURied6LRzjw-NhUmngjAm1XNA3k-5o5aMXDQ,216
|
|
35
|
-
ophyd_async/epics/adkinetix/_kinetix.py,sha256=JsQVc4d7lRCnVObJlM775hHLfp3rYRSRgOoIyRvrSek,1184
|
|
36
|
-
ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=UHdMSrKmJhq0A5wrnHHkqFZEDiIYnImYMYSA5n-szkQ,1754
|
|
37
|
-
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=AbCoYliAobU3I6z3NaswQnExwGTgV458zF3uwkBEQPc,893
|
|
38
|
-
ophyd_async/epics/adpilatus/__init__.py,sha256=daimScOCCMHR2eb8VbezHOcGOkd6uIRZQiyeTQsaAx4,308
|
|
39
|
-
ophyd_async/epics/adpilatus/_pilatus.py,sha256=AbWfxEds8ESB73kRXz56FzRPYqy67Ue0m11HRaNUqZY,1751
|
|
40
|
-
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=K0xzw1hrOdSRb_TlTIZK7t5uPyC1ivbSuhb1GwnzLX0,2742
|
|
41
|
-
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=WB_N2RRpcFCFI6i57PRqjIdpK6hzLpWxn71cWUHUZnc,722
|
|
42
|
-
ophyd_async/epics/adsimdetector/__init__.py,sha256=t3crUgTEvVJGI8o6FsfN42k0A-l4v9ZBwXIYtixoE-M,128
|
|
43
|
-
ophyd_async/epics/adsimdetector/_sim.py,sha256=jzsPJdcwdciR2mVPbvg9KhGHWWGNDQwK5TwPcS7_tco,1009
|
|
44
|
-
ophyd_async/epics/adsimdetector/_sim_controller.py,sha256=R_Ya3HoKsUo69WjofcoT9Oy08Pi1zPjDoUfePM0SXOw,1743
|
|
45
|
-
ophyd_async/epics/advimba/__init__.py,sha256=GSnFWGPNJsCJZ-Tgyv-L38Smwzp2bWC64U_4uD2TLvs,198
|
|
46
|
-
ophyd_async/epics/advimba/_vimba.py,sha256=E_RJ0uJQt-RWAY7uFTNkHaOdGYS5sa7ZbRgAe6ngXTA,1125
|
|
47
|
-
ophyd_async/epics/advimba/_vimba_controller.py,sha256=F3zZEgAYKvACkcKtxE7TKqHO8f-SMSALq0_DFB_OUXA,2279
|
|
48
|
-
ophyd_async/epics/advimba/_vimba_io.py,sha256=nf1BdIWey4RR7KuqyZhH6X5yB8Msg0oOtkVLOuwn6Uc,1843
|
|
49
|
-
ophyd_async/epics/demo/__init__.py,sha256=wCrgemEo-zR4TTvaqCKnQ-AIUHorotV5jhftbq1tXz0,1368
|
|
50
|
-
ophyd_async/epics/demo/_mover.py,sha256=2bNfaLZzP1MMzsaLgDEQLf9_uWeOR9fcYzKiGVM2Ze8,3531
|
|
51
|
-
ophyd_async/epics/demo/_sensor.py,sha256=8OyFAsB3EXMzrQreOIg_TGHrseUtI5rxXpfwwUaC76I,1165
|
|
52
|
-
ophyd_async/epics/demo/mover.db,sha256=RFz0rxZue689Wh1sWTZwWeFMUrH04ttPq2u5xJH_Fp4,998
|
|
53
|
-
ophyd_async/epics/demo/sensor.db,sha256=AstyG9E0R4KZBz2FZQSrV_QlrfLoU6M2cvYc15Lf548,553
|
|
54
|
-
ophyd_async/epics/eiger/__init__.py,sha256=b3Tt4pVLk23Giyj50R4e94d2MxWDDmNHWhWwNq2jlaw,221
|
|
55
|
-
ophyd_async/epics/eiger/_eiger.py,sha256=_t0E6s0IVcV1IQcnxclJM5ZNOP74N_bakFO_pItO1VA,1171
|
|
56
|
-
ophyd_async/epics/eiger/_eiger_controller.py,sha256=Yq5pNHmeGfubDZFoCn0mtOHgxF-byIVAwCN1h2C_YIY,2285
|
|
57
|
-
ophyd_async/epics/eiger/_eiger_io.py,sha256=MlvLWEZ-n-Lf7y9e_WVoPFdw5YoHVWw_8LxSLajnkk8,1818
|
|
58
|
-
ophyd_async/epics/eiger/_odin_io.py,sha256=8EQcnGLJFsgRFtwFIG3PV5vH6Fjg2xqjExZ6RqIb6ew,4170
|
|
59
|
-
ophyd_async/epics/pvi/__init__.py,sha256=ZvJO69ApL7N9rWT9-hD-JZMC_KsHxgeEqxe-01jNUVw,137
|
|
60
|
-
ophyd_async/epics/pvi/_pvi.py,sha256=lbgZRR_Wl1gZWEjmoTzVIOv_1il4ulLU7UCDDetoZ-0,12136
|
|
61
|
-
ophyd_async/epics/signal/__init__.py,sha256=cJGvTnJxHNzpWyWIYXU4UGMoz3uqZ88UVXNvG-TGngo,441
|
|
62
|
-
ophyd_async/epics/signal/_aioca.py,sha256=vmAAywEzLjbL40V7P5MmxhQhII6E70zdizNk9TGnoTI,12703
|
|
63
|
-
ophyd_async/epics/signal/_common.py,sha256=BFz1leFG5VLeDZc8Ndni4GBqFUzvYVs0iIYUiLHS5AE,1624
|
|
64
|
-
ophyd_async/epics/signal/_epics_transport.py,sha256=lMOOg8E1JQu1MDWtp6zFqSdhO5gNKcPn_uYXyWUxofw,824
|
|
65
|
-
ophyd_async/epics/signal/_p4p.py,sha256=l8BcU6fbxs4CN9Hio3VNN5n6WaCx9AP8TfQT-xnaevM,17631
|
|
66
|
-
ophyd_async/epics/signal/_signal.py,sha256=76a8V0qIjV6VKfh-3-SLcD3GZF3dd_2lQt_6mTKe_bA,3204
|
|
67
|
-
ophyd_async/fastcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
|
-
ophyd_async/fastcs/odin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
|
-
ophyd_async/fastcs/panda/__init__.py,sha256=4ct9vmLafK0fSWQ_HjxmT3jRhWz_8CAFpKStgah2RJY,1022
|
|
70
|
-
ophyd_async/fastcs/panda/_block.py,sha256=sqUWLpxIapXd7-jh4l4KtLN4Ex_b1T5PnfVrXM3bswI,1756
|
|
71
|
-
ophyd_async/fastcs/panda/_control.py,sha256=JfZVf-Xl3NYg6uLYZ6iL-n0NlyPT3eut_p0FWh17c7s,1119
|
|
72
|
-
ophyd_async/fastcs/panda/_hdf_panda.py,sha256=nCGXOiVbvQnVRftEF5PNFeOoLO85F2leg0DVl4MDJFw,1526
|
|
73
|
-
ophyd_async/fastcs/panda/_table.py,sha256=GLwAkepKaAHloJN57UFGrEfp8GkruY743ADIGQhNQ4M,3085
|
|
74
|
-
ophyd_async/fastcs/panda/_trigger.py,sha256=32nGv_g7vucHEl4yRzJtAlRKLH0wrEuEKyqqE2URPXs,3032
|
|
75
|
-
ophyd_async/fastcs/panda/_utils.py,sha256=NdvzdKy0SOG1eCVMQo_nwRXpBo0wyi6lM5Xw3HvssOw,508
|
|
76
|
-
ophyd_async/fastcs/panda/_writer.py,sha256=r1rdzzBal_9Osh0vCX0KbvXPU9JXiRbIh0mFatgUlfk,6162
|
|
77
|
-
ophyd_async/plan_stubs/__init__.py,sha256=wjpEj_BoBZJ9x2fhUPY6BzWMqyYH96JrBlJvV7frdN4,524
|
|
78
|
-
ophyd_async/plan_stubs/_ensure_connected.py,sha256=6Q7_UWQ-UQ0awe6mnN4PdNCAOGRm4GZR9X2M-ghQCeI,711
|
|
79
|
-
ophyd_async/plan_stubs/_fly.py,sha256=WJherYDc4_SUGmtJ4QhJNz7b_HDzJncQ2_0RanQtiVI,6222
|
|
80
|
-
ophyd_async/plan_stubs/_nd_attributes.py,sha256=w26G2k3FU1nv-s3Bytwuu_K3lBrbdRYlaJ2TMLgUu7w,2141
|
|
81
|
-
ophyd_async/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
-
ophyd_async/sim/demo/__init__.py,sha256=JKWFnHqmFuRRMvvU0aBuclke3OdF0iq89yvHEd4J7Bg,371
|
|
83
|
-
ophyd_async/sim/demo/_sim_motor.py,sha256=13mswR9ybIHD00BFlmrqR7c4v_3in5FBv33cVfu8Uyc,3623
|
|
84
|
-
ophyd_async/sim/demo/_pattern_detector/__init__.py,sha256=o_dSZDIl_CyS3YPSNKpGiQiR9UaC4cNzZ8_ByEN9dIk,402
|
|
85
|
-
ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py,sha256=R-UbcxHLFfCK9tBryKZN5Dit0IjYeJGP-QKV2ssKFoQ,1275
|
|
86
|
-
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py,sha256=B1XtzRsZM-8_8TTyUHUiEsqaHjLglEUMIhZMwzOXiPo,2037
|
|
87
|
-
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py,sha256=nQOks4EK1Ax0Ib1pkCrmJPF8Jqr7tPusMnby-HGUnP0,1370
|
|
88
|
-
ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py,sha256=gP0Q1-1p_3KOH7mWZc5m-8OUEx_jb7SAdRXcpleRqX4,7096
|
|
89
|
-
ophyd_async/sim/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
-
ophyd_async/tango/__init__.py,sha256=sy1mNNe1H5obPhuontHCy6oKzj4f7B6gFprDCGkVL48,923
|
|
91
|
-
ophyd_async/tango/base_devices/__init__.py,sha256=fbn1-rfK8MCErpSmjAJuQioDikbjOobd4sDvAB9Xupw,157
|
|
92
|
-
ophyd_async/tango/base_devices/_base_device.py,sha256=OZqzqLleL9cepq60z-g7KDCTOrK2F0rL1oRdovt984M,8201
|
|
93
|
-
ophyd_async/tango/base_devices/_tango_readable.py,sha256=J-XeR2fmQU5RTdsNhRvzNPJD8xZRVJ6-qXt09vfpVtI,951
|
|
94
|
-
ophyd_async/tango/demo/__init__.py,sha256=_j-UicTnckuIBp8PnieFMOMnLFGivnaKdmo9o0hYtzc,256
|
|
95
|
-
ophyd_async/tango/demo/_counter.py,sha256=7tz84_uEYBaI3hoFWGXf6UdXK435D7R-eMqT_8U8lpY,1262
|
|
96
|
-
ophyd_async/tango/demo/_detector.py,sha256=0wwk7Y-Dl9QF1YsCIU_BxqI6-PQ40qN_0gknrYBkxsY,1292
|
|
97
|
-
ophyd_async/tango/demo/_mover.py,sha256=VTsEZVrY5p8-lQrEsfIV3UDBXbFxyuvwvilq69ySaKo,2659
|
|
98
|
-
ophyd_async/tango/demo/_tango/__init__.py,sha256=FfONT7vM49nNo3a1Lv-LcMZO9EHv6bv91yY-RnxIib4,85
|
|
99
|
-
ophyd_async/tango/demo/_tango/_servers.py,sha256=MwkkoZWJQm_cgafCBBXeQfwyAiOgU8cE90_uNfcdcGA,2916
|
|
100
|
-
ophyd_async/tango/signal/__init__.py,sha256=bM2ETdQgPQHUij9pQXwKggcj1-f2_RZxquRk8uiF67E,812
|
|
101
|
-
ophyd_async/tango/signal/_signal.py,sha256=2QoqS4drR_Qf1WYpqykNXP5HWr_RU3c4D3Z028er6TM,7106
|
|
102
|
-
ophyd_async/tango/signal/_tango_transport.py,sha256=7zui5Pq347v9DPqfjLSaRW_vORTkflE_IQLBRs-jLoY,28988
|
|
103
|
-
ophyd_async-0.7.0.dist-info/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
|
|
104
|
-
ophyd_async-0.7.0.dist-info/METADATA,sha256=cndLjrpwfhjAY4JfRtcec4GqlZjRELynHIsAQhyK6pY,6770
|
|
105
|
-
ophyd_async-0.7.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
|
106
|
-
ophyd_async-0.7.0.dist-info/entry_points.txt,sha256=O0YNJTEufO0w9BozXi-JurTy2U1_o0ypeCgJLQ727Jk,58
|
|
107
|
-
ophyd_async-0.7.0.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
|
|
108
|
-
ophyd_async-0.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|