ophyd-async 0.9.0a1__tar.gz → 0.9.0a2__tar.gz
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-0.9.0a1 → ophyd_async-0.9.0a2}/.github/pages/make_switcher.py +1 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.gitignore +3 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/PKG-INFO +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/examples/epics_demo.py +7 -7
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/examples/tango_demo.py +5 -5
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0009-procedural-vs-declarative-devices.md +1 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/event-loop-choice.rst +8 -8
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/compound-devices.rst +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/make-a-simple-device.rst +4 -4
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/write-tests-for-devices.rst +6 -6
- ophyd_async-0.9.0a2/docs/images/set_and_wait_for_other_value.svg +2 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/tutorials/using-existing-devices.rst +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/pyproject.toml +19 -41
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/_version.py +1 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/__init__.py +13 -20
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_detector.py +61 -37
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_device.py +102 -80
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_device_filler.py +17 -8
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_flyer.py +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_readable.py +30 -23
- ophyd_async-0.9.0a2/src/ophyd_async/core/_settings.py +104 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_signal.py +55 -17
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_signal_backend.py +4 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_soft_signal_backend.py +2 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_table.py +18 -10
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_utils.py +5 -3
- ophyd_async-0.9.0a2/src/ophyd_async/core/_yaml_settings.py +64 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adandor/__init__.py +9 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adandor/_andor.py +45 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adandor/_andor_controller.py +49 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adandor/_andor_io.py +36 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adaravis/__init__.py +3 -1
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adaravis/_aravis.py +47 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adaravis/_aravis_controller.py +13 -22
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adcore/__init__.py +15 -8
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adcore/_core_detector.py +41 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adcore/_core_io.py +35 -10
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adcore/_core_logic.py +121 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adcore/_core_writer.py +219 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adcore/_hdf_writer.py +38 -62
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adcore/_jpeg_writer.py +26 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adcore/_single_trigger.py +4 -3
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adcore/_tiff_writer.py +26 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adcore/_utils.py +2 -1
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adkinetix/_kinetix.py +49 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +9 -21
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adpilatus/__init__.py +2 -2
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adpilatus/_pilatus.py +46 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +101 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adsimdetector/__init__.py +7 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/adsimdetector/_sim.py +51 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/advimba/_vimba.py +43 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/advimba/_vimba_controller.py +10 -24
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_aioca.py +31 -14
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_p4p.py +40 -16
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_util.py +1 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/motor.py +18 -10
- ophyd_async-0.9.0a2/src/ophyd_async/epics/sim/_ioc.py +29 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/epics/demo → ophyd_async-0.9.0a2/src/ophyd_async/epics/sim}/_mover.py +10 -4
- ophyd_async-0.9.0a2/src/ophyd_async/epics/testing/__init__.py +24 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/testing/_example_ioc.py +90 -0
- ophyd_async-0.9.0a2/src/ophyd_async/epics/testing/_utils.py +50 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/testing/test_records.db +8 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/__init__.py +0 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/_control.py +7 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/_hdf_panda.py +3 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/_table.py +4 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/plan_stubs/__init__.py +14 -0
- ophyd_async-0.9.0a2/src/ophyd_async/plan_stubs/_ensure_connected.py +27 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/plan_stubs/_fly.py +1 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/plan_stubs/_nd_attributes.py +7 -5
- ophyd_async-0.9.0a2/src/ophyd_async/plan_stubs/_panda.py +13 -0
- ophyd_async-0.9.0a2/src/ophyd_async/plan_stubs/_settings.py +125 -0
- ophyd_async-0.9.0a2/src/ophyd_async/plan_stubs/_wait_for_awaitable.py +13 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/_pattern_detector/_pattern_detector_controller.py +9 -2
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/_pattern_detector/_pattern_generator.py +13 -6
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/tango/core/_signal.py +3 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/tango/core/_tango_transport.py +12 -14
- {ophyd_async-0.9.0a1/src/ophyd_async/tango/demo → ophyd_async-0.9.0a2/src/ophyd_async/tango/sim}/_mover.py +5 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/testing/__init__.py +19 -0
- ophyd_async-0.9.0a2/src/ophyd_async/testing/__pytest_assert_rewrite.py +4 -0
- ophyd_async-0.9.0a2/src/ophyd_async/testing/_assert.py +176 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/testing/_mock_signal_utils.py +3 -3
- ophyd_async-0.9.0a2/src/ophyd_async/testing/_one_of_everything.py +126 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async.egg-info/PKG-INFO +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async.egg-info/SOURCES.txt +43 -29
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/system_tests/epics/eiger/test_eiger_system.py +3 -3
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/conftest.py +41 -2
- ophyd_async-0.9.0a1/tests/core/test_device_collector.py → ophyd_async-0.9.0a2/tests/core/test_auto_init_devices.py +26 -16
- ophyd_async-0.9.0a2/tests/core/test_detector.py +120 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_device.py +28 -4
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_flyer.py +9 -9
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_mock_signal_backend.py +3 -5
- ophyd_async-0.9.0a2/tests/core/test_protocol.py +18 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_readable.py +22 -3
- ophyd_async-0.9.0a2/tests/core/test_signal.py +903 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_soft_signal_backend.py +17 -1
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_table.py +20 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_utils.py +7 -7
- ophyd_async-0.9.0a2/tests/epics/adandor/test_andor.py +123 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adaravis/test_aravis.py +33 -38
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adcore/test_drivers.py +28 -31
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adcore/test_scans.py +25 -16
- ophyd_async-0.9.0a2/tests/epics/adcore/test_single_trigger.py +60 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adcore/test_writers.py +48 -15
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adkinetix/test_kinetix.py +14 -13
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adpilatus/test_pilatus.py +35 -28
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/adsimdetector/test_sim.py +59 -38
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/advimba/test_vimba.py +28 -24
- ophyd_async-0.9.0a2/tests/epics/conftest.py +69 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/eiger/test_eiger_controller.py +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/eiger/test_eiger_detector.py +3 -3
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/eiger/test_odin_io.py +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/pvi/test_pvi.py +2 -2
- ophyd_async-0.9.0a2/tests/epics/signal/test_signals.py +724 -0
- ophyd_async-0.9.0a2/tests/epics/signal/test_yaml_save_ca.yaml +22 -0
- ophyd_async-0.9.0a2/tests/epics/signal/test_yaml_save_pva.yaml +41 -0
- ophyd_async-0.9.0a1/tests/epics/demo/test_demo.py → ophyd_async-0.9.0a2/tests/epics/sim/test_epics_sim.py +44 -37
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/test_motor.py +37 -9
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_hdf_panda.py +5 -5
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_panda_connect.py +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_panda_control.py +3 -3
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_panda_utils.py +16 -14
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_seq_table.py +1 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_trigger.py +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/test_writer.py +4 -4
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/plan_stubs/test_fly.py +10 -8
- ophyd_async-0.9.0a2/tests/plan_stubs/test_settings.py +95 -0
- ophyd_async-0.9.0a2/tests/plan_stubs/test_setup.py +25 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/sim/conftest.py +1 -1
- ophyd_async-0.9.0a2/tests/sim/test_pattern_generator.py +67 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/sim/test_sim_detector.py +22 -7
- {ophyd_async-0.9.0a1/tests/sim/demo → ophyd_async-0.9.0a2/tests/sim}/test_sim_motor.py +6 -6
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/sim/test_sim_writer.py +3 -3
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/sim/test_streaming_plan.py +2 -2
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/tango/test_base_device.py +11 -11
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/tango/test_tango_transport.py +4 -0
- ophyd_async-0.9.0a2/tests/test_data/test_yaml_save.yaml +119 -0
- ophyd_async-0.9.0a1/docs/images/set_and_wait_for_other_value.svg +0 -10
- ophyd_async-0.9.0a1/src/ophyd_async/core/_device_save_loader.py +0 -274
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adaravis/_aravis.py +0 -61
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adcore/_core_logic.py +0 -109
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adkinetix/_kinetix.py +0 -44
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adpilatus/_pilatus.py +0 -58
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +0 -79
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adsimdetector/__init__.py +0 -7
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adsimdetector/_sim.py +0 -35
- ophyd_async-0.9.0a1/src/ophyd_async/epics/adsimdetector/_sim_controller.py +0 -51
- ophyd_async-0.9.0a1/src/ophyd_async/epics/advimba/_vimba.py +0 -43
- ophyd_async-0.9.0a1/src/ophyd_async/epics/testing/__init__.py +0 -24
- ophyd_async-0.9.0a1/src/ophyd_async/epics/testing/_example_ioc.py +0 -107
- ophyd_async-0.9.0a1/src/ophyd_async/epics/testing/_utils.py +0 -78
- ophyd_async-0.9.0a1/src/ophyd_async/fastcs/panda/_utils.py +0 -16
- ophyd_async-0.9.0a1/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -33
- ophyd_async-0.9.0a1/src/ophyd_async/tango/__init__.py +0 -0
- ophyd_async-0.9.0a1/src/ophyd_async/testing/_assert.py +0 -128
- ophyd_async-0.9.0a1/src/ophyd_async.egg-info/entry_points.txt +0 -2
- ophyd_async-0.9.0a1/tests/core/test_device_save_loader.py +0 -322
- ophyd_async-0.9.0a1/tests/core/test_protocol.py +0 -33
- ophyd_async-0.9.0a1/tests/core/test_signal.py +0 -378
- ophyd_async-0.9.0a1/tests/epics/adcore/test_single_trigger.py +0 -52
- ophyd_async-0.9.0a1/tests/epics/conftest.py +0 -58
- ophyd_async-0.9.0a1/tests/epics/signal/test_signals.py +0 -995
- ophyd_async-0.9.0a1/tests/sim/__init__.py +0 -0
- ophyd_async-0.9.0a1/tests/sim/demo/__init__.py +0 -0
- ophyd_async-0.9.0a1/tests/sim/test_pattern_generator.py +0 -34
- ophyd_async-0.9.0a1/tests/test_data/test_yaml_save.yml +0 -42
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.codecov.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.copier-answers.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.devcontainer/devcontainer.json +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.git-blame-ignore-revs +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/CONTRIBUTING.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/ISSUE_TEMPLATE/issue.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/actions/install_requirements/action.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/dependabot.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/pages/index.html +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_check.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_dist.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_docs.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_pypi.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_release.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_test.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/_tox.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/ci.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.github/workflows/periodic.yml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/.pre-commit-config.yaml +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/Dockerfile +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/LICENSE +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/README.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/_api.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/_templates/custom-module-template.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/conf.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/examples/foo_detector.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0003-ophyd-async-migration.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0005-respect-black-line-length.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0007-subpackage-structure.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/0008-signal-types.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions/COPYME +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/decisions.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/design-goals.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations/flyscanning.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/explanations.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/genindex.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/choose-interfaces-for-devices.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/contribute.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/make-a-standard-detector.rst +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to/use_set_and_wait_for_other_value.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/how-to.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/images/ophyd-async-logo.svg +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/images/ophyd-favicon.svg +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/index.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/reference.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/tutorials/installation.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/docs/tutorials.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/setup.cfg +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/__main__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_hdf_dataset.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_log.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_mock_signal_backend.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_protocol.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_providers.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/core/_status.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adaravis/_aravis_io.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/advimba/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/advimba/_vimba_io.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_epics_connector.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_epics_device.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_pvi_connector.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/core/_signal.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/eiger/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/eiger/_eiger.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/eiger/_eiger_controller.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/eiger/_eiger_io.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/eiger/_odin_io.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/signal.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/epics/demo → ophyd_async-0.9.0a2/src/ophyd_async/epics/sim}/__init__.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/epics/demo → ophyd_async-0.9.0a2/src/ophyd_async/epics/sim}/_sensor.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/epics/demo → ophyd_async-0.9.0a2/src/ophyd_async/epics/sim}/mover.db +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/epics/demo → ophyd_async-0.9.0a2/src/ophyd_async/epics/sim}/sensor.db +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/epics/testing/test_records_pva.db +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/core.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/_block.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/_trigger.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/fastcs/panda/_writer.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/py.typed +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/__init__.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/_pattern_detector/__init__.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/_pattern_detector/_pattern_detector.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/_pattern_detector/_pattern_detector_writer.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/demo → ophyd_async-0.9.0a2/src/ophyd_async/sim}/_sim_motor.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim → ophyd_async-0.9.0a2/src/ophyd_async/tango}/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/tango/core/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/tango/core/_base_device.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/tango/core/_tango_readable.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/tango/demo → ophyd_async-0.9.0a2/src/ophyd_async/tango/sim}/__init__.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/tango/demo → ophyd_async-0.9.0a2/src/ophyd_async/tango/sim}/_counter.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/tango/demo → ophyd_async-0.9.0a2/src/ophyd_async/tango/sim}/_detector.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/tango/demo → ophyd_async-0.9.0a2/src/ophyd_async/tango/sim}/_tango/__init__.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/tango/demo → ophyd_async-0.9.0a2/src/ophyd_async/tango/sim}/_tango/_servers.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async/testing/_wait_for_pending.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async.egg-info/requires.txt +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/src/ophyd_async.egg-info/top_level.txt +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/system_tests/epics/eiger/README.md +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/system_tests/epics/eiger/start_iocs_and_run_tests.sh +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_log.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_observe.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_providers.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_status.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_subset_enum.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/core/test_watchable_async_status.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/signal/test_common.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/epics/test_areadetector_subclass_naming.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/fastcs/panda/db/panda.db +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/plan_stubs/test_ensure_connected.py +0 -0
- {ophyd_async-0.9.0a1/src/ophyd_async/sim/testing → ophyd_async-0.9.0a2/tests/sim}/__init__.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/tango/test_tango_signals.py +0 -0
- {ophyd_async-0.9.0a1 → ophyd_async-0.9.0a2}/tests/test_cli.py +0 -0
|
@@ -33,7 +33,7 @@ def get_versions(ref: str, add: str | None) -> list[str]:
|
|
|
33
33
|
builds = set(get_branch_contents(ref))
|
|
34
34
|
except CalledProcessError:
|
|
35
35
|
builds = set()
|
|
36
|
-
logging.warning(f"Cannot get {ref} contents")
|
|
36
|
+
logging.warning(f"Cannot get {ref} contents") # noqa: LOG015
|
|
37
37
|
|
|
38
38
|
# Add and remove from the list of builds
|
|
39
39
|
if add:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.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
|
|
@@ -7,8 +7,8 @@ from bluesky.plans import grid_scan # noqa
|
|
|
7
7
|
from bluesky.utils import ProgressBarManager, register_transform
|
|
8
8
|
from ophyd import Component, Device, EpicsSignal, EpicsSignalRO
|
|
9
9
|
|
|
10
|
-
from ophyd_async.core import
|
|
11
|
-
from ophyd_async.epics import
|
|
10
|
+
from ophyd_async.core import init_devices
|
|
11
|
+
from ophyd_async.epics import sim
|
|
12
12
|
|
|
13
13
|
# Create a run engine, with plotting, progressbar and transform
|
|
14
14
|
RE = RunEngine({}, call_returns_result=True)
|
|
@@ -19,7 +19,7 @@ plt.ion()
|
|
|
19
19
|
register_transform("RE", prefix="<")
|
|
20
20
|
|
|
21
21
|
# Start IOC with demo pvs in subprocess
|
|
22
|
-
pv_prefix =
|
|
22
|
+
pv_prefix = sim.start_ioc_subprocess()
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
# Create ophyd devices
|
|
@@ -31,7 +31,7 @@ class OldSensor(Device):
|
|
|
31
31
|
det_old = OldSensor(pv_prefix, name="det_old")
|
|
32
32
|
|
|
33
33
|
# Create ophyd-async devices
|
|
34
|
-
with
|
|
35
|
-
det =
|
|
36
|
-
det_group =
|
|
37
|
-
samp =
|
|
34
|
+
with init_devices():
|
|
35
|
+
det = sim.Sensor(pv_prefix)
|
|
36
|
+
det_group = sim.SensorGroup(pv_prefix)
|
|
37
|
+
samp = sim.SampleStage(pv_prefix)
|
|
@@ -4,7 +4,7 @@ import bluesky.plan_stubs as bps
|
|
|
4
4
|
import bluesky.plans as bp
|
|
5
5
|
from bluesky import RunEngine
|
|
6
6
|
|
|
7
|
-
from ophyd_async.tango.
|
|
7
|
+
from ophyd_async.tango.sim import (
|
|
8
8
|
DemoCounter,
|
|
9
9
|
DemoMover,
|
|
10
10
|
TangoDetector,
|
|
@@ -14,11 +14,11 @@ from tango.test_context import MultiDeviceTestContext
|
|
|
14
14
|
content = (
|
|
15
15
|
{
|
|
16
16
|
"class": DemoMover,
|
|
17
|
-
"devices": [{"name": "
|
|
17
|
+
"devices": [{"name": "sim/motor/1"}],
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"class": DemoCounter,
|
|
21
|
-
"devices": [{"name": "
|
|
21
|
+
"devices": [{"name": "sim/counter/1"}, {"name": "sim/counter/2"}],
|
|
22
22
|
},
|
|
23
23
|
)
|
|
24
24
|
|
|
@@ -30,8 +30,8 @@ async def main():
|
|
|
30
30
|
detector = TangoDetector(
|
|
31
31
|
trl="",
|
|
32
32
|
name="detector",
|
|
33
|
-
counters_kwargs={"prefix": "
|
|
34
|
-
mover_kwargs={"trl": "
|
|
33
|
+
counters_kwargs={"prefix": "sim/counter/", "count": 2},
|
|
34
|
+
mover_kwargs={"trl": "sim/motor/1"},
|
|
35
35
|
)
|
|
36
36
|
await detector.connect()
|
|
37
37
|
|
|
@@ -62,7 +62,7 @@ The two approaches now look like:
|
|
|
62
62
|
|
|
63
63
|
```python
|
|
64
64
|
class Sensor(StandardReadable, EpicsDevice):
|
|
65
|
-
"""A
|
|
65
|
+
"""A sim sensor that produces a scalar value based on X and Y Movers"""
|
|
66
66
|
|
|
67
67
|
value: A[SignalR[float], PvSuffix("Value"), Format.HINTED_SIGNAL]
|
|
68
68
|
mode: A[SignalRW[EnergyMode], PvSuffix("Mode"), Format.CONFIG_SIGNAL]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Device Collector Event-Loop Choice
|
|
2
2
|
----------------------------------
|
|
3
3
|
|
|
4
|
-
In a sync context, the ophyd-async :python:`
|
|
4
|
+
In a sync context, the ophyd-async :python:`init_devices` requires the bluesky event-loop
|
|
5
5
|
to connect to devices. In an async context, it does not.
|
|
6
6
|
|
|
7
7
|
Sync Context
|
|
@@ -14,25 +14,25 @@ The following will fail if :python:`RE = RunEngine()` has not been called alread
|
|
|
14
14
|
|
|
15
15
|
.. code:: python
|
|
16
16
|
|
|
17
|
-
with
|
|
17
|
+
with init_devices():
|
|
18
18
|
device1 = Device1(prefix)
|
|
19
19
|
device2 = Device2(prefix)
|
|
20
20
|
device3 = Device3(prefix)
|
|
21
21
|
|
|
22
|
-
The :python:`
|
|
22
|
+
The :python:`init_devices` connects to devices in the event-loop created in the run-engine.
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
Async Context
|
|
26
26
|
=============
|
|
27
27
|
|
|
28
28
|
In an async context device connection is decoupled from the run-engine.
|
|
29
|
-
The following attempts connection to all the devices in the :python:`
|
|
29
|
+
The following attempts connection to all the devices in the :python:`init_devices`
|
|
30
30
|
before or after run-engine initialization.
|
|
31
31
|
|
|
32
32
|
.. code:: python
|
|
33
33
|
|
|
34
34
|
async def connection_function() :
|
|
35
|
-
async with
|
|
35
|
+
async with init_devices():
|
|
36
36
|
device1 = Device1(prefix)
|
|
37
37
|
device2 = Device2(prefix)
|
|
38
38
|
device3 = Device3(prefix)
|
|
@@ -43,8 +43,8 @@ The devices will be unable to be used in the run-engine unless they share the sa
|
|
|
43
43
|
When the run-engine is initialised it will create a new background event-loop to use if one
|
|
44
44
|
is not passed in with :python:`RunEngine(loop=loop)`.
|
|
45
45
|
|
|
46
|
-
If the user wants to use devices in the async :python:`
|
|
46
|
+
If the user wants to use devices in the async :python:`init_devices` within the run-engine
|
|
47
47
|
they can either:
|
|
48
48
|
|
|
49
|
-
* Run the :python:`
|
|
50
|
-
* Initialize the run-engine first and run the :python:`
|
|
49
|
+
* Run the :python:`init_devices` first and pass the event-loop into the run-engine.
|
|
50
|
+
* Initialize the run-engine first and run the :python:`init_devices` using the bluesky event-loop.
|
|
@@ -11,7 +11,7 @@ Assembly
|
|
|
11
11
|
|
|
12
12
|
Compound assemblies can be used to group Devices into larger logical Devices:
|
|
13
13
|
|
|
14
|
-
.. literalinclude:: ../../src/ophyd_async/epics/
|
|
14
|
+
.. literalinclude:: ../../src/ophyd_async/epics/sim/_mover.py
|
|
15
15
|
:pyobject: SampleStage
|
|
16
16
|
|
|
17
17
|
This applies prefixes on construction:
|
|
@@ -35,7 +35,7 @@ Grouping by Index
|
|
|
35
35
|
|
|
36
36
|
Sometimes, it makes sense to group devices by number, say an array of sensors:
|
|
37
37
|
|
|
38
|
-
.. literalinclude:: ../../src/ophyd_async/epics/
|
|
38
|
+
.. literalinclude:: ../../src/ophyd_async/epics/sim/_sensor.py
|
|
39
39
|
:pyobject: SensorGroup
|
|
40
40
|
|
|
41
41
|
:class:`~ophyd-async.core.DeviceVector` allows writing maintainable, arbitrary-length device groups instead of fixed classes for each possible grouping. A :class:`~ophyd-async.core.DeviceVector` can be accessed via indices, for example: ``my_sensor_group.sensors[2]``. Here ``sensors`` is a dictionary with integer indices rather than a list so that the most semantically sensible indices may be used, the sensor group above may be 1-indexed, for example, because the sensors' datasheet calls them "sensor 1", "sensor 2" etc.
|
|
@@ -13,7 +13,7 @@ To make a simple device, you need to subclass from the
|
|
|
13
13
|
other suitable Bluesky `Protocols <hardware_interface>` like
|
|
14
14
|
:external+bluesky:py:class:`bluesky.protocols.Movable`.
|
|
15
15
|
|
|
16
|
-
The rest of this guide will show examples from ``src/ophyd_async/epics/
|
|
16
|
+
The rest of this guide will show examples from ``src/ophyd_async/epics/sim/__init__.py``
|
|
17
17
|
|
|
18
18
|
Readable
|
|
19
19
|
--------
|
|
@@ -22,7 +22,7 @@ For a simple :external+bluesky:py:class:`bluesky.protocols.Readable` object like
|
|
|
22
22
|
define some signals, then tell the superclass which signals should contribute to
|
|
23
23
|
``read()`` and ``read_configuration()``:
|
|
24
24
|
|
|
25
|
-
.. literalinclude:: ../../src/ophyd_async/epics/
|
|
25
|
+
.. literalinclude:: ../../src/ophyd_async/epics/sim/_sensor.py
|
|
26
26
|
:pyobject: Sensor
|
|
27
27
|
|
|
28
28
|
First some Signals are constructed and stored on the Device. Each one is passed
|
|
@@ -54,7 +54,7 @@ Movable
|
|
|
54
54
|
For a more complicated device like a `Mover`, you can still use `StandardReadable`
|
|
55
55
|
and implement some addition protocols:
|
|
56
56
|
|
|
57
|
-
.. literalinclude:: ../../src/ophyd_async/epics/
|
|
57
|
+
.. literalinclude:: ../../src/ophyd_async/epics/sim/_mover.py
|
|
58
58
|
:pyobject: Mover
|
|
59
59
|
|
|
60
60
|
The ``set()`` method implements :external+bluesky:py:class:`bluesky.protocols.Movable`. This
|
|
@@ -71,7 +71,7 @@ Assembly
|
|
|
71
71
|
|
|
72
72
|
Compound assemblies can be used to group Devices into larger logical Devices:
|
|
73
73
|
|
|
74
|
-
.. literalinclude:: ../../src/ophyd_async/epics/
|
|
74
|
+
.. literalinclude:: ../../src/ophyd_async/epics/sim/_mover.py
|
|
75
75
|
:pyobject: SampleStage
|
|
76
76
|
|
|
77
77
|
This applies prefixes on construction:
|
|
@@ -24,9 +24,9 @@ Async Tests
|
|
|
24
24
|
Mock Backend
|
|
25
25
|
------------
|
|
26
26
|
|
|
27
|
-
Ophyd devices initialized with a mock backend behave in a similar way to mocks, without requiring you to mock out all the dependencies and internals. The `
|
|
27
|
+
Ophyd devices initialized with a mock backend behave in a similar way to mocks, without requiring you to mock out all the dependencies and internals. The `init_devices` can initialize any number of devices, and their signals and sub-devices (recursively), with a mock backend.
|
|
28
28
|
|
|
29
|
-
.. literalinclude:: ../../tests/epics/
|
|
29
|
+
.. literalinclude:: ../../tests/epics/sim/test_epics_sim.py
|
|
30
30
|
:pyobject: mock_sensor
|
|
31
31
|
|
|
32
32
|
|
|
@@ -37,26 +37,26 @@ Mock signals behave as simply as possible, holding a sensible default value when
|
|
|
37
37
|
|
|
38
38
|
In addition this example also utilizes helper functions like ``assert_reading`` and ``assert_value`` to ensure the validity of device readings and values. For more information see: :doc:`API.core<../_api/ophyd_async.core>`
|
|
39
39
|
|
|
40
|
-
.. literalinclude:: ../../tests/epics/
|
|
40
|
+
.. literalinclude:: ../../tests/epics/sim/test_epics_sim.py
|
|
41
41
|
:pyobject: test_sensor_reading_shows_value
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
Given that the mock signal holds a ``unittest.mock.Mock`` object you can retrieve this object and assert that the device has been set correctly using ``get_mock_put``. You are also free to use any other behaviour that ``unittest.mock.Mock`` provides, such as in this example which sets the parent of the mock to allow ordering across signals to be asserted:
|
|
45
45
|
|
|
46
|
-
.. literalinclude:: ../../tests/epics/
|
|
46
|
+
.. literalinclude:: ../../tests/epics/sim/test_epics_sim.py
|
|
47
47
|
:pyobject: test_retrieve_mock_and_assert
|
|
48
48
|
|
|
49
49
|
There are several other test utility functions:
|
|
50
50
|
|
|
51
51
|
Use ``callback_on_mock_put``, for hooking in logic when a mock value changes (e.g. because someone puts to it). This can be called directly, or used as a context, with the callbacks ending after exit.
|
|
52
52
|
|
|
53
|
-
.. literalinclude:: ../../tests/epics/
|
|
53
|
+
.. literalinclude:: ../../tests/epics/sim/test_epics_sim.py
|
|
54
54
|
:pyobject: test_mover_stopped
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
Testing a Device in a Plan with the RunEngine
|
|
58
58
|
---------------------------------------------
|
|
59
|
-
.. literalinclude:: ../../tests/epics/
|
|
59
|
+
.. literalinclude:: ../../tests/epics/sim/test_epics_sim.py
|
|
60
60
|
:pyobject: test_sensor_in_plan
|
|
61
61
|
|
|
62
62
|
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1187.8240472771774 784.5838303364346" width="1187.8240472771774" height="784.5838303364346"><!-- svg-source:excalidraw --><metadata><!-- payload-type:application/vnd.excalidraw+json --><!-- payload-version:2 --><!-- payload-start -->eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1cXGtT28hcdTAwMTL9nl/hYr+uZ6fnPVu1XHUwMDFmeL9cdGAg4LtblLBcdTAwMDU2yI/YMrbZyn+/PVwitmRLSkxQXHUwMDE1cK+VSlx1MDAwMlx1MDAxYUlcdTAwMWVPn3Ome7pH/34qlVbCcddf+bO04o9qXtCs97zhyu/u/KPf6zc7bWxi0e/9zqBXi65shGG3/+dcdTAwMWZ/xHeQWqf1fJdcdTAwMWb4Lb9cdTAwMWT28br/4O+l0r/Rv9jSrLt7d1x1MDAwZvbOzcBcdTAwMWLv8NP9w+1t9dS4236Kbo0umnQmaLb9+OzIdcIoorlQTEkqQVs9bVx1MDAxZLtWLVxilVSBppZyUHzaOmzWw4a7XHUwMDAyXGZRXHUwMDFjrNKUWrBcdTAwMTTiS1x1MDAxYX7zrlx1MDAxMeI1dHrKa99cdTAwMDX+zJl+2Os8+OudoNNzXHUwMDFk/FxyfPcn7uONV3u463VcdTAwMDbt+vSasOe1+12vh+NcdTAwMTFfd9tcZoJKOI6ejmOK47cy91x1MDAxOV8mPZ47n3dcdTAwMTd+6F2j7ffdmMP0bKfr1ZqhXHUwMDFiXHUwMDFioPG3cD3s7tYj8/xcdTAwMTP3qee1/F1nn/YgXGKmp5vtuu+GfsXTM5/Wrn//tIltY8Ox72e+xX33ffdg4NQoSpPDXHUwMDFlXHUwMDAzjKv5k0eddoQ10MBcdTAwMDAsmPiLNftcdTAwMWJcYrIweuqtXHUwMDE39P3YXHUwMDA0rmubXHRcdTAwMDDG33DQrXvPt4DmIC1cYnyskdN2xNvD/NdcdTAwMGY6tYeMT+l2mkl8uyP+qVx1MDAxNCMm+mX68z+/Z16dj8q52z/NPWYl8PrheqfVaob4vY5dn+b731x1MDAwZr1euIZGbLbv5tv8dj2nJbprtdfrXGZcdTAwMWK+l4JcdTAwMDTeN9/2KWHvObLLSnBTvX06OdLXltc26eZVfTRehOxIccKVkpZLXHUwMDEwXFxZk1wiO8LCNTFcdTAwMDaW2Vx1MDAxNNljwE+5XHJKXHUwMDEyI43mXHUwMDFjn1xu2sSQW3J9huvm9Vxcl4ZZq1xmj/lcdTAwMTVzXaZcdTAwMDRgwnWpQSpcdTAwMDGxNVx1MDAwYmK6NlrHXHUwMDAweiumz1xcXU6h8aMzfWdw3FxizvaHrcv7p4PLe749XHUwMDFhfVmM6UC0YtpcdTAwMWGqwf1cdTAwMTBj5lx1MDAxOc+SXGIhXHUwMDEwXHUwMDFhilx1MDAxYamVjFxyOeE6ylx1MDAwNEE7K2NcdTAwMTjKhqKxYzDlPidGUFx1MDAwMdxSfJax2i7Jn0P+1VeTX1xuLVx1MDAwNVozi/vI79yJnlkpuaE2lodi6C9cdTAwMTmjXHRn8a3on4tSd5TTXHUwMDAw/eB6cPxggro9XHUwMDFiqTXjs2FzNVx1MDAxOHVH54voXHUwMDAxgDJESKMkXHUwMDE4I4DyXHUwMDE4XHUwMDBmz1x1MDAxMOdcdTAwMDRcdTAwMDTljGNcdTAwMWNgqY6pM/XzXHSnglx0w1x1MDAwNVPKclx1MDAxNuMw4VxuUMLQXHUwMDAzxFx1MDAwYimCTibmqaVcdTAwMWPMyMHaq+VAS6lcZloq7mAsXHUwMDA3JtdcdTAwMTVcdTAwMDCjMYpcdTAwMDOdsF5BaiCYZuLN1SBcdTAwMTek7kjD84OLQf38er+744l9enmpz8Pg3JfVtVx1MDAwNcXAXHUwMDEyxpSL+5Wwls3FXHUwMDAxSlx1MDAxMMG1Rlx1MDAxOZBMK65jw07UXHUwMDAwuEY/XHUwMDBiXVx1MDAwN0mpQVx1MDAxN0PFT5jKwZwxTMy/pVx1MDAxYcyowfqr1UBYXHSIdpblXHUwMDFjWDF/cqJcdTAwMDZMSJxcdTAwMTk5LTIyYFx1MDAxNKzB2IDFY/VWYpCPUXeUU/D84GrgVeqNzVx1MDAxZF7/utX6Ut7YWq3fXHUwMDFjle/SauC5J87KXHUwMDAxt4pYjUrAmVx1MDAwNvRcdTAwMTBcdTAwMTLepEM4d45cdTAwMDNHt0BKQEmwad/ARVx1MDAxM+hcXEnqllx1MDAxNoRgiVx1MDAwN0zVQCmCkSsqXHUwMDBlSlxuM1bFoFuqwYxcdTAwMWFsvFpcclx1MDAxOLq8Ssgs14Dlilx1MDAwMXqA6FFgSF/0iiBOtWDffkUwXHUwMDFmo+5IofO9i8E8j/3gpjOMx/BcdTAwMDc6MVx1MDAxZdOy1aPu497J9vrZcFx1MDAxZvzbs520ToT+KJyTXHRQhFwiSrimimLIOatcdTAwMTJlMFx1MDAwNJ1LXHUwMDEzSYhCXHUwMDE3i6Z1wrr1xYzAgS1cdTAwMDOFXHUwMDFjMdjMXHUwMDE2g1ncfF8g4JapZJyfWFx1MDAxZmDzJ6cuXHUwMDAwMPbsvVx1MDAxN816zXVcIlx1MDAwZXlcdTAwMDHrI+C5wfbDUs1cdTAwMGJcdTAwMDI/MeK3nXZYaT5FPaczZ7e8VjNwgy5nXHUwMDFltFx1MDAxYTTv2pFcdTAwMTPs3yawgKNcdTAwMTA28eHT5rDTjVtr+DxcdTAwMGad5l7aMp1e867Z9oKzXHUwMDFmdNJcdTAwMWKEnVO//9zNsDfwk6Pg70yjZcLkXHUwMDBmaDqwNHzcqVx1MDAwZcfXm6u6vXNePeWrtYWmc4zvXHUwMDA0wUlcXIGlXHUwMDE2I0SYJSoznGgppKDAuaIssWI/4akhnEtcZlxyjLMkXlx1MDAxNcMnXvozgijGXHUwMDE4PohKXHUwMDA1XHUwMDE4ji4pnE3hrVfP5+iSXHUwMDE5UEon4TtcdPVzmVxyOJ9RKlx1MDAwNC903Vx1MDAxZnshXHUwMDExM1x0QXmr+TxcdTAwMTej7kij8393Pu96Z9XDrduB199f2zp73LjqXbTsXCLzOY5cdTAwMWHGQFx1MDAxYbVAXHUwMDAws5bPZv6VUYQroVxyM2Ckzcj8u9u1ZlK6RZWZ5Z+pSlxiQ5ihXHUwMDE2/0pEXHUwMDBmzlDxNUuVmFGJ7cUneuDIbGGtykxcdTAwMDWI1NlpXHUwMDFlMPJcdTAwMTCEKjrc10Zp9Utrf5OpvuJm0U6rXHUwMDFi9eXvduZ8XHUwMDBmlnBgXFyjw0KVXHUwMDE1kEhoveH8n9vzYpyAo3p1yK5cdTAwMGY2dqrdx4C1XHUwMDFiI713lOFcdTAwMDRkVfVcdTAwMTiiMPTSqJDS2WiG25IxYlx1MDAxMSnGXCKUXHUwMDE4+lx1MDAwYiluY1x1MDAwMInc5lxcUFxmmVDxM5b3MJxyy0fCKLfIQlx1MDAxNSyTfznc3nt95t9aXGZYXHUwMDE1miqD8jrlXHUwMDE4JHxcdTAwMDDDjVx1MDAwMVF0TK9cXFx1MDAxMVx0TUL6TXyAXFyUuqOcXHUwMDA26Ht3XHUwMDAyfrLCd2Iq/Vx1MDAwYk94Xs/SS3VVXHUwMDE5X9X8/lwiaqBd2Y8xLtBTVCZzyJFcdTAwMWHgKFpFlVx1MDAxMVx1MDAxMlx1MDAwNIbw6XhcdTAwMDDdXHUwMDA0dLMwnlx1MDAxMNrlXGIzKlx1MDAwMUBcdTAwMDGxXHUwMDAyXHUwMDAxylx1MDAwNOMozsvF/jwx2H+9XHUwMDE4oCGNq8bMXG5cYoDmJv9cdTAwMTjGgkZD4Vx1MDAwYnxugjGxU/FWYlDOQ2nUmFx1MDAwNuhcdTAwMDdcdTAwMTeDQ1j1/ftBZet2/CBcdTAwMWFhd9y+3G8uJlx1MDAwNpxQ6rxxXHSIoUSqP1rsl0CEwGGyoGmyPDSu96VEK8M4XHUwMDBlo1x1MDAwNMMzlvrnXGZcdTAwMDGJWoOlXHUwMDE4zIjBQVx1MDAwMTWBnDFU7zTtnanzV1x1MDAwNzCEwGis8GU/JTFcdTAwMWOMIfF25b85IHXHvFAgPj+4XHUwMDE2XFxcdTAwMDSNyv2Td7HfVMdcdTAwMWK1zZOt7mh0tYhcdTAwMTZYYERcdTAwMWFh0EkywpVcdTAwMDXPaoHQxChcdTAwMTffMWGpVlx1MDAxOYk/XHUwMDAy2IBcdTAwMTG+5qhcdTAwMTZuISDLNZBcdTAwMDRtgMDgQkhXdbBUg2w1OHy9XHUwMDFhXGJhjcb4ODNOyF1cdTAwMTkw6DpcdTAwMDNcdTAwMThWuGeguHhcdTAwMGapv1xclEatKXx+cDVYXHIvVoc4f1x1MDAxZldb7ZPH+/2d3aOb3mJqIDBcdTAwMTBwsZ3hjCo2XHUwMDFmJnBcdTAwMTdEoPPktlx1MDAwZliT3lx1MDAxZMBcciNMIPqYlFxiJpGxXHUwMDEzaCYm01bE61xuSy2Y0YKjXHUwMDAyqlx1MDAwMCTXWr20KFxiXWODs2PhXHUwMDFig1x1MDAxMFRKvP12gVxcjLqjnILnXHUwMDA3l4LDLjuiZ8NHM1TlXHUwMDAz8fBwerd7TVx1MDAxN0pcIlqQP4hcdTAwMTIkWIKDZLkrpnRZoZ94XHUwMDA2imeVXHUwMDBic0qsq2HVXHUwMDEw7VGIXHUwMDExt9SCXHUwMDE5Lfj8ei1cdTAwMDBw9W9orlxmLYD88lx1MDAwMFx1MDAxMCCURlx1MDAwYlx1MDAxNVx1MDAxOSe4nIFbwTfvoEQwXHUwMDBmpVHjPD7fu1x1MDAxOPx6XHUwMDBlsex/3Vx0t/nhnq7uhqbSPDg+5seL5Fx1MDAxMHF4XGJFOVx1MDAxNVpcdTAwMGLrXGY7I1x1MDAxM25zhpXMWpeyUZBcdTAwMTCBOIdo8VxuXHUwMDA0pmFCU02zXFyG5e7hXHUwMDFjXTjO1oXsnKFSVKNkZ1x1MDAwNVx1MDAwNkDz64NcXKJcdTAwMTGDP1WkO/A6XHUwMDAxmCRcck/XLkqHXlhr+PXS3+1TP1x1MDAxY/TapYbfS1j/3ZVcdTAwMGIt0OdiXHUwMDEyh1fbtfPxyf3t58HT7nrlZG90vN86XYTQTDJiLDpG0lx1MDAxNYdrSCR2o+IhjozmbkuAxjklWeg7rfGTRC1r/F5C45NcdTAwMTfQWGpKKfqlmTuA8/OA0lVwUFHs0r+rXHUwMDA1clx1MDAwNVx1MDAwNb9cdTAwMTTgJ1P/fWSVXHUwMDE3vGPaZnWyXHUwMDE4nm5Wx/edr5etQy5cdTAwMDJ2trq7a8MhLFa8XHUwMDAzjFxiJiRTOPtcbjNcdTAwMTesa0aJVKCY4NRcdTAwMWGTsZ+PU0OYXHUwMDBiyyZHxtS75GxcdTAwMWVnT1x1MDAxN+ese89cdTAwMDZcdTAwMDcqMzlcdTAwMGI/ekVHtIWN6lwi9+pF9Tr4n3xVae7Qa4bXt53edd9cdTAwMGavv5e/YM//Kp0hXHUwMDBm3jGPXHUwMDE37Hcx1D6RO/f65ubgofbF71x1MDAxZlxmap/LfP1sXHUwMDExamsliOZGaFx0XGJcdTAwMDCQaWZcdTAwMWKDs1x1MDAwMFx1MDAwN2FccqfpXHUwMDE5XHUwMDE4jUxQlVxyn1x1MDAxY0tiL07sylx1MDAwYiZj9GJccjPKZlx1MDAxMjtdrjslNqAuU5Pcu1uUT23Er7175yfELv1V2nLXfzxqp3teXGa5ny79yuOoelC+XHUwMDA3yldcdTAwMGZlY/vOW2jeZorjtK0toP8kuaSz62poPlwiqFx1MDAwMWMsl0InK3WmXHUwMDExM9jlJpqXcfpscU5LbaQrts8qrflBNl1cdTAwMWItXFw+udBt9Uqh/Vx1MDAxNee/lE6fMLrlos3372Fnd7NcdTAwMTiunrY3xGBXXHUwMDFl9PpP7HjfVPf2vcHJXCJcXFx1MDAwNUYp0e7tKVQyKsRcXIG8K6JcdTAwMTUou26/XHKIrFx1MDAwMnlJkMVoR9RlhyqawVrxXHUwMDEy1vo46XP4P2HtxVx1MDAwYmZiJpVcdTAwMDYtWSZt81lrXTWcVoVcdTAwMTbBIGst6OSuql9gLWRSNaFcdTAwMDRvSFUomp9b643zyvaVXHUwMDE4datcdTAwMDftXTa86lxmZMbG9TQ/LXcvp0RyWWqZoGxu8ZlaYo1CS3Anoybj1ZWSPMe/XHUwMDE0g2HDdXz/kp4/peeXxelpLUWFTL5cdTAwMTJcImanyk1EW4raKrgu8sVVxaw8s3fMTvZcbnZ++p7RWvG63UqIo7YySTKuPDb94VpcdTAwMWHOv91Gx8qn79x2UPaj3OS3T9/+XHUwMDBiP9Ji1SJ9<!-- payload-end --></metadata><defs><style class="style-fonts">
|
|
2
|
+
@font-face { font-family: Excalifont; src: url(data:font/woff2;base64,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); }</style></defs><rect x="0" y="0" width="1187.8240472771774" height="784.5838303364346" fill="#ffffff"></rect><g stroke-linecap="round"><g transform="translate(43.84248105120804 302.75444427692025) rotate(0 109.31598350459507 0)"><path d="M-0.45 -0.7 C35.76 -0.86, 180.92 -1.39, 217.58 -1.19 M1.51 1.54 C38.06 1.51, 183.45 0.24, 219.75 -0.28" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(262.4744480603982 302.8253415087969) rotate(0 0 -82.9293667965893)"><path d="M0.64 0.3 C0.59 -27.08, -0.08 -137.51, -0.32 -165.29 M-0.48 -0.59 C-0.72 -28.23, -1.79 -139.66, -1.44 -167.12" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(258.8706526177911 134.14839879518058) rotate(0 332.5798441252804 -1.9202069522244898)"><path d="M-0.18 0.98 C110.67 0.28, 554.82 -2.97, 665.76 -3.76 M-1.73 0.45 C108.95 -0.07, 554.04 -1.71, 665.12 -2.18" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(925.5665064301318 131.8441504525112) rotate(0 1.1521241713346626 80.10711520276767)"><path d="M0.54 0.53 C0.98 27.16, 1.63 133.33, 2.07 159.95 M-0.63 -0.24 C-0.32 26.56, 0.42 134.38, 1 161.35" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(926.3345892110212 293.1415344393678) rotate(0 68.92542750440384 -1.152124171334691)"><path d="M1.09 -0.33 C24.12 -0.33, 115.62 -0.86, 138.29 -1.2 M0.21 -1.54 C23.1 -1.75, 114.33 -2.82, 137.57 -2.74" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(154.08449781789392 67.15748673767692) rotate(0 52.98975332972128 33.34186726364484)"><path d="M-1.06 0.7 C16.59 11.86, 88.97 56.89, 106.91 67.72 M0.58 0.03 C18.07 10.8, 88.85 55.06, 106.45 66.14" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(154.08449781789392 67.15748673767692) rotate(0 52.98975332972128 33.34186726364484)"><path d="M82 60.91 C92.6 64.68, 102.53 66.17, 106.45 66.14 M82 60.91 C86.56 61.38, 93.31 62.59, 106.45 66.14" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(154.08449781789392 67.15748673767692) rotate(0 52.98975332972128 33.34186726364484)"><path d="M91.08 46.42 C98.28 55.67, 104.73 62.72, 106.45 66.14 M91.08 46.42 C93.64 50.1, 98.42 54.45, 106.45 66.14" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(73.11139160618495 10) rotate(0 47.0625 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">set called</text></g><g stroke-linecap="round"><g transform="translate(931.6644736450401 312.4583673202069) rotate(0 4.167733407955666 192.31112725280877)"><path d="M-0.34 -0.98 C1.13 63.35, 6.73 321.09, 8.05 385.17 M1.68 1.12 C3.03 65.16, 5.56 319.49, 6.94 383.33" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(931.6644736450401 312.4583673202069) rotate(0 4.167733407955666 192.31112725280877)"><path d="M-1.96 359.97 C-1.66 365.01, 2.98 369.66, 6.94 383.33 M-1.96 359.97 C0.77 365.61, 2.46 369.39, 6.94 383.33" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(931.6644736450401 312.4583673202069) rotate(0 4.167733407955666 192.31112725280877)"><path d="M15.14 359.71 C11.41 364.76, 12.02 369.48, 6.94 383.33 M15.14 359.71 C14.41 365.37, 12.64 369.21, 6.94 383.33" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(889.4853986759654 715.0686100052003) rotate(0 66.3862760711362 24.140464025867686)"><text x="0" y="17.014199045431567" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="19.312371220694175px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Set completed</text><text x="0" y="41.15466307129928" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="19.312371220694175px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic"></text></g><g stroke-linecap="round"><g transform="translate(45.723429211048085 551.6184165698157) rotate(0 208.3866703977804 -2.9769524342540308)"><path d="M1.15 -0.09 C70.36 -1.4, 346.52 -5.76, 415.96 -6.64 M0.29 -1.19 C69.83 -1.84, 348.7 -4.42, 418.24 -5.46" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(462.49677000660887 545.6645117013077) rotate(0 -1.190780973701635 -80.97310621170891)"><path d="M-0.62 -0.09 C-1.05 -26.87, -1.53 -134.53, -1.9 -161.39 M1.25 -1.18 C0.65 -28.26, -1.74 -136.22, -2.59 -163.22" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(460.1152080592056 380.14595635678495) rotate(0 105.3841161725918 -1.1907809737016066)"><path d="M0.98 -0.93 C36.1 -1.01, 176.54 -1, 211.51 -1.27 M0.04 1.2 C34.99 0.88, 175.96 -2.39, 210.95 -2.82" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(669.6926594306876 376.57361343568016) rotate(0 0.5953904868507607 82.75927767226133)"><path d="M-0.99 -0.41 C-0.54 27.2, 1.55 136.9, 1.72 164.64 M0.7 -1.68 C1.12 26.16, 0.78 138.12, 1.04 165.72" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(672.0742213780909 542.0921687802029) rotate(0 191.12034627910714 -2.976952434253974)"><path d="M0.95 0.4 C64.42 -0.86, 317.63 -5.42, 381.15 -6.62 M0 -0.44 C63.78 -1.63, 319.76 -4.51, 383.29 -5.43" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g stroke-linecap="round"><g transform="translate(672.1152080592055 548.1907594909206) rotate(0 0.5953904868508175 65.49295355358805)"><path d="M-0.92 1.14 C-0.95 23.33, -0.16 110.39, 0.31 131.92 M0.8 0.7 C1.09 22.66, 2.45 108.52, 2.56 130.29" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(672.1152080592055 548.1907594909206) rotate(0 0.5953904868508175 65.49295355358805)"><path d="M-6.25 106.9 C-1.55 113.53, 1.13 124.19, 2.56 130.29 M-6.25 106.9 C-4.64 113.13, -2.21 118.07, 2.56 130.29" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g><g transform="translate(672.1152080592055 548.1907594909206) rotate(0 0.5953904868508175 65.49295355358805)"><path d="M10.85 106.7 C9.68 113.27, 6.5 123.99, 2.56 130.29 M10.85 106.7 C8.22 113.14, 6.41 118.12, 2.56 130.29" stroke="#1e1e1e" stroke-width="2" fill="none"></path></g></g><mask></mask><g transform="translate(616.1485022952302 694.6568192562175) rotate(0 69.97916412353516 25)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">RBV Matched </text><text x="0" y="42.62" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Return here</text></g><g transform="translate(10 264.6402019077296) rotate(0 47.8125 12.500000000000014)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">Set signal</text></g><g transform="translate(869.5323806105109 749.2654514964912) rotate(0 154.14583333333326 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">wait_for_set_completion= True</text></g><g transform="translate(521.8463297153439 749.5838303364346) rotate(0 160.32291666666663 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">wait_for_set_completion = False</text></g><g transform="translate(20.535767711378583 514.1120161220821) rotate(0 59.5625 12.5)"><text x="0" y="17.619999999999997" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="20px" fill="#1e1e1e" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">match signal</text></g><g transform="translate(957.8616550664754 651.6440183607504) rotate(0 7.677083492279053 22.5)"><text x="0" y="31.716" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="36px" fill="#e03131" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">1</text></g><g transform="translate(691.1677036384312 638.6901134922423) rotate(0 12.583333015441895 22.5)"><text x="0" y="31.716" font-family="Excalifont, Xiaolai, Segoe UI Emoji" font-size="36px" fill="#e03131" text-anchor="start" style="white-space: pre;" direction="ltr" dominant-baseline="alphabetic">2</text></g></svg>
|
|
@@ -41,13 +41,13 @@ that you can mix Ophyd and Ophyd Async devices in the same RunEngine:
|
|
|
41
41
|
:start-after: # Create ophyd devices
|
|
42
42
|
:end-before: # Create ophyd-async devices
|
|
43
43
|
|
|
44
|
-
Finally we create the Ophyd Async devices imported from the `epics.
|
|
44
|
+
Finally we create the Ophyd Async devices imported from the `epics.sim` module:
|
|
45
45
|
|
|
46
46
|
.. literalinclude:: ../examples/epics_demo.py
|
|
47
47
|
:language: python
|
|
48
48
|
:start-after: # Create ophyd-async devices
|
|
49
49
|
|
|
50
|
-
The first thing to note is `with`. This uses
|
|
50
|
+
The first thing to note is `with`. This uses `init_devices` as a context
|
|
51
51
|
manager to collect up the top level `Device` instances created in the context,
|
|
52
52
|
and run the following:
|
|
53
53
|
|
|
@@ -75,9 +75,6 @@ dev = [
|
|
|
75
75
|
"types-pyyaml",
|
|
76
76
|
]
|
|
77
77
|
|
|
78
|
-
[project.scripts]
|
|
79
|
-
ophyd-async = "ophyd_async.__main__:main"
|
|
80
|
-
|
|
81
78
|
[project.urls]
|
|
82
79
|
GitHub = "https://github.com/bluesky/ophyd-async"
|
|
83
80
|
|
|
@@ -158,6 +155,11 @@ lint.select = [
|
|
|
158
155
|
"UP", # pyupgrade - https://docs.astral.sh/ruff/rules/#pyupgrade-up
|
|
159
156
|
"SLF", # self - https://docs.astral.sh/ruff/settings/#lintflake8-self
|
|
160
157
|
"PLC2701", # private import - https://docs.astral.sh/ruff/rules/import-private-name/
|
|
158
|
+
"LOG015", # root logger call - https://docs.astral.sh/ruff/rules/root-logger-call/
|
|
159
|
+
"S101", # assert = https://docs.astral.sh/ruff/rules/assert/
|
|
160
|
+
]
|
|
161
|
+
lint.ignore = [
|
|
162
|
+
"B901", # Return in a generator is needed for plans
|
|
161
163
|
]
|
|
162
164
|
lint.preview = true # so that preview mode PLC2701 is enabled
|
|
163
165
|
|
|
@@ -165,54 +167,30 @@ lint.preview = true # so that preview mode PLC2701 is enabled
|
|
|
165
167
|
# By default, private member access is allowed in tests
|
|
166
168
|
# See https://github.com/DiamondLightSource/python-copier-template/issues/154
|
|
167
169
|
# Remove this line to forbid private member access in tests
|
|
168
|
-
"tests/**/*" = ["SLF001"]
|
|
170
|
+
"tests/**/*" = ["SLF001", "S101"]
|
|
171
|
+
"src/ophyd_async/testing/**/*" = ["SLF001", "S101"]
|
|
172
|
+
"system_tests/**/*" = ["SLF001", "S101"]
|
|
173
|
+
"docs/examples/**/*" = ["SLF001", "S101"]
|
|
169
174
|
|
|
170
175
|
|
|
171
176
|
[tool.importlinter]
|
|
172
177
|
root_package = "ophyd_async"
|
|
173
178
|
|
|
174
179
|
[[tool.importlinter.contracts]]
|
|
175
|
-
name = "
|
|
176
|
-
type = "
|
|
177
|
-
|
|
180
|
+
name = "All runtime modules are in layers"
|
|
181
|
+
type = "layers"
|
|
182
|
+
containers = ["ophyd_async"]
|
|
183
|
+
layers = ["plan_stubs", "fastcs", "epics | tango | sim", "core"]
|
|
184
|
+
exhaustive = true
|
|
185
|
+
exhaustive_ignores = ["testing", "_version", "__main__"]
|
|
178
186
|
|
|
179
187
|
[[tool.importlinter.contracts]]
|
|
180
|
-
name = "
|
|
188
|
+
name = "Testing and sim modules are not used at runtime"
|
|
181
189
|
type = "forbidden"
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
"ophyd_async.fastcs",
|
|
190
|
+
forbidden_modules = ["ophyd_async.testing", "ophyd_async.sim"]
|
|
191
|
+
source_modules = [
|
|
185
192
|
"ophyd_async.plan_stubs",
|
|
186
|
-
"ophyd_async.
|
|
187
|
-
"ophyd_async.tango",
|
|
188
|
-
]
|
|
189
|
-
|
|
190
|
-
[[tool.importlinter.contracts]]
|
|
191
|
-
name = "tango depends only on core"
|
|
192
|
-
type = "forbidden"
|
|
193
|
-
source_modules = "ophyd_async.tango"
|
|
194
|
-
forbidden_modules = [
|
|
193
|
+
"ophyd_async.fast.*",
|
|
195
194
|
"ophyd_async.epics",
|
|
196
|
-
"ophyd_async.fastcs",
|
|
197
|
-
"ophyd_async.plan_stubs",
|
|
198
|
-
"ophyd_async.sim",
|
|
199
|
-
]
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
[[tool.importlinter.contracts]]
|
|
203
|
-
name = "sim depends only on core"
|
|
204
|
-
type = "forbidden"
|
|
205
|
-
source_modules = "ophyd_async.sim"
|
|
206
|
-
forbidden_modules = [
|
|
207
|
-
"ophyd_async.epics",
|
|
208
|
-
"ophyd_async.fastcs",
|
|
209
|
-
"ophyd_async.plan_stubs",
|
|
210
195
|
"ophyd_async.tango",
|
|
211
196
|
]
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
[[tool.importlinter.contracts]]
|
|
215
|
-
name = "Fastcs depends only on core, epics, tango"
|
|
216
|
-
type = "forbidden"
|
|
217
|
-
source_modules = "ophyd_async.fastcs"
|
|
218
|
-
forbidden_modules = ["ophyd_async.plan_stubs", "ophyd_async.sim"]
|
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
from ._detector import (
|
|
2
2
|
DetectorController,
|
|
3
|
+
DetectorControllerT,
|
|
3
4
|
DetectorTrigger,
|
|
4
5
|
DetectorWriter,
|
|
5
6
|
StandardDetector,
|
|
6
7
|
TriggerInfo,
|
|
7
8
|
)
|
|
8
|
-
from ._device import Device,
|
|
9
|
+
from ._device import Device, DeviceConnector, DeviceVector, init_devices
|
|
9
10
|
from ._device_filler import DeviceFiller
|
|
10
|
-
from ._device_save_loader import (
|
|
11
|
-
all_at_once,
|
|
12
|
-
get_signal_values,
|
|
13
|
-
load_device,
|
|
14
|
-
load_from_yaml,
|
|
15
|
-
save_device,
|
|
16
|
-
save_to_yaml,
|
|
17
|
-
set_signal_values,
|
|
18
|
-
walk_rw_signals,
|
|
19
|
-
)
|
|
20
11
|
from ._flyer import FlyerController, StandardFlyer
|
|
21
12
|
from ._hdf_dataset import HDFDataset, HDFFile
|
|
22
13
|
from ._log import config_ophyd_async_logging
|
|
@@ -41,6 +32,7 @@ from ._readable import (
|
|
|
41
32
|
StandardReadable,
|
|
42
33
|
StandardReadableFormat,
|
|
43
34
|
)
|
|
35
|
+
from ._settings import Settings, SettingsProvider
|
|
44
36
|
from ._signal import (
|
|
45
37
|
Signal,
|
|
46
38
|
SignalConnector,
|
|
@@ -55,9 +47,11 @@ from ._signal import (
|
|
|
55
47
|
soft_signal_r_and_setter,
|
|
56
48
|
soft_signal_rw,
|
|
57
49
|
wait_for_value,
|
|
50
|
+
walk_rw_signals,
|
|
58
51
|
)
|
|
59
52
|
from ._signal_backend import (
|
|
60
53
|
Array1D,
|
|
54
|
+
DTypeScalar_co,
|
|
61
55
|
SignalBackend,
|
|
62
56
|
SignalDatatype,
|
|
63
57
|
SignalDatatypeT,
|
|
@@ -84,26 +78,20 @@ from ._utils import (
|
|
|
84
78
|
in_micros,
|
|
85
79
|
wait_for_connection,
|
|
86
80
|
)
|
|
81
|
+
from ._yaml_settings import YamlSettingsProvider
|
|
87
82
|
|
|
88
83
|
__all__ = [
|
|
89
84
|
"DetectorController",
|
|
85
|
+
"DetectorControllerT",
|
|
90
86
|
"DetectorTrigger",
|
|
91
87
|
"DetectorWriter",
|
|
92
88
|
"StandardDetector",
|
|
93
89
|
"TriggerInfo",
|
|
94
90
|
"Device",
|
|
95
91
|
"DeviceConnector",
|
|
96
|
-
"
|
|
92
|
+
"init_devices",
|
|
97
93
|
"DeviceVector",
|
|
98
94
|
"DeviceFiller",
|
|
99
|
-
"all_at_once",
|
|
100
|
-
"get_signal_values",
|
|
101
|
-
"load_device",
|
|
102
|
-
"load_from_yaml",
|
|
103
|
-
"save_device",
|
|
104
|
-
"save_to_yaml",
|
|
105
|
-
"set_signal_values",
|
|
106
|
-
"walk_rw_signals",
|
|
107
95
|
"StandardFlyer",
|
|
108
96
|
"FlyerController",
|
|
109
97
|
"HDFDataset",
|
|
@@ -128,6 +116,8 @@ __all__ = [
|
|
|
128
116
|
"HintedSignal",
|
|
129
117
|
"StandardReadable",
|
|
130
118
|
"StandardReadableFormat",
|
|
119
|
+
"Settings",
|
|
120
|
+
"SettingsProvider",
|
|
131
121
|
"Signal",
|
|
132
122
|
"SignalConnector",
|
|
133
123
|
"SignalR",
|
|
@@ -141,7 +131,9 @@ __all__ = [
|
|
|
141
131
|
"soft_signal_r_and_setter",
|
|
142
132
|
"soft_signal_rw",
|
|
143
133
|
"wait_for_value",
|
|
134
|
+
"walk_rw_signals",
|
|
144
135
|
"Array1D",
|
|
136
|
+
"DTypeScalar_co",
|
|
145
137
|
"SignalBackend",
|
|
146
138
|
"make_datakey",
|
|
147
139
|
"StrictEnum",
|
|
@@ -168,4 +160,5 @@ __all__ = [
|
|
|
168
160
|
"in_micros",
|
|
169
161
|
"wait_for_connection",
|
|
170
162
|
"completed_status",
|
|
163
|
+
"YamlSettingsProvider",
|
|
171
164
|
]
|