dls-dodal 1.68.0__tar.gz → 1.69.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 (711) hide show
  1. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.copier-answers.yml +3 -3
  2. dls_dodal-1.69.0/.devcontainer/devcontainer.json +72 -0
  3. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/CONTRIBUTING.md +1 -1
  4. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/_dist.yml +6 -5
  5. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/_docs.yml +6 -3
  6. dls_dodal-1.69.0/.github/workflows/_test.yml +62 -0
  7. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/_tox.yml +4 -6
  8. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/ci.yml +2 -7
  9. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/periodic.yml +1 -1
  10. dls_dodal-1.69.0/.gitleaks.toml +19 -0
  11. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.pre-commit-config.yaml +8 -0
  12. dls_dodal-1.69.0/.python-version +1 -0
  13. dls_dodal-1.69.0/Dockerfile +8 -0
  14. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/PKG-INFO +1 -31
  15. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/coverage.md +1 -1
  16. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/dev-install.md +5 -6
  17. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/lint.md +1 -1
  18. dls_dodal-1.69.0/docs/how-to/lock-requirements.md +43 -0
  19. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/run-tests.md +5 -2
  20. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/static-analysis.md +1 -1
  21. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/pyproject.toml +98 -27
  22. dls_dodal-1.69.0/renovate.json +37 -0
  23. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dls_dodal.egg-info/PKG-INFO +1 -31
  24. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dls_dodal.egg-info/SOURCES.txt +19 -4
  25. dls_dodal-1.69.0/src/dls_dodal.egg-info/requires.txt +19 -0
  26. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/_version.py +3 -3
  27. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/adsim.py +30 -23
  28. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i02_1.py +14 -42
  29. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i02_2.py +5 -11
  30. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i03.py +4 -1
  31. dls_dodal-1.69.0/src/dodal/beamlines/i03_supervisor.py +19 -0
  32. dls_dodal-1.69.0/src/dodal/beamlines/i04.py +307 -0
  33. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i05.py +8 -0
  34. dls_dodal-1.69.0/src/dodal/beamlines/i06_1.py +24 -0
  35. dls_dodal-1.69.0/src/dodal/beamlines/i09.py +103 -0
  36. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i09_1.py +8 -0
  37. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i09_2.py +4 -4
  38. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i16.py +11 -0
  39. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i20_1.py +14 -0
  40. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i21.py +12 -4
  41. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i23.py +19 -25
  42. dls_dodal-1.69.0/src/dodal/beamlines/i24.py +168 -0
  43. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/p60.py +11 -1
  44. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/__init__.py +2 -1
  45. dls_dodal-1.69.0/src/dodal/common/maths.py +130 -0
  46. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/eiger.py +29 -14
  47. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/__init__.py +3 -3
  48. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/base_controller.py +19 -8
  49. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/base_enums.py +0 -5
  50. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/base_region.py +2 -1
  51. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/energy_sources.py +27 -26
  52. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/specs/specs_detector.py +7 -6
  53. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_detector.py +7 -6
  54. dls_dodal-1.69.0/src/dodal/devices/fast_shutter.py +152 -0
  55. dls_dodal-1.69.0/src/dodal/devices/i04/beam_centre.py +84 -0
  56. dls_dodal-1.69.0/src/dodal/devices/i04/max_pixel.py +25 -0
  57. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i04/murko_results.py +18 -3
  58. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/i10_apple2.py +6 -6
  59. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i17/i17_apple2.py +6 -6
  60. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/commissioning_jungfrau.py +9 -10
  61. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/insertion_device/__init__.py +12 -8
  62. dls_dodal-1.69.0/src/dodal/devices/insertion_device/apple2_controller.py +380 -0
  63. dls_dodal-1.69.0/src/dodal/devices/insertion_device/apple2_undulator.py +430 -0
  64. dls_dodal-1.69.0/src/dodal/devices/insertion_device/energy.py +88 -0
  65. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/insertion_device/energy_motor_lookup.py +1 -1
  66. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/insertion_device/lookup_table_models.py +2 -2
  67. dls_dodal-1.69.0/src/dodal/devices/insertion_device/polarisation.py +36 -0
  68. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/oav_detector.py +66 -1
  69. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/utils.py +17 -0
  70. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/robot.py +35 -18
  71. dls_dodal-1.69.0/src/dodal/devices/selectable_source.py +38 -0
  72. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zebra/zebra.py +15 -0
  73. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +1 -0
  74. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -1
  75. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/system_tests/test_adsim.py +3 -15
  76. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/system_tests/test_cli.py +2 -1
  77. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/beamlines/test_beamline_utils.py +24 -3
  78. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/test_maths.py +47 -0
  79. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/conftest.py +0 -1
  80. dls_dodal-1.69.0/tests/devices/electron_analyser/base/test_base_controller.py +210 -0
  81. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/base/test_energy_sources.py +7 -6
  82. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/conftest.py +13 -3
  83. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/specs/test_specs_region.py +2 -1
  84. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/vgscienta/test_vgsicenta_region.py +2 -1
  85. dls_dodal-1.69.0/tests/devices/i04/test_beam_centre.py +125 -0
  86. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i04/test_max_pixel.py +6 -21
  87. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i04/test_murko_results.py +39 -0
  88. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_2_shared/test_i09_apple2.py +32 -32
  89. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_i10_apple2.py +13 -11
  90. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i17/test_i17_apple2.py +5 -5
  91. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i24/test_commissioning_jungfrau.py +2 -2
  92. dls_dodal-1.69.0/tests/devices/insertion_device/conftest.py +144 -0
  93. dls_dodal-1.69.0/tests/devices/insertion_device/test_apple2_controller.py +147 -0
  94. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/insertion_device/test_apple2_undulator.py +72 -28
  95. dls_dodal-1.69.0/tests/devices/insertion_device/test_energy.py +51 -0
  96. dls_dodal-1.69.0/tests/devices/insertion_device/test_polarisation.py +48 -0
  97. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/insertion_device/util.py +3 -5
  98. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_snapshots.py +3 -1
  99. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_bart_robot.py +29 -21
  100. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_eiger.py +4 -1
  101. dls_dodal-1.69.0/tests/devices/test_fast_shutters.py +181 -0
  102. dls_dodal-1.69.0/tests/devices/test_selectable_source.py +44 -0
  103. dls_dodal-1.69.0/tests/test_data/scintillator_with_beam.jpg +0 -0
  104. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_utils.py +0 -24
  105. dls_dodal-1.69.0/tests/testing/fixtures/__init__.py +0 -0
  106. dls_dodal-1.69.0/uv.lock +3968 -0
  107. dls_dodal-1.68.0/.devcontainer/devcontainer.json +0 -46
  108. dls_dodal-1.68.0/.github/actions/install_requirements/action.yml +0 -35
  109. dls_dodal-1.68.0/.github/dependabot.yml +0 -28
  110. dls_dodal-1.68.0/.github/scripts/check_test_durations.py +0 -30
  111. dls_dodal-1.68.0/.github/workflows/_test.yml +0 -88
  112. dls_dodal-1.68.0/Dockerfile +0 -13
  113. dls_dodal-1.68.0/docs/how-to/lock-requirements.md +0 -39
  114. dls_dodal-1.68.0/src/dls_dodal.egg-info/requires.txt +0 -50
  115. dls_dodal-1.68.0/src/dodal/beamlines/i04.py +0 -412
  116. dls_dodal-1.68.0/src/dodal/beamlines/i09.py +0 -59
  117. dls_dodal-1.68.0/src/dodal/beamlines/i24.py +0 -218
  118. dls_dodal-1.68.0/src/dodal/common/maths.py +0 -50
  119. dls_dodal-1.68.0/src/dodal/devices/fast_shutter.py +0 -69
  120. dls_dodal-1.68.0/src/dodal/devices/i04/max_pixel.py +0 -38
  121. dls_dodal-1.68.0/src/dodal/devices/insertion_device/apple2_undulator.py +0 -809
  122. dls_dodal-1.68.0/tests/devices/electron_analyser/base/test_base_controller.py +0 -115
  123. dls_dodal-1.68.0/tests/devices/insertion_device/conftest.py +0 -44
  124. dls_dodal-1.68.0/tests/devices/test_fast_shutters.py +0 -47
  125. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/CODEOWNERS +0 -0
  126. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  127. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/pages/index.html +0 -0
  128. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/pages/make_switcher.py +0 -0
  129. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/_pypi.yml +0 -0
  130. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.github/workflows/_release.yml +0 -0
  131. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.gitignore +0 -0
  132. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.vscode/extensions.json +0 -0
  133. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.vscode/launch.json +0 -0
  134. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.vscode/settings.json +0 -0
  135. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/.vscode/tasks.json +0 -0
  136. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/LICENSE +0 -0
  137. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/README.md +0 -0
  138. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/catalog-info.yaml +0 -0
  139. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/_templates/autosummary/class.rst +0 -0
  140. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/_templates/autosummary/module.rst +0 -0
  141. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/_templates/custom-module-template.rst +0 -0
  142. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
  143. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/assets/zocalo.png +0 -0
  144. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/conf.py +0 -0
  145. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  146. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  147. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  148. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  149. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  150. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/0006-devices-shared-between-endstations.md +0 -0
  151. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions/COPYME +0 -0
  152. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/decisions.md +0 -0
  153. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/reviews.md +0 -0
  154. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/umls/apple2_design.png +0 -0
  155. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations/umls/i10_id_design.png +0 -0
  156. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/explanations.md +0 -0
  157. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/genindex.md +0 -0
  158. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/build-docs.md +0 -0
  159. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/contribute.md +0 -0
  160. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/create-beamline.md +0 -0
  161. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/create-device.md +0 -0
  162. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/excalidraw.md +0 -0
  163. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/external-io-devices.md +0 -0
  164. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/make-release.md +0 -0
  165. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/move-code.md +0 -0
  166. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/pypi.md +0 -0
  167. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/tidy-docs.md +0 -0
  168. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/update-template.md +0 -0
  169. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/write-tests.md +0 -0
  170. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to/zocalo.md +0 -0
  171. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/how-to.md +0 -0
  172. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/images/dls-logo.svg +0 -0
  173. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/images/excalidraw-example.svg +0 -0
  174. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/index.md +0 -0
  175. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/reference/api.md +0 -0
  176. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/reference/device-standards.md +0 -0
  177. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/reference/standards.md +0 -0
  178. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/reference.md +0 -0
  179. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/tutorials/get_started.md +0 -0
  180. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/tutorials/installation.md +0 -0
  181. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/docs/tutorials.md +0 -0
  182. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/pull_request_template.md +0 -0
  183. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/setup.cfg +0 -0
  184. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/__init__.py +0 -0
  185. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  186. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  187. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  188. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/__init__.py +0 -0
  189. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/__main__.py +0 -0
  190. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  191. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
  192. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/README.md +0 -0
  193. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/__init__.py +0 -0
  194. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/aithre.py +0 -0
  195. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/b01_1.py +0 -0
  196. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/b07.py +0 -0
  197. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/b07_1.py +0 -0
  198. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/b16.py +0 -0
  199. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/b18.py +0 -0
  200. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/b21.py +0 -0
  201. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i05_1.py +0 -0
  202. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i06.py +0 -0
  203. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i07.py +0 -0
  204. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i10.py +0 -0
  205. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i10_1.py +0 -0
  206. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i10_optics.py +0 -0
  207. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i11.py +0 -0
  208. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i13_1.py +0 -0
  209. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i15.py +0 -0
  210. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i15_1.py +0 -0
  211. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i17.py +0 -0
  212. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i18.py +0 -0
  213. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i19_1.py +0 -0
  214. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i19_2.py +0 -0
  215. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i19_optics.py +0 -0
  216. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/i22.py +0 -0
  217. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/k07.py +0 -0
  218. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/k11.py +0 -0
  219. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/p38.py +0 -0
  220. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/p45.py +0 -0
  221. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/p99.py +0 -0
  222. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/beamlines/training_rig.py +0 -0
  223. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/cli.py +0 -0
  224. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/beamlines/__init__.py +0 -0
  225. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/beamlines/beamline_parameters.py +0 -0
  226. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/beamlines/beamline_utils.py +0 -0
  227. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/beamlines/commissioning_mode.py +0 -0
  228. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  229. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/coordination.py +0 -0
  230. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/crystal_metadata.py +0 -0
  231. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/data_util.py +0 -0
  232. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/device_utils.py +0 -0
  233. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/enums.py +0 -0
  234. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/types.py +0 -0
  235. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/udc_directory_provider.py +0 -0
  236. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/visit.py +0 -0
  237. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/common/watcher_utils.py +0 -0
  238. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/device_manager.py +0 -0
  239. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/__init__.py +0 -0
  240. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
  241. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  242. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +0 -0
  243. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/aperture.py +0 -0
  244. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/aperturescatterguard.py +0 -0
  245. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/areadetector/__init__.py +0 -0
  246. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/areadetector/plugins/__init__.py +0 -0
  247. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/areadetector/plugins/cam.py +0 -0
  248. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/areadetector/plugins/mjpg.py +0 -0
  249. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/attenuator/__init__.py +0 -0
  250. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  251. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/attenuator/filter.py +0 -0
  252. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  253. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b07/__init__.py +0 -0
  254. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b07/enums.py +0 -0
  255. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b07_1/__init__.py +0 -0
  256. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
  257. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b07_1/enums.py +0 -0
  258. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b16/__init__.py +0 -0
  259. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/b16/detector.py +0 -0
  260. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/backlight.py +0 -0
  261. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/baton.py +0 -0
  262. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/beamsize/__init__.py +0 -0
  263. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/beamsize/beamsize.py +0 -0
  264. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/bimorph_mirror.py +0 -0
  265. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/collimation_table.py +0 -0
  266. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/common_dcm.py +0 -0
  267. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/controllers.py +0 -0
  268. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/cryostream.py +0 -0
  269. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  270. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  271. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  272. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/current_amplifiers/femto.py +0 -0
  273. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  274. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  275. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/detector/__init__.py +0 -0
  276. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  277. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  278. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  279. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/detector/detector.py +0 -0
  280. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/detector/detector_motion.py +0 -0
  281. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/diamond_filter.py +0 -0
  282. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/eiger_odin.py +0 -0
  283. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/__init__.py +0 -0
  284. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/base_detector.py +0 -0
  285. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/base_driver_io.py +0 -0
  286. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/base/base_util.py +0 -0
  287. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  288. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/specs/specs_driver_io.py +0 -0
  289. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/specs/specs_enums.py +0 -0
  290. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/specs/specs_region.py +0 -0
  291. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +0 -0
  292. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_driver_io.py +0 -0
  293. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_enums.py +0 -0
  294. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/electron_analyser/vgscienta/vgscienta_region.py +0 -0
  295. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/eurotherm.py +0 -0
  296. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  297. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/fluorescence_detector_motion.py +0 -0
  298. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/flux.py +0 -0
  299. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/focusing_mirror.py +0 -0
  300. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/hutch_shutter.py +0 -0
  301. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i02_1/__init__.py +0 -0
  302. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i02_1/fast_grid_scan.py +0 -0
  303. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i02_1/sample_motors.py +0 -0
  304. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i02_2/__init__.py +0 -0
  305. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i03/__init__.py +0 -0
  306. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i03/beamsize.py +0 -0
  307. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i03/constants.py +0 -0
  308. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i03/dcm.py +0 -0
  309. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i03/undulator_dcm.py +0 -0
  310. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i04/__init__.py +0 -0
  311. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i04/beamsize.py +0 -0
  312. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i04/constants.py +0 -0
  313. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i04/transfocator.py +0 -0
  314. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i05/__init__.py +0 -0
  315. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i05/enums.py +0 -0
  316. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i07/__init__.py +0 -0
  317. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i07/dcm.py +0 -0
  318. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i07/id.py +0 -0
  319. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09/__init__.py +0 -0
  320. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09/enums.py +0 -0
  321. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_1/__init__.py +0 -0
  322. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_1/enums.py +0 -0
  323. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_1_shared/__init__.py +0 -0
  324. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_1_shared/hard_energy.py +0 -0
  325. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_1_shared/hard_undulator_functions.py +0 -0
  326. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_2_shared/__init__.py +0 -0
  327. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i09_2_shared/i09_apple2.py +0 -0
  328. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/__init__.py +0 -0
  329. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/diagnostics.py +0 -0
  330. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  331. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/mirrors.py +0 -0
  332. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/rasor/__init__.py +0 -0
  333. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  334. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  335. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  336. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i10/slits.py +0 -0
  337. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i11/__init__.py +0 -0
  338. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i11/cyberstar_blower.py +0 -0
  339. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i11/diff_stages.py +0 -0
  340. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i11/mythen.py +0 -0
  341. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i11/nx100robot.py +0 -0
  342. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i11/spinner.py +0 -0
  343. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i13_1/__init__.py +0 -0
  344. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  345. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i13_1/merlin_controller.py +0 -0
  346. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/__init__.py +0 -0
  347. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/dcm.py +0 -0
  348. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/focussing_mirror.py +0 -0
  349. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/jack.py +0 -0
  350. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/laue.py +0 -0
  351. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/motors.py +0 -0
  352. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/multilayer_mirror.py +0 -0
  353. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i15/rail.py +0 -0
  354. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i17/__init__.py +0 -0
  355. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i18/__init__.py +0 -0
  356. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i18/diode.py +0 -0
  357. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i18/kb_mirror.py +0 -0
  358. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/__init__.py +0 -0
  359. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/access_controlled/__init__.py +0 -0
  360. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/access_controlled/attenuator_motor_squad.py +0 -0
  361. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/access_controlled/blueapi_device.py +0 -0
  362. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/access_controlled/hutch_access.py +0 -0
  363. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/access_controlled/shutter.py +0 -0
  364. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/backlight.py +0 -0
  365. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/beamstop.py +0 -0
  366. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/diffractometer.py +0 -0
  367. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/mapt_configuration.py +0 -0
  368. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i19/pin_col_stages.py +0 -0
  369. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  370. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i21/__init__.py +0 -0
  371. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i21/enums.py +0 -0
  372. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i22/__init__.py +0 -0
  373. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i22/dcm.py +0 -0
  374. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i22/fswitch.py +0 -0
  375. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i22/nxsas.py +0 -0
  376. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/__init__.py +0 -0
  377. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/aperture.py +0 -0
  378. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/beam_center.py +0 -0
  379. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/beamstop.py +0 -0
  380. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/dcm.py +0 -0
  381. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/dual_backlight.py +0 -0
  382. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  383. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/pmac.py +0 -0
  384. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/i24/vgonio.py +0 -0
  385. /dls_dodal-1.68.0/src/dodal/devices/insertion_device/id_enum.py → /dls_dodal-1.69.0/src/dodal/devices/insertion_device/enum.py +0 -0
  386. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/ipin.py +0 -0
  387. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/linkam3.py +0 -0
  388. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/motors.py +0 -0
  389. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/mx_phase1/__init__.py +0 -0
  390. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/mx_phase1/beamstop.py +0 -0
  391. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/__init__.py +0 -0
  392. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  393. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  394. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  395. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -0
  396. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  397. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  398. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/snapshots/__init__.py +0 -0
  399. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  400. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  401. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  402. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  403. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p45.py +0 -0
  404. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p60/__init__.py +0 -0
  405. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p60/enums.py +0 -0
  406. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p60/lab_xray_source.py +0 -0
  407. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p99/__init__.py +0 -0
  408. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  409. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  410. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/pgm.py +0 -0
  411. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/positioner.py +0 -0
  412. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/pressure_jump_cell.py +0 -0
  413. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/qbpm.py +0 -0
  414. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  415. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/scintillator.py +0 -0
  416. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/slits.py +0 -0
  417. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/smargon.py +0 -0
  418. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/status.py +0 -0
  419. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/synchrotron.py +0 -0
  420. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/temperture_controller/__init__.py +0 -0
  421. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/temperture_controller/lakeshore/__init__.py +0 -0
  422. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore.py +0 -0
  423. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/temperture_controller/lakeshore/lakeshore_io.py +0 -0
  424. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/tetramm.py +0 -0
  425. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/thawer.py +0 -0
  426. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/turbo_slit.py +0 -0
  427. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/undulator.py +0 -0
  428. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/util/__init__.py +0 -0
  429. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  430. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/util/epics_util.py +0 -0
  431. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  432. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/v2f.py +0 -0
  433. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/watsonmarlow323_pump.py +0 -0
  434. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/webcam.py +0 -0
  435. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/xbpm_feedback.py +0 -0
  436. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/xspress3/__init__.py +0 -0
  437. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/xspress3/xspress3.py +0 -0
  438. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  439. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zebra/__init__.py +0 -0
  440. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  441. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  442. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  443. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  444. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/devices/zocalo/zocalo_results.py +0 -0
  445. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/log.py +0 -0
  446. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/parameters/__init__.py +0 -0
  447. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  448. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plan_stubs/__init__.py +0 -0
  449. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  450. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plan_stubs/data_session.py +0 -0
  451. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  452. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  453. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/__init__.py +0 -0
  454. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/bimorph.py +0 -0
  455. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/load_panda_yaml.py +0 -0
  456. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
  457. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  458. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/save_panda.py +0 -0
  459. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/spec_path.py +0 -0
  460. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  461. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/plans/wrapped.py +0 -0
  462. {dls_dodal-1.68.0/src/dodal/testing/fixtures → dls_dodal-1.69.0/src/dodal/testing}/__init__.py +0 -0
  463. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/testing/electron_analyser/__init__.py +0 -0
  464. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/testing/electron_analyser/device_factory.py +0 -0
  465. {dls_dodal-1.68.0/src/dodal/testing/fixtures/devices → dls_dodal-1.69.0/src/dodal/testing/fixtures}/__init__.py +0 -0
  466. {dls_dodal-1.68.0/system_tests → dls_dodal-1.69.0/src/dodal/testing/fixtures/devices}/__init__.py +0 -0
  467. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/testing/fixtures/devices/apple2.py +0 -0
  468. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/testing/fixtures/run_engine.py +0 -0
  469. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/testing/fixtures/utils.py +0 -0
  470. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/src/dodal/utils.py +0 -0
  471. {dls_dodal-1.68.0/tests → dls_dodal-1.69.0/system_tests}/__init__.py +0 -0
  472. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/system_tests/conftest.py +0 -0
  473. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/system_tests/test_oav_system.py +0 -0
  474. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/system_tests/test_oav_to_redis_system.py +0 -0
  475. {dls_dodal-1.68.0/tests/beamlines → dls_dodal-1.69.0/tests}/__init__.py +0 -0
  476. {dls_dodal-1.68.0/tests/common → dls_dodal-1.69.0/tests/beamlines}/__init__.py +0 -0
  477. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/beamlines/test_b16.py +0 -0
  478. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/beamlines/test_i03.py +0 -0
  479. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/beamlines/test_i24.py +0 -0
  480. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/beamlines/test_mapping.py +0 -0
  481. {dls_dodal-1.68.0/tests/common/beamlines → dls_dodal-1.69.0/tests/common}/__init__.py +0 -0
  482. {dls_dodal-1.68.0/tests/devices → dls_dodal-1.69.0/tests/common/beamlines}/__init__.py +0 -0
  483. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/beamlines/test_beamline_parameters.py +0 -0
  484. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/beamlines/test_commissioning_mode.py +0 -0
  485. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/beamlines/test_device_instantiation.py +0 -0
  486. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/test_coordination.py +0 -0
  487. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/test_crystal_metadata.py +0 -0
  488. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/test_udc_directory_provider.py +0 -0
  489. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/test_visit.py +0 -0
  490. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/common/test_watcher_utils.py +0 -0
  491. {dls_dodal-1.68.0/tests/devices/aithre_lasershaping → dls_dodal-1.69.0/tests/devices}/__init__.py +0 -0
  492. {dls_dodal-1.68.0/tests/devices/b07_1 → dls_dodal-1.69.0/tests/devices/aithre_lasershaping}/__init__.py +0 -0
  493. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/aithre_lasershaping/test_goniometer.py +0 -0
  494. {dls_dodal-1.68.0/tests/devices/current_amplifier → dls_dodal-1.69.0/tests/devices/b07_1}/__init__.py +0 -0
  495. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/b07_1/test_ccmc.py +0 -0
  496. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/conftest.py +0 -0
  497. {dls_dodal-1.68.0/tests/devices/detector → dls_dodal-1.69.0/tests/devices/current_amplifier}/__init__.py +0 -0
  498. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/current_amplifier/test_femto.py +0 -0
  499. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/current_amplifier/test_sr570.py +0 -0
  500. {dls_dodal-1.68.0/tests/devices/electron_analyser → dls_dodal-1.69.0/tests/devices/detector}/__init__.py +0 -0
  501. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/detector/test_data/__init__.py +0 -0
  502. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/detector/test_data/test_det_dist_converter.txt +0 -0
  503. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/detector/test_det_dim_constants.py +0 -0
  504. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/detector/test_det_resolution.py +0 -0
  505. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/detector/test_detector.py +0 -0
  506. {dls_dodal-1.68.0/tests/devices/electron_analyser/base → dls_dodal-1.69.0/tests/devices/electron_analyser}/__init__.py +0 -0
  507. {dls_dodal-1.68.0/tests/devices/electron_analyser/specs → dls_dodal-1.69.0/tests/devices/electron_analyser/base}/__init__.py +0 -0
  508. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/base/test_base_detector.py +0 -0
  509. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/base/test_base_driver_io.py +0 -0
  510. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/base/test_base_region.py +0 -0
  511. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/base/test_base_util.py +0 -0
  512. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/helper_util/__init__.py +0 -0
  513. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/helper_util/assert_func.py +0 -0
  514. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/helper_util/sequence.py +0 -0
  515. {dls_dodal-1.68.0/tests/devices/electron_analyser/vgscienta → dls_dodal-1.69.0/tests/devices/electron_analyser/specs}/__init__.py +0 -0
  516. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/specs/test_specs_detector.py +0 -0
  517. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/specs/test_specs_driver_io.py +0 -0
  518. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/test_data/__init__.py +0 -0
  519. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/test_data/specs_sequence.seq +0 -0
  520. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/test_data/vgscienta_sequence.seq +0 -0
  521. {dls_dodal-1.68.0/tests/devices/i02_1 → dls_dodal-1.69.0/tests/devices/electron_analyser/vgscienta}/__init__.py +0 -0
  522. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/vgscienta/test_vgscienta_detector.py +0 -0
  523. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/electron_analyser/vgscienta/test_vgscienta_driver_io.py +0 -0
  524. {dls_dodal-1.68.0/tests/devices/i03 → dls_dodal-1.69.0/tests/devices/i02_1}/__init__.py +0 -0
  525. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i02_1/test_fast_grid_scan.py +0 -0
  526. {dls_dodal-1.68.0/tests/devices/i04 → dls_dodal-1.69.0/tests/devices/i03}/__init__.py +0 -0
  527. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i03/test_beamsize.py +0 -0
  528. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i03/test_dcm.py +0 -0
  529. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i03/test_undulator_dcm.py +0 -0
  530. {dls_dodal-1.68.0/tests/devices/i09 → dls_dodal-1.69.0/tests/devices/i04}/__init__.py +0 -0
  531. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i04/conftest.py +0 -0
  532. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i04/test_beamsize.py +0 -0
  533. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i04/test_transfocator.py +0 -0
  534. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i07/IIDCalibrationTable.txt +0 -0
  535. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i07/__init__.py +0 -0
  536. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i07/test_dcm.py +0 -0
  537. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i07/test_id.py +0 -0
  538. {dls_dodal-1.68.0/tests/devices/i09_1 → dls_dodal-1.69.0/tests/devices/i09}/__init__.py +0 -0
  539. {dls_dodal-1.68.0/tests/devices/i09_1_shared → dls_dodal-1.69.0/tests/devices/i09_1}/__init__.py +0 -0
  540. {dls_dodal-1.68.0/tests/devices/i09_2_shared → dls_dodal-1.69.0/tests/devices/i09_1_shared}/__init__.py +0 -0
  541. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_1_shared/test_data/__init__.py +0 -0
  542. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_1_shared/test_data/test_lookuptable_i09_hu.txt +0 -0
  543. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_1_shared/test_hard_energy.py +0 -0
  544. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_1_shared/test_undulator_functions.py +0 -0
  545. {dls_dodal-1.68.0/tests/devices/i10 → dls_dodal-1.69.0/tests/devices/i09_2_shared}/__init__.py +0 -0
  546. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_2_shared/test_data/ExpectedJIDEnergy2GapCalibrations.json +0 -0
  547. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_2_shared/test_data/ExpectedJIDEnergy2PhaseCalibrations.json +0 -0
  548. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_2_shared/test_data/JIDEnergy2GapCalibrations.csv +0 -0
  549. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_2_shared/test_data/JIDEnergy2PhaseCalibrations.csv +0 -0
  550. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i09_2_shared/test_data/__init__.py +0 -0
  551. {dls_dodal-1.68.0/tests/devices/i11 → dls_dodal-1.69.0/tests/devices/i10}/__init__.py +0 -0
  552. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv +0 -0
  553. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv +0 -0
  554. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/__init__.py +0 -0
  555. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.json +0 -0
  556. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.json +0 -0
  557. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.json +0 -0
  558. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.json +0 -0
  559. {dls_dodal-1.68.0/tests/devices/i13_1 → dls_dodal-1.69.0/tests/devices/i11}/__init__.py +0 -0
  560. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i11/test_i11devices.py +0 -0
  561. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i11/test_mythen.py +0 -0
  562. {dls_dodal-1.68.0/tests/devices/i15 → dls_dodal-1.69.0/tests/devices/i13_1}/__init__.py +0 -0
  563. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i13_1/test_merlin.py +0 -0
  564. {dls_dodal-1.68.0/tests/devices/i17 → dls_dodal-1.69.0/tests/devices/i15}/__init__.py +0 -0
  565. {dls_dodal-1.68.0/tests/devices/i18 → dls_dodal-1.69.0/tests/devices/i17}/__init__.py +0 -0
  566. {dls_dodal-1.68.0/tests/devices/i19 → dls_dodal-1.69.0/tests/devices/i18}/__init__.py +0 -0
  567. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  568. {dls_dodal-1.68.0/tests/devices/i19/access_controlled → dls_dodal-1.69.0/tests/devices/i19}/__init__.py +0 -0
  569. {dls_dodal-1.68.0/tests/devices/i22 → dls_dodal-1.69.0/tests/devices/i19/access_controlled}/__init__.py +0 -0
  570. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/access_controlled/test_attenuator_motor_squad.py +0 -0
  571. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/access_controlled/test_attenuator_position_demand.py +0 -0
  572. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/access_controlled/test_shutter.py +0 -0
  573. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/test_backlight.py +0 -0
  574. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/test_beamstop.py +0 -0
  575. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/test_diffractometer.py +0 -0
  576. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/test_mapt.py +0 -0
  577. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i19/test_pin_col.py +0 -0
  578. {dls_dodal-1.68.0/tests/devices/i24 → dls_dodal-1.69.0/tests/devices/i22}/__init__.py +0 -0
  579. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i22/test_dcm.py +0 -0
  580. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i22/test_fswitch.py +0 -0
  581. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i22/test_metadataholder.py +0 -0
  582. {dls_dodal-1.68.0/tests/devices/insertion_device → dls_dodal-1.69.0/tests/devices/i24}/__init__.py +0 -0
  583. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i24/test_dual_backlight.py +0 -0
  584. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i24/test_focus_mirrors.py +0 -0
  585. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i24/test_pmac.py +0 -0
  586. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/i24/test_vgonio.py +0 -0
  587. {dls_dodal-1.68.0/tests/devices/mx_phase1 → dls_dodal-1.69.0/tests/devices/insertion_device}/__init__.py +0 -0
  588. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/insertion_device/test_energy_motor_lookup.py +0 -0
  589. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/insertion_device/test_lookup_tables_models.py +0 -0
  590. {dls_dodal-1.68.0/tests/devices/oav → dls_dodal-1.69.0/tests/devices/mx_phase1}/__init__.py +0 -0
  591. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/mx_phase1/test_beamstop.py +0 -0
  592. {dls_dodal-1.68.0/tests/devices/oav/image_recognition → dls_dodal-1.69.0/tests/devices/oav}/__init__.py +0 -0
  593. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/conftest.py +0 -0
  594. {dls_dodal-1.68.0/tests/devices/p60 → dls_dodal-1.69.0/tests/devices/oav/image_recognition}/__init__.py +0 -0
  595. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/image_recognition/test_pin_tip_detect.py +0 -0
  596. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  597. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_data/__init__.py +0 -0
  598. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_data/oav_snapshot_expected.png +0 -0
  599. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_data/oav_snapshot_test.png +0 -0
  600. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_data/test_OAVCentring.json +0 -0
  601. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_grid_overlay.py +0 -0
  602. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_oav.py +0 -0
  603. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_oav_parameters.py +0 -0
  604. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_oav_to_redis_forwarder.py +0 -0
  605. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_oav_utils.py +0 -0
  606. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/oav/test_snapshot_image_processing.py +0 -0
  607. {dls_dodal-1.68.0/tests/devices/p99 → dls_dodal-1.69.0/tests/devices/p60}/__init__.py +0 -0
  608. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/p60/test_lab_xray_source.py +0 -0
  609. {dls_dodal-1.68.0/tests/devices/temperature_controller → dls_dodal-1.69.0/tests/devices/p99}/__init__.py +0 -0
  610. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/p99/test_p99_stage.py +0 -0
  611. {dls_dodal-1.68.0/tests/devices/temperature_controller/lakeshore → dls_dodal-1.69.0/tests/devices/temperature_controller}/__init__.py +0 -0
  612. {dls_dodal-1.68.0/tests/devices/util → dls_dodal-1.69.0/tests/devices/temperature_controller/lakeshore}/__init__.py +0 -0
  613. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore.py +0 -0
  614. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/temperature_controller/lakeshore/test_lakeshore_io.py +0 -0
  615. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_aperture.py +0 -0
  616. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_aperture_scatterguard.py +0 -0
  617. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_attenuator.py +0 -0
  618. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_backlight.py +0 -0
  619. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_baton.py +0 -0
  620. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_beam_converter.py +0 -0
  621. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_bimorph_mirror.py +0 -0
  622. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_common_dcm.py +0 -0
  623. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_controllers.py +0 -0
  624. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_daq_configuration/__init__.py +0 -0
  625. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_daq_configuration/domain/__init__.py +0 -0
  626. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_daq_configuration/domain/beamlineParameters +0 -0
  627. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  628. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  629. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_daq_configuration/lookup/__init__.py +0 -0
  630. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_data/__init__.py +0 -0
  631. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_data/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  632. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_data/test_lookup_table.txt +0 -0
  633. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_diamond_filter.py +0 -0
  634. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_focusing_mirror.py +0 -0
  635. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_gridscan.py +0 -0
  636. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_hutch_shutter.py +0 -0
  637. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_motors.py +0 -0
  638. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_odin.py +0 -0
  639. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_positioner.py +0 -0
  640. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_pressure_jump_cell.py +0 -0
  641. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_qbpm.py +0 -0
  642. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_scintillator.py +0 -0
  643. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_slits.py +0 -0
  644. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_smargon.py +0 -0
  645. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_synchrotron.py +0 -0
  646. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_tetramm.py +0 -0
  647. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_thawer.py +0 -0
  648. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_turbo_slit.py +0 -0
  649. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_undulator.py +0 -0
  650. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_utils.py +0 -0
  651. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_watsonmarlow323_pump.py +0 -0
  652. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_webcam.py +0 -0
  653. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_xbpm_feedback.py +0 -0
  654. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_xspress3.py +0 -0
  655. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_zebra.py +0 -0
  656. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_zebra_constants_mapping.py +0 -0
  657. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_zebra_shutter.py +0 -0
  658. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_zocalo_interaction.py +0 -0
  659. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/test_zocalo_results.py +0 -0
  660. {dls_dodal-1.68.0/tests/fake_zocalo → dls_dodal-1.69.0/tests/devices/util}/__init__.py +0 -0
  661. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/util/test_adjuster_plans.py +0 -0
  662. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/util/test_data/__init__.py +0 -0
  663. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  664. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  665. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/util/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  666. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/devices/util/test_lookup_tables.py +0 -0
  667. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline.py +0 -0
  668. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  669. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline_broken_dependency.py +0 -0
  670. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline_dependencies.py +0 -0
  671. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  672. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  673. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_beamline_some_devices_working.py +0 -0
  674. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_device_factory_beamline.py +0 -0
  675. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_zocalo/README.rst +0 -0
  676. {dls_dodal-1.68.0/tests/plan_stubs → dls_dodal-1.69.0/tests/fake_zocalo}/__init__.py +0 -0
  677. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_zocalo/__main__.py +0 -0
  678. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  679. {dls_dodal-1.68.0/tests/plans → dls_dodal-1.69.0/tests/plan_stubs}/__init__.py +0 -0
  680. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_data/__init__.py +0 -0
  681. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_data/topup_long_delay.txt +0 -0
  682. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_data/topup_short_params.txt +0 -0
  683. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_data_session.py +0 -0
  684. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_motor_util_plans.py +0 -0
  685. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_topup_plan.py +0 -0
  686. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plan_stubs/test_wrapped_stubs.py +0 -0
  687. {dls_dodal-1.68.0/tests/plans/test_preprocessors → dls_dodal-1.69.0/tests/plans}/__init__.py +0 -0
  688. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/conftest.py +0 -0
  689. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_bimorph.py +0 -0
  690. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_compliance.py +0 -0
  691. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  692. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_load_panda_yaml.py +0 -0
  693. {dls_dodal-1.68.0/tests/preprocessors → dls_dodal-1.69.0/tests/plans/test_preprocessors}/__init__.py +0 -0
  694. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  695. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_save_panda.py +0 -0
  696. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_scanspec.py +0 -0
  697. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  698. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/plans/test_wrapped.py +0 -0
  699. {dls_dodal-1.68.0/tests/testing → dls_dodal-1.69.0/tests/preprocessors}/__init__.py +0 -0
  700. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  701. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_cli.py +0 -0
  702. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_data/__init__.py +0 -0
  703. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_data/bad_beamlineParameters +0 -0
  704. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_data/i04_beamlineParameters +0 -0
  705. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  706. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_data/test_display.configuration +0 -0
  707. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_data/test_oav_zoom_levels.xml +0 -0
  708. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_device_manager.py +0 -0
  709. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/test_log.py +0 -0
  710. {dls_dodal-1.68.0/tests/testing/fixtures → dls_dodal-1.69.0/tests/testing}/__init__.py +0 -0
  711. {dls_dodal-1.68.0 → dls_dodal-1.69.0}/tests/testing/fixtures/test_run_engine.py +0 -0
