ophyd-async 0.5.2__tar.gz → 0.7.0__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.5.2 → ophyd_async-0.7.0}/.copier-answers.yml +1 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.devcontainer/devcontainer.json +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.git-blame-ignore-revs +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/CONTRIBUTING.md +1 -1
- ophyd_async-0.7.0/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
- ophyd_async-0.7.0/.github/ISSUE_TEMPLATE/issue.md +13 -0
- ophyd_async-0.7.0/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +8 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/pages/index.html +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/pages/make_switcher.py +13 -12
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_docs.yml +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/ci.yml +2 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.gitignore +1 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.pre-commit-config.yaml +1 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/PKG-INFO +6 -1
- ophyd_async-0.7.0/docs/_api.rst +16 -0
- ophyd_async-0.7.0/docs/_templates/custom-module-template.rst +42 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/conf.py +22 -12
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/examples/foo_detector.py +3 -4
- ophyd_async-0.7.0/docs/examples/tango_demo.py +54 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0003-ophyd-async-migration.rst +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0005-respect-black-line-length.rst +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0007-subpackage-structure.md +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/design-goals.rst +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/event-loop-choice.rst +0 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/contribute.md +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/make-a-standard-detector.rst +5 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/write-tests-for-devices.rst +2 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/reference.md +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/pyproject.toml +22 -12
- ophyd_async-0.7.0/src/ophyd_async/__init__.py +12 -0
- ophyd_async-0.7.0/src/ophyd_async/__main__.py +24 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/_version.py +2 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/__init__.py +15 -7
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_detector.py +133 -87
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_device.py +19 -16
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_device_save_loader.py +30 -19
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_flyer.py +6 -19
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_hdf_dataset.py +8 -9
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_log.py +3 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_mock_signal_backend.py +11 -9
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_mock_signal_utils.py +8 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_protocol.py +7 -7
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_providers.py +11 -11
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_readable.py +30 -22
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_signal.py +52 -51
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_signal_backend.py +20 -7
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_soft_signal_backend.py +62 -32
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_status.py +7 -9
- ophyd_async-0.7.0/src/ophyd_async/core/_table.py +146 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_utils.py +24 -28
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/_aravis_controller.py +20 -19
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/_aravis_io.py +2 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_core_io.py +2 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_core_logic.py +4 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_hdf_writer.py +19 -8
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_single_trigger.py +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_utils.py +5 -6
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +20 -15
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +22 -18
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adsimdetector/_sim.py +7 -6
- ophyd_async-0.7.0/src/ophyd_async/epics/adsimdetector/_sim_controller.py +51 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/_vimba_controller.py +22 -17
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/_mover.py +4 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/sensor.db +0 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_eiger.py +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_eiger_controller.py +18 -18
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_odin_io.py +6 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/motor.py +8 -10
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/pvi/_pvi.py +30 -33
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_aioca.py +55 -25
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_common.py +3 -10
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_epics_transport.py +11 -8
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_p4p.py +79 -30
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_signal.py +6 -8
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/__init__.py +0 -6
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_block.py +7 -0
- ophyd_async-0.7.0/src/ophyd_async/fastcs/panda/_control.py +37 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_hdf_panda.py +11 -4
- ophyd_async-0.7.0/src/ophyd_async/fastcs/panda/_table.py +109 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_trigger.py +4 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_utils.py +3 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_writer.py +30 -15
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/_fly.py +15 -17
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/_nd_attributes.py +12 -6
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py +3 -3
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +27 -21
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py +9 -6
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py +21 -23
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_sim_motor.py +2 -1
- ophyd_async-0.7.0/src/ophyd_async/tango/__init__.py +45 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/base_devices/__init__.py +4 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/base_devices/_base_device.py +225 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/base_devices/_tango_readable.py +33 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/demo/__init__.py +12 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/demo/_counter.py +37 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/demo/_detector.py +42 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/demo/_mover.py +77 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/demo/_tango/__init__.py +3 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/demo/_tango/_servers.py +108 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/signal/__init__.py +39 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/signal/_signal.py +223 -0
- ophyd_async-0.7.0/src/ophyd_async/tango/signal/_tango_transport.py +764 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/PKG-INFO +6 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/SOURCES.txt +22 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/requires.txt +6 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/system_tests/epics/eiger/README.md +0 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/system_tests/epics/eiger/test_eiger_system.py +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/conftest.py +90 -8
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_device_collector.py +11 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_device_save_loader.py +23 -6
- ophyd_async-0.7.0/tests/core/test_flyer.py +432 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_mock_signal_backend.py +20 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_protocol.py +4 -6
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_providers.py +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_readable.py +5 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_signal.py +30 -3
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_soft_signal_backend.py +5 -4
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_status.py +11 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_subset_enum.py +8 -8
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_watchable_async_status.py +2 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adaravis/test_aravis.py +22 -29
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adcore/test_drivers.py +4 -4
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adcore/test_scans.py +18 -15
- ophyd_async-0.7.0/tests/epics/adcore/test_single_trigger.py +56 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adcore/test_writers.py +8 -6
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adkinetix/test_kinetix.py +20 -29
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adpilatus/test_pilatus.py +49 -35
- ophyd_async-0.7.0/tests/epics/adsimdetector/test_sim.py +375 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/advimba/test_vimba.py +26 -31
- ophyd_async-0.7.0/tests/epics/conftest.py +56 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/demo/test_demo.py +2 -3
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/eiger/test_eiger_controller.py +13 -4
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/eiger/test_eiger_detector.py +1 -1
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/pvi/test_pvi.py +10 -12
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/signal/test_signals.py +44 -28
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/test_motor.py +3 -4
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_hdf_panda.py +26 -29
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_panda_connect.py +3 -3
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_panda_control.py +13 -3
- ophyd_async-0.7.0/tests/fastcs/panda/test_panda_utils.py +143 -0
- ophyd_async-0.7.0/tests/fastcs/panda/test_table.py +385 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_trigger.py +66 -8
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_writer.py +18 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/plan_stubs/test_fly.py +24 -21
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/conftest.py +1 -5
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_sim_detector.py +8 -12
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_sim_writer.py +2 -2
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_streaming_plan.py +13 -3
- ophyd_async-0.7.0/tests/tango/test_base_device.py +400 -0
- ophyd_async-0.7.0/tests/tango/test_tango_signals.py +775 -0
- ophyd_async-0.7.0/tests/tango/test_tango_transport.py +854 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/test_data/test_yaml_save.yml +4 -0
- ophyd_async-0.5.2/docs/_templates/README +0 -1
- ophyd_async-0.5.2/docs/_templates/custom-class-template.rst +0 -40
- ophyd_async-0.5.2/docs/_templates/custom-module-template.rst +0 -72
- ophyd_async-0.5.2/docs/reference/api.rst +0 -29
- ophyd_async-0.5.2/src/ophyd_async/__init__.py +0 -3
- ophyd_async-0.5.2/src/ophyd_async/__main__.py +0 -16
- ophyd_async-0.5.2/src/ophyd_async/epics/adsimdetector/_sim_controller.py +0 -46
- ophyd_async-0.5.2/src/ophyd_async/fastcs/panda/_control.py +0 -38
- ophyd_async-0.5.2/src/ophyd_async/fastcs/panda/_table.py +0 -170
- ophyd_async-0.5.2/tests/core/test_flyer.py +0 -292
- ophyd_async-0.5.2/tests/epics/adcore/test_single_trigger.py +0 -50
- ophyd_async-0.5.2/tests/epics/adpilatus/test_pilatus_controller.py +0 -44
- ophyd_async-0.5.2/tests/epics/adsimdetector/test_adsim_controller.py +0 -30
- ophyd_async-0.5.2/tests/epics/adsimdetector/test_sim.py +0 -368
- ophyd_async-0.5.2/tests/fastcs/panda/test_panda_utils.py +0 -88
- ophyd_async-0.5.2/tests/fastcs/panda/test_table.py +0 -31
- ophyd_async-0.5.2/tests/sim/demo/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.codecov.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/actions/install_requirements/action.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/dependabot.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_check.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_dist.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_pypi.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_release.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_test.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_tox.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/periodic.yml +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.mailmap +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/Dockerfile +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/LICENSE +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/README.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/examples/epics_demo.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/COPYME +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/flyscanning.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/genindex.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/choose-interfaces-for-devices.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/compound-devices.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/make-a-simple-device.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/images/bluesky_ophyd_epics_devices_logo.svg +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/images/bluesky_ophyd_logo.svg +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/images/ophyd_favicon.svg +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/index.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/tutorials/installation.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/tutorials/using-existing-devices.rst +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/tutorials.md +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/setup.cfg +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/_aravis.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/_kinetix.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/_pilatus.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adsimdetector/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/_vimba.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/_vimba_io.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/_sensor.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/mover.db +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_eiger_io.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/pvi/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/testing/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/entry_points.txt +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/top_level.txt +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/system_tests/epics/eiger/start_iocs_and_run_tests.sh +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_device.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_log.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_utils.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/eiger/test_odin_io.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/signal/test_common.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/signal/test_records.db +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/test_areadetector_subclass_naming.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/db/panda.db +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/plan_stubs/test_ensure_connected.py +0 -0
- {ophyd_async-0.5.2/src/ophyd_async/tango → ophyd_async-0.7.0/tests/sim}/__init__.py +0 -0
- {ophyd_async-0.5.2/tests/sim → ophyd_async-0.7.0/tests/sim/demo}/__init__.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/demo/test_sim_motor.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_pattern_generator.py +0 -0
- {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/test_cli.py +0 -0
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# Changes here will be overwritten by Copier
|
|
2
|
-
_commit: 2.
|
|
2
|
+
_commit: 2.3.0
|
|
3
3
|
_src_path: gh:DiamondLightSource/python-copier-template
|
|
4
4
|
author_email: tom.cobb@diamond.ac.uk
|
|
5
5
|
author_name: Tom Cobb
|
|
6
|
-
component_owner: ''
|
|
7
6
|
description: Asynchronous Bluesky hardware abstraction code, compatible with control
|
|
8
7
|
systems like EPICS and Tango
|
|
9
8
|
distribution_name: ophyd-async
|
|
@@ -52,4 +52,4 @@
|
|
|
52
52
|
"workspaceMount": "source=${localWorkspaceFolder}/..,target=/workspaces,type=bind",
|
|
53
53
|
// After the container is created, install the python project in editable form
|
|
54
54
|
"postCreateCommand": "pip install $([ -f dev-requirements.txt ] && echo '-c dev-requirements.txt') -e '.[dev]' && pre-commit install"
|
|
55
|
-
}
|
|
55
|
+
}
|
|
@@ -24,4 +24,4 @@ It is recommended that developers use a [vscode devcontainer](https://code.visua
|
|
|
24
24
|
|
|
25
25
|
This project was created using the [Diamond Light Source Copier Template](https://github.com/DiamondLightSource/python-copier-template) for Python projects.
|
|
26
26
|
|
|
27
|
-
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/2.
|
|
27
|
+
For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/2.3.0/how-to.html).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: The template to use for reporting bugs and usability issues
|
|
4
|
+
title: " "
|
|
5
|
+
labels: 'bug'
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Describe the bug, including a clear and concise description of the expected behavior, the actual behavior and the context in which you encountered it (ideally include details of your environment).
|
|
11
|
+
|
|
12
|
+
## Steps To Reproduce
|
|
13
|
+
Steps to reproduce the behavior:
|
|
14
|
+
1. Go to '...'
|
|
15
|
+
2. Click on '....'
|
|
16
|
+
3. Scroll down to '....'
|
|
17
|
+
4. See error
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
## Acceptance Criteria
|
|
21
|
+
- Specific criteria that will be used to judge if the issue is fixed
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Issue
|
|
3
|
+
about: The standard template to use for feature requests, design discussions and tasks
|
|
4
|
+
title: " "
|
|
5
|
+
labels: ''
|
|
6
|
+
assignees: ''
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
A brief description of the issue, including specific stakeholders and the business case where appropriate
|
|
11
|
+
|
|
12
|
+
## Acceptance Criteria
|
|
13
|
+
- Specific criteria that will be used to judge if the issue is fixed
|
|
@@ -1,30 +1,32 @@
|
|
|
1
|
+
"""Make switcher.json to allow docs to switch between different versions."""
|
|
2
|
+
|
|
1
3
|
import json
|
|
2
4
|
import logging
|
|
3
5
|
from argparse import ArgumentParser
|
|
4
6
|
from pathlib import Path
|
|
5
7
|
from subprocess import CalledProcessError, check_output
|
|
6
|
-
from typing import List, Optional
|
|
7
8
|
|
|
8
9
|
|
|
9
|
-
def report_output(stdout: bytes, label: str) ->
|
|
10
|
+
def report_output(stdout: bytes, label: str) -> list[str]:
|
|
11
|
+
"""Print and return something received frm stdout."""
|
|
10
12
|
ret = stdout.decode().strip().split("\n")
|
|
11
13
|
print(f"{label}: {ret}")
|
|
12
14
|
return ret
|
|
13
15
|
|
|
14
16
|
|
|
15
|
-
def get_branch_contents(ref: str) ->
|
|
17
|
+
def get_branch_contents(ref: str) -> list[str]:
|
|
16
18
|
"""Get the list of directories in a branch."""
|
|
17
19
|
stdout = check_output(["git", "ls-tree", "-d", "--name-only", ref])
|
|
18
20
|
return report_output(stdout, "Branch contents")
|
|
19
21
|
|
|
20
22
|
|
|
21
|
-
def get_sorted_tags_list() ->
|
|
23
|
+
def get_sorted_tags_list() -> list[str]:
|
|
22
24
|
"""Get a list of sorted tags in descending order from the repository."""
|
|
23
25
|
stdout = check_output(["git", "tag", "-l", "--sort=-v:refname"])
|
|
24
26
|
return report_output(stdout, "Tags list")
|
|
25
27
|
|
|
26
28
|
|
|
27
|
-
def get_versions(ref: str, add:
|
|
29
|
+
def get_versions(ref: str, add: str | None) -> list[str]:
|
|
28
30
|
"""Generate the file containing the list of all GitHub Pages builds."""
|
|
29
31
|
# Get the directories (i.e. builds) from the GitHub Pages branch
|
|
30
32
|
try:
|
|
@@ -41,7 +43,7 @@ def get_versions(ref: str, add: Optional[str]) -> List[str]:
|
|
|
41
43
|
tags = get_sorted_tags_list()
|
|
42
44
|
|
|
43
45
|
# Make the sorted versions list from main branches and tags
|
|
44
|
-
versions:
|
|
46
|
+
versions: list[str] = []
|
|
45
47
|
for version in ["master", "main"] + tags:
|
|
46
48
|
if version in builds:
|
|
47
49
|
versions.append(version)
|
|
@@ -53,14 +55,12 @@ def get_versions(ref: str, add: Optional[str]) -> List[str]:
|
|
|
53
55
|
return versions
|
|
54
56
|
|
|
55
57
|
|
|
56
|
-
def write_json(path: Path, repository: str, versions: str):
|
|
58
|
+
def write_json(path: Path, repository: str, versions: list[str]):
|
|
59
|
+
"""Write the JSON switcher to path."""
|
|
57
60
|
org, repo_name = repository.split("/")
|
|
58
|
-
pages_url = f"https://{org}.github.io"
|
|
59
|
-
if repo_name != f"{org}.github.io":
|
|
60
|
-
# Only add the repo name if it isn't the source for the org pages site
|
|
61
|
-
pages_url += f"/{repo_name}"
|
|
62
61
|
struct = [
|
|
63
|
-
{"version": version, "url": f"{
|
|
62
|
+
{"version": version, "url": f"https://{org}.github.io/{repo_name}/{version}/"}
|
|
63
|
+
for version in versions
|
|
64
64
|
]
|
|
65
65
|
text = json.dumps(struct, indent=2)
|
|
66
66
|
print(f"JSON switcher:\n{text}")
|
|
@@ -68,6 +68,7 @@ def write_json(path: Path, repository: str, versions: str):
|
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
def main(args=None):
|
|
71
|
+
"""Parse args and write switcher."""
|
|
71
72
|
parser = ArgumentParser(
|
|
72
73
|
description="Make a versions.json file from gh-pages directories"
|
|
73
74
|
)
|
|
@@ -43,14 +43,14 @@ jobs:
|
|
|
43
43
|
needs: check
|
|
44
44
|
if: needs.check.outputs.branch-pr == ''
|
|
45
45
|
uses: ./.github/workflows/_dist.yml
|
|
46
|
-
|
|
46
|
+
|
|
47
47
|
pypi:
|
|
48
48
|
if: github.ref_type == 'tag'
|
|
49
49
|
needs: dist
|
|
50
50
|
uses: ./.github/workflows/_pypi.yml
|
|
51
51
|
permissions:
|
|
52
52
|
id-token: write
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
release:
|
|
55
55
|
if: github.ref_type == 'tag'
|
|
56
56
|
needs: [dist, docs]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
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
|
|
@@ -57,10 +57,13 @@ Provides-Extra: pva
|
|
|
57
57
|
Requires-Dist: p4p; extra == "pva"
|
|
58
58
|
Provides-Extra: sim
|
|
59
59
|
Requires-Dist: h5py; extra == "sim"
|
|
60
|
+
Provides-Extra: tango
|
|
61
|
+
Requires-Dist: pytango>=10.0.0; extra == "tango"
|
|
60
62
|
Provides-Extra: dev
|
|
61
63
|
Requires-Dist: ophyd_async[pva]; extra == "dev"
|
|
62
64
|
Requires-Dist: ophyd_async[sim]; extra == "dev"
|
|
63
65
|
Requires-Dist: ophyd_async[ca]; extra == "dev"
|
|
66
|
+
Requires-Dist: ophyd_async[tango]; extra == "dev"
|
|
64
67
|
Requires-Dist: black; extra == "dev"
|
|
65
68
|
Requires-Dist: flake8; extra == "dev"
|
|
66
69
|
Requires-Dist: flake8-isort; extra == "dev"
|
|
@@ -77,11 +80,13 @@ Requires-Dist: pipdeptree; extra == "dev"
|
|
|
77
80
|
Requires-Dist: pre-commit; extra == "dev"
|
|
78
81
|
Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
|
|
79
82
|
Requires-Dist: pyepics>=3.4.2; extra == "dev"
|
|
83
|
+
Requires-Dist: pyright; extra == "dev"
|
|
80
84
|
Requires-Dist: pyside6==6.7.0; extra == "dev"
|
|
81
85
|
Requires-Dist: pytest; extra == "dev"
|
|
82
86
|
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
83
87
|
Requires-Dist: pytest-cov; extra == "dev"
|
|
84
88
|
Requires-Dist: pytest-faulthandler; extra == "dev"
|
|
89
|
+
Requires-Dist: pytest-forked; extra == "dev"
|
|
85
90
|
Requires-Dist: pytest-rerunfailures; extra == "dev"
|
|
86
91
|
Requires-Dist: pytest-timeout; extra == "dev"
|
|
87
92
|
Requires-Dist: ruff; extra == "dev"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
:orphan:
|
|
2
|
+
|
|
3
|
+
..
|
|
4
|
+
This page is not included in the TOC tree, but must exist so that the
|
|
5
|
+
autosummary pages are generated for ophyd_async and all its
|
|
6
|
+
subpackages
|
|
7
|
+
|
|
8
|
+
API
|
|
9
|
+
===
|
|
10
|
+
|
|
11
|
+
.. autosummary::
|
|
12
|
+
:toctree: _api
|
|
13
|
+
:template: custom-module-template.rst
|
|
14
|
+
:recursive:
|
|
15
|
+
|
|
16
|
+
ophyd_async
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
.. note::
|
|
2
|
+
|
|
3
|
+
Ophyd async is considered experimental until the v1.0 release and
|
|
4
|
+
may change API on minor release numbers before then
|
|
5
|
+
|
|
6
|
+
{{ ('``' + fullname + '``') | underline }}
|
|
7
|
+
|
|
8
|
+
{%- set filtered_members = [] %}
|
|
9
|
+
{%- for item in members %}
|
|
10
|
+
{%- if item in functions + classes + exceptions + attributes %}
|
|
11
|
+
{% set _ = filtered_members.append(item) %}
|
|
12
|
+
{%- endif %}
|
|
13
|
+
{%- endfor %}
|
|
14
|
+
|
|
15
|
+
.. automodule:: {{ fullname }}
|
|
16
|
+
:members:
|
|
17
|
+
|
|
18
|
+
{% block modules %}
|
|
19
|
+
{% if modules %}
|
|
20
|
+
.. rubric:: Submodules
|
|
21
|
+
|
|
22
|
+
.. autosummary::
|
|
23
|
+
:toctree:
|
|
24
|
+
:template: custom-module-template.rst
|
|
25
|
+
:recursive:
|
|
26
|
+
{% for item in modules %}
|
|
27
|
+
{{ item }}
|
|
28
|
+
{%- endfor %}
|
|
29
|
+
{% endif %}
|
|
30
|
+
{% endblock %}
|
|
31
|
+
|
|
32
|
+
{% block members %}
|
|
33
|
+
{% if filtered_members %}
|
|
34
|
+
.. rubric:: Members
|
|
35
|
+
|
|
36
|
+
.. autosummary::
|
|
37
|
+
:nosignatures:
|
|
38
|
+
{% for item in filtered_members %}
|
|
39
|
+
{{ item }}
|
|
40
|
+
{%- endfor %}
|
|
41
|
+
{% endif %}
|
|
42
|
+
{% endblock %}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
"""Configuration file for the Sphinx documentation builder.
|
|
2
|
+
|
|
3
|
+
This file only contains a selection of the most common options. For a full
|
|
4
|
+
list see the documentation:
|
|
5
|
+
https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
6
|
+
"""
|
|
6
7
|
|
|
7
8
|
import os
|
|
8
9
|
import sys
|
|
@@ -38,7 +39,10 @@ extensions = [
|
|
|
38
39
|
"sphinxcontrib.autodoc_pydantic",
|
|
39
40
|
# Use this for generating API docs
|
|
40
41
|
"sphinx.ext.autodoc",
|
|
42
|
+
# Not sure if this is still used?
|
|
41
43
|
"sphinx.ext.doctest",
|
|
44
|
+
# and making summary tables at the top of API docs
|
|
45
|
+
"sphinx.ext.autosummary",
|
|
42
46
|
# This can parse google style docstrings
|
|
43
47
|
"sphinx.ext.napoleon",
|
|
44
48
|
# For linking to external sphinx documentation
|
|
@@ -51,7 +55,6 @@ extensions = [
|
|
|
51
55
|
"sphinx_copybutton",
|
|
52
56
|
# For the card element
|
|
53
57
|
"sphinx_design",
|
|
54
|
-
"sphinx.ext.autosummary",
|
|
55
58
|
"sphinx.ext.mathjax",
|
|
56
59
|
"sphinx.ext.githubpages",
|
|
57
60
|
"IPython.sphinxext.ipython_directive",
|
|
@@ -88,16 +91,21 @@ nitpick_ignore = [
|
|
|
88
91
|
("py:class", "typing_extensions.Literal"),
|
|
89
92
|
]
|
|
90
93
|
|
|
91
|
-
# Both the class’ and the __init__ method’s docstring are concatenated and
|
|
92
|
-
# inserted into the main body of the autoclass directive
|
|
93
|
-
autoclass_content = "both"
|
|
94
|
-
|
|
95
94
|
# Order the members by the order they appear in the source code
|
|
96
95
|
autodoc_member_order = "bysource"
|
|
97
96
|
|
|
98
97
|
# Don't inherit docstrings from baseclasses
|
|
99
98
|
autodoc_inherit_docstrings = False
|
|
100
99
|
|
|
100
|
+
# Add some more modules to the top level autosummary
|
|
101
|
+
ophyd_async.__all__ += ["sim", "epics", "tango", "fastcs", "plan_stubs"]
|
|
102
|
+
|
|
103
|
+
# Document only what is in __all__
|
|
104
|
+
autosummary_ignore_module_all = False
|
|
105
|
+
|
|
106
|
+
# Add any paths that contain templates here, relative to this directory.
|
|
107
|
+
templates_path = ["_templates"]
|
|
108
|
+
|
|
101
109
|
# Output graphviz directive produced images in a scalable format
|
|
102
110
|
graphviz_output_format = "svg"
|
|
103
111
|
|
|
@@ -241,9 +249,11 @@ autodoc_docstring_signature = True
|
|
|
241
249
|
# numpydoc config
|
|
242
250
|
numpydoc_show_class_members = False
|
|
243
251
|
|
|
244
|
-
#
|
|
245
|
-
autodoc_pydantic_model_show_json = True
|
|
252
|
+
# Don't show config summary as it's not relevant
|
|
246
253
|
autodoc_pydantic_model_show_config_summary = False
|
|
247
254
|
|
|
255
|
+
# Show the fields in source order
|
|
256
|
+
autodoc_pydantic_model_summary_list_order = "bysource"
|
|
257
|
+
|
|
248
258
|
# Where to put Ipython savefigs
|
|
249
259
|
ipython_savefig_dir = "../build/savefig"
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import asyncio
|
|
2
|
-
from typing import Optional
|
|
3
2
|
|
|
4
3
|
from bluesky.protocols import HasHints, Hints
|
|
5
4
|
|
|
6
5
|
from ophyd_async.core import (
|
|
7
6
|
AsyncStatus,
|
|
8
|
-
|
|
7
|
+
DetectorController,
|
|
9
8
|
DetectorTrigger,
|
|
10
9
|
PathProvider,
|
|
11
10
|
StandardDetector,
|
|
@@ -20,7 +19,7 @@ class FooDriver(adcore.ADBaseIO):
|
|
|
20
19
|
super().__init__(prefix, name)
|
|
21
20
|
|
|
22
21
|
|
|
23
|
-
class FooController(
|
|
22
|
+
class FooController(DetectorController):
|
|
24
23
|
def __init__(self, driver: FooDriver) -> None:
|
|
25
24
|
self._drv = driver
|
|
26
25
|
|
|
@@ -32,7 +31,7 @@ class FooController(DetectorControl):
|
|
|
32
31
|
self,
|
|
33
32
|
num: int,
|
|
34
33
|
trigger: DetectorTrigger = DetectorTrigger.internal,
|
|
35
|
-
exposure:
|
|
34
|
+
exposure: float | None = None,
|
|
36
35
|
) -> AsyncStatus:
|
|
37
36
|
await asyncio.gather(
|
|
38
37
|
self._drv.num_images.set(num),
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
|
|
3
|
+
import bluesky.plan_stubs as bps
|
|
4
|
+
import bluesky.plans as bp
|
|
5
|
+
from bluesky import RunEngine
|
|
6
|
+
|
|
7
|
+
from ophyd_async.tango.demo import (
|
|
8
|
+
DemoCounter,
|
|
9
|
+
DemoMover,
|
|
10
|
+
TangoDetector,
|
|
11
|
+
)
|
|
12
|
+
from tango.test_context import MultiDeviceTestContext
|
|
13
|
+
|
|
14
|
+
content = (
|
|
15
|
+
{
|
|
16
|
+
"class": DemoMover,
|
|
17
|
+
"devices": [{"name": "demo/motor/1"}],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"class": DemoCounter,
|
|
21
|
+
"devices": [{"name": "demo/counter/1"}, {"name": "demo/counter/2"}],
|
|
22
|
+
},
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
tango_context = MultiDeviceTestContext(content)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
async def main():
|
|
29
|
+
with tango_context:
|
|
30
|
+
detector = TangoDetector(
|
|
31
|
+
trl="",
|
|
32
|
+
name="detector",
|
|
33
|
+
counters_kwargs={"prefix": "demo/counter/", "count": 2},
|
|
34
|
+
mover_kwargs={"trl": "demo/motor/1"},
|
|
35
|
+
)
|
|
36
|
+
await detector.connect()
|
|
37
|
+
|
|
38
|
+
RE = RunEngine()
|
|
39
|
+
|
|
40
|
+
RE(bps.read(detector))
|
|
41
|
+
RE(bps.mv(detector, 0))
|
|
42
|
+
RE(bp.count(list(detector.counters.values())))
|
|
43
|
+
|
|
44
|
+
set_status = detector.set(1.0)
|
|
45
|
+
await asyncio.sleep(0.1)
|
|
46
|
+
stop_status = detector.stop()
|
|
47
|
+
await set_status
|
|
48
|
+
await stop_status
|
|
49
|
+
assert all([set_status.done, stop_status.done])
|
|
50
|
+
assert all([set_status.success, stop_status.success])
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
if __name__ == "__main__":
|
|
54
|
+
asyncio.run(main())
|
{ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0003-ophyd-async-migration.rst
RENAMED
|
@@ -47,4 +47,4 @@ Consequences
|
|
|
47
47
|
------------
|
|
48
48
|
|
|
49
49
|
This will require changing the repository structure of Ophyd Async; see
|
|
50
|
-
the decision on repository structure :doc:`0004-repository-structure` for details.
|
|
50
|
+
the decision on repository structure :doc:`0004-repository-structure` for details.
|
{ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0007-subpackage-structure.md
RENAMED
|
@@ -31,7 +31,7 @@ There will be a flat public namespace under core, with contents reimported from
|
|
|
31
31
|
- `_signal.py` for `Signal`, `SignalBackend`, `observe_signal`, etc.
|
|
32
32
|
- `_mock.py` for `MockSignalBackend`, `get_mock_put`, etc.
|
|
33
33
|
- `_readable.py` for `StandardReadable`, `ConfigSignal`, `HintedSignal`, etc.
|
|
34
|
-
- `_detector.py` for `StandardDetector`, `DetectorWriter`, `
|
|
34
|
+
- `_detector.py` for `StandardDetector`, `DetectorWriter`, `DetectorController`, `TriggerInfo`, etc.
|
|
35
35
|
- `_flyer.py` for `StandardFlyer`, `FlyerControl`, etc.
|
|
36
36
|
|
|
37
37
|
There are some renames that will be required, e.g. `HardwareTriggeredFlyable` -> `StandardFlyer`
|
|
@@ -54,4 +54,4 @@ To view and contribute to discussions on outstanding decisions, please see the d
|
|
|
54
54
|
.. _malcolm: https://github.com/dls-controls/pymalcolm
|
|
55
55
|
.. _scanspec: https://github.com/dls-controls/scanspec
|
|
56
56
|
.. _design: https://github.com/bluesky/ophyd-async/issues?q=is%3Aissue+is%3Aopen+label%3Adesign
|
|
57
|
-
.. _pmac: https://github.com/dls-controls/pmac
|
|
57
|
+
.. _pmac: https://github.com/dls-controls/pmac
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
```{include} ../../.github/CONTRIBUTING.md
|
|
2
|
-
```
|
|
2
|
+
```
|
|
@@ -10,7 +10,7 @@ Make a StandardDetector
|
|
|
10
10
|
The `StandardDetector` is a simple compound device, with 2 standard components:
|
|
11
11
|
|
|
12
12
|
- `DetectorWriter` to handle data persistence, i/o and pass information about data to the RunEngine (usually an instance of :py:class:`ADHDFWriter`)
|
|
13
|
-
- `
|
|
13
|
+
- `DetectorController` with logic for arming and disarming the detector. This will be unique to the StandardDetector implementation.
|
|
14
14
|
|
|
15
15
|
Writing an AreaDetector StandardDetector
|
|
16
16
|
----------------------------------------
|
|
@@ -28,9 +28,9 @@ Enumeration fields should be named to prevent namespace collision, i.e. for a Si
|
|
|
28
28
|
:language: python
|
|
29
29
|
:pyobject: FooDriver
|
|
30
30
|
|
|
31
|
-
Define a :py:class:`FooController` with handling for converting the standard pattern of :py:meth:`ophyd_async.core.
|
|
31
|
+
Define a :py:class:`FooController` with handling for converting the standard pattern of :py:meth:`ophyd_async.core.DetectorController.arm` and :py:meth:`ophyd_async.core.DetectorController.disarm` to required state of :py:class:`FooDriver` e.g. setting a compatible "FooTriggerSource" for a given `DetectorTrigger`, or raising an exception if incompatible with the `DetectorTrigger`.
|
|
32
32
|
|
|
33
|
-
The :py:meth:`ophyd_async.core.
|
|
33
|
+
The :py:meth:`ophyd_async.core.DetectorController.get_deadtime` method is used when constructing sequence tables for hardware controlled scanning. Details on how to calculate the deadtime may be only available from technical manuals or otherwise complex. **If it requires fetching from signals, it is recommended to cache the value during the StandardDetector `prepare` method.**
|
|
34
34
|
|
|
35
35
|
.. literalinclude:: ../examples/foo_detector.py
|
|
36
36
|
:pyobject: FooController
|
|
@@ -47,8 +47,8 @@ If the :py:class:`FooDriver` signals that should be read as configuration, they
|
|
|
47
47
|
Writing a non-AreaDetector StandardDetector
|
|
48
48
|
-------------------------------------------
|
|
49
49
|
|
|
50
|
-
A non-AreaDetector `StandardDetector` should implement `
|
|
51
|
-
Here we construct a `
|
|
50
|
+
A non-AreaDetector `StandardDetector` should implement `DetectorController` and `DetectorWriter` directly.
|
|
51
|
+
Here we construct a `DetectorController` that co-ordinates signals on a PandA PositionCapture block - a child device "pcap" of the `StandardDetector` implementation, analogous to the :py:class:`FooDriver`.
|
|
52
52
|
|
|
53
53
|
.. literalinclude:: ../../src/ophyd_async/fastcs/panda/_control.py
|
|
54
54
|
:pyobject: PandaPcapController
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.. note::
|
|
2
2
|
|
|
3
|
-
Ophyd async is included on a provisional basis until the v1.0 release and
|
|
3
|
+
Ophyd async is included on a provisional basis until the v1.0 release and
|
|
4
4
|
may change API on minor release numbers before then
|
|
5
5
|
|
|
6
6
|
Write Tests for Devices
|
|
@@ -35,7 +35,7 @@ Mock Utility Functions
|
|
|
35
35
|
|
|
36
36
|
Mock signals behave as simply as possible, holding a sensible default value when initialized and retaining any value (in memory) to which they are set. This model breaks down in the case of read-only signals, which cannot be set because there is an expectation of some external device setting them in the real world. There is a utility function, ``set_mock_value``, to mock-set values for mock signals, including read-only ones.
|
|
37
37
|
|
|
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<../
|
|
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
40
|
.. literalinclude:: ../../tests/epics/demo/test_demo.py
|
|
41
41
|
:pyobject: test_sensor_reading_shows_value
|