dls-dodal 1.57.0__tar.gz → 1.58.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 (549) hide show
  1. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/PKG-INFO +1 -1
  2. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dls_dodal.egg-info/PKG-INFO +1 -1
  3. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dls_dodal.egg-info/SOURCES.txt +4 -0
  4. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/_version.py +3 -3
  5. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i03.py +2 -1
  6. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i04.py +15 -0
  7. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i19_2.py +9 -0
  8. dls_dodal-1.58.0/src/dodal/common/beamlines/commissioning_mode.py +33 -0
  9. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/baton.py +4 -0
  10. dls_dodal-1.58.0/src/dodal/devices/i19/backlight.py +17 -0
  11. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/undulator.py +13 -9
  12. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/xbpm_feedback.py +12 -6
  13. dls_dodal-1.58.0/tests/common/beamlines/test_commissioning_mode.py +35 -0
  14. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/conftest.py +15 -0
  15. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i03/test_undulator_dcm.py +29 -12
  16. dls_dodal-1.58.0/tests/devices/i19/test_backlight.py +18 -0
  17. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_baton.py +1 -0
  18. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_undulator.py +49 -0
  19. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_xbpm_feedback.py +26 -1
  20. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.copier-answers.yml +0 -0
  21. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.devcontainer/devcontainer.json +0 -0
  22. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/CODEOWNERS +0 -0
  23. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/CONTRIBUTING.md +0 -0
  24. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  25. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/actions/install_requirements/action.yml +0 -0
  26. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/dependabot.yml +0 -0
  27. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/pages/index.html +0 -0
  28. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/pages/make_switcher.py +0 -0
  29. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/scripts/check_test_durations.py +0 -0
  30. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/_dist.yml +0 -0
  31. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/_docs.yml +0 -0
  32. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/_pypi.yml +0 -0
  33. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/_release.yml +0 -0
  34. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/_test.yml +0 -0
  35. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/_tox.yml +0 -0
  36. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/ci.yml +0 -0
  37. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.github/workflows/periodic.yml +0 -0
  38. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.gitignore +0 -0
  39. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.pre-commit-config.yaml +0 -0
  40. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.vscode/extensions.json +0 -0
  41. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.vscode/launch.json +0 -0
  42. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.vscode/settings.json +0 -0
  43. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/.vscode/tasks.json +0 -0
  44. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/Dockerfile +0 -0
  45. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/LICENSE +0 -0
  46. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/README.md +0 -0
  47. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/catalog-info.yaml +0 -0
  48. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/conftest.py +0 -0
  49. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/_templates/autosummary/class.rst +0 -0
  50. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/_templates/autosummary/module.rst +0 -0
  51. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/_templates/custom-module-template.rst +0 -0
  52. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
  53. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/assets/zocalo.png +0 -0
  54. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/conf.py +0 -0
  55. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  56. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  57. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  58. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  59. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  60. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/0006-devices-shared-between-endstations.md +0 -0
  61. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions/COPYME +0 -0
  62. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/decisions.md +0 -0
  63. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/reviews.md +0 -0
  64. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/umls/apple2_design.png +0 -0
  65. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations/umls/i10_id_design.png +0 -0
  66. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/explanations.md +0 -0
  67. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/genindex.md +0 -0
  68. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/build-docs.md +0 -0
  69. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/contribute.md +0 -0
  70. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/coverage.md +0 -0
  71. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/create-beamline.md +0 -0
  72. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/create-device.md +0 -0
  73. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/dev-install.md +0 -0
  74. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/excalidraw.md +0 -0
  75. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/external-io-devices.md +0 -0
  76. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/lint.md +0 -0
  77. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/lock-requirements.md +0 -0
  78. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/make-release.md +0 -0
  79. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/move-code.md +0 -0
  80. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/pypi.md +0 -0
  81. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/run-tests.md +0 -0
  82. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/static-analysis.md +0 -0
  83. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/update-template.md +0 -0
  84. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/write-tests.md +0 -0
  85. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to/zocalo.md +0 -0
  86. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/how-to.md +0 -0
  87. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/images/dls-logo.svg +0 -0
  88. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/images/excalidraw-example.svg +0 -0
  89. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/index.md +0 -0
  90. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/reference/api.md +0 -0
  91. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/reference/device-standards.md +0 -0
  92. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/reference/standards.md +0 -0
  93. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/reference.md +0 -0
  94. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/tutorials/get_started.md +0 -0
  95. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/tutorials/installation.md +0 -0
  96. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/docs/tutorials.md +0 -0
  97. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/pull_request_template.md +0 -0
  98. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/pyproject.toml +0 -0
  99. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/setup.cfg +0 -0
  100. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/__init__.py +0 -0
  101. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  102. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  103. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dls_dodal.egg-info/requires.txt +0 -0
  104. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  105. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/__init__.py +0 -0
  106. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/__main__.py +0 -0
  107. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  108. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  109. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
  110. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/README.md +0 -0
  111. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/__init__.py +0 -0
  112. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/adsim.py +0 -0
  113. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/aithre.py +0 -0
  114. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/b01_1.py +0 -0
  115. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/b07.py +0 -0
  116. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/b07_1.py +0 -0
  117. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/b16.py +0 -0
  118. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/b18.py +0 -0
  119. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/b21.py +0 -0
  120. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i02_1.py +0 -0
  121. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i05.py +0 -0
  122. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i05_1.py +0 -0
  123. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i09.py +0 -0
  124. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i09_1.py +0 -0
  125. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i09_2.py +0 -0
  126. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i10.py +0 -0
  127. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i11.py +0 -0
  128. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i13_1.py +0 -0
  129. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i17.py +0 -0
  130. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i18.py +0 -0
  131. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i19_1.py +0 -0
  132. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i19_optics.py +0 -0
  133. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i20_1.py +0 -0
  134. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i22.py +0 -0
  135. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i23.py +0 -0
  136. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/i24.py +0 -0
  137. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/k11.py +0 -0
  138. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/p38.py +0 -0
  139. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/p45.py +0 -0
  140. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/p60.py +0 -0
  141. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/p99.py +0 -0
  142. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/beamlines/training_rig.py +0 -0
  143. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/cli.py +0 -0
  144. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/__init__.py +0 -0
  145. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/beamlines/__init__.py +0 -0
  146. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  147. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  148. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  149. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/coordination.py +0 -0
  150. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/crystal_metadata.py +0 -0
  151. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/data_util.py +0 -0
  152. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/device_utils.py +0 -0
  153. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/enums.py +0 -0
  154. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/maths.py +0 -0
  155. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/types.py +0 -0
  156. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/udc_directory_provider.py +0 -0
  157. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/visit.py +0 -0
  158. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/common/watcher_utils.py +0 -0
  159. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/__init__.py +0 -0
  160. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
  161. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  162. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
  163. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/aperture.py +0 -0
  164. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  165. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/apple2_undulator.py +0 -0
  166. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  167. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  168. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  169. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/attenuator/filter.py +0 -0
  170. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  171. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b07/__init__.py +0 -0
  172. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b07/enums.py +0 -0
  173. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b07_1/__init__.py +0 -0
  174. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
  175. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b07_1/enums.py +0 -0
  176. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b16/__init__.py +0 -0
  177. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/b16/detector.py +0 -0
  178. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/backlight.py +0 -0
  179. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  180. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/collimation_table.py +0 -0
  181. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/common_dcm.py +0 -0
  182. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/controllers.py +0 -0
  183. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/cryostream.py +0 -0
  184. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  185. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  186. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  187. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  188. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  189. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  190. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/detector/__init__.py +0 -0
  191. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  192. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  193. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  194. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/detector/detector.py +0 -0
  195. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  196. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/diamond_filter.py +0 -0
  197. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/eiger.py +0 -0
  198. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/eiger_odin.py +0 -0
  199. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
  200. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -0
  201. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -0
  202. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +0 -0
  203. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +0 -0
  204. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
  205. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/detector.py +0 -0
  206. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
  207. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  208. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/specs/detector.py +0 -0
  209. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +0 -0
  210. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
  211. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/specs/region.py +0 -0
  212. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/types.py +0 -0
  213. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/util.py +0 -0
  214. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
  215. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -0
  216. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -0
  217. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
  218. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +0 -0
  219. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/eurotherm.py +0 -0
  220. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  221. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  222. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/flux.py +0 -0
  223. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/focusing_mirror.py +0 -0
  224. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/hutch_shutter.py +0 -0
  225. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i03/__init__.py +0 -0
  226. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i03/dcm.py +0 -0
  227. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  228. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i04/__init__.py +0 -0
  229. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i04/constants.py +0 -0
  230. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i04/murko_results.py +0 -0
  231. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i04/transfocator.py +0 -0
  232. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i05/__init__.py +0 -0
  233. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i05/enums.py +0 -0
  234. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i09/__init__.py +0 -0
  235. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i09/dcm.py +0 -0
  236. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i09/enums.py +0 -0
  237. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i09_1/__init__.py +0 -0
  238. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i09_1/enums.py +0 -0
  239. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/__init__.py +0 -0
  240. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  241. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/i10_apple2.py +0 -0
  242. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  243. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/mirrors.py +0 -0
  244. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  245. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  246. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  247. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i10/slits.py +0 -0
  248. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
  249. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i11/diff_stages.py +0 -0
  250. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i11/mythen.py +0 -0
  251. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i11/nx100robot.py +0 -0
  252. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i11/spinner.py +0 -0
  253. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i13_1/__init__.py +0 -0
  254. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  255. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  256. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  257. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i18/diode.py +0 -0
  258. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i19/__init__.py +0 -0
  259. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i19/beamstop.py +0 -0
  260. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  261. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i19/diffractometer.py +0 -0
  262. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  263. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i19/shutter.py +0 -0
  264. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  265. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i22/dcm.py +0 -0
  266. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i22/fswitch.py +0 -0
  267. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i22/nxsas.py +0 -0
  268. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/__init__.py +0 -0
  269. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/aperture.py +0 -0
  270. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/beam_center.py +0 -0
  271. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/beamstop.py +0 -0
  272. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/dcm.py +0 -0
  273. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  274. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  275. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/pmac.py +0 -0
  276. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/i24/vgonio.py +0 -0
  277. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/ipin.py +0 -0
  278. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/linkam3.py +0 -0
  279. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/motors.py +0 -0
  280. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
  281. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/__init__.py +0 -0
  282. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  283. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  284. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  285. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  286. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  287. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  288. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  289. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  290. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  291. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  292. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  293. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/oav/utils.py +0 -0
  294. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p45.py +0 -0
  295. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p60/__init__.py +0 -0
  296. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p60/enums.py +0 -0
  297. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
  298. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p99/__init__.py +0 -0
  299. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  300. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  301. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/pgm.py +0 -0
  302. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/positioner.py +0 -0
  303. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  304. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/qbpm.py +0 -0
  305. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/robot.py +0 -0
  306. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  307. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/scintillator.py +0 -0
  308. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/slits.py +0 -0
  309. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/smargon.py +0 -0
  310. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/status.py +0 -0
  311. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/synchrotron.py +0 -0
  312. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/tetramm.py +0 -0
  313. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/thawer.py +0 -0
  314. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/turbo_slit.py +0 -0
  315. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/util/__init__.py +0 -0
  316. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  317. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/util/epics_util.py +0 -0
  318. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  319. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  320. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/webcam.py +0 -0
  321. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  322. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  323. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zebra/__init__.py +0 -0
  324. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zebra/zebra.py +0 -0
  325. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  326. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  327. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  328. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  329. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  330. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  331. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/log.py +0 -0
  332. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  333. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plan_stubs/__init__.py +0 -0
  334. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  335. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plan_stubs/data_session.py +0 -0
  336. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  337. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  338. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/__init__.py +0 -0
  339. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/bimorph.py +0 -0
  340. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
  341. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
  342. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  343. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/save_panda.py +0 -0
  344. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/scanspec.py +0 -0
  345. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  346. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/plans/wrapped.py +0 -0
  347. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/testing/__init__.py +0 -0
  348. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
  349. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
  350. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/testing/setup.py +0 -0
  351. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/src/dodal/utils.py +0 -0
  352. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/system_tests/__init__.py +0 -0
  353. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/system_tests/test_adsim.py +0 -0
  354. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/system_tests/test_cli.py +0 -0
  355. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/system_tests/test_oav_system.py +0 -0
  356. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/system_tests/test_oav_to_redis_system.py +0 -0
  357. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/__init__.py +0 -0
  358. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/beamlines/__init__.py +0 -0
  359. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/beamlines/test_b16.py +0 -0
  360. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/beamlines/test_i03.py +0 -0
  361. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/beamlines/test_i24.py +0 -0
  362. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/beamlines/test_mapping.py +0 -0
  363. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/__init__.py +0 -0
  364. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/beamlines/__init__.py +0 -0
  365. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  366. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  367. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  368. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/test_coordination.py +0 -0
  369. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/test_crystal_metadata.py +0 -0
  370. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/test_maths.py +0 -0
  371. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/test_udc_directory_provider.py +0 -0
  372. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/test_visit.py +0 -0
  373. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/common/test_watcher_utils.py +0 -0
  374. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/__init__.py +0 -0
  375. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
  376. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/b07_1/test_ccmc.py +0 -0
  377. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/current_amplifier/test_femto.py +0 -0
  378. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/current_amplifier/test_sr570.py +0 -0
  379. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/detector/test_data/__init__.py +0 -0
  380. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/detector/test_data/test_det_dist_converter.txt +0 -0
  381. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/detector/test_det_dim_constants.py +0 -0
  382. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/detector/test_det_resolution.py +0 -0
  383. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/detector/test_detector.py +0 -0
  384. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/__init__.py +0 -0
  385. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/abstract/__init__.py +0 -0
  386. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/abstract/test_base_detector.py +0 -0
  387. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/abstract/test_base_driver_io.py +0 -0
  388. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/abstract/test_base_region.py +0 -0
  389. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/conftest.py +0 -0
  390. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/helper_util/__init__.py +0 -0
  391. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/helper_util/assert_func.py +0 -0
  392. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/helper_util/sequence.py +0 -0
  393. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/specs/__init__.py +0 -0
  394. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/specs/test_detector.py +0 -0
  395. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/specs/test_driver_io.py +0 -0
  396. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/specs/test_region.py +0 -0
  397. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/test_data/__init__.py +0 -0
  398. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/test_data/specs_sequence.seq +0 -0
  399. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
  400. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/test_detector.py +0 -0
  401. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/test_util.py +0 -0
  402. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/vgscienta/__init__.py +0 -0
  403. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/vgscienta/test_detector.py +0 -0
  404. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/vgscienta/test_driver_io.py +0 -0
  405. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/electron_analyser/vgscienta/test_region.py +0 -0
  406. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i03/__init__.py +0 -0
  407. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i03/test_dcm.py +0 -0
  408. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i04/__init__.py +0 -0
  409. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i04/test_murko_results.py +0 -0
  410. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i04/test_transfocator.py +0 -0
  411. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i09/__init__.py +0 -0
  412. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i09/test_dcm.py +0 -0
  413. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
  414. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
  415. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/__init__.py +0 -0
  416. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  417. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  418. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  419. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  420. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i10/test_i10Apple2.py +0 -0
  421. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i11/test_i11devices.py +0 -0
  422. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i11/test_mythen.py +0 -0
  423. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i13_1/test_merlin.py +0 -0
  424. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  425. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i19/__init__.py +0 -0
  426. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i19/test_beamstop.py +0 -0
  427. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i19/test_diffractometer.py +0 -0
  428. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i19/test_shutter.py +0 -0
  429. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i22/test_dcm.py +0 -0
  430. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i22/test_fswitch.py +0 -0
  431. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i22/test_metadataholder.py +0 -0
  432. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i24/__init__.py +0 -0
  433. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i24/test_dual_backlight.py +0 -0
  434. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i24/test_focus_mirrors.py +0 -0
  435. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i24/test_pmac.py +0 -0
  436. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/i24/test_vgonio.py +0 -0
  437. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/mx_phase1/__init__.py +0 -0
  438. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/mx_phase1/test_beamstop.py +0 -0
  439. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/__init__.py +0 -0
  440. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/conftest.py +0 -0
  441. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/image_recognition/test_pin_tip_detect.py +0 -0
  442. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  443. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_data/__init__.py +0 -0
  444. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_data/oav_snapshot_expected.png +0 -0
  445. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_data/oav_snapshot_test.png +0 -0
  446. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_data/test_OAVCentring.json +0 -0
  447. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_grid_overlay.py +0 -0
  448. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_oav.py +0 -0
  449. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_oav_parameters.py +0 -0
  450. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_oav_to_redis_forwarder.py +0 -0
  451. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_oav_utils.py +0 -0
  452. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_snapshot_image_processing.py +0 -0
  453. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/oav/test_snapshots.py +0 -0
  454. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/p60/test_lab_xray_source.py +0 -0
  455. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/p99/test_p99_stage.py +0 -0
  456. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test.png +0 -0
  457. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_aperture.py +0 -0
  458. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_aperture_scatterguard.py +0 -0
  459. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_apple2_undulator.py +0 -0
  460. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_attenuator.py +0 -0
  461. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_backlight.py +0 -0
  462. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_bart_robot.py +0 -0
  463. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_beam_converter.py +0 -0
  464. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_bimorph_mirror.py +0 -0
  465. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_common_dcm.py +0 -0
  466. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_controllers.py +0 -0
  467. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_daq_configuration/__init__.py +0 -0
  468. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_daq_configuration/domain/__init__.py +0 -0
  469. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_daq_configuration/domain/beamlineParameters +0 -0
  470. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  471. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  472. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_daq_configuration/lookup/__init__.py +0 -0
  473. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_data/__init__.py +0 -0
  474. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  475. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_data/test_lookup_table.txt +0 -0
  476. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_diamond_filter.py +0 -0
  477. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_eiger.py +0 -0
  478. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_focusing_mirror.py +0 -0
  479. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_gridscan.py +0 -0
  480. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_hutch_shutter.py +0 -0
  481. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_motors.py +0 -0
  482. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_odin.py +0 -0
  483. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_positioner.py +0 -0
  484. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_pressure_jump_cell.py +0 -0
  485. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_qbpm.py +0 -0
  486. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_scintillator.py +0 -0
  487. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_slits.py +0 -0
  488. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_smargon.py +0 -0
  489. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_status.py +0 -0
  490. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_synchrotron.py +0 -0
  491. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_tetramm.py +0 -0
  492. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_thawer.py +0 -0
  493. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_turbo_slit.py +0 -0
  494. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_utils.py +0 -0
  495. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_watsonmarlow323_pump.py +0 -0
  496. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_webcam.py +0 -0
  497. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_xspress3.py +0 -0
  498. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_zebra.py +0 -0
  499. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_zebra_constants_mapping.py +0 -0
  500. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_zebra_shutter.py +0 -0
  501. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_zocalo_interaction.py +0 -0
  502. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/test_zocalo_results.py +0 -0
  503. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/__init__.py +0 -0
  504. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_adjuster_plans.py +0 -0
  505. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_beamline_specific_utils.py +0 -0
  506. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_data/__init__.py +0 -0
  507. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  508. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  509. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  510. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_lookup_tables.py +0 -0
  511. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/devices/util/test_save_panda.py +0 -0
  512. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline.py +0 -0
  513. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  514. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline_broken_dependency.py +0 -0
  515. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline_dependencies.py +0 -0
  516. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  517. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  518. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_beamline_some_devices_working.py +0 -0
  519. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_device_factory_beamline.py +0 -0
  520. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_zocalo/README.rst +0 -0
  521. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_zocalo/__init__.py +0 -0
  522. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_zocalo/__main__.py +0 -0
  523. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  524. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/__init__.py +0 -0
  525. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_data/__init__.py +0 -0
  526. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
  527. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
  528. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_data_session.py +0 -0
  529. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  530. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  531. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  532. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/conftest.py +0 -0
  533. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_bimorph.py +0 -0
  534. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_compliance.py +0 -0
  535. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  536. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  537. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_scanspec.py +0 -0
  538. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  539. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/plans/test_wrapped.py +0 -0
  540. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  541. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_cli.py +0 -0
  542. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_data/__init__.py +0 -0
  543. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_data/bad_beamlineParameters +0 -0
  544. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_data/i04_beamlineParameters +0 -0
  545. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  546. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_data/test_display.configuration +0 -0
  547. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
  548. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_log.py +0 -0
  549. {dls_dodal-1.57.0 → dls_dodal-1.58.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.57.0
3
+ Version: 1.58.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
6
6
  License: Apache License
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.57.0
3
+ Version: 1.58.0
4
4
  Summary: Ophyd devices and other utils that could be used across DLS beamlines
5
5
  Author-email: Dominic Oram <dominic.oram@diamond.ac.uk>, Joseph Ware <joseph.ware@diamond.ac.uk>, Oliver Silvester <Oliver.Silvester@diamond.ac.uk>, Noemi Frisina <noemi.frisina@diamond.ac.uk>
6
6
  License: Apache License
@@ -143,6 +143,7 @@ src/dodal/common/watcher_utils.py
143
143
  src/dodal/common/beamlines/__init__.py
144
144
  src/dodal/common/beamlines/beamline_parameters.py
145
145
  src/dodal/common/beamlines/beamline_utils.py
146
+ src/dodal/common/beamlines/commissioning_mode.py
146
147
  src/dodal/common/beamlines/device_helpers.py
147
148
  src/dodal/devices/__init__.py
148
149
  src/dodal/devices/aperture.py
@@ -267,6 +268,7 @@ src/dodal/devices/i13_1/merlin_controller.py
267
268
  src/dodal/devices/i18/KBMirror.py
268
269
  src/dodal/devices/i18/diode.py
269
270
  src/dodal/devices/i19/__init__.py
271
+ src/dodal/devices/i19/backlight.py
270
272
  src/dodal/devices/i19/beamstop.py
271
273
  src/dodal/devices/i19/blueapi_device.py
272
274
  src/dodal/devices/i19/diffractometer.py
@@ -371,6 +373,7 @@ tests/common/test_watcher_utils.py
371
373
  tests/common/beamlines/__init__.py
372
374
  tests/common/beamlines/test_beamline_parameters.py
373
375
  tests/common/beamlines/test_beamline_utils.py
376
+ tests/common/beamlines/test_commissioning_mode.py
374
377
  tests/common/beamlines/test_device_instantiation.py
375
378
  tests/devices/__init__.py
376
379
  tests/devices/test.png
@@ -466,6 +469,7 @@ tests/devices/i11/test_mythen.py
466
469
  tests/devices/i13_1/test_merlin.py
467
470
  tests/devices/i18/test_kb_mirror.py
468
471
  tests/devices/i19/__init__.py
472
+ tests/devices/i19/test_backlight.py
469
473
  tests/devices/i19/test_beamstop.py
470
474
  tests/devices/i19/test_diffractometer.py
471
475
  tests/devices/i19/test_shutter.py
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.57.0'
32
- __version_tuple__ = version_tuple = (1, 57, 0)
31
+ __version__ = version = '1.58.0'
32
+ __version_tuple__ = version_tuple = (1, 58, 0)
33
33
 
34
- __commit_id__ = commit_id = 'gb8eec3d54'
34
+ __commit_id__ = commit_id = 'g52d34a5bc'
@@ -261,6 +261,7 @@ def undulator(daq_configuration_path: str | None = None) -> Undulator:
261
261
  f"{BeamlinePrefix(BL).insertion_prefix}-MO-SERVC-01:",
262
262
  # evaluate here not as parameter default to enable post-import mocking
263
263
  id_gap_lookup_table_path=f"{daq_configuration_path or DAQ_CONFIGURATION_PATH}/lookup/BeamLine_Undulator_toGap.txt",
264
+ baton=baton(),
264
265
  )
