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.
Files changed (252) hide show
  1. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.copier-answers.yml +1 -2
  2. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.devcontainer/devcontainer.json +1 -1
  3. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.git-blame-ignore-revs +1 -1
  4. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/CONTRIBUTING.md +1 -1
  5. ophyd_async-0.7.0/.github/ISSUE_TEMPLATE/bug_report.md +21 -0
  6. ophyd_async-0.7.0/.github/ISSUE_TEMPLATE/issue.md +13 -0
  7. ophyd_async-0.7.0/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +8 -0
  8. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/pages/index.html +1 -1
  9. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/pages/make_switcher.py +13 -12
  10. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_docs.yml +1 -1
  11. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/ci.yml +2 -2
  12. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.gitignore +1 -0
  13. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.pre-commit-config.yaml +1 -0
  14. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/PKG-INFO +6 -1
  15. ophyd_async-0.7.0/docs/_api.rst +16 -0
  16. ophyd_async-0.7.0/docs/_templates/custom-module-template.rst +42 -0
  17. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/conf.py +22 -12
  18. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/examples/foo_detector.py +3 -4
  19. ophyd_async-0.7.0/docs/examples/tango_demo.py +54 -0
  20. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0003-ophyd-async-migration.rst +1 -1
  21. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0005-respect-black-line-length.rst +1 -1
  22. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0007-subpackage-structure.md +1 -1
  23. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/design-goals.rst +1 -1
  24. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/event-loop-choice.rst +0 -2
  25. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/contribute.md +1 -1
  26. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/make-a-standard-detector.rst +5 -5
  27. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/write-tests-for-devices.rst +2 -2
  28. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/reference.md +1 -1
  29. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/pyproject.toml +22 -12
  30. ophyd_async-0.7.0/src/ophyd_async/__init__.py +12 -0
  31. ophyd_async-0.7.0/src/ophyd_async/__main__.py +24 -0
  32. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/_version.py +2 -2
  33. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/__init__.py +15 -7
  34. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_detector.py +133 -87
  35. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_device.py +19 -16
  36. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_device_save_loader.py +30 -19
  37. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_flyer.py +6 -19
  38. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_hdf_dataset.py +8 -9
  39. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_log.py +3 -1
  40. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_mock_signal_backend.py +11 -9
  41. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_mock_signal_utils.py +8 -5
  42. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_protocol.py +7 -7
  43. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_providers.py +11 -11
  44. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_readable.py +30 -22
  45. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_signal.py +52 -51
  46. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_signal_backend.py +20 -7
  47. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_soft_signal_backend.py +62 -32
  48. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_status.py +7 -9
  49. ophyd_async-0.7.0/src/ophyd_async/core/_table.py +146 -0
  50. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/core/_utils.py +24 -28
  51. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/_aravis_controller.py +20 -19
  52. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/_aravis_io.py +2 -1
  53. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_core_io.py +2 -0
  54. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_core_logic.py +4 -5
  55. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_hdf_writer.py +19 -8
  56. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_single_trigger.py +1 -1
  57. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/_utils.py +5 -6
  58. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/_kinetix_controller.py +20 -15
  59. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/_pilatus_controller.py +22 -18
  60. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adsimdetector/_sim.py +7 -6
  61. ophyd_async-0.7.0/src/ophyd_async/epics/adsimdetector/_sim_controller.py +51 -0
  62. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/_vimba_controller.py +22 -17
  63. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/_mover.py +4 -5
  64. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/sensor.db +0 -1
  65. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_eiger.py +1 -1
  66. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_eiger_controller.py +18 -18
  67. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_odin_io.py +6 -5
  68. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/motor.py +8 -10
  69. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/pvi/_pvi.py +30 -33
  70. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_aioca.py +55 -25
  71. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_common.py +3 -10
  72. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_epics_transport.py +11 -8
  73. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_p4p.py +79 -30
  74. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/_signal.py +6 -8
  75. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/__init__.py +0 -6
  76. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_block.py +7 -0
  77. ophyd_async-0.7.0/src/ophyd_async/fastcs/panda/_control.py +37 -0
  78. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_hdf_panda.py +11 -4
  79. ophyd_async-0.7.0/src/ophyd_async/fastcs/panda/_table.py +109 -0
  80. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_trigger.py +4 -5
  81. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_utils.py +3 -2
  82. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/panda/_writer.py +30 -15
  83. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/_fly.py +15 -17
  84. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/_nd_attributes.py +12 -6
  85. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector.py +3 -3
  86. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_controller.py +27 -21
  87. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_detector_writer.py +9 -6
  88. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/_pattern_generator.py +21 -23
  89. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_sim_motor.py +2 -1
  90. ophyd_async-0.7.0/src/ophyd_async/tango/__init__.py +45 -0
  91. ophyd_async-0.7.0/src/ophyd_async/tango/base_devices/__init__.py +4 -0
  92. ophyd_async-0.7.0/src/ophyd_async/tango/base_devices/_base_device.py +225 -0
  93. ophyd_async-0.7.0/src/ophyd_async/tango/base_devices/_tango_readable.py +33 -0
  94. ophyd_async-0.7.0/src/ophyd_async/tango/demo/__init__.py +12 -0
  95. ophyd_async-0.7.0/src/ophyd_async/tango/demo/_counter.py +37 -0
  96. ophyd_async-0.7.0/src/ophyd_async/tango/demo/_detector.py +42 -0
  97. ophyd_async-0.7.0/src/ophyd_async/tango/demo/_mover.py +77 -0
  98. ophyd_async-0.7.0/src/ophyd_async/tango/demo/_tango/__init__.py +3 -0
  99. ophyd_async-0.7.0/src/ophyd_async/tango/demo/_tango/_servers.py +108 -0
  100. ophyd_async-0.7.0/src/ophyd_async/tango/signal/__init__.py +39 -0
  101. ophyd_async-0.7.0/src/ophyd_async/tango/signal/_signal.py +223 -0
  102. ophyd_async-0.7.0/src/ophyd_async/tango/signal/_tango_transport.py +764 -0
  103. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/PKG-INFO +6 -1
  104. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/SOURCES.txt +22 -5
  105. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/requires.txt +6 -0
  106. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/system_tests/epics/eiger/README.md +0 -2
  107. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/system_tests/epics/eiger/test_eiger_system.py +1 -1
  108. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/conftest.py +90 -8
  109. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_device_collector.py +11 -1
  110. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_device_save_loader.py +23 -6
  111. ophyd_async-0.7.0/tests/core/test_flyer.py +432 -0
  112. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_mock_signal_backend.py +20 -5
  113. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_protocol.py +4 -6
  114. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_providers.py +1 -1
  115. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_readable.py +5 -5
  116. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_signal.py +30 -3
  117. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_soft_signal_backend.py +5 -4
  118. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_status.py +11 -2
  119. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_subset_enum.py +8 -8
  120. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_watchable_async_status.py +2 -2
  121. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adaravis/test_aravis.py +22 -29
  122. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adcore/test_drivers.py +4 -4
  123. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adcore/test_scans.py +18 -15
  124. ophyd_async-0.7.0/tests/epics/adcore/test_single_trigger.py +56 -0
  125. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adcore/test_writers.py +8 -6
  126. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adkinetix/test_kinetix.py +20 -29
  127. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/adpilatus/test_pilatus.py +49 -35
  128. ophyd_async-0.7.0/tests/epics/adsimdetector/test_sim.py +375 -0
  129. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/advimba/test_vimba.py +26 -31
  130. ophyd_async-0.7.0/tests/epics/conftest.py +56 -0
  131. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/demo/test_demo.py +2 -3
  132. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/eiger/test_eiger_controller.py +13 -4
  133. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/eiger/test_eiger_detector.py +1 -1
  134. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/pvi/test_pvi.py +10 -12
  135. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/signal/test_signals.py +44 -28
  136. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/test_motor.py +3 -4
  137. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_hdf_panda.py +26 -29
  138. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_panda_connect.py +3 -3
  139. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_panda_control.py +13 -3
  140. ophyd_async-0.7.0/tests/fastcs/panda/test_panda_utils.py +143 -0
  141. ophyd_async-0.7.0/tests/fastcs/panda/test_table.py +385 -0
  142. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_trigger.py +66 -8
  143. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/test_writer.py +18 -5
  144. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/plan_stubs/test_fly.py +24 -21
  145. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/conftest.py +1 -5
  146. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_sim_detector.py +8 -12
  147. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_sim_writer.py +2 -2
  148. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_streaming_plan.py +13 -3
  149. ophyd_async-0.7.0/tests/tango/test_base_device.py +400 -0
  150. ophyd_async-0.7.0/tests/tango/test_tango_signals.py +775 -0
  151. ophyd_async-0.7.0/tests/tango/test_tango_transport.py +854 -0
  152. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/test_data/test_yaml_save.yml +4 -0
  153. ophyd_async-0.5.2/docs/_templates/README +0 -1
  154. ophyd_async-0.5.2/docs/_templates/custom-class-template.rst +0 -40
  155. ophyd_async-0.5.2/docs/_templates/custom-module-template.rst +0 -72
  156. ophyd_async-0.5.2/docs/reference/api.rst +0 -29
  157. ophyd_async-0.5.2/src/ophyd_async/__init__.py +0 -3
  158. ophyd_async-0.5.2/src/ophyd_async/__main__.py +0 -16
  159. ophyd_async-0.5.2/src/ophyd_async/epics/adsimdetector/_sim_controller.py +0 -46
  160. ophyd_async-0.5.2/src/ophyd_async/fastcs/panda/_control.py +0 -38
  161. ophyd_async-0.5.2/src/ophyd_async/fastcs/panda/_table.py +0 -170
  162. ophyd_async-0.5.2/tests/core/test_flyer.py +0 -292
  163. ophyd_async-0.5.2/tests/epics/adcore/test_single_trigger.py +0 -50
  164. ophyd_async-0.5.2/tests/epics/adpilatus/test_pilatus_controller.py +0 -44
  165. ophyd_async-0.5.2/tests/epics/adsimdetector/test_adsim_controller.py +0 -30
  166. ophyd_async-0.5.2/tests/epics/adsimdetector/test_sim.py +0 -368
  167. ophyd_async-0.5.2/tests/fastcs/panda/test_panda_utils.py +0 -88
  168. ophyd_async-0.5.2/tests/fastcs/panda/test_table.py +0 -31
  169. ophyd_async-0.5.2/tests/sim/demo/__init__.py +0 -0
  170. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.codecov.yml +0 -0
  171. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/actions/install_requirements/action.yml +0 -0
  172. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/dependabot.yml +0 -0
  173. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_check.yml +0 -0
  174. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_dist.yml +0 -0
  175. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_pypi.yml +0 -0
  176. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_release.yml +0 -0
  177. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_test.yml +0 -0
  178. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/_tox.yml +0 -0
  179. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.github/workflows/periodic.yml +0 -0
  180. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/.mailmap +0 -0
  181. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/Dockerfile +0 -0
  182. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/LICENSE +0 -0
  183. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/README.md +0 -0
  184. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/examples/epics_demo.py +0 -0
  185. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  186. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  187. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0004-repository-structure.rst +0 -0
  188. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/0006-procedural-device-definitions.rst +0 -0
  189. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions/COPYME +0 -0
  190. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/decisions.md +0 -0
  191. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations/flyscanning.rst +0 -0
  192. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/explanations.md +0 -0
  193. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/genindex.rst +0 -0
  194. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/choose-interfaces-for-devices.md +0 -0
  195. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/compound-devices.rst +0 -0
  196. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to/make-a-simple-device.rst +0 -0
  197. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/how-to.md +0 -0
  198. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/images/bluesky_ophyd_epics_devices_logo.svg +0 -0
  199. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/images/bluesky_ophyd_logo.svg +0 -0
  200. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/images/ophyd_favicon.svg +0 -0
  201. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/index.md +0 -0
  202. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/tutorials/installation.md +0 -0
  203. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/tutorials/using-existing-devices.rst +0 -0
  204. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/docs/tutorials.md +0 -0
  205. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/setup.cfg +0 -0
  206. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/__init__.py +0 -0
  207. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/__init__.py +0 -0
  208. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adaravis/_aravis.py +0 -0
  209. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adcore/__init__.py +0 -0
  210. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/__init__.py +0 -0
  211. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/_kinetix.py +0 -0
  212. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adkinetix/_kinetix_io.py +0 -0
  213. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/__init__.py +0 -0
  214. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/_pilatus.py +0 -0
  215. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adpilatus/_pilatus_io.py +0 -0
  216. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/adsimdetector/__init__.py +0 -0
  217. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/__init__.py +0 -0
  218. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/_vimba.py +0 -0
  219. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/advimba/_vimba_io.py +0 -0
  220. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/__init__.py +0 -0
  221. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/_sensor.py +0 -0
  222. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/demo/mover.db +0 -0
  223. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/__init__.py +0 -0
  224. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/eiger/_eiger_io.py +0 -0
  225. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/pvi/__init__.py +0 -0
  226. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/epics/signal/__init__.py +0 -0
  227. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/__init__.py +0 -0
  228. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/fastcs/odin/__init__.py +0 -0
  229. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/__init__.py +0 -0
  230. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/plan_stubs/_ensure_connected.py +0 -0
  231. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/__init__.py +0 -0
  232. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/__init__.py +0 -0
  233. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/demo/_pattern_detector/__init__.py +0 -0
  234. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async/sim/testing/__init__.py +0 -0
  235. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/dependency_links.txt +0 -0
  236. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/entry_points.txt +0 -0
  237. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/src/ophyd_async.egg-info/top_level.txt +0 -0
  238. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/system_tests/epics/eiger/start_iocs_and_run_tests.sh +0 -0
  239. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_device.py +0 -0
  240. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_log.py +0 -0
  241. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/core/test_utils.py +0 -0
  242. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/eiger/test_odin_io.py +0 -0
  243. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/signal/test_common.py +0 -0
  244. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/signal/test_records.db +0 -0
  245. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/epics/test_areadetector_subclass_naming.py +0 -0
  246. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/fastcs/panda/db/panda.db +0 -0
  247. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/plan_stubs/test_ensure_connected.py +0 -0
  248. {ophyd_async-0.5.2/src/ophyd_async/tango → ophyd_async-0.7.0/tests/sim}/__init__.py +0 -0
  249. {ophyd_async-0.5.2/tests/sim → ophyd_async-0.7.0/tests/sim/demo}/__init__.py +0 -0
  250. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/demo/test_sim_motor.py +0 -0
  251. {ophyd_async-0.5.2 → ophyd_async-0.7.0}/tests/sim/test_pattern_generator.py +0 -0
  252. {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.1.0
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
+ }
@@ -7,4 +7,4 @@
7
7
  # Use isort to sort imports
