opentrons 8.4.0a7__tar.gz → 8.4.0a8__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 (597) hide show
  1. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/PKG-INFO +4 -4
  2. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/instrument.py +4 -4
  3. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/instrument.py +1 -1
  4. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +1 -1
  5. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +1 -1
  6. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/instrument_context.py +24 -11
  7. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/liquid_probe.py +6 -0
  8. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/seal_pipette_to_tip.py +44 -23
  9. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +8 -11
  10. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/errors/__init__.py +2 -0
  11. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/errors/exceptions.py +12 -0
  12. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/pipetting.py +1 -1
  13. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/geometry.py +134 -81
  14. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/modules.py +33 -16
  15. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/module.py +32 -0
  16. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons.egg-info/PKG-INFO +4 -4
  17. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons.egg-info/requires.txt +3 -3
  18. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/MANIFEST.in +0 -0
  19. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/README.rst +0 -0
  20. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/setup.cfg +0 -0
  21. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/setup.py +0 -0
  22. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/__init__.py +0 -0
  23. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/_version.py +0 -0
  24. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/__init__.py +0 -0
  25. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/deck_configuration.py +0 -0
  26. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
  27. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/file_operators.py +0 -0
  28. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/helpers.py +0 -0
  29. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
  30. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
  31. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +0 -0
  32. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
  33. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/models/v1.py +0 -0
  34. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
  35. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot2/tip_length.py +0 -0
  36. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
  37. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
  38. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
  39. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
  40. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/models/v1.py +0 -0
  41. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
  42. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
  43. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/calibration_storage/types.py +0 -0
  44. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/cli/__init__.py +0 -0
  45. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/cli/__main__.py +0 -0
  46. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/cli/analyze.py +0 -0
  47. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/__init__.py +0 -0
  48. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/advanced_settings.py +0 -0
  49. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/defaults_ot2.py +0 -0
  50. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/defaults_ot3.py +0 -0
  51. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/feature_flags.py +0 -0
  52. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/gripper_config.py +0 -0
  53. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/reset.py +0 -0
  54. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/robot_configs.py +0 -0
  55. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/config/types.py +0 -0
  56. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/__init__.py +0 -0
  57. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
  58. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
  59. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
  60. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
  61. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
  62. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
  63. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/asyncio/__init__.py +0 -0
  64. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/asyncio/communication/__init__.py +0 -0
  65. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/asyncio/communication/async_serial.py +0 -0
  66. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/asyncio/communication/errors.py +0 -0
  67. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/asyncio/communication/serial_connection.py +0 -0
  68. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/command_builder.py +0 -0
  69. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/__init__.py +0 -0
  70. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/abstract.py +0 -0
  71. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/driver.py +0 -0
  72. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/errors.py +0 -0
  73. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/simulator.py +0 -0
  74. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/types.py +0 -0
  75. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/flex_stacker/utils.py +0 -0
  76. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
  77. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
  78. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/heater_shaker/driver.py +0 -0
  79. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
  80. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
  81. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
  82. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/mag_deck/driver.py +0 -0
  83. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
  84. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
  85. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
  86. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
  87. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
  88. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
  89. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
  90. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
  91. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
  92. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/serial_communication.py +0 -0
  93. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
  94. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
  95. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
  96. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
  97. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
  98. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
  99. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
  100. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
  101. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
  102. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
  103. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/temp_deck/driver.py +0 -0
  104. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
  105. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
  106. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
  107. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/thermocycler/driver.py +0 -0
  108. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
  109. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/types.py +0 -0
  110. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/drivers/utils.py +0 -0
  111. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/execute.py +0 -0
  112. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/__init__.py +0 -0
  113. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/__main__.py +0 -0
  114. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/adapters.py +0 -0
  115. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/api.py +0 -0
  116. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/__init__.py +0 -0
  117. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/controller.py +0 -0
  118. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/errors.py +0 -0
  119. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
  120. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/flex_protocol.py +0 -0
  121. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/ot3controller.py +0 -0
  122. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/ot3simulator.py +0 -0
  123. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/ot3utils.py +0 -0
  124. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/simulator.py +0 -0
  125. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
  126. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/subsystem_manager.py +0 -0
  127. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
  128. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/backends/types.py +0 -0
  129. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/constants.py +0 -0
  130. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/dev_types.py +0 -0
  131. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
  132. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
  133. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/app.py +0 -0
  134. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
  135. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/heater_shaker.py +0 -0
  136. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
  137. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
  138. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/module_server/client.py +0 -0
  139. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
  140. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
  141. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/module_server/server.py +0 -0
  142. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/parser.py +0 -0
  143. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
  144. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
  145. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
  146. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
  147. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
  148. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
  149. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/settings.py +0 -0
  150. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
  151. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
  152. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
  153. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
  154. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/types.py +0 -0
  155. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/emulation/util.py +0 -0
  156. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/errors.py +0 -0
  157. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/execution_manager.py +0 -0
  158. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
  159. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
  160. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
  161. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +0 -0
  162. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot2/pipette.py +0 -0
  163. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +0 -0
  164. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
  165. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot3/gripper.py +0 -0
  166. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
  167. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
  168. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot3/pipette.py +0 -0
  169. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +0 -0
  170. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/module_control.py +0 -0
  171. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/__init__.py +0 -0
  172. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/absorbance_reader.py +0 -0
  173. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/errors.py +0 -0
  174. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/flex_stacker.py +0 -0
  175. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/heater_shaker.py +0 -0
  176. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
  177. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/magdeck.py +0 -0
  178. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/mod_abc.py +0 -0
  179. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
  180. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
  181. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/tempdeck.py +0 -0
  182. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/thermocycler.py +0 -0
  183. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/types.py +0 -0
  184. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/update.py +0 -0
  185. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/modules/utils.py +0 -0
  186. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/motion_utilities.py +0 -0
  187. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/nozzle_manager.py +0 -0
  188. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/ot3_calibration.py +0 -0
  189. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/ot3api.py +0 -0
  190. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/pause_manager.py +0 -0
  191. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/poller.py +0 -0
  192. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
  193. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
  194. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
  195. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
  196. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
  197. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
  198. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
  199. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
  200. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
  201. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/gripper_controller.py +0 -0
  202. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/hardware_manager.py +0 -0
  203. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
  204. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
  205. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/liquid_handler.py +0 -0
  206. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
  207. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/motion_controller.py +0 -0
  208. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
  209. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
  210. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
  211. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/protocols/types.py +0 -0
  212. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/robot_calibration.py +0 -0
  213. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
  214. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
  215. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/scripts/repl.py +0 -0
  216. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
  217. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/simulator_setup.py +0 -0
  218. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/thread_manager.py +0 -0
  219. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
  220. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/types.py +0 -0
  221. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/hardware_control/util.py +0 -0
  222. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_broker.py +0 -0
  223. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/__init__.py +0 -0
  224. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/commands.py +0 -0
  225. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/helpers.py +0 -0
  226. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/module_commands.py +0 -0
  227. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
  228. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/publisher.py +0 -0
  229. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/legacy_commands/types.py +0 -0
  230. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/motion_planning/__init__.py +0 -0
  231. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
  232. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/motion_planning/deck_conflict.py +0 -0
  233. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/motion_planning/errors.py +0 -0
  234. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/motion_planning/types.py +0 -0
  235. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/motion_planning/waypoints.py +0 -0
  236. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/ordered_set.py +0 -0
  237. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/__init__.py +0 -0
  238. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_liquid.py +0 -0
  239. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_liquid_properties.py +0 -0
  240. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
  241. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_parameter_context.py +0 -0
  242. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_parameters.py +0 -0
  243. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_transfer_liquid_validation.py +0 -0
  244. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/_types.py +0 -0
  245. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/config.py +0 -0
  246. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/__init__.py +0 -0
  247. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/common.py +0 -0
  248. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/core_map.py +0 -0
  249. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
  250. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/deck_conflict.py +0 -0
  251. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
  252. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/labware.py +0 -0
  253. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/load_labware_params.py +0 -0
  254. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/module_core.py +0 -0
  255. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
  256. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +0 -0
  257. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
  258. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/protocol.py +0 -0
  259. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/robot.py +0 -0
  260. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/stringify.py +0 -0
  261. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/transfer_components_executor.py +0 -0
  262. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/engine/well.py +0 -0
  263. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/labware.py +0 -0
  264. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
  265. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
  266. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +0 -0
  267. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +0 -0
  268. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
  269. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +0 -0
  270. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +0 -0
  271. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/load_info.py +0 -0
  272. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/module_geometry.py +0 -0
  273. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy/well_geometry.py +0 -0
  274. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
  275. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
  276. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/module.py +0 -0
  277. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/protocol.py +0 -0
  278. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/robot.py +0 -0
  279. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/well.py +0 -0
  280. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/core/well_grid.py +0 -0
  281. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
  282. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/deck.py +0 -0
  283. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/disposal_locations.py +0 -0
  284. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/labware.py +0 -0
  285. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/module_contexts.py +0 -0
  286. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
  287. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/protocol_context.py +0 -0
  288. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/robot_context.py +0 -0
  289. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_api/validation.py +0 -0
  290. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/__init__.py +0 -0
  291. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
  292. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
  293. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
  294. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/actions/actions.py +0 -0
  295. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
  296. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
  297. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/clients/sync_client.py +0 -0
  298. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/clients/transports.py +0 -0
  299. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/__init__.py +0 -0
  300. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -0
  301. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -0
  302. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +0 -0
  303. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -0
  304. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +0 -0
  305. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/air_gap_in_place.py +0 -0
  306. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/aspirate.py +0 -0
  307. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +0 -0
  308. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/aspirate_while_tracking.py +0 -0
  309. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/blow_out.py +0 -0
  310. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +0 -0
  311. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
  312. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +0 -0
  313. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +0 -0
  314. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +0 -0
  315. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +0 -0
  316. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/command.py +0 -0
  317. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/command_unions.py +0 -0
  318. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/comment.py +0 -0
  319. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/configure_for_volume.py +0 -0
  320. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +0 -0
  321. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/custom.py +0 -0
  322. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/dispense.py +0 -0
  323. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/dispense_in_place.py +0 -0
  324. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/dispense_while_tracking.py +0 -0
  325. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/drop_tip.py +0 -0
  326. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +0 -0
  327. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/__init__.py +0 -0
  328. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/close_latch.py +0 -0
  329. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/common.py +0 -0
  330. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/empty.py +0 -0
  331. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/fill.py +0 -0
  332. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/open_latch.py +0 -0
  333. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/prepare_shuttle.py +0 -0
  334. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/retrieve.py +0 -0
  335. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +0 -0
  336. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/flex_stacker/store.py +0 -0
  337. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/generate_command_schema.py +0 -0
  338. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/get_next_tip.py +0 -0
  339. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/get_tip_presence.py +0 -0
  340. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
  341. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
  342. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +0 -0
  343. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +0 -0
  344. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +0 -0
  345. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +0 -0
  346. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +0 -0
  347. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +0 -0
  348. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +0 -0
  349. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/home.py +0 -0
  350. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/labware_handling_common.py +0 -0
  351. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_labware.py +0 -0
  352. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_lid.py +0 -0
  353. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_lid_stack.py +0 -0
  354. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_liquid.py +0 -0
  355. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_liquid_class.py +0 -0
  356. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_module.py +0 -0
  357. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/load_pipette.py +0 -0
  358. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
  359. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +0 -0
  360. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +0 -0
  361. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/move_labware.py +0 -0
  362. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/move_relative.py +0 -0
  363. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +0 -0
  364. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +0 -0
  365. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +0 -0
  366. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/move_to_well.py +0 -0
  367. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/movement_common.py +0 -0
  368. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/pick_up_tip.py +0 -0
  369. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/pipetting_common.py +0 -0
  370. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +0 -0
  371. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/pressure_dispense.py +0 -0
  372. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/reload_labware.py +0 -0
  373. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/retract_axis.py +0 -0
  374. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -0
  375. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +0 -0
  376. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/common.py +0 -0
  377. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/move_axes_relative.py +0 -0
  378. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/move_axes_to.py +0 -0
  379. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/move_to.py +0 -0
  380. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +0 -0
  381. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/save_position.py +0 -0
  382. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/set_rail_lights.py +0 -0
  383. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/set_status_bar.py +0 -0
  384. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
  385. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +0 -0
  386. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +0 -0
  387. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +0 -0
  388. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
  389. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +0 -0
  390. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +0 -0
  391. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +0 -0
  392. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +0 -0
  393. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +0 -0
  394. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +0 -0
  395. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +0 -0
  396. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +0 -0
  397. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +0 -0
  398. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +0 -0
  399. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/touch_tip.py +0 -0
  400. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
  401. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +0 -0
  402. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +0 -0
  403. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +0 -0
  404. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
  405. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
  406. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +0 -0
  407. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +0 -0
  408. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/wait_for_duration.py +0 -0
  409. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/commands/wait_for_resume.py +0 -0
  410. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
  411. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/engine_support.py +0 -0
  412. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
  413. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/errors/error_occurrence.py +0 -0
  414. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
  415. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/command_executor.py +0 -0
  416. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
  417. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
  418. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/equipment.py +0 -0
  419. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
  420. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -0
  421. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
  422. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
  423. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/labware_movement.py +0 -0
  424. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/movement.py +0 -0
  425. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
  426. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
  427. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
  428. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
  429. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
  430. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
  431. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/execution/tip_handler.py +0 -0
  432. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/labware_offset_standardization.py +0 -0
  433. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
  434. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/notes/notes.py +0 -0
  435. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/plugins.py +0 -0
  436. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/protocol_engine.py +0 -0
  437. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
  438. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +0 -0
  439. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/deck_data_provider.py +0 -0
  440. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
  441. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
  442. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/labware_data_provider.py +0 -0
  443. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/labware_validation.py +0 -0
  444. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
  445. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/module_data_provider.py +0 -0
  446. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
  447. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +0 -0
  448. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/slot_standardization.py +0 -0
  449. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/__init__.py +0 -0
  450. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
  451. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/_move_types.py +0 -0
  452. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/_well_math.py +0 -0
  453. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/addressable_areas.py +0 -0
  454. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/command_history.py +0 -0
  455. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/commands.py +0 -0
  456. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/config.py +0 -0
  457. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/files.py +0 -0
  458. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/fluid_stack.py +0 -0
  459. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/frustum_helpers.py +0 -0
  460. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/labware.py +0 -0
  461. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/liquid_classes.py +0 -0
  462. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/liquids.py +0 -0
  463. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/__init__.py +0 -0
  464. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
  465. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +0 -0
  466. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +0 -0
  467. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
  468. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
  469. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +0 -0
  470. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +0 -0
  471. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/motion.py +0 -0
  472. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/pipettes.py +0 -0
  473. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/state.py +0 -0
  474. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/state_summary.py +0 -0
  475. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/tips.py +0 -0
  476. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/update_types.py +0 -0
  477. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/state/wells.py +0 -0
  478. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/__init__.py +0 -0
  479. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/automatic_tip_selection.py +0 -0
  480. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/command_annotations.py +0 -0
  481. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/deck_configuration.py +0 -0
  482. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/execution.py +0 -0
  483. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/hardware_passthrough.py +0 -0
  484. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/instrument.py +0 -0
  485. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/instrument_sensors.py +0 -0
  486. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/labware.py +0 -0
  487. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/labware_movement.py +0 -0
  488. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/labware_offset_location.py +0 -0
  489. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/labware_offset_vector.py +0 -0
  490. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/liquid.py +0 -0
  491. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/liquid_class.py +0 -0
  492. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/liquid_handling.py +0 -0
  493. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/liquid_level_detection.py +0 -0
  494. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/location.py +0 -0
  495. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/partial_tip_configuration.py +0 -0
  496. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/run_time_parameters.py +0 -0
  497. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/tip.py +0 -0
  498. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/util.py +0 -0
  499. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_engine/types/well_position.py +0 -0
  500. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/__init__.py +0 -0
  501. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/extract_labware_definitions.py +0 -0
  502. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/file_format_validator.py +0 -0
  503. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/file_hasher.py +0 -0
  504. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/file_identifier.py +0 -0
  505. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
  506. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/input_file.py +0 -0
  507. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
  508. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
  509. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/protocol_source.py +0 -0
  510. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
  511. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/__init__.py +0 -0
  512. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
  513. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/json_file_reader.py +0 -0
  514. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/json_translator.py +0 -0
  515. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/legacy_command_mapper.py +0 -0
  516. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
  517. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/protocol_runner.py +0 -0
  518. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/python_protocol_wrappers.py +0 -0
  519. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/run_orchestrator.py +0 -0
  520. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocol_runner/task_queue.py +0 -0
  521. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/__init__.py +0 -0
  522. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/__init__.py +0 -0
  523. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/common.py +0 -0
  524. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/mix.py +0 -0
  525. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
  526. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/transfers/common.py +0 -0
  527. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/transfers/transfer.py +0 -0
  528. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +0 -0
  529. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/__init__.py +0 -0
  530. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/constants.py +0 -0
  531. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/deck_type.py +0 -0
  532. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/definitions.py +0 -0
  533. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/instrument.py +0 -0
  534. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/labware_like.py +0 -0
  535. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
  536. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/types.py +0 -0
  537. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/api_support/util.py +0 -0
  538. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/bundle.py +0 -0
  539. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/duration/__init__.py +0 -0
  540. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/duration/errors.py +0 -0
  541. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/duration/estimator.py +0 -0
  542. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/__init__.py +0 -0
  543. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/dev_types.py +0 -0
  544. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/errors.py +0 -0
  545. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/execute.py +0 -0
  546. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
  547. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
  548. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
  549. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/execute_python.py +0 -0
  550. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
  551. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/execution/types.py +0 -0
  552. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/geometry/__init__.py +0 -0
  553. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
  554. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/geometry/planning.py +0 -0
  555. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/labware.py +0 -0
  556. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/models/__init__.py +0 -0
  557. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/models/json_protocol.py +0 -0
  558. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/__init__.py +0 -0
  559. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
  560. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
  561. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/exceptions.py +0 -0
  562. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
  563. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/types.py +0 -0
  564. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parameters/validation.py +0 -0
  565. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/parse.py +0 -0
  566. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/protocols/types.py +0 -0
  567. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/py.typed +0 -0
  568. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/resources/scripts/lpc21isp +0 -0
  569. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
  570. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/simulate.py +0 -0
  571. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/__init__.py +0 -0
  572. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/camera.py +0 -0
  573. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/log_control.py +0 -0
  574. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/nmcli.py +0 -0
  575. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/resin.py +0 -0
  576. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/smoothie_update.py +0 -0
  577. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/system/wifi.py +0 -0
  578. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/tools/__init__.py +0 -0
  579. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/tools/args_handler.py +0 -0
  580. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/tools/write_pipette_memory.py +0 -0
  581. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/types.py +0 -0
  582. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/__init__.py +0 -0
  583. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/async_helpers.py +0 -0
  584. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/broker.py +0 -0
  585. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/change_notifier.py +0 -0
  586. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/entrypoint_util.py +0 -0
  587. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/get_union_elements.py +0 -0
  588. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/helpers.py +0 -0
  589. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/linal.py +0 -0
  590. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/logging_config.py +0 -0
  591. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/logging_queue_handler.py +0 -0
  592. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons/util/performance_helpers.py +0 -0
  593. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons.egg-info/SOURCES.txt +0 -0
  594. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons.egg-info/dependency_links.txt +0 -0
  595. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons.egg-info/entry_points.txt +0 -0
  596. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/src/opentrons.egg-info/not-zip-safe +0 -0
  597. {opentrons-8.4.0a7 → opentrons-8.4.0a8}/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.4.0a7
