dls-dodal 1.63.0__tar.gz → 1.64.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 (634) hide show
  1. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/PKG-INFO +3 -3
  2. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/conftest.py +4 -34
  3. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/make-release.md +1 -1
  4. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/write-tests.md +5 -5
  5. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/pyproject.toml +5 -2
  6. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dls_dodal.egg-info/PKG-INFO +3 -3
  7. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dls_dodal.egg-info/SOURCES.txt +15 -0
  8. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dls_dodal.egg-info/requires.txt +2 -2
  9. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/_version.py +3 -3
  10. dls_dodal-1.64.0/src/dodal/beamlines/i07.py +21 -0
  11. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i09.py +1 -1
  12. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i09_1.py +1 -1
  13. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i09_2.py +30 -0
  14. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i10_optics.py +50 -24
  15. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i17.py +18 -8
  16. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i21.py +31 -1
  17. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/cli.py +3 -3
  18. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/apple2_undulator.py +19 -17
  19. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b07_1/ccmc.py +1 -1
  20. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/common_dcm.py +3 -3
  21. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i03/undulator_dcm.py +1 -1
  22. dls_dodal-1.64.0/src/dodal/devices/i07/dcm.py +33 -0
  23. dls_dodal-1.64.0/src/dodal/devices/i09_1_shared/__init__.py +3 -0
  24. dls_dodal-1.64.0/src/dodal/devices/i09_1_shared/hard_undulator_functions.py +111 -0
  25. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/i10_apple2.py +4 -4
  26. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/dcm.py +1 -1
  27. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i22/dcm.py +1 -1
  28. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/util/lookup_tables.py +8 -2
  29. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/verify_undulator_gap.py +2 -2
  30. dls_dodal-1.64.0/src/dodal/testing/fixtures/run_engine.py +46 -0
  31. dls_dodal-1.64.0/src/dodal/testing/fixtures/utils.py +57 -0
  32. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/beamlines/test_device_instantiation.py +2 -2
  33. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/conftest.py +3 -55
  34. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/b07_1/test_ccmc.py +3 -3
  35. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/conftest.py +4 -4
  36. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i03/test_dcm.py +1 -1
  37. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i03/test_undulator_dcm.py +9 -9
  38. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i04/test_transfocator.py +6 -2
  39. dls_dodal-1.64.0/tests/devices/i07/test_dcm.py +36 -0
  40. dls_dodal-1.64.0/tests/devices/i09_1_shared/test_data/__init__.py +9 -0
  41. dls_dodal-1.64.0/tests/devices/i09_1_shared/test_data/test_lookuptable_i09_hu.txt +26 -0
  42. dls_dodal-1.64.0/tests/devices/i09_1_shared/test_undulator_functions.py +53 -0
  43. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_i10_apple2.py +73 -48
  44. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i22/test_dcm.py +6 -6
  45. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_common_dcm.py +2 -2
  46. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_smargon.py +2 -2
  47. dls_dodal-1.64.0/tests/fake_zocalo/__init__.py +0 -0
  48. dls_dodal-1.64.0/tests/plan_stubs/__init__.py +0 -0
  49. dls_dodal-1.64.0/tests/plans/__init__.py +0 -0
  50. dls_dodal-1.64.0/tests/plans/test_preprocessors/__init__.py +0 -0
  51. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_verify_undulator_gap_plan.py +1 -1
  52. dls_dodal-1.64.0/tests/preprocessors/__init__.py +0 -0
  53. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_cli.py +2 -2
  54. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.copier-answers.yml +0 -0
  55. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.devcontainer/devcontainer.json +0 -0
  56. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/CODEOWNERS +0 -0
  57. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/CONTRIBUTING.md +0 -0
  58. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  59. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/actions/install_requirements/action.yml +0 -0
  60. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/dependabot.yml +0 -0
  61. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/pages/index.html +0 -0
  62. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/pages/make_switcher.py +0 -0
  63. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/scripts/check_test_durations.py +0 -0
  64. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/_dist.yml +0 -0
  65. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/_docs.yml +0 -0
  66. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/_pypi.yml +0 -0
  67. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/_release.yml +0 -0
  68. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/_test.yml +0 -0
  69. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/_tox.yml +0 -0
  70. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/ci.yml +0 -0
  71. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.github/workflows/periodic.yml +0 -0
  72. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.gitignore +0 -0
  73. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.pre-commit-config.yaml +0 -0
  74. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.vscode/extensions.json +0 -0
  75. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.vscode/launch.json +0 -0
  76. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.vscode/settings.json +0 -0
  77. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/.vscode/tasks.json +0 -0
  78. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/Dockerfile +0 -0
  79. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/LICENSE +0 -0
  80. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/README.md +0 -0
  81. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/catalog-info.yaml +0 -0
  82. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/_templates/autosummary/class.rst +0 -0
  83. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/_templates/autosummary/module.rst +0 -0
  84. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/_templates/custom-module-template.rst +0 -0
  85. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
  86. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/assets/zocalo.png +0 -0
  87. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/conf.py +0 -0
  88. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  89. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  90. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  91. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  92. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  93. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/0006-devices-shared-between-endstations.md +0 -0
  94. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions/COPYME +0 -0
  95. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/decisions.md +0 -0
  96. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/reviews.md +0 -0
  97. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/umls/apple2_design.png +0 -0
  98. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations/umls/i10_id_design.png +0 -0
  99. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/explanations.md +0 -0
  100. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/genindex.md +0 -0
  101. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/build-docs.md +0 -0
  102. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/contribute.md +0 -0
  103. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/coverage.md +0 -0
  104. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/create-beamline.md +0 -0
  105. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/create-device.md +0 -0
  106. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/dev-install.md +0 -0
  107. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/excalidraw.md +0 -0
  108. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/external-io-devices.md +0 -0
  109. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/lint.md +0 -0
  110. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/lock-requirements.md +0 -0
  111. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/move-code.md +0 -0
  112. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/pypi.md +0 -0
  113. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/run-tests.md +0 -0
  114. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/static-analysis.md +0 -0
  115. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/update-template.md +0 -0
  116. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to/zocalo.md +0 -0
  117. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/how-to.md +0 -0
  118. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/images/dls-logo.svg +0 -0
  119. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/images/excalidraw-example.svg +0 -0
  120. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/index.md +0 -0
  121. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/reference/api.md +0 -0
  122. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/reference/device-standards.md +0 -0
  123. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/reference/standards.md +0 -0
  124. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/reference.md +0 -0
  125. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/tutorials/get_started.md +0 -0
  126. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/tutorials/installation.md +0 -0
  127. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/docs/tutorials.md +0 -0
  128. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/pull_request_template.md +0 -0
  129. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/setup.cfg +0 -0
  130. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/__init__.py +0 -0
  131. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  132. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  133. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  134. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/__init__.py +0 -0
  135. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/__main__.py +0 -0
  136. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  137. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  138. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
  139. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/README.md +0 -0
  140. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/__init__.py +0 -0
  141. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/adsim.py +0 -0
  142. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/aithre.py +0 -0
  143. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/b01_1.py +0 -0
  144. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/b07.py +0 -0
  145. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/b07_1.py +0 -0
  146. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/b16.py +0 -0
  147. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/b18.py +0 -0
  148. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/b21.py +0 -0
  149. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i02_1.py +0 -0
  150. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i02_2.py +0 -0
  151. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i03.py +0 -0
  152. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i04.py +0 -0
  153. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i05.py +0 -0
  154. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i05_1.py +0 -0
  155. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i10.py +0 -0
  156. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i10_1.py +0 -0
  157. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i11.py +0 -0
  158. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i13_1.py +0 -0
  159. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i15.py +0 -0
  160. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i15_1.py +0 -0
  161. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i18.py +0 -0
  162. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i19_1.py +0 -0
  163. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i19_2.py +0 -0
  164. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i19_optics.py +0 -0
  165. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i20_1.py +0 -0
  166. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i22.py +0 -0
  167. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i23.py +0 -0
  168. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/i24.py +0 -0
  169. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/k07.py +0 -0
  170. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/k11.py +0 -0
  171. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/p38.py +0 -0
  172. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/p45.py +0 -0
  173. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/p60.py +0 -0
  174. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/p99.py +0 -0
  175. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/beamlines/training_rig.py +0 -0
  176. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/__init__.py +0 -0
  177. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/beamlines/__init__.py +0 -0
  178. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  179. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  180. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/beamlines/commissioning_mode.py +0 -0
  181. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  182. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/coordination.py +0 -0
  183. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/crystal_metadata.py +0 -0
  184. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/data_util.py +0 -0
  185. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/device_utils.py +0 -0
  186. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/enums.py +0 -0
  187. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/maths.py +0 -0
  188. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/types.py +0 -0
  189. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/udc_directory_provider.py +0 -0
  190. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/visit.py +0 -0
  191. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/common/watcher_utils.py +0 -0
  192. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/__init__.py +0 -0
  193. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
  194. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  195. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
  196. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/aperture.py +0 -0
  197. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  198. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/areadetector/__init__.py +0 -0
  199. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/areadetector/plugins/__init__.py +0 -0
  200. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/areadetector/plugins/cam.py +0 -0
  201. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/areadetector/plugins/mjpg.py +0 -0
  202. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/attenuator/__init__.py +0 -0
  203. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  204. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/attenuator/filter.py +0 -0
  205. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  206. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b07/__init__.py +0 -0
  207. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b07/enums.py +0 -0
  208. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b07_1/__init__.py +0 -0
  209. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b07_1/enums.py +0 -0
  210. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b16/__init__.py +0 -0
  211. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/b16/detector.py +0 -0
  212. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/backlight.py +0 -0
  213. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/baton.py +0 -0
  214. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  215. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/collimation_table.py +0 -0
  216. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/controllers.py +0 -0
  217. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/cryostream.py +0 -0
  218. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  219. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  220. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  221. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  222. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  223. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  224. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/detector/__init__.py +0 -0
  225. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  226. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  227. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  228. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/detector/detector.py +0 -0
  229. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  230. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/diamond_filter.py +0 -0
  231. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/eiger.py +0 -0
  232. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/eiger_odin.py +0 -0
  233. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
  234. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -0
  235. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +0 -0
  236. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +0 -0
  237. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +0 -0
  238. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
  239. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/detector.py +0 -0
  240. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/energy_sources.py +0 -0
  241. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/enums.py +0 -0
  242. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  243. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/specs/detector.py +0 -0
  244. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +0 -0
  245. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
  246. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/specs/region.py +0 -0
  247. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/types.py +0 -0
  248. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/util.py +0 -0
  249. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
  250. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +0 -0
  251. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +0 -0
  252. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -0
  253. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +0 -0
  254. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/eurotherm.py +0 -0
  255. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  256. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/fast_shutter.py +0 -0
  257. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  258. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/flux.py +0 -0
  259. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/focusing_mirror.py +0 -0
  260. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/hutch_shutter.py +0 -0
  261. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i02_1/__init__.py +0 -0
  262. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i02_1/fast_grid_scan.py +0 -0
  263. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i02_1/sample_motors.py +0 -0
  264. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i02_2/__init__.py +0 -0
  265. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i03/__init__.py +0 -0
  266. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i03/dcm.py +0 -0
  267. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i04/__init__.py +0 -0
  268. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i04/constants.py +0 -0
  269. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i04/murko_results.py +0 -0
  270. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i04/transfocator.py +0 -0
  271. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i05/__init__.py +0 -0
  272. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i05/enums.py +0 -0
  273. {dls_dodal-1.63.0/src/dodal/devices/i10/rasor → dls_dodal-1.64.0/src/dodal/devices/i07}/__init__.py +0 -0
  274. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i09/__init__.py +0 -0
  275. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i09/enums.py +0 -0
  276. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i09_1/__init__.py +0 -0
  277. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i09_1/enums.py +0 -0
  278. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/__init__.py +0 -0
  279. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  280. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  281. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/mirrors.py +0 -0
  282. {dls_dodal-1.63.0/src/dodal/devices/i11 → dls_dodal-1.64.0/src/dodal/devices/i10/rasor}/__init__.py +0 -0
  283. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  284. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  285. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  286. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i10/slits.py +0 -0
  287. {dls_dodal-1.63.0/src/dodal/devices/i13_1 → dls_dodal-1.64.0/src/dodal/devices/i11}/__init__.py +0 -0
  288. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
  289. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i11/diff_stages.py +0 -0
  290. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i11/mythen.py +0 -0
  291. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i11/nx100robot.py +0 -0
  292. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i11/spinner.py +0 -0
  293. {dls_dodal-1.63.0/src/dodal/devices/i15 → dls_dodal-1.64.0/src/dodal/devices/i13_1}/__init__.py +0 -0
  294. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  295. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  296. {dls_dodal-1.63.0/src/dodal/devices/i17 → dls_dodal-1.64.0/src/dodal/devices/i15}/__init__.py +0 -0
  297. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/focussing_mirror.py +0 -0
  298. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/jack.py +0 -0
  299. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/laue.py +0 -0
  300. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/motors.py +0 -0
  301. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/multilayer_mirror.py +0 -0
  302. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i15/rail.py +0 -0
  303. {dls_dodal-1.63.0/src/dodal/devices/i18 → dls_dodal-1.64.0/src/dodal/devices/i17}/__init__.py +0 -0
  304. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i17/i17_apple2.py +0 -0
  305. {dls_dodal-1.63.0/src/dodal/devices/i19 → dls_dodal-1.64.0/src/dodal/devices/i18}/__init__.py +0 -0
  306. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i18/diode.py +0 -0
  307. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i18/kb_mirror.py +0 -0
  308. {dls_dodal-1.63.0/src/dodal/devices/i19/access_controlled → dls_dodal-1.64.0/src/dodal/devices/i19}/__init__.py +0 -0
  309. {dls_dodal-1.63.0/src/dodal/devices/i20_1 → dls_dodal-1.64.0/src/dodal/devices/i19/access_controlled}/__init__.py +0 -0
  310. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/access_controlled/blueapi_device.py +0 -0
  311. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/access_controlled/hutch_access.py +0 -0
  312. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/access_controlled/shutter.py +0 -0
  313. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/backlight.py +0 -0
  314. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/beamstop.py +0 -0
  315. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/diffractometer.py +0 -0
  316. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/mapt_configuration.py +0 -0
  317. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i19/pin_col_stages.py +0 -0
  318. {dls_dodal-1.63.0/src/dodal/devices/i22 → dls_dodal-1.64.0/src/dodal/devices/i20_1}/__init__.py +0 -0
  319. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i21/__init__.py +0 -0
  320. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i21/enums.py +0 -0
  321. {dls_dodal-1.63.0/src/dodal/devices/i24 → dls_dodal-1.64.0/src/dodal/devices/i22}/__init__.py +0 -0
  322. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i22/fswitch.py +0 -0
  323. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i22/nxsas.py +0 -0
  324. {dls_dodal-1.63.0/src/dodal/devices/mx_phase1 → dls_dodal-1.64.0/src/dodal/devices/i24}/__init__.py +0 -0
  325. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/aperture.py +0 -0
  326. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/beam_center.py +0 -0
  327. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/beamstop.py +0 -0
  328. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/commissioning_jungfrau.py +0 -0
  329. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/dcm.py +0 -0
  330. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  331. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  332. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/pmac.py +0 -0
  333. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/i24/vgonio.py +0 -0
  334. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/ipin.py +0 -0
  335. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/linkam3.py +0 -0
  336. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/motors.py +0 -0
  337. {dls_dodal-1.63.0/src/dodal/devices/oav → dls_dodal-1.64.0/src/dodal/devices/mx_phase1}/__init__.py +0 -0
  338. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
  339. {dls_dodal-1.63.0/src/dodal/devices/oav/snapshots → dls_dodal-1.64.0/src/dodal/devices/oav}/__init__.py +0 -0
  340. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  341. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  342. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  343. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  344. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  345. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  346. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  347. {dls_dodal-1.63.0/src/dodal/devices/p99 → dls_dodal-1.64.0/src/dodal/devices/oav/snapshots}/__init__.py +0 -0
  348. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  349. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  350. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  351. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  352. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/oav/utils.py +0 -0
  353. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/p45.py +0 -0
  354. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/p60/__init__.py +0 -0
  355. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/p60/enums.py +0 -0
  356. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
  357. {dls_dodal-1.63.0/src/dodal/devices/temperture_controller/lakeshore → dls_dodal-1.64.0/src/dodal/devices/p99}/__init__.py +0 -0
  358. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  359. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  360. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/pgm.py +0 -0
  361. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/positioner.py +0 -0
  362. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  363. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/qbpm.py +0 -0
  364. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/robot.py +0 -0
  365. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  366. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/scintillator.py +0 -0
  367. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/slits.py +0 -0
  368. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/smargon.py +0 -0
  369. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/status.py +0 -0
  370. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/synchrotron.py +0 -0
  371. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/temperture_controller/__init__.py +0 -0
  372. {dls_dodal-1.63.0/src/dodal/devices/util → dls_dodal-1.64.0/src/dodal/devices/temperture_controller/lakeshore}/__init__.py +0 -0
  373. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore.py +0 -0
  374. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +0 -0
  375. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/tetramm.py +0 -0
  376. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/thawer.py +0 -0
  377. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/turbo_slit.py +0 -0
  378. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/undulator.py +0 -0
  379. {dls_dodal-1.63.0/src/dodal/devices/xspress3 → dls_dodal-1.64.0/src/dodal/devices/util}/__init__.py +0 -0
  380. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  381. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/util/epics_util.py +0 -0
  382. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/v2f.py +0 -0
  383. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  384. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/webcam.py +0 -0
  385. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  386. {dls_dodal-1.63.0/src/dodal/devices/zebra → dls_dodal-1.64.0/src/dodal/devices/xspress3}/__init__.py +0 -0
  387. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  388. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  389. {dls_dodal-1.63.0/src/dodal/parameters → dls_dodal-1.64.0/src/dodal/devices/zebra}/__init__.py +0 -0
  390. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zebra/zebra.py +0 -0
  391. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  392. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  393. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  394. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  395. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  396. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  397. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/log.py +0 -0
  398. {dls_dodal-1.63.0/src/dodal/plan_stubs → dls_dodal-1.64.0/src/dodal/parameters}/__init__.py +0 -0
  399. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  400. {dls_dodal-1.63.0/src/dodal/plans/preprocessors → dls_dodal-1.64.0/src/dodal/plan_stubs}/__init__.py +0 -0
  401. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  402. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plan_stubs/data_session.py +0 -0
  403. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  404. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  405. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/__init__.py +0 -0
  406. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/bimorph.py +0 -0
  407. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
  408. {dls_dodal-1.63.0/system_tests → dls_dodal-1.64.0/src/dodal/plans/preprocessors}/__init__.py +0 -0
  409. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  410. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/save_panda.py +0 -0
  411. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/scanspec.py +0 -0
  412. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/plans/wrapped.py +0 -0
  413. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/testing/__init__.py +0 -0
  414. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
  415. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
  416. {dls_dodal-1.63.0/tests → dls_dodal-1.64.0/src/dodal/testing/fixtures}/__init__.py +0 -0
  417. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/testing/setup.py +0 -0
  418. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/src/dodal/utils.py +0 -0
  419. {dls_dodal-1.63.0/tests/beamlines → dls_dodal-1.64.0/system_tests}/__init__.py +0 -0
  420. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/system_tests/test_adsim.py +0 -0
  421. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/system_tests/test_cli.py +0 -0
  422. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/system_tests/test_oav_system.py +0 -0
  423. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/system_tests/test_oav_to_redis_system.py +0 -0
  424. {dls_dodal-1.63.0/tests/common → dls_dodal-1.64.0/tests}/__init__.py +0 -0
  425. {dls_dodal-1.63.0/tests/common → dls_dodal-1.64.0/tests}/beamlines/__init__.py +0 -0
  426. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/beamlines/test_b16.py +0 -0
  427. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/beamlines/test_i03.py +0 -0
  428. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/beamlines/test_i24.py +0 -0
  429. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/beamlines/test_mapping.py +0 -0
  430. {dls_dodal-1.63.0/tests/devices → dls_dodal-1.64.0/tests/common}/__init__.py +0 -0
  431. {dls_dodal-1.63.0/tests/devices/aithre_lasershaping → dls_dodal-1.64.0/tests/common/beamlines}/__init__.py +0 -0
  432. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  433. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/beamlines/test_beamline_utils.py +0 -0
  434. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/beamlines/test_commissioning_mode.py +0 -0
  435. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/test_coordination.py +0 -0
  436. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/test_crystal_metadata.py +0 -0
  437. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/test_maths.py +0 -0
  438. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/test_udc_directory_provider.py +0 -0
  439. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/test_visit.py +0 -0
  440. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/common/test_watcher_utils.py +0 -0
  441. {dls_dodal-1.63.0/tests/devices/b07_1 → dls_dodal-1.64.0/tests/devices}/__init__.py +0 -0
  442. {dls_dodal-1.63.0/tests/devices/current_amplifier → dls_dodal-1.64.0/tests/devices/aithre_lasershaping}/__init__.py +0 -0
  443. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
  444. {dls_dodal-1.63.0/tests/devices/detector → dls_dodal-1.64.0/tests/devices/b07_1}/__init__.py +0 -0
  445. {dls_dodal-1.63.0/tests/devices/electron_analyser → dls_dodal-1.64.0/tests/devices/current_amplifier}/__init__.py +0 -0
  446. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/current_amplifier/test_femto.py +0 -0
  447. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/current_amplifier/test_sr570.py +0 -0
  448. {dls_dodal-1.63.0/tests/devices/electron_analyser/abstract → dls_dodal-1.64.0/tests/devices/detector}/__init__.py +0 -0
  449. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/detector/test_data/__init__.py +0 -0
  450. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/detector/test_data/test_det_dist_converter.txt +0 -0
  451. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/detector/test_det_dim_constants.py +0 -0
  452. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/detector/test_det_resolution.py +0 -0
  453. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/detector/test_detector.py +0 -0
  454. {dls_dodal-1.63.0/tests/devices/electron_analyser/specs → dls_dodal-1.64.0/tests/devices/electron_analyser}/__init__.py +0 -0
  455. {dls_dodal-1.63.0/tests/devices/electron_analyser/vgscienta → dls_dodal-1.64.0/tests/devices/electron_analyser/abstract}/__init__.py +0 -0
  456. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/abstract/test_base_detector.py +0 -0
  457. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/abstract/test_base_driver_io.py +0 -0
  458. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/abstract/test_base_region.py +0 -0
  459. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/helper_util/__init__.py +0 -0
  460. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/helper_util/assert_func.py +0 -0
  461. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/helper_util/sequence.py +0 -0
  462. {dls_dodal-1.63.0/tests/devices/i02_1 → dls_dodal-1.64.0/tests/devices/electron_analyser/specs}/__init__.py +0 -0
  463. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/specs/test_detector.py +0 -0
  464. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/specs/test_driver_io.py +0 -0
  465. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/specs/test_region.py +0 -0
  466. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/test_data/__init__.py +0 -0
  467. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/test_data/specs_sequence.seq +0 -0
  468. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
  469. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/test_detector.py +0 -0
  470. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/test_energy_sources.py +0 -0
  471. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/test_util.py +0 -0
  472. {dls_dodal-1.63.0/tests/devices/i03 → dls_dodal-1.64.0/tests/devices/electron_analyser/vgscienta}/__init__.py +0 -0
  473. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/vgscienta/test_detector.py +0 -0
  474. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/vgscienta/test_driver_io.py +0 -0
  475. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/electron_analyser/vgscienta/test_region.py +0 -0
  476. {dls_dodal-1.63.0/tests/devices/i04 → dls_dodal-1.64.0/tests/devices/i02_1}/__init__.py +0 -0
  477. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i02_1/test_fast_grid_scan.py +0 -0
  478. {dls_dodal-1.63.0/tests/devices/i09 → dls_dodal-1.64.0/tests/devices/i03}/__init__.py +0 -0
  479. {dls_dodal-1.63.0/tests/devices/i10 → dls_dodal-1.64.0/tests/devices/i04}/__init__.py +0 -0
  480. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i04/test_murko_results.py +0 -0
  481. {dls_dodal-1.63.0/tests/devices/i11 → dls_dodal-1.64.0/tests/devices/i07}/__init__.py +0 -0
  482. {dls_dodal-1.63.0/tests/devices/i13_1 → dls_dodal-1.64.0/tests/devices/i09}/__init__.py +0 -0
  483. {dls_dodal-1.63.0/tests/devices/i15 → dls_dodal-1.64.0/tests/devices/i09_1}/__init__.py +0 -0
  484. {dls_dodal-1.63.0/tests/devices/i17 → dls_dodal-1.64.0/tests/devices/i09_1_shared}/__init__.py +0 -0
  485. {dls_dodal-1.63.0/tests/devices/i18 → dls_dodal-1.64.0/tests/devices/i10}/__init__.py +0 -0
  486. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
  487. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
  488. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/__init__.py +0 -0
  489. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  490. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  491. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  492. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  493. {dls_dodal-1.63.0/tests/devices/i19 → dls_dodal-1.64.0/tests/devices/i11}/__init__.py +0 -0
  494. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i11/test_i11devices.py +0 -0
  495. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i11/test_mythen.py +0 -0
  496. {dls_dodal-1.63.0/tests/devices/i22 → dls_dodal-1.64.0/tests/devices/i13_1}/__init__.py +0 -0
  497. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i13_1/test_merlin.py +0 -0
  498. {dls_dodal-1.63.0/tests/devices/i24 → dls_dodal-1.64.0/tests/devices/i15}/__init__.py +0 -0
  499. {dls_dodal-1.63.0/tests/devices/mx_phase1 → dls_dodal-1.64.0/tests/devices/i17}/__init__.py +0 -0
  500. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i17/test_i17_apple2.py +0 -0
  501. {dls_dodal-1.63.0/tests/devices/oav → dls_dodal-1.64.0/tests/devices/i18}/__init__.py +0 -0
  502. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  503. {dls_dodal-1.63.0/tests/devices/oav/image_recognition → dls_dodal-1.64.0/tests/devices/i19}/__init__.py +0 -0
  504. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i19/test_backlight.py +0 -0
  505. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i19/test_beamstop.py +0 -0
  506. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i19/test_diffractometer.py +0 -0
  507. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i19/test_mapt.py +0 -0
  508. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i19/test_pin_col.py +0 -0
  509. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i19/test_shutter.py +0 -0
  510. {dls_dodal-1.63.0/tests/devices/p60 → dls_dodal-1.64.0/tests/devices/i22}/__init__.py +0 -0
  511. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i22/test_fswitch.py +0 -0
  512. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i22/test_metadataholder.py +0 -0
  513. {dls_dodal-1.63.0/tests/devices/p99 → dls_dodal-1.64.0/tests/devices/i24}/__init__.py +0 -0
  514. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i24/test_commissioning_jungfrau.py +0 -0
  515. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i24/test_dual_backlight.py +0 -0
  516. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i24/test_focus_mirrors.py +0 -0
  517. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i24/test_pmac.py +0 -0
  518. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/i24/test_vgonio.py +0 -0
  519. {dls_dodal-1.63.0/tests/devices/temperature_controller → dls_dodal-1.64.0/tests/devices/mx_phase1}/__init__.py +0 -0
  520. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/mx_phase1/test_beamstop.py +0 -0
  521. {dls_dodal-1.63.0/tests/devices/temperature_controller/lakeshore → dls_dodal-1.64.0/tests/devices/oav}/__init__.py +0 -0
  522. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/conftest.py +0 -0
  523. {dls_dodal-1.63.0/tests/devices/util → dls_dodal-1.64.0/tests/devices/oav/image_recognition}/__init__.py +0 -0
  524. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/image_recognition/test_pin_tip_detect.py +0 -0
  525. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  526. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_data/__init__.py +0 -0
  527. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_data/oav_snapshot_expected.png +0 -0
  528. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_data/oav_snapshot_test.png +0 -0
  529. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_data/test_OAVCentring.json +0 -0
  530. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_grid_overlay.py +0 -0
  531. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_oav.py +0 -0
  532. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_oav_parameters.py +0 -0
  533. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_oav_to_redis_forwarder.py +0 -0
  534. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_oav_utils.py +0 -0
  535. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_snapshot_image_processing.py +0 -0
  536. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/oav/test_snapshots.py +0 -0
  537. {dls_dodal-1.63.0/tests/fake_zocalo → dls_dodal-1.64.0/tests/devices/p60}/__init__.py +0 -0
  538. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/p60/test_lab_xray_source.py +0 -0
  539. {dls_dodal-1.63.0/tests/plan_stubs → dls_dodal-1.64.0/tests/devices/p99}/__init__.py +0 -0
  540. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/p99/test_p99_stage.py +0 -0
  541. {dls_dodal-1.63.0/tests/plans → dls_dodal-1.64.0/tests/devices/temperature_controller}/__init__.py +0 -0
  542. {dls_dodal-1.63.0/tests/plans/test_preprocessors → dls_dodal-1.64.0/tests/devices/temperature_controller/lakeshore}/__init__.py +0 -0
  543. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore.py +0 -0
  544. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore_io.py +0 -0
  545. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_aperture.py +0 -0
  546. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_aperture_scatterguard.py +0 -0
  547. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_apple2_undulator.py +0 -0
  548. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_attenuator.py +0 -0
  549. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_backlight.py +0 -0
  550. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_bart_robot.py +0 -0
  551. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_baton.py +0 -0
  552. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_beam_converter.py +0 -0
  553. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_bimorph_mirror.py +0 -0
  554. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_controllers.py +0 -0
  555. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_daq_configuration/__init__.py +0 -0
  556. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_daq_configuration/domain/__init__.py +0 -0
  557. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_daq_configuration/domain/beamlineParameters +0 -0
  558. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  559. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  560. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_daq_configuration/lookup/__init__.py +0 -0
  561. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_data/__init__.py +0 -0
  562. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  563. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_data/test_lookup_table.txt +0 -0
  564. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_diamond_filter.py +0 -0
  565. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_eiger.py +0 -0
  566. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_fast_shutters.py +0 -0
  567. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_focusing_mirror.py +0 -0
  568. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_gridscan.py +0 -0
  569. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_hutch_shutter.py +0 -0
  570. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_motors.py +0 -0
  571. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_odin.py +0 -0
  572. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_positioner.py +0 -0
  573. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_pressure_jump_cell.py +0 -0
  574. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_qbpm.py +0 -0
  575. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_scintillator.py +0 -0
  576. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_slits.py +0 -0
  577. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_synchrotron.py +0 -0
  578. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_tetramm.py +0 -0
  579. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_thawer.py +0 -0
  580. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_turbo_slit.py +0 -0
  581. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_undulator.py +0 -0
  582. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_utils.py +0 -0
  583. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_watsonmarlow323_pump.py +0 -0
  584. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_webcam.py +0 -0
  585. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_xbpm_feedback.py +0 -0
  586. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_xspress3.py +0 -0
  587. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_zebra.py +0 -0
  588. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_zebra_constants_mapping.py +0 -0
  589. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_zebra_shutter.py +0 -0
  590. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_zocalo_interaction.py +0 -0
  591. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/test_zocalo_results.py +0 -0
  592. {dls_dodal-1.63.0/tests/preprocessors → dls_dodal-1.64.0/tests/devices/util}/__init__.py +0 -0
  593. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_adjuster_plans.py +0 -0
  594. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_beamline_specific_utils.py +0 -0
  595. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_data/__init__.py +0 -0
  596. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  597. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  598. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  599. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/devices/util/test_lookup_tables.py +0 -0
  600. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline.py +0 -0
  601. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  602. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline_broken_dependency.py +0 -0
  603. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline_dependencies.py +0 -0
  604. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  605. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  606. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_beamline_some_devices_working.py +0 -0
  607. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_device_factory_beamline.py +0 -0
  608. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_zocalo/README.rst +0 -0
  609. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_zocalo/__main__.py +0 -0
  610. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  611. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_data/__init__.py +0 -0
  612. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
  613. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
  614. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_data_session.py +0 -0
  615. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  616. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  617. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  618. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/conftest.py +0 -0
  619. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_bimorph.py +0 -0
  620. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_compliance.py +0 -0
  621. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  622. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  623. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_save_panda.py +0 -0
  624. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_scanspec.py +0 -0
  625. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/plans/test_wrapped.py +0 -0
  626. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  627. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_data/__init__.py +0 -0
  628. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_data/bad_beamlineParameters +0 -0
  629. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_data/i04_beamlineParameters +0 -0
  630. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  631. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_data/test_display.configuration +0 -0
  632. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
  633. {dls_dodal-1.63.0 → dls_dodal-1.64.0}/tests/test_log.py +0 -0
  634. {dls_dodal-1.63.0 → dls_dodal-1.64.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.63.0
3
+ Version: 1.64.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
@@ -215,7 +215,7 @@ Description-Content-Type: text/markdown
215
215
  License-File: LICENSE
216
216
  Requires-Dist: click
217
217
  Requires-Dist: ophyd
218
- Requires-Dist: ophyd-async[ca,pva]>=0.13.2
218
+ Requires-Dist: ophyd-async[ca,pva]>=0.13.5
219
219
  Requires-Dist: bluesky>=1.14.5
220
220
  Requires-Dist: pyepics
221
221
  Requires-Dist: dataclasses-json
@@ -245,7 +245,7 @@ Requires-Dist: pipdeptree; extra == "dev"
245
245
  Requires-Dist: pre-commit; extra == "dev"
246
246
  Requires-Dist: psutil; extra == "dev"
247
247
  Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
248
- Requires-Dist: pyright; extra == "dev"
248
+ Requires-Dist: pyright==1.1.406; extra == "dev"
249
249
  Requires-Dist: pytest; extra == "dev"
250
250
  Requires-Dist: pytest-asyncio; extra == "dev"
251
251
  Requires-Dist: pytest-cov; extra == "dev"
@@ -1,14 +1,10 @@
1
- import asyncio
2
1
  import logging
3
2
  import sys
4
- import time
5
- from collections.abc import Mapping
6
3
  from os import environ
7
4
  from pathlib import Path
8
5
  from unittest.mock import MagicMock, patch
9
6
 
10
7
  import pytest
11
- from bluesky.run_engine import RunEngine
12
8
  from ophyd.status import Status
13
9
  from ophyd_async.core import (
14
10
  PathInfo,
@@ -49,6 +45,10 @@ BANNED_PATHS = [Path("/dls"), Path("/dls_sw")]
49
45
  environ["DODAL_TEST_MODE"] = "true"
50
46
 
51
47
 
48
+ # Add run_engine fixtures to be used in tests
49
+ pytest_plugins = ["dodal.testing.fixtures.run_engine"]
50
+
51
+
52
52
  @pytest.fixture(autouse=True)
53
53
  def patch_open_to_prevent_dls_reads_in_tests():
54
54
  unpatched_open = open
@@ -105,37 +105,7 @@ async def static_path_provider(
105
105
  return svpp
106
106
 
107
107
 
108
- @pytest.fixture
109
- def run_engine_documents(run_engine: RunEngine) -> Mapping[str, list[dict]]:
110
- docs: dict[str, list[dict]] = {}
111
-
112
- def append_and_print(name, doc):
113
- if name not in docs:
114
- docs[name] = []
115
- docs[name] += [doc]
116
-
117
- run_engine.subscribe(append_and_print)
118
- return docs
119
-
120
-
121
108
  def failed_status(failure: Exception) -> Status:
122
109
  status = Status()
123
110
  status.set_exception(failure)
124
111
  return status
125
-
126
-
127
- @pytest.fixture(scope="session", autouse=True)
128
- async def _ensure_running_bluesky_event_loop():
129
- run_engine = RunEngine()
130
- # make sure the event loop is thoroughly up and running before we try to create
131
- # any ophyd_async devices which might need it
132
- timeout = time.monotonic() + 1
133
- while not run_engine.loop.is_running():
134
- await asyncio.sleep(0)
135
- if time.monotonic() > timeout:
136
- raise TimeoutError("This really shouldn't happen but just in case...")
137
-
138
-
139
- @pytest.fixture()
140
- async def run_engine():
141
- yield RunEngine()
@@ -21,7 +21,7 @@ you will not get the option to edit the release notes.
21
21
 
22
22
  A new release will be made and the wheel and sdist uploaded to PyPI.
23
23
 
24
- [release]: https://github.com/DiamondLightSource/python-copier-template/releases
24
+ [release]: https://github.com/DiamondLightSource/dodal/releases
25
25
 
26
26
  ## Deciding release numbers
27
27
 
@@ -58,9 +58,11 @@ class MyDevice(StandardReadable, Stageable):
58
58
 
59
59
  In this example, we need to test the `stage` and `unstage` methods. For more complex devices, it is also a good idea to test the `read` method to confirm that we get the expected read signals back when this method is called.
60
60
 
61
- We use [pytest](https://docs.pytest.org/en/stable/contents.html) for writing tests in dodal. A core part of this library is the use of fixtures. A fixture is a function decorated with `@pytest.fixture` that provides setup/teardown or reusable test data for your tests. It is defined once and can be reused across multiple tests. Fixtures are mainly used to define devices and then inject them into each test.
61
+ We use [pytest](https://docs.pytest.org/en/stable/contents.html) for writing tests in dodal. A core part of this library is the use of fixtures. A fixture is a function decorated with `@pytest.fixture` that provides setup/teardown or reusable test data for your tests. It is defined once and can be reused across multiple tests. Fixtures are mainly used to define devices and then inject them into each test.
62
62
 
63
- To help set up a device, they are created with the `init_devices(mock=True)` function from `ophyd_async.core`, which automatically initialises the device in mock mode. The `RunEngine` fixture is passed when creating a device to ensure there is an event loop available when connecting signals. This fixture is defined in `dodal/tests/conftest.py`, which is a special file recognised by `pytest`. It defines fixtures that are automatically available to any test in the same directory (and its subdirectories) without needing to import them. This is useful for defining common setup code once without duplicating it across test files.
63
+ Common fixtures, such as the `run_engine` used in the below tests, can also be defined in `dodal/tests/conftest.py`, which is a special file recognised by `pytest`. These fixtures are automatically available to any test in the same directory (and its subdirectories) without needing to import them. This is useful for defining common setup code once without duplicating it across test files.
64
+
65
+ Devices are set up in the fixture using the `init_devices(mock=True)` function from `ophyd_async.core`, which automatically initialises the device in mock mode.
64
66
 
65
67
  In order for `pytest` to detect something as a test, a function should begin with `test_*`. The test function should be self-descriptive about what it is testing, and it is acceptable (even encouraged) to have longer names for test functions for clarity.
66
68
 
@@ -75,9 +77,8 @@ from ophyd_async.testing import assert_reading, get_mock_put, partial_reading
75
77
  from dodal.device.my_device import MyDevice
76
78
 
77
79
 
78
- # RunEngine is needed to make sure there is an event loop when creating device.
79
80
  @pytest.fixture
80
- async def sim_my_device(run_engine: RunEngine) -> MyDevice:
81
+ async def sim_my_device() -> MyDevice:
81
82
  async with init_devices(mock=True):
82
83
  sim_my_device = MyDevice("TEST:")
83
84
  return sim_my_device
@@ -91,7 +92,6 @@ def test_my_device_stage(sim_my_device: MyDevice, run_engine: RunEngine) -> None
91
92
  def test_my_device_unstage(sim_my_device: MyDevice, run_engine: RunEngine) -> None:
92
93
  run_engine(bps.unstage(sim_my_device, wait=True), wait=True)
93
94
  get_mock_put(sim_my_device.signal_b).assert_called_once_with(OnOff.OFF, wait=True)
94
-
95
95
  ```
96
96
 
97
97
  You should test the output of a device when the device has many signals read and you want to ensure the correct ones are read at the correct times, or when the `read` method of it or one of its signals (e.g. a DerivedSignal) requires testing. Functions are defined in `ophyd-async` to aid with this. `assert_reading` allows us to compare the readings generated from a `Readable` device to the expected results.
@@ -14,7 +14,7 @@ description = "Ophyd devices and other utils that could be used across DLS beaml
14
14
  dependencies = [
15
15
  "click",
16
16
  "ophyd",
17
- "ophyd-async[ca,pva]>=0.13.2",
17
+ "ophyd-async[ca,pva]>=0.13.5",
18
18
  "bluesky>=1.14.5",
19
19
  "pyepics",
20
20
  "dataclasses-json",
@@ -54,7 +54,8 @@ dev = [
54
54
  "pre-commit",
55
55
  "psutil",
56
56
  "pydata-sphinx-theme>=0.12",
57
- "pyright",
57
+ # Pin to previous pyright until https://github.com/microsoft/pyright/issues/11060 is fixed
58
+ "pyright==1.1.406",
58
59
  "pytest",
59
60
  "pytest-asyncio",
60
61
  "pytest-cov",
@@ -136,6 +137,8 @@ testpaths = "docs src tests system_tests"
136
137
  exclude_also = [
137
138
  '^"""', # Ignore the start/end of a file-level triple quoted docstring
138
139
  ]
140
+ # Exclude pytest.fixtures from code coverage report
141
+ omit = ["*/dodal/testing/fixtures/*"]
139
142
 
140
143
  [tool.coverage.run]
141
144
  data_file = "/tmp/dodal.coverage"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.63.0
3
+ Version: 1.64.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
@@ -215,7 +215,7 @@ Description-Content-Type: text/markdown
215
215
  License-File: LICENSE
216
216
  Requires-Dist: click
217
217
  Requires-Dist: ophyd
218
- Requires-Dist: ophyd-async[ca,pva]>=0.13.2
218
+ Requires-Dist: ophyd-async[ca,pva]>=0.13.5
219
219
  Requires-Dist: bluesky>=1.14.5
220
220
  Requires-Dist: pyepics
221
221
  Requires-Dist: dataclasses-json
@@ -245,7 +245,7 @@ Requires-Dist: pipdeptree; extra == "dev"
245
245
  Requires-Dist: pre-commit; extra == "dev"
246
246
  Requires-Dist: psutil; extra == "dev"
247
247
  Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
248
- Requires-Dist: pyright; extra == "dev"
248
+ Requires-Dist: pyright==1.1.406; extra == "dev"
249
249
  Requires-Dist: pytest; extra == "dev"
250
250
  Requires-Dist: pytest-asyncio; extra == "dev"
251
251
  Requires-Dist: pytest-cov; extra == "dev"
@@ -109,6 +109,7 @@ src/dodal/beamlines/i03.py
109
109
  src/dodal/beamlines/i04.py
110
110
  src/dodal/beamlines/i05.py
111
111
  src/dodal/beamlines/i05_1.py
112
+ src/dodal/beamlines/i07.py
112
113
  src/dodal/beamlines/i09.py
113
114
  src/dodal/beamlines/i09_1.py
114
115
  src/dodal/beamlines/i09_2.py
@@ -260,10 +261,14 @@ src/dodal/devices/i04/murko_results.py
260
261
  src/dodal/devices/i04/transfocator.py
261
262
  src/dodal/devices/i05/__init__.py
262
263
  src/dodal/devices/i05/enums.py
264
+ src/dodal/devices/i07/__init__.py
265
+ src/dodal/devices/i07/dcm.py
263
266
  src/dodal/devices/i09/__init__.py
264
267
  src/dodal/devices/i09/enums.py
265
268
  src/dodal/devices/i09_1/__init__.py
266
269
  src/dodal/devices/i09_1/enums.py
270
+ src/dodal/devices/i09_1_shared/__init__.py
271
+ src/dodal/devices/i09_1_shared/hard_undulator_functions.py
267
272
  src/dodal/devices/i10/__init__.py
268
273
  src/dodal/devices/i10/diagnostics.py
269
274
  src/dodal/devices/i10/i10_apple2.py
@@ -384,6 +389,9 @@ src/dodal/testing/__init__.py
384
389
  src/dodal/testing/setup.py
385
390
  src/dodal/testing/electron_analyser/__init__.py
386
391
  src/dodal/testing/electron_analyser/device_factory.py
392
+ src/dodal/testing/fixtures/__init__.py
393
+ src/dodal/testing/fixtures/run_engine.py
394
+ src/dodal/testing/fixtures/utils.py
387
395
  system_tests/__init__.py
388
396
  system_tests/test_adsim.py
389
397
  system_tests/test_cli.py
@@ -504,7 +512,14 @@ tests/devices/i03/test_undulator_dcm.py
504
512
  tests/devices/i04/__init__.py
505
513
  tests/devices/i04/test_murko_results.py
506
514
  tests/devices/i04/test_transfocator.py
515
+ tests/devices/i07/__init__.py
516
+ tests/devices/i07/test_dcm.py
507
517
  tests/devices/i09/__init__.py
518
+ tests/devices/i09_1/__init__.py
519
+ tests/devices/i09_1_shared/__init__.py
520
+ tests/devices/i09_1_shared/test_undulator_functions.py
521
+ tests/devices/i09_1_shared/test_data/__init__.py
522
+ tests/devices/i09_1_shared/test_data/test_lookuptable_i09_hu.txt
508
523
  tests/devices/i10/__init__.py
509
524
  tests/devices/i10/test_i10_apple2.py
510
525
  tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv
@@ -1,6 +1,6 @@
1
1
  click
2
2
  ophyd
3
- ophyd-async[ca,pva]>=0.13.2
3
+ ophyd-async[ca,pva]>=0.13.5
4
4
  bluesky>=1.14.5
5
5
  pyepics
6
6
  dataclasses-json
@@ -31,7 +31,7 @@ pipdeptree
31
31
  pre-commit
32
32
  psutil
33
33
  pydata-sphinx-theme>=0.12
34
- pyright
34
+ pyright==1.1.406
35
35
  pytest
36
36
  pytest-asyncio
37
37
  pytest-cov
@@ -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.63.0'
32
- __version_tuple__ = version_tuple = (1, 63, 0)
31
+ __version__ = version = '1.64.0'
32
+ __version_tuple__ = version_tuple = (1, 64, 0)
33
33
 
34
- __commit_id__ = commit_id = 'g8bb309b63'
34
+ __commit_id__ = commit_id = 'g15623816b'
@@ -0,0 +1,21 @@
1
+ from dodal.common.beamlines.beamline_utils import device_factory
2
+ from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
3
+ from dodal.devices.i07.dcm import DCM
4
+ from dodal.log import set_beamline as set_log_beamline
5
+ from dodal.utils import BeamlinePrefix, get_beamline_name
6
+
7
+ BL = get_beamline_name("i07")
8
+ set_log_beamline(BL)
9
+ set_utils_beamline(BL)
10
+ PREFIX = BeamlinePrefix(BL)
11
+
12
+
13
+ @device_factory()
14
+ def dcm() -> DCM:
15
+ """Instantiate DCM using two PV bases"""
16
+ dcm = DCM(
17
+ f"{PREFIX.beamline_prefix}-MO-DCM-01:",
18
+ f"{PREFIX.beamline_prefix}-DI-DCM-01:",
19
+ "dcm",
20
+ )
21
+ return dcm
@@ -43,7 +43,7 @@ def dcm() -> DoubleCrystalMonochromatorWithDSpacing:
43
43
 
44
44
  @device_factory()
45
45
  def energy_source() -> DualEnergySource:
46
- return DualEnergySource(dcm().energy_in_ev, pgm().energy.user_readback)
46
+ return DualEnergySource(dcm().energy_in_eV, pgm().energy.user_readback)
47
47
 
48
48
 
49
49
  # Connect will work again after this work completed
@@ -34,7 +34,7 @@ def dcm() -> DoubleCrystalMonochromatorWithDSpacing:
34
34
 
35
35
  @device_factory()
36
36
  def energy_source() -> EnergySource:
37
- return EnergySource(dcm().energy_in_ev)
37
+ return EnergySource(dcm().energy_in_eV)
38
38
 
39
39
 
40
40
  # Connect will work again after this work completed
@@ -2,6 +2,11 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
+ from dodal.devices.apple2_undulator import (
6
+ Apple2,
7
+ UndulatorGap,
8
+ UndulatorPhaseAxes,
9
+ )
5
10
  from dodal.devices.i09.enums import Grating
6
11
  from dodal.devices.pgm import PGM
7
12
  from dodal.devices.synchrotron import Synchrotron
@@ -22,3 +27,28 @@ def synchrotron() -> Synchrotron:
22
27
  @device_factory()
23
28
  def pgm() -> PGM:
24
29
  return PGM(prefix=f"{PREFIX.beamline_prefix}-MO-PGM-01:", grating=Grating)
30
+
31
+
32
+ @device_factory()
33
+ def jid_gap() -> UndulatorGap:
34
+ return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
35
+
36
+
37
+ @device_factory()
38
+ def jid_phase() -> UndulatorPhaseAxes:
39
+ return UndulatorPhaseAxes(
40
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
41
+ top_outer="PUO",
42
+ top_inner="PUI",
43
+ btm_inner="PLI",
44
+ btm_outer="PLO",
45
+ )
46
+
47
+
48
+ @device_factory()
49
+ def jid() -> Apple2:
50
+ """I09 soft x-ray insertion device."""
51
+ return Apple2(
52
+ id_gap=jid_gap(),
53
+ id_phase=jid_phase(),
54
+ )
@@ -80,22 +80,35 @@ I10_CONF_CLIENT = ConfigServer(url="https://daq-config.diamond.ac.uk")
80
80
  LOOK_UPTABLE_DIR = "/dls_sw/i10/software/gda/workspace_git/gda-diamond.git/configurations/i10-shared/lookupTables/"
81
81
 
82
82
 
83
+ @device_factory()
84
+ def idd_gap() -> UndulatorGap:
85
+ return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
86
+
87
+
88
+ @device_factory()
89
+ def idd_phase() -> UndulatorPhaseAxes:
90
+ return UndulatorPhaseAxes(
91
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
92
+ top_outer="RPQ1",
93
+ top_inner="RPQ2",
94
+ btm_inner="RPQ3",
95
+ btm_outer="RPQ4",
96
+ )
97
+
98
+
99
+ @device_factory()
100
+ def idd_jaw_phase() -> UndulatorJawPhase:
101
+ return UndulatorJawPhase(
102
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
103
+ move_pv="RPQ1",
104
+ )
105
+
106
+
83
107
  @device_factory()
84
108
  def idd() -> I10Apple2:
85
109
  """i10 downstream insertion device:"""
86
110
  return I10Apple2(
87
- id_gap=UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:"),
88
- id_phase=UndulatorPhaseAxes(
89
- prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
90
- top_outer="RPQ1",
91
- top_inner="RPQ2",
92
- btm_inner="RPQ3",
93
- btm_outer="RPQ4",
94
- ),
95
- id_jaw_phase=UndulatorJawPhase(
96
- prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
97
- move_pv="RPQ1",
98
- ),
111
+ id_gap=idd_gap(), id_phase=idd_phase(), id_jaw_phase=idd_jaw_phase()
99
112
  )
100
113
 
101
114
 
@@ -131,22 +144,35 @@ def energy_dd() -> BeamEnergy:
131
144
  return BeamEnergy(id_energy=idd_energy(), mono=pgm().energy)
132
145
 
133
146
 
147
+ @device_factory()
148
+ def idu_gap() -> UndulatorGap:
149
+ return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-21:")
150
+
151
+
152
+ @device_factory()
153
+ def idu_phase() -> UndulatorPhaseAxes:
154
+ return UndulatorPhaseAxes(
155
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-21:",
156
+ top_outer="RPQ1",
157
+ top_inner="RPQ2",
158
+ btm_inner="RPQ3",
159
+ btm_outer="RPQ4",
160
+ )
161
+
162
+
163
+ @device_factory()
164
+ def idu_jaw_phase() -> UndulatorJawPhase:
165
+ return UndulatorJawPhase(
166
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-21:",
167
+ move_pv="RPQ1",
168
+ )
169
+
170
+
134
171
  @device_factory()
135
172
  def idu() -> I10Apple2:
136
173
  """i10 upstream insertion device"""
137
174
  return I10Apple2(
138
- id_gap=UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-21:"),
139
- id_phase=UndulatorPhaseAxes(
140
- prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-21:",
141
- top_outer="RPQ1",
142
- top_inner="RPQ2",
143
- btm_inner="RPQ3",
144
- btm_outer="RPQ4",
145
- ),
146
- id_jaw_phase=UndulatorJawPhase(
147
- prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-21:",
148
- move_pv="RPQ1",
149
- ),
175
+ id_gap=idu_gap(), id_phase=idu_phase(), id_jaw_phase=idu_jaw_phase()
150
176
  )
151
177
 
152
178
 
@@ -47,18 +47,28 @@ def pgm() -> PGM:
47
47
  )
48
48
 
49
49
 
50
+ @device_factory()
51
+ def id_gap() -> UndulatorGap:
52
+ return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
53
+
54
+
55
+ @device_factory()
56
+ def id_phase() -> UndulatorPhaseAxes:
57
+ return UndulatorPhaseAxes(
58
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
59
+ top_outer="RPQ1",
60
+ top_inner="RPQ2",
61
+ btm_inner="RPQ3",
62
+ btm_outer="RPQ4",
63
+ )
64
+
65
+
50
66
  @device_factory(skip=True)
51
67
  def id() -> Apple2:
52
68
  """I17 insertion device:"""
53
69
  return Apple2(
54
- id_gap=UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:"),
55
- id_phase=UndulatorPhaseAxes(
56
- prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
57
- top_outer="RPQ1",
58
- top_inner="RPQ2",
59
- btm_inner="RPQ3",
60
- btm_outer="RPQ4",
61
- ),
70
+ id_gap=id_gap(),
71
+ id_phase=id_phase(),
62
72
  )
63
73
 
64
74
 
@@ -2,6 +2,11 @@ from dodal.common.beamlines.beamline_utils import (
2
2
  device_factory,
3
3
  )
4
4
  from dodal.common.beamlines.beamline_utils import set_beamline as set_utils_beamline
5
+ from dodal.devices.apple2_undulator import (
6
+ Apple2,
7
+ UndulatorGap,
8
+ UndulatorPhaseAxes,
9
+ )
5
10
  from dodal.devices.i21 import Grating
6
11
  from dodal.devices.pgm import PGM
7
12
  from dodal.devices.synchrotron import Synchrotron
@@ -9,7 +14,7 @@ from dodal.log import set_beamline as set_log_beamline
9
14
  from dodal.utils import BeamlinePrefix, get_beamline_name
10
15
 
11
16
  BL = get_beamline_name("i21")
12
- PREFIX = BeamlinePrefix(BL, suffix="I")
17
+ PREFIX = BeamlinePrefix(BL)
13
18
  set_log_beamline(BL)
14
19
  set_utils_beamline(BL)
15
20
 
@@ -25,3 +30,28 @@ def pgm() -> PGM:
25
30
  prefix=f"{PREFIX.beamline_prefix}-OP-PGM-01:",
26
31
  grating=Grating,
27
32
  )
33
+
34
+
35
+ @device_factory()
36
+ def id_gap() -> UndulatorGap:
37
+ return UndulatorGap(prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:")
38
+
39
+
40
+ @device_factory()
41
+ def id_phase() -> UndulatorPhaseAxes:
42
+ return UndulatorPhaseAxes(
43
+ prefix=f"{PREFIX.insertion_prefix}-MO-SERVC-01:",
44
+ top_outer="PUO",
45
+ top_inner="PUI",
46
+ btm_inner="PLI",
47
+ btm_outer="PLO",
48
+ )
49
+
50
+
51
+ @device_factory()
52
+ def id() -> Apple2:
53
+ """I21 insertion device."""
54
+ return Apple2(
55
+ id_gap=id_gap(),
56
+ id_phase=id_phase(),
57
+ )
@@ -4,7 +4,7 @@ from pathlib import Path
4
4
 
5
5
  import click
6
6
  from bluesky.run_engine import RunEngine
7
- from ophyd_async.core import NotConnected, StaticPathProvider, UUIDFilenameProvider
7
+ from ophyd_async.core import NotConnectedError, StaticPathProvider, UUIDFilenameProvider
8
8
  from ophyd_async.plan_stubs import ensure_connected
9
9
 
10
10
  from dodal.beamlines import all_beamline_names, module_name_for_beamline
@@ -79,7 +79,7 @@ def connect(beamline: str, all: bool, sim_backend: bool) -> None:
79
79
  # If exceptions have occurred, this will print details of the relevant PVs
80
80
  exceptions = {**instance_exceptions, **connect_exceptions}
81
81
  if len(exceptions) > 0:
82
- raise NotConnected(exceptions)
82
+ raise NotConnectedError(exceptions)
83
83
 
84
84
 
85
85
  def _report_successful_devices(
@@ -113,7 +113,7 @@ def _connect_devices(
113
113
  # Connect ophyd-async devices
114
114
  try:
115
115
  run_engine(ensure_connected(*ophyd_async_devices.values(), mock=sim_backend))
116
- except NotConnected as ex:
116
+ except NotConnectedError as ex:
117
117
  exceptions = {**exceptions, **ex.sub_errors}
118
118
 
119
119
  # Only return the subset of devices that haven't raised an exception
@@ -326,8 +326,8 @@ class Apple2(StandardReadable, Movable):
326
326
  Name of the device.
327
327
  """
328
328
  with self.add_children_as_readables():
329
- self.gap = id_gap
330
- self.phase = id_phase
329
+ self.gap = Reference(id_gap)
330
+ self.phase = Reference(id_phase)
331
331
  super().__init__(name=name)
332
332
 
333
333
  @AsyncStatus.wrap
@@ -338,25 +338,27 @@ class Apple2(StandardReadable, Movable):
338
338
  """
339
339
 
340
340
  # Only need to check gap as the phase motors share both fault and gate with gap.
341
- await self.gap.raise_if_cannot_move()
341
+ await self.gap().raise_if_cannot_move()
342
342
  await asyncio.gather(
343
- self.phase.top_outer.user_setpoint.set(value=id_motor_values.top_outer),
344
- self.phase.top_inner.user_setpoint.set(value=id_motor_values.top_inner),
345
- self.phase.btm_inner.user_setpoint.set(value=id_motor_values.btm_inner),
346
- self.phase.btm_outer.user_setpoint.set(value=id_motor_values.btm_outer),
347
- self.gap.user_setpoint.set(value=id_motor_values.gap),
343
+ self.phase().top_outer.user_setpoint.set(value=id_motor_values.top_outer),
344
+ self.phase().top_inner.user_setpoint.set(value=id_motor_values.top_inner),
345
+ self.phase().btm_inner.user_setpoint.set(value=id_motor_values.btm_inner),
346
+ self.phase().btm_outer.user_setpoint.set(value=id_motor_values.btm_outer),
347
+ self.gap().user_setpoint.set(value=id_motor_values.gap),
348
348
  )
349
349
  timeout = np.max(
350
- await asyncio.gather(self.gap.get_timeout(), self.phase.get_timeout())
350
+ await asyncio.gather(self.gap().get_timeout(), self.phase().get_timeout())
351
351
  )
352
352
  LOGGER.info(
353
353
  f"Moving f{self.name} apple2 motors to {id_motor_values}, timeout = {timeout}"
354
354
  )
355
355
  await asyncio.gather(
356
- self.gap.set_move.set(value=1, wait=False, timeout=timeout),
357
- self.phase.set_move.set(value=1, wait=False, timeout=timeout),
356
+ self.gap().set_move.set(value=1, wait=False, timeout=timeout),
357
+ self.phase().set_move.set(value=1, wait=False, timeout=timeout),
358
+ )
359
+ await wait_for_value(
360
+ self.gap().gate, UndulatorGateStatus.CLOSE, timeout=timeout
358
361
  )
359
- await wait_for_value(self.gap.gate, UndulatorGateStatus.CLOSE, timeout=timeout)
360
362
 
361
363
 
362
364
  class EnergyMotorConvertor(Protocol):
@@ -448,11 +450,11 @@ class Apple2Controller(abc.ABC, StandardReadable, Generic[Apple2Type]):
448
450
  raw_to_derived=self._read_pol,
449
451
  set_derived=self._set_pol,
450
452
  pol=self.polarisation_setpoint,
451
- top_outer=self.apple2().phase.top_outer.user_readback,
452
- top_inner=self.apple2().phase.top_inner.user_readback,
453
- btm_inner=self.apple2().phase.btm_inner.user_readback,
454
- btm_outer=self.apple2().phase.btm_outer.user_readback,
455
- gap=self.apple2().gap.user_readback,
453
+ top_outer=self.apple2().phase().top_outer.user_readback,
454
+ top_inner=self.apple2().phase().top_inner.user_readback,
455
+ btm_inner=self.apple2().phase().btm_inner.user_readback,
456
+ btm_outer=self.apple2().phase().btm_outer.user_readback,
457
+ gap=self.apple2().gap().user_readback,
456
458
  )
457
459
  super().__init__(name)
458
460
 
@@ -62,7 +62,7 @@ class ChannelCutMonochromator(
62
62
  )
63
63
 
64
64
  # energy derived signal as property
65
- self.energy_in_ev = derived_signal_r(
65
+ self.energy_in_eV = derived_signal_r(
66
66
  self._convert_pos_to_ev, pos_signal=self.crystal
67
67
  )
68
68
  super().__init__(name=name)
@@ -53,9 +53,9 @@ class DoubleCrystalMonochromatorBase(StandardReadable, Generic[Xtal_1, Xtal_2]):
53
53
  ) -> None:
54
54
  with self.add_children_as_readables():
55
55
  # Virtual motor PV's which set the physical motors so that the DCM produces requested energy
56
- self.energy_in_kev = Motor(prefix + "ENERGY")
57
- self.energy_in_ev = derived_signal_r(
58
- self._convert_keV_to_eV, energy_signal=self.energy_in_kev.user_readback
56
+ self.energy_in_keV = Motor(prefix + "ENERGY")
57
+ self.energy_in_eV = derived_signal_r(
58
+ self._convert_keV_to_eV, energy_signal=self.energy_in_keV.user_readback
59
59
  )
60
60
 
61
61
  self._make_crystals(prefix, xtal_1, xtal_2)
@@ -58,7 +58,7 @@ class UndulatorDCM(StandardReadable, Movable[float]):
58
58
  async def set(self, value: float):
59
59
  await self.undulator_ref().raise_if_not_enabled()
60
60
  await asyncio.gather(
61
- self.dcm_ref().energy_in_kev.set(value, timeout=ENERGY_TIMEOUT_S),
61
+ self.dcm_ref().energy_in_keV.set(value, timeout=ENERGY_TIMEOUT_S),
62
62
  self.undulator_ref().set(value),
63
63
  )
64
64