8
8
  881a35b43584103ca572b6f4e472dd8b6fd6ea87
9
9
  # Replace flake8 and mypy with ruff and pyrite
10
- e2f8317e7584e4de788c2b39e5b5edaa98c1bc9e
10
+ e2f8317e7584e4de788c2b39e5b5edaa98c1bc9e
@@ -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.1.0/how-to.html).
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
@@ -0,0 +1,8 @@
1
+ Fixes #ISSUE
2
+
3
+ ### Instructions to reviewer on how to test:
4
+ 1. Do thing x
5
+ 2. Confirm thing y happens
6
+
7
+ ### Checks for reviewer
8
+ - [ ] Would the PR title make sense to a user on a set of release notes
@@ -8,4 +8,4 @@
8
8
  <link rel="canonical" href="main/index.html">
9
9
  </head>
10
10
 
11
- </html>
11
+ </html>
@@ -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) -> List[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) -> List[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() -> List[str]:
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: Optional[str]) -> List[str]:
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: List[str] = []
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"{pages_url}/{version}/"} for version in versions
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
  )
@@ -51,4 +51,4 @@ jobs:
51
51
  with:
52
52
  github_token: ${{ secrets.GITHUB_TOKEN }}
53
53
  publish_dir: .github/pages
54
- keep_files: true
54
+ keep_files: true
@@ -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]
@@ -55,6 +55,7 @@ cov.xml
55
55
 