3
+ Version: 8.4.0a8
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.4.0a7
24
+ Requires-Dist: opentrons-shared-data==8.4.0a8
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.4.0a7; extra == "ot2-hardware"
38
+ Requires-Dist: opentrons-hardware==8.4.0a8; extra == "ot2-hardware"
39
39
  Provides-Extra: flex-hardware
40
- Requires-Dist: opentrons-hardware[FLEX]==8.4.0a7; extra == "flex-hardware"
40
+ Requires-Dist: opentrons-hardware[FLEX]==8.4.0a8; extra == "flex-hardware"
41
41
 
42
42
  .. _Full API Documentation: http://docs.opentrons.com
43
43
 
@@ -834,7 +834,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
834
834
  )
835
835
  )
836
836
 
837
- def resin_tip_unseal(self, location: Location, well_core: WellCore) -> None:
837
+ def resin_tip_unseal(self, location: Location | None, well_core: WellCore) -> None:
838
838
  well_name = well_core.get_name()
839
839
  labware_id = well_core.labware_id
840
840
 
@@ -1188,9 +1188,9 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1188
1188
  cmd.GetNextTipParams(
1189
1189
  pipetteId=self._pipette_id,
1190
1190
  labwareIds=[tip_rack.labware_id for tip_rack in valid_tip_racks],
1191
- startingTipWell=starting_well.get_name()
1192
- if starting_well is not None
1193
- else None,
1191
+ startingTipWell=(
1192
+ starting_well.get_name() if starting_well is not None else None
1193
+ ),
1194
1194
  )
