dls-dodal 1.55.1__tar.gz → 1.56.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 (564) hide show
  1. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/ci.yml +1 -1
  2. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.pre-commit-config.yaml +3 -3
  3. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/PKG-INFO +2 -2
  4. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/conftest.py +16 -7
  5. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/coverage.md +4 -0
  6. dls_dodal-1.56.0/docs/how-to/create-device.md +66 -0
  7. dls_dodal-1.56.0/docs/how-to/run-tests.md +61 -0
  8. dls_dodal-1.56.0/docs/how-to/write-tests.md +119 -0
  9. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/reference/standards.rst +1 -1
  10. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/pyproject.toml +1 -1
  11. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dls_dodal.egg-info/PKG-INFO +2 -2
  12. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dls_dodal.egg-info/SOURCES.txt +59 -26
  13. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dls_dodal.egg-info/requires.txt +1 -1
  14. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/_version.py +16 -3
  15. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/b01_1.py +6 -1
  16. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/b07.py +2 -1
  17. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/b07_1.py +2 -1
  18. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/b21.py +4 -24
  19. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i03.py +53 -53
  20. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i04.py +16 -38
  21. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i09.py +3 -2
  22. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i09_1.py +2 -1
  23. dls_dodal-1.56.0/src/dodal/beamlines/i11.py +143 -0
  24. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i19_1.py +1 -0
  25. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i19_2.py +7 -0
  26. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i22.py +2 -2
  27. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i23.py +3 -3
  28. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i24.py +6 -14
  29. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/p38.py +1 -0
  30. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/p60.py +3 -2
  31. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/cli.py +11 -1
  32. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/__init__.py +4 -0
  33. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/beamlines/beamline_parameters.py +1 -1
  34. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/beamlines/beamline_utils.py +5 -1
  35. dls_dodal-1.56.0/src/dodal/common/enums.py +19 -0
  36. dls_dodal-1.56.0/src/dodal/common/watcher_utils.py +83 -0
  37. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/aithre_lasershaping/laser_robot.py +4 -9
  38. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/aperturescatterguard.py +52 -12
  39. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/apple2_undulator.py +0 -1
  40. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b16/detector.py +1 -10
  41. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/backlight.py +8 -20
  42. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/bimorph_mirror.py +4 -7
  43. dls_dodal-1.56.0/src/dodal/devices/collimation_table.py +36 -0
  44. dls_dodal-1.56.0/src/dodal/devices/controllers.py +21 -0
  45. dls_dodal-1.56.0/src/dodal/devices/cryostream.py +109 -0
  46. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/current_amplifiers/femto.py +1 -1
  47. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/detector/detector_motion.py +1 -7
  48. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/eiger.py +22 -8
  49. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/eiger_odin.py +2 -0
  50. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/__init__.py +2 -1
  51. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/abstract/__init__.py +0 -1
  52. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/abstract/base_detector.py +3 -25
  53. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/abstract/base_driver_io.py +18 -9
  54. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/abstract/base_region.py +34 -3
  55. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/detector.py +24 -0
  56. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/enums.py +5 -0
  57. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/specs/detector.py +2 -1
  58. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/specs/driver_io.py +21 -26
  59. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/specs/region.py +1 -1
  60. dls_dodal-1.56.0/src/dodal/devices/electron_analyser/util.py +33 -0
  61. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/vgscienta/__init__.py +3 -3
  62. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/vgscienta/detector.py +2 -1
  63. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/vgscienta/driver_io.py +24 -32
  64. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/vgscienta/enums.py +0 -8
  65. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/vgscienta/region.py +2 -31
  66. dls_dodal-1.56.0/src/dodal/devices/eurotherm.py +126 -0
  67. dls_dodal-1.56.0/src/dodal/devices/fluorescence_detector_motion.py +9 -0
  68. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/focusing_mirror.py +1 -1
  69. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i03/undulator_dcm.py +0 -1
  70. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i09/enums.py +8 -8
  71. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/diagnostics.py +4 -4
  72. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/i10_apple2.py +3 -6
  73. dls_dodal-1.56.0/src/dodal/devices/i11/cyberstar_blower.py +34 -0
  74. dls_dodal-1.56.0/src/dodal/devices/i11/diff_stages.py +55 -0
  75. dls_dodal-1.56.0/src/dodal/devices/i11/mythen.py +165 -0
  76. dls_dodal-1.56.0/src/dodal/devices/i11/nx100robot.py +153 -0
  77. dls_dodal-1.56.0/src/dodal/devices/i11/spinner.py +30 -0
  78. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i13_1/merlin_controller.py +4 -4
  79. dls_dodal-1.56.0/src/dodal/devices/i19/diffractometer.py +34 -0
  80. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i19/shutter.py +11 -1
  81. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i22/dcm.py +1 -1
  82. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i22/fswitch.py +3 -12
  83. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/aperture.py +3 -3
  84. dls_dodal-1.56.0/src/dodal/devices/i24/dcm.py +29 -0
  85. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/dual_backlight.py +11 -12
  86. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/pmac.py +8 -7
  87. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/mx_phase1/beamstop.py +10 -11
  88. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/pin_image_recognition/__init__.py +0 -3
  89. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p60/enums.py +8 -8
  90. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p60/lab_xray_source.py +3 -2
  91. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/pressure_jump_cell.py +77 -123
  92. dls_dodal-1.56.0/src/dodal/devices/scintillator.py +82 -0
  93. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/smargon.py +2 -2
  94. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/synchrotron.py +1 -2
  95. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/thawer.py +6 -11
  96. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/undulator.py +3 -8
  97. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/util/epics_util.py +1 -1
  98. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/watsonmarlow323_pump.py +7 -7
  99. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/xbpm_feedback.py +4 -6
  100. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/xspress3/xspress3.py +0 -5
  101. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zocalo/zocalo_results.py +1 -3
  102. dls_dodal-1.56.0/src/dodal/testing/electron_analyser/__init__.py +6 -0
  103. dls_dodal-1.56.0/src/dodal/testing/electron_analyser/device_factory.py +59 -0
  104. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/system_tests/test_oav_system.py +6 -6
  105. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/beamlines/unit_tests/test_b16.py +2 -11
  106. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/beamlines/unit_tests/test_i24.py +1 -1
  107. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/beamlines/test_beamline_parameters.py +11 -8
  108. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/beamlines/test_beamline_utils.py +4 -6
  109. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/beamlines/test_device_instantiation.py +2 -2
  110. dls_dodal-1.56.0/tests/common/test_watcher_utils.py +63 -0
  111. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/conftest.py +4 -4
  112. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/aithre_lasershaping/test_goniometer.py +1 -2
  113. dls_dodal-1.56.0/tests/devices/i10/test_data/__init__.py +32 -0
  114. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i10/test_i10Apple2.py +26 -19
  115. dls_dodal-1.56.0/tests/devices/i11/test_i11devices.py +201 -0
  116. dls_dodal-1.56.0/tests/devices/i11/test_mythen.py +82 -0
  117. dls_dodal-1.56.0/tests/devices/i19/test_diffractometer.py +36 -0
  118. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i19/test_shutter.py +5 -5
  119. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i22/test_fswitch.py +5 -4
  120. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i22/test_metadataholder.py +1 -1
  121. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/mx_phase1/test_beamstop.py +21 -18
  122. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/b07_1/test_ccmc.py +5 -7
  123. dls_dodal-1.56.0/tests/devices/unit_tests/detector/test_data/__init__.py +7 -0
  124. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/detector/test_det_resolution.py +4 -1
  125. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/detector/test_detector.py +2 -1
  126. dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py +93 -0
  127. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py +27 -15
  128. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/abstract/test_base_region.py +49 -1
  129. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/conftest.py +8 -6
  130. dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/helper_util/__init__.py +8 -0
  131. dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/helper_util/assert_func.py +16 -0
  132. dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/helper_util/sequence.py +34 -0
  133. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/specs/test_detector.py +10 -10
  134. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py +23 -36
  135. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/specs/test_region.py +8 -8
  136. dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/test_data/__init__.py +8 -0
  137. dls_dodal-1.55.1/tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/test_detector.py +44 -42
  138. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py +9 -8
  139. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py +24 -49
  140. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/vgscienta/test_region.py +9 -35
  141. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i03/test_undulator_dcm.py +17 -10
  142. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i09/test_dcm.py +1 -2
  143. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i24/test_dual_backlight.py +18 -12
  144. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i24/test_focus_mirrors.py +3 -2
  145. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i24/test_pilatus_metadata.py +3 -2
  146. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i24/test_pmac.py +23 -13
  147. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i24/test_vgonio.py +3 -2
  148. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/conftest.py +4 -6
  149. dls_dodal-1.56.0/tests/devices/unit_tests/oav/test_data/__init__.py +13 -0
  150. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/test_oav.py +5 -5
  151. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/test_oav_parameters.py +8 -7
  152. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/test_oav_to_redis_forwarder.py +1 -1
  153. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/test_oav_utils.py +2 -2
  154. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/test_snapshot_image_processing.py +6 -2
  155. dls_dodal-1.56.0/tests/devices/unit_tests/oav/test_snapshots.py +188 -0
  156. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/p60/test_lab_xray_source.py +2 -6
  157. dls_dodal-1.56.0/tests/devices/unit_tests/test.png +0 -0
  158. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_aperture_scatterguard.py +136 -9
  159. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_apple2_undulator.py +4 -4
  160. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_backlight.py +17 -17
  161. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_baton.py +1 -2
  162. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_bimorph_mirror.py +1 -2
  163. dls_dodal-1.56.0/tests/devices/unit_tests/test_controllers.py +16 -0
  164. dls_dodal-1.56.0/tests/devices/unit_tests/test_daq_configuration/__init__.py +6 -0
  165. dls_dodal-1.56.0/tests/devices/unit_tests/test_daq_configuration/domain/__init__.py +10 -0
  166. dls_dodal-1.56.0/tests/devices/unit_tests/test_daq_configuration/lookup/__init__.py +17 -0
  167. dls_dodal-1.56.0/tests/devices/unit_tests/test_data/__init__.py +13 -0
  168. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_eiger.py +7 -4
  169. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_focusing_mirror.py +3 -9
  170. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_gridscan.py +2 -2
  171. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_hutch_shutter.py +1 -1
  172. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_motors.py +1 -2
  173. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_pressure_jump_cell.py +192 -49
  174. dls_dodal-1.56.0/tests/devices/unit_tests/test_scintillator.py +97 -0
  175. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_smargon.py +1 -1
  176. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_synchrotron.py +8 -8
  177. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_tetramm.py +1 -3
  178. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_thawer.py +8 -8
  179. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_turbo_slit.py +2 -3
  180. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_undulator.py +10 -8
  181. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_utils.py +1 -1
  182. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_webcam.py +1 -1
  183. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_xbpm_feedback.py +2 -2
  184. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_zebra.py +2 -3
  185. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_zocalo_results.py +1 -1
  186. dls_dodal-1.56.0/tests/devices/unit_tests/util/test_data/__init__.py +19 -0
  187. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/util/test_lookup_tables.py +32 -15
  188. dls_dodal-1.56.0/tests/plan_stubs/__init__.py +0 -0
  189. dls_dodal-1.56.0/tests/plan_stubs/test_data/__init__.py +11 -0
  190. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plan_stubs/test_data_session.py +8 -1
  191. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plan_stubs/test_motor_util_plans.py +10 -8
  192. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plan_stubs/test_topup_plan.py +24 -19
  193. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plan_stubs/test_wrapped_stubs.py +2 -3
  194. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/conftest.py +7 -10
  195. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_bimorph.py +3 -3
  196. dls_dodal-1.56.0/tests/test_data/__init__.py +17 -0
  197. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/test_utils.py +5 -12
  198. dls_dodal-1.56.0/tests/unit_tests/__init__.py +0 -0
  199. dls_dodal-1.55.1/.talismanrc +0 -10
  200. dls_dodal-1.55.1/docs/how-to/create-device.md +0 -32
  201. dls_dodal-1.55.1/docs/how-to/run-tests.md +0 -44
  202. dls_dodal-1.55.1/docs/how-to/write-tests.md +0 -8
  203. dls_dodal-1.55.1/src/dodal/devices/CTAB.py +0 -41
  204. dls_dodal-1.55.1/src/dodal/devices/cryostream.py +0 -19
  205. dls_dodal-1.55.1/src/dodal/devices/electron_analyser/util.py +0 -13
  206. dls_dodal-1.55.1/src/dodal/devices/fluorescence_detector_motion.py +0 -16
  207. dls_dodal-1.55.1/src/dodal/devices/i24/dcm.py +0 -33
  208. dls_dodal-1.55.1/src/dodal/devices/scintillator.py +0 -10
  209. dls_dodal-1.55.1/tests/constants.py +0 -3
  210. dls_dodal-1.55.1/tests/devices/unit_tests/electron_analyser/util.py +0 -86
  211. dls_dodal-1.55.1/tests/devices/unit_tests/oav/test_snapshots.py +0 -162
  212. dls_dodal-1.55.1/tests/devices/unit_tests/test_lookup_table_2.txt +0 -5
  213. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.copier-answers.yml +0 -0
  214. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.devcontainer/devcontainer.json +0 -0
  215. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/CODEOWNERS +0 -0
  216. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/CONTRIBUTING.md +0 -0
  217. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/ISSUE_TEMPLATE/issue_template.md +0 -0
  218. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/actions/install_requirements/action.yml +0 -0
  219. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/dependabot.yml +0 -0
  220. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/pages/index.html +0 -0
  221. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/pages/make_switcher.py +0 -0
  222. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/scripts/check_test_durations.py +0 -0
  223. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/_dist.yml +0 -0
  224. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/_docs.yml +0 -0
  225. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/_pypi.yml +0 -0
  226. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/_release.yml +0 -0
  227. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/_test.yml +0 -0
  228. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/_tox.yml +0 -0
  229. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.github/workflows/periodic.yml +0 -0
  230. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.gitignore +0 -0
  231. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.vscode/extensions.json +0 -0
  232. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.vscode/launch.json +0 -0
  233. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.vscode/settings.json +0 -0
  234. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/.vscode/tasks.json +0 -0
  235. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/Dockerfile +0 -0
  236. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/LICENSE +0 -0
  237. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/README.md +0 -0
  238. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/catalog-info.yaml +0 -0
  239. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/_templates/autosummary/class.rst +0 -0
  240. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/_templates/autosummary/module.rst +0 -0
  241. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/_templates/custom-module-template.rst +0 -0
  242. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/assets/where-to-put-dodal-logic.png +0 -0
  243. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/assets/zocalo.png +0 -0
  244. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/conf.py +0 -0
  245. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  246. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  247. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions/0003-codeowners.md +0 -0
  248. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions/0004-make-devices-factory.md +0 -0
  249. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions/0005-standardise-devices-at-epics-level.md +0 -0
  250. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions/COPYME +0 -0
  251. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/decisions.md +0 -0
  252. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/reviews.md +0 -0
  253. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/umls/apple2_design.png +0 -0
  254. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations/umls/i10_id_design.png +0 -0
  255. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/explanations.md +0 -0
  256. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/genindex.md +0 -0
  257. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/build-docs.md +0 -0
  258. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/contribute.md +0 -0
  259. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/create-beamline.rst +0 -0
  260. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/dev-install.md +0 -0
  261. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/excalidraw.md +0 -0
  262. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/external-io-devices.md +0 -0
  263. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/lint.md +0 -0
  264. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/lock-requirements.md +0 -0
  265. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/make-release.md +0 -0
  266. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/move-code.rst +0 -0
  267. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/pypi.md +0 -0
  268. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/static-analysis.md +0 -0
  269. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/update-template.md +0 -0
  270. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to/zocalo.rst +0 -0
  271. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/how-to.md +0 -0
  272. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/images/dls-logo.svg +0 -0
  273. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/images/excalidraw-example.svg +0 -0
  274. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/index.md +0 -0
  275. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/reference/api.md +0 -0
  276. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/reference/device-standards.rst +0 -0
  277. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/reference.md +0 -0
  278. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/tutorials/get_started.rst +0 -0
  279. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/tutorials/installation.md +0 -0
  280. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/docs/tutorials.md +0 -0
  281. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/pull_request_template.md +0 -0
  282. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/setup.cfg +0 -0
  283. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/__init__.py +0 -0
  284. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dls_dodal.egg-info/dependency_links.txt +0 -0
  285. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dls_dodal.egg-info/entry_points.txt +0 -0
  286. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dls_dodal.egg-info/top_level.txt +0 -0
  287. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/__init__.py +0 -0
  288. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/__main__.py +0 -0
  289. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamline_specific_utils/__init__.py +0 -0
  290. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamline_specific_utils/i03.py +0 -0
  291. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamline_specific_utils/i05_shared.py +0 -0
  292. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/README.md +0 -0
  293. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/__init__.py +0 -0
  294. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/adsim.py +0 -0
  295. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/aithre.py +0 -0
  296. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/b16.py +0 -0
  297. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/b18.py +0 -0
  298. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i02_1.py +0 -0
  299. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i05.py +0 -0
  300. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i05_1.py +0 -0
  301. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i09_2.py +0 -0
  302. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i10.py +0 -0
  303. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i13_1.py +0 -0
  304. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i18.py +0 -0
  305. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i19_optics.py +0 -0
  306. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/i20_1.py +0 -0
  307. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/k11.py +0 -0
  308. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/p45.py +0 -0
  309. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/p99.py +0 -0
  310. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/beamlines/training_rig.py +0 -0
  311. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/beamlines/__init__.py +0 -0
  312. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/beamlines/device_helpers.py +0 -0
  313. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/coordination.py +0 -0
  314. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/crystal_metadata.py +0 -0
  315. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/data_util.py +0 -0
  316. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/device_utils.py +0 -0
  317. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/maths.py +0 -0
  318. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/types.py +0 -0
  319. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/udc_directory_provider.py +0 -0
  320. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/common/visit.py +0 -0
  321. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/__init__.py +0 -0
  322. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/aithre_lasershaping/__init__.py +0 -0
  323. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/aithre_lasershaping/goniometer.py +0 -0
  324. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/aperture.py +0 -0
  325. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/areadetector/plugins/CAM.py +0 -0
  326. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/areadetector/plugins/MJPG.py +0 -0
  327. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/attenuator/attenuator.py +0 -0
  328. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/attenuator/filter.py +0 -0
  329. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/attenuator/filter_selections.py +0 -0
  330. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b07/__init__.py +0 -0
  331. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b07/enums.py +0 -0
  332. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b07_1/__init__.py +0 -0
  333. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b07_1/ccmc.py +0 -0
  334. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b07_1/enums.py +0 -0
  335. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/b16/__init__.py +0 -0
  336. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/baton.py +0 -0
  337. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/common_dcm.py +0 -0
  338. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/current_amplifiers/__init__.py +0 -0
  339. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/current_amplifiers/current_amplifier.py +0 -0
  340. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/current_amplifiers/current_amplifier_detector.py +0 -0
  341. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/current_amplifiers/sr570.py +0 -0
  342. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/current_amplifiers/struck_scaler_counter.py +0 -0
  343. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/detector/__init__.py +0 -0
  344. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/detector/det_dim_constants.py +0 -0
  345. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/detector/det_dist_to_beam_converter.py +0 -0
  346. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/detector/det_resolution.py +0 -0
  347. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/detector/detector.py +0 -0
  348. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/diamond_filter.py +0 -0
  349. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/abstract/types.py +0 -0
  350. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/specs/__init__.py +0 -0
  351. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/specs/enums.py +0 -0
  352. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/electron_analyser/types.py +0 -0
  353. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/fast_grid_scan.py +0 -0
  354. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/flux.py +0 -0
  355. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/hutch_shutter.py +0 -0
  356. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i03/__init__.py +0 -0
  357. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i03/dcm.py +0 -0
  358. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i04/__init__.py +0 -0
  359. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i04/constants.py +0 -0
  360. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i04/murko_results.py +0 -0
  361. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i04/transfocator.py +0 -0
  362. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i05/__init__.py +0 -0
  363. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i05/enums.py +0 -0
  364. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i09/__init__.py +0 -0
  365. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i09/dcm.py +0 -0
  366. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i09_1/__init__.py +0 -0
  367. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i09_1/enums.py +0 -0
  368. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/__init__.py +0 -0
  369. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/i10_setting_data.py +0 -0
  370. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/mirrors.py +0 -0
  371. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/rasor/rasor_current_amp.py +0 -0
  372. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/rasor/rasor_motors.py +0 -0
  373. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/rasor/rasor_scaler_cards.py +0 -0
  374. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i10/slits.py +0 -0
  375. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i13_1/__init__.py +0 -0
  376. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i13_1/merlin.py +0 -0
  377. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i18/KBMirror.py +0 -0
  378. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i18/diode.py +0 -0
  379. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i19/__init__.py +0 -0
  380. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i19/beamstop.py +0 -0
  381. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i19/blueapi_device.py +0 -0
  382. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i19/hutch_access.py +0 -0
  383. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i20_1/__init__.py +0 -0
  384. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i22/nxsas.py +0 -0
  385. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/__init__.py +0 -0
  386. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/beam_center.py +0 -0
  387. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/beamstop.py +0 -0
  388. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/focus_mirrors.py +0 -0
  389. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/pilatus_metadata.py +0 -0
  390. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/i24/vgonio.py +0 -0
  391. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/ipin.py +0 -0
  392. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/linkam3.py +0 -0
  393. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/motors.py +0 -0
  394. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/__init__.py +0 -0
  395. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/oav_calculations.py +0 -0
  396. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/oav_detector.py +0 -0
  397. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/oav_parameters.py +0 -0
  398. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/oav_to_redis_forwarder.py +0 -0
  399. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/pin_image_recognition/manual_test.py +0 -0
  400. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/pin_image_recognition/utils.py +0 -0
  401. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/snapshots/grid_overlay.py +0 -0
  402. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/snapshots/snapshot.py +0 -0
  403. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/snapshots/snapshot_image_processing.py +0 -0
  404. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/snapshots/snapshot_with_grid.py +0 -0
  405. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/oav/utils.py +0 -0
  406. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p45.py +0 -0
  407. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p60/__init__.py +0 -0
  408. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p99/__init__.py +0 -0
  409. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p99/andor2_point.py +0 -0
  410. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/p99/sample_stage.py +0 -0
  411. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/pgm.py +0 -0
  412. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/positioner.py +0 -0
  413. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/qbpm.py +0 -0
  414. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/robot.py +0 -0
  415. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/s4_slit_gaps.py +0 -0
  416. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/slits.py +0 -0
  417. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/status.py +0 -0
  418. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/tetramm.py +0 -0
  419. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/turbo_slit.py +0 -0
  420. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/util/__init__.py +0 -0
  421. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/util/adjuster_plans.py +0 -0
  422. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/util/lookup_tables.py +0 -0
  423. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/util/test_utils.py +0 -0
  424. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/webcam.py +0 -0
  425. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/xspress3/xspress3_channel.py +0 -0
  426. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zebra/__init__.py +0 -0
  427. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zebra/zebra.py +0 -0
  428. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zebra/zebra_constants_mapping.py +0 -0
  429. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zebra/zebra_controlled_shutter.py +0 -0
  430. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zocalo/__init__.py +0 -0
  431. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zocalo/zocalo_constants.py +0 -0
  432. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/devices/zocalo/zocalo_interaction.py +0 -0
  433. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/log.py +0 -0
  434. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/parameters/experiment_parameter_base.py +0 -0
  435. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plan_stubs/__init__.py +0 -0
  436. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plan_stubs/check_topup.py +0 -0
  437. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plan_stubs/data_session.py +0 -0
  438. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plan_stubs/motor_utils.py +0 -0
  439. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plan_stubs/wrapped.py +0 -0
  440. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/__init__.py +0 -0
  441. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/bimorph.py +0 -0
  442. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/configure_arm_trigger_and_disarm_detector.py +0 -0
  443. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/preprocessors/__init__.py +0 -0
  444. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/preprocessors/verify_undulator_gap.py +0 -0
  445. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/save_panda.py +0 -0
  446. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/scanspec.py +0 -0
  447. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/verify_undulator_gap.py +0 -0
  448. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/plans/wrapped.py +0 -0
  449. {dls_dodal-1.55.1/system_tests → dls_dodal-1.56.0/src/dodal/testing}/__init__.py +0 -0
  450. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/src/dodal/utils.py +0 -0
  451. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/system_tests}/__init__.py +0 -0
  452. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/system_tests/test_adsim.py +0 -0
  453. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/system_tests/test_cli.py +0 -0
  454. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/system_tests/test_oav_to_redis_system.py +0 -0
  455. {dls_dodal-1.55.1/tests/beamlines → dls_dodal-1.56.0/tests}/__init__.py +0 -0
  456. {dls_dodal-1.55.1/tests/beamlines/unit_tests → dls_dodal-1.56.0/tests/beamlines}/__init__.py +0 -0
  457. {dls_dodal-1.55.1/tests/common → dls_dodal-1.56.0/tests/beamlines/unit_tests}/__init__.py +0 -0
  458. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/beamlines/unit_tests/test_i03.py +0 -0
  459. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/beamlines/unit_tests/test_mapping.py +0 -0
  460. {dls_dodal-1.55.1/tests/common/beamlines → dls_dodal-1.56.0/tests/common}/__init__.py +0 -0
  461. {dls_dodal-1.55.1/tests/devices → dls_dodal-1.56.0/tests/common/beamlines}/__init__.py +0 -0
  462. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/test_coordination.py +0 -0
  463. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/test_crystal_metadata.py +0 -0
  464. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/test_maths.py +0 -0
  465. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/test_udc_directory_provider.py +0 -0
  466. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/common/test_visit.py +0 -0
  467. {dls_dodal-1.55.1/tests/devices/i03 → dls_dodal-1.56.0/tests/devices}/__init__.py +0 -0
  468. {dls_dodal-1.55.1/tests/devices/i04 → dls_dodal-1.56.0/tests/devices/i03}/__init__.py +0 -0
  469. {dls_dodal-1.55.1/tests/devices/i19 → dls_dodal-1.56.0/tests/devices/i04}/__init__.py +0 -0
  470. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i04/test_murko_results.py +0 -0
  471. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i04/test_transfocator.py +0 -0
  472. {dls_dodal-1.55.1/tests/devices/i10/lookupTables → dls_dodal-1.56.0/tests/devices/i10/test_data}/IDEnergy2GapCalibrations.csv +0 -0
  473. {dls_dodal-1.55.1/tests/devices/i10/lookupTables → dls_dodal-1.56.0/tests/devices/i10/test_data}/IDEnergy2PhaseCalibrations.csv +0 -0
  474. {dls_dodal-1.55.1/tests/devices/i10/lookupTables → dls_dodal-1.56.0/tests/devices/i10/test_data}/expectedIDEnergy2GapCalibrationsIdd.pkl +0 -0
  475. {dls_dodal-1.55.1/tests/devices/i10/lookupTables → dls_dodal-1.56.0/tests/devices/i10/test_data}/expectedIDEnergy2GapCalibrationsIdu.pkl +0 -0
  476. {dls_dodal-1.55.1/tests/devices/i10/lookupTables → dls_dodal-1.56.0/tests/devices/i10/test_data}/expectedIDEnergy2PhaseCalibrationsidd.pkl +0 -0
  477. {dls_dodal-1.55.1/tests/devices/i10/lookupTables → dls_dodal-1.56.0/tests/devices/i10/test_data}/expectedIDEnergy2PhaseCalibrationsidu.pkl +0 -0
  478. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i13_1/test_merlin.py +0 -0
  479. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i18/test_kb_mirror.py +0 -0
  480. {dls_dodal-1.55.1/tests/devices/mx_phase1 → dls_dodal-1.56.0/tests/devices/i19}/__init__.py +0 -0
  481. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i19/test_beamstop.py +0 -0
  482. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/i22/test_dcm.py +0 -0
  483. {dls_dodal-1.55.1/tests/devices/unit_tests → dls_dodal-1.56.0/tests/devices/mx_phase1}/__init__.py +0 -0
  484. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/test_common_dcm.py +0 -0
  485. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/test_diamond_filter.py +0 -0
  486. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/test_motors.py +0 -0
  487. {dls_dodal-1.55.1/tests/devices/unit_tests/electron_analyser → dls_dodal-1.56.0/tests/devices/unit_tests}/__init__.py +0 -0
  488. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/current_amplifier/test_femto.py +0 -0
  489. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/current_amplifier/test_sr570.py +0 -0
  490. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/tests/devices/unit_tests/detector}/test_data/test_det_dist_converter.txt +0 -0
  491. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/detector/test_det_dim_constants.py +0 -0
  492. {dls_dodal-1.55.1/tests/devices/unit_tests/electron_analyser/abstract → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser}/__init__.py +0 -0
  493. {dls_dodal-1.55.1/tests/devices/unit_tests/electron_analyser/specs → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/abstract}/__init__.py +0 -0
  494. {dls_dodal-1.55.1/tests/devices/unit_tests/electron_analyser/vgscienta → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/specs}/__init__.py +0 -0
  495. {dls_dodal-1.55.1/tests/test_data/electron_analyser → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/test_data}/specs_sequence.seq +0 -0
  496. {dls_dodal-1.55.1/tests/test_data/electron_analyser → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/test_data}/vgscienta_sequence.seq +0 -0
  497. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/electron_analyser/test_util.py +0 -0
  498. {dls_dodal-1.55.1/tests/devices/unit_tests/i03 → dls_dodal-1.56.0/tests/devices/unit_tests/electron_analyser/vgscienta}/__init__.py +0 -0
  499. {dls_dodal-1.55.1/tests/devices/unit_tests/i09 → dls_dodal-1.56.0/tests/devices/unit_tests/i03}/__init__.py +0 -0
  500. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/i03/test_dcm.py +0 -0
  501. {dls_dodal-1.55.1/tests/devices/unit_tests/i24 → dls_dodal-1.56.0/tests/devices/unit_tests/i09}/__init__.py +0 -0
  502. {dls_dodal-1.55.1/tests/devices/unit_tests/oav → dls_dodal-1.56.0/tests/devices/unit_tests/i24}/__init__.py +0 -0
  503. {dls_dodal-1.55.1/tests/devices/unit_tests/util → dls_dodal-1.56.0/tests/devices/unit_tests/oav}/__init__.py +0 -0
  504. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py +0 -0
  505. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py +0 -0
  506. {dls_dodal-1.55.1/tests/test_data/test_images → dls_dodal-1.56.0/tests/devices/unit_tests/oav/test_data}/oav_snapshot_expected.png +0 -0
  507. {dls_dodal-1.55.1/tests/test_data/test_images → dls_dodal-1.56.0/tests/devices/unit_tests/oav/test_data}/oav_snapshot_test.png +0 -0
  508. {dls_dodal-1.55.1/tests/devices/unit_tests → dls_dodal-1.56.0/tests/devices/unit_tests/oav/test_data}/test_OAVCentring.json +0 -0
  509. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/oav/test_grid_overlay.py +0 -0
  510. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/p99/test_p99_stage.py +0 -0
  511. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_aperture.py +0 -0
  512. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_attenuator.py +0 -0
  513. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_bart_robot.py +0 -0
  514. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_beam_converter.py +0 -0
  515. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters +0 -0
  516. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt +0 -0
  517. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt +0 -0
  518. {dls_dodal-1.55.1/tests/devices/unit_tests → dls_dodal-1.56.0/tests/devices/unit_tests/test_data}/test_beamline_undulator_to_gap_lookup_table.txt +0 -0
  519. {dls_dodal-1.55.1/tests/devices/unit_tests → dls_dodal-1.56.0/tests/devices/unit_tests/test_data}/test_lookup_table.txt +0 -0
  520. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_odin.py +0 -0
  521. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_positioner.py +0 -0
  522. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_qbpm.py +0 -0
  523. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_slits.py +0 -0
  524. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_status.py +0 -0
  525. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_watsonmarlow323_pump.py +0 -0
  526. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_xspress3.py +0 -0
  527. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_zebra_constants_mapping.py +0 -0
  528. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_zebra_shutter.py +0 -0
  529. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/test_zocalo_interaction.py +0 -0
  530. {dls_dodal-1.55.1/tests/fake_zocalo → dls_dodal-1.56.0/tests/devices/unit_tests/util}/__init__.py +0 -0
  531. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/util/test_adjuster_plans.py +0 -0
  532. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/util/test_beamline_specific_utils.py +0 -0
  533. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/tests/devices/unit_tests/util}/test_data/test_beamline_dcm_roll_converter.txt +0 -0
  534. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/tests/devices/unit_tests/util}/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt +0 -0
  535. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/tests/devices/unit_tests/util}/test_data/test_beamline_dcm_roll_converter_reversed.txt +0 -0
  536. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/devices/unit_tests/util/test_save_panda.py +0 -0
  537. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline.py +0 -0
  538. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline_all_devices_raise_exception.py +0 -0
  539. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline_broken_dependency.py +0 -0
  540. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline_dependencies.py +0 -0
  541. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline_disordered_dependencies.py +0 -0
  542. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline_misbehaving_builtins.py +0 -0
  543. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_beamline_some_devices_working.py +0 -0
  544. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_device_factory_beamline.py +0 -0
  545. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_zocalo/README.rst +0 -0
  546. {dls_dodal-1.55.1/tests/unit_tests → dls_dodal-1.56.0/tests/fake_zocalo}/__init__.py +0 -0
  547. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_zocalo/__main__.py +0 -0
  548. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/fake_zocalo/dls_start_fake_zocalo.sh +0 -0
  549. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/tests/plan_stubs}/test_data/topup_long_delay.txt +0 -0
  550. {dls_dodal-1.55.1/tests → dls_dodal-1.56.0/tests/plan_stubs}/test_data/topup_short_params.txt +0 -0
  551. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_compliance.py +0 -0
  552. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_configure_arm_trigger_and_disarm_detector.py +0 -0
  553. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_preprocessors/test_verify_undulator_gap.py +0 -0
  554. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_scanspec.py +0 -0
  555. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_verify_undulator_gap_plan.py +0 -0
  556. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/plans/test_wrapped.py +0 -0
  557. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/preprocessors/test_filesystem_metadata.py +0 -0
  558. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/test_data/bad_beamlineParameters +0 -0
  559. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/test_data/i04_beamlineParameters +0 -0
  560. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/test_data/test_beamline_parameters.txt +0 -0
  561. {dls_dodal-1.55.1/tests/devices/unit_tests → dls_dodal-1.56.0/tests/test_data}/test_display.configuration +0 -0
  562. /dls_dodal-1.55.1/tests/devices/unit_tests/test_jCameraManZoomLevels.xml → /dls_dodal-1.56.0/tests/test_data/test_oav_zoom_levels.xml +0 -0
  563. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/unit_tests/test_cli.py +0 -0
  564. {dls_dodal-1.55.1 → dls_dodal-1.56.0}/tests/unit_tests/test_log.py +0 -0