265
266
 
266
267
 
@@ -333,7 +334,7 @@ def xbpm_feedback() -> XBPMFeedback:
333
334
  """Get the i03 XBPM feeback device, instantiate it if it hasn't already been.
334
335
  If this is called when already instantiated in i03, it will return the existing object.
335
336
  """
336
- return XBPMFeedback(f"{PREFIX.beamline_prefix}-EA-FDBK-01:")
337
+ return XBPMFeedback(f"{PREFIX.beamline_prefix}-EA-FDBK-01:", baton=baton())
337
338
 
338
339
 
339
340
  @device_factory()
@@ -1,3 +1,5 @@
1
+ from ophyd_async.core import Reference
2
+
1
3
  from dodal.common.beamlines.beamline_parameters import get_beamline_parameters
2
4
  from dodal.common.beamlines.beamline_utils import (
3
5
  device_factory,
@@ -30,6 +32,7 @@ from dodal.devices.oav.oav_to_redis_forwarder import OAVToRedisForwarder
30
32
  from dodal.devices.oav.pin_image_recognition import PinTipDetection
31
33
  from dodal.devices.robot import BartRobot
32
34
  from dodal.devices.s4_slit_gaps import S4SlitGaps
35
+ from dodal.devices.scintillator import Scintillator
33
36
  from dodal.devices.smargon import Smargon
34
37
  from dodal.devices.synchrotron import Synchrotron
35
38
  from dodal.devices.thawer import Thawer
@@ -357,3 +360,15 @@ def pin_tip_detection() -> PinTipDetection:
357
360
  If this is called when already instantiated in i04, it will return the existing object.
358
361
  """
359
362
  return PinTipDetection(f"{PREFIX.beamline_prefix}-DI-OAV-01:")
363
+
364
+
365
+ @device_factory()
366
+ def scintillator() -> Scintillator:
367
+ """Get the i04 scintillator device, instantiate it if it hasn't already been.
368
+ If this is called when already instantiated in i04, it will return the existing object.
369
+ """
370
+ return Scintillator(
371
+ f"{PREFIX.beamline_prefix}-MO-SCIN-01:",
372
+ Reference(aperture_scatterguard()),
373
+ get_beamline_parameters(),
374
+ )
@@ -4,6 +4,7 @@ from dodal.common.beamlines.beamline_utils import (
4
4
  from dodal.common.beamlines.beamline_utils import (
5
5
  set_beamline as set_utils_beamline,
6
6
  )
7
+ from dodal.devices.i19.backlight import BacklightPosition
7
8
  from dodal.devices.i19.beamstop import BeamStop
8
9
  from dodal.devices.i19.blueapi_device import HutchState
9
10
  from dodal.devices.i19.diffractometer import FourCircleDiffractometer
@@ -75,3 +76,11 @@ def synchrotron() -> Synchrotron:
75
76
  If this is called when already instantiated in i19-2, it will return the existing object.
76
77
  """
77
78
  return Synchrotron()
79
+
80
+
81
+ @device_factory()
82
+ def backlight() -> BacklightPosition:
83
+ """Get the i19-2 backlight device, instantiate it if it hasn't already been.
84
+ If this is called when already instantiated in i19-2, it will return the existing object.
85
+ """
86
+ return BacklightPosition(prefix=f"{PREFIX.beamline_prefix}-EA-IOC-12:")
@@ -0,0 +1,33 @@
1
+ """Functions relating to commissioning mode.
2
+
3
+ Commissioning Mode can be enabled for a production beamline when there is no
4
+ beam. The intent is that when it is enabled, bluesky plans may be run without beam
5
+ and plans and devices will as far as is possible behave normally.
6
+ """
7
+
8
+ import bluesky.plan_stubs as bps
9
+ from bluesky.utils import MsgGenerator
10
+ from ophyd_async.core import SignalR
11
+
12
+ _commissioning_signal: SignalR | None = None
13
+
14
+
15
+ def read_commissioning_mode() -> MsgGenerator[bool]:
16
+ """Utility method for reading the commissioning mode state from the context
17
+ of a bluesky plan, where a baton may or may not be present, or
18
+ commissioning mode is provided by some other mechanism."""
19
+ if _commissioning_signal:
20
+ return (yield from bps.rd(_commissioning_signal))
21
+ else:
22
+ return False
23
+
24
+
25
+ def set_commissioning_signal(signal: SignalR[bool] | None):
26
+ """Commissioning mode is enabled by a PV which when set enables commissioning mode.
27
+ This allows beamline staff to ensure that commissioning mode is disabled prior
28
+ to production use, via their own 'good morning' startup scripts.
29
+ Args:
30
+ signal: The signal which will be read in order to determine whether
31
+ commissioning mode is enabled."""
32
+ global _commissioning_signal
33
+ _commissioning_signal = signal
@@ -1,6 +1,7 @@
1
1
  from typing import Annotated as A
2
2
 
3
3
  from ophyd_async.core import (
4
+ SignalR,
4
5
  SignalRW,
5
6
  StandardReadable,
6
7
  )
@@ -15,3 +16,6 @@ class Baton(StandardReadable, EpicsDevice):
15
16
  current_user: A[
16
17
  SignalRW[str], PvSuffix("CURRENT_USER"), Format.HINTED_UNCACHED_SIGNAL
17
18
  ]
19
+ commissioning: A[
20
+ SignalR[bool], PvSuffix("COMMISSIONING"), Format.HINTED_UNCACHED_SIGNAL
21
+ ]
@@ -0,0 +1,17 @@
1
+ from bluesky.protocols import Movable
2
+ from ophyd_async.core import AsyncStatus, StandardReadable
3
+ from ophyd_async.epics.core import epics_signal_rw
4
+
5
+ from dodal.common.enums import InOutUpper
6
+
7
+
8
+ class BacklightPosition(StandardReadable, Movable[InOutUpper]):
9
+ """Device moves backlight to the IN or OUT position since controls side manages switching the light on/off"""
10
+
11
+ def __init__(self, prefix: str, name: str = "") -> None:
12
+ self.position = epics_signal_rw(InOutUpper, f"{prefix}AD1:choiceButton")
13
+ super().__init__(name)
14
+
15
+ @AsyncStatus.wrap
16
+ async def set(self, value: InOutUpper):
17
+ await self.position.set(value, wait=True)
@@ -5,6 +5,7 @@ from bluesky.protocols import Movable
5
5
  from numpy import ndarray
6
6
  from ophyd_async.core import (
7
7
  AsyncStatus,
8
+ Reference,
8
9
  StandardReadable,
9
10
  StandardReadableFormat,
10
11
  soft_signal_r_and_setter,
@@ -15,6 +16,7 @@ from ophyd_async.epics.motor import Motor
15
16
  from dodal.common.enums import EnabledDisabledUpper
16
17
  from dodal.log import LOGGER
17
18
 
19
+ from .baton import Baton
18
20
  from .util.lookup_tables import energy_distance_table
19
21
 
20
22
 
@@ -22,11 +24,6 @@ class AccessError(Exception):
22
24
  pass
23
25
 
24
26
 
25
- # Enable to allow testing when the beamline is down, do not change in production!
26
- TEST_MODE = False
27
- # will be made more generic in https://github.com/DiamondLightSource/dodal/issues/754
28
-
29
-
30
27
  # The acceptable difference, in mm, between the undulator gap and the DCM
31
28
  # energy, when the latter is converted to mm using lookup tables
32
29
  UNDULATOR_DISCREPANCY_THRESHOLD_MM = 2e-3
@@ -54,6 +51,7 @@ class Undulator(StandardReadable, Movable[float]):
54
51
  name: str = "",
55
52
  poles: int | None = None,
56
53
  length: float | None = None,
54
+ baton: Baton | None = None,
57
55
  ) -> None:
58
56
  """Constructor
59
57
 
@@ -64,6 +62,7 @@ class Undulator(StandardReadable, Movable[float]):
64
62
  name (str, optional): Name for device. Defaults to "".
65
63
  """
66
64
 
65
+ self.baton_ref = Reference(baton) if baton else None
67
66
  self.id_gap_lookup_table_path = id_gap_lookup_table_path
68
67
  with self.add_children_as_readables():
69
68
  self.gap_motor = Motor(prefix + "BLGAPMTR")
@@ -105,7 +104,8 @@ class Undulator(StandardReadable, Movable[float]):
105
104
 
106
105
  async def raise_if_not_enabled(self):
107
106
  access_level = await self.gap_access.get_value()
108
- if access_level is EnabledDisabledUpper.DISABLED and not TEST_MODE:
107
+ commissioning_mode = await self._is_commissioning_mode_enabled()
108
+ if access_level is EnabledDisabledUpper.DISABLED and not commissioning_mode:
109
109
  raise AccessError("Undulator gap access is disabled. Contact Control Room")
110
110
 
111
111
  async def _set_undulator_gap(self, energy_kev: float) -> None:
@@ -124,21 +124,25 @@ class Undulator(StandardReadable, Movable[float]):
124
124
  f"Undulator gap mismatch. {difference:.3f}mm is outside tolerance.\
125
125
  Moving gap to nominal value, {target_gap:.3f}mm"
126
126
  )
