ophyd-async 0.13.0__tar.gz → 0.13.1__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.13.0 → ophyd_async-0.13.1}/.copier-answers.yml +3 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/CONTRIBUTING.md +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/ISSUE_TEMPLATE/bug_report.md +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/actions/install_requirements/action.yml +2 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/dependabot.yml +4 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_docs.yml +1 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_release.yml +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_test.yml +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/ci.yml +8 -17
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.pre-commit-config.yaml +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/PKG-INFO +4 -4
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0008-signal-types.md +2 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/tutorials/installation.md +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/pyproject.toml +16 -3
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/_version.py +16 -3
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_detector.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_signal.py +9 -9
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_utils.py +5 -4
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adandor/_andor.py +1 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_core_detector.py +1 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_core_io.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_core_logic.py +2 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_core_writer.py +9 -6
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_hdf_writer.py +6 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +4 -4
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adpilatus/_pilatus.py +2 -6
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/advimba/_vimba_io.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_p4p.py +2 -3
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_pvi_connector.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/testing/_example_ioc.py +1 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_settings.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/_tango_transport.py +2 -2
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/_assert.py +6 -6
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/_one_of_everything.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async.egg-info/PKG-INFO +4 -4
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async.egg-info/SOURCES.txt +0 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async.egg-info/requires.txt +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/conftest.py +0 -17
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_watchable_async_status.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_drivers.py +1 -1
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/conftest.py +0 -3
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/tango/test_tango_signals.py +1 -1
- ophyd_async-0.13.0/.github/workflows/_check.yml +0 -27
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.codecov.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.devcontainer/devcontainer.json +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.git-blame-ignore-revs +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/ISSUE_TEMPLATE/issue.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/codeql/codeql-config.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/pages/index.html +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/pages/make_switcher.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_codeql.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_dist.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_import_with_no_extras.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_pypi.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/_tox.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.github/workflows/periodic.yml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/.gitignore +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/Dockerfile +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/LICENSE +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/README.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/_static/custom.css +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/conf.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0003-ophyd-async-migration.rst +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0005-respect-black-line-length.rst +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0007-subpackage-structure.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0009-procedural-vs-declarative-devices.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0010-docstring-format.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/0011-buffer-updates-camonitor.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions/COPYME +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/decisions.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/declarative-vs-procedural.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/design-goals.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/device-connection-strategies.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/devices-signals-backends.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/fly-scanning.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/plan-stubs.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations/where-device-logic.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/explanations.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/genindex.rst +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/choose-right-baseclass.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/contribute.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/derive-one-signal-from-others.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/implement-ad-detector.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/interact-with-signals.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/put-device-back.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to/store-and-retrieve.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/how-to.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/images/fly_scan_collection_windows_and_frames.svg +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/images/ophyd-async-logo.svg +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/images/ophyd-favicon.svg +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/images/set_and_wait_for_other_value.excalidraw.svg +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/index.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/reference.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/tutorials/implementing-detectors.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/tutorials/implementing-devices.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/tutorials/using-devices.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/tutorials/writing-tests-for-devices.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/docs/tutorials.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/setup.cfg +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/__main__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/_docs_parser.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_derived_signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_derived_signal_backend.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_device.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_device_filler.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_enums.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_flyer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_hdf_dataset.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_log.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_mock_signal_backend.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_protocol.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_providers.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_readable.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_settings.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_signal_backend.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_soft_signal_backend.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_status.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_table.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/core/_yaml_settings.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adandor/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adandor/_andor_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adandor/_andor_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adaravis/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adaravis/_aravis.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adaravis/_aravis_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adaravis/_aravis_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_jpeg_writer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_single_trigger.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_tiff_writer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adcore/_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adkinetix/_kinetix.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adpilatus/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adsimdetector/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adsimdetector/_sim.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adsimdetector/_sim_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/adsimdetector/_sim_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/advimba/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/advimba/_vimba.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/advimba/_vimba_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_aioca.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_epics_connector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_epics_device.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/core/_util.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/__main__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/_ioc.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/_motor.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/_point_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/_point_detector_channel.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/_stage.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/motor.db +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/point_detector.db +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/demo/point_detector_channel.db +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/eiger/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/eiger/_odin_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/motor.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/pmac/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/pmac/_pmac_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/pmac/_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/testing/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/testing/_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/testing/test_records.db +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/epics/testing/test_records_pva.db +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/core.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/eiger/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/eiger/_eiger.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/eiger/_eiger_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/eiger/_eiger_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/_block.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/_control.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/_hdf_panda.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/_table.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/_trigger.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/fastcs/panda/_writer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_fly.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_nd_attributes.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_panda.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/plan_stubs/_wait_for_awaitable.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/py.typed +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/__main__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_blob_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_blob_detector_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_blob_detector_writer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_mirror_horizontal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_mirror_vertical.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_motor.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_pattern_generator.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_point_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/sim/_stage.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/_base_device.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/_converters.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/_signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/_tango_readable.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/core/_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/demo/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/demo/_counter.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/demo/_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/demo/_mover.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/demo/_tango/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/demo/_tango/_servers.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/testing/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/tango/testing/_one_of_everything.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/__pytest_assert_rewrite.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/_mock_signal_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/_single_derived.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async/testing/_wait_for_pending.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/src/ophyd_async.egg-info/top_level.txt +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/system_tests/epics/eiger/README.md +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/system_tests/epics/eiger/start_iocs_and_run_tests.sh +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/system_tests/epics/eiger/test_eiger_system.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_auto_init_devices.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_device.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_flyer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_log.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_mock_signal_backend.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_multi_derived_signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_observe.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_protocol.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_providers.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_readable.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_single_derived_signal.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_soft_signal_backend.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_status.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_subset_enum.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_table.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/core/test_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adandor/test_andor.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adaravis/test_aravis.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_cont_acq_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_detectors.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_plugins.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_scans.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_single_trigger.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adcore/test_writers.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adkinetix/test_kinetix.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adpilatus/test_pilatus.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/adsimdetector/test_sim.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/advimba/test_vimba.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/demo/test_epics_demo.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/eiger/test_odin_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/pmac/test_pmac_io.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/pmac/test_pmac_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/pvi/test_pvi.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/signal/test_common.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/signal/test_signals.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/signal/test_yaml_save_ca.yaml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/signal/test_yaml_save_pva.yaml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/test_areadetector_subclass_naming.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/epics/test_motor.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/eiger/test_eiger_controller.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/eiger/test_eiger_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/db/panda.db +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_hdf_panda.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_panda_connect.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_panda_control.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_panda_utils.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_seq_table.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_trigger.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/fastcs/panda/test_writer.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/plan_stubs/test_ensure_connected.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/plan_stubs/test_fly.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/plan_stubs/test_settings.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/plan_stubs/test_setup.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/sim/__init__.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/sim/test_sim_blob_detector.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/sim/test_sim_motor.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/tango/conftest.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/tango/context_subprocess.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/tango/test_base_device.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/tango/test_tango_transport.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/test_cli.py +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/test_data/test_yaml_config_save.yaml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/test_data/test_yaml_save.yaml +0 -0
- {ophyd_async-0.13.0 → ophyd_async-0.13.1}/tests/test_tutorials.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Changes here will be overwritten by Copier
|
|
2
|
-
_commit:
|
|
3
|
-
_src_path:
|
|
2
|
+
_commit: 4.1.0
|
|
3
|
+
_src_path: https://github.com/DiamondLightSource/python-copier-template
|
|
4
4
|
author_email: tom.cobb@diamond.ac.uk
|
|
5
5
|
author_name: Tom Cobb
|
|
6
6
|
description: Asynchronous Bluesky hardware abstraction code, compatible with control
|
|
@@ -13,4 +13,5 @@ github_org: bluesky
|
|
|
13
13
|
package_name: ophyd_async
|
|
14
14
|
pypi: true
|
|
15
15
|
repo_name: ophyd-async
|
|
16
|
+
strict_typing: false
|
|
16
17
|
type_checker: pyright
|
|
@@ -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/
|
|
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/4.1.0/how-to.html).
|
|
@@ -7,7 +7,7 @@ assignees: ''
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
Describe the bug, including a clear and concise description of the expected
|
|
10
|
+
Describe the bug, including a clear and concise description of the expected behaviour, the actual behavior and the context in which you encountered it (ideally include details of your environment).
|
|
11
11
|
|
|
12
12
|
## Steps To Reproduce
|
|
13
13
|
Steps to reproduce the behavior:
|
|
@@ -15,7 +15,8 @@ runs:
|
|
|
15
15
|
run: |
|
|
16
16
|
PYTHON_VERSION="${{ inputs.python-version }}"
|
|
17
17
|
if [ $PYTHON_VERSION == "dev" ]; then
|
|
18
|
-
|
|
18
|
+
# python version from Dockerfile, removing potential pinned sha
|
|
19
|
+
PYTHON_VERSION=$(sed -Ene "s/ARG PYTHON_VERSION=([0-9\.]+).*/\1/p" Dockerfile)
|
|
19
20
|
fi
|
|
20
21
|
echo "PYTHON_VERSION=$PYTHON_VERSION" >> "$GITHUB_ENV"
|
|
21
22
|
shell: bash
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
- name: Create GitHub Release
|
|
24
24
|
# We pin to the SHA, not the tag, for security reasons.
|
|
25
25
|
# https://docs.github.com/en/actions/learn-github-actions/security-hardening-for-github-actions#using-third-party-actions
|
|
26
|
-
uses: softprops/action-gh-release@
|
|
26
|
+
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2
|
|
27
27
|
with:
|
|
28
28
|
prerelease: ${{ contains(github.ref_name, 'a') || contains(github.ref_name, 'b') || contains(github.ref_name, 'rc') }}
|
|
29
29
|
files: "*"
|
|
@@ -2,26 +2,24 @@ name: CI
|
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
tags:
|
|
8
|
+
- '*'
|
|
5
9
|
pull_request:
|
|
6
10
|
|
|
7
11
|
jobs:
|
|
8
|
-
check:
|
|
9
|
-
uses: ./.github/workflows/_check.yml
|
|
10
12
|
|
|
11
13
|
lint:
|
|
12
|
-
needs: check
|
|
13
|
-
if: needs.check.outputs.branch-pr == ''
|
|
14
14
|
uses: ./.github/workflows/_tox.yml
|
|
15
15
|
with:
|
|
16
16
|
tox: pre-commit,type-checking
|
|
17
17
|
|
|
18
18
|
test:
|
|
19
|
-
needs: check
|
|
20
|
-
if: needs.check.outputs.branch-pr == ''
|
|
21
19
|
strategy:
|
|
22
20
|
matrix:
|
|
23
21
|
runs-on: ["ubuntu-latest", "windows-latest"] # can add macos-latest
|
|
24
|
-
python-version: ["3.
|
|
22
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
25
23
|
include:
|
|
26
24
|
# Include one that runs in the dev environment
|
|
27
25
|
- runs-on: "ubuntu-latest"
|
|
@@ -35,35 +33,28 @@ jobs:
|
|
|
35
33
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
36
34
|
|
|
37
35
|
import_with_no_extras:
|
|
38
|
-
needs: check
|
|
39
|
-
if: needs.check.outputs.branch-pr == ''
|
|
40
36
|
uses: ./.github/workflows/_import_with_no_extras.yml
|
|
41
37
|
|
|
42
38
|
docs:
|
|
43
|
-
needs: check
|
|
44
|
-
if: needs.check.outputs.branch-pr == ''
|
|
45
39
|
uses: ./.github/workflows/_docs.yml
|
|
46
40
|
|
|
41
|
+
|
|
47
42
|
dist:
|
|
48
|
-
needs: check
|
|
49
|
-
if: needs.check.outputs.branch-pr == ''
|
|
50
43
|
uses: ./.github/workflows/_dist.yml
|
|
51
44
|
|
|
52
45
|
pypi:
|
|
46
|
+
needs: [dist, test]
|
|
53
47
|
if: github.ref_type == 'tag'
|
|
54
|
-
needs: dist
|
|
55
48
|
uses: ./.github/workflows/_pypi.yml
|
|
56
49
|
permissions:
|
|
57
50
|
id-token: write
|
|
58
51
|
|
|
59
52
|
codeql:
|
|
60
|
-
needs: check
|
|
61
|
-
if: needs.check.outputs.branch-pr == ''
|
|
62
53
|
uses: ./.github/workflows/_codeql.yml
|
|
63
54
|
|
|
64
55
|
release:
|
|
56
|
+
needs: [dist, test, docs]
|
|
65
57
|
if: github.ref_type == 'tag'
|
|
66
|
-
needs: [dist, docs]
|
|
67
58
|
uses: ./.github/workflows/_release.yml
|
|
68
59
|
permissions:
|
|
69
60
|
contents: write
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ophyd-async
|
|
3
|
-
Version: 0.13.
|
|
3
|
+
Version: 0.13.1
|
|
4
4
|
Summary: Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango
|
|
5
5
|
Author-email: Tom Cobb <tom.cobb@diamond.ac.uk>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -35,10 +35,10 @@ License: BSD 3-Clause License
|
|
|
35
35
|
Project-URL: GitHub, https://github.com/bluesky/ophyd-async
|
|
36
36
|
Classifier: Development Status :: 3 - Alpha
|
|
37
37
|
Classifier: License :: OSI Approved :: BSD License
|
|
38
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
39
38
|
Classifier: Programming Language :: Python :: 3.11
|
|
40
39
|
Classifier: Programming Language :: Python :: 3.12
|
|
41
|
-
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
41
|
+
Requires-Python: >=3.11
|
|
42
42
|
Description-Content-Type: text/markdown
|
|
43
43
|
License-File: LICENSE
|
|
44
44
|
Requires-Dist: numpy
|
|
@@ -57,7 +57,7 @@ Requires-Dist: aioca>=2.0a4; extra == "ca"
|
|
|
57
57
|
Provides-Extra: pva
|
|
58
58
|
Requires-Dist: p4p>=4.2.0; extra == "pva"
|
|
59
59
|
Provides-Extra: tango
|
|
60
|
-
Requires-Dist: pytango==10.0.
|
|
60
|
+
Requires-Dist: pytango==10.0.2; extra == "tango"
|
|
61
61
|
Provides-Extra: demo
|
|
62
62
|
Requires-Dist: ipython; extra == "demo"
|
|
63
63
|
Requires-Dist: matplotlib; extra == "demo"
|
|
@@ -54,8 +54,8 @@ Structure now read from `.value` rather than `.pvi`. Supported in FastCS. Requir
|
|
|
54
54
|
## `StrictEnum` is now requried for all strictly checked `Enums`
|
|
55
55
|
```python
|
|
56
56
|
# old
|
|
57
|
-
from enum import
|
|
58
|
-
class MyEnum(
|
|
57
|
+
from enum import StrEnum
|
|
58
|
+
class MyEnum(StrEnum):
|
|
59
59
|
ONE = "one"
|
|
60
60
|
TWO = "two"
|
|
61
61
|
# new
|
|
@@ -7,9 +7,9 @@ name = "ophyd-async"
|
|
|
7
7
|
classifiers = [
|
|
8
8
|
"Development Status :: 3 - Alpha",
|
|
9
9
|
"License :: OSI Approved :: BSD License",
|
|
10
|
-
"Programming Language :: Python :: 3.10",
|
|
11
10
|
"Programming Language :: Python :: 3.11",
|
|
12
11
|
"Programming Language :: Python :: 3.12",
|
|
12
|
+
"Programming Language :: Python :: 3.13",
|
|
13
13
|
]
|
|
14
14
|
description = "Asynchronous Bluesky hardware abstraction code, compatible with control systems like EPICS and Tango"
|
|
15
15
|
dependencies = [
|
|
@@ -26,13 +26,13 @@ dependencies = [
|
|
|
26
26
|
dynamic = ["version"]
|
|
27
27
|
license.file = "LICENSE"
|
|
28
28
|
readme = "README.md"
|
|
29
|
-
requires-python = ">=3.
|
|
29
|
+
requires-python = ">=3.11"
|
|
30
30
|
|
|
31
31
|
[project.optional-dependencies]
|
|
32
32
|
sim = ["h5py"]
|
|
33
33
|
ca = ["aioca>=2.0a4"]
|
|
34
34
|
pva = ["p4p>=4.2.0"]
|
|
35
|
-
tango = ["pytango==10.0.
|
|
35
|
+
tango = ["pytango==10.0.2"]
|
|
36
36
|
demo = ["ipython", "matplotlib", "pyqt6"]
|
|
37
37
|
dev = [
|
|
38
38
|
"ophyd_async[sim]",
|
|
@@ -192,3 +192,16 @@ source_modules = [
|
|
|
192
192
|
"ophyd_async.tango.*",
|
|
193
193
|
]
|
|
194
194
|
ignore_imports = ["ophyd_async.*.testing.* -> ophyd_async.testing"]
|
|
195
|
+
|
|
196
|
+
[[tool.importlinter.contracts]]
|
|
197
|
+
name = "ophyd_async.core private modules are not to be used outside ophyd_async.core"
|
|
198
|
+
type = "forbidden"
|
|
199
|
+
forbidden_modules = ["ophyd_async.core.*"]
|
|
200
|
+
source_modules = [
|
|
201
|
+
"ophyd_async.testing",
|
|
202
|
+
"ophyd_async.plan_stubs",
|
|
203
|
+
"ophyd_async.fastcs.*",
|
|
204
|
+
"ophyd_async.epics.*",
|
|
205
|
+
"ophyd_async.tango.*",
|
|
206
|
+
]
|
|
207
|
+
allow_indirect_imports = true
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
3
|
|
|
4
|
-
__all__ = [
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
5
12
|
|
|
6
13
|
TYPE_CHECKING = False
|
|
7
14
|
if TYPE_CHECKING:
|
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
|
9
16
|
from typing import Union
|
|
10
17
|
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
12
20
|
else:
|
|
13
21
|
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
14
23
|
|
|
15
24
|
version: str
|
|
16
25
|
__version__: str
|
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
|
18
27
|
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
19
30
|
|
|
20
|
-
__version__ = version = '0.13.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 13,
|
|
31
|
+
__version__ = version = '0.13.1'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 13, 1)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = 'g228f25c8b'
|
|
@@ -84,7 +84,7 @@ class TriggerInfo(ConfinedModel):
|
|
|
84
84
|
A exposures_per_event > 1 can be useful to have exposures from a faster detector
|
|
85
85
|
able to be zipped with a single exposure from a slower detector. E.g. if
|
|
86
86
|
number_of_events=10 and exposures_per_event=5 then the detector will take
|
|
87
|
-
|
|
87
|
+
50 exposures, but publish 10 StreamDatum indices, and describe() will show a
|
|
88
88
|
shape of (5, h, w) for each.
|
|
89
89
|
Default is 1.
|
|
90
90
|
"""
|
|
@@ -39,8 +39,8 @@ from ._utils import (
|
|
|
39
39
|
async def _wait_for(coro: Awaitable[T], timeout: float | None, source: str) -> T:
|
|
40
40
|
try:
|
|
41
41
|
return await asyncio.wait_for(coro, timeout)
|
|
42
|
-
except
|
|
43
|
-
raise
|
|
42
|
+
except TimeoutError as e:
|
|
43
|
+
raise TimeoutError(source) from e
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
def _add_timeout(func):
|
|
@@ -492,7 +492,7 @@ async def observe_signals_value(
|
|
|
492
492
|
last_item = ()
|
|
493
493
|
while True:
|
|
494
494
|
if overall_deadline and time.monotonic() >= overall_deadline:
|
|
495
|
-
raise
|
|
495
|
+
raise TimeoutError(
|
|
496
496
|
f"observe_value was still observing signals "
|
|
497
497
|
f"{[signal.source for signal in signals]} after "
|
|
498
498
|
f"timeout {done_timeout}s"
|
|
@@ -500,8 +500,8 @@ async def observe_signals_value(
|
|
|
500
500
|
iteration_timeout = _get_iteration_timeout(timeout, overall_deadline)
|
|
501
501
|
try:
|
|
502
502
|
item = await asyncio.wait_for(q.get(), iteration_timeout)
|
|
503
|
-
except
|
|
504
|
-
raise
|
|
503
|
+
except TimeoutError as exc:
|
|
504
|
+
raise TimeoutError(
|
|
505
505
|
f"Timeout Error while waiting {iteration_timeout}s to update "
|
|
506
506
|
f"{[signal.source for signal in signals]}. "
|
|
507
507
|
f"Last observed signal and value were {last_item}"
|
|
@@ -536,8 +536,8 @@ class _ValueChecker(Generic[SignalDatatypeT]):
|
|
|
536
536
|
):
|
|
537
537
|
try:
|
|
538
538
|
await asyncio.wait_for(self._wait_for_value(signal), timeout)
|
|
539
|
-
except
|
|
540
|
-
raise
|
|
539
|
+
except TimeoutError as e:
|
|
540
|
+
raise TimeoutError(
|
|
541
541
|
f"{signal.name} didn't match {self._matcher_name} in {timeout}s, "
|
|
542
542
|
f"last value {self._last_value!r}"
|
|
543
543
|
) from e
|
|
@@ -635,8 +635,8 @@ async def set_and_wait_for_other_value(
|
|
|
635
635
|
await asyncio.wait_for(_wait_for_value(), timeout)
|
|
636
636
|
if wait_for_set_completion:
|
|
637
637
|
await status
|
|
638
|
-
except
|
|
639
|
-
raise
|
|
638
|
+
except TimeoutError as e:
|
|
639
|
+
raise TimeoutError(
|
|
640
640
|
f"{match_signal.name} value didn't match value from"
|
|
641
641
|
f" {matcher.__name__}() in {timeout}s"
|
|
642
642
|
) from e
|
|
@@ -4,7 +4,7 @@ import asyncio
|
|
|
4
4
|
import logging
|
|
5
5
|
from collections.abc import Awaitable, Callable, Iterable, Mapping, Sequence
|
|
6
6
|
from dataclasses import dataclass
|
|
7
|
-
from enum import Enum, EnumMeta
|
|
7
|
+
from enum import Enum, EnumMeta, StrEnum
|
|
8
8
|
from typing import (
|
|
9
9
|
Any,
|
|
10
10
|
Generic,
|
|
@@ -59,15 +59,15 @@ class AnyStringUppercaseNameEnumMeta(UppercaseNameEnumMeta):
|
|
|
59
59
|
return super().__call__(value, *args, **kwargs)
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
class StrictEnum(
|
|
62
|
+
class StrictEnum(StrEnum, metaclass=UppercaseNameEnumMeta):
|
|
63
63
|
"""All members should exist in the Backend, and there will be no extras."""
|
|
64
64
|
|
|
65
65
|
|
|
66
|
-
class SubsetEnum(
|
|
66
|
+
class SubsetEnum(StrEnum, metaclass=AnyStringUppercaseNameEnumMeta):
|
|
67
67
|
"""All members should exist in the Backend, but there may be extras."""
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
class SupersetEnum(
|
|
70
|
+
class SupersetEnum(StrEnum, metaclass=UppercaseNameEnumMeta):
|
|
71
71
|
"""Some members should exist in the Backend, and there should be no extras."""
|
|
72
72
|
|
|
73
73
|
|
|
@@ -243,6 +243,7 @@ def get_enum_cls(datatype: type | None) -> type[EnumTypes] | None:
|
|
|
243
243
|
"""
|
|
244
244
|
if get_origin(datatype) is Sequence:
|
|
245
245
|
datatype = get_args(datatype)[0]
|
|
246
|
+
datatype = get_origin_class(datatype)
|
|
246
247
|
if datatype and issubclass(datatype, Enum):
|
|
247
248
|
if not issubclass(datatype, EnumTypes):
|
|
248
249
|
raise TypeError(
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from collections.abc import Sequence
|
|
2
2
|
|
|
3
|
-
from ophyd_async.core import PathProvider
|
|
4
|
-
from ophyd_async.core._signal import SignalR
|
|
3
|
+
from ophyd_async.core import PathProvider, SignalR
|
|
5
4
|
from ophyd_async.epics import adcore
|
|
6
5
|
|
|
7
6
|
from ._andor_controller import Andor2Controller
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
from collections.abc import Sequence
|
|
2
2
|
|
|
3
|
-
from ophyd_async.core import SignalR, StandardDetector
|
|
4
|
-
from ophyd_async.core._providers import PathProvider
|
|
3
|
+
from ophyd_async.core import PathProvider, SignalR, StandardDetector
|
|
5
4
|
|
|
6
5
|
from ._core_io import ADBaseIO, NDPluginBaseIO, NDPluginCBIO
|
|
7
6
|
from ._core_logic import ADBaseContAcqController, ADBaseControllerT
|
|
@@ -229,7 +229,7 @@ class NDFileHDFIO(NDFilePluginIO):
|
|
|
229
229
|
swmr_mode: A[SignalRW[bool], PvSuffix.rbv("SWMRMode")]
|
|
230
230
|
flush_now: A[SignalRW[bool], PvSuffix("FlushNow")]
|
|
231
231
|
xml_file_name: A[SignalRW[str], PvSuffix.rbv("XMLFileName")]
|
|
232
|
-
num_frames_chunks: A[
|
|
232
|
+
num_frames_chunks: A[SignalRW[int], PvSuffix.rbv("NumFramesChunks")]
|
|
233
233
|
chunk_size_auto: A[SignalRW[bool], PvSuffix.rbv("ChunkSizeAuto")]
|
|
234
234
|
lazy_open: A[SignalRW[bool], PvSuffix.rbv("LazyOpen")]
|
|
235
235
|
|
|
@@ -130,7 +130,7 @@ class ADBaseController(DetectorController, Generic[ADBaseIOT]):
|
|
|
130
130
|
):
|
|
131
131
|
if state in self.good_states:
|
|
132
132
|
return
|
|
133
|
-
except
|
|
133
|
+
except TimeoutError as exc:
|
|
134
134
|
if state is not None:
|
|
135
135
|
raise ValueError(
|
|
136
136
|
f"Final detector state {state.value} not in valid end "
|
|
@@ -138,7 +138,7 @@ class ADBaseController(DetectorController, Generic[ADBaseIOT]):
|
|
|
138
138
|
) from exc
|
|
139
139
|
else:
|
|
140
140
|
# No updates from the detector, something else is wrong
|
|
141
|
-
raise
|
|
141
|
+
raise TimeoutError(
|
|
142
142
|
"Could not monitor detector state: "
|
|
143
143
|
+ self.driver.detector_state.source
|
|
144
144
|
) from exc
|
|
@@ -11,15 +11,18 @@ from event_model import ( # type: ignore
|
|
|
11
11
|
)
|
|
12
12
|
from pydantic import PositiveInt
|
|
13
13
|
|
|
14
|
-
from ophyd_async.core
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
from ophyd_async.core import (
|
|
15
|
+
DEFAULT_TIMEOUT,
|
|
16
|
+
AsyncStatus,
|
|
17
|
+
DatasetDescriber,
|
|
18
|
+
DetectorWriter,
|
|
19
|
+
EnableDisable,
|
|
20
|
+
PathInfo,
|
|
21
|
+
PathProvider,
|
|
22
|
+
error_if_none,
|
|
18
23
|
observe_value,
|
|
19
24
|
set_and_wait_for_value,
|
|
20
25
|
)
|
|
21
|
-
from ophyd_async.core._status import AsyncStatus
|
|
22
|
-
from ophyd_async.core._utils import DEFAULT_TIMEOUT, error_if_none
|
|
23
26
|
from ophyd_async.epics.core import stop_busy_record
|
|
24
27
|
|
|
25
28
|
# from ophyd_async.epics.adcore._core_logic import ADBaseDatasetDescriber
|
|
@@ -75,8 +75,13 @@ class ADHDFWriter(ADWriter[NDFileHDFIO]):
|
|
|
75
75
|
# Used by the base class
|
|
76
76
|
self._exposures_per_event = exposures_per_event
|
|
77
77
|
|
|
78
|
-
# Determine number of frames that will be saved per HDF chunk
|
|
78
|
+
# Determine number of frames that will be saved per HDF chunk.
|
|
79
|
+
# On a fresh IOC startup, this is set to zero until the first capture,
|
|
80
|
+
# so if it is zero, set it to 1.
|
|
79
81
|
frames_per_chunk = await self.fileio.num_frames_chunks.get_value()
|
|
82
|
+
if frames_per_chunk == 0:
|
|
83
|
+
frames_per_chunk = 1
|
|
84
|
+
await self.fileio.num_frames_chunks.set(frames_per_chunk)
|
|
80
85
|
|
|
81
86
|
if not _is_fully_described(detector_shape):
|
|
82
87
|
# Questions:
|
|
@@ -16,10 +16,10 @@ class KinetixTriggerMode(StrictEnum):
|
|
|
16
16
|
class KinetixReadoutMode(StrictEnum):
|
|
17
17
|
"""Readout mode for ADKinetix detector."""
|
|
18
18
|
|
|
19
|
-
SENSITIVITY = 1
|
|
20
|
-
SPEED = 2
|
|
21
|
-
DYNAMIC_RANGE = 3
|
|
22
|
-
SUB_ELECTRON = 4
|
|
19
|
+
SENSITIVITY = "1"
|
|
20
|
+
SPEED = "2"
|
|
21
|
+
DYNAMIC_RANGE = "3"
|
|
22
|
+
SUB_ELECTRON = "4"
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class KinetixDriverIO(adcore.ADBaseIO):
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
from collections.abc import Sequence
|
|
2
2
|
|
|
3
|
-
from ophyd_async.core import PathProvider
|
|
4
|
-
from ophyd_async.
|
|
5
|
-
from ophyd_async.epics.adcore._core_detector import AreaDetector
|
|
6
|
-
from ophyd_async.epics.adcore._core_io import NDPluginBaseIO
|
|
7
|
-
from ophyd_async.epics.adcore._core_writer import ADWriter
|
|
8
|
-
from ophyd_async.epics.adcore._hdf_writer import ADHDFWriter
|
|
3
|
+
from ophyd_async.core import PathProvider, SignalR
|
|
4
|
+
from ophyd_async.epics.adcore import ADHDFWriter, ADWriter, AreaDetector, NDPluginBaseIO
|
|
9
5
|
|
|
10
6
|
from ._pilatus_controller import PilatusController, PilatusReadoutTime
|
|
11
7
|
from ._pilatus_io import PilatusDriverIO
|
|
@@ -22,7 +22,6 @@ from ophyd_async.core import (
|
|
|
22
22
|
SignalDatatype,
|
|
23
23
|
SignalDatatypeT,
|
|
24
24
|
SignalMetadata,
|
|
25
|
-
StrictEnum,
|
|
26
25
|
Table,
|
|
27
26
|
get_enum_cls,
|
|
28
27
|
get_unique,
|
|
@@ -82,7 +81,7 @@ def _metadata_from_value(datatype: type[SignalDatatype], value: Any) -> SignalMe
|
|
|
82
81
|
if (limits := _limits_from_value(value)) and specifier[-1] in _number_specifiers:
|
|
83
82
|
metadata["limits"] = limits
|
|
84
83
|
# Get choices from display or value
|
|
85
|
-
if datatype is str or
|
|
84
|
+
if datatype is str or get_enum_cls(datatype) is not None:
|
|
86
85
|
if hasattr(display_data, "choices"):
|
|
87
86
|
metadata["choices"] = display_data.choices
|
|
88
87
|
elif hasattr(value_data, "choices"):
|
|
@@ -327,7 +326,7 @@ def context() -> Context:
|
|
|
327
326
|
async def pvget_with_timeout(pv: str, timeout: float) -> Any:
|
|
328
327
|
try:
|
|
329
328
|
return await asyncio.wait_for(context().get(pv), timeout=timeout)
|
|
330
|
-
except
|
|
329
|
+
except TimeoutError as exc:
|
|
331
330
|
logger.debug(f"signal pva://{pv} timed out", exc_info=True)
|
|
332
331
|
raise NotConnected(f"pva://{pv}") from exc
|
|
333
332
|
|
|
@@ -6,13 +6,13 @@ from ophyd_async.core import (
|
|
|
6
6
|
Device,
|
|
7
7
|
DeviceConnector,
|
|
8
8
|
DeviceFiller,
|
|
9
|
+
LazyMock,
|
|
9
10
|
Signal,
|
|
10
11
|
SignalR,
|
|
11
12
|
SignalRW,
|
|
12
13
|
SignalW,
|
|
13
14
|
SignalX,
|
|
14
15
|
)
|
|
15
|
-
from ophyd_async.core._utils import LazyMock
|
|
16
16
|
|
|
17
17
|
from ._epics_connector import fill_backend_with_prefix
|
|
18
18
|
from ._signal import PvaSignalBackend, pvget_with_timeout
|
|
@@ -4,8 +4,7 @@ from typing import Annotated as A
|
|
|
4
4
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
|
|
7
|
-
from ophyd_async.core import Array1D, SignalR, SignalRW, StrictEnum, Table
|
|
8
|
-
from ophyd_async.core._utils import SubsetEnum
|
|
7
|
+
from ophyd_async.core import Array1D, SignalR, SignalRW, StrictEnum, SubsetEnum, Table
|
|
9
8
|
from ophyd_async.epics.core import EpicsDevice, PvSuffix
|
|
10
9
|
|
|
11
10
|
from ._utils import TestingIOC, generate_random_pv_prefix
|
|
@@ -13,10 +13,10 @@ from ophyd_async.core import (
|
|
|
13
13
|
Settings,
|
|
14
14
|
SettingsProvider,
|
|
15
15
|
SignalRW,
|
|
16
|
+
Table,
|
|
16
17
|
walk_config_signals,
|
|
17
18
|
walk_rw_signals,
|
|
18
19
|
)
|
|
19
|
-
from ophyd_async.core._table import Table
|
|
20
20
|
|
|
21
21
|
from ._utils import T
|
|
22
22
|
from ._wait_for_awaitable import wait_for_awaitable
|
|
@@ -212,7 +212,7 @@ class AttributeProxy(TangoProxy):
|
|
|
212
212
|
|
|
213
213
|
task = asyncio.create_task(_write())
|
|
214
214
|
await asyncio.wait_for(task, timeout)
|
|
215
|
-
except
|
|
215
|
+
except TimeoutError as te:
|
|
216
216
|
raise TimeoutError(f"{self._name} attr put failed: Timeout") from te
|
|
217
217
|
except DevFailed as de:
|
|
218
218
|
raise RuntimeError(
|
|
@@ -451,7 +451,7 @@ class CommandProxy(TangoProxy):
|
|
|
451
451
|
timestamp=time.time(),
|
|
452
452
|
alarm_severity=0,
|
|
453
453
|
)
|
|
454
|
-
except
|
|
454
|
+
except TimeoutError as te:
|
|
455
455
|
raise TimeoutError(f"{self._name} command failed: Timeout") from te
|
|
456
456
|
except DevFailed as de:
|
|
457
457
|
raise RuntimeError(
|
|
@@ -21,11 +21,11 @@ from ophyd_async.core import (
|
|
|
21
21
|
from ._utils import T
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
def partial_reading(val: Any) ->
|
|
25
|
-
"""Helper function for building expected reading or configuration
|
|
24
|
+
def partial_reading(val: Any) -> Mapping[str, Any]:
|
|
25
|
+
"""Helper function for building expected reading or configuration mapping.
|
|
26
26
|
|
|
27
|
-
:param val: Value to be wrapped in
|
|
28
|
-
:return: The
|
|
27
|
+
:param val: Value to be wrapped in mapping with "value" as the key.
|
|
28
|
+
:return: The mapping that has wrapped the val with key "value".
|
|
29
29
|
"""
|
|
30
30
|
return {"value": val}
|
|
31
31
|
|
|
@@ -100,7 +100,7 @@ def _assert_readings_approx_equal(
|
|
|
100
100
|
|
|
101
101
|
async def assert_configuration(
|
|
102
102
|
configurable: AsyncConfigurable,
|
|
103
|
-
expected_configuration:
|
|
103
|
+
expected_configuration: Mapping[str, Mapping[str, Any]],
|
|
104
104
|
full_match: bool = True,
|
|
105
105
|
) -> None:
|
|
106
106
|
"""Assert that a configurable Device has the given configuration.
|
|
@@ -108,7 +108,7 @@ async def assert_configuration(
|
|
|
108
108
|
:param configurable:
|
|
109
109
|
Device with an async ``read_configuration()`` method to get the
|
|
110
110
|
configuration from.
|
|
111
|
-
:param
|
|
111
|
+
:param expected_configuration: The expected configuration from the configurable.
|
|
112
112
|
:param full_match: if expected_reading keys set is same as actual keys set.
|
|
113
113
|
true: exact match
|
|
114
114
|
false: expected_reading keys is subset of actual reading keys
|