@@ -19,7 +19,7 @@ jobs:
19
19
  strategy:
20
20
  matrix:
21
21
  runs-on: ["ubuntu-latest"] # can add windows-latest, macos-latest
22
- python-version: ["3.11", "3.12"]
22
+ python-version: ["3.11", "3.12", "3.13"]
23
23
  include:
24
24
  # Include one that runs in the dev environment
25
25
  - runs-on: "ubuntu-latest"
@@ -31,7 +31,7 @@ repos:
31
31
  types: [python]
32
32
  require_serial: false
33
33
 
34
- - repo: https://github.com/thoughtworks/talisman
35
- rev: v1.37.0
34
+ - repo: https://github.com/gitleaks/gitleaks
35
+ rev: v8.28.0
36
36
  hooks:
37
- - id: talisman-commit
37
+ - id: gitleaks
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.55.1
3
+ Version: 1.56.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
@@ -216,7 +216,7 @@ License-File: LICENSE
216
216
  Requires-Dist: click
217
217
  Requires-Dist: ophyd
218
218
  Requires-Dist: ophyd-async[ca,pva]>=0.13.0
219
- Requires-Dist: bluesky
219
+ Requires-Dist: bluesky==1.14.2
220
220
  Requires-Dist: pyepics
221
221
  Requires-Dist: dataclasses-json