56
56
  # Sphinx documentation
57
57
  docs/_build/
58
+ docs/_api
58
59
 
59
60
  # PyBuilder
60
61
  target/
@@ -5,6 +5,7 @@ repos:
5
5
  - id: check-added-large-files
6
6
  - id: check-yaml
7
7
  - id: check-merge-conflict
8
+ - id: end-of-file-fixer
8
9
 
9
10
  - repo: local
10
11
  hooks:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ophyd-async
3
- Version: 0.5.2
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
- # 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
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
- # pydantic models
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
- DetectorControl,
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(DetectorControl):
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: Optional[float] = None,
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())
@@ -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.
@@ -26,4 +26,4 @@ Consequences
26
26
  ------------
27
27
 
28
28
  Linting tools for this repository are configured to accept black's line length of 88 characters.
29
- Any additional linting tools should respect this.
29
+ Any additional linting tools should respect this.
@@ -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`, `DetectorControl`, `TriggerInfo`, etc.
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
@@ -48,5 +48,3 @@ they can either:
48
48
 
49
49
  * Run the :python:`DeviceCollector` first and pass the event-loop into the run-engine.
50
50
  * Initialize the run-engine first and run the :python:`DeviceCollector` using the bluesky event-loop.
51
-
52
-
@@ -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
- - `DetectorControl` with logic for arming and disarming the detector. This will be unique to the StandardDetector implementation.
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.DetectorControl.arm` and :py:meth:`ophyd_async.core.DetectorControl.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`.
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.DetectorControl.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.**
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 `DetectorControl` and `DetectorWriter` directly.
51
- Here we construct a `DetectorControl` that co-ordinates signals on a PandA PositionCapture block - a child device "pcap" of the `StandardDetector` implementation, analogous to the :py:class:`FooDriver`.
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<../generated/ophyd_async.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
@@ -6,7 +6,7 @@ Technical reference material including APIs and release notes.
6
6
  :maxdepth: 1
7
7
  :glob:
8
8
 
9
- reference/*
9
+ API <_api/ophyd_async>
10
10
  genindex
11
11
  Release Notes <https://github.com/bluesky/ophyd-async/releases>
12
12
  ```