opentrons 8.5.0a3__tar.gz → 8.5.0a6__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.

Potentially problematic release.


This version of opentrons might be problematic. Click here for more details.

Files changed (598) hide show
  1. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/PKG-INFO +4 -4
  2. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_transfer_liquid_validation.py +29 -4
  3. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/instrument.py +162 -57
  4. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/transfer_components_executor.py +114 -40
  5. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/instrument.py +9 -3
  6. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +9 -3
  7. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +9 -3
  8. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/instrument_context.py +84 -16
  9. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/module_contexts.py +5 -2
  10. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/protocol_context.py +1 -1
  11. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/legacy_command_mapper.py +1 -2
  12. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +18 -18
  13. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/PKG-INFO +4 -4
  14. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/requires.txt +3 -3
  15. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/MANIFEST.in +0 -0
  16. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/README.rst +0 -0
  17. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/setup.cfg +0 -0
  18. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/setup.py +0 -0
  19. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/__init__.py +0 -0
  20. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/_version.py +0 -0
  21. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/__init__.py +0 -0
  22. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/deck_configuration.py +0 -0
  23. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
  24. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/file_operators.py +0 -0
  25. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/helpers.py +0 -0
  26. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
  27. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
  28. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +0 -0
  29. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
  30. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/models/v1.py +0 -0
  31. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
  32. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot2/tip_length.py +0 -0
  33. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
  34. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
  35. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
  36. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
  37. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/models/v1.py +0 -0
  38. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
  39. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
  40. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/calibration_storage/types.py +0 -0
  41. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/cli/__init__.py +0 -0
  42. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/cli/__main__.py +0 -0
  43. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/cli/analyze.py +0 -0
  44. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/__init__.py +0 -0
  45. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/advanced_settings.py +0 -0
  46. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/defaults_ot2.py +0 -0
  47. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/defaults_ot3.py +0 -0
  48. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/feature_flags.py +0 -0
  49. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/gripper_config.py +0 -0
  50. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/reset.py +0 -0
  51. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/robot_configs.py +0 -0
  52. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/config/types.py +0 -0
  53. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/__init__.py +0 -0
  54. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
  55. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
  56. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
  57. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
  58. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
  59. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
  60. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/asyncio/__init__.py +0 -0
  61. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/asyncio/communication/__init__.py +0 -0
  62. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/asyncio/communication/async_serial.py +0 -0
  63. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/asyncio/communication/errors.py +0 -0
  64. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/asyncio/communication/serial_connection.py +0 -0
  65. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/command_builder.py +0 -0
  66. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/__init__.py +0 -0
  67. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/abstract.py +0 -0
  68. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/driver.py +0 -0
  69. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/errors.py +0 -0
  70. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/simulator.py +0 -0
  71. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/types.py +0 -0
  72. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/flex_stacker/utils.py +0 -0
  73. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
  74. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
  75. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/heater_shaker/driver.py +0 -0
  76. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
  77. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
  78. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
  79. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/mag_deck/driver.py +0 -0
  80. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
  81. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
  82. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
  83. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
  84. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
  85. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
  86. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
  87. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
  88. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
  89. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/serial_communication.py +0 -0
  90. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
  91. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
  92. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
  93. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
  94. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
  95. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
  96. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
  97. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
  98. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
  99. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
  100. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/temp_deck/driver.py +0 -0
  101. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
  102. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
  103. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
  104. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/thermocycler/driver.py +0 -0
  105. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
  106. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/types.py +0 -0
  107. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/drivers/utils.py +0 -0
  108. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/execute.py +0 -0
  109. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/__init__.py +0 -0
  110. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/__main__.py +0 -0
  111. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/adapters.py +0 -0
  112. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/api.py +0 -0
  113. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/__init__.py +0 -0
  114. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/controller.py +0 -0
  115. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/errors.py +0 -0
  116. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
  117. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/flex_protocol.py +0 -0
  118. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/ot3controller.py +0 -0
  119. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/ot3simulator.py +0 -0
  120. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/ot3utils.py +0 -0
  121. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/simulator.py +0 -0
  122. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
  123. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/subsystem_manager.py +0 -0
  124. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
  125. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/backends/types.py +0 -0
  126. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/constants.py +0 -0
  127. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/dev_types.py +0 -0
  128. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
  129. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
  130. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/app.py +0 -0
  131. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
  132. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/heater_shaker.py +0 -0
  133. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
  134. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
  135. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/module_server/client.py +0 -0
  136. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
  137. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
  138. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/module_server/server.py +0 -0
  139. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/parser.py +0 -0
  140. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
  141. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
  142. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
  143. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
  144. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
  145. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
  146. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/settings.py +0 -0
  147. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
  148. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
  149. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
  150. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
  151. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/types.py +0 -0
  152. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/emulation/util.py +0 -0
  153. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/errors.py +0 -0
  154. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/execution_manager.py +0 -0
  155. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
  156. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
  157. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
  158. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +0 -0
  159. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot2/pipette.py +0 -0
  160. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +0 -0
  161. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
  162. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot3/gripper.py +0 -0
  163. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
  164. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
  165. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot3/pipette.py +0 -0
  166. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +0 -0
  167. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/module_control.py +0 -0
  168. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/__init__.py +0 -0
  169. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/absorbance_reader.py +0 -0
  170. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/errors.py +0 -0
  171. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/flex_stacker.py +0 -0
  172. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/heater_shaker.py +0 -0
  173. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
  174. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/magdeck.py +0 -0
  175. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/mod_abc.py +0 -0
  176. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
  177. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
  178. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/tempdeck.py +0 -0
  179. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/thermocycler.py +0 -0
  180. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/types.py +0 -0
  181. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/update.py +0 -0
  182. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/modules/utils.py +0 -0
  183. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/motion_utilities.py +0 -0
  184. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/nozzle_manager.py +0 -0
  185. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/ot3_calibration.py +0 -0
  186. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/ot3api.py +0 -0
  187. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/pause_manager.py +0 -0
  188. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/poller.py +0 -0
  189. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
  190. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
  191. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
  192. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
  193. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
  194. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
  195. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
  196. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
  197. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
  198. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/gripper_controller.py +0 -0
  199. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/hardware_manager.py +0 -0
  200. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
  201. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
  202. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/liquid_handler.py +0 -0
  203. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
  204. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/motion_controller.py +0 -0
  205. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
  206. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
  207. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
  208. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/protocols/types.py +0 -0
  209. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/robot_calibration.py +0 -0
  210. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
  211. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
  212. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/scripts/repl.py +0 -0
  213. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
  214. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/simulator_setup.py +0 -0
  215. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/thread_manager.py +0 -0
  216. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
  217. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/types.py +0 -0
  218. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/hardware_control/util.py +0 -0
  219. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_broker.py +0 -0
  220. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/__init__.py +0 -0
  221. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/commands.py +0 -0
  222. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/helpers.py +0 -0
  223. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/module_commands.py +0 -0
  224. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
  225. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/publisher.py +0 -0
  226. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/robot_commands.py +0 -0
  227. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/legacy_commands/types.py +0 -0
  228. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/motion_planning/__init__.py +0 -0
  229. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
  230. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/motion_planning/deck_conflict.py +0 -0
  231. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/motion_planning/errors.py +0 -0
  232. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/motion_planning/types.py +0 -0
  233. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/motion_planning/waypoints.py +0 -0
  234. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/ordered_set.py +0 -0
  235. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/__init__.py +0 -0
  236. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_liquid.py +0 -0
  237. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_liquid_properties.py +0 -0
  238. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
  239. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_parameter_context.py +0 -0
  240. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_parameters.py +0 -0
  241. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/_types.py +0 -0
  242. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/config.py +0 -0
  243. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/__init__.py +0 -0
  244. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/common.py +0 -0
  245. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/core_map.py +0 -0
  246. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
  247. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/deck_conflict.py +0 -0
  248. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
  249. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/labware.py +0 -0
  250. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/load_labware_params.py +0 -0
  251. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/module_core.py +0 -0
  252. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
  253. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +0 -0
  254. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
  255. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/protocol.py +0 -0
  256. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/robot.py +0 -0
  257. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/stringify.py +0 -0
  258. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/engine/well.py +0 -0
  259. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/labware.py +0 -0
  260. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
  261. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
  262. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +0 -0
  263. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +0 -0
  264. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
  265. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +0 -0
  266. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +0 -0
  267. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/load_info.py +0 -0
  268. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/module_geometry.py +0 -0
  269. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy/well_geometry.py +0 -0
  270. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
  271. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
  272. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/module.py +0 -0
  273. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/protocol.py +0 -0
  274. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/robot.py +0 -0
  275. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/well.py +0 -0
  276. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/core/well_grid.py +0 -0
  277. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
  278. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/deck.py +0 -0
  279. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/disposal_locations.py +0 -0
  280. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/labware.py +0 -0
  281. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
  282. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/robot_context.py +0 -0
  283. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_api/validation.py +0 -0
  284. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/__init__.py +0 -0
  285. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
  286. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
  287. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
  288. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/actions/actions.py +0 -0
  289. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
  290. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
  291. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/clients/sync_client.py +0 -0
  292. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/clients/transports.py +0 -0
  293. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/__init__.py +0 -0
  294. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -0
  295. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -0
  296. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +0 -0
  297. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -0
  298. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +0 -0
  299. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/air_gap_in_place.py +0 -0
  300. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/aspirate.py +0 -0
  301. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +0 -0
  302. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/aspirate_while_tracking.py +0 -0
  303. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/blow_out.py +0 -0
  304. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +0 -0
  305. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
  306. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +0 -0
  307. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +0 -0
  308. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +0 -0
  309. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +0 -0
  310. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/command.py +0 -0
  311. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/command_unions.py +0 -0
  312. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/comment.py +0 -0
  313. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/configure_for_volume.py +0 -0
  314. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +0 -0
  315. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/custom.py +0 -0
  316. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/dispense.py +0 -0
  317. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/dispense_in_place.py +0 -0
  318. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/dispense_while_tracking.py +0 -0
  319. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/drop_tip.py +0 -0
  320. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +0 -0
  321. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/__init__.py +0 -0
  322. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/close_latch.py +0 -0
  323. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/common.py +0 -0
  324. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/empty.py +0 -0
  325. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/fill.py +0 -0
  326. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/open_latch.py +0 -0
  327. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/prepare_shuttle.py +0 -0
  328. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/retrieve.py +0 -0
  329. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +0 -0
  330. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/flex_stacker/store.py +0 -0
  331. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/generate_command_schema.py +0 -0
  332. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/get_next_tip.py +0 -0
  333. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/get_tip_presence.py +0 -0
  334. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
  335. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
  336. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +0 -0
  337. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +0 -0
  338. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +0 -0
  339. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +0 -0
  340. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +0 -0
  341. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +0 -0
  342. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +0 -0
  343. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/home.py +0 -0
  344. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/labware_handling_common.py +0 -0
  345. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/liquid_probe.py +0 -0
  346. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_labware.py +0 -0
  347. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_lid.py +0 -0
  348. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_lid_stack.py +0 -0
  349. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_liquid.py +0 -0
  350. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_liquid_class.py +0 -0
  351. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_module.py +0 -0
  352. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/load_pipette.py +0 -0
  353. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
  354. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +0 -0
  355. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +0 -0
  356. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/move_labware.py +0 -0
  357. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/move_relative.py +0 -0
  358. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +0 -0
  359. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +0 -0
  360. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +0 -0
  361. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/move_to_well.py +0 -0
  362. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/movement_common.py +0 -0
  363. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/pick_up_tip.py +0 -0
  364. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/pipetting_common.py +0 -0
  365. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +0 -0
  366. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/pressure_dispense.py +0 -0
  367. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/reload_labware.py +0 -0
  368. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/retract_axis.py +0 -0
  369. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -0
  370. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +0 -0
  371. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/common.py +0 -0
  372. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/move_axes_relative.py +0 -0
  373. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/move_axes_to.py +0 -0
  374. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/move_to.py +0 -0
  375. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +0 -0
  376. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/save_position.py +0 -0
  377. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/seal_pipette_to_tip.py +0 -0
  378. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/set_rail_lights.py +0 -0
  379. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/set_status_bar.py +0 -0
  380. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
  381. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +0 -0
  382. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +0 -0
  383. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +0 -0
  384. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
  385. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +0 -0
  386. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +0 -0
  387. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +0 -0
  388. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +0 -0
  389. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +0 -0
  390. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +0 -0
  391. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +0 -0
  392. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +0 -0
  393. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +0 -0
  394. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +0 -0
  395. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/touch_tip.py +0 -0
  396. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
  397. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +0 -0
  398. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +0 -0
  399. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +0 -0
  400. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
  401. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
  402. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +0 -0
  403. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +0 -0
  404. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +0 -0
  405. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/wait_for_duration.py +0 -0
  406. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/commands/wait_for_resume.py +0 -0
  407. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
  408. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/engine_support.py +0 -0
  409. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
  410. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/errors/__init__.py +0 -0
  411. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/errors/error_occurrence.py +0 -0
  412. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/errors/exceptions.py +0 -0
  413. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
  414. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/command_executor.py +0 -0
  415. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
  416. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
  417. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/equipment.py +0 -0
  418. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
  419. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -0
  420. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
  421. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
  422. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/labware_movement.py +0 -0
  423. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/movement.py +0 -0
  424. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/pipetting.py +0 -0
  425. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
  426. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
  427. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
  428. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
  429. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
  430. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
  431. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/execution/tip_handler.py +0 -0
  432. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/labware_offset_standardization.py +0 -0
  433. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
  434. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/notes/notes.py +0 -0
  435. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/plugins.py +0 -0
  436. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/protocol_engine.py +0 -0
  437. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
  438. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +0 -0
  439. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/deck_data_provider.py +0 -0
  440. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
  441. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
  442. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/labware_data_provider.py +0 -0
  443. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/labware_validation.py +0 -0
  444. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
  445. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/module_data_provider.py +0 -0
  446. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
  447. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +0 -0
  448. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/slot_standardization.py +0 -0
  449. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/__init__.py +0 -0
  450. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
  451. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/_move_types.py +0 -0
  452. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/_well_math.py +0 -0
  453. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/addressable_areas.py +0 -0
  454. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/command_history.py +0 -0
  455. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/commands.py +0 -0
  456. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/config.py +0 -0
  457. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/files.py +0 -0
  458. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/fluid_stack.py +0 -0
  459. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/frustum_helpers.py +0 -0
  460. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/geometry.py +0 -0
  461. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/labware.py +0 -0
  462. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/liquid_classes.py +0 -0
  463. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/liquids.py +0 -0
  464. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/__init__.py +0 -0
  465. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
  466. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +0 -0
  467. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +0 -0
  468. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
  469. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
  470. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +0 -0
  471. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +0 -0
  472. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/modules.py +0 -0
  473. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/motion.py +0 -0
  474. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/pipettes.py +0 -0
  475. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/state.py +0 -0
  476. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/state_summary.py +0 -0
  477. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/tips.py +0 -0
  478. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/update_types.py +0 -0
  479. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/state/wells.py +0 -0
  480. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/__init__.py +0 -0
  481. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/automatic_tip_selection.py +0 -0
  482. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/command_annotations.py +0 -0
  483. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/deck_configuration.py +0 -0
  484. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/execution.py +0 -0
  485. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/hardware_passthrough.py +0 -0
  486. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/instrument.py +0 -0
  487. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/instrument_sensors.py +0 -0
  488. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/labware.py +0 -0
  489. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/labware_movement.py +0 -0
  490. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/labware_offset_location.py +0 -0
  491. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/labware_offset_vector.py +0 -0
  492. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/liquid.py +0 -0
  493. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/liquid_class.py +0 -0
  494. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/liquid_handling.py +0 -0
  495. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/liquid_level_detection.py +0 -0
  496. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/location.py +0 -0
  497. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/module.py +0 -0
  498. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/partial_tip_configuration.py +0 -0
  499. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/run_time_parameters.py +0 -0
  500. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/tip.py +0 -0
  501. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/util.py +0 -0
  502. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_engine/types/well_position.py +0 -0
  503. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/__init__.py +0 -0
  504. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/extract_labware_definitions.py +0 -0
  505. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/file_format_validator.py +0 -0
  506. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/file_hasher.py +0 -0
  507. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/file_identifier.py +0 -0
  508. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
  509. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/input_file.py +0 -0
  510. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
  511. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
  512. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/protocol_source.py +0 -0
  513. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
  514. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/__init__.py +0 -0
  515. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
  516. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/json_file_reader.py +0 -0
  517. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/json_translator.py +0 -0
  518. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
  519. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/protocol_runner.py +0 -0
  520. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/python_protocol_wrappers.py +0 -0
  521. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/run_orchestrator.py +0 -0
  522. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocol_runner/task_queue.py +0 -0
  523. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/__init__.py +0 -0
  524. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/__init__.py +0 -0
  525. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/common.py +0 -0
  526. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/mix.py +0 -0
  527. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
  528. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/transfers/common.py +0 -0
  529. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/advanced_control/transfers/transfer.py +0 -0
  530. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/__init__.py +0 -0
  531. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/constants.py +0 -0
  532. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/deck_type.py +0 -0
  533. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/definitions.py +0 -0
  534. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/instrument.py +0 -0
  535. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/labware_like.py +0 -0
  536. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
  537. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/types.py +0 -0
  538. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/api_support/util.py +0 -0
  539. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/bundle.py +0 -0
  540. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/duration/__init__.py +0 -0
  541. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/duration/errors.py +0 -0
  542. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/duration/estimator.py +0 -0
  543. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/__init__.py +0 -0
  544. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/dev_types.py +0 -0
  545. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/errors.py +0 -0
  546. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/execute.py +0 -0
  547. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
  548. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
  549. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
  550. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/execute_python.py +0 -0
  551. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
  552. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/execution/types.py +0 -0
  553. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/geometry/__init__.py +0 -0
  554. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
  555. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/geometry/planning.py +0 -0
  556. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/labware.py +0 -0
  557. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/models/__init__.py +0 -0
  558. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/models/json_protocol.py +0 -0
  559. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/__init__.py +0 -0
  560. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
  561. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
  562. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/exceptions.py +0 -0
  563. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
  564. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/types.py +0 -0
  565. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parameters/validation.py +0 -0
  566. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/parse.py +0 -0
  567. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/protocols/types.py +0 -0
  568. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/py.typed +0 -0
  569. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/resources/scripts/lpc21isp +0 -0
  570. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
  571. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/simulate.py +0 -0
  572. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/__init__.py +0 -0
  573. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/camera.py +0 -0
  574. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/log_control.py +0 -0
  575. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/nmcli.py +0 -0
  576. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/resin.py +0 -0
  577. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/smoothie_update.py +0 -0
  578. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/system/wifi.py +0 -0
  579. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/tools/__init__.py +0 -0
  580. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/tools/args_handler.py +0 -0
  581. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/tools/write_pipette_memory.py +0 -0
  582. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/types.py +0 -0
  583. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/__init__.py +0 -0
  584. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/async_helpers.py +0 -0
  585. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/broker.py +0 -0
  586. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/change_notifier.py +0 -0
  587. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/entrypoint_util.py +0 -0
  588. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/get_union_elements.py +0 -0
  589. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/helpers.py +0 -0
  590. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/linal.py +0 -0
  591. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/logging_config.py +0 -0
  592. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/logging_queue_handler.py +0 -0
  593. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons/util/performance_helpers.py +0 -0
  594. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/SOURCES.txt +0 -0
  595. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/dependency_links.txt +0 -0
  596. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/entry_points.txt +0 -0
  597. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/not-zip-safe +0 -0
  598. {opentrons-8.5.0a3 → opentrons-8.5.0a6}/src/opentrons.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: opentrons
