ophyd-async 0.7.0__py3-none-any.whl → 0.8.0a2__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 (70) hide show
  1. ophyd_async/_version.py +2 -2
  2. ophyd_async/core/__init__.py +23 -8
  3. ophyd_async/core/_detector.py +5 -10
  4. ophyd_async/core/_device.py +139 -66
  5. ophyd_async/core/_device_filler.py +191 -0
  6. ophyd_async/core/_device_save_loader.py +6 -7
  7. ophyd_async/core/_mock_signal_backend.py +32 -40
  8. ophyd_async/core/_mock_signal_utils.py +22 -16
  9. ophyd_async/core/_protocol.py +28 -8
  10. ophyd_async/core/_readable.py +5 -5
  11. ophyd_async/core/_signal.py +140 -152
  12. ophyd_async/core/_signal_backend.py +131 -64
  13. ophyd_async/core/_soft_signal_backend.py +125 -194
  14. ophyd_async/core/_status.py +22 -6
  15. ophyd_async/core/_table.py +97 -100
  16. ophyd_async/core/_utils.py +71 -18
  17. ophyd_async/epics/adaravis/_aravis_controller.py +2 -2
  18. ophyd_async/epics/adaravis/_aravis_io.py +7 -5
  19. ophyd_async/epics/adcore/_core_io.py +4 -6
  20. ophyd_async/epics/adcore/_hdf_writer.py +2 -2
  21. ophyd_async/epics/adcore/_utils.py +15 -10
  22. ophyd_async/epics/adkinetix/__init__.py +2 -1
  23. ophyd_async/epics/adkinetix/_kinetix_controller.py +6 -3
  24. ophyd_async/epics/adkinetix/_kinetix_io.py +3 -4
  25. ophyd_async/epics/adpilatus/_pilatus_controller.py +2 -2
  26. ophyd_async/epics/adpilatus/_pilatus_io.py +2 -3
  27. ophyd_async/epics/adsimdetector/_sim_controller.py +2 -2
  28. ophyd_async/epics/advimba/__init__.py +4 -1
  29. ophyd_async/epics/advimba/_vimba_controller.py +6 -3
  30. ophyd_async/epics/advimba/_vimba_io.py +7 -8
  31. ophyd_async/epics/demo/_sensor.py +8 -4
  32. ophyd_async/epics/eiger/_eiger.py +1 -2
  33. ophyd_async/epics/eiger/_eiger_controller.py +1 -1
  34. ophyd_async/epics/eiger/_eiger_io.py +2 -4
  35. ophyd_async/epics/eiger/_odin_io.py +4 -4
  36. ophyd_async/epics/pvi/__init__.py +2 -2
  37. ophyd_async/epics/pvi/_pvi.py +56 -321
  38. ophyd_async/epics/signal/__init__.py +3 -4
  39. ophyd_async/epics/signal/_aioca.py +184 -236
  40. ophyd_async/epics/signal/_common.py +35 -49
  41. ophyd_async/epics/signal/_p4p.py +254 -387
  42. ophyd_async/epics/signal/_signal.py +63 -21
  43. ophyd_async/fastcs/core.py +9 -0
  44. ophyd_async/fastcs/panda/__init__.py +4 -4
  45. ophyd_async/fastcs/panda/_block.py +18 -13
  46. ophyd_async/fastcs/panda/_control.py +3 -5
  47. ophyd_async/fastcs/panda/_hdf_panda.py +5 -19
  48. ophyd_async/fastcs/panda/_table.py +29 -51
  49. ophyd_async/fastcs/panda/_trigger.py +8 -8
  50. ophyd_async/fastcs/panda/_writer.py +2 -5
  51. ophyd_async/plan_stubs/_ensure_connected.py +3 -1
  52. ophyd_async/plan_stubs/_fly.py +2 -2
  53. ophyd_async/plan_stubs/_nd_attributes.py +5 -4
  54. ophyd_async/py.typed +0 -0
  55. ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +1 -2
  56. ophyd_async/tango/__init__.py +2 -4
  57. ophyd_async/tango/base_devices/_base_device.py +76 -143
  58. ophyd_async/tango/demo/_counter.py +2 -2
  59. ophyd_async/tango/demo/_mover.py +2 -2
  60. ophyd_async/tango/signal/__init__.py +2 -4
  61. ophyd_async/tango/signal/_signal.py +29 -50
  62. ophyd_async/tango/signal/_tango_transport.py +38 -40
  63. {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0a2.dist-info}/METADATA +8 -12
  64. ophyd_async-0.8.0a2.dist-info/RECORD +110 -0
  65. {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0a2.dist-info}/WHEEL +1 -1
  66. ophyd_async/epics/signal/_epics_transport.py +0 -34
  67. ophyd_async-0.7.0.dist-info/RECORD +0 -108
  68. {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0a2.dist-info}/LICENSE +0 -0
  69. {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0a2.dist-info}/entry_points.txt +0 -0
  70. {ophyd_async-0.7.0.dist-info → ophyd_async-0.8.0a2.dist-info}/top_level.txt +0 -0