@@ -1,5 +1,5 @@
1
1
  # Changes here will be overwritten by Copier
2
- _commit: 4.0.1
2
+ _commit: 5.0.1
3
3
  _src_path: https://github.com/DiamondLightSource/python-copier-template
4
4
  author_email: dominic.oram@diamond.ac.uk
5
5
  author_name: Dominic Oram
@@ -7,7 +7,7 @@ component_lifecycle: production
7
7
  component_owner: group:data-acquisition
8
8
  component_type: library
9
9
  description: Ophyd devices and other utils that could be used across DLS beamlines
10
- distribution_name: dls-dodal
10
+ distribution_name: dls-dodal # Can change to dodal https://github.com/DiamondLightSource/dodal/issues/681
11
11
  docker: false
12
12
  docs_type: sphinx
13
13
  git_platform: github.com
@@ -15,5 +15,5 @@ github_org: DiamondLightSource
15
15
  package_name: dodal
16
16
  pypi: true
17
17
  repo_name: dodal
18
- strict_typing: false
18
+ strict_typing: false # Should move to strict typing in future
19
19
  type_checker: pyright
@@ -0,0 +1,72 @@
1
+ // For format details, see https://containers.dev/implementors/json_reference/
2
+ {
3
+ "name": "Python 3 Developer Container",
4
+ "build": {
5
+ "dockerfile": "../Dockerfile",
6
+ "target": "developer"
7
+ },
8
+ "remoteEnv": {
9
+ // Allow X11 apps to run inside the container
10
+ "DISPLAY": "${localEnv:DISPLAY}",
11
+ // Put things that allow it in the persistent cache
12
+ "PRE_COMMIT_HOME": "/cache/pre-commit",
13
+ "UV_CACHE_DIR": "/cache/uv",
14
+ "UV_PYTHON_CACHE_DIR": "/cache/uv-python",
15
+ // Make a venv that is specific for this workspace path as the cache is shared
16
+ "UV_PROJECT_ENVIRONMENT": "/cache/venv-for${localWorkspaceFolder}",
17
+ // Do the equivalent of "activate" the venv so we don't have to "uv run" everything
18
+ "VIRTUAL_ENV": "/cache/venv-for${localWorkspaceFolder}",
19
+ "PATH": "/cache/venv-for${localWorkspaceFolder}/bin:${containerEnv:PATH}"
20
+ },
21
+ "customizations": {
22
+ "vscode": {
23
+ // Set *default* container specific settings.json values on container create.
24
+ "settings": {
25
+ // Use the container's python by default
26
+ "python.defaultInterpreterPath": "/cache/venv-for${localWorkspaceFolder}/bin/python",
27
+ // Don't activate the venv as it is already in the PATH
28
+ "python.terminal.activateEnvInCurrentTerminal": false,
29
+ "python.terminal.activateEnvironment": false,
30
+ // Workaround to prevent garbled python REPL in the terminal
31
+ // https://github.com/microsoft/vscode-python/issues/25505
32
+ "python.terminal.shellIntegration.enabled": false
33
+ },
34
+ // Add the IDs of extensions you want installed when the container is created.
35
+ "extensions": [
36
+ "ms-python.python",
37
+ "github.vscode-github-actions",
38
+ "tamasfe.even-better-toml",
39
+ "redhat.vscode-yaml",
40
+ "ryanluker.vscode-coverage-gutters",
41
+ "charliermarsh.ruff",
42
+ "ms-azuretools.vscode-docker"
43
+ ]
44
+ }
45
+ },
46
+ // Create the config folder for the bash-config feature and uv cache
47
+ "initializeCommand": "mkdir -p ${localEnv:HOME}/.config/terminal-config",
48
+ "runArgs": [
49
+ // Allow the container to access the host X11 display and EPICS CA
50
+ "--net=host",
51
+ // Make sure SELinux does not disable with access to host filesystems like tmp
52
+ "--security-opt=label=disable"
53
+ ],
54
+ "mounts": [
55
+ // Mount in the user terminal config folder so it can be edited
56
+ {
57
+ "source": "${localEnv:HOME}/.config/terminal-config",
58
+ "target": "/user-terminal-config",
59
+ "type": "bind"
60
+ },
61
+ // Keep a persistent cross container cache for uv, pre-commit, and the venvs
62
+ {
63
+ "source": "devcontainer-shared-cache",
64
+ "target": "/cache",
65
+ "type": "volume"
66
+ }
67
+ ],
68
+ // Mount the parent as /workspaces so we can pip install peers as editable
69
+ "workspaceMount": "source=${localWorkspaceFolder}/..,target=/workspaces,type=bind",
70
+ // After the container is created, recreate the venv then make pre-commit first run faster
71
+ "postCreateCommand": "uv venv --clear && uv sync && pre-commit install --install-hooks"
72
+ }
@@ -24,4 +24,4 @@ It is recommended that developers use a [vscode devcontainer](https://code.visua
24
24
 
25
25
  This project was created using the [Diamond Light Source Copier Template](https://github.com/DiamondLightSource/python-copier-template) for Python projects.
26
26
 
27
- For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/4.0.1/how-to.html).
27
+ For more information on common tasks like setting up a developer environment, running the tests, and setting a pre-commit hook, see the template's [How-to guides](https://diamondlightsource.github.io/python-copier-template/5.0.1/how-to.html).
@@ -12,10 +12,13 @@ jobs:
12
12
  # Need this to get version number from last tag
13
13
  fetch-depth: 0
14
14
 
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v7
17
+
15
18
  - name: Build sdist and wheel
16
19
  run: >
17
20
  export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) &&