3
- Version: 8.5.0a3
3
+ Version: 8.5.0a6
4
4
  Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
5
5
  Author: Opentrons
6
6
  Author-email: engineering@opentrons.com
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
21
21
  Classifier: Topic :: Scientific/Engineering
22
22
  Requires-Python: >=3.10
23
23
  License-File: ../LICENSE
24
- Requires-Dist: opentrons-shared-data==8.5.0a3
24
+ Requires-Dist: opentrons-shared-data==8.5.0a6
25
25
  Requires-Dist: aionotify==0.3.1
26
26
  Requires-Dist: anyio<4.0.0,>=3.6.1
27
27
  Requires-Dist: jsonschema<4.18.0,>=3.0.1
@@ -35,9 +35,9 @@ Requires-Dist: pyusb==1.2.1
35
35
  Requires-Dist: importlib-metadata>=1.0; python_version < "3.8"
36
36
  Requires-Dist: packaging>=21.0
37
37
  Provides-Extra: ot2-hardware
38
- Requires-Dist: opentrons-hardware==8.5.0a3; extra == "ot2-hardware"
38
+ Requires-Dist: opentrons-hardware==8.5.0a6; extra == "ot2-hardware"
39
39
  Provides-Extra: flex-hardware
40
- Requires-Dist: opentrons-hardware[FLEX]==8.5.0a3; extra == "flex-hardware"
40
+ Requires-Dist: opentrons-hardware[FLEX]==8.5.0a6; extra == "flex-hardware"
41
41
 