1195
1195
  )
1196
1196
  next_tip_info = result.nextTipInfo
@@ -206,7 +206,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
206
206
  @abstractmethod
207
207
  def resin_tip_unseal(
208
208
  self,
209
- location: types.Location,
209
+ location: types.Location | None,
210
210
  well_core: WellCoreType,
211
211
  ) -> None:
212
212
  ...
@@ -332,7 +332,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
332
332
 
333
333
  def resin_tip_unseal(
334
334
  self,
335
- location: types.Location,
335
+ location: types.Location | None,
336
336
  well_core: WellCore,
337
337
  ) -> None:
338
338
  raise APIVersionError(api_element="Unsealing resin tips.")
@@ -298,7 +298,7 @@ class LegacyInstrumentCoreSimulator(
298
298
 
299
299
  def resin_tip_unseal(
300
300
  self,
301
- location: types.Location,
301
+ location: types.Location | None,
302
302
  well_core: WellCore,
303
303
  ) -> None:
304
304
  raise APIVersionError(api_element="Unsealing resin tips.")
@@ -606,7 +606,20 @@ class InstrumentContext(publisher.CommandPublisher):
606
606
  "Blow_out being performed on a tiprack. "
607
607
  "Please re-check your code"
608
608
  )
609
- move_to_location = target.location or target.well.top()
609
+ if target.location:
610
+ # because the lower levels of blowout don't handle LiquidHandlingWellLocation and
611
+ # there is no "operation_volume" for blowout we need to convert the relative location
612
+ # given with a .meniscus to an absolute point. To maintain the meniscus behavior
613
+ # we can just add the offset to the current liquid height.
614
+ if target.location.meniscus_tracking:
615
+ move_to_location = target.well.bottom(
616
+ target.well.current_liquid_height() # type: ignore [arg-type]
617
+ + target.location.point.z
618
+ )
619
+ else:
620
+ move_to_location = target.location
621
+ else:
622
+ move_to_location = target.well.top()
610
623
  well = target.well