127
- if not TEST_MODE:
127
+ commissioning_mode = await self._is_commissioning_mode_enabled()
128
+ if not commissioning_mode:
128
129
  # Only move if the gap is sufficiently different to the value from the
129
- # DCM lookup table AND we're not in TEST_MODE
130
+ # DCM lookup table AND we're not in commissioning mode
130
131
  await self.gap_motor.set(
131
132
  target_gap,
132
133
  timeout=STATUS_TIMEOUT_S,
133
134
  )
134
135
  else:
135
- LOGGER.debug("In test mode, not moving ID gap")
136
+ LOGGER.warning("In test mode, not moving ID gap")
136
137
  else:
137
138
  LOGGER.debug(
138
139
  "Gap is already in the correct place for the new energy value "
139
140
  f"{energy_kev}, no need to ask it to move"
140
141
  )
141
142
 
143
+ async def _is_commissioning_mode_enabled(self):
144
+ return self.baton_ref and await self.baton_ref().commissioning.get_value()
145
+
142
146
  async def _get_gap_to_match_energy(self, energy_kev: float) -> float:
143
147
  """
144
148
  get a 2d np.array from lookup table that
@@ -1,8 +1,10 @@
1
1
  from bluesky.protocols import Triggerable
2
- from ophyd_async.core import AsyncStatus, Device, StrictEnum, observe_value
2
+ from ophyd_async.core import AsyncStatus, Device, Reference, StrictEnum, observe_value
3
3
  from ophyd_async.epics.core import epics_signal_r, epics_signal_rw
4
4
 
5
5
  from dodal.common.device_utils import periodic_reminder
6
+ from dodal.devices.baton import Baton
7
+ from dodal.log import LOGGER
6
8
 
7
9
 
8
10
  class Pause(StrictEnum):
@@ -14,15 +16,19 @@ class XBPMFeedback(Device, Triggerable):
14
16
  """The XBPM feedback device is an IOC that moves the DCM, HFM and VFM to automatically