18
- pipx run build
21
+ uvx --from build pyproject-build
19
22
 
20
23
  - name: Upload sdist and wheel as artifacts
21
24
  uses: actions/upload-artifact@v5
@@ -24,12 +27,10 @@ jobs:
24
27
  path: dist
25
28
 
26
29
  - name: Check for packaging errors
27
- run: pipx run twine check --strict dist/*
30
+ run: uvx twine check --strict dist/*
28
31
 
29
32
  - name: Install produced wheel
30
- uses: ./.github/actions/install_requirements
31
- with:
32
- pip-install: dist/*.whl
33
+ run: python -m pip install dist/*.whl
33
34
 
34
35
  - name: Test module --version works using the installed wheel
35
36
  run: python -m dodal --version
@@ -20,11 +20,14 @@ jobs:
20
20
  - name: Install system packages
21
21
  run: sudo apt-get install graphviz
22
22
 
23
- - name: Install python packages
24
- uses: ./.github/actions/install_requirements
23
+ - name: Install uv
24
+ uses: astral-sh/setup-uv@v7
25
+
26
+ # - name: Install requirements
27
+ # run: uv sync --group dev
25
28
 
26
29
  - name: Build docs
27
- run: tox -e docs
30
+ run: uv run --locked tox -e docs
28
31
 
29
32
  - name: Remove environment.pickle
30
33
  run: rm build/html/.doctrees/environment.pickle
@@ -0,0 +1,62 @@
1
+ on:
2
+ workflow_call:
3
+ inputs:
4
+ python-version:
5
+ type: string
6
+ description: The version of python to install, default is from .python-version file
7
+ default: ""
8
+ runs-on:
9
+ type: string
10
+ description: The runner to run this job on
11
+ required: true
12
+
13
+ env:
14
+ # https://github.com/pytest-dev/pytest/issues/2042
15
+ PY_IGNORE_IMPORTMISMATCH: "1"
16
+ UV_PYTHON: ${{ inputs.python-version }}
17
+
18
+ jobs:
19
+ run:
20
+ runs-on: ${{ inputs.runs-on }}
21
+
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@v5
25
+ with:
26
+ # Need this to get version number from last tag
27
+ fetch-depth: 0
28
+
29
+ - name: Install uv
30
+ uses: astral-sh/setup-uv@v7
31
+
32
+ - name: Install latest versions of python packages
33
+ run: uv sync --python ${{ inputs.python-version }} --group dev
34
+
35
+ - name: Run tests
36
+ run: uv run --locked tox -e tests
37
+
38
+ - name: Checkout simulated devices
39
+ uses: actions/checkout@v5
40
+ with:
41
+ repository: epics-containers/example-services
42
+ path: example-services
43
+
44
+ - name: Run docker compose
45
+ uses: hoverkraft-tech/compose-action@v2.4.1
46
+ with:
47
+ compose-file: "./example-services/compose.yaml"
48
+ services: |
49
+ bl01t-di-cam-01
50
+ bl01t-mo-sim-01
51
+ ca-gateway
52
+
53
+ - name: Run system tests
54
+ run: uv run --locked tox -e system-tests
55
+
56
+ - name: Upload coverage to Codecov
57
+ uses: codecov/codecov-action@v5
58
+ with:
59
+ name: ${{ inputs.python-version }}/${{ inputs.runs-on }}
60
+ files: ./cov.xml
61
+ env:
62
+ CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
@@ -14,14 +14,12 @@ jobs:
14
14
  steps:
15
15
  - name: Checkout
16
16
  uses: actions/checkout@v5
17
- with:
18
- fetch-depth: 0
19
17
 
20
- - name: Install python packages
21
- uses: ./.github/actions/install_requirements
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v7
22
20
 
23
21
  - name: Run import linter
24
- run: lint-imports
22
+ run: uv run --locked lint-imports
25
23
 
26
24
  - name: Run tox
27
- run: tox -e ${{ inputs.tox }}
25
+ run: uv run --locked tox -e ${{ inputs.tox }}
@@ -20,21 +20,16 @@ jobs:
20
20
  matrix:
21
21
  runs-on: ["ubuntu-latest"] # can add windows-latest, macos-latest
22
22
  python-version: ["3.11", "3.12", "3.13"]
23
- include:
24
- # Include one that runs in the dev environment
25
- - runs-on: "ubuntu-latest"
26
- python-version: "dev"
27
23
  fail-fast: false
28
24
  uses: ./.github/workflows/_test.yml
29
25
  with:
30
26
  runs-on: ${{ matrix.runs-on }}
31
27
  python-version: ${{ matrix.python-version }}
32
- secrets:
33
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
34
28
 
35
29
  docs:
36
30
  uses: ./.github/workflows/_docs.yml
37
-
31
+ permissions:
32
+ contents: write
38
33
 
39
34
  dist:
40
35
  uses: ./.github/workflows/_dist.yml
@@ -10,4 +10,4 @@ jobs:
10
10
  linkcheck:
11
11
  uses: ./.github/workflows/_tox.yml
12
12
  with:
13
- tox: docs build -- -b linkcheck
13
+ tox: docs -- -b linkcheck
@@ -0,0 +1,19 @@
1
+ # This allow-list is limited to YAML/YML files to cut down SealedSecrets false positives.
2
+ # All gitleaks default rules still apply everywhere (useDefault = true).
3
+ # To broaden this allow-list to all files, comment out the 'paths' line below.
4
+
5
+ [extend]
6
+ useDefault = true
7
+
8
+ [[rules]]
9
+ id = "generic-api-key"
10
+
11
+ # Pattern-only allowlist for long Ag… tokens in YAML
12
+ [[rules.allowlists]]
13
+ condition = "AND"
14
+ regexes = [
15
+ # Boundary-safe Ag… token without lookarounds (RE2-safe)
16
+ '''(?:^|[^A-Za-z0-9+/=])(Ag[A-Za-z0-9+/]{500,}={0,2})(?:[^A-Za-z0-9+/=]|$)'''
17
+ ]
18
+ # Limit to YAML only for now. Comment this out if you want it to apply everywhere.
19
+ paths = ['''(?i).*\.ya?ml$''']
@@ -3,6 +3,7 @@ repos:
3
3
  rev: v5.0.0
4
4
  hooks:
5
5
  - id: check-added-large-files
6
+ exclude: ^uv.lock
6
7
  - id: check-yaml
7
8
  - id: check-merge-conflict
8
9
  - id: end-of-file-fixer
@@ -31,6 +32,13 @@ repos:
31
32
  types: [python]
32
33
  require_serial: false
33
34
 
35
+ - id: uv-sync
36
+ name: update uv.lock and venv
37
+ pass_filenames: false
38
+ language: system
39
+ entry: uv sync
40
+ files: ^(uv\.lock|pyproject\.toml)$
41
+
34
42
  - repo: https://github.com/gitleaks/gitleaks
35
43
  rev: v8.28.0
36
44
  hooks:
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,8 @@
1
+ # The devcontainer should use the developer target and run as root with podman
2
+ # or docker with user namespaces.
3
+ FROM ghcr.io/diamondlightsource/ubuntu-devcontainer:noble AS developer
4
+
5
+ # Add any system dependencies for the developer/build environment here
6
+ RUN apt-get update -y && apt-get install -y --no-install-recommends \
7
+ graphviz \
8
+ && apt-get dist-clean
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.68.0
3
+ Version: 1.69.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
@@ -232,36 +232,6 @@ Requires-Dist: scanspec>=0.7.3
232
232
  Requires-Dist: pyzmq==26.3.0
233
233
  Requires-Dist: deepdiff
234
234
  Requires-Dist: daq-config-server>=v1.0.0
235
- Provides-Extra: dev
236
- Requires-Dist: black; extra == "dev"
237
- Requires-Dist: diff-cover; extra == "dev"
238
- Requires-Dist: import-linter; extra == "dev"
239
- Requires-Dist: ispyb; extra == "dev"
240
- Requires-Dist: mypy; extra == "dev"
241
- Requires-Dist: myst-parser; extra == "dev"
242
- Requires-Dist: ophyd_async[sim]>=v0.14.0; extra == "dev"
243
- Requires-Dist: pipdeptree; extra == "dev"
244
- Requires-Dist: pre-commit; extra == "dev"
245
- Requires-Dist: psutil; extra == "dev"
246
- Requires-Dist: pydata-sphinx-theme>=0.12; extra == "dev"
247
- Requires-Dist: pyright==1.1.406; extra == "dev"
248
- Requires-Dist: pytest; extra == "dev"
249
- Requires-Dist: pytest-asyncio; extra == "dev"
250
- Requires-Dist: pytest-cov; extra == "dev"
251
- Requires-Dist: pytest-json-report; extra == "dev"
252
- Requires-Dist: pytest-random-order; extra == "dev"
253
- Requires-Dist: ruff; extra == "dev"
254
- Requires-Dist: sphinx<7.4.6; extra == "dev"
255
- Requires-Dist: sphinx-autobuild; extra == "dev"
256
- Requires-Dist: sphinx-copybutton; extra == "dev"
257
- Requires-Dist: sphinxcontrib-mermaid; extra == "dev"
258
- Requires-Dist: sphinx-design; extra == "dev"
259
- Requires-Dist: sphinx-autodoc-typehints; extra == "dev"
260
- Requires-Dist: tox-direct; extra == "dev"
261
- Requires-Dist: types-requests; extra == "dev"
262
- Requires-Dist: types-mock; extra == "dev"
263
- Requires-Dist: types-PyYAML; extra == "dev"
264
- Requires-Dist: types-aiofiles; extra == "dev"
265
235
  Dynamic: license-file
266
236
 
267
237
  [![CI](https://github.com/DiamondLightSource/dodal/actions/workflows/ci.yml/badge.svg)](https://github.com/DiamondLightSource/dodal/actions/workflows/ci.yml)
@@ -1,7 +1,7 @@
1
1
 
2
2
  # How to check code coverage
3
3
 
4
- Code coverage is reported to the command line and to a `cov.xml` file by the command `tox -e tests`. The file is uploaded to the Codecov service in CI.
4
+ Code coverage is reported to the command line and to a `cov.xml` file by the command `uv run tox -e tests`. The file is uploaded to the Codecov service in CI.
5
5
 
6
6
  If you are using VSCode IDE, you can also check code coverage by right-clicking on the test icon and selecting `Run with coverage`. This will re-run the test and highlight line numbers in your file:
7
7
  - Green = covered by tests
@@ -19,17 +19,16 @@ in a container under [VSCode](https://code.visualstudio.com/)
19
19
  If on a DLS machine make sure you have python >3.11 running by doing `module load python/3.11`
20
20
 
21
21
  ```
22
- python3 -m venv venv
23
- source venv/bin/activate
24
- pip install --upgrade pip
25
- pip install -e '.[dev]'
22
+ module load uv
23
+ uv sync --group dev
24
+ source .venv/bin/activate
26
25
  ```
27
26
 
28
27
  ## See what was installed
29
28
 
30
29
  To see a graph of the python package dependency tree type:
31
30
 
32
- $ pipdeptree
31
+ $ uv tree
33
32
 
34
33
  :::
35
34
 
@@ -49,7 +48,7 @@ code .
49
48
  Now you have a development environment you can run the tests in a terminal:
50
49
 
51
50
  ```
52
- tox -p
51
+ uv run tox -p
53
52
  ```
54
53
 
55
54
  This will run in parallel the following checks:
@@ -7,7 +7,7 @@ Code linting is handled by [ruff](https://docs.astral.sh/ruff) run under [pre-co
7
7
  You can run the above checks on all files with this command:
8
8
 
9
9
  ```
10
- $ tox -e pre-commit
10
+ $ uv run tox -e pre-commit
11
11
  ```
12
12
 
13
13
  Or you can install a pre-commit hook that will run each time you do a `git commit` on just the files that have changed:
@@ -0,0 +1,43 @@
1
+ # Lock requirements
2
+
3
+ ## Introduction
4
+
5
+ Since the move to `uv`, this project natively supports a lockfile. This is a set of "known good" dependencies that the tests are run against, and will be used to create a container if one is built.
6
+
7
+ ## Specifying dependencies
8
+
9
+ The source of dependencies is the project's `pyproject.toml`. They can come from:
10
+ - Project dependencies (from `[project]` `dependencies =`)
11
+ - Dev dependencies (from `[dependency-groups]` `dev =`)
12
+ - Transitive dependencies (child dependencies of the above)
13
+
14
+ Dependencies are loosely specified in `pyproject.toml`, like `sphinx-autobuild` or `pydata-sphinx-theme>=0.12`. They should state a minimum version if you are using features that are added in a specific version. There should be no upper bound by default, only insert one if an upstream release of a dependency breaks your code, and you don't have time to fix it immediately.
15
+
16
+ ## Updating the lockfile
17
+
18
+ When you have updated `pyproject.toml` then run:
19
+ ```
20
+ $ uv sync
21
+ ```
22
+
23
+ This will ensure that any new dependencies you add will be placed in the lockfile, and your venv updated to match. It will *not* update any existing dependencies, unless `pyproject.toml` requires a later version.
24
+
25
+ This command will be run by [pre-commit](./lint) during a `git commit` and by CI.
26
+
27
+ To update all dependencies to their latest versions run:
28
+ ```
29
+ uv sync --upgrade
30
+ ```
31
+ This command will be run by [renovate](./renovate) once a week in CI.
32
+
33
+ ```{seealso}
34
+ [The uv docs on locking and syncing](https://docs.astral.sh/uv/concepts/projects/sync)
35
+ ```
36
+
37
+ ## Modifying the venv to add other projects
38
+
39
+ Peer projects (those checked out next to the project) are visible in the devcontainer, and can be added into the venv by running `uv pip install -e ../other_project`. This will allow live changes made in this other project to be immediately reflected in the venv.
40
+
41
+ ```{note}
42
+ This venv is activated by default, and global to the container, so if you `uv sync` from `other_project` then it will **replace** the contents of the venv with `other_project`'s dependencies.
43
+ ```
@@ -28,7 +28,7 @@ If you find that your tests are being skipped or not recognised by `pytest`, che
28
28
  When you have some fully working tests then you can run it with coverage:
29
29
 
30
30
  ```
31
- $ tox -e tests
31
+ $ uv run tox -e tests
32
32
  ```
33
33
 
34
34
  It will also report coverage to the command line and to `cov.xml`.
@@ -54,8 +54,11 @@ cd example-services
54
54
  podman compose up -d bl01t-di-cam-01 bl01t-mo-sim-01 ca-gateway
55
55
  ```
56
56
 
57
+ **Note:** Do not run the system tests from the same shell as the above `environment.sh` script interferes with the
58
+ ability to run the tests due to also setting EPICS_ environment variables.
59
+
57
60
  Once this is done, then the system tests can be run:
58
61
 
59
62
  ```commandline
60
- tox -e system-report
63
+ uv run tox -e system-tests
61
64
  ```
@@ -3,5 +3,5 @@
3
3
  Static type analysis is done with [pyright](https://microsoft.github.io/pyright) or [mypy](https://www.mypy-lang.org) dependent on the settings in `pyproject.toml`. It checks type definition in source files without running them, and highlights potential issues where types do not match. You can run it with:
4
4
 
5
5
  ```
6
- $ tox -e type-checking
6
+ $ uv run tox -e type-checking
7
7
  ```
@@ -38,7 +38,7 @@ license.file = "LICENSE"
38
38
  readme = "README.md"
39
39
  requires-python = ">=3.11"
40
40
 
41
- [project.optional-dependencies]
41
+ [dependency-groups]
42
42
  dev = [
43
43
  "black",
44
44
  "diff-cover",
@@ -49,7 +49,6 @@ dev = [
49
49
  # "copier",
50
50
  "myst-parser",
51
51
  "ophyd_async[sim]>=v0.14.0",
52
- "pipdeptree",
53
52
  "pre-commit",
54
53
  "psutil",
55
54
  "pydata-sphinx-theme>=0.12",
@@ -59,6 +58,7 @@ dev = [
59
58
  "pytest-asyncio",
60
59
  "pytest-cov",
61
60
  "pytest-json-report",
61
+ "pytest-timeout",
62
62
  "pytest-random-order",
63
63
  "ruff",
64
64
  "sphinx<7.4.6", # pinned due to https://github.com/sphinx-doc/sphinx/issues/12660
@@ -67,7 +67,7 @@ dev = [
67
67
  "sphinxcontrib-mermaid",
68
68
  "sphinx-design",
69
69
  "sphinx-autodoc-typehints",
70
- "tox-direct",
70
+ "tox-uv",
71
71
  "types-requests",
72
72
  "types-mock",
73
73
  "types-PyYAML",
@@ -113,6 +113,7 @@ reportMissingImports = false # Ignore missing stubs in imported modules
113
113
  [tool.pytest.ini_options]
114
114
  # Run pytest with all our checkers, and don't spam us with massive tracebacks on error
115
115
  asyncio_mode = "auto"
116
+ timeout = 1
116
117
  markers = [
117
118
  "requires: marks tests as requiring other infrastructure",
118
119
  "skip_in_pycharm: marks test as not working in pycharm testrunner",
@@ -140,37 +141,107 @@ exclude_also = [
140
141
  omit = ["*/dodal/testing/fixtures/*"]
141
142
 
142
143
  [tool.coverage.run]
144
+ patch = ["subprocess"]
143
145
  data_file = "/tmp/dodal.coverage"
144
146
 
145
147
  [tool.coverage.paths]
146
148
  # Tests are run from installed location, map back to the src directory
147
149
  source = ["src", "**/site-packages/"]