611
624
  elif isinstance(target, validation.PointTarget):
612
625
  move_to_location = target.location
@@ -1611,9 +1624,9 @@ class InstrumentContext(publisher.CommandPublisher):
1611
1624
  (types.Location(types.Point(), labware=rack), rack._core)
1612
1625
  for rack in transfer_args.tip_racks
1613
1626
  ],
1614
- starting_tip=self.starting_tip._core
1615
- if self.starting_tip is not None
1616
- else None,
1627
+ starting_tip=(
1628
+ self.starting_tip._core if self.starting_tip is not None else None
1629
+ ),
1617
1630
  trash_location=transfer_args.trash_location,
1618
1631
  return_tip=return_tip,
1619
1632
  )
@@ -1727,9 +1740,9 @@ class InstrumentContext(publisher.CommandPublisher):
1727
1740
  (types.Location(types.Point(), labware=rack), rack._core)
1728
1741
  for rack in transfer_args.tip_racks
1729
1742
  ],
1730
- starting_tip=self.starting_tip._core
1731
- if self.starting_tip is not None
1732
- else None,
1743
+ starting_tip=(
1744
+ self.starting_tip._core if self.starting_tip is not None else None
1745
+ ),
1733
1746
  trash_location=transfer_args.trash_location,
1734
1747
  return_tip=return_tip,
1735
1748
  )
@@ -1843,9 +1856,9 @@ class InstrumentContext(publisher.CommandPublisher):
1843
1856
  (types.Location(types.Point(), labware=rack), rack._core)