15
17
  hold the beam into place, as measured by the XBPM sensor."""
16
18
 
17
- def __init__(self, prefix: str, name: str = "") -> None:
19
+ def __init__(self, prefix: str, name: str = "", baton: Baton | None = None) -> None:
18
20
  self.pos_ok = epics_signal_r(float, prefix + "XBPM2POSITION_OK")
19
21
  self.pos_stable = epics_signal_r(float, prefix + "XBPM2_STABLE")
20
22
  self.pause_feedback = epics_signal_rw(Pause, prefix + "FB_PAUSE")
23
+ self.baton_ref = Reference(baton) if baton else None
21
24
  super().__init__(name=name)
22
25
 
23
26
  @AsyncStatus.wrap
24
27
  async def trigger(self):
25
- async with periodic_reminder("Waiting for XBPM"):
26
- async for value in observe_value(self.pos_stable):
27
- if value:
28
- return
28
+ if self.baton_ref and await self.baton_ref().commissioning.get_value():
29
+ LOGGER.warning("Commissioning mode enabled, ignoring feedback")
30
+ else:
31
+ async with periodic_reminder("Waiting for XBPM"):
32
+ async for value in observe_value(self.pos_stable):
33
+ if value:
34
+ return
@@ -0,0 +1,35 @@
1
+ import pytest
2
+ from bluesky import RunEngine
3
+ from bluesky.utils import MsgGenerator
4
+ from ophyd_async.testing import set_mock_value
5
+
6
+ from dodal.common.beamlines.commissioning_mode import read_commissioning_mode
7
+ from dodal.devices.baton import Baton
8
+
9
+
10
+ @pytest.mark.parametrize("mode", [True, False])
11
+ def test_read_commissioning_mode_returns_signal_status_when_signal_registered(
12
+ RE: RunEngine, baton_in_commissioning_mode: Baton, mode: bool
13
+ ):
14
+ actual_mode = False
15
+
16
+ def check_commissioning_mode() -> MsgGenerator:
17
+ nonlocal actual_mode
18
+ actual_mode = yield from read_commissioning_mode()
19
+
20
+ set_mock_value(baton_in_commissioning_mode.commissioning, mode)
21
+ RE(check_commissioning_mode())
22
+ assert actual_mode == mode
23
+
24
+
25
+ def test_read_commissioning_mode_returns_false_when_no_signal_registered(
26
+ RE: RunEngine,
27
+ ):
28
+ actual_mode = False
29
+
30
+ def check_commissioning_mode() -> MsgGenerator:
31
+ nonlocal actual_mode
32
+ actual_mode = yield from read_commissioning_mode()
33
+
34
+ RE(check_commissioning_mode())
35
+ assert not actual_mode
@@ -1,13 +1,18 @@
1
1
  import importlib
2
2
  import os
3
+ from collections.abc import AsyncGenerator
3
4
  from pathlib import Path
4
5
  from types import ModuleType
5
6
  from unittest.mock import patch
6
7
 
7
8
  import pytest
9
+ from ophyd_async.core import init_devices
10
+ from ophyd_async.testing import set_mock_value
8
11
 
9
12
  from conftest import mock_attributes_table
10
13
  from dodal.common.beamlines import beamline_parameters, beamline_utils
14
+ from dodal.common.beamlines.commissioning_mode import set_commissioning_signal
15
+ from dodal.devices.baton import Baton
11
16
  from dodal.devices.detector import DetectorParams
12
17
  from dodal.devices.detector.det_dim_constants import EIGER2_X_16M_SIZE
13
18
  from dodal.utils import (
@@ -61,3 +66,13 @@ def eiger_params(tmp_path: Path) -> DetectorParams:
61
66
  det_dist_to_beam_converter_path=TEST_LUT_TXT,
62
67
  detector_size_constants=EIGER2_X_16M_SIZE.det_type_string, # type: ignore
63
68
  )
69
+
70
+
71
+ @pytest.fixture
72
+ async def baton_in_commissioning_mode() -> AsyncGenerator[Baton]:
73
+ async with init_devices(mock=True):
74
+ baton = Baton("BATON-01")
75
+ set_commissioning_signal(baton.commissioning)
76
+ set_mock_value(baton.commissioning, True)
77
+ yield baton
78
+ set_commissioning_signal(None)
@@ -7,6 +7,7 @@ from ophyd_async.core import AsyncStatus, init_devices
7
7
  from ophyd_async.testing import get_mock_put, set_mock_value
8
8
 
9
9
  from dodal.common.enums import EnabledDisabledUpper
10
+ from dodal.devices.baton import Baton
10
11
  from dodal.devices.i03.dcm import DCM
11
12
  from dodal.devices.i03.undulator_dcm import UndulatorDCM
12
13
  from dodal.devices.undulator import AccessError, Undulator
@@ -36,12 +37,14 @@ def flush_event_loop_on_finish():
36
37
  @pytest.fixture
37
38
  async def fake_undulator_dcm() -> UndulatorDCM:
38
39
  async with init_devices(mock=True):
40
+ baton = Baton("BATON-01:")
39
41
  undulator = Undulator(
40
42
  "UND-01",
41
43
  name="undulator",
42
44
  poles=80,
43
45
  id_gap_lookup_table_path=TEST_BEAMLINE_UNDULATOR_TO_GAP_LUT,
44
46
  length=2.0,
47
+ baton=baton,
45
48
  )
46
49
  dcm = DCM("DCM-01", name="dcm")
47
50
  undulator_dcm = UndulatorDCM(
@@ -55,6 +58,12 @@ async def fake_undulator_dcm() -> UndulatorDCM:
55
58
  return undulator_dcm
56
59
 
57
60
 
61
+ @pytest.fixture
62
+ def undulator_in_commissioning_mode(fake_undulator_dcm: UndulatorDCM):
63
+ set_mock_value(fake_undulator_dcm.undulator_ref().baton_ref().commissioning, True) # type: ignore
64
+ yield fake_undulator_dcm
65
+
66
+
58
67
  def test_lookup_table_paths_passed(fake_undulator_dcm: UndulatorDCM):
59
68
  assert (
60
69
  fake_undulator_dcm.undulator_ref().id_gap_lookup_table_path
@@ -100,33 +109,41 @@ async def test_if_gap_is_wrong_then_logger_info_is_called_and_gap_is_set_correct
100
109
 
101
110
  @patch("dodal.devices.util.lookup_tables.loadtxt")
102
111
  @patch("dodal.devices.undulator.LOGGER")
103
- @patch("dodal.devices.undulator.TEST_MODE", True)
104
- async def test_when_gap_access_is_not_checked_if_test_mode_enabled(
105
- mock_logger: MagicMock, mock_load: MagicMock, fake_undulator_dcm: UndulatorDCM
112
+ async def test_when_gap_access_is_not_checked_if_commissioning_mode_enabled(
113
+ mock_logger: MagicMock,
114
+ mock_load: MagicMock,
115
+ undulator_in_commissioning_mode: UndulatorDCM,
106
116
  ):
107
117
  set_mock_value(
108
- fake_undulator_dcm.undulator_ref().gap_access, EnabledDisabledUpper.DISABLED
118
+ undulator_in_commissioning_mode.undulator_ref().gap_access,
119
+ EnabledDisabledUpper.DISABLED,
120
+ )
121
+ set_mock_value(undulator_in_commissioning_mode.undulator_ref().current_gap, 5.3)
122
+ set_mock_value(
123
+ undulator_in_commissioning_mode.dcm_ref().energy_in_kev.user_readback, 5.7
109
124
  )
110
- set_mock_value(fake_undulator_dcm.undulator_ref().current_gap, 5.3)
111
- set_mock_value(fake_undulator_dcm.dcm_ref().energy_in_kev.user_readback, 5.7)
112
125
 
113
- set_mock_value(fake_undulator_dcm.undulator_ref().gap_motor.user_setpoint, 0.0)
114
- set_mock_value(fake_undulator_dcm.undulator_ref().gap_motor.user_readback, 0.0)
126
+ set_mock_value(
127
+ undulator_in_commissioning_mode.undulator_ref().gap_motor.user_setpoint, 0.0
128
+ )
129
+ set_mock_value(
130
+ undulator_in_commissioning_mode.undulator_ref().gap_motor.user_readback, 0.0
131
+ )
115
132
 
116
133
  mock_load.return_value = np.array([[5700, 5.4606], [7000, 6.045], [9700, 6.404]])
117
134
 
118
- await fake_undulator_dcm.set(6.9)
135
+ await undulator_in_commissioning_mode.set(6.9)
119
136
 
120
137
  assert (
121
- await fake_undulator_dcm.dcm_ref().energy_in_kev.user_setpoint.get_value()
138
+ await undulator_in_commissioning_mode.dcm_ref().energy_in_kev.user_setpoint.get_value()
122
139
  ) == 6.9
123
140
  # Verify undulator has not been asked to move
124
141
  assert (
125
- await fake_undulator_dcm.undulator_ref().gap_motor.user_setpoint.get_value()
142
+ await undulator_in_commissioning_mode.undulator_ref().gap_motor.user_setpoint.get_value()
126
143
  ) == 0.0
127
144
 
128
145
  mock_logger.info.assert_called()
129
- mock_logger.debug.assert_called_once()
146
+ mock_logger.warning.assert_called_once()
130
147
 
131
148
 
132
149
  @patch("dodal.devices.util.lookup_tables.loadtxt")
@@ -0,0 +1,18 @@
1
+ import pytest
2
+ from ophyd_async.core import init_devices
3
+
4
+ from dodal.common.enums import InOutUpper
5
+ from dodal.devices.i19.backlight import BacklightPosition
6
+
7
+
8
+ @pytest.fixture
9
+ async def fake_backlight():
10
+ async with init_devices(mock=True):
11
+ backlight = BacklightPosition("test", "backlight")
12
+ return backlight
13
+
14
+
15
+ @pytest.mark.parametrize("position", [InOutUpper.IN, InOutUpper.OUT])
16
+ async def test_backlight_set_position(fake_backlight, position):
17
+ await fake_backlight.set(position)
18
+ assert await fake_backlight.position.get_value() == position
@@ -12,5 +12,6 @@ async def test_mock_baton_can_be_initialised_and_read():
12
12
  {
13
13
  "baton-current_user": partial_reading(""),
14
14
  "baton-requested_user": partial_reading(""),
15
+ "baton-commissioning": partial_reading(False),
15
16
  },
16
17
  )
@@ -1,19 +1,25 @@
1
+ from collections.abc import Generator
2
+ from unittest.mock import AsyncMock, patch
3
+
1
4
  import numpy as np
2
5
  import pytest
3
6
  from ophyd_async.core import init_devices
4
7
  from ophyd_async.testing import (
5
8
  assert_configuration,
6
9
  assert_reading,
10
+ get_mock_put,
7
11
  partial_reading,
8
12
  set_mock_value,
9
13
  )
10
14
 
11
15
  from dodal.common.enums import EnabledDisabledUpper
16
+ from dodal.devices.baton import Baton
12
17
  from dodal.devices.undulator import (
13
18
  AccessError,
14
19
  Undulator,
15
20
  _get_gap_for_energy,
16
21
  )
22
+ from dodal.testing import patch_all_motors
17
23
  from tests.devices.test_data import (
18
24
  TEST_BEAMLINE_UNDULATOR_TO_GAP_LUT,
19
25
  )
@@ -22,16 +28,26 @@ from tests.devices.test_data import (
22
28
  @pytest.fixture
23
29
  async def undulator() -> Undulator:
24
30
  async with init_devices(mock=True):
31
+ baton = Baton("BATON-01")
25
32
  undulator = Undulator(
26
33
  "UND-01",
27
34
  name="undulator",
28
35
  poles=80,
29
36
  length=2.0,
30
37
  id_gap_lookup_table_path=TEST_BEAMLINE_UNDULATOR_TO_GAP_LUT,
38
+ baton=baton,
31
39
  )
32
40
  return undulator
33
41
 
34
42
 
43
+ @pytest.fixture
44
+ def undulator_in_commissioning_mode(
45
+ undulator: Undulator,
46
+ ) -> Generator[Undulator, None, None]:
47
+ set_mock_value(undulator.baton_ref().commissioning, True) # type: ignore
48
+ yield undulator
49
+
50
+
35
51
  async def test_reading_includes_read_fields(undulator: Undulator):
36
52
  await assert_reading(
37
53
  undulator,
@@ -98,3 +114,36 @@ async def test_when_gap_access_is_disabled_set_then_error_is_raised(
98
114
  set_mock_value(undulator.gap_access, EnabledDisabledUpper.DISABLED)
99
115
  with pytest.raises(AccessError):
100
116
  await undulator.set(5)
117
+
118
+
119
+ @patch(
120
+ "dodal.devices.undulator.energy_distance_table",
121
+ AsyncMock(return_value=np.array([[0, 10], [10, 20]])),
122
+ )
123
+ async def test_gap_access_check_disabled_and_move_inhibited_when_commissioning_mode_enabled(
124
+ undulator_in_commissioning_mode: Undulator,
125
+ ):
126
+ set_mock_value(
127
+ undulator_in_commissioning_mode.gap_access, EnabledDisabledUpper.DISABLED
128
+ )
129
+ await undulator_in_commissioning_mode.set(5)
130
+
131
+ get_mock_put(
132
+ undulator_in_commissioning_mode.gap_motor.user_setpoint
133
+ ).assert_not_called()
134
+
135
+
136
+ @patch(
137
+ "dodal.devices.undulator.energy_distance_table",
138
+ AsyncMock(return_value=np.array([[0, 10], [10000, 20]])),
139
+ )
140
+ async def test_gap_access_check_move_not_inhibited_when_commissioning_mode_disabled(
141
+ undulator: Undulator,
142
+ ):
143
+ with patch_all_motors(undulator):
144
+ set_mock_value(undulator.gap_access, EnabledDisabledUpper.ENABLED)
145
+ await undulator.set(5)
146
+
147
+ get_mock_put(undulator.gap_motor.user_setpoint).assert_called_once_with(
148
+ 15.0, wait=True
149
+ )
@@ -1,4 +1,5 @@
1
1
  import asyncio
2
+ from collections.abc import Generator
2
3
  from unittest.mock import AsyncMock, patch
3
4
 
4
5
  import pytest
@@ -7,16 +8,26 @@ from bluesky.run_engine import RunEngine
7
8
  from ophyd_async.core import init_devices
8
9
  from ophyd_async.testing import set_mock_value
9
10
 
11
+ from dodal.devices.baton import Baton
10
12
  from dodal.devices.xbpm_feedback import XBPMFeedback
11
13
 
12
14
 
13
15
  @pytest.fixture
14
16
  async def fake_xbpm_feedback() -> XBPMFeedback:
15
17
  async with init_devices(mock=True):
16
- xbpm_feedback = XBPMFeedback("")
18
+ baton = Baton("BATON-01:")
19
+ xbpm_feedback = XBPMFeedback("", baton=baton)
17
20
  return xbpm_feedback
18
21
 
19
22
 
23
+ @pytest.fixture
24
+ def xbpm_feedback_in_commissioning_mode(
25
+ fake_xbpm_feedback,
26
+ ) -> Generator[XBPMFeedback, None, None]:
27
+ set_mock_value(fake_xbpm_feedback.baton_ref().commissioning, True) # type: ignore
28
+ yield fake_xbpm_feedback
29
+
30
+
20
31
  def test_given_pos_stable_when_xbpm_feedback_kickoff_then_return_immediately(
21
32
  RE: RunEngine,
22
33
  fake_xbpm_feedback: XBPMFeedback,
@@ -84,3 +95,17 @@ def test_logging_while_waiting_for_XBPM(
84
95
  record.getMessage() == "Waiting for XBPM" for record in caplog.records
85
96
  )
86
97
  assert log_messages == expected_log_messages
98
+
99
+
100
+ @patch("dodal.devices.xbpm_feedback.observe_value")
101
+ @patch("dodal.devices.xbpm_feedback.periodic_reminder")
102
+ def test_xbpm_feedback_does_not_wait_if_commissioning_mode_enabled(
103
+ mock_periodic_reminder: AsyncMock,
104
+ mock_observe_value: AsyncMock,
105
+ xbpm_feedback_in_commissioning_mode: XBPMFeedback,
106
+ RE: RunEngine,
107
+ ):
108
+ set_mock_value(xbpm_feedback_in_commissioning_mode.pos_stable, False)
109
+ RE(bps.trigger(xbpm_feedback_in_commissioning_mode, wait=True))
110
+ mock_periodic_reminder.assert_not_called()
111
+ mock_observe_value.assert_not_called()