42
42
  .. _Full API Documentation: http://docs.opentrons.com
43
43
 
@@ -1,5 +1,5 @@
1
1
  from dataclasses import dataclass
2
- from typing import List, Union, Sequence, Optional
2
+ from typing import List, Union, Sequence, Optional, Tuple
3
3
 
4
4
  from opentrons.types import Location, NozzleMapInterface
5
5
  from opentrons.protocols.api_support import instrument
@@ -13,6 +13,7 @@ from opentrons.protocols.advanced_control.transfers.common import (
13
13
 
14
14
  from .disposal_locations import TrashBin, WasteChute
15
15
  from .labware import Labware, Well
16
+ from .core.common import WellCore
16
17
  from . import validation
17
18
 
18
19
 
@@ -24,13 +25,14 @@ class TransferInfo:
24
25
  tip_policy: TransferTipPolicyV2
25
26
  tip_racks: List[Labware]
26
27
  trash_location: Union[Location, TrashBin, WasteChute]
28
+ last_tip_location: Optional[Tuple[Location, WellCore]]
27
29
 
28
30
 
29
31
  def verify_and_normalize_transfer_args(
30
32
  source: Union[Well, Sequence[Well], Sequence[Sequence[Well]]],
31
33
  dest: Union[Well, Sequence[Well], Sequence[Sequence[Well]], TrashBin, WasteChute],
32
34
  tip_policy: TransferTipPolicyV2Type,
33
- last_tip_picked_up_from: Optional[Well],
35
+ last_tip_well: Optional[Well],
34
36
  tip_racks: List[Labware],
35
37
  nozzle_map: NozzleMapInterface,
36
38
  group_wells_for_multi_channel: bool,
@@ -59,14 +61,14 @@ def verify_and_normalize_transfer_args(
59
61
 
60
62
  valid_new_tip = validation.ensure_new_tip_policy(tip_policy)
61
63
  if valid_new_tip == TransferTipPolicyV2.NEVER:
62
- if last_tip_picked_up_from is None:
64
+ if last_tip_well is None:
63
65
  raise RuntimeError(
64
66
  "Pipette has no tip attached to perform transfer."
65
67
  " Either do a pick_up_tip beforehand or specify a new_tip parameter"
66
68
  " of 'once' or 'always'."
67
69
  )
68
70
  else:
69
- valid_tip_racks = [last_tip_picked_up_from.parent]
71
+ valid_tip_racks = [last_tip_well.parent]
70
72
  else:
71
73
  valid_tip_racks = tip_racks
72
74
  if current_volume != 0:
@@ -86,10 +88,33 @@ def verify_and_normalize_transfer_args(
86
88
  trash_location=_trash_location
87
89
  )
88
90
 
91
+ if last_tip_well is not None:
92
+ parent_tip_rack = last_tip_well.parent
93
+ last_tip_location = (
94
+ Location(last_tip_well.top().point, parent_tip_rack),
95
+ last_tip_well._core,
96
+ )
97
+ else:
98
+ last_tip_location = None
99
+
89
100
  return TransferInfo(
90
101
  source=flat_sources_list,
91
102
  dest=flat_dests_list if not isinstance(dest, (TrashBin, WasteChute)) else dest,
92
103
  tip_policy=valid_new_tip,
93
104
  tip_racks=valid_tip_racks,
94
105
  trash_location=valid_trash_location,
106
+ last_tip_location=last_tip_location,
95
107
  )
108
+
109
+
110
+ def resolve_keep_last_tip(
111
+ keep_last_tip: Optional[bool], tip_strategy: TransferTipPolicyV2
112
+ ) -> bool:
113
+ """Resolve the liquid class transfer argument `keep_last_tip`
114
+
115
+ If set to a boolean value, maintains that setting. Otherwise, default to
116
+ `True` if tip policy is `NEVER`, otherwise default to `False`
117
+ """
118
+ if keep_last_tip is not None:
119
+ return keep_last_tip
120
+ return tip_strategy == TransferTipPolicyV2.NEVER
@@ -1205,7 +1205,9 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1205
1205
  starting_tip: Optional[WellCore],
1206
1206
  trash_location: Union[Location, TrashBin, WasteChute],
1207
1207
  return_tip: bool,
1208
- ) -> None:
1208
+ keep_last_tip: bool,
1209
+ last_tip_location: Optional[Tuple[Location, WellCore]],
1210
+ ) -> Optional[Tuple[Location, WellCore]]:
1209
1211
  """Execute transfer using liquid class properties.
1210
1212
 
1211
1213
  Args:
@@ -1219,8 +1221,18 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1219
1221
  types.Location is only necessary for saving the last accessed location.
1220
1222
  new_tip: Whether the transfer should use a new tip 'once', 'never', 'always',
1221
1223
  or 'per source'.
1222
- tiprack_uri: The URI of the tiprack that the transfer settings are for.
1223
- tip_drop_location: Location where the tip will be dropped (if appropriate).
1224
+ tip_racks: List of tipracks that the transfer will pick up tips from, represented
1225
+ as tuples of types.Location and WellCore.
1226
+ starting_tip: The user-chosen starting tip to use when deciding what tip to pick
1227
+ up, if the user has set it.
1228
+ trash_location: The chosen trash container to drop tips in and dispose liquid in.
1229
+ return_tip: If `True`, return tips to the tip rack location they were picked up from,
1230
+ otherwise drop in `trash_location`
1231
+ keep_last_tip: When set to `True`, do not drop the final tip used in the transfer.
1232
+ last_tip_location: If a tip is already attached, this will be the tiprack and well it was
1233
+ picked up from, represented as a tuple of types.Location and WellCore.
1234
+ Used so a tip can be returned if it was picked up outside this function
1235
+ as could be the case for a new_tip of `never`.
1224
1236
  """
1225
1237
  if not tip_racks:
1226
1238
  raise RuntimeError(
@@ -1272,14 +1284,15 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1272
1284
  )
1273
1285
  )
