ophyd-async 0.4.0__py3-none-any.whl → 0.5.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 +84 -73
- ophyd_async/core/{detector.py → _detector.py} +4 -8
- ophyd_async/core/{device.py → _device.py} +1 -1
- ophyd_async/core/{device_save_loader.py → _device_save_loader.py} +3 -3
- ophyd_async/core/{flyer.py → _flyer.py} +6 -8
- ophyd_async/{epics/areadetector/writers/general_hdffile.py → core/_hdf_dataset.py} +4 -4
- ophyd_async/{log.py → core/_log.py} +11 -3
- ophyd_async/core/{mock_signal_backend.py → _mock_signal_backend.py} +3 -3
- ophyd_async/core/{mock_signal_utils.py → _mock_signal_utils.py} +3 -4
- ophyd_async/{protocols.py → core/_protocol.py} +1 -1
- ophyd_async/core/{standard_readable.py → _readable.py} +6 -16
- ophyd_async/core/{signal.py → _signal.py} +7 -8
- ophyd_async/core/{signal_backend.py → _signal_backend.py} +4 -13
- ophyd_async/core/{soft_signal_backend.py → _soft_signal_backend.py} +3 -12
- ophyd_async/core/{async_status.py → _status.py} +3 -11
- ophyd_async/epics/adaravis/__init__.py +9 -0
- ophyd_async/epics/{areadetector/aravis.py → adaravis/_aravis.py} +9 -11
- ophyd_async/epics/{areadetector/controllers/aravis_controller.py → adaravis/_aravis_controller.py} +7 -10
- ophyd_async/epics/{areadetector/drivers/aravis_driver.py → adaravis/_aravis_io.py} +6 -3
- ophyd_async/epics/adcore/__init__.py +36 -0
- ophyd_async/epics/adcore/_core_io.py +114 -0
- ophyd_async/epics/{areadetector/drivers/ad_base.py → adcore/_core_logic.py} +16 -52
- ophyd_async/epics/{areadetector/writers/hdf_writer.py → adcore/_hdf_writer.py} +12 -11
- ophyd_async/epics/{areadetector/single_trigger_det.py → adcore/_single_trigger.py} +5 -6
- ophyd_async/epics/{areadetector/utils.py → adcore/_utils.py} +29 -0
- ophyd_async/epics/adkinetix/__init__.py +9 -0
- ophyd_async/epics/{areadetector/kinetix.py → adkinetix/_kinetix.py} +9 -11
- ophyd_async/epics/{areadetector/controllers/kinetix_controller.py → adkinetix/_kinetix_controller.py} +6 -9
- ophyd_async/epics/{areadetector/drivers/kinetix_driver.py → adkinetix/_kinetix_io.py} +5 -4
- ophyd_async/epics/adpilatus/__init__.py +11 -0
- ophyd_async/epics/{areadetector/pilatus.py → adpilatus/_pilatus.py} +10 -14
- ophyd_async/epics/{areadetector/controllers/pilatus_controller.py → adpilatus/_pilatus_controller.py} +14 -16
- ophyd_async/epics/{areadetector/drivers/pilatus_driver.py → adpilatus/_pilatus_io.py} +5 -3
- ophyd_async/epics/adsimdetector/__init__.py +7 -0
- ophyd_async/epics/{demo/demo_ad_sim_detector.py → adsimdetector/_sim.py} +10 -11
- ophyd_async/epics/{areadetector/controllers/ad_sim_controller.py → adsimdetector/_sim_controller.py} +8 -14
- ophyd_async/epics/advimba/__init__.py +9 -0
- ophyd_async/epics/{areadetector/vimba.py → advimba/_vimba.py} +9 -9
- ophyd_async/epics/{areadetector/controllers/vimba_controller.py → advimba/_vimba_controller.py} +6 -14
- ophyd_async/epics/{areadetector/drivers/vimba_driver.py → advimba/_vimba_io.py} +5 -4
- ophyd_async/epics/demo/__init__.py +9 -132
- ophyd_async/epics/demo/_mover.py +97 -0
- ophyd_async/epics/demo/_sensor.py +36 -0
- ophyd_async/epics/{motion/motor.py → motor.py} +13 -12
- ophyd_async/epics/pvi/__init__.py +2 -2
- ophyd_async/epics/pvi/{pvi.py → _pvi.py} +17 -14
- ophyd_async/epics/signal/__init__.py +7 -1
- ophyd_async/epics/{_backend → signal}/_aioca.py +3 -2
- ophyd_async/epics/{_backend/common.py → signal/_common.py} +1 -1
- ophyd_async/epics/signal/_epics_transport.py +3 -3
- ophyd_async/epics/{_backend → signal}/_p4p.py +4 -3
- ophyd_async/epics/signal/{signal.py → _signal.py} +10 -9
- ophyd_async/fastcs/odin/__init__.py +0 -0
- ophyd_async/{panda → fastcs/panda}/__init__.py +18 -13
- ophyd_async/{panda → fastcs/panda}/_common_blocks.py +3 -3
- ophyd_async/{panda → fastcs/panda}/_hdf_panda.py +2 -7
- ophyd_async/{panda/writers → fastcs/panda}/_hdf_writer.py +8 -7
- ophyd_async/{panda → fastcs/panda}/_panda_controller.py +2 -1
- ophyd_async/{panda → fastcs/panda}/_trigger.py +3 -7
- ophyd_async/plan_stubs/__init__.py +2 -2
- ophyd_async/plan_stubs/{ensure_connected.py → _ensure_connected.py} +1 -2
- ophyd_async/plan_stubs/{fly.py → _fly.py} +13 -9
- ophyd_async/sim/__init__.py +0 -11
- ophyd_async/sim/demo/__init__.py +18 -2
- ophyd_async/sim/demo/_pattern_detector/__init__.py +13 -0
- ophyd_async/sim/{sim_pattern_generator.py → demo/_pattern_detector/_pattern_detector.py} +8 -8
- ophyd_async/sim/{sim_pattern_detector_control.py → demo/_pattern_detector/_pattern_detector_controller.py} +4 -5
- ophyd_async/sim/{sim_pattern_detector_writer.py → demo/_pattern_detector/_pattern_detector_writer.py} +4 -4
- ophyd_async/sim/{pattern_generator.py → demo/_pattern_detector/_pattern_generator.py} +12 -8
- ophyd_async/sim/demo/{sim_motor.py → _sim_motor.py} +7 -5
- ophyd_async/sim/testing/__init__.py +0 -0
- ophyd_async/tango/__init__.py +0 -0
- {ophyd_async-0.4.0.dist-info → ophyd_async-0.5.0.dist-info}/METADATA +1 -1
- ophyd_async-0.5.0.dist-info/RECORD +89 -0
- {ophyd_async-0.4.0.dist-info → ophyd_async-0.5.0.dist-info}/WHEEL +1 -1
- ophyd_async/epics/areadetector/__init__.py +0 -23
- ophyd_async/epics/areadetector/controllers/__init__.py +0 -5
- ophyd_async/epics/areadetector/drivers/__init__.py +0 -23
- ophyd_async/epics/areadetector/writers/__init__.py +0 -5
- ophyd_async/epics/areadetector/writers/nd_file_hdf.py +0 -43
- ophyd_async/epics/areadetector/writers/nd_plugin.py +0 -68
- ophyd_async/epics/motion/__init__.py +0 -3
- ophyd_async/panda/writers/__init__.py +0 -3
- ophyd_async-0.4.0.dist-info/RECORD +0 -84
- /ophyd_async/core/{utils.py → _utils.py} +0 -0
- /ophyd_async/{epics/_backend → fastcs}/__init__.py +0 -0
- /ophyd_async/{panda → fastcs/panda}/_table.py +0 -0
- /ophyd_async/{panda → fastcs/panda}/_utils.py +0 -0
- {ophyd_async-0.4.0.dist-info → ophyd_async-0.5.0.dist-info}/LICENSE +0 -0
- {ophyd_async-0.4.0.dist-info → ophyd_async-0.5.0.dist-info}/entry_points.txt +0 -0
- {ophyd_async-0.4.0.dist-info → ophyd_async-0.5.0.dist-info}/top_level.txt +0 -0
ophyd_async/_version.py
CHANGED
ophyd_async/core/__init__.py
CHANGED
|
@@ -1,26 +1,13 @@
|
|
|
1
|
-
from .
|
|
2
|
-
AutoIncrementFilenameProvider,
|
|
3
|
-
AutoIncrementingPathProvider,
|
|
4
|
-
FilenameProvider,
|
|
5
|
-
NameProvider,
|
|
6
|
-
PathInfo,
|
|
7
|
-
PathProvider,
|
|
8
|
-
ShapeProvider,
|
|
9
|
-
StaticFilenameProvider,
|
|
10
|
-
StaticPathProvider,
|
|
11
|
-
UUIDFilenameProvider,
|
|
12
|
-
YMDPathProvider,
|
|
13
|
-
)
|
|
14
|
-
from .async_status import AsyncStatus, WatchableAsyncStatus
|
|
15
|
-
from .detector import (
|
|
1
|
+
from ._detector import (
|
|
16
2
|
DetectorControl,
|
|
17
3
|
DetectorTrigger,
|
|
18
4
|
DetectorWriter,
|
|
19
5
|
StandardDetector,
|
|
20
6
|
TriggerInfo,
|
|
21
7
|
)
|
|
22
|
-
from .
|
|
23
|
-
from .
|
|
8
|
+
from ._device import Device, DeviceCollector, DeviceVector
|
|
9
|
+
from ._device_save_loader import (
|
|
10
|
+
all_at_once,
|
|
24
11
|
get_signal_values,
|
|
25
12
|
load_device,
|
|
26
13
|
load_from_yaml,
|
|
@@ -29,9 +16,11 @@ from .device_save_loader import (
|
|
|
29
16
|
set_signal_values,
|
|
30
17
|
walk_rw_signals,
|
|
31
18
|
)
|
|
32
|
-
from .
|
|
33
|
-
from .
|
|
34
|
-
from .
|
|
19
|
+
from ._flyer import StandardFlyer, TriggerLogic
|
|
20
|
+
from ._hdf_dataset import HDFDataset, HDFFile
|
|
21
|
+
from ._log import config_ophyd_async_logging
|
|
22
|
+
from ._mock_signal_backend import MockSignalBackend
|
|
23
|
+
from ._mock_signal_utils import (
|
|
35
24
|
callback_on_mock_put,
|
|
36
25
|
get_mock_put,
|
|
37
26
|
mock_puts_blocked,
|
|
@@ -40,7 +29,22 @@ from .mock_signal_utils import (
|
|
|
40
29
|
set_mock_value,
|
|
41
30
|
set_mock_values,
|
|
42
31
|
)
|
|
43
|
-
from .
|
|
32
|
+
from ._protocol import AsyncConfigurable, AsyncReadable, AsyncStageable
|
|
33
|
+
from ._providers import (
|
|
34
|
+
AutoIncrementFilenameProvider,
|
|
35
|
+
AutoIncrementingPathProvider,
|
|
36
|
+
FilenameProvider,
|
|
37
|
+
NameProvider,
|
|
38
|
+
PathInfo,
|
|
39
|
+
PathProvider,
|
|
40
|
+
ShapeProvider,
|
|
41
|
+
StaticFilenameProvider,
|
|
42
|
+
StaticPathProvider,
|
|
43
|
+
UUIDFilenameProvider,
|
|
44
|
+
YMDPathProvider,
|
|
45
|
+
)
|
|
46
|
+
from ._readable import ConfigSignal, HintedSignal, StandardReadable
|
|
47
|
+
from ._signal import (
|
|
44
48
|
Signal,
|
|
45
49
|
SignalR,
|
|
46
50
|
SignalRW,
|
|
@@ -56,93 +60,100 @@ from .signal import (
|
|
|
56
60
|
soft_signal_rw,
|
|
57
61
|
wait_for_value,
|
|
58
62
|
)
|
|
59
|
-
from .
|
|
60
|
-
from .
|
|
61
|
-
from .
|
|
62
|
-
from .
|
|
63
|
+
from ._signal_backend import RuntimeSubsetEnum, SignalBackend, SubsetEnum
|
|
64
|
+
from ._soft_signal_backend import SignalMetadata, SoftSignalBackend
|
|
65
|
+
from ._status import AsyncStatus, WatchableAsyncStatus
|
|
66
|
+
from ._utils import (
|
|
63
67
|
DEFAULT_TIMEOUT,
|
|
64
68
|
CalculatableTimeout,
|
|
65
69
|
CalculateTimeout,
|
|
66
|
-
Callback,
|
|
67
70
|
NotConnected,
|
|
68
71
|
ReadingValueCallback,
|
|
69
72
|
T,
|
|
73
|
+
WatcherUpdate,
|
|
70
74
|
get_dtype,
|
|
71
75
|
get_unique,
|
|
72
|
-
|
|
76
|
+
in_micros,
|
|
73
77
|
wait_for_connection,
|
|
74
78
|
)
|
|
75
79
|
|
|
76
80
|
__all__ = [
|
|
77
|
-
"AsyncStatus",
|
|
78
|
-
"AutoIncrementFilenameProvider",
|
|
79
|
-
"AutoIncrementingPathProvider",
|
|
80
|
-
"CalculatableTimeout",
|
|
81
|
-
"CalculateTimeout",
|
|
82
|
-
"Callback",
|
|
83
|
-
"ConfigSignal",
|
|
84
|
-
"DEFAULT_TIMEOUT",
|
|
85
81
|
"DetectorControl",
|
|
86
82
|
"DetectorTrigger",
|
|
87
83
|
"DetectorWriter",
|
|
84
|
+
"StandardDetector",
|
|
85
|
+
"TriggerInfo",
|
|
88
86
|
"Device",
|
|
89
87
|
"DeviceCollector",
|
|
90
88
|
"DeviceVector",
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
89
|
+
"all_at_once",
|
|
90
|
+
"get_signal_values",
|
|
91
|
+
"load_device",
|
|
92
|
+
"load_from_yaml",
|
|
93
|
+
"save_device",
|
|
94
|
+
"save_to_yaml",
|
|
95
|
+
"set_signal_values",
|
|
96
|
+
"walk_rw_signals",
|
|
97
|
+
"StandardFlyer",
|
|
98
|
+
"TriggerLogic",
|
|
99
|
+
"HDFDataset",
|
|
100
|
+
"HDFFile",
|
|
101
|
+
"config_ophyd_async_logging",
|
|
94
102
|
"MockSignalBackend",
|
|
103
|
+
"callback_on_mock_put",
|
|
104
|
+
"get_mock_put",
|
|
105
|
+
"mock_puts_blocked",
|
|
106
|
+
"reset_mock_put_calls",
|
|
107
|
+
"set_mock_put_proceeds",
|
|
108
|
+
"set_mock_value",
|
|
109
|
+
"set_mock_values",
|
|
110
|
+
"AsyncConfigurable",
|
|
111
|
+
"AsyncReadable",
|
|
112
|
+
"AsyncStageable",
|
|
113
|
+
"AutoIncrementFilenameProvider",
|
|
114
|
+
"AutoIncrementingPathProvider",
|
|
115
|
+
"FilenameProvider",
|
|
95
116
|
"NameProvider",
|
|
96
|
-
"NotConnected",
|
|
97
117
|
"PathInfo",
|
|
98
118
|
"PathProvider",
|
|
99
|
-
"ReadingValueCallback",
|
|
100
|
-
"RuntimeSubsetEnum",
|
|
101
119
|
"ShapeProvider",
|
|
120
|
+
"StaticFilenameProvider",
|
|
121
|
+
"StaticPathProvider",
|
|
122
|
+
"UUIDFilenameProvider",
|
|
123
|
+
"YMDPathProvider",
|
|
124
|
+
"ConfigSignal",
|
|
125
|
+
"HintedSignal",
|
|
126
|
+
"StandardReadable",
|
|
102
127
|
"Signal",
|
|
103
|
-
"SignalBackend",
|
|
104
128
|
"SignalR",
|
|
105
129
|
"SignalRW",
|
|
106
130
|
"SignalW",
|
|
107
131
|
"SignalX",
|
|
108
|
-
"SoftSignalBackend",
|
|
109
|
-
"StandardDetector",
|
|
110
|
-
"StandardReadable",
|
|
111
|
-
"StaticFilenameProvider",
|
|
112
|
-
"StaticPathProvider",
|
|
113
|
-
"SubsetEnum",
|
|
114
|
-
"T",
|
|
115
|
-
"TriggerInfo",
|
|
116
|
-
"TriggerLogic",
|
|
117
|
-
"UUIDFilenameProvider",
|
|
118
|
-
"WatchableAsyncStatus",
|
|
119
|
-
"YMDPathProvider",
|
|
120
|
-
# Lower-cased imports
|
|
121
132
|
"assert_configuration",
|
|
122
133
|
"assert_emitted",
|
|
123
134
|
"assert_reading",
|
|
124
135
|
"assert_value",
|
|
125
|
-
"callback_on_mock_put",
|
|
126
|
-
"get_dtype",
|
|
127
|
-
"get_mock_put",
|
|
128
|
-
"get_signal_values",
|
|
129
|
-
"get_unique",
|
|
130
|
-
"load_device",
|
|
131
|
-
"load_from_yaml",
|
|
132
|
-
"merge_gathered_dicts",
|
|
133
|
-
"mock_puts_blocked",
|
|
134
136
|
"observe_value",
|
|
135
|
-
"reset_mock_put_calls",
|
|
136
|
-
"save_device",
|
|
137
|
-
"save_to_yaml",
|
|
138
137
|
"set_and_wait_for_value",
|
|
139
|
-
"set_mock_put_proceeds",
|
|
140
|
-
"set_mock_value",
|
|
141
|
-
"set_mock_values",
|
|
142
|
-
"set_signal_values",
|
|
143
138
|
"soft_signal_r_and_setter",
|
|
144
139
|
"soft_signal_rw",
|
|
145
|
-
"wait_for_connection",
|
|
146
140
|
"wait_for_value",
|
|
147
|
-
"
|
|
141
|
+
"RuntimeSubsetEnum",
|
|
142
|
+
"SignalBackend",
|
|
143
|
+
"SubsetEnum",
|
|
144
|
+
"SignalMetadata",
|
|
145
|
+
"SoftSignalBackend",
|
|
146
|
+
"AsyncStatus",
|
|
147
|
+
"WatchableAsyncStatus",
|
|
148
|
+
"DEFAULT_TIMEOUT",
|
|
149
|
+
"CalculatableTimeout",
|
|
150
|
+
"CalculateTimeout",
|
|
151
|
+
"NotConnected",
|
|
152
|
+
"ReadingValueCallback",
|
|
153
|
+
"T",
|
|
154
|
+
"WatcherUpdate",
|
|
155
|
+
"get_dtype",
|
|
156
|
+
"get_unique",
|
|
157
|
+
"in_micros",
|
|
158
|
+
"wait_for_connection",
|
|
148
159
|
]
|
|
@@ -13,7 +13,6 @@ from typing import (
|
|
|
13
13
|
List,
|
|
14
14
|
Optional,
|
|
15
15
|
Sequence,
|
|
16
|
-
TypeVar,
|
|
17
16
|
)
|
|
18
17
|
|
|
19
18
|
from bluesky.protocols import (
|
|
@@ -29,13 +28,10 @@ from bluesky.protocols import (
|
|
|
29
28
|
)
|
|
30
29
|
from pydantic import BaseModel, Field
|
|
31
30
|
|
|
32
|
-
from
|
|
33
|
-
|
|
34
|
-
from .
|
|
35
|
-
from .
|
|
36
|
-
from .utils import DEFAULT_TIMEOUT, WatcherUpdate, merge_gathered_dicts
|
|
37
|
-
|
|
38
|
-
T = TypeVar("T")
|
|
31
|
+
from ._device import Device
|
|
32
|
+
from ._protocol import AsyncConfigurable, AsyncReadable
|
|
33
|
+
from ._status import AsyncStatus, WatchableAsyncStatus
|
|
34
|
+
from ._utils import DEFAULT_TIMEOUT, T, WatcherUpdate, merge_gathered_dicts
|
|
39
35
|
|
|
40
36
|
|
|
41
37
|
class DetectorTrigger(str, Enum):
|
|
@@ -19,7 +19,7 @@ from typing import (
|
|
|
19
19
|
from bluesky.protocols import HasName
|
|
20
20
|
from bluesky.run_engine import call_in_bluesky_event_loop
|
|
21
21
|
|
|
22
|
-
from .
|
|
22
|
+
from ._utils import DEFAULT_TIMEOUT, NotConnected, wait_for_connection
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class Device(HasName):
|
|
@@ -8,8 +8,8 @@ from bluesky.plan_stubs import abs_set, wait
|
|
|
8
8
|
from bluesky.protocols import Location
|
|
9
9
|
from bluesky.utils import Msg
|
|
10
10
|
|
|
11
|
-
from .
|
|
12
|
-
from .
|
|
11
|
+
from ._device import Device
|
|
12
|
+
from ._signal import SignalRW
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def ndarray_representer(dumper: yaml.Dumper, array: npt.NDArray[Any]) -> yaml.Node:
|
|
@@ -241,7 +241,7 @@ def save_device(
|
|
|
241
241
|
Therefore, users should consider the order of device loading and write their
|
|
242
242
|
own sorter algorithms accordingly.
|
|
243
243
|
|
|
244
|
-
See :func:`ophyd_async.panda.phase_sorter` for a valid implementation of the
|
|
244
|
+
See :func:`ophyd_async.fastcs.panda.phase_sorter` for a valid implementation of the
|
|
245
245
|
sorter.
|
|
246
246
|
|
|
247
247
|
Parameters
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
from abc import ABC, abstractmethod
|
|
2
|
-
from typing import Dict, Generic, Sequence
|
|
2
|
+
from typing import Dict, Generic, Sequence
|
|
3
3
|
|
|
4
4
|
from bluesky.protocols import DataKey, Flyable, Preparable, Reading, Stageable
|
|
5
5
|
|
|
6
|
-
from .
|
|
7
|
-
from .
|
|
8
|
-
from .
|
|
9
|
-
from .
|
|
10
|
-
|
|
11
|
-
T = TypeVar("T")
|
|
6
|
+
from ._device import Device
|
|
7
|
+
from ._signal import SignalR
|
|
8
|
+
from ._status import AsyncStatus
|
|
9
|
+
from ._utils import T, merge_gathered_dicts
|
|
12
10
|
|
|
13
11
|
|
|
14
12
|
class TriggerLogic(ABC, Generic[T]):
|
|
@@ -29,7 +27,7 @@ class TriggerLogic(ABC, Generic[T]):
|
|
|
29
27
|
"""Stop flying and wait everything to be stopped"""
|
|
30
28
|
|
|
31
29
|
|
|
32
|
-
class
|
|
30
|
+
class StandardFlyer(
|
|
33
31
|
Device,
|
|
34
32
|
Stageable,
|
|
35
33
|
Preparable,
|
|
@@ -10,11 +10,11 @@ from event_model import (
|
|
|
10
10
|
StreamResource,
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
from
|
|
13
|
+
from ._providers import PathInfo
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@dataclass
|
|
17
|
-
class
|
|
17
|
+
class HDFDataset:
|
|
18
18
|
data_key: str
|
|
19
19
|
dataset: str
|
|
20
20
|
shape: Sequence[int] = field(default_factory=tuple)
|
|
@@ -26,7 +26,7 @@ class _HDFDataset:
|
|
|
26
26
|
SLICE_NAME = "AD_HDF5_SWMR_SLICE"
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
class
|
|
29
|
+
class HDFFile:
|
|
30
30
|
"""
|
|
31
31
|
:param directory_info: Contains information about how to construct a StreamResource
|
|
32
32
|
:param full_file_name: Absolute path to the file to be written
|
|
@@ -37,7 +37,7 @@ class _HDFFile:
|
|
|
37
37
|
self,
|
|
38
38
|
path_info: PathInfo,
|
|
39
39
|
full_file_name: Path,
|
|
40
|
-
datasets: List[
|
|
40
|
+
datasets: List[HDFDataset],
|
|
41
41
|
hostname: str = "localhost",
|
|
42
42
|
) -> None:
|
|
43
43
|
self._last_emitted = 0
|
|
@@ -34,9 +34,7 @@ class ColoredFormatterWithDeviceName(colorlog.ColoredFormatter):
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
def _validate_level(level) -> int:
|
|
37
|
-
"""
|
|
38
|
-
Return an int for level comparison
|
|
39
|
-
"""
|
|
37
|
+
"""Return an int for level comparison."""
|
|
40
38
|
if isinstance(level, int):
|
|
41
39
|
levelno = level
|
|
42
40
|
elif isinstance(level, str):
|
|
@@ -80,21 +78,31 @@ def config_ophyd_async_logging(
|
|
|
80
78
|
level : str or int
|
|
81
79
|
Python logging level, given as string or corresponding integer.
|
|
82
80
|
Default is 'WARNING'.
|
|
81
|
+
|
|
83
82
|
Returns
|
|
84
83
|
-------
|
|
85
84
|
handler : logging.Handler
|
|
86
85
|
The handler, which has already been added to the 'ophyd_async' logger.
|
|
86
|
+
|
|
87
87
|
Examples
|
|
88
88
|
--------
|
|
89
89
|
Log to a file.
|
|
90
|
+
|
|
90
91
|
config_ophyd_async_logging(file='/tmp/what_is_happening.txt')
|
|
92
|
+
|
|
91
93
|
Include the date along with the time. (The log messages will always include
|
|
92
94
|
microseconds, which are configured separately, not as part of 'datefmt'.)
|
|
95
|
+
|
|
93
96
|
config_ophyd_async_logging(datefmt="%Y-%m-%d %H:%M:%S")
|
|
97
|
+
|
|
94
98
|
Turn off ANSI color codes.
|
|
99
|
+
|
|
95
100
|
config_ophyd_async_logging(color=False)
|
|
101
|
+
|
|
96
102
|
Increase verbosity: show level DEBUG or higher.
|
|
103
|
+
|
|
97
104
|
config_ophyd_async_logging(level='DEBUG')
|
|
105
|
+
|
|
98
106
|
"""
|
|
99
107
|
global current_handler
|
|
100
108
|
|
|
@@ -5,9 +5,9 @@ from unittest.mock import Mock
|
|
|
5
5
|
|
|
6
6
|
from bluesky.protocols import Descriptor, Reading
|
|
7
7
|
|
|
8
|
-
from
|
|
9
|
-
from
|
|
10
|
-
from
|
|
8
|
+
from ._signal_backend import SignalBackend
|
|
9
|
+
from ._soft_signal_backend import SoftSignalBackend
|
|
10
|
+
from ._utils import DEFAULT_TIMEOUT, ReadingValueCallback, T
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class MockSignalBackend(SignalBackend[T]):
|
|
@@ -2,10 +2,9 @@ from contextlib import asynccontextmanager, contextmanager
|
|
|
2
2
|
from typing import Any, Callable, Iterable
|
|
3
3
|
from unittest.mock import Mock
|
|
4
4
|
|
|
5
|
-
from
|
|
6
|
-
from
|
|
7
|
-
|
|
8
|
-
from .mock_signal_backend import MockSignalBackend
|
|
5
|
+
from ._mock_signal_backend import MockSignalBackend
|
|
6
|
+
from ._signal import Signal
|
|
7
|
+
from ._utils import T
|
|
9
8
|
|
|
10
9
|
|
|
11
10
|
def _get_mock_signal_backend(signal: Signal) -> MockSignalBackend:
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
import warnings
|
|
2
2
|
from contextlib import contextmanager
|
|
3
|
-
from typing import
|
|
4
|
-
Callable,
|
|
5
|
-
Dict,
|
|
6
|
-
Generator,
|
|
7
|
-
Optional,
|
|
8
|
-
Sequence,
|
|
9
|
-
Tuple,
|
|
10
|
-
Type,
|
|
11
|
-
Union,
|
|
12
|
-
)
|
|
3
|
+
from typing import Callable, Dict, Generator, Optional, Sequence, Tuple, Type, Union
|
|
13
4
|
|
|
14
5
|
from bluesky.protocols import DataKey, HasHints, Hints, Reading
|
|
15
6
|
|
|
16
|
-
from
|
|
17
|
-
|
|
18
|
-
from .
|
|
19
|
-
from .
|
|
20
|
-
from .
|
|
21
|
-
from .utils import merge_gathered_dicts
|
|
7
|
+
from ._device import Device, DeviceVector
|
|
8
|
+
from ._protocol import AsyncConfigurable, AsyncReadable, AsyncStageable
|
|
9
|
+
from ._signal import SignalR
|
|
10
|
+
from ._status import AsyncStatus
|
|
11
|
+
from ._utils import merge_gathered_dicts
|
|
22
12
|
|
|
23
13
|
ReadableChild = Union[AsyncReadable, AsyncConfigurable, AsyncStageable, HasHints]
|
|
24
14
|
ReadableChildWrapper = Union[
|
|
@@ -25,14 +25,13 @@ from bluesky.protocols import (
|
|
|
25
25
|
Subscribable,
|
|
26
26
|
)
|
|
27
27
|
|
|
28
|
-
from
|
|
29
|
-
from
|
|
30
|
-
|
|
31
|
-
from .
|
|
32
|
-
from .
|
|
33
|
-
from .
|
|
34
|
-
from .
|
|
35
|
-
from .utils import DEFAULT_TIMEOUT, CalculatableTimeout, CalculateTimeout, Callback, T
|
|
28
|
+
from ._device import Device
|
|
29
|
+
from ._mock_signal_backend import MockSignalBackend
|
|
30
|
+
from ._protocol import AsyncConfigurable, AsyncReadable, AsyncStageable
|
|
31
|
+
from ._signal_backend import SignalBackend
|
|
32
|
+
from ._soft_signal_backend import SignalMetadata, SoftSignalBackend
|
|
33
|
+
from ._status import AsyncStatus
|
|
34
|
+
from ._utils import DEFAULT_TIMEOUT, CalculatableTimeout, CalculateTimeout, Callback, T
|
|
36
35
|
|
|
37
36
|
|
|
38
37
|
def _add_timeout(func):
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
from abc import abstractmethod
|
|
2
|
-
from typing import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Literal,
|
|
7
|
-
Optional,
|
|
8
|
-
Tuple,
|
|
9
|
-
Type,
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
from bluesky.protocols import DataKey, Reading
|
|
13
|
-
|
|
14
|
-
from .utils import DEFAULT_TIMEOUT, ReadingValueCallback, T
|
|
2
|
+
from typing import TYPE_CHECKING, ClassVar, Generic, Literal, Optional, Tuple, Type
|
|
3
|
+
|
|
4
|
+
from ._protocol import DataKey, Reading
|
|
5
|
+
from ._utils import DEFAULT_TIMEOUT, ReadingValueCallback, T
|
|
15
6
|
|
|
16
7
|
|
|
17
8
|
class SignalBackend(Generic[T]):
|
|
@@ -4,23 +4,14 @@ import inspect
|
|
|
4
4
|
import time
|
|
5
5
|
from collections import abc
|
|
6
6
|
from enum import Enum
|
|
7
|
-
from typing import
|
|
8
|
-
Dict,
|
|
9
|
-
Generic,
|
|
10
|
-
Optional,
|
|
11
|
-
Tuple,
|
|
12
|
-
Type,
|
|
13
|
-
Union,
|
|
14
|
-
cast,
|
|
15
|
-
get_origin,
|
|
16
|
-
)
|
|
7
|
+
from typing import Dict, Generic, Optional, Tuple, Type, Union, cast, get_origin
|
|
17
8
|
|
|
18
9
|
import numpy as np
|
|
19
10
|
from bluesky.protocols import DataKey, Dtype, Reading
|
|
20
11
|
from typing_extensions import TypedDict
|
|
21
12
|
|
|
22
|
-
from .
|
|
23
|
-
from .
|
|
13
|
+
from ._signal_backend import RuntimeSubsetEnum, SignalBackend
|
|
14
|
+
from ._utils import DEFAULT_TIMEOUT, ReadingValueCallback, T, get_dtype
|
|
24
15
|
|
|
25
16
|
primitive_dtypes: Dict[type, Dtype] = {
|
|
26
17
|
str: "string",
|
|
@@ -4,20 +4,12 @@ import asyncio
|
|
|
4
4
|
import functools
|
|
5
5
|
import time
|
|
6
6
|
from dataclasses import asdict, replace
|
|
7
|
-
from typing import
|
|
8
|
-
AsyncIterator,
|
|
9
|
-
Awaitable,
|
|
10
|
-
Callable,
|
|
11
|
-
Generic,
|
|
12
|
-
Type,
|
|
13
|
-
TypeVar,
|
|
14
|
-
cast,
|
|
15
|
-
)
|
|
7
|
+
from typing import AsyncIterator, Awaitable, Callable, Generic, Type, TypeVar, cast
|
|
16
8
|
|
|
17
9
|
from bluesky.protocols import Status
|
|
18
10
|
|
|
19
|
-
from
|
|
20
|
-
from .
|
|
11
|
+
from ._protocol import Watcher
|
|
12
|
+
from ._utils import Callback, P, T, WatcherUpdate
|
|
21
13
|
|
|
22
14
|
AS = TypeVar("AS", bound="AsyncStatus")
|
|
23
15
|
WAS = TypeVar("WAS", bound="WatchableAsyncStatus")
|
|
@@ -3,12 +3,10 @@ from typing import get_args
|
|
|
3
3
|
from bluesky.protocols import HasHints, Hints
|
|
4
4
|
|
|
5
5
|
from ophyd_async.core import PathProvider, StandardDetector
|
|
6
|
-
from ophyd_async.epics
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
from
|
|
10
|
-
from ophyd_async.epics.areadetector.drivers.aravis_driver import AravisDriver
|
|
11
|
-
from ophyd_async.epics.areadetector.writers import HDFWriter, NDFileHDF
|
|
6
|
+
from ophyd_async.epics import adcore
|
|
7
|
+
|
|
8
|
+
from ._aravis_controller import AravisController
|
|
9
|
+
from ._aravis_io import AravisDriverIO
|
|
12
10
|
|
|
13
11
|
|
|
14
12
|
class AravisDetector(StandardDetector, HasHints):
|
|
@@ -19,7 +17,7 @@ class AravisDetector(StandardDetector, HasHints):
|
|
|
19
17
|
"""
|
|
20
18
|
|
|
21
19
|
_controller: AravisController
|
|
22
|
-
_writer:
|
|
20
|
+
_writer: adcore.ADHDFWriter
|
|
23
21
|
|
|
24
22
|
def __init__(
|
|
25
23
|
self,
|
|
@@ -30,16 +28,16 @@ class AravisDetector(StandardDetector, HasHints):
|
|
|
30
28
|
name="",
|
|
31
29
|
gpio_number: AravisController.GPIO_NUMBER = 1,
|
|
32
30
|
):
|
|
33
|
-
self.drv =
|
|
34
|
-
self.hdf =
|
|
31
|
+
self.drv = AravisDriverIO(prefix + drv_suffix)
|
|
32
|
+
self.hdf = adcore.NDFileHDFIO(prefix + hdf_suffix)
|
|
35
33
|
|
|
36
34
|
super().__init__(
|
|
37
35
|
AravisController(self.drv, gpio_number=gpio_number),
|
|
38
|
-
|
|
36
|
+
adcore.ADHDFWriter(
|
|
39
37
|
self.hdf,
|
|
40
38
|
path_provider,
|
|
41
39
|
lambda: self.name,
|
|
42
|
-
ADBaseShapeProvider(self.drv),
|
|
40
|
+
adcore.ADBaseShapeProvider(self.drv),
|
|
43
41
|
),
|
|
44
42
|
config_sigs=(self.drv.acquire_time,),
|
|
45
43
|
name=name,
|
ophyd_async/epics/{areadetector/controllers/aravis_controller.py → adaravis/_aravis_controller.py}
RENAMED
|
@@ -7,12 +7,9 @@ from ophyd_async.core import (
|
|
|
7
7
|
DetectorTrigger,
|
|
8
8
|
set_and_wait_for_value,
|
|
9
9
|
)
|
|
10
|
-
from ophyd_async.epics
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
AravisTriggerSource,
|
|
14
|
-
)
|
|
15
|
-
from ophyd_async.epics.areadetector.utils import ImageMode, stop_busy_record
|
|
10
|
+
from ophyd_async.epics import adcore
|
|
11
|
+
|
|
12
|
+
from ._aravis_io import AravisDriverIO, AravisTriggerMode, AravisTriggerSource
|
|
16
13
|
|
|
17
14
|
# The deadtime of an ADaravis controller varies depending on the exact model of camera.
|
|
18
15
|
# Ideally we would maximize performance by dynamically retrieving the deadtime at
|
|
@@ -23,7 +20,7 @@ _HIGHEST_POSSIBLE_DEADTIME = 1961e-6
|
|
|
23
20
|
class AravisController(DetectorControl):
|
|
24
21
|
GPIO_NUMBER = Literal[1, 2, 3, 4]
|
|
25
22
|
|
|
26
|
-
def __init__(self, driver:
|
|
23
|
+
def __init__(self, driver: AravisDriverIO, gpio_number: GPIO_NUMBER) -> None:
|
|
27
24
|
self._drv = driver
|
|
28
25
|
self.gpio_number = gpio_number
|
|
29
26
|
|
|
@@ -37,9 +34,9 @@ class AravisController(DetectorControl):
|
|
|
37
34
|
exposure: Optional[float] = None,
|
|
38
35
|
) -> AsyncStatus:
|
|
39
36
|
if num == 0:
|
|
40
|
-
image_mode = ImageMode.continuous
|
|
37
|
+
image_mode = adcore.ImageMode.continuous
|
|
41
38
|
else:
|
|
42
|
-
image_mode = ImageMode.multiple
|
|
39
|
+
image_mode = adcore.ImageMode.multiple
|
|
43
40
|
if exposure is not None:
|
|
44
41
|
await self._drv.acquire_time.set(exposure)
|
|
45
42
|
|
|
@@ -76,4 +73,4 @@ class AravisController(DetectorControl):
|
|
|
76
73
|
return (AravisTriggerMode.on, f"Line{self.gpio_number}")
|
|
77
74
|
|
|
78
75
|
async def disarm(self):
|
|
79
|
-
await stop_busy_record(self._drv.acquire, False, timeout=1)
|
|
76
|
+
await adcore.stop_busy_record(self._drv.acquire, False, timeout=1)
|