222
222
  Requires-Dist: pillow
@@ -14,6 +14,12 @@ from ophyd_async.core import (
14
14
  PathInfo,
15
15
  PathProvider,
16
16
  )
17
+ from tests.devices.i10.test_data import LOOKUP_TABLE_PATH
18
+ from tests.devices.unit_tests.test_daq_configuration import MOCK_DAQ_CONFIG_PATH
19
+ from tests.test_data import (
20
+ TEST_DISPLAY_CONFIG,
21
+ TEST_OAV_ZOOM_LEVELS_XML,
22
+ )
17
23
 
18
24
  from dodal.common.beamlines import beamline_utils
19
25
  from dodal.common.visit import (
@@ -23,12 +29,11 @@ from dodal.common.visit import (
23
29
  )
24
30
  from dodal.log import LOGGER, GELFTCPHandler, set_up_all_logging_handlers
25
31
 
26
- MOCK_DAQ_CONFIG_PATH = "tests/devices/unit_tests/test_daq_configuration"
27
32
  mock_paths = [
28
33
  ("DAQ_CONFIGURATION_PATH", MOCK_DAQ_CONFIG_PATH),
29
- ("ZOOM_PARAMS_FILE", "tests/devices/unit_tests/test_jCameraManZoomLevels.xml"),
30
- ("DISPLAY_CONFIG", "tests/devices/unit_tests/test_display.configuration"),
31
- ("LOOK_UPTABLE_DIR", "tests/devices/i10/lookupTables/"),
34
+ ("ZOOM_PARAMS_FILE", TEST_OAV_ZOOM_LEVELS_XML),
35
+ ("DISPLAY_CONFIG", TEST_DISPLAY_CONFIG),
36
+ ("LOOK_UPTABLE_DIR", LOOKUP_TABLE_PATH),
32
37
  ]
33
38
  mock_attributes_table = {
34
39
  "i03": mock_paths,
@@ -119,8 +124,8 @@ def failed_status(failure: Exception) -> Status:
119
124
  return status
120
125
 
121
126
 
122
- @pytest.fixture
123
- async def RE():
127
+ @pytest.fixture(scope="session", autouse=True)
128
+ async def _ensure_running_bluesky_event_loop():
124
129
  RE = RunEngine()
125
130
  # make sure the event loop is thoroughly up and running before we try to create
126
131
  # any ophyd_async devices which might need it
@@ -129,4 +134,8 @@ async def RE():
129
134
  await asyncio.sleep(0)
130
135
  if time.monotonic() > timeout:
131
136
  raise TimeoutError("This really shouldn't happen but just in case...")
132
- yield RE
137
+
138
+
139
+ @pytest.fixture()
140
+ async def RE():
141
+ yield RunEngine()
@@ -3,6 +3,10 @@
3
3
 
4
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.
5
5
 
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
+ - Green = covered by tests
8
+ - Red = not covered (and ideally should be tested)
9
+
6
10
  ## Adding a Codecov Token
7
11
 
8
12
  If the repo is not hosted in DiamondLightSource, then you need to visit `https://app.codecov.io/account/gh/<org_name>/org-upload-token` to generate a token for your org, and store it as a secret named `CODECOV_TOKEN` in `https://github.com/organizations/<org_name>/settings/secrets/actions`
@@ -0,0 +1,66 @@
1
+ Creating a new device
2
+ ---------------------
3
+
4
+ Devices in dodal use the ophyd-async framework for hardware abstraction at Diamond Light Source. Before starting, [review where your code should live](../reference/device-standards.rst#where_to_put_devices) to avoid duplication and ensure maintainability.
5
+
6
+ Reusing an existing class
7
+ =========================
8
+
9
+ Before creating a new device, always check if a suitable class already exists in dodal or ophyd-async. This helps avoid duplication, ensures maintainability, and leverages tested code.
10
+
11
+ - **Motors:** Use [Motor](https://github.com/bluesky/ophyd-async/blob/main/src/ophyd_async/epics/motor.py) for EPICS motor records.
12
+ - **Storage ring signals:** Use [Synchrotron](https://github.com/DiamondLightSource/dodal/blob/main/src/dodal/devices/synchrotron.py).
13
+ - **AreaDetectors:** Use [StandardDetector](https://github.com/bluesky/ophyd-async/tree/main/src/ophyd_async/epics/adcore) or [adcore](https://github.com/bluesky/ophyd-async/tree/main/src/ophyd_async/epics/adcore).
14
+
15
+ If a compatible device class exists:
16
+ - Use it and add it to the [beamline](./create-beamline.rst) to avoid re-implementation and share improvements.
17
+ - You can use ophyd-async's [DeviceVector](https://blueskyproject.io/ophyd-async/main/explanations/decisions/0006-procedural-device-definitions.html) to handle a collection of identical devices.
18
+ - If a device class only differs by PV address, request an alias in the EPICS IOC support module with the relevant controls support team.
19
+ - If that's not possible (e.g. proprietary support), add configurability to the dodal device class, ensuring defaults match existing patterns and that `dodal connect` still works for current devices.
20
+ - Avoid dynamic attribute assignment (e.g. dicts of motors) as it hinders type checking and plan writing.
21
+ - Use static attributes and type hints for better IDE support and maintainability.
22
+
23
+ Many device classes in `dodal.devices.motors` represent physical relationships between motors, such as `Stage` and `XYStage`.
24
+
25
+ For example, only use `XYStage` for two perpendicular motors (e.g. X and Y axes on a sample table):
26
+ - Do not use `XYStage` for unrelated motors or for motors that move in the same axis (e.g. coarse and fine adjustment).
27
+ - Only a device that represents a group of motors with a physical relationship, should be defined in `motor`.
28
+ - If your class define an `XYStage` but you need extra signals or behaviour, extend the `XYStage` class outside the `motor` module.
29
+
30
+ **Only if no suitable class exists**, create a new device that connects to the required signals. During review, refactor to align with existing devices if needed, using inheritance or composition to deduplicate code.
31
+
32
+ Writing a device class
33
+ ======================
34
+
35
+ To develop a new device, get an initial, working version of your code into the main branch as early as possible. Test it at the beamline, then continuously make and merge small changes into main. This approach prevents pull requests from becoming long-standing issues.
36
+
37
+ - **Follow the [ophyd-async device implementation guide](https://blueskyproject.io/ophyd-async/main/tutorials/implementing-devices.html)** to structure your device code.
38
+ - **Choose the right base class** by consulting the [base class guide](https://blueskyproject.io/ophyd-async/main/how-to/choose-right-baseclass.html), If your device needs to move, you'll need to extend the Movable protocol. For detailed guidance on when and how to do this, refer to the [movable device guide](https://blueskyproject.io/ophyd-async/main/explanations/when-to-extend-movable.html).
39
+ - **Write thorough unit tests** for all expected use cases. Reference the [ophyd-async device test guide](https://blueskyproject.io/ophyd-async/main/tutorials/implementing-devices.html) for best practices.
40
+ - **Validate your device on the beamline** and keep notes of any issues for later fixes.
41
+ - **Make use of type annotations** so that pyright will validate that you are passing around values that ophyd-async will accept.
42
+ - Use `dodal connect <beamline>` to check device connectivity and `cainfo <PV address>` to confirm PVs and datatypes. You can check a PV's datatype by using the `cainfo <PV address>` command. If the datatype is an enum, `caget -d 31 <PV address>` will also display the available enums that the PV takes. Common enums are defined in `ophyd-async.core` for devices to use, but you can define custom ones when suitable (inheriting from `ophyd_async.core` `StrictEnum`, `SupersetEnum` or `SubsetEnum`). The values should be capitalised e.g `ON = "On"`. If the PV expects upper case for the enum (e.g `ON = "ON"`), please speak to the relevant controls engineer(s) to get this changed if possible. For more infomation, please visit [here](https://blueskyproject.io/ophyd-async/main/explanations/decisions/0008-signal-types.html).
43
+
44
+ **Device best practices for Bluesky plans:**
45
+
46
+ - Interact with devices in plans only through the Bluesky [messages protocol](https://blueskyproject.io/bluesky/main/msg.html), such as `yield from bps.abs_set(...)` or `yield Msg("set", ...)`.
47
+ - Avoid calling device methods directly inside plans (e.g. `device.do_thing()`), as this breaks the abstraction and can lead to unpredictable behaviour.
48
+
49
+ Example of what **not** to do:
50
+ ```python
51
+ class MyDevice(Device):
52
+ def do_thing(...):
53
+ ...
54
+
55
+ def my_plan():
56
+ yield from bps.set(...)
57
+ device.do_thing() # This is bad: do not call device methods directly in plans
58
+ ```
59
+
60
+ **Tip:**
61
+
62
+ - If you are unsure how to represent a PV as a Signal, seek feedback early (for example, by opening a draft PR).
63
+ - Whenever possible, merge with existing devices—comprehensive tests help ensure changes do not break current functionality.
64
+ - Document any device-specific quirks or limitations for future maintainers.
65
+
66
+ For further guidance, see the [ophyd-async documentation](https://blueskyproject.io/ophyd-async/main/how-to/choose-interfaces-for-devices.html).
@@ -0,0 +1,61 @@
1
+ (using-pytest)=
2
+
3
+ # Running tests
4
+
5
+ Tests can be ran locally via command line or VSCode IDE.
6
+
7
+ ## With VSCode
8
+
9
+ When using the VSCode IDE, it should automatically detect all of your tests and display one of the following icons next to each of them:
10
+ - Grey circle (not run yet)
11
+ - Green circle with a tick (test passed)
12
+ - Red circle with a cross (test failed)
13
+
14
+ 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:
15
+ - Green = covered by tests
16
+ - Red = not covered (and ideally should be tested)
17
+
18
+ To view all tests inside dodal, use the `Test Explorer` panel (flask icon) in VSCode. It displays all of your tests in a hierarchy, which you can run individually or in groups. It also shows the pass/fail icons mentioned above. Clicking on an item will run all tests beneath it in the hierarchy.
19
+
20
+ If you find that your tests are being skipped or not recognised by `pytest`, check for any syntax errors as this will block the tests being found. You can also check to see if there is an error output at the very bottom of the `Test Explorer` panel. This is usually caused by invalid syntax in your test file, or by circular dependencies in the code you are testing.
21
+
22
+ ## Command line
23
+
24
+ ### Unit tests
25
+
26
+ `pytest` will find functions in the project that [look like tests][look like tests], and run them to check for errors.
27
+
28
+ When you have some fully working tests then you can run it with coverage:
29
+
30
+ ```
31
+ $ tox -e tests
32
+ ```
33
+
34
+ It will also report coverage to the command line and to `cov.xml`.
35
+
36
+ [look like tests]: https://docs.pytest.org/explanation/goodpractices.html#test-discovery
37
+ [pytest]: https://pytest.org/
38
+
39
+ ### System tests locally
40
+
41
+ The system tests require the ``example-services`` project:
42
+
43
+ ```commandline
44
+ git clone git@github.com:epics-containers/example-services.git
45
+ ```
46
+
47
+ Then you need to launch some of the example ioc containers. Please note, this requires docker-compose not
48
+ podman-compose:
49
+
50
+ ```commandline
51
+ module load docker-compose
52
+ cd example-services
53
+ . ./environment.sh
54
+ podman compose up -d bl01t-di-cam-01 bl01t-mo-sim-01 ca-gateway
55
+ ```
56
+
57
+ Once this is done, then the system tests can be run:
58
+
59
+ ```commandline
60
+ tox -e system-report
61
+ ```
@@ -0,0 +1,119 @@
1
+ # Writing Tests in This Python Project
2
+
3
+ Testing is essential to maintain the integrity and reliability of the codebase. Follow the guidelines below to write tests for this project effectively.
4
+
5
+ ## Test Organization
6
+
7
+ - **Unit Tests**: Place unit tests for individual components in the `tests` directory, but take care to mirror the file structure of the `src` folder with the corresponding code files. Use the `test_*.py` naming convention for test files.
8
+ - **System Tests**: Tests that interact with DLS infrastructure, network, and filesystem should be placed in the top-level `systems_test` folder. This separation ensures that these tests are easily identifiable and can be run independently from unit tests.
9
+
10
+ ## Writing a test for a device
11
+ We aim for high test coverage in dodal with small, modular test functions. To achieve this, we need to test the relevant methods by writing tests for the class/method we are creating or changing, checking for the expected behaviour. We shouldn't need to write tests for parent classes unless we alter their behaviour.
12
+
13
+ Below, a `StandardReadable` example device is defined which also implements the `Stageable` protocol.
14
+
15
+ ```Python
16
+ from bluesky import RunEngine
17
+ from bluesky.protocols import Stageable
18
+ from ophyd_async.core import AsyncStatus, OnOff, StandardReadable
19
+ from ophyd_async.epics.core import epics_signal_rw
20
+
21
+
22
+ class MyDevice(StandardReadable, Stageable):
23
+ """
24
+ Example device demostrating how to test stage, unstage and read methods.
25
+ """
26
+
27
+ def __init__(self, prefix: str, name: str = "") -> None:
28
+ """
29
+ Constructor for setting up instance of device.
30
+
31
+ Parameters:
32
+ prefix: Base PV used for connecting signals.
33
+ name: Name of the device.
34
+ """
35
+ with self.add_children_as_readables():
36
+ self.signal_a = epics_signal_rw(float, prefix + "A")
37
+ self.signal_b = epics_signal_rw(OnOff, prefix + "B")
38
+
39
+ super().__init__(name)
40
+
41
+ @AsyncStatus.wrap
42
+ async def stage(self):
43
+ """
44
+ Setup device by moving signal_a to ON.
45
+ """
46
+ await asyncio.gather(super().stage(), self.signal_b.set(OnOff.ON))
47
+
48
+ @AsyncStatus.wrap
49
+ async def unstage(self):
50
+ """
51
+ Once device is finished, set signal_b back to OFF.
52
+ """
53
+ await asyncio.gather(super().stage(), self.signal_b.set(OnOff.OFF))
54
+ ```
55
+
56
+ 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.
57
+
58
+ 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.
59
+
60
+ 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.
61
+
62
+ 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.
63
+
64
+ ```Python
65
+ import asyncio
66
+
67
+ import pytest
68
+ from bluesky import RunEngine
69
+ from bluesky import plan_stubs as bps
70
+ from ophyd_async.core import OnOff, init_devices
71
+ from ophyd_async.testing import assert_reading, get_mock_put, partial_reading
72
+ from dodal.device.my_device import MyDevice
73
+
74
+
75
+ # RunEngine is needed to make sure there is an event loop when creating device.
76
+ @pytest.fixture
77
+ async def sim_my_device(RE: RunEngine) -> MyDevice:
78
+ async with init_devices(mock=True):
79
+ sim_my_device = MyDevice("TEST:")
80
+ return sim_my_device
81
+
82
+
83
+ def test_my_device_stage(sim_my_device: MyDevice, RE: RunEngine) -> None:
84
+ RE(bps.stage(sim_my_device, wait=True), wait=True)
85
+ get_mock_put(sim_my_device.signal_b).assert_called_once_with(OnOff.ON, wait=True)
86
+
87
+
88
+ def test_my_device_unstage(sim_my_device: MyDevice, RE: RunEngine) -> None:
89
+ RE(bps.unstage(sim_my_device, wait=True), wait=True)
90
+ get_mock_put(sim_my_device.signal_b).assert_called_once_with(OnOff.OFF, wait=True)
91
+
92
+ ```
93
+
94
+ 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.
95
+
96
+ ```Python
97
+ async def test_my_device_read(sim_my_device: MyDevice, RE: RunEngine) -> None:
98
+ prefix = sim_my_device.name
99
+ await assert_reading(
100
+ sim_my_device,
101
+ {
102
+ f"{prefix}-signal_a": partial_reading(OnOff.ON),
103
+ f"{prefix}-signal_b": partial_reading(0),
104
+ },
105
+ )
106
+ ```
107
+
108
+ `partial_reading` wraps the value given in a mapping like `{"value": ANY}`, so we are actually checking that the reading matches the expected structure.
109
+
110
+ ```Python
111
+ prefix = sim_my_device.name
112
+ await assert_reading(
113
+ sim_my_device,
114
+ {
115
+ f"{prefix}-signal_a" : {"value": OnOff.ON},
116
+ f"{prefix}-signal_b" : {"value": 0},
117
+ }
118
+ )
119
+ ```
@@ -29,7 +29,7 @@ Supported Python Versions
29
29
  As a standard for the python versions to support, we should be matching the deprecation policy at
30
30
  https://numpy.org/neps/nep-0029-deprecation_policy.html.
31
31
 
32
- Currently supported versions are: 3.11, 3.12. (As of the last edit of this document.)
32
+ Currently supported versions are: 3.11, 3.12, 3.13. (As of the last edit of this document.)
33
33
 
34
34
  .. _documentation_standards:
35
35
 
@@ -15,7 +15,7 @@ dependencies = [
15
15
  "click",
16
16
  "ophyd",
17
17
  "ophyd-async[ca,pva]>=0.13.0",
18
- "bluesky",
18
+ "bluesky==1.14.2", # https://github.com/bluesky/bluesky/issues/1938
19
19
  "pyepics",
20
20
  "dataclasses-json",
21
21
  "pillow",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dls-dodal
3
- Version: 1.55.1
3
+ Version: 1.56.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
@@ -216,7 +216,7 @@ License-File: LICENSE
216
216
  Requires-Dist: click
217
217
  Requires-Dist: ophyd
218
218
  Requires-Dist: ophyd-async[ca,pva]>=0.13.0
219
- Requires-Dist: bluesky
219
+ Requires-Dist: bluesky==1.14.2
220
220
  Requires-Dist: pyepics
221
221
  Requires-Dist: dataclasses-json
222
222
  Requires-Dist: pillow
@@ -1,7 +1,6 @@
1
1
  .copier-answers.yml
2
2
  .gitignore
3
3
  .pre-commit-config.yaml
4
- .talismanrc
5
4
  Dockerfile
6
5
  LICENSE
7
6
  README.md
@@ -112,6 +111,7 @@ src/dodal/beamlines/i09.py
112
111
  src/dodal/beamlines/i09_1.py
113
112
  src/dodal/beamlines/i09_2.py
114
113
  src/dodal/beamlines/i10.py
114
+ src/dodal/beamlines/i11.py
115
115
  src/dodal/beamlines/i13_1.py
116
116
  src/dodal/beamlines/i18.py
117
117
  src/dodal/beamlines/i19_1.py
@@ -132,15 +132,16 @@ src/dodal/common/coordination.py
132
132
  src/dodal/common/crystal_metadata.py
133
133
  src/dodal/common/data_util.py
134
134
  src/dodal/common/device_utils.py
135
+ src/dodal/common/enums.py
135
136
  src/dodal/common/maths.py
136
137
  src/dodal/common/types.py
137
138
  src/dodal/common/udc_directory_provider.py
138
139
  src/dodal/common/visit.py
140
+ src/dodal/common/watcher_utils.py
139
141
  src/dodal/common/beamlines/__init__.py
140
142
  src/dodal/common/beamlines/beamline_parameters.py
141
143
  src/dodal/common/beamlines/beamline_utils.py
142
144
  src/dodal/common/beamlines/device_helpers.py
143
- src/dodal/devices/CTAB.py
144
145
  src/dodal/devices/__init__.py
145
146
  src/dodal/devices/aperture.py
146
147
  src/dodal/devices/aperturescatterguard.py
@@ -148,11 +149,14 @@ src/dodal/devices/apple2_undulator.py
148
149
  src/dodal/devices/backlight.py
149
150
  src/dodal/devices/baton.py
150
151
  src/dodal/devices/bimorph_mirror.py
152
+ src/dodal/devices/collimation_table.py
151
153
  src/dodal/devices/common_dcm.py
154
+ src/dodal/devices/controllers.py
152
155
  src/dodal/devices/cryostream.py
153
156
  src/dodal/devices/diamond_filter.py
154
157
  src/dodal/devices/eiger.py
155
158
  src/dodal/devices/eiger_odin.py
159
+ src/dodal/devices/eurotherm.py
156
160
  src/dodal/devices/fast_grid_scan.py
157
161
  src/dodal/devices/fluorescence_detector_motion.py
158
162
  src/dodal/devices/flux.py
@@ -250,6 +254,11 @@ src/dodal/devices/i10/slits.py
250
254
  src/dodal/devices/i10/rasor/rasor_current_amp.py
251
255
  src/dodal/devices/i10/rasor/rasor_motors.py
252
256
  src/dodal/devices/i10/rasor/rasor_scaler_cards.py
257
+ src/dodal/devices/i11/cyberstar_blower.py
258
+ src/dodal/devices/i11/diff_stages.py
259
+ src/dodal/devices/i11/mythen.py
260
+ src/dodal/devices/i11/nx100robot.py
261
+ src/dodal/devices/i11/spinner.py
253
262
  src/dodal/devices/i13_1/__init__.py
254
263
  src/dodal/devices/i13_1/merlin.py
255
264
  src/dodal/devices/i13_1/merlin_controller.py
@@ -258,6 +267,7 @@ src/dodal/devices/i18/diode.py
258
267
  src/dodal/devices/i19/__init__.py
259
268
  src/dodal/devices/i19/beamstop.py
260
269
  src/dodal/devices/i19/blueapi_device.py
270
+ src/dodal/devices/i19/diffractometer.py
261
271
  src/dodal/devices/i19/hutch_access.py
262
272
  src/dodal/devices/i19/shutter.py
263
273
  src/dodal/devices/i20_1/__init__.py
@@ -324,6 +334,9 @@ src/dodal/plans/verify_undulator_gap.py
324
334
  src/dodal/plans/wrapped.py
325
335
  src/dodal/plans/preprocessors/__init__.py
326
336
  src/dodal/plans/preprocessors/verify_undulator_gap.py
337
+ src/dodal/testing/__init__.py
338
+ src/dodal/testing/electron_analyser/__init__.py
339
+ src/dodal/testing/electron_analyser/device_factory.py
327
340
  system_tests/__init__.py
328
341
  system_tests/test_adsim.py
329
342
  system_tests/test_cli.py
@@ -331,7 +344,6 @@ system_tests/test_oav_system.py
331
344
  system_tests/test_oav_to_redis_system.py
332
345
  tests/__init__.py
333
346
  tests/conftest.py
334
- tests/constants.py
335
347
  tests/fake_beamline.py
336
348
  tests/fake_beamline_all_devices_raise_exception.py
337
349
  tests/fake_beamline_broken_dependency.py
@@ -353,6 +365,7 @@ tests/common/test_crystal_metadata.py
353
365
  tests/common/test_maths.py
354
366
  tests/common/test_udc_directory_provider.py
355
367
  tests/common/test_visit.py
368
+ tests/common/test_watcher_utils.py
356
369
  tests/common/beamlines/__init__.py
357
370
  tests/common/beamlines/test_beamline_parameters.py
358
371
  tests/common/beamlines/test_beamline_utils.py
@@ -367,16 +380,20 @@ tests/devices/i04/__init__.py
367
380
  tests/devices/i04/test_murko_results.py
368
381
  tests/devices/i04/test_transfocator.py
369
382
  tests/devices/i10/test_i10Apple2.py
370
- tests/devices/i10/lookupTables/IDEnergy2GapCalibrations.csv
371
- tests/devices/i10/lookupTables/IDEnergy2PhaseCalibrations.csv
372
- tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdd.pkl
373
- tests/devices/i10/lookupTables/expectedIDEnergy2GapCalibrationsIdu.pkl
374
- tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidd.pkl
375
- tests/devices/i10/lookupTables/expectedIDEnergy2PhaseCalibrationsidu.pkl
383
+ tests/devices/i10/test_data/IDEnergy2GapCalibrations.csv
384
+ tests/devices/i10/test_data/IDEnergy2PhaseCalibrations.csv
385
+ tests/devices/i10/test_data/__init__.py
386
+ tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdd.pkl
387
+ tests/devices/i10/test_data/expectedIDEnergy2GapCalibrationsIdu.pkl
388
+ tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidd.pkl
389
+ tests/devices/i10/test_data/expectedIDEnergy2PhaseCalibrationsidu.pkl
390
+ tests/devices/i11/test_i11devices.py
391
+ tests/devices/i11/test_mythen.py
376
392
  tests/devices/i13_1/test_merlin.py
377
393
  tests/devices/i18/test_kb_mirror.py
378
394
  tests/devices/i19/__init__.py
379
395
  tests/devices/i19/test_beamstop.py
396
+ tests/devices/i19/test_diffractometer.py
380
397
  tests/devices/i19/test_shutter.py
381
398
  tests/devices/i22/test_dcm.py
382
399
  tests/devices/i22/test_fswitch.py
@@ -384,7 +401,7 @@ tests/devices/i22/test_metadataholder.py
384
401
  tests/devices/mx_phase1/__init__.py
385
402
  tests/devices/mx_phase1/test_beamstop.py
386
403
  tests/devices/unit_tests/__init__.py
387
- tests/devices/unit_tests/test_OAVCentring.json
404
+ tests/devices/unit_tests/test.png
388
405
  tests/devices/unit_tests/test_aperture.py
389
406
  tests/devices/unit_tests/test_aperture_scatterguard.py
390
407
  tests/devices/unit_tests/test_apple2_undulator.py
@@ -393,21 +410,18 @@ tests/devices/unit_tests/test_backlight.py
393
410
  tests/devices/unit_tests/test_bart_robot.py
394
411
  tests/devices/unit_tests/test_baton.py
395
412
  tests/devices/unit_tests/test_beam_converter.py
396
- tests/devices/unit_tests/test_beamline_undulator_to_gap_lookup_table.txt
397
413
  tests/devices/unit_tests/test_bimorph_mirror.py
398
- tests/devices/unit_tests/test_display.configuration
414
+ tests/devices/unit_tests/test_controllers.py
399
415
  tests/devices/unit_tests/test_eiger.py
400
416
  tests/devices/unit_tests/test_focusing_mirror.py
401
417
  tests/devices/unit_tests/test_gridscan.py
402
418
  tests/devices/unit_tests/test_hutch_shutter.py
403
- tests/devices/unit_tests/test_jCameraManZoomLevels.xml
404
- tests/devices/unit_tests/test_lookup_table.txt
405
- tests/devices/unit_tests/test_lookup_table_2.txt
406
419
  tests/devices/unit_tests/test_motors.py
407
420
  tests/devices/unit_tests/test_odin.py
408
421
  tests/devices/unit_tests/test_positioner.py
409
422
  tests/devices/unit_tests/test_pressure_jump_cell.py
410
423
  tests/devices/unit_tests/test_qbpm.py
424
+ tests/devices/unit_tests/test_scintillator.py
411
425
  tests/devices/unit_tests/test_slits.py
412
426
  tests/devices/unit_tests/test_smargon.py
413
427
  tests/devices/unit_tests/test_status.py
@@ -432,18 +446,26 @@ tests/devices/unit_tests/current_amplifier/test_sr570.py
432
446
  tests/devices/unit_tests/detector/test_det_dim_constants.py
433
447
  tests/devices/unit_tests/detector/test_det_resolution.py
434
448
  tests/devices/unit_tests/detector/test_detector.py
449
+ tests/devices/unit_tests/detector/test_data/__init__.py
450
+ tests/devices/unit_tests/detector/test_data/test_det_dist_converter.txt
435
451
  tests/devices/unit_tests/electron_analyser/__init__.py
436
452
  tests/devices/unit_tests/electron_analyser/conftest.py
453
+ tests/devices/unit_tests/electron_analyser/test_detector.py
437
454
  tests/devices/unit_tests/electron_analyser/test_util.py
438
- tests/devices/unit_tests/electron_analyser/util.py
439
455
  tests/devices/unit_tests/electron_analyser/abstract/__init__.py
440
456
  tests/devices/unit_tests/electron_analyser/abstract/test_base_detector.py
441
457
  tests/devices/unit_tests/electron_analyser/abstract/test_base_driver_io.py
442
458
  tests/devices/unit_tests/electron_analyser/abstract/test_base_region.py
459
+ tests/devices/unit_tests/electron_analyser/helper_util/__init__.py
460
+ tests/devices/unit_tests/electron_analyser/helper_util/assert_func.py
461
+ tests/devices/unit_tests/electron_analyser/helper_util/sequence.py
443
462
  tests/devices/unit_tests/electron_analyser/specs/__init__.py
444
463
  tests/devices/unit_tests/electron_analyser/specs/test_detector.py
445
464
  tests/devices/unit_tests/electron_analyser/specs/test_driver_io.py
446
465
  tests/devices/unit_tests/electron_analyser/specs/test_region.py
466
+ tests/devices/unit_tests/electron_analyser/test_data/__init__.py
467
+ tests/devices/unit_tests/electron_analyser/test_data/specs_sequence.seq
468
+ tests/devices/unit_tests/electron_analyser/test_data/vgscienta_sequence.seq
447
469
  tests/devices/unit_tests/electron_analyser/vgscienta/__init__.py
448
470
  tests/devices/unit_tests/electron_analyser/vgscienta/test_detector.py
449
471
  tests/devices/unit_tests/electron_analyser/vgscienta/test_driver_io.py
@@ -470,24 +492,42 @@ tests/devices/unit_tests/oav/test_snapshot_image_processing.py
470
492
  tests/devices/unit_tests/oav/test_snapshots.py
471
493
  tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect.py
472
494
  tests/devices/unit_tests/oav/image_recognition/test_pin_tip_detect_utils.py
495
+ tests/devices/unit_tests/oav/test_data/__init__.py
496
+ tests/devices/unit_tests/oav/test_data/oav_snapshot_expected.png
497
+ tests/devices/unit_tests/oav/test_data/oav_snapshot_test.png
498
+ tests/devices/unit_tests/oav/test_data/test_OAVCentring.json
473
499
  tests/devices/unit_tests/p60/test_lab_xray_source.py
474
500
  tests/devices/unit_tests/p99/test_p99_stage.py
501
+ tests/devices/unit_tests/test_daq_configuration/__init__.py
502
+ tests/devices/unit_tests/test_daq_configuration/domain/__init__.py
475
503
  tests/devices/unit_tests/test_daq_configuration/domain/beamlineParameters
476
504
  tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Pitch_converter.txt
477
505
  tests/devices/unit_tests/test_daq_configuration/lookup/BeamLineEnergy_DCM_Roll_converter.txt
506
+ tests/devices/unit_tests/test_daq_configuration/lookup/__init__.py
507
+ tests/devices/unit_tests/test_data/__init__.py
508
+ tests/devices/unit_tests/test_data/test_beamline_undulator_to_gap_lookup_table.txt
509
+ tests/devices/unit_tests/test_data/test_lookup_table.txt
478
510
  tests/devices/unit_tests/util/__init__.py
479
511
  tests/devices/unit_tests/util/test_adjuster_plans.py
480
512
  tests/devices/unit_tests/util/test_beamline_specific_utils.py
481
513
  tests/devices/unit_tests/util/test_lookup_tables.py
482
514
  tests/devices/unit_tests/util/test_save_panda.py
515
+ tests/devices/unit_tests/util/test_data/__init__.py
516
+ tests/devices/unit_tests/util/test_data/test_beamline_dcm_roll_converter.txt
517
+ tests/devices/unit_tests/util/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt
518
+ tests/devices/unit_tests/util/test_data/test_beamline_dcm_roll_converter_reversed.txt
483
519
  tests/fake_zocalo/README.rst
484
520
  tests/fake_zocalo/__init__.py
485
521
  tests/fake_zocalo/__main__.py
486
522
  tests/fake_zocalo/dls_start_fake_zocalo.sh
523
+ tests/plan_stubs/__init__.py
487
524
  tests/plan_stubs/test_data_session.py
488
525
  tests/plan_stubs/test_motor_util_plans.py
489
526
  tests/plan_stubs/test_topup_plan.py
490
527
  tests/plan_stubs/test_wrapped_stubs.py
528
+ tests/plan_stubs/test_data/__init__.py
529
+ tests/plan_stubs/test_data/topup_long_delay.txt
530
+ tests/plan_stubs/test_data/topup_short_params.txt
491
531
  tests/plans/conftest.py
492
532
  tests/plans/test_bimorph.py
493
533
  tests/plans/test_compliance.py
@@ -497,19 +537,12 @@ tests/plans/test_verify_undulator_gap_plan.py
497
537
  tests/plans/test_wrapped.py
498
538
  tests/plans/test_preprocessors/test_verify_undulator_gap.py
499
539
  tests/preprocessors/test_filesystem_metadata.py
540
+ tests/test_data/__init__.py
500
541
  tests/test_data/bad_beamlineParameters
501
542
  tests/test_data/i04_beamlineParameters
502
- tests/test_data/test_beamline_dcm_roll_converter.txt
503
- tests/test_data/test_beamline_dcm_roll_converter_non_monotonic.txt
504
- tests/test_data/test_beamline_dcm_roll_converter_reversed.txt
505
543
  tests/test_data/test_beamline_parameters.txt
506
- tests/test_data/test_det_dist_converter.txt
507
- tests/test_data/topup_long_delay.txt
508
- tests/test_data/topup_short_params.txt
509
- tests/test_data/electron_analyser/specs_sequence.seq
510
- tests/test_data/electron_analyser/vgscienta_sequence.seq
511
- tests/test_data/test_images/oav_snapshot_expected.png
512
- tests/test_data/test_images/oav_snapshot_test.png
544
+ tests/test_data/test_display.configuration
545
+ tests/test_data/test_oav_zoom_levels.xml
513
546
  tests/unit_tests/__init__.py
514
547
  tests/unit_tests/test_cli.py
515
548
  tests/unit_tests/test_log.py
@@ -1,7 +1,7 @@
1
1
  click
2
2
  ophyd
3
3
  ophyd-async[ca,pva]>=0.13.0
4
- bluesky
4
+ bluesky==1.14.2
5
5
  pyepics
6
6
  dataclasses-json
7
7
  pillow