1274
1286
 
1275
- last_tip_picked_up_from: Optional[WellCore] = None
1287
+ last_tip = last_tip_location
1276
1288
 
1277
1289
  def _drop_tip() -> None:
1278
1290
  if return_tip:
1279
- assert last_tip_picked_up_from is not None
1291
+ assert last_tip is not None
1292
+ _, tip_well = last_tip
1280
1293
  self.drop_tip(
1281
1294
  location=None,
1282
- well_core=last_tip_picked_up_from,
1295
+ well_core=tip_well,
1283
1296
  home_after=False,
1284
1297
  alternate_drop_location=False,
1285
1298
  )
@@ -1297,7 +1310,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1297
1310
  alternate_drop_location=True,
1298
1311
  )
1299
1312
 
1300
- def _pick_up_tip() -> WellCore:
1313
+ def _pick_up_tip() -> Tuple[Location, WellCore]:
1301
1314
  next_tip = self.get_next_tip(
1302
1315
  tip_racks=[core for loc, core in tip_racks],
1303
1316
  starting_well=starting_tip,
@@ -1323,10 +1336,10 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1323
1336
  presses=None,
1324
1337
  increment=None,
1325
1338
  )
1326
- return tip_well
1339
+ return tiprack_loc, tip_well
1327
1340
 