1844
1857
  for rack in transfer_args.tip_racks
1845
1858
  ],
1846
- starting_tip=self.starting_tip._core
1847
- if self.starting_tip is not None
1848
- else None,
1859
+ starting_tip=(
1860
+ self.starting_tip._core if self.starting_tip is not None else None
1861
+ ),
1849
1862
  trash_location=transfer_args.trash_location,
1850
1863
  return_tip=return_tip,
1851
1864
  )
@@ -2019,7 +2032,7 @@ class InstrumentContext(publisher.CommandPublisher):
2019
2032
  location=well,
2020
2033
  ),
2021
2034
  ):
2022
- self._core.resin_tip_unseal(location=well.top(), well_core=well._core)
2035
+ self._core.resin_tip_unseal(location=None, well_core=well._core)
2023
2036
 
2024
2037
  return self
2025
2038
 
@@ -188,6 +188,12 @@ async def _execute_common( # noqa: C901
188
188
  well_name=well_name,
189
189
  well_location=params.wellLocation,
190
190
  )
191
+ state_view.geometry.validate_probed_height(
192
+ labware_id=labware_id,
193
+ well_name=well_name,
194
+ pipette_id=pipette_id,
195
+ probed_height=z_pos,
196
+ )
191
197
  except PipetteLiquidNotFoundError as exception:
192
198
  move_result.state_update.set_pipette_ready_to_aspirate(
193
199
  pipette_id=pipette_id, ready_to_aspirate=True
@@ -1,12 +1,15 @@
1
1
  """Seal tips to pipette command request, result, and implementation models."""
2
2
 
3
3
  from __future__ import annotations
4
- from pydantic import Field, BaseModel
5
4
  from typing import TYPE_CHECKING, Optional, Type, Union
6
- from opentrons.types import MountType
7
- from opentrons.protocol_engine.types import MotorAxis
5
+
8
6
  from typing_extensions import Literal
7
+ from pydantic import Field, BaseModel
8
+
9
+ from opentrons_shared_data.errors.exceptions import PositionUnknownError
9
10
 
11
+ from opentrons.types import MountType
12
+ from opentrons.protocol_engine.types import MotorAxis
10
13
  from ..resources import ModelUtils, ensure_ot3_hardware
11
14
  from ..types import PickUpTipWellLocation, FluidKind, AspiratedFluid
12
15
  from .pipetting_common import (
@@ -27,7 +30,6 @@ from .command import (
27
30
 
28
31
  from opentrons.hardware_control import HardwareControlAPI
29
32
  from opentrons.hardware_control.types import Axis
30
- from ..state.update_types import StateUpdate
31
33
 
32
34
  if TYPE_CHECKING:
33
35
  from ..state.state import StateView
@@ -138,28 +140,50 @@ class SealPipetteToTipImplementation(
138
140
  """A relative press-fit pick up command using gantry moves."""
139
141
  prep_distance = tip_pick_up_params.prepDistance
140
142
  press_distance = tip_pick_up_params.pressDistance
141
- retract_distance = -1 * (prep_distance + press_distance)
143
+ retract_distance = -1 * (press_distance) / 2
142
144
 
143
145
  mount_axis = MotorAxis.LEFT_Z if mount == MountType.LEFT else MotorAxis.RIGHT_Z
144
-
146
+ ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
145
147
  # TODO chb, 2025-01-29): Factor out the movement constants and relocate this logic into the hardware controller
146
- await self._gantry_mover.move_axes(
147
- axis_map={mount_axis: prep_distance}, speed=10, relative_move=True
148
+ try:
149
+ await self._gantry_mover.move_axes(
150
+ axis_map={mount_axis: prep_distance},
151
+ speed=10,
152
+ relative_move=True,
153
+ expect_stalls=True,
154
+ )
155
+ except PositionUnknownError:
156
+ # if this happens it's from the get position after the move and we can ignore it
157
+ pass
158
+
159
+ await ot3_hardware_api.update_axis_position_estimations(
160
+ self._gantry_mover.motor_axes_to_present_hardware_axes([mount_axis])
148
161
  )
149
162
 
150
163
  # Drive mount down for press-fit
151
- await self._gantry_mover.move_axes(
152
- axis_map={mount_axis: press_distance},
153
- speed=10.0,
154
- relative_move=True,
155
- expect_stalls=True,
156
- )
157
- # retract cam : 11.05
158
- await self._gantry_mover.move_axes(
159
- axis_map={mount_axis: retract_distance}, speed=5.5, relative_move=True
164
+ try:
165
+ await self._gantry_mover.move_axes(
166
+ axis_map={mount_axis: press_distance},
167
+ speed=10.0,
168
+ relative_move=True,
169
+ expect_stalls=True,
170
+ )
171
+ except PositionUnknownError:
172
+ # if this happens it's from the get position after the move and we can ignore it
173
+ pass
174
+
175
+ await ot3_hardware_api.update_axis_position_estimations(
176
+ self._gantry_mover.motor_axes_to_present_hardware_axes([mount_axis])
160
177
  )
161
178
 
162
- ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
179
+ try:
180
+ await self._gantry_mover.move_axes(
181
+ axis_map={mount_axis: retract_distance}, speed=5.5, relative_move=True
182
+ )
183
+ except PositionUnknownError:
184
+ # if this happens it's from the get position after the move and we can ignore it
185
+ pass
186
+
163
187
  await ot3_hardware_api.update_axis_position_estimations(
164
188
  self._gantry_mover.motor_axes_to_present_hardware_axes([mount_axis])
165
189
  )
@@ -283,13 +307,10 @@ class SealPipetteToTipImplementation(
283
307
  if hw_instr is not None:
284
308
  hw_instr.set_current_volume(_SAFE_TOP_VOLUME)
285
309
 
286
- state_update = StateUpdate()
287
- state_update.update_pipette_tip_state(
310
+ state_update = move_result.state_update.update_pipette_tip_state(
288
311
  pipette_id=pipette_id,
289
312
  tip_geometry=tip_geometry,
290
- )
291
-
292
- state_update.set_fluid_aspirated(
313
+ ).set_fluid_aspirated(
293
314
  pipette_id=pipette_id,
294
315
  fluid=AspiratedFluid(kind=FluidKind.LIQUID, volume=_SAFE_TOP_VOLUME),
295
316
  )
@@ -3,12 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from pydantic import Field
6
- from typing import TYPE_CHECKING, Optional, Type
6
+ from typing import TYPE_CHECKING, Optional, Type, Final
7
7
  from typing_extensions import Literal
8
8
 
9
9
  from opentrons.protocol_engine.resources.model_utils import ModelUtils
10
- from opentrons.protocol_engine.types import MotorAxis
11
- from opentrons.types import MountType
12
10
 
13
11
  from ..types import DropTipWellLocation
14
12
  from .pipetting_common import (
@@ -56,6 +54,8 @@ _ExecuteReturn = (
56
54
  SuccessData[UnsealPipetteFromTipResult] | DefinedErrorData[StallOrCollisionError]
57
55
  )
58
56
 
57
+ CUSTOM_TIP_LENGTH_MARGIN: Final = 10
58
+
59
59
 
60
60
  class UnsealPipetteFromTipImplementation(
61
61
  AbstractCommandImpl[UnsealPipetteFromTipParams, _ExecuteReturn]
@@ -85,6 +85,10 @@ class UnsealPipetteFromTipImplementation(
85
85
 
86
86
  well_location = params.wellLocation
87
87
 
88
+ tip_geometry = self._state_view.geometry.get_nominal_tip_geometry(
89
+ pipette_id, labware_id, well_name
90
+ )
91
+
88
92
  is_partially_configured = self._state_view.pipettes.get_is_partially_configured(
89
93
  pipette_id=pipette_id
90
94
  )
@@ -93,6 +97,7 @@ class UnsealPipetteFromTipImplementation(
93
97
  labware_id=labware_id,
94
98
  well_location=well_location,
95
99
  partially_configured=is_partially_configured,
100
+ override_default_offset=-(tip_geometry.length - CUSTOM_TIP_LENGTH_MARGIN),
96
101
  )
97
102
 
98
103
  move_result = await move_to_well(
@@ -106,14 +111,6 @@ class UnsealPipetteFromTipImplementation(
106
111
  if isinstance(move_result, DefinedErrorData):
107
112
  return move_result
108
113
 
109
- # Move to an appropriate position
110
- mount = self._state_view.pipettes.get_mount(pipette_id)
111
-
112
- mount_axis = MotorAxis.LEFT_Z if mount == MountType.LEFT else MotorAxis.RIGHT_Z
113
- await self._gantry_mover.move_axes(
114
- axis_map={mount_axis: -14}, speed=10, relative_move=True
115
- )
116
-
117
114
  await self._tip_handler.drop_tip(
118
115
  pipette_id=pipette_id,
119
116
  home_after=None,
@@ -88,6 +88,7 @@ from .exceptions import (
88
88
  OffsetLocationInvalidError,
89
89
  FlexStackerLabwarePoolNotYetDefinedError,
90
90
  FlexStackerNotLogicallyEmptyError,
91
+ InvalidLabwarePositionError,
91
92
  )
92
93
 
93
94
  from .error_occurrence import ErrorOccurrence, ProtocolCommandFailedError
@@ -171,6 +172,7 @@ __all__ = [
171
172
  "OffsetLocationInvalidError",
172
173
  "FlexStackerLabwarePoolNotYetDefinedError",
173
174
  "FlexStackerNotLogicallyEmptyError",
175
+ "InvalidLabwarePositionError",
174
176
  # error occurrence models
175
177
  "ErrorOccurrence",
176
178
  "CommandNotAllowedError",
@@ -1281,3 +1281,15 @@ class FlexStackerLabwarePoolNotYetDefinedError(ProtocolEngineError):
1281
1281
  wrapping: Optional[Sequence[EnumeratedError]] = None,
1282
1282
  ) -> None:
1283
1283
  super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
1284
+
1285
+
1286
+ class InvalidLabwarePositionError(ProtocolEngineError):
1287
+ """Raised when a labware position is internally invalid."""
1288
+
1289
+ def __init__(
1290
+ self,
1291
+ message: Optional[str] = None,
1292
+ details: Optional[dict[str, Any]] = None,
1293
+ wrapping: Optional[Sequence[EnumeratedError]] = None,
1294
+ ) -> None:
1295
+ super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
@@ -326,7 +326,7 @@ class HardwarePipettingHandler(PipettingHandler):
326
326
  well_name: str,
327
327
  well_location: WellLocation,
328
328
  ) -> LiquidTrackingType:
329
- """Detect liquid level."""
329
+ """Return liquid level relative to the bottom of the well."""
330
330
  hw_pipette = self._state_view.pipettes.get_hardware_pipette(
331
331
  pipette_id=pipette_id,
332
332
  attached_pipettes=self._hardware_api.attached_instruments,
@@ -17,7 +17,10 @@ from opentrons.types import (
17
17
  MeniscusTrackingTarget,
18
18
  )
19
19
 
20
- from opentrons_shared_data.errors.exceptions import InvalidStoredData
20
+ from opentrons_shared_data.errors.exceptions import (
21
+ InvalidStoredData,
22
+ PipetteLiquidNotFoundError,
23
+ )
21
24
  from opentrons_shared_data.labware.constants import WELL_NAME_PATTERN
22
25
  from opentrons_shared_data.labware.labware_definition import LabwareDefinition
23
26
  from opentrons_shared_data.deck.types import CutoutFixture
@@ -31,6 +34,8 @@ from ..errors import (
31
34
  LabwareNotLoadedOnModuleError,
32
35
  LabwareMovementNotAllowedError,
33
36
  OperationLocationNotInWellError,
37
+ InvalidLabwarePositionError,
38
+ LabwareNotOnDeckError,
34
39
  )
35
40
  from ..errors.exceptions import InvalidLiquidHeightFound
36
41
  from ..resources import (
@@ -373,6 +378,59 @@ class GeometryView:
373
378
  "Either it has been loaded off-deck or its been moved off-deck."
374
379
  )
375
380
 
381
+ def _get_offset_from_parent_addressable_area(
382
+ self, child_definition: LabwareDefinition, parent: LabwareLocation
383
+ ) -> LabwareOffsetVector:
384
+ """Gets the offset vector of a labware from its eventual parent addressable area.
385
+
386
+ This returns the sum of the offsets for any labware-on-labware pairs plus the
387
+ "base offset", which is (0, 0, 0) in all cases except for modules on the
388
+ OT-2. See
389
+ protocol_engine.state.modules.get_nominal_offset_to_child_from_addressable_area
390
+ for more.
391
+
392
+ This does not incorporate LPC offsets or module calibration offsets.
393
+ """
394
+ if isinstance(parent, (AddressableAreaLocation, DeckSlotLocation)):
395
+ return LabwareOffsetVector(x=0, y=0, z=0)
396
+ elif isinstance(parent, ModuleLocation):
397
+ module_id = parent.moduleId
398
+ module_model = self._modules.get_connected_model(module_id)
399
+ stacking_overlap = self._labware.get_module_overlap_offsets(
400
+ child_definition, module_model
401
+ )
402
+ module_to_child = (
403
+ self._modules.get_nominal_offset_to_child_from_addressable_area(
404
+ module_id=module_id
405
+ )
406
+ )
407
+ return LabwareOffsetVector(
408
+ x=module_to_child.x - stacking_overlap.x,
409
+ y=module_to_child.y - stacking_overlap.y,
410
+ z=module_to_child.z - stacking_overlap.z,
411
+ )
412
+ elif isinstance(parent, OnLabwareLocation):
413
+ on_labware = self._labware.get(parent.labwareId)
414
+ on_labware_dimensions = self._labware.get_dimensions(
415
+ labware_id=on_labware.id
416
+ )
417
+ stacking_overlap = self._labware.get_labware_overlap_offsets(
418
+ definition=child_definition, below_labware_name=on_labware.loadName
419
+ )
420
+ labware_offset = LabwareOffsetVector(
421
+ x=stacking_overlap.x,
422
+ y=stacking_overlap.y,
423
+ z=on_labware_dimensions.z - stacking_overlap.z,
424
+ )
425
+ return labware_offset + self._get_offset_from_parent_addressable_area(
426
+ self._labware.get_definition(on_labware.id), on_labware.location
427
+ )
428
+ else:
429
+ raise errors.LabwareNotOnDeckError(
430
+ "Cannot access labware since it is not on the deck. "
431
+ "Either it has been loaded off-deck or it has been moved off-deck."
432
+ )
433
+
376
434
  def _normalize_module_calibration_offset(
377
435
  self,
378
436
  module_location: DeckSlotLocation,
@@ -498,6 +556,30 @@ class GeometryView:
498
556
  f"Specifying {well_location.origin} with an offset of {well_location.offset} results in an operation location below the bottom of the well"
499
557
  )
500
558
 
559
+ def validate_probed_height(
560
+ self,
561
+ labware_id: str,
562
+ well_name: str,
563
+ pipette_id: str,
564
+ probed_height: LiquidTrackingType,
565
+ ) -> None:
566
+ """Raise an error if a probed liquid height is not within well bounds."""
567
+ if isinstance(probed_height, SimulatedProbeResult):
568
+ return
569
+ lld_min_height = self._pipettes.get_current_tip_lld_settings(
570
+ pipette_id=pipette_id
571
+ )
572
+ well_def = self._labware.get_well_definition(labware_id, well_name)
573
+ well_depth = well_def.depth
574
+ if probed_height < lld_min_height:
575
+ raise PipetteLiquidNotFoundError(
576
+ f"Liquid Height of {probed_height} mm is lower minumum allowed lld height {lld_min_height} mm."
577
+ )
578
+ if probed_height > well_depth:
579
+ raise PipetteLiquidNotFoundError(
580
+ f"Liquid Height of {probed_height} mm is greater than maximum well height {well_depth} mm."
581
+ )
582
+
501
583
  def get_well_position(
502
584
  self,
503
585
  labware_id: str,
@@ -695,6 +777,7 @@ class GeometryView:
695
777
  labware_id: str,
696
778
  well_location: DropTipWellLocation,
697
779
  partially_configured: bool = False,
780
+ override_default_offset: float | None = None,
698
781
  ) -> WellLocation:
699
782
  """Get tip drop location given labware and hardware pipette.
700
783
 
@@ -713,8 +796,9 @@ class GeometryView:
713
796
  origin=WellOrigin(well_location.origin.value),
714
797
  offset=well_location.offset,
715
798
  )
716
-
717
- if self._labware.get_definition(labware_id).parameters.isTiprack:
799
+ if override_default_offset is not None:
800
+ z_offset = override_default_offset
801
+ elif self._labware.get_definition(labware_id).parameters.isTiprack:
718
802
  z_offset = self._labware.get_tip_drop_z_offset(
719
803
  labware_id=labware_id,
720
804
  length_scale=self._pipettes.get_return_tip_scale(pipette_id),
@@ -795,6 +879,32 @@ class GeometryView:
795
879
 
796
880
  return slot_name
797
881
 
882
+ def get_ancestor_addressable_area_name(self, labware_id: str) -> str:
883
+ """Get the name of the addressable area the labware is eventually on."""
884
+ labware = self._labware.get(labware_id)
885
+ original_display_name = self._labware.get_display_name(labware_id)
886
+ seen: Set[str] = set((labware_id,))
887
+ while isinstance(labware.location, OnLabwareLocation):
888
+ labware = self._labware.get(labware.location.labwareId)
889
+ if labware.id in seen:
890
+ raise InvalidLabwarePositionError(
891
+ f"Cycle detected in labware positioning for {original_display_name}"
892
+ )
893
+ seen.add(labware.id)
894
+ if isinstance(labware.location, DeckSlotLocation):
895
+ return labware.location.slotName.id
896
+ elif isinstance(labware.location, AddressableAreaLocation):
897
+ return labware.location.addressableAreaName
898
+ elif isinstance(labware.location, ModuleLocation):
899
+ return self._modules.get_provided_addressable_area(
900
+ labware.location.moduleId
901
+ )
902
+ else:
903
+ raise LabwareNotOnDeckError(
904
+ f"Labware {original_display_name} is not loaded on deck",
905
+ details={"eventual-location": repr(labware.location)},
906
+ )
907
+
798
908
  def ensure_location_not_occupied(
799
909
  self,
800
910
  location: _LabwareLocation,
@@ -962,70 +1072,23 @@ class GeometryView:
962
1072
  self._labware.get_grip_height_from_labware_bottom(labware_definition)
963
1073
  )
964
1074
  location_name: str
965
- module_location: ModuleLocation | None = None
966
-
1075
+ offset = self._get_offset_from_parent_addressable_area(
1076
+ child_definition=labware_definition, parent=location
1077
+ ) + self._get_calibrated_module_offset(location)
967
1078
  if isinstance(location, DeckSlotLocation):
968
1079
  location_name = location.slotName.id
969
- offset = LabwareOffsetVector(x=0, y=0, z=0)
970
1080
  elif isinstance(location, AddressableAreaLocation):
971
1081
  location_name = location.addressableAreaName
972
- if fixture_validation.is_gripper_waste_chute(location_name):
973
- drop_labware_location = (
974
- self._addressable_areas.get_addressable_area_move_to_location(
975
- location_name
976
- )
977
- )
978
- return drop_labware_location + Point(z=grip_height_from_labware_bottom)
979
- # Location should have been pre-validated so this will be a deck/staging area slot
980
- else:
981
- offset = LabwareOffsetVector(x=0, y=0, z=0)
982
- else:
983
- if isinstance(location, ModuleLocation):
984
- location_name = self._modules.get_provided_addressable_area(
985
- location.moduleId
986
- )
987
- module_location = location
988
- else: # OnLabwareLocation
989
- labware_loc = self._labware.get(location.labwareId).location
990
- if isinstance(labware_loc, ModuleLocation):
991
- location_name = self._modules.get_provided_addressable_area(
992
- labware_loc.moduleId
993
- )
994
- module_location = labware_loc
995
- else:
996
- location_name = self.get_ancestor_slot_name(location.labwareId).id
997
- labware_offset = self._get_offset_from_parent(
998
- child_definition=labware_definition, parent=location
999
- )
1000
- # Get the calibrated offset if the on labware location is on top of a module, otherwise return empty one
1001
- cal_offset = self._get_calibrated_module_offset(location)
1002
- offset = LabwareOffsetVector(
1003
- x=labware_offset.x + cal_offset.x,
1004
- y=labware_offset.y + cal_offset.y,
1005
- z=labware_offset.z + cal_offset.z,
1006
- )
1007
-
1008
- if module_location is not None:
1009
- # Location center must be determined from the cutout the Module is loaded in
1010
- position = deck_configuration_provider.get_cutout_position(
1011
- cutout_id=self._addressable_areas.get_cutout_id_by_deck_slot_name(
1012
- self._modules.get_location(module_location.moduleId).slotName
1013
- ),
1014
- deck_definition=self._addressable_areas.deck_definition,
1015
- )
1016
- bounding_box = self._addressable_areas.get_addressable_area(
1017
- location_name
1018
- ).bounding_box
1019
- location_center = Point(
1020
- position.x + bounding_box.x / 2,
1021
- position.y + bounding_box.y / 2,
1022
- position.z,
1082
+ elif isinstance(location, ModuleLocation):
1083
+ location_name = self._modules.get_provided_addressable_area(
1084
+ location.moduleId
1023
1085
  )
1086
+ else: # OnLabwareLocation
1087
+ location_name = self.get_ancestor_addressable_area_name(location.labwareId)
1024
1088
 
1025
- else:
1026
- location_center = self._addressable_areas.get_addressable_area_center(
1027
- location_name
1028
- )
1089
+ location_center = self._addressable_areas.get_addressable_area_center(
1090
+ location_name
1091
+ )
1029
1092
 
1030
1093
  return Point(
1031
1094
  location_center.x + offset.x,
@@ -1464,10 +1527,6 @@ class GeometryView:
1464
1527
  # * The "additional offset" or "user offset", e.g. the `pickUpOffset` and `dropOffset`
1465
1528
  # params in the `moveLabware` command.
1466
1529
  #
1467
- # And this *does* take these extra offsets into account:
1468
- #
1469
- # * The labware's Labware Position Check offset
1470
- #
1471
1530
  # For robustness, we should combine this with `get_gripper_labware_movement_waypoints()`.
1472
1531
  #
1473
1532
  # We should also be more explicit about which offsets act to move the gripper paddles
@@ -1489,23 +1548,17 @@ class GeometryView:
1489
1548
  return
1490
1549
 
1491
1550
  tip = self._pipettes.get_attached_tip(pipette.id)
1492
- if tip:
1493
- # NOTE: This call to get_labware_highest_z() uses the labware's LPC offset,
1494
- # which is an inconsistency between this and the actual gripper movement.
1495
- # See the todo comment above this function.
1496
- labware_top_z_when_gripped = gripper_homed_position_z + (
1497
- self.get_labware_highest_z(labware_id=labware_id)
1498
- - self.get_labware_grip_point(
1499
- labware_definition=labware_definition, location=current_location
1500
- ).z
1551
+ if not tip:
1552
+ continue
1553
+ labware_top_z_when_gripped = gripper_homed_position_z + (
1554
+ self._labware.get_dimensions(labware_definition=labware_definition).z
1555
+ - self._labware.get_grip_height_from_labware_bottom(labware_definition)
1556
+ )
1557
+ # TODO(cb, 2024-01-18): Utilizing the nozzle map and labware X coordinates verify if collisions will occur on the X axis (analysis will use hard coded data to measure from the gripper critical point to the pipette mount)
1558
+ if (_PIPETTE_HOMED_POSITION_Z - tip.length) < labware_top_z_when_gripped:
1559
+ raise LabwareMovementNotAllowedError(
1560
+ f"Cannot move labware '{labware_definition.parameters.loadName}' when {int(tip.volume)} µL tips are attached."
1501
1561
  )
1502
- # TODO(cb, 2024-01-18): Utilizing the nozzle map and labware X coordinates verify if collisions will occur on the X axis (analysis will use hard coded data to measure from the gripper critical point to the pipette mount)
1503
- if (
1504
- _PIPETTE_HOMED_POSITION_Z - tip.length
1505
- ) < labware_top_z_when_gripped:
1506
- raise LabwareMovementNotAllowedError(
1507
- f"Cannot move labware '{labware_definition.parameters.loadName}' when {int(tip.volume)} µL tips are attached."
1508
- )
1509
1562
  return
1510
1563
 
1511
1564
  def _nominal_gripper_offsets_for_location(