@@ -2,7 +2,6 @@ import asyncio
2
2
  import functools
3
3
  import time
4
4
  from abc import abstractmethod
5
- from asyncio import CancelledError
6
5
  from collections.abc import Callable, Coroutine
7
6
  from enum import Enum
8
7
  from typing import Any, TypeVar, cast
@@ -11,12 +10,11 @@ import numpy as np
11
10
  from bluesky.protocols import Descriptor, Reading
12
11
 
13
12
  from ophyd_async.core import (
14
- DEFAULT_TIMEOUT,
15
13
  AsyncStatus,
14
+ Callback,
16
15
  NotConnected,
17
- ReadingValueCallback,
18
16
  SignalBackend,
19
- T,
17
+ SignalDatatypeT,
20
18
  get_dtype,
21
19
  get_unique,
22
20
  wait_for_connection,
@@ -121,7 +119,7 @@ class TangoProxy:
121
119
  """indicates, that this trl already subscribed"""
122
120
 
123
121
  @abstractmethod
124
- def subscribe_callback(self, callback: ReadingValueCallback | None):
122
+ def subscribe_callback(self, callback: Callback | None):
125
123
  """subscribe tango CHANGE event to callback"""
126
124
 
127
125
  @abstractmethod
@@ -140,7 +138,7 @@ class TangoProxy:
140
138
 
141
139
 
142
140
  class AttributeProxy(TangoProxy):
143
- _callback: ReadingValueCallback | None = None
141
+ _callback: Callback | None = None
144
142
  _eid: int | None = None
145
143
  _poll_task: asyncio.Task | None = None
146
144
  _abs_change: float | None = None
@@ -178,6 +176,7 @@ class AttributeProxy(TangoProxy):
178
176
  async def put(
179
177
  self, value: object | None, wait: bool = True, timeout: float | None = None
180
178
  ) -> AsyncStatus | None:
179
+ # TODO: remove the timeout from this as it is handled at the signal level
181
180
  if wait:
182
181
  try:
183
182
 
@@ -236,7 +235,7 @@ class AttributeProxy(TangoProxy):
236
235
  def has_subscription(self) -> bool:
237
236
  return bool(self._callback)
238
237
 
239
- def subscribe_callback(self, callback: ReadingValueCallback | None):
238
+ def subscribe_callback(self, callback: Callback | None):
240
239
  # If the attribute supports events, then we can subscribe to them
241
240
  # If the callback is not a callable, then we raise an error
242
241
  if callback is not None and not callable(callback):
@@ -283,21 +282,20 @@ class AttributeProxy(TangoProxy):
283
282
  if self._callback is not None:
284
283
  # Call the callback with the last reading
285
284
  try:
286
- self._callback(self._last_reading, self._last_reading["value"])
285
+ self._callback(self._last_reading)
287
286
  except TypeError:
288
287
  pass
289
288
  self._callback = None
290
289
 
291
290
  def _event_processor(self, event):
292
291
  if not event.err:
293
- value = event.attr_value.value
294
292
  reading = Reading(
295
- value=value,
293
+ value=event.attr_value.value,
296
294
  timestamp=event.get_date().totime(),
297
295
  alarm_severity=event.attr_value.quality,
298
296
  )
299
297
  if self._callback is not None:
300
- self._callback(reading, value)
298
+ self._callback(reading)
301
299
 
302
300
  async def poll(self):
303
301
  """
@@ -310,7 +308,7 @@ class AttributeProxy(TangoProxy):
310
308
  flag = 0
311
309
  # Initial reading
312
310
  if self._callback is not None:
313
- self._callback(last_reading, last_reading["value"])
311
+ self._callback(last_reading)
314
312
  except Exception as e:
315
313
  raise RuntimeError(f"Could not poll the attribute: {e}") from e
316
314
 
@@ -325,7 +323,7 @@ class AttributeProxy(TangoProxy):
325
323
  diff = abs(reading["value"] - last_reading["value"])
326
324
  if self._abs_change is not None and diff >= abs(self._abs_change):
327
325
  if self._callback is not None:
328
- self._callback(reading, reading["value"])
326
+ self._callback(reading)
329
327
  flag = 0
330
328
 
331
329
  elif (
@@ -333,13 +331,13 @@ class AttributeProxy(TangoProxy):
333
331
  and diff >= self._rel_change * abs(last_reading["value"])
334
332
  ):
335
333
  if self._callback is not None:
336
- self._callback(reading, reading["value"])
334
+ self._callback(reading)
337
335
  flag = 0
338
336
 
339
337
  else:
340
338
  flag = (flag + 1) % 4
341
339
  if flag == 0 and self._callback is not None:
342
- self._callback(reading, reading["value"])
340
+ self._callback(reading)
343
341
 
344
342
  last_reading = reading.copy()
345
343
  if self._callback is None:
@@ -358,13 +356,13 @@ class AttributeProxy(TangoProxy):
358
356
  reading["value"], last_reading["value"]
359
357
  ):
360
358
  if self._callback is not None:
361
- self._callback(reading, reading["value"])
359
+ self._callback(reading)
362
360
  else:
363
361
  break
364
362
  else:
365
363
  if reading["value"] != last_reading["value"]:
366
364
  if self._callback is not None:
367
- self._callback(reading, reading["value"])
365
+ self._callback(reading)
368
366
  else:
369
367
  break
370
368
  last_reading = reading.copy()
@@ -390,7 +388,7 @@ class AttributeProxy(TangoProxy):
390
388
  class CommandProxy(TangoProxy):
391
389
  _last_reading: Reading = Reading(value=None, timestamp=0, alarm_severity=0)
392
390
 
393
- def subscribe_callback(self, callback: ReadingValueCallback | None) -> None:
391
+ def subscribe_callback(self, callback: Callback | None) -> None:
394
392
  raise NotImplementedError("Cannot subscribe to commands")
395
393
 
396
394
  def unsubscribe_callback(self) -> None:
@@ -584,14 +582,14 @@ def get_trl_descriptor(
584
582
 
585
583
 
586
584
  async def get_tango_trl(
587
- full_trl: str, device_proxy: DeviceProxy | TangoProxy | None
585
+ full_trl: str, device_proxy: DeviceProxy | TangoProxy | None, timeout: float
588
586
  ) -> TangoProxy:
589
587
  if isinstance(device_proxy, TangoProxy):
590
588
  return device_proxy
591
589
  device_trl, trl_name = full_trl.rsplit("/", 1)
592
590
  trl_name = trl_name.lower()
593
591
  if device_proxy is None:
594
- device_proxy = await AsyncDeviceProxy(device_trl)
592
+ device_proxy = await AsyncDeviceProxy(device_trl, timeout=timeout)
595
593
 
596
594
  # all attributes can be always accessible with low register
597
595
  if isinstance(device_proxy, DeviceProxy):
@@ -620,16 +618,15 @@ async def get_tango_trl(
620
618
  raise RuntimeError(f"{trl_name} cannot be found in {device_proxy.name()}")
621
619
 
622
620
 
623
- class TangoSignalBackend(SignalBackend[T]):
621
+ class TangoSignalBackend(SignalBackend[SignalDatatypeT]):
624
622
  def __init__(
625
623
  self,
626
- datatype: type[T] | None,
624
+ datatype: type[SignalDatatypeT] | None,
627
625
  read_trl: str = "",
628
626
  write_trl: str = "",
629
627
  device_proxy: DeviceProxy | None = None,
630
628
  ):
631
629
  self.device_proxy = device_proxy
632
- self.datatype = datatype
633
630
  self.read_trl = read_trl
634
631
  self.write_trl = write_trl
635
632
  self.proxies: dict[str, TangoProxy | DeviceProxy | None] = {
@@ -646,6 +643,7 @@ class TangoSignalBackend(SignalBackend[T]):
646
643
  )
647
644
  self.support_events: bool = True
648
645
  self.status: AsyncStatus | None = None
646
+ super().__init__(datatype)
649
647
 
650
648
  @classmethod
651
649
  def datatype_allowed(cls, dtype: Any) -> bool:
@@ -659,14 +657,14 @@ class TangoSignalBackend(SignalBackend[T]):
659
657
  write_trl: self.device_proxy,
660
658
  }
661
659
 
662
- def source(self, name: str) -> str:
663
- return self.read_trl
660
+ def source(self, name: str, read: bool) -> str:
661
+ return self.read_trl if read else self.write_trl
664
662
 
665
- async def _connect_and_store_config(self, trl: str) -> None:
663
+ async def _connect_and_store_config(self, trl: str, timeout: float) -> None:
666
664
  if not trl:
667
665
  raise RuntimeError(f"trl not set for {self}")
668
666
  try:
669
- self.proxies[trl] = await get_tango_trl(trl, self.proxies[trl])
667
+ self.proxies[trl] = await get_tango_trl(trl, self.proxies[trl], timeout)
670
668
  if self.proxies[trl] is None:
671
669
  raise NotConnected(f"Not connected to {trl}")
672
670
  # Pyright does not believe that self.proxies[trl] is not None despite
@@ -674,27 +672,27 @@ class TangoSignalBackend(SignalBackend[T]):
674
672
  await self.proxies[trl].connect() # type: ignore
675
673
  self.trl_configs[trl] = await self.proxies[trl].get_config() # type: ignore
676
674
  self.proxies[trl].support_events = self.support_events # type: ignore
677
- except CancelledError as ce:
678
- raise NotConnected(f"Could not connect to {trl}") from ce
675
+ except TimeoutError as ce:
676
+ raise NotConnected(f"tango://{trl}") from ce
679
677
 
680
- async def connect(self, timeout: float = DEFAULT_TIMEOUT) -> None:
678
+ async def connect(self, timeout: float) -> None:
681
679
  if not self.read_trl:
682
680
  raise RuntimeError(f"trl not set for {self}")
683
681
  if self.read_trl != self.write_trl:
684
682
  # Different, need to connect both
685
683
  await wait_for_connection(
686
- read_trl=self._connect_and_store_config(self.read_trl),
687
- write_trl=self._connect_and_store_config(self.write_trl),
684
+ read_trl=self._connect_and_store_config(self.read_trl, timeout),
685
+ write_trl=self._connect_and_store_config(self.write_trl, timeout),
688
686
  )
689
687
  else:
690
688
  # The same, so only need to connect one
691
- await self._connect_and_store_config(self.read_trl)
689
+ await self._connect_and_store_config(self.read_trl, timeout)
692
690
  self.proxies[self.read_trl].set_polling(*self._polling) # type: ignore
693
691
  self.descriptor = get_trl_descriptor(
694
692
  self.datatype, self.read_trl, self.trl_configs
695
693
  )
696
694
 
697
- async def put(self, value: T | None, wait=True, timeout=None) -> None:
695
+ async def put(self, value: SignalDatatypeT | None, wait=True, timeout=None) -> None:
698
696
  if self.proxies[self.write_trl] is None:
699
697
  raise NotConnected(f"Not connected to {self.write_trl}")
700
698
  self.status = None
@@ -704,28 +702,28 @@ class TangoSignalBackend(SignalBackend[T]):
704
702
  async def get_datakey(self, source: str) -> Descriptor:
705
703
  return self.descriptor
706
704
 
707
- async def get_reading(self) -> Reading:
705
+ async def get_reading(self) -> Reading[SignalDatatypeT]:
708
706
  if self.proxies[self.read_trl] is None:
709
707
  raise NotConnected(f"Not connected to {self.read_trl}")
710
708
  return await self.proxies[self.read_trl].get_reading() # type: ignore
711
709
 
712
- async def get_value(self) -> T:
710
+ async def get_value(self) -> SignalDatatypeT:
713
711
  if self.proxies[self.read_trl] is None:
714
712
  raise NotConnected(f"Not connected to {self.read_trl}")
715
713
  proxy = self.proxies[self.read_trl]
716
714
  if proxy is None:
717
715
  raise NotConnected(f"Not connected to {self.read_trl}")
718
- return cast(T, await proxy.get())
716
+ return cast(SignalDatatypeT, await proxy.get())
719
717
 
720
- async def get_setpoint(self) -> T:
718
+ async def get_setpoint(self) -> SignalDatatypeT:
721
719
  if self.proxies[self.write_trl] is None:
722
720
  raise NotConnected(f"Not connected to {self.write_trl}")
723
721
  proxy = self.proxies[self.write_trl]
724
722
  if proxy is None:
725
723
  raise NotConnected(f"Not connected to {self.write_trl}")
726
- return cast(T, await proxy.get_w_value())
724
+ return cast(SignalDatatypeT, await proxy.get_w_value())
727
725
 
728
- def set_callback(self, callback: ReadingValueCallback | None) -> None:
726
+ def set_callback(self, callback: Callback | None) -> None:
729
727
  if self.proxies[self.read_trl] is None:
730
728
  raise NotConnected(f"Not connected to {self.read_trl}")
731
729
  if self.support_events is False and self._polling[0] is False:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ophyd-async
3
- Version: 0.7.0
3
+ Version: 0.8.0a2
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
@@ -41,12 +41,12 @@ Requires-Python: >=3.10
41
41
  Description-Content-Type: text/markdown
42
42
  License-File: LICENSE
43
43
  Requires-Dist: networkx >=2.0
44
- Requires-Dist: numpy <2.0.0
44
+ Requires-Dist: numpy
45
45
  Requires-Dist: packaging
46
46
  Requires-Dist: pint
47
- Requires-Dist: bluesky >=1.13.0a3
48
- Requires-Dist: event-model
49
- Requires-Dist: p4p
47
+ Requires-Dist: bluesky >=1.13
48
+ Requires-Dist: event-model >=1.22.1
49
+ Requires-Dist: p4p >=4.2.0a3
50
50
  Requires-Dist: pyyaml
51
51
  Requires-Dist: colorlog
52
52
  Requires-Dist: pydantic >=2.0
@@ -58,10 +58,6 @@ Requires-Dist: ophyd-async[pva] ; extra == 'dev'
58
58
  Requires-Dist: ophyd-async[sim] ; extra == 'dev'
59
59
  Requires-Dist: ophyd-async[ca] ; extra == 'dev'
60
60
  Requires-Dist: ophyd-async[tango] ; extra == 'dev'
61
- Requires-Dist: black ; extra == 'dev'
62
- Requires-Dist: flake8 ; extra == 'dev'
63
- Requires-Dist: flake8-isort ; extra == 'dev'
64
- Requires-Dist: Flake8-pyproject ; extra == 'dev'
65
61
  Requires-Dist: inflection ; extra == 'dev'
66
62
  Requires-Dist: ipython ; extra == 'dev'
67
63
  Requires-Dist: ipywidgets ; extra == 'dev'
@@ -104,9 +100,9 @@ Requires-Dist: pytango >=10.0.0 ; extra == 'tango'
104
100
  [![CI](https://github.com/bluesky/ophyd-async/actions/workflows/ci.yml/badge.svg)](https://github.com/bluesky/ophyd-async/actions/workflows/ci.yml)
105
101
  [![Coverage](https://codecov.io/gh/bluesky/ophyd-async/branch/main/graph/badge.svg)](https://codecov.io/gh/bluesky/ophyd-async)
106
102
  [![PyPI](https://img.shields.io/pypi/v/ophyd-async.svg)](https://pypi.org/project/ophyd-async)
107
- [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
103
+ [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://choosealicense.com/licenses/bsd-3-clause)
108
104
 
109
- # ophyd-async
105
+ # ![ophyd-async](https://raw.githubusercontent.com/bluesky/ophyd-async/main/docs/images/ophyd-async-logo.svg)
110
106
 
111
107
  Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango.
112
108
 
@@ -116,7 +112,7 @@ Asynchronous Bluesky hardware abstraction code, compatible with control systems
116
112
  | Documentation | <https://bluesky.github.io/ophyd-async> |
117
113
  | Releases | <https://github.com/bluesky/ophyd-async/releases> |
118
114
 
119
- Ophyd-async is a Python library for asynchronously interfacing with hardware, intended to
115
+ Ophyd-async is a Python library for asynchronously interfacing with hardware, intended to
120
116
  be used as an abstraction layer that enables experiment orchestration and data acquisition code to operate above the specifics of particular devices and control
121
117
  systems.
122
118
 
@@ -0,0 +1,110 @@
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=89ACrxBz6ayPyRUoZiAmc28ARp-c3Nyrpb31qenCm-Y,413
4
+ ophyd_async/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ ophyd_async/core/__init__.py,sha256=j1QNO04b_uYqIJzEo7dGgyQq5h1VT0cFMHcimpCX6zs,4178
6
+ ophyd_async/core/_detector.py,sha256=bKLekM2J3GzLXsKwe8qXQjNP_sAVsa8EtwFEWD-8MeA,14307
7
+ ophyd_async/core/_device.py,sha256=bKFE-RG3SS966FRcZSSfOZnAWcz1At6FFBcpKMeGxi8,10956
8
+ ophyd_async/core/_device_filler.py,sha256=YoBhH_r9xEFrLPOCaIOTZdlrmSsosyn3np69RJsk-6Q,8345
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=E8YMLJJyAt8UAwX-5PMQCuAuHuVVs5ko7vJtY5qR9P8,2656
14
+ ophyd_async/core/_mock_signal_utils.py,sha256=i7CCFeB6JkTpdAe32Jtap2nrvFL-gbz_3zrnlK7Lbow,5139
15
+ ophyd_async/core/_protocol.py,sha256=MuYRqSfakdry9RllX7G9UTzp4lw3eDjtkdGPpnbNb34,4040
16
+ ophyd_async/core/_providers.py,sha256=ff9ZT5-PZ6rhTTdE-q8w9l_k9DuZqLWLebsKZLeJ0Ds,7112
17
+ ophyd_async/core/_readable.py,sha256=KC5n-LXKzFyYkhZ7KXwFlHM05pe8iDCnyldfS1pel3s,9075
18
+ ophyd_async/core/_signal.py,sha256=4Umj1EXgz89ZO1Ej-b5TEkmr72pdw3Jbyk-nIsYIYpo,20011
19
+ ophyd_async/core/_signal_backend.py,sha256=YWPgLSPbfPnWIUDHvP1ArCVK8zKXJxzzbloqQe_ucCI,5040
20
+ ophyd_async/core/_soft_signal_backend.py,sha256=VBemKbSM397zhtjm6zLKozhJ8cY3XhDu42OagBc_d64,5663
21
+ ophyd_async/core/_status.py,sha256=OUKhblRQ4KU5PDsWbpvYduM7G60JMk1NqeV4eqyPtKc,5131
22
+ ophyd_async/core/_table.py,sha256=ZToBVmAPDmhrVDgjx0f8SErxVdKhvGdGwQ-fXxGCtN8,5386
23
+ ophyd_async/core/_utils.py,sha256=e5zmHkkCvMYJRWGIMGMww18YSyOhSsdNYTta3FQzdQY,7515
24
+ ophyd_async/epics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ ophyd_async/epics/motor.py,sha256=mOrFiTt6WrXJM4d5Stksrxc_j9Vcd3L3w1QLCX_K0zM,8752
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=t4vuMsQ_67tNsAYPFFtBKq3YIHhRnK08DwPzi8Am_-k,2831
29
+ ophyd_async/epics/adaravis/_aravis_io.py,sha256=wjeN3qYVyy-HsLKJH0SZLC663AERKYPD38vvL71BRAQ,1605
30
+ ophyd_async/epics/adcore/__init__.py,sha256=3wMOyFGaq1X61LqK4iY4pq-m_BjhOgYZD2-mNCAjpzk,1086
31
+ ophyd_async/epics/adcore/_core_io.py,sha256=Tgi9djvG5z-dgxO6Jq2-kAi-dAE5VOntL88xRrLLP8I,6078
32
+ ophyd_async/epics/adcore/_core_logic.py,sha256=JjrSmKErRFSv1C98or1Upwi01k3NWDRMi2fPHVWMmWw,3561
33
+ ophyd_async/epics/adcore/_hdf_writer.py,sha256=eWT9SH7uegf9rpCWRmVCZTsOxF1drPaOAMmoXm99mVk,7215
34
+ ophyd_async/epics/adcore/_single_trigger.py,sha256=NaTOHKDD0nzAPPrva-4dR-h102khpJ3cPKqEmS3HzY8,1168
35
+ ophyd_async/epics/adcore/_utils.py,sha256=MZBKeSPIRzyo6f84MpzPp28KwOLa9qgrkMIFc618wOE,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=LyK-CWkEV1l_RVhCOHf2lLgo1FRIkDCa4P8JnAGZ4us,1701
39
+ ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=KcNqmt0ejNR6zqJ0opRuAP4DGvryzar4j-03eba090o,912
40
+ ophyd_async/epics/adpilatus/__init__.py,sha256=daimScOCCMHR2eb8VbezHOcGOkd6uIRZQiyeTQsaAx4,308
41
+ ophyd_async/epics/adpilatus/_pilatus.py,sha256=AbWfxEds8ESB73kRXz56FzRPYqy67Ue0m11HRaNUqZY,1751
42
+ ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=eBZnNPHJosYAMdD-efLNgAmTYaqONLJ3qKX-2RW13fg,2676
43
+ ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=0cqv1eXe11Oiz69C0CGEWf6saboC6OJj6cHHJ6fK8Z8,740
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=lxBCJtREDOySrpLNl7_9DbuIw2IhRpSOBK_CvJ5XBs4,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=Ej7irxTab9cfjmqz4G4Zxv3CjhJw_eRmIb3E62YWh6g,2226
50
+ ophyd_async/epics/advimba/_vimba_io.py,sha256=HlMFKv9lTDk1085Zy4n5XGriUNBAfsGd4AqLj8wyjJI,1866
51
+ ophyd_async/epics/demo/__init__.py,sha256=wCrgemEo-zR4TTvaqCKnQ-AIUHorotV5jhftbq1tXz0,1368
52
+ ophyd_async/epics/demo/_mover.py,sha256=2bNfaLZzP1MMzsaLgDEQLf9_uWeOR9fcYzKiGVM2Ze8,3531
53
+ ophyd_async/epics/demo/_sensor.py,sha256=0wICt8888vS5iNQCy8NWBfQPwUhyMo6g0GwQf8cJOs0,1180
54
+ ophyd_async/epics/demo/mover.db,sha256=RFz0rxZue689Wh1sWTZwWeFMUrH04ttPq2u5xJH_Fp4,998
55
+ ophyd_async/epics/demo/sensor.db,sha256=AstyG9E0R4KZBz2FZQSrV_QlrfLoU6M2cvYc15Lf548,553
56
+ ophyd_async/epics/eiger/__init__.py,sha256=b3Tt4pVLk23Giyj50R4e94d2MxWDDmNHWhWwNq2jlaw,221
57
+ ophyd_async/epics/eiger/_eiger.py,sha256=hkMsjVwrzDcE1u5BRIQtn8RSR2e0b1JMpDvuIONoNaI,1133
58
+ ophyd_async/epics/eiger/_eiger_controller.py,sha256=GCoZ40BGCFkxDUrgYk9_CwzSr86l-CALw9nUILJVaZA,2251
59
+ ophyd_async/epics/eiger/_eiger_io.py,sha256=It4BvSSbpfKlxuWqRrOe9MaQ5Z0yznoV6yEFjq6OXNM,1808
60
+ ophyd_async/epics/eiger/_odin_io.py,sha256=MC0WVHHfVlpeeHixh5LcstZIuGxRAmOSBpn3qtzOj28,4155
61
+ ophyd_async/epics/pvi/__init__.py,sha256=cTt0ixrEPUTXyOs7A_yscsVOvWUEDKwU94BOvhjxVy0,71
62
+ ophyd_async/epics/pvi/_pvi.py,sha256=2gAuujZyAW5KiSXJrlbs-YokW_sgZJrtKi9sfBNr3-k,2697
63
+ ophyd_async/epics/signal/__init__.py,sha256=e6CVNlEhxXPzruTItHFALk2JyHc5a1zJYCzoFFeqd5o,437
64
+ ophyd_async/epics/signal/_aioca.py,sha256=zOIF6ca9ombRLS0QghPSheHF_lC_mxp0bShFll8bLfs,11666
65
+ ophyd_async/epics/signal/_common.py,sha256=xQBoZQs1lPmocpBokxFle-BxVGq2mVjtRoe7TYZMZNw,1462
66
+ ophyd_async/epics/signal/_p4p.py,sha256=eHVl7ifjdOu55K701d_Gf2TlFgJ9tDCnJQhp2ag98HA,14660
67
+ ophyd_async/epics/signal/_signal.py,sha256=h8iUqXOInhJ6M-xw3KJlU3srRPFwmfdHqlohy-uHRS8,4148
68
+ ophyd_async/fastcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
+ ophyd_async/fastcs/core.py,sha256=0t9fvXeqfP8V4Qz1LIjsh6HqLxZO0R62dbThy1ruWDI,349
70
+ ophyd_async/fastcs/odin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ ophyd_async/fastcs/panda/__init__.py,sha256=_o7n7ckoTM6hTRHpLphpL7r_9sADE59MRNM0gq_ut2o,980
72
+ ophyd_async/fastcs/panda/_block.py,sha256=STQo6NJAqIVfxyMf-2pxINPyr9_nKtXSdicp92a25xo,1709
73
+ ophyd_async/fastcs/panda/_control.py,sha256=61vcJMjYQiUGAM5J0SfkfthFs7U28m9Pe9mgmGGf0-w,1021
74
+ ophyd_async/fastcs/panda/_hdf_panda.py,sha256=WdgWgdrU2yT4keH70VG-ZBVOmT-IpKVyukEuKk7QnJs,1049
75
+ ophyd_async/fastcs/panda/_table.py,sha256=8XkfpdZETflzoZE4qB5Y5ySi8JFxxZulDszVccgY_w4,2293
76
+ ophyd_async/fastcs/panda/_trigger.py,sha256=forImtdnDnaZ0KKhqSxCqwHWXq13SJ4mn9wdM4yqNLY,3056
77
+ ophyd_async/fastcs/panda/_utils.py,sha256=NdvzdKy0SOG1eCVMQo_nwRXpBo0wyi6lM5Xw3HvssOw,508
78
+ ophyd_async/fastcs/panda/_writer.py,sha256=wDN6uWX1ENofmI3JBXJ7_CGooI7WsZP-JJQrRiSc6sM,6000
79
+ ophyd_async/plan_stubs/__init__.py,sha256=wjpEj_BoBZJ9x2fhUPY6BzWMqyYH96JrBlJvV7frdN4,524
80
+ ophyd_async/plan_stubs/_ensure_connected.py,sha256=MIn-aWKiaGI0k7ac-_Ca40uouoGsyRX1gAHY-A-ifGI,750
81
+ ophyd_async/plan_stubs/_fly.py,sha256=WxghBAHsF-8xFrILCm44jeHIu9udLhm-tj4JXd9kZjY,6208
82
+ ophyd_async/plan_stubs/_nd_attributes.py,sha256=TVfy3bhnrLFBXZ6b2bREBj0LzEviEGzuGvgWK3I7tII,2198
83
+ ophyd_async/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
+ ophyd_async/sim/demo/__init__.py,sha256=JKWFnHqmFuRRMvvU0aBuclke3OdF0iq89yvHEd4J7Bg,371
85
+ ophyd_async/sim/demo/_sim_motor.py,sha256=13mswR9ybIHD00BFlmrqR7c4v_3in5FBv33cVfu8Uyc,3623
86
+ ophyd_async/sim/demo/_pattern_detector/__init__.py,sha256=o_dSZDIl_CyS3YPSNKpGiQiR9UaC4cNzZ8_ByEN9dIk,402
87
+ ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py,sha256=R-UbcxHLFfCK9tBryKZN5Dit0IjYeJGP-QKV2ssKFoQ,1275
88
+ ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py,sha256=HqlKNgjd_9pjy6pc74xdJ7JtV1Iko6cNxB2aZReJozw,1999
89
+ ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py,sha256=nQOks4EK1Ax0Ib1pkCrmJPF8Jqr7tPusMnby-HGUnP0,1370
90
+ ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py,sha256=gP0Q1-1p_3KOH7mWZc5m-8OUEx_jb7SAdRXcpleRqX4,7096
91
+ ophyd_async/sim/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
+ ophyd_async/tango/__init__.py,sha256=2XxSpJWvvAlCs0GLPv6sEnUUD40fWq9OzKuiBEZ_MEs,861
93
+ ophyd_async/tango/base_devices/__init__.py,sha256=fbn1-rfK8MCErpSmjAJuQioDikbjOobd4sDvAB9Xupw,157
94
+ ophyd_async/tango/base_devices/_base_device.py,sha256=aMhDB2REBFRLX6R1nyHEvA9xUNbOV9STI1qldfdnkLE,5924
95
+ ophyd_async/tango/base_devices/_tango_readable.py,sha256=J-XeR2fmQU5RTdsNhRvzNPJD8xZRVJ6-qXt09vfpVtI,951
96
+ ophyd_async/tango/demo/__init__.py,sha256=_j-UicTnckuIBp8PnieFMOMnLFGivnaKdmo9o0hYtzc,256
97
+ ophyd_async/tango/demo/_counter.py,sha256=u4abG9AMpiz_Xlomu05AHFEjb9YKzSFolanm8NdqnOE,1262
98
+ ophyd_async/tango/demo/_detector.py,sha256=0wwk7Y-Dl9QF1YsCIU_BxqI6-PQ40qN_0gknrYBkxsY,1292
99
+ ophyd_async/tango/demo/_mover.py,sha256=aag8J-8Vd_wX3HitrTwh17caUAg1rq-YHfCMkEYAyy0,2659
100
+ ophyd_async/tango/demo/_tango/__init__.py,sha256=FfONT7vM49nNo3a1Lv-LcMZO9EHv6bv91yY-RnxIib4,85
101
+ ophyd_async/tango/demo/_tango/_servers.py,sha256=MwkkoZWJQm_cgafCBBXeQfwyAiOgU8cE90_uNfcdcGA,2916
102
+ ophyd_async/tango/signal/__init__.py,sha256=-_wBvhSPb58h_XSeGVaJ6gMFOY8TQNsVYfZxQuxGB1c,750
103
+ ophyd_async/tango/signal/_signal.py,sha256=72iOxCt6HkyaYPgE402h5fd1KryyVUarR0exV2A3UbU,6277
104
+ ophyd_async/tango/signal/_tango_transport.py,sha256=DVTdLu8C19k-QzYaKUzFK2WMbaSd6dIO77k99ugD8U4,28990
105
+ ophyd_async-0.8.0a2.dist-info/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
106
+ ophyd_async-0.8.0a2.dist-info/METADATA,sha256=sCPoZNdh3J_MsprPjPLEqfHPcsY88R9FBgWbE4DcGXY,6708
107
+ ophyd_async-0.8.0a2.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
108
+ ophyd_async-0.8.0a2.dist-info/entry_points.txt,sha256=O0YNJTEufO0w9BozXi-JurTy2U1_o0ypeCgJLQ727Jk,58
109
+ ophyd_async-0.8.0a2.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
110
+ ophyd_async-0.8.0a2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,34 +0,0 @@
1
- """EPICS Signals over CA or PVA"""
2
-
3
- from __future__ import annotations
4
-
5
- from enum import Enum
6
-
7
-
8
- def _make_unavailable_class(error: Exception) -> type:
9
- class TransportNotAvailable:
10
- def __init__(*args, **kwargs):
11
- raise NotImplementedError("Transport not available") from error
12
-
13
- return TransportNotAvailable
14
-
15
-
16
- try:
17
- from ._aioca import CaSignalBackend
18
- except ImportError as ca_error:
19
- CaSignalBackend = _make_unavailable_class(ca_error)
20
-
21
-
22
- try:
23
- from ._p4p import PvaSignalBackend
24
- except ImportError as pva_error:
25
- PvaSignalBackend = _make_unavailable_class(pva_error)
26
-
27
-
28
- class _EpicsTransport(Enum):
29
- """The sorts of transport EPICS support"""
30
-
31
- #: Use Channel Access (using aioca library)
32
- ca = CaSignalBackend
33
- #: Use PVAccess (using p4p library)
34
- pva = PvaSignalBackend
@@ -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,,