1328
1341
  if new_tip == TransferTipPolicyV2.ONCE:
1329
- last_tip_picked_up_from = _pick_up_tip()
1342
+ last_tip = _pick_up_tip()
1330
1343
 
1331
1344
  prev_src: Optional[Tuple[Location, WellCore]] = None
1332
1345
  prev_dest: Optional[
@@ -1364,7 +1377,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1364
1377
  ):
1365
1378
  if prev_src is not None and prev_dest is not None:
1366
1379
  _drop_tip()
1367
- last_tip_picked_up_from = _pick_up_tip()
1380
+ last_tip = _pick_up_tip()
1368
1381
  post_disp_tip_contents = [
1369
1382
  tx_comps_executor.LiquidAndAirGapPair(
1370
1383
  liquid=0,
@@ -1404,30 +1417,37 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1404
1417
  transfer_type=tx_comps_executor.TransferType.ONE_TO_ONE,
1405
1418
  tip_contents=post_asp_tip_contents,
1406
1419
  add_final_air_gap=(
1407
- False
1408
- if is_last_step and new_tip == TransferTipPolicyV2.NEVER
1409
- else True
1420
+ False if is_last_step and keep_last_tip else True
1410
1421
  ),
1411
1422
  trash_location=trash_location,
1412
1423
  )
1413
1424
  prev_src = step_source
1414
1425
  prev_dest = step_destination
1415
- if new_tip != TransferTipPolicyV2.NEVER:
1426
+
1427
+ if not keep_last_tip:
1416
1428
  _drop_tip()
1429
+ last_tip = None
1430
+
1431
+ return last_tip
1417
1432
 
1418
- # TODO(spp, 2025-02-25): wire up return tip
1419
1433
  def distribute_with_liquid_class( # noqa: C901
1420
1434
  self,
1421
1435
  liquid_class: LiquidClass,
1422
1436
  volume: float,
1423
1437
  source: Tuple[Location, WellCore],
1424
1438
  dest: List[Tuple[Location, WellCore]],
1425
- new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
1439
+ new_tip: Literal[
1440
+ TransferTipPolicyV2.NEVER,
1441
+ TransferTipPolicyV2.ONCE,
1442
+ TransferTipPolicyV2.ALWAYS,
1443
+ ],
1426
1444
  tip_racks: List[Tuple[Location, LabwareCore]],
1427
1445
  starting_tip: Optional[WellCore],
1428
1446
  trash_location: Union[Location, TrashBin, WasteChute],
1429
1447
  return_tip: bool,
1430
- ) -> None:
1448
+ keep_last_tip: bool,
1449
+ last_tip_location: Optional[Tuple[Location, WellCore]],
1450
+ ) -> Optional[Tuple[Location, WellCore]]:
1431
1451
  """Execute a distribution using liquid class properties.
1432
1452
 
1433
1453
  Args:
@@ -1438,9 +1458,22 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1438
1458
  dest: List of destination wells, with each well represented as a tuple of
1439
1459
  types.Location and WellCore.
1440
1460
  types.Location is only necessary for saving the last accessed location.
1441
- new_tip: Whether the transfer should use a new tip 'once' or 'never'.
1442
- tiprack_uri: The URI of the tiprack that the transfer settings are for.
1443
- tip_drop_location: Location where the tip will be dropped (if appropriate).
1461
+ new_tip: Whether the transfer should use a new tip 'once', 'always' or 'never'.
1462
+ 'never': the transfer will never pick up a new tip
1463
+ 'once': the transfer will pick up a new tip once at the start of transfer
1464
+ 'always': the transfer will pick up a new tip before every aspirate
1465
+ tip_racks: List of tipracks that the transfer will pick up tips from, represented
1466
+ as tuples of types.Location and WellCore.
1467
+ starting_tip: The user-chosen starting tip to use when deciding what tip to pick
1468
+ up, if the user has set it.
1469
+ trash_location: The chosen trash container to drop tips in and dispose liquid in.
1470
+ return_tip: If `True`, return tips to the tip rack location they were picked up from,
1471
+ otherwise drop in `trash_location`
1472
+ keep_last_tip: When set to `True`, do not drop the final tip used in the distribute.
1473
+ last_tip_location: If a tip is already attached, this will be the tiprack and well it was
1474
+ picked up from, represented as a tuple of types.Location and WellCore.
1475
+ Used so a tip can be returned if it was picked up outside this function
1476
+ as could be the case for a new_tip of `never`
1444
1477
 
1445
1478
  This method distributes the liquid in the source well into multiple destinations.
1446
1479
  It can accomplish this by either doing a multi-dispense (aspirate once and then
@@ -1448,13 +1481,17 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1448
1481
  (going back to aspirate after each dispense). Whether it does a multi-dispense or
1449
1482
  multiple single dispenses is determined by whether multi-dispense properties
1450
1483
  are available in the liquid class and whether the tip in use can hold multiple
1451
- volumes to be dispensed whithout having to refill.
1484
+ volumes to be dispensed without having to refill.
1452
1485
  """