148
150
 
149
- # tox must currently be configured via an embedded ini string
150
- # See: https://github.com/tox-dev/tox/issues/999
151
151
  [tool.tox]
152
- legacy_tox_ini = """
153
- [tox]
154
- skipsdist=True
155
-
156
- [testenv:{pre-commit,type-checking,tests,docs,unit-report,system-report}]
157
- # Don't create a virtualenv for the command, requires tox-direct plugin
158
- direct = True
159
- passenv = *
160
- allowlist_externals =
161
- pytest
162
- pre-commit
163
- pyright
164
- sphinx-build
165
- sphinx-autobuild
166
- commands =
167
- tests: pytest -m 'not requires' {posargs}
168
- type-checking: pyright src tests {posargs}
169
- pre-commit: pre-commit run --all-files --show-diff-on-failure {posargs}
170
- docs: sphinx-{posargs:build -E} -T docs build/html
171
- unit-report: pytest --cov-report xml:unit_cov.xml --json-report --json-report-file=unit-report.json tests {posargs}
172
- system-report: pytest -m 'not requires(instrument="i04")' --cov-report xml:system_cov.xml --json-report --json-report-file=system-report.json system_tests {posargs}
173
- """
152
+ skipsdist = true
153
+ # envs to runs automatically with tox -p
154
+ env_list = ["pre-commit", "type-checking", "tests", "docs"]
155
+
156
+ [tool.tox.env_run_base]
157
+ # Pass all environment variables to the test environments
158
+ passenv = ["*"]
159
+
160
+ [tool.tox.env.pre-commit]
161
+ description = "Run pre-commit on all files"
162
+ commands = [
163
+ [
164
+ "pre-commit",
165
+ "run",
166
+ "--all-files",
167
+ "--show-diff-on-failure",
168
+ { replace = "posargs", default = [
169
+ ], extend = true },
170
+ ],
171
+ ]
172
+
173
+ [tool.tox.env.type-checking]
174
+ description = "Run pyright"
175
+ commands = [
176
+ [
177
+ "pyright",
178
+ "--pythonpath",
179
+ "{env:VIRTUAL_ENV}/bin/python",
180
+ "src",
181
+ "tests",
182
+ { replace = "posargs", default = [
183
+ ], extend = true },
184
+ ],
185
+ ]
186
+
187
+ [tool.tox.env.tests]
188
+ description = "Run tests with coverage"
189
+ commands = [
190
+ [
191
+ "pytest",
192
+ "--cov=dodal",
193
+ "--cov-report",
194
+ "term",
195
+ "--cov-report",
196
+ "xml:cov.xml",
197
+ "tests",
198
+ { replace = "posargs", default = [
199
+ ], extend = true },
200
+ ],
201
+ ]
202
+
203
+ [tool.tox.env.system-tests]
204
+ description = "Run system tests with coverage"
205
+ commands = [
206
+ [
207
+ "pytest",
208
+ "-m", "not requires(instrument=\"i04\")",
209
+ "--cov-report", "xml:system_cov.xml",
210
+ "--timeout=10",
211
+ "system_tests",
212
+ { replace = "posargs", default = [], extend = true },
213
+ ],
214
+ ]
215
+
216
+ [tool.tox.env.docs]
217
+ description = "Run docs build with clean environment"
218
+ commands = [
219
+ [
220
+ "sphinx-build",
221
+ "--fresh-env",
222
+ "--show-traceback",
223
+ "--keep-going",
224
+ "docs",
225
+ "build/html",
226
+ { replace = "posargs", default = [
227
+ ], extend = true },
228
+ ],
229
+ ]
230
+
231
+ [tool.tox.env.docs-autobuild]
232
+ description = "Run docs with autobuild on change"
233
+ commands = [
234
+ [
235
+ "sphinx-autobuild",
236
+ "--show-traceback",
237
+ "--watch",
238
+ "README.md",
239
+ "docs",
240
+ "build/html",
241
+ { replace = "posargs", default = [
242
+ ], extend = true },
243
+ ],
244
+ ]
174
245
 
175
246
  [tool.ruff]
176
247
  src = ["src", "tests"]