ophyd-async 0.5.0__py3-none-any.whl → 0.5.1__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 +2 -0
- ophyd_async/core/_detector.py +38 -28
- ophyd_async/core/_hdf_dataset.py +1 -5
- ophyd_async/core/_mock_signal_utils.py +4 -3
- ophyd_async/core/_providers.py +24 -37
- ophyd_async/core/_signal.py +73 -28
- ophyd_async/epics/adcore/__init__.py +14 -3
- ophyd_async/epics/adcore/_core_io.py +29 -5
- ophyd_async/epics/adcore/_hdf_writer.py +45 -21
- ophyd_async/epics/adcore/_utils.py +69 -70
- ophyd_async/epics/adkinetix/_kinetix_io.py +4 -1
- ophyd_async/epics/adpilatus/_pilatus_controller.py +1 -1
- ophyd_async/epics/adpilatus/_pilatus_io.py +1 -1
- ophyd_async/epics/advimba/_vimba_controller.py +3 -3
- ophyd_async/epics/advimba/_vimba_io.py +6 -4
- ophyd_async/epics/motor.py +15 -2
- ophyd_async/epics/signal/_aioca.py +12 -5
- ophyd_async/epics/signal/_common.py +1 -1
- ophyd_async/epics/signal/_p4p.py +14 -11
- ophyd_async/fastcs/panda/__init__.py +3 -3
- ophyd_async/fastcs/panda/{_common_blocks.py → _block.py} +2 -0
- ophyd_async/fastcs/panda/{_panda_controller.py → _control.py} +1 -1
- ophyd_async/fastcs/panda/_hdf_panda.py +4 -4
- ophyd_async/fastcs/panda/_trigger.py +1 -1
- ophyd_async/fastcs/panda/{_hdf_writer.py → _writer.py} +29 -22
- ophyd_async/plan_stubs/__init__.py +3 -0
- ophyd_async/plan_stubs/_nd_attributes.py +63 -0
- ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +5 -2
- ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py +1 -3
- {ophyd_async-0.5.0.dist-info → ophyd_async-0.5.1.dist-info}/METADATA +46 -44
- {ophyd_async-0.5.0.dist-info → ophyd_async-0.5.1.dist-info}/RECORD +36 -35
- {ophyd_async-0.5.0.dist-info → ophyd_async-0.5.1.dist-info}/WHEEL +1 -1
- {ophyd_async-0.5.0.dist-info → ophyd_async-0.5.1.dist-info}/LICENSE +0 -0
- {ophyd_async-0.5.0.dist-info → ophyd_async-0.5.1.dist-info}/entry_points.txt +0 -0
- {ophyd_async-0.5.0.dist-info → ophyd_async-0.5.1.dist-info}/top_level.txt +0 -0
|
@@ -16,7 +16,7 @@ from ophyd_async.core import (
|
|
|
16
16
|
wait_for_value,
|
|
17
17
|
)
|
|
18
18
|
|
|
19
|
-
from .
|
|
19
|
+
from ._block import DataBlock
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
class PandaHDFWriter(DetectorWriter):
|
|
@@ -27,9 +27,9 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
27
27
|
prefix: str,
|
|
28
28
|
path_provider: PathProvider,
|
|
29
29
|
name_provider: NameProvider,
|
|
30
|
-
|
|
30
|
+
panda_data_block: DataBlock,
|
|
31
31
|
) -> None:
|
|
32
|
-
self.
|
|
32
|
+
self.panda_data_block = panda_data_block
|
|
33
33
|
self._prefix = prefix
|
|
34
34
|
self._path_provider = path_provider
|
|
35
35
|
self._name_provider = name_provider
|
|
@@ -42,25 +42,33 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
42
42
|
"""Retrieve and get descriptor of all PandA signals marked for capture"""
|
|
43
43
|
|
|
44
44
|
# Ensure flushes are immediate
|
|
45
|
-
await self.
|
|
45
|
+
await self.panda_data_block.flush_period.set(0)
|
|
46
46
|
|
|
47
47
|
self._file = None
|
|
48
|
-
info = self._path_provider(device_name=self.
|
|
48
|
+
info = self._path_provider(device_name=self._name_provider())
|
|
49
|
+
|
|
50
|
+
# Set create dir depth first to guarantee that callback when setting
|
|
51
|
+
# directory path has correct value
|
|
52
|
+
await self.panda_data_block.create_directory.set(info.create_dir_depth)
|
|
53
|
+
|
|
49
54
|
# Set the initial values
|
|
50
55
|
await asyncio.gather(
|
|
51
|
-
self.
|
|
52
|
-
|
|
53
|
-
),
|
|
54
|
-
self.panda_device.data.hdf_file_name.set(
|
|
56
|
+
self.panda_data_block.hdf_directory.set(str(info.directory_path)),
|
|
57
|
+
self.panda_data_block.hdf_file_name.set(
|
|
55
58
|
f"{info.filename}.h5",
|
|
56
59
|
),
|
|
57
|
-
self.
|
|
58
|
-
# TODO: Set create_dir_depth once available
|
|
59
|
-
# https://github.com/bluesky/ophyd-async/issues/317
|
|
60
|
+
self.panda_data_block.num_capture.set(0),
|
|
60
61
|
)
|
|
61
62
|
|
|
63
|
+
# Make sure that directory exists or has been created.
|
|
64
|
+
if not await self.panda_data_block.directory_exists.get_value() == 1:
|
|
65
|
+
raise OSError(
|
|
66
|
+
f"Directory {info.directory_path} does not exist or "
|
|
67
|
+
"is not writable by the PandABlocks-ioc!"
|
|
68
|
+
)
|
|
69
|
+
|
|
62
70
|
# Wait for it to start, stashing the status that tells us when it finishes
|
|
63
|
-
await self.
|
|
71
|
+
await self.panda_data_block.capture.set(True)
|
|
64
72
|
if multiplier > 1:
|
|
65
73
|
raise ValueError(
|
|
66
74
|
"All PandA datasets should be scalar, multiplier should be 1"
|
|
@@ -76,7 +84,7 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
76
84
|
await self._update_datasets()
|
|
77
85
|
describe = {
|
|
78
86
|
ds.data_key: DataKey(
|
|
79
|
-
source=self.
|
|
87
|
+
source=self.panda_data_block.hdf_directory.source,
|
|
80
88
|
shape=ds.shape,
|
|
81
89
|
dtype="array" if ds.shape != [1] else "number",
|
|
82
90
|
dtype_numpy="<f8", # PandA data should always be written as Float64
|
|
@@ -92,7 +100,7 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
92
100
|
representation of datasets that the panda will write.
|
|
93
101
|
"""
|
|
94
102
|
|
|
95
|
-
capture_table = await self.
|
|
103
|
+
capture_table = await self.panda_data_block.datasets.get_value()
|
|
96
104
|
self._datasets = [
|
|
97
105
|
HDFDataset(dataset_name, "/" + dataset_name, [1], multiplier=1)
|
|
98
106
|
for dataset_name in capture_table["name"]
|
|
@@ -108,18 +116,18 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
108
116
|
|
|
109
117
|
matcher.__name__ = f"index_at_least_{index}"
|
|
110
118
|
await wait_for_value(
|
|
111
|
-
self.
|
|
119
|
+
self.panda_data_block.num_captured, matcher, timeout=timeout
|
|
112
120
|
)
|
|
113
121
|
|
|
114
122
|
async def get_indices_written(self) -> int:
|
|
115
|
-
return await self.
|
|
123
|
+
return await self.panda_data_block.num_captured.get_value()
|
|
116
124
|
|
|
117
125
|
async def observe_indices_written(
|
|
118
126
|
self, timeout=DEFAULT_TIMEOUT
|
|
119
127
|
) -> AsyncGenerator[int, None]:
|
|
120
128
|
"""Wait until a specific index is ready to be collected"""
|
|
121
129
|
async for num_captured in observe_value(
|
|
122
|
-
self.
|
|
130
|
+
self.panda_data_block.num_captured, timeout
|
|
123
131
|
):
|
|
124
132
|
yield num_captured // self._multiplier
|
|
125
133
|
|
|
@@ -130,9 +138,8 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
130
138
|
if indices_written:
|
|
131
139
|
if not self._file:
|
|
132
140
|
self._file = HDFFile(
|
|
133
|
-
self.
|
|
134
|
-
Path(await self.
|
|
135
|
-
/ Path(await self.panda_device.data.hdf_file_name.get_value()),
|
|
141
|
+
Path(await self.panda_data_block.hdf_directory.get_value())
|
|
142
|
+
/ Path(await self.panda_data_block.hdf_file_name.get_value()),
|
|
136
143
|
self._datasets,
|
|
137
144
|
)
|
|
138
145
|
for doc in self._file.stream_resources():
|
|
@@ -142,6 +149,6 @@ class PandaHDFWriter(DetectorWriter):
|
|
|
142
149
|
|
|
143
150
|
# Could put this function as default for StandardDetector
|
|
144
151
|
async def close(self):
|
|
145
|
-
await self.
|
|
152
|
+
await self.panda_data_block.capture.set(
|
|
146
153
|
False, wait=True, timeout=DEFAULT_TIMEOUT
|
|
147
154
|
)
|
|
@@ -4,10 +4,13 @@ from ._fly import (
|
|
|
4
4
|
prepare_static_seq_table_flyer_and_detectors_with_same_trigger,
|
|
5
5
|
time_resolved_fly_and_collect_with_static_seq_table,
|
|
6
6
|
)
|
|
7
|
+
from ._nd_attributes import setup_ndattributes, setup_ndstats_sum
|
|
7
8
|
|
|
8
9
|
__all__ = [
|
|
9
10
|
"fly_and_collect",
|
|
10
11
|
"prepare_static_seq_table_flyer_and_detectors_with_same_trigger",
|
|
11
12
|
"time_resolved_fly_and_collect_with_static_seq_table",
|
|
12
13
|
"ensure_connected",
|
|
14
|
+
"setup_ndattributes",
|
|
15
|
+
"setup_ndstats_sum",
|
|
13
16
|
]
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
from typing import Sequence
|
|
2
|
+
from xml.etree import cElementTree as ET
|
|
3
|
+
|
|
4
|
+
import bluesky.plan_stubs as bps
|
|
5
|
+
|
|
6
|
+
from ophyd_async.core._device import Device
|
|
7
|
+
from ophyd_async.epics.adcore._core_io import NDArrayBaseIO
|
|
8
|
+
from ophyd_async.epics.adcore._utils import (
|
|
9
|
+
NDAttributeDataType,
|
|
10
|
+
NDAttributeParam,
|
|
11
|
+
NDAttributePv,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def setup_ndattributes(
|
|
16
|
+
device: NDArrayBaseIO, ndattributes: Sequence[NDAttributePv | NDAttributeParam]
|
|
17
|
+
):
|
|
18
|
+
xml_text = ET.Element("Attributes")
|
|
19
|
+
|
|
20
|
+
for ndattribute in ndattributes:
|
|
21
|
+
if isinstance(ndattribute, NDAttributeParam):
|
|
22
|
+
ET.SubElement(
|
|
23
|
+
xml_text,
|
|
24
|
+
"Attribute",
|
|
25
|
+
name=ndattribute.name,
|
|
26
|
+
type="PARAM",
|
|
27
|
+
source=ndattribute.param,
|
|
28
|
+
addr=str(ndattribute.addr),
|
|
29
|
+
datatype=ndattribute.datatype.value,
|
|
30
|
+
description=ndattribute.description,
|
|
31
|
+
)
|
|
32
|
+
elif isinstance(ndattribute, NDAttributePv):
|
|
33
|
+
ET.SubElement(
|
|
34
|
+
xml_text,
|
|
35
|
+
"Attribute",
|
|
36
|
+
name=ndattribute.name,
|
|
37
|
+
type="EPICS_PV",
|
|
38
|
+
source=ndattribute.signal.source.split("ca://")[-1],
|
|
39
|
+
dbrtype=ndattribute.dbrtype.value,
|
|
40
|
+
description=ndattribute.description,
|
|
41
|
+
)
|
|
42
|
+
else:
|
|
43
|
+
raise ValueError(
|
|
44
|
+
f"Invalid type for ndattributes: {type(ndattribute)}. "
|
|
45
|
+
"Expected NDAttributePv or NDAttributeParam."
|
|
46
|
+
)
|
|
47
|
+
yield from bps.mv(device.nd_attributes_file, xml_text)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def setup_ndstats_sum(detector: Device):
|
|
51
|
+
yield from (
|
|
52
|
+
setup_ndattributes(
|
|
53
|
+
detector.hdf,
|
|
54
|
+
[
|
|
55
|
+
NDAttributeParam(
|
|
56
|
+
name=f"{detector.name}-sum",
|
|
57
|
+
param="NDPluginStatsTotal",
|
|
58
|
+
datatype=NDAttributeDataType.DOUBLE,
|
|
59
|
+
description="Sum of the array",
|
|
60
|
+
)
|
|
61
|
+
],
|
|
62
|
+
)
|
|
63
|
+
)
|
|
@@ -14,6 +14,8 @@ class PatternDetectorController(DetectorControl):
|
|
|
14
14
|
exposure: float = 0.1,
|
|
15
15
|
) -> None:
|
|
16
16
|
self.pattern_generator: PatternGenerator = pattern_generator
|
|
17
|
+
if exposure is None:
|
|
18
|
+
exposure = 0.1
|
|
17
19
|
self.pattern_generator.set_exposure(exposure)
|
|
18
20
|
self.path_provider: PathProvider = path_provider
|
|
19
21
|
self.task: Optional[asyncio.Task] = None
|
|
@@ -25,7 +27,8 @@ class PatternDetectorController(DetectorControl):
|
|
|
25
27
|
trigger: DetectorTrigger = DetectorTrigger.internal,
|
|
26
28
|
exposure: Optional[float] = 0.01,
|
|
27
29
|
) -> AsyncStatus:
|
|
28
|
-
|
|
30
|
+
if exposure is None:
|
|
31
|
+
exposure = 0.1
|
|
29
32
|
period: float = exposure + self.get_deadtime(exposure)
|
|
30
33
|
task = asyncio.create_task(
|
|
31
34
|
self._coroutine_for_image_writing(exposure, period, num)
|
|
@@ -42,7 +45,7 @@ class PatternDetectorController(DetectorControl):
|
|
|
42
45
|
pass
|
|
43
46
|
self.task = None
|
|
44
47
|
|
|
45
|
-
def get_deadtime(self, exposure: float) -> float:
|
|
48
|
+
def get_deadtime(self, exposure: float | None) -> float:
|
|
46
49
|
return 0.001
|
|
47
50
|
|
|
48
51
|
async def _coroutine_for_image_writing(
|
|
@@ -166,8 +166,7 @@ class PatternGenerator:
|
|
|
166
166
|
|
|
167
167
|
def _get_new_path(self, path_provider: PathProvider) -> Path:
|
|
168
168
|
info = path_provider(device_name="pattern")
|
|
169
|
-
|
|
170
|
-
new_path: Path = info.root / info.resource_dir / filename
|
|
169
|
+
new_path: Path = info.directory_path / info.filename
|
|
171
170
|
return new_path
|
|
172
171
|
|
|
173
172
|
async def collect_stream_docs(
|
|
@@ -188,7 +187,6 @@ class PatternGenerator:
|
|
|
188
187
|
if not self._hdf_stream_provider:
|
|
189
188
|
assert self.target_path, "open file has not been called"
|
|
190
189
|
self._hdf_stream_provider = HDFFile(
|
|
191
|
-
self._path_provider(),
|
|
192
190
|
self.target_path,
|
|
193
191
|
self._datasets,
|
|
194
192
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.1
|
|
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
|
|
@@ -40,59 +40,61 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
40
40
|
Requires-Python: >=3.10
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
42
|
License-File: LICENSE
|
|
43
|
-
Requires-Dist: networkx
|
|
44
|
-
Requires-Dist: numpy
|
|
43
|
+
Requires-Dist: networkx>=2.0
|
|
44
|
+
Requires-Dist: numpy<2.0.0
|
|
45
45
|
Requires-Dist: packaging
|
|
46
46
|
Requires-Dist: pint
|
|
47
|
-
Requires-Dist: bluesky
|
|
47
|
+
Requires-Dist: bluesky>=1.13.0a3
|
|
48
48
|
Requires-Dist: event-model
|
|
49
49
|
Requires-Dist: p4p
|
|
50
50
|
Requires-Dist: pyyaml
|
|
51
51
|
Requires-Dist: colorlog
|
|
52
|
-
Requires-Dist: pydantic
|
|
52
|
+
Requires-Dist: pydantic>=2.0
|
|
53
53
|
Requires-Dist: pydantic-numpy
|
|
54
54
|
Provides-Extra: ca
|
|
55
|
-
Requires-Dist: aioca
|
|
55
|
+
Requires-Dist: aioca>=1.6; extra == "ca"
|
|
56
56
|
Provides-Extra: dev
|
|
57
|
-
Requires-Dist: ophyd-async[pva]
|
|
58
|
-
Requires-Dist: ophyd-async[
|
|
59
|
-
Requires-Dist:
|
|
60
|
-
Requires-Dist:
|
|
61
|
-
Requires-Dist: flake8
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist:
|
|
64
|
-
Requires-Dist: inflection
|
|
65
|
-
Requires-Dist: ipython
|
|
66
|
-
Requires-Dist: ipywidgets
|
|
67
|
-
Requires-Dist: matplotlib
|
|
68
|
-
Requires-Dist: myst-parser
|
|
69
|
-
Requires-Dist: numpydoc
|
|
70
|
-
Requires-Dist: ophyd
|
|
71
|
-
Requires-Dist: pickleshare
|
|
72
|
-
Requires-Dist: pipdeptree
|
|
73
|
-
Requires-Dist: pre-commit
|
|
74
|
-
Requires-Dist: pydata-sphinx-theme
|
|
75
|
-
Requires-Dist: pyepics
|
|
76
|
-
Requires-Dist: pyside6
|
|
77
|
-
Requires-Dist: pytest
|
|
78
|
-
Requires-Dist: pytest-asyncio
|
|
79
|
-
Requires-Dist: pytest-cov
|
|
80
|
-
Requires-Dist: pytest-faulthandler
|
|
81
|
-
Requires-Dist: pytest-rerunfailures
|
|
82
|
-
Requires-Dist: pytest-timeout
|
|
83
|
-
Requires-Dist: ruff
|
|
84
|
-
Requires-Dist: sphinx
|
|
85
|
-
Requires-Dist: sphinx-autobuild
|
|
86
|
-
Requires-Dist: autodoc-pydantic
|
|
87
|
-
Requires-Dist: sphinxcontrib-mermaid
|
|
88
|
-
Requires-Dist: sphinx-copybutton
|
|
89
|
-
Requires-Dist: sphinx-design
|
|
90
|
-
Requires-Dist: super-state-machine
|
|
91
|
-
Requires-Dist: tox-direct
|
|
92
|
-
Requires-Dist: types-mock
|
|
93
|
-
Requires-Dist: types-pyyaml
|
|
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: black; extra == "dev"
|
|
61
|
+
Requires-Dist: flake8; extra == "dev"
|
|
62
|
+
Requires-Dist: flake8-isort; extra == "dev"
|
|
63
|
+
Requires-Dist: Flake8-pyproject; extra == "dev"
|
|
64
|
+
Requires-Dist: inflection; extra == "dev"
|
|
65
|
+
Requires-Dist: ipython; extra == "dev"
|
|
66
|
+
Requires-Dist: ipywidgets; extra == "dev"
|
|
67
|
+
Requires-Dist: matplotlib; extra == "dev"
|
|
68
|
+
Requires-Dist: myst-parser; extra == "dev"
|
|
69
|
+
Requires-Dist: numpydoc; extra == "dev"
|
|
70
|
+
Requires-Dist: ophyd; extra == "dev"
|
|
71
|
+
Requires-Dist: pickleshare; extra == "dev"
|
|
72
|
+
Requires-Dist: pipdeptree; extra == "dev"
|
|
73
|
+
Requires-Dist: pre-commit; extra == "dev"
|
|
74
|
+
Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
|
|
75
|
+
Requires-Dist: pyepics>=3.4.2; extra == "dev"
|
|
76
|
+
Requires-Dist: pyside6==6.7.0; extra == "dev"
|
|
77
|
+
Requires-Dist: pytest; extra == "dev"
|
|
78
|
+
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
79
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
80
|
+
Requires-Dist: pytest-faulthandler; extra == "dev"
|
|
81
|
+
Requires-Dist: pytest-rerunfailures; extra == "dev"
|
|
82
|
+
Requires-Dist: pytest-timeout; extra == "dev"
|
|
83
|
+
Requires-Dist: ruff; extra == "dev"
|
|
84
|
+
Requires-Dist: sphinx<7.4.0; extra == "dev"
|
|
85
|
+
Requires-Dist: sphinx-autobuild; extra == "dev"
|
|
86
|
+
Requires-Dist: autodoc-pydantic; extra == "dev"
|
|
87
|
+
Requires-Dist: sphinxcontrib-mermaid; extra == "dev"
|
|
88
|
+
Requires-Dist: sphinx-copybutton; extra == "dev"
|
|
89
|
+
Requires-Dist: sphinx-design; extra == "dev"
|
|
90
|
+
Requires-Dist: super-state-machine; extra == "dev"
|
|
91
|
+
Requires-Dist: tox-direct; extra == "dev"
|
|
92
|
+
Requires-Dist: types-mock; extra == "dev"
|
|
93
|
+
Requires-Dist: types-pyyaml; extra == "dev"
|
|
94
94
|
Provides-Extra: pva
|
|
95
|
-
Requires-Dist: p4p
|
|
95
|
+
Requires-Dist: p4p; extra == "pva"
|
|
96
|
+
Provides-Extra: sim
|
|
97
|
+
Requires-Dist: h5py; extra == "sim"
|
|
96
98
|
|
|
97
99
|
[](https://github.com/bluesky/ophyd-async/actions/workflows/ci.yml)
|
|
98
100
|
[](https://codecov.io/gh/bluesky/ophyd-async)
|
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
ophyd_async/__init__.py,sha256=v-rRiDOgZ3sQSMQKq0vgUQZvpeOkoHFXissAx6Ktg84,61
|
|
2
2
|
ophyd_async/__main__.py,sha256=G-Zcv_G9zK7Nhx6o5L5w-wyhMxdl_WgyMELu8IMFqAE,328
|
|
3
|
-
ophyd_async/_version.py,sha256=
|
|
4
|
-
ophyd_async/core/__init__.py,sha256=
|
|
5
|
-
ophyd_async/core/_detector.py,sha256=
|
|
3
|
+
ophyd_async/_version.py,sha256=8W5N0WKS0YIWUpfry5TouisDYjsMUIZ7Vc0crGGGQQU,411
|
|
4
|
+
ophyd_async/core/__init__.py,sha256=avd3aVLO3CPq09h0cKon5QMew7RvtbWtmo2rOagFdkA,3745
|
|
5
|
+
ophyd_async/core/_detector.py,sha256=n5MKTVAzTHVUWH5ZMxcSq7u4qP2nAGemaPyGrPAZQq4,11811
|
|
6
6
|
ophyd_async/core/_device.py,sha256=DDdRujYLCDSuGDB0gqElkzI0qEGb3sMlFP6FgmH2u3A,7554
|
|
7
7
|
ophyd_async/core/_device_save_loader.py,sha256=pTom5EOFa9_5Z3bV37zOnbGx2ujWIOl_D9PVYhpY1FY,8232
|
|
8
8
|
ophyd_async/core/_flyer.py,sha256=8_N9u6s2P9qPZmNtHFfdmFv8FD7sKrKb9-IuvNUVHPw,2267
|
|
9
|
-
ophyd_async/core/_hdf_dataset.py,sha256=
|
|
9
|
+
ophyd_async/core/_hdf_dataset.py,sha256=H3fFzsnLc7BwPgmDP7P9emQ5u6f0GFQ16Myj6qWxQq0,2430
|
|
10
10
|
ophyd_async/core/_log.py,sha256=Hsk2Iwx81n3HpxNR30xGTnLJh_lPGd_CGy2MI3OGpWs,3588
|
|
11
11
|
ophyd_async/core/_mock_signal_backend.py,sha256=M_I2LxxJrJmBAbmILjVoAR6E2U8K2UswvHGiHluMqHc,2799
|
|
12
|
-
ophyd_async/core/_mock_signal_utils.py,sha256=
|
|
12
|
+
ophyd_async/core/_mock_signal_utils.py,sha256=LTrmjQTqvP4yY2bsaOmfLNJAegD850_BNZ6Y8uY5XPQ,4717
|
|
13
13
|
ophyd_async/core/_protocol.py,sha256=aRoqet0ThyVK_wrULh4k_StnpeHnNhXc0YffWdRJNZw,3391
|
|
14
|
-
ophyd_async/core/_providers.py,sha256
|
|
14
|
+
ophyd_async/core/_providers.py,sha256=gCkzLcoXYy2as4CAlLzoA6RzvrYAVIamgRpLsV708ro,7033
|
|
15
15
|
ophyd_async/core/_readable.py,sha256=WayM35JOJj732-YgvGsjUSlCZwZ_zq1zbAmk-1U0uwU,8998
|
|
16
|
-
ophyd_async/core/_signal.py,sha256=
|
|
16
|
+
ophyd_async/core/_signal.py,sha256=38whsWlm4Wo7r7Beh_i0OJ4iqtJNR5TIGtS7_uZ736Y,19610
|
|
17
17
|
ophyd_async/core/_signal_backend.py,sha256=-Vze8-57W0jpcC4gq4P4rZpXXJvi2qrbu0A8AjqA594,2638
|
|
18
18
|
ophyd_async/core/_soft_signal_backend.py,sha256=Z4LiADd9xKrxhhPOx8q5xq4yrJRdJbfuKeB0o2wBjCk,6653
|
|
19
19
|
ophyd_async/core/_status.py,sha256=mjzoGyaMFCfQLIWNKv_VcuCz9unZ9Gs3nCkaa1dTne8,4334
|
|
20
20
|
ophyd_async/core/_utils.py,sha256=3oZcXNqAUHX4ZWMBH5gSuK6cFWEhSkZ9GSDYv0pf8jc,5783
|
|
21
21
|
ophyd_async/epics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
ophyd_async/epics/motor.py,sha256=
|
|
22
|
+
ophyd_async/epics/motor.py,sha256=na1WmomnPsFVYTMJwL0ViFjay1UaepeXprKKAJc7pdk,8771
|
|
23
23
|
ophyd_async/epics/adaravis/__init__.py,sha256=u979_9nQTYB0TvDOTXFN4qMrbDP8-xQFfXYMGzLVBo4,207
|
|
24
24
|
ophyd_async/epics/adaravis/_aravis.py,sha256=f2xiKQr1AcX6R-NjaMMgfXBfbHIsYfDGp4-CyHKIT6I,1949
|
|
25
25
|
ophyd_async/epics/adaravis/_aravis_controller.py,sha256=SzyajBNoqvBOUVtNE0t8ghffY2pYP8U99XgQ-4u2pVI,2635
|
|
26
26
|
ophyd_async/epics/adaravis/_aravis_io.py,sha256=GY2thPUJ-6821GvfZTBLoX8g9d-U1YgyoXe3wYRVw-g,1554
|
|
27
|
-
ophyd_async/epics/adcore/__init__.py,sha256=
|
|
28
|
-
ophyd_async/epics/adcore/_core_io.py,sha256=
|
|
27
|
+
ophyd_async/epics/adcore/__init__.py,sha256=krbCmdOoW2eIbFCztDe1MAlsIyO6vHEcFwkH8DPmy98,1080
|
|
28
|
+
ophyd_async/epics/adcore/_core_io.py,sha256=F4TlnWW0ntAekZlr8qxCpKhFyEThSgjYQCOoKOg4DN8,5918
|
|
29
29
|
ophyd_async/epics/adcore/_core_logic.py,sha256=XpM1t2kqof9q_7fkKlFPKP2vT0DoLgc0drj7cTUHsbU,3421
|
|
30
|
-
ophyd_async/epics/adcore/_hdf_writer.py,sha256=
|
|
30
|
+
ophyd_async/epics/adcore/_hdf_writer.py,sha256=YBQRQJN6Ep62SaAz7zW_9pX7IPwsmqiuNxMuLQwV8sA,6870
|
|
31
31
|
ophyd_async/epics/adcore/_single_trigger.py,sha256=LGhAZV0GoRwRTNFQmgLpkfq73HsiMCu20JKYGOzxt0I,1159
|
|
32
|
-
ophyd_async/epics/adcore/_utils.py,sha256=
|
|
32
|
+
ophyd_async/epics/adcore/_utils.py,sha256=A5AUQIfdbzLgF7A4V-1TSoPD6Kvgs4sbZBGOV7zb8SY,3909
|
|
33
33
|
ophyd_async/epics/adkinetix/__init__.py,sha256=QEft12PURied6LRzjw-NhUmngjAm1XNA3k-5o5aMXDQ,216
|
|
34
34
|
ophyd_async/epics/adkinetix/_kinetix.py,sha256=Xnt54pqxWArcBIZ8RdLMXfMX0kCDCInJQp48MMx6Gmw,1181
|
|
35
35
|
ophyd_async/epics/adkinetix/_kinetix_controller.py,sha256=jHe6MSfqCOdzw0jQ5L6cYq55I0TD5Bso2ZGOZmv1j3Q,1504
|
|
36
|
-
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=
|
|
36
|
+
ophyd_async/epics/adkinetix/_kinetix_io.py,sha256=AbCoYliAobU3I6z3NaswQnExwGTgV458zF3uwkBEQPc,893
|
|
37
37
|
ophyd_async/epics/adpilatus/__init__.py,sha256=daimScOCCMHR2eb8VbezHOcGOkd6uIRZQiyeTQsaAx4,308
|
|
38
38
|
ophyd_async/epics/adpilatus/_pilatus.py,sha256=NEim_ZROa-B0uYXYgLiiAIDzqzl-IjSCqpOrosOvcHk,1748
|
|
39
|
-
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=
|
|
40
|
-
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=
|
|
39
|
+
ophyd_async/epics/adpilatus/_pilatus_controller.py,sha256=1GfzcnhwLam8fAhf889lPz2rrn9mWDaGO3BIELP3R50,2450
|
|
40
|
+
ophyd_async/epics/adpilatus/_pilatus_io.py,sha256=WB_N2RRpcFCFI6i57PRqjIdpK6hzLpWxn71cWUHUZnc,722
|
|
41
41
|
ophyd_async/epics/adsimdetector/__init__.py,sha256=t3crUgTEvVJGI8o6FsfN42k0A-l4v9ZBwXIYtixoE-M,128
|
|
42
42
|
ophyd_async/epics/adsimdetector/_sim.py,sha256=nk4Xj_j_WeKk1FJov-Zo2W7NHnHcBUDbIzranHUpngI,863
|
|
43
43
|
ophyd_async/epics/adsimdetector/_sim_controller.py,sha256=v0GrMXg7U1PUvLKW8zmx8zrunk_MfFt7GbckbVlnUys,1494
|
|
44
44
|
ophyd_async/epics/advimba/__init__.py,sha256=GSnFWGPNJsCJZ-Tgyv-L38Smwzp2bWC64U_4uD2TLvs,198
|
|
45
45
|
ophyd_async/epics/advimba/_vimba.py,sha256=qDLP5KcI0PZGgpMVmzkfxfgIt3hoiqpvNlRGrtEZxl4,1122
|
|
46
|
-
ophyd_async/epics/advimba/_vimba_controller.py,sha256=
|
|
47
|
-
ophyd_async/epics/advimba/_vimba_io.py,sha256=
|
|
46
|
+
ophyd_async/epics/advimba/_vimba_controller.py,sha256=JvQ4M2IdixDI6TXNHSqUs0sX3ncgosecuLmT8bYhU9w,2003
|
|
47
|
+
ophyd_async/epics/advimba/_vimba_io.py,sha256=nf1BdIWey4RR7KuqyZhH6X5yB8Msg0oOtkVLOuwn6Uc,1843
|
|
48
48
|
ophyd_async/epics/demo/__init__.py,sha256=wCrgemEo-zR4TTvaqCKnQ-AIUHorotV5jhftbq1tXz0,1368
|
|
49
49
|
ophyd_async/epics/demo/_mover.py,sha256=7GEmF-mgN0qxiHUE3Tgboh0p9S5AuPBYR-pFeg5QFTk,3520
|
|
50
50
|
ophyd_async/epics/demo/_sensor.py,sha256=8OyFAsB3EXMzrQreOIg_TGHrseUtI5rxXpfwwUaC76I,1165
|
|
@@ -53,37 +53,38 @@ ophyd_async/epics/demo/sensor.db,sha256=AVtiydrdtwAz2EFurO2Ult9SSRtre3r0akOBbL98
|
|
|
53
53
|
ophyd_async/epics/pvi/__init__.py,sha256=ZvJO69ApL7N9rWT9-hD-JZMC_KsHxgeEqxe-01jNUVw,137
|
|
54
54
|
ophyd_async/epics/pvi/_pvi.py,sha256=PUst4KhX8emkbRunLrJeqTruaOMF3mm1s7YJsBB7HpQ,12099
|
|
55
55
|
ophyd_async/epics/signal/__init__.py,sha256=cJGvTnJxHNzpWyWIYXU4UGMoz3uqZ88UVXNvG-TGngo,441
|
|
56
|
-
ophyd_async/epics/signal/_aioca.py,sha256=
|
|
57
|
-
ophyd_async/epics/signal/_common.py,sha256=
|
|
56
|
+
ophyd_async/epics/signal/_aioca.py,sha256=8I3CFNtHWsxDe1DC95VGAITR6hKaW03L_8pBnvdF4-A,11764
|
|
57
|
+
ophyd_async/epics/signal/_common.py,sha256=v8nHeAZcdrAtqwzHDOia03HAhPL0zEP-4qhg4DwK8vY,1867
|
|
58
58
|
ophyd_async/epics/signal/_epics_transport.py,sha256=MnkhnbpYSxrS7Wo8jDJ1YGnkrvjfYEt1oOe-uxjGCPU,839
|
|
59
|
-
ophyd_async/epics/signal/_p4p.py,sha256=
|
|
59
|
+
ophyd_async/epics/signal/_p4p.py,sha256=cvzj6VD3mK-tns1nH8ZukgpvHo1ULMbUc8Qg-B6drBQ,15981
|
|
60
60
|
ophyd_async/epics/signal/_signal.py,sha256=i5q7zTv5y3HFQRI1JrwWT-gN6bViPWNuks14le2pTFI,3252
|
|
61
61
|
ophyd_async/fastcs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
62
62
|
ophyd_async/fastcs/odin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
|
-
ophyd_async/fastcs/panda/__init__.py,sha256=
|
|
64
|
-
ophyd_async/fastcs/panda/
|
|
65
|
-
ophyd_async/fastcs/panda/
|
|
66
|
-
ophyd_async/fastcs/panda/
|
|
67
|
-
ophyd_async/fastcs/panda/_panda_controller.py,sha256=ltetcf_OSQMtLVSh1uKW7Nyu5XDbb-W9iuw767cP66E,1237
|
|
63
|
+
ophyd_async/fastcs/panda/__init__.py,sha256=IHVn0wHsCuvQLdgKTRyr1F8-Ol81ImuEx_JJZpfPUv0,1166
|
|
64
|
+
ophyd_async/fastcs/panda/_block.py,sha256=ElnwPg0HEx7gToB6l_0o-Pf2foIQaCdVi69VFYxr-RA,1614
|
|
65
|
+
ophyd_async/fastcs/panda/_control.py,sha256=Xwes9eRlR4WgTEtQy9LmnQjk596qxAdw33AFxMDF9Rg,1229
|
|
66
|
+
ophyd_async/fastcs/panda/_hdf_panda.py,sha256=ty-mc5c8z-OcX0zXt5ymlCeqE1G5_UYAEhOmNUv0f_M,1309
|
|
68
67
|
ophyd_async/fastcs/panda/_table.py,sha256=atd9wiam0XQH89doqzn0U6J42CFQBKDs9K1_q5GcJR8,6093
|
|
69
|
-
ophyd_async/fastcs/panda/_trigger.py,sha256=
|
|
68
|
+
ophyd_async/fastcs/panda/_trigger.py,sha256=f7VqYCdXYoT2JyPovXdeYUC0SdWFFcSnVVdUHRd0OO0,3054
|
|
70
69
|
ophyd_async/fastcs/panda/_utils.py,sha256=VHW5kPVISyEkmse_qQcyisBkkEwMO6GG2Ago-CH1AFA,487
|
|
71
|
-
ophyd_async/
|
|
70
|
+
ophyd_async/fastcs/panda/_writer.py,sha256=1WSoxUPfMIprcShccjZtsnSVLJwKOCcxsBw8FIemlBk,5326
|
|
71
|
+
ophyd_async/plan_stubs/__init__.py,sha256=wjpEj_BoBZJ9x2fhUPY6BzWMqyYH96JrBlJvV7frdN4,524
|
|
72
72
|
ophyd_async/plan_stubs/_ensure_connected.py,sha256=6Q7_UWQ-UQ0awe6mnN4PdNCAOGRm4GZR9X2M-ghQCeI,711
|
|
73
73
|
ophyd_async/plan_stubs/_fly.py,sha256=PWT7cbnVUDBFtjKkMQ7Lr960M9d0JcUBseXFYhzBc8I,6299
|
|
74
|
+
ophyd_async/plan_stubs/_nd_attributes.py,sha256=r7Ly2fPIklOJGIHw0uoWl4gOsIfP5Df6dg_tU__hUSE,1986
|
|
74
75
|
ophyd_async/sim/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
76
|
ophyd_async/sim/demo/__init__.py,sha256=JKWFnHqmFuRRMvvU0aBuclke3OdF0iq89yvHEd4J7Bg,371
|
|
76
77
|
ophyd_async/sim/demo/_sim_motor.py,sha256=Dfc-1faeqbVLsCLuM2FFJ2F20Ib0UsS2vsHdqgVt2Zk,3601
|
|
77
78
|
ophyd_async/sim/demo/_pattern_detector/__init__.py,sha256=o_dSZDIl_CyS3YPSNKpGiQiR9UaC4cNzZ8_ByEN9dIk,402
|
|
78
79
|
ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py,sha256=5PH9vZ0vLhhvzN1H-7HUcaNUOQ---9i0GEBKY_luRTI,1278
|
|
79
|
-
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py,sha256=
|
|
80
|
+
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py,sha256=JjgCiX1CO284ykwzutdp0whqehHPqi83akiAyL7CqmY,1800
|
|
80
81
|
ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py,sha256=ayJJ2Y0rqM7gIEtxhH4-iRnYi0RQTaEWFIHUJd2W27Y,1280
|
|
81
|
-
ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py,sha256=
|
|
82
|
+
ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py,sha256=KRB8y3rwoaemeQx4ewoFO7CCTHtvokWe4zTE0Rg3K0Q,7176
|
|
82
83
|
ophyd_async/sim/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
83
84
|
ophyd_async/tango/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
84
|
-
ophyd_async-0.5.
|
|
85
|
-
ophyd_async-0.5.
|
|
86
|
-
ophyd_async-0.5.
|
|
87
|
-
ophyd_async-0.5.
|
|
88
|
-
ophyd_async-0.5.
|
|
89
|
-
ophyd_async-0.5.
|
|
85
|
+
ophyd_async-0.5.1.dist-info/LICENSE,sha256=pU5shZcsvWgz701EbT7yjFZ8rMvZcWgRH54CRt8ld_c,1517
|
|
86
|
+
ophyd_async-0.5.1.dist-info/METADATA,sha256=iU7ylsJXDvQ829UX8Q6-2UUUNnu_9wMTP5NirO23HF0,6511
|
|
87
|
+
ophyd_async-0.5.1.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
|
|
88
|
+
ophyd_async-0.5.1.dist-info/entry_points.txt,sha256=O0YNJTEufO0w9BozXi-JurTy2U1_o0ypeCgJLQ727Jk,58
|
|
89
|
+
ophyd_async-0.5.1.dist-info/top_level.txt,sha256=-hjorMsv5Rmjo3qrgqhjpal1N6kW5vMxZO3lD4iEaXs,12
|
|
90
|
+
ophyd_async-0.5.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|