1453
1486
  if not tip_racks:
1454
1487
  raise RuntimeError(
1455
1488
  "No tipracks found for pipette in order to perform transfer"
1456
1489
  )
1457
- assert new_tip in [TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE]
1490
+ assert new_tip in [
1491
+ TransferTipPolicyV2.NEVER,
1492
+ TransferTipPolicyV2.ONCE,
1493
+ TransferTipPolicyV2.ALWAYS,
1494
+ ]
1458
1495
 
1459
1496
  tiprack_uri_for_transfer_props = tip_racks[0][1].get_uri()
1460
1497
  working_volume = min(
@@ -1500,7 +1537,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1500
1537
  tip_working_volume=working_volume,
1501
1538
  )
1502
1539
  ):
1503
- self.transfer_with_liquid_class(
1540
+ return self.transfer_with_liquid_class(
1504
1541
  liquid_class=liquid_class,
1505
1542
  volume=volume,
1506
1543
  source=[source for _ in range(len(dest))],
@@ -1510,8 +1547,9 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1510
1547
  starting_tip=starting_tip,
1511
1548
  trash_location=trash_location,
1512
1549
  return_tip=return_tip,
1550
+ keep_last_tip=keep_last_tip,
1551
+ last_tip_location=last_tip_location,
1513
1552
  )
1514
- return
1515
1553
 
1516
1554
  # TODO: use the ID returned by load_liquid_class in command annotations
1517
1555
  self.load_liquid_class(
@@ -1538,14 +1576,15 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1538
1576
  )
1539
1577
  )
1540
1578
 
1541
- last_tip_picked_up_from: Optional[WellCore] = None
1579
+ last_tip = last_tip_location
1542
1580
 
1543
1581
  def _drop_tip() -> None:
1544
1582
  if return_tip:
1545
- assert last_tip_picked_up_from is not None
1583
+ assert last_tip is not None
1584
+ _, tip_well = last_tip
1546
1585
  self.drop_tip(
1547
1586
  location=None,
1548
- well_core=last_tip_picked_up_from,
1587
+ well_core=tip_well,
1549
1588
  home_after=False,
1550
1589
  alternate_drop_location=False,
1551
1590
  )
@@ -1563,7 +1602,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1563
1602
  alternate_drop_location=True,
1564
1603
  )
1565
1604
 
1566
- def _pick_up_tip() -> WellCore:
1605
+ def _pick_up_tip() -> Tuple[Location, WellCore]:
1567
1606
  next_tip = self.get_next_tip(
1568
1607
  tip_racks=[core for loc, core in tip_racks],
1569
1608
  starting_well=starting_tip,
@@ -1589,10 +1628,10 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1589
1628
  presses=None,
1590
1629
  increment=None,
1591
1630
  )
1592
- return tip_well
1631
+ return tiprack_loc, tip_well
1593
1632
 
1594
1633
  if new_tip != TransferTipPolicyV2.NEVER:
1595
- last_tip_picked_up_from = _pick_up_tip()
1634
+ last_tip = _pick_up_tip()
1596
1635
 
1597
1636
  tip_contents = [
1598
1637
  tx_comps_executor.LiquidAndAirGapPair(
@@ -1661,9 +1700,21 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1661
1700
  and new_tip != TransferTipPolicyV2.NEVER
1662
1701
  and is_first_step
1663
1702
  ):
1703
+ # Do probing only once, regardless of whether you are coming back to refill
1704
+ # with a fresh tip since there's only one source well
1664
1705
  enable_lpd = True
1665
1706
  else:
1666
1707
  enable_lpd = False
1708
+
1709
+ if not is_first_step and new_tip == TransferTipPolicyV2.ALWAYS:
1710
+ _drop_tip()
1711
+ last_tip = _pick_up_tip()
1712
+ tip_contents = [
1713
+ tx_comps_executor.LiquidAndAirGapPair(
1714
+ liquid=0,
1715
+ air_gap=0,
1716
+ )
1717
+ ]
1667
1718
  with self.lpd_for_transfer(enable=enable_lpd):
1668
1719
  # Aspirate the total volume determined by the loop above
1669
1720
  tip_contents = self.aspirate_liquid_class(
@@ -1693,9 +1744,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1693
1744
  transfer_type=tx_comps_executor.TransferType.ONE_TO_MANY,
1694
1745
  tip_contents=tip_contents,
1695
1746
  add_final_air_gap=(
1696
- False
1697
- if is_last_step and new_tip == TransferTipPolicyV2.NEVER
1698
- else True
1747
+ False if is_last_step and keep_last_tip else True
1699
1748
  ),
1700
1749
  trash_location=trash_location,
1701
1750
  )
@@ -1708,9 +1757,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1708
1757
  transfer_type=tx_comps_executor.TransferType.ONE_TO_MANY,
1709
1758
  tip_contents=tip_contents,
1710
1759
  add_final_air_gap=(
1711
- False
1712
- if is_last_step and new_tip == TransferTipPolicyV2.NEVER
1713
- else True
1760
+ False if is_last_step and keep_last_tip else True
1714
1761
  ),
1715
1762
  trash_location=trash_location,
1716
1763
  conditioning_volume=conditioning_vol,
@@ -1718,8 +1765,11 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1718
1765
  )
1719
1766
  is_first_step = False
1720
1767
 
1721
- if new_tip != TransferTipPolicyV2.NEVER:
1768
+ if not keep_last_tip:
1722
1769
  _drop_tip()
1770
+ last_tip = None
1771
+
1772
+ return last_tip
1723
1773
 
1724
1774
  def _tip_can_hold_volume_for_multi_dispensing(
1725
1775
  self,
@@ -1748,17 +1798,57 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1748
1798
  volume: float,
1749
1799
  source: List[Tuple[Location, WellCore]],
1750
1800
  dest: Union[Tuple[Location, WellCore], TrashBin, WasteChute],
1751
- new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
1801
+ new_tip: Literal[
1802
+ TransferTipPolicyV2.NEVER,
1803
+ TransferTipPolicyV2.ONCE,
1804
+ TransferTipPolicyV2.ALWAYS,
1805
+ ],
1752
1806
  tip_racks: List[Tuple[Location, LabwareCore]],
1753
1807
  starting_tip: Optional[WellCore],
1754
1808
  trash_location: Union[Location, TrashBin, WasteChute],
1755
1809
  return_tip: bool,
1756
- ) -> None:
1810
+ keep_last_tip: bool,
1811
+ last_tip_location: Optional[Tuple[Location, WellCore]],
1812
+ ) -> Optional[Tuple[Location, WellCore]]:
1813
+ """Execute consolidate using liquid class properties.
1814
+
1815
+ Args:
1816
+ liquid_class: The liquid class to use for transfer properties.
1817
+ volume: Volume to transfer per well.
1818
+ source: List of source wells, with each well represented as a tuple of
1819
+ types.Location and WellCore.
1820
+ types.Location is only necessary for saving the last accessed location.
1821
+ dest: List of destination wells, with each well represented as a tuple of
1822
+ types.Location and WellCore.
1823
+ types.Location is only necessary for saving the last accessed location.
1824
+ new_tip: Whether the transfer should use a new tip 'once', 'always' or 'never'.
1825
+ 'never': the transfer will never pick up a new tip
1826
+ 'once': the transfer will pick up a new tip once at the start of transfer
1827
+ 'always': the transfer will pick up a new tip after every dispense
1828
+ tip_racks: List of tipracks that the transfer will pick up tips from, represented
1829
+ as tuples of types.Location and WellCore.
1830
+ starting_tip: The user-chosen starting tip to use when deciding what tip to pick
1831
+ up, if the user has set it.
1832
+ trash_location: The chosen trash container to drop tips in and dispose liquid in.
1833
+ return_tip: If `True`, return tips to the tip rack location they were picked up from,
1834
+ otherwise drop in `trash_location`
1835
+ keep_last_tip: When set to `True`, do not drop the final tip used in the consolidate.
1836
+ last_tip_location: If a tip is already attached, this will be the tiprack and well it was
1837
+ picked up from, represented as a tuple of types.Location and WellCore.
1838
+ Used so a tip can be returned if it was picked up outside this function
1839
+ as could be the case for a new_tip of `never`.
1840
+ """
1757
1841
  if not tip_racks:
1758
1842
  raise RuntimeError(
1759
1843
  "No tipracks found for pipette in order to perform transfer"
1760
1844
  )
1761
- assert new_tip in [TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE]
1845
+ # NOTE: Tip option of "always" in consolidate is equivalent to "after every dispense",
1846
+ # or more specifically, "before the next chunk of aspirates".
1847
+ assert new_tip in [
1848
+ TransferTipPolicyV2.NEVER,
1849
+ TransferTipPolicyV2.ONCE,
1850
+ TransferTipPolicyV2.ALWAYS,
1851
+ ]
1762
1852
  tiprack_uri_for_transfer_props = tip_racks[0][1].get_uri()
1763
1853
  try:
1764
1854
  transfer_props = liquid_class.get_for(
@@ -1807,14 +1897,15 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1807
1897
  )
1808
1898
  )
1809
1899
 
1810
- last_tip_picked_up_from: Optional[WellCore] = None
1900
+ last_tip = last_tip_location
1811
1901
 
1812
1902
  def _drop_tip() -> None:
1813
1903
  if return_tip:
1814
- assert last_tip_picked_up_from is not None
1904
+ assert last_tip is not None
1905
+ _, tip_well = last_tip
1815
1906
  self.drop_tip(
1816
1907
  location=None,
1817
- well_core=last_tip_picked_up_from,
1908
+ well_core=tip_well,
1818
1909
  home_after=False,
1819
1910
  alternate_drop_location=False,
1820
1911
  )
@@ -1832,7 +1923,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1832
1923
  alternate_drop_location=True,
1833
1924
  )
1834
1925
 
1835
- def _pick_up_tip() -> WellCore:
1926
+ def _pick_up_tip() -> Tuple[Location, WellCore]:
1836
1927
  next_tip = self.get_next_tip(
1837
1928
  tip_racks=[core for loc, core in tip_racks],
1838
1929
  starting_well=starting_tip,
@@ -1858,10 +1949,10 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1858
1949
  presses=None,
1859
1950
  increment=None,
1860
1951
  )
1861
- return tip_well
1952
+ return tiprack_loc, tip_well
1862
1953
 
1863
- if new_tip == TransferTipPolicyV2.ONCE:
1864
- last_tip_picked_up_from = _pick_up_tip()
1954
+ if new_tip in [TransferTipPolicyV2.ONCE, TransferTipPolicyV2.ALWAYS]:
1955
+ last_tip = _pick_up_tip()
1865
1956
 
1866
1957
  tip_contents = [
1867
1958
  tx_comps_executor.LiquidAndAirGapPair(
@@ -1872,6 +1963,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1872
1963
  next_step_volume, next_source = next(source_per_volume_step)
1873
1964
  is_first_step = True
1874
1965
  is_last_step = False
1966
+ prev_src: Optional[tuple[Location, WellCore]] = None
1875
1967
  while not is_last_step:
1876
1968
  total_dispense_volume = 0.0
1877
1969
  vol_aspirate_combo = []
@@ -1895,6 +1987,21 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1895
1987
  and is_first_step
1896
1988
  ):
1897
1989
  enable_lpd = True
1990
+ elif not is_first_step and new_tip == TransferTipPolicyV2.ALWAYS:
1991
+ _drop_tip()
1992
+ last_tip = _pick_up_tip()
1993
+ tip_contents = [
1994
+ tx_comps_executor.LiquidAndAirGapPair(
1995
+ liquid=0,
1996
+ air_gap=0,
1997
+ )
1998
+ ]
1999
+ # Enable LPD if it's globally enabled, as long as
2000
+ # the next source is different from previous source
2001
+ enable_lpd = (
2002
+ self.get_liquid_presence_detection()
2003
+ and prev_src != vol_aspirate_combo[0][1]
2004
+ )
1898
2005
  else:
1899
2006
  enable_lpd = False
1900
2007
 
@@ -1912,6 +2019,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1912
2019
  ),
1913
2020
  current_volume=total_aspirated_volume,
1914
2021
  )
2022
+ prev_src = step_source
1915
2023
  total_aspirated_volume += step_volume
1916
2024
  is_first_step = False
1917
2025
  enable_lpd = False
@@ -1922,15 +2030,15 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1922
2030
  transfer_properties=transfer_props,
1923
2031
  transfer_type=tx_comps_executor.TransferType.MANY_TO_ONE,
1924
2032
  tip_contents=tip_contents,
1925
- add_final_air_gap=(
1926
- False
1927
- if is_last_step and new_tip == TransferTipPolicyV2.NEVER
1928
- else True
1929
- ),
2033
+ add_final_air_gap=(False if is_last_step and keep_last_tip else True),
1930
2034
  trash_location=trash_location,
1931
2035
  )
1932
- if new_tip != TransferTipPolicyV2.NEVER:
2036
+
2037
+ if not keep_last_tip:
1933
2038
  _drop_tip()
2039
+ last_tip = None
2040
+
2041
+ return last_tip
1934
2042
 
1935
2043
  def _get_location_and_well_core_from_next_tip_info(
1936
2044
  self,
@@ -2011,10 +2119,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
2011
2119
  location=prep_location,
2012
2120
  )
2013
2121
  last_liquid_and_airgap_in_tip.air_gap = 0
2014
- if (
2015
- transfer_type != tx_comps_executor.TransferType.MANY_TO_ONE
2016
- and self.get_liquid_presence_detection()
2017
- ):
2122
+ if self.get_liquid_presence_detection():
2018
2123
  self.liquid_probe_with_recovery(
2019
2124
  well_core=source_well, loc=prep_location
2020
2125
  )