opentrons 8.4.0a4__tar.gz → 8.4.0a5__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.0a4 → opentrons-8.4.0a5}/PKG-INFO +4 -4
  2. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/instrument.py +30 -34
  3. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/transfer_components_executor.py +18 -2
  4. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/instrument.py +4 -3
  5. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +5 -3
  6. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +4 -3
  7. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/instrument_context.py +30 -15
  8. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/labware.py +19 -38
  9. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/aspirate_while_tracking.py +38 -59
  10. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/dispense_while_tracking.py +36 -67
  11. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/pipetting.py +1 -0
  12. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/logging_config.py +94 -25
  13. opentrons-8.4.0a5/src/opentrons/util/logging_queue_handler.py +61 -0
  14. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons.egg-info/PKG-INFO +4 -4
  15. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons.egg-info/SOURCES.txt +1 -0
  16. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons.egg-info/requires.txt +3 -3
  17. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/MANIFEST.in +0 -0
  18. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/README.rst +0 -0
  19. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/setup.cfg +0 -0
  20. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/setup.py +0 -0
  21. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/__init__.py +0 -0
  22. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/_version.py +0 -0
  23. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/__init__.py +0 -0
  24. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/deck_configuration.py +0 -0
  25. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
  26. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/file_operators.py +0 -0
  27. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/helpers.py +0 -0
  28. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
  29. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
  30. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +0 -0
  31. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
  32. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/models/v1.py +0 -0
  33. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
  34. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot2/tip_length.py +0 -0
  35. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
  36. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
  37. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
  38. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
  39. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/models/v1.py +0 -0
  40. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
  41. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
  42. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/calibration_storage/types.py +0 -0
  43. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/cli/__init__.py +0 -0
  44. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/cli/__main__.py +0 -0
  45. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/cli/analyze.py +0 -0
  46. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/__init__.py +0 -0
  47. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/advanced_settings.py +0 -0
  48. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/defaults_ot2.py +0 -0
  49. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/defaults_ot3.py +0 -0
  50. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/feature_flags.py +0 -0
  51. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/gripper_config.py +0 -0
  52. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/reset.py +0 -0
  53. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/robot_configs.py +0 -0
  54. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/config/types.py +0 -0
  55. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/__init__.py +0 -0
  56. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
  57. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
  58. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
  59. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
  60. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
  61. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
  62. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/asyncio/__init__.py +0 -0
  63. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/asyncio/communication/__init__.py +0 -0
  64. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/asyncio/communication/async_serial.py +0 -0
  65. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/asyncio/communication/errors.py +0 -0
  66. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/asyncio/communication/serial_connection.py +0 -0
  67. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/command_builder.py +0 -0
  68. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/__init__.py +0 -0
  69. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/abstract.py +0 -0
  70. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/driver.py +0 -0
  71. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/errors.py +0 -0
  72. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/simulator.py +0 -0
  73. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/types.py +0 -0
  74. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/flex_stacker/utils.py +0 -0
  75. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
  76. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
  77. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/heater_shaker/driver.py +0 -0
  78. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
  79. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
  80. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
  81. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/mag_deck/driver.py +0 -0
  82. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
  83. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
  84. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
  85. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
  86. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
  87. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
  88. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
  89. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
  90. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
  91. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/serial_communication.py +0 -0
  92. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
  93. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
  94. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
  95. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
  96. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
  97. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
  98. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
  99. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
  100. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
  101. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
  102. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/temp_deck/driver.py +0 -0
  103. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
  104. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
  105. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
  106. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/thermocycler/driver.py +0 -0
  107. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
  108. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/types.py +0 -0
  109. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/drivers/utils.py +0 -0
  110. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/execute.py +0 -0
  111. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/__init__.py +0 -0
  112. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/__main__.py +0 -0
  113. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/adapters.py +0 -0
  114. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/api.py +0 -0
  115. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/__init__.py +0 -0
  116. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/controller.py +0 -0
  117. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/errors.py +0 -0
  118. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
  119. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/flex_protocol.py +0 -0
  120. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/ot3controller.py +0 -0
  121. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/ot3simulator.py +0 -0
  122. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/ot3utils.py +0 -0
  123. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/simulator.py +0 -0
  124. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
  125. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/subsystem_manager.py +0 -0
  126. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
  127. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/backends/types.py +0 -0
  128. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/constants.py +0 -0
  129. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/dev_types.py +0 -0
  130. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
  131. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
  132. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/app.py +0 -0
  133. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
  134. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/heater_shaker.py +0 -0
  135. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
  136. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
  137. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/module_server/client.py +0 -0
  138. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
  139. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
  140. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/module_server/server.py +0 -0
  141. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/parser.py +0 -0
  142. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
  143. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
  144. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
  145. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
  146. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
  147. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
  148. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/settings.py +0 -0
  149. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
  150. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
  151. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
  152. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
  153. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/types.py +0 -0
  154. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/emulation/util.py +0 -0
  155. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/errors.py +0 -0
  156. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/execution_manager.py +0 -0
  157. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
  158. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
  159. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
  160. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +0 -0
  161. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot2/pipette.py +0 -0
  162. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +0 -0
  163. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
  164. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot3/gripper.py +0 -0
  165. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
  166. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
  167. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot3/pipette.py +0 -0
  168. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +0 -0
  169. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/module_control.py +0 -0
  170. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/__init__.py +0 -0
  171. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/absorbance_reader.py +0 -0
  172. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/errors.py +0 -0
  173. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/flex_stacker.py +0 -0
  174. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/heater_shaker.py +0 -0
  175. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
  176. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/magdeck.py +0 -0
  177. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/mod_abc.py +0 -0
  178. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
  179. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
  180. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/tempdeck.py +0 -0
  181. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/thermocycler.py +0 -0
  182. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/types.py +0 -0
  183. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/update.py +0 -0
  184. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/modules/utils.py +0 -0
  185. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/motion_utilities.py +0 -0
  186. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/nozzle_manager.py +0 -0
  187. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/ot3_calibration.py +0 -0
  188. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/ot3api.py +0 -0
  189. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/pause_manager.py +0 -0
  190. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/poller.py +0 -0
  191. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
  192. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
  193. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
  194. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
  195. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
  196. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
  197. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
  198. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
  199. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
  200. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/gripper_controller.py +0 -0
  201. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/hardware_manager.py +0 -0
  202. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
  203. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
  204. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/liquid_handler.py +0 -0
  205. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
  206. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/motion_controller.py +0 -0
  207. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
  208. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
  209. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
  210. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/protocols/types.py +0 -0
  211. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/robot_calibration.py +0 -0
  212. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
  213. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
  214. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/scripts/repl.py +0 -0
  215. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
  216. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/simulator_setup.py +0 -0
  217. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/thread_manager.py +0 -0
  218. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
  219. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/types.py +0 -0
  220. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/hardware_control/util.py +0 -0
  221. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_broker.py +0 -0
  222. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/__init__.py +0 -0
  223. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/commands.py +0 -0
  224. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/helpers.py +0 -0
  225. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/module_commands.py +0 -0
  226. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
  227. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/publisher.py +0 -0
  228. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/legacy_commands/types.py +0 -0
  229. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/motion_planning/__init__.py +0 -0
  230. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
  231. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/motion_planning/deck_conflict.py +0 -0
  232. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/motion_planning/errors.py +0 -0
  233. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/motion_planning/types.py +0 -0
  234. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/motion_planning/waypoints.py +0 -0
  235. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/ordered_set.py +0 -0
  236. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/__init__.py +0 -0
  237. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_liquid.py +0 -0
  238. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_liquid_properties.py +0 -0
  239. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
  240. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_parameter_context.py +0 -0
  241. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_parameters.py +0 -0
  242. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_transfer_liquid_validation.py +0 -0
  243. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/_types.py +0 -0
  244. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/config.py +0 -0
  245. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/__init__.py +0 -0
  246. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/common.py +0 -0
  247. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/core_map.py +0 -0
  248. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
  249. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/deck_conflict.py +0 -0
  250. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
  251. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/labware.py +0 -0
  252. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/load_labware_params.py +0 -0
  253. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/module_core.py +0 -0
  254. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
  255. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +0 -0
  256. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
  257. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/protocol.py +0 -0
  258. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/robot.py +0 -0
  259. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/stringify.py +0 -0
  260. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/engine/well.py +0 -0
  261. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/labware.py +0 -0
  262. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
  263. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
  264. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +0 -0
  265. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +0 -0
  266. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
  267. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +0 -0
  268. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +0 -0
  269. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/load_info.py +0 -0
  270. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/module_geometry.py +0 -0
  271. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy/well_geometry.py +0 -0
  272. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
  273. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
  274. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/module.py +0 -0
  275. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/protocol.py +0 -0
  276. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/robot.py +0 -0
  277. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/well.py +0 -0
  278. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/core/well_grid.py +0 -0
  279. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
  280. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/deck.py +0 -0
  281. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/disposal_locations.py +0 -0
  282. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/module_contexts.py +0 -0
  283. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
  284. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/protocol_context.py +0 -0
  285. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/robot_context.py +0 -0
  286. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_api/validation.py +0 -0
  287. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/__init__.py +0 -0
  288. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
  289. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
  290. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
  291. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/actions/actions.py +0 -0
  292. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
  293. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
  294. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/clients/sync_client.py +0 -0
  295. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/clients/transports.py +0 -0
  296. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/__init__.py +0 -0
  297. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -0
  298. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -0
  299. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +0 -0
  300. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -0
  301. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +0 -0
  302. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/air_gap_in_place.py +0 -0
  303. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/aspirate.py +0 -0
  304. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +0 -0
  305. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/blow_out.py +0 -0
  306. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +0 -0
  307. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
  308. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +0 -0
  309. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +0 -0
  310. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +0 -0
  311. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +0 -0
  312. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/command.py +0 -0
  313. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/command_unions.py +0 -0
  314. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/comment.py +0 -0
  315. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/configure_for_volume.py +0 -0
  316. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +0 -0
  317. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/custom.py +0 -0
  318. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/dispense.py +0 -0
  319. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/dispense_in_place.py +0 -0
  320. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/drop_tip.py +0 -0
  321. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +0 -0
  322. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/__init__.py +0 -0
  323. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/close_latch.py +0 -0
  324. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/common.py +0 -0
  325. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/empty.py +0 -0
  326. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/fill.py +0 -0
  327. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/open_latch.py +0 -0
  328. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/prepare_shuttle.py +0 -0
  329. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/retrieve.py +0 -0
  330. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +0 -0
  331. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/flex_stacker/store.py +0 -0
  332. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/generate_command_schema.py +0 -0
  333. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/get_next_tip.py +0 -0
  334. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/get_tip_presence.py +0 -0
  335. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
  336. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
  337. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +0 -0
  338. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +0 -0
  339. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +0 -0
  340. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +0 -0
  341. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +0 -0
  342. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +0 -0
  343. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +0 -0
  344. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/home.py +0 -0
  345. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/labware_handling_common.py +0 -0
  346. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/liquid_probe.py +0 -0
  347. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_labware.py +0 -0
  348. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_lid.py +0 -0
  349. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_lid_stack.py +0 -0
  350. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_liquid.py +0 -0
  351. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_liquid_class.py +0 -0
  352. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_module.py +0 -0
  353. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/load_pipette.py +0 -0
  354. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
  355. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +0 -0
  356. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +0 -0
  357. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/move_labware.py +0 -0
  358. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/move_relative.py +0 -0
  359. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +0 -0
  360. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +0 -0
  361. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +0 -0
  362. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/move_to_well.py +0 -0
  363. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/movement_common.py +0 -0
  364. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/pick_up_tip.py +0 -0
  365. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/pipetting_common.py +0 -0
  366. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +0 -0
  367. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/pressure_dispense.py +0 -0
  368. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/reload_labware.py +0 -0
  369. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/retract_axis.py +0 -0
  370. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -0
  371. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +0 -0
  372. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/common.py +0 -0
  373. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/move_axes_relative.py +0 -0
  374. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/move_axes_to.py +0 -0
  375. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/move_to.py +0 -0
  376. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +0 -0
  377. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/save_position.py +0 -0
  378. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/seal_pipette_to_tip.py +0 -0
  379. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/set_rail_lights.py +0 -0
  380. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/set_status_bar.py +0 -0
  381. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
  382. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +0 -0
  383. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +0 -0
  384. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +0 -0
  385. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
  386. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +0 -0
  387. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +0 -0
  388. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +0 -0
  389. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +0 -0
  390. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +0 -0
  391. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +0 -0
  392. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +0 -0
  393. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +0 -0
  394. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +0 -0
  395. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +0 -0
  396. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/touch_tip.py +0 -0
  397. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
  398. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +0 -0
  399. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +0 -0
  400. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +0 -0
  401. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
  402. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
  403. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +0 -0
  404. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +0 -0
  405. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +0 -0
  406. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/wait_for_duration.py +0 -0
  407. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/commands/wait_for_resume.py +0 -0
  408. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
  409. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/engine_support.py +0 -0
  410. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
  411. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/errors/__init__.py +0 -0
  412. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/errors/error_occurrence.py +0 -0
  413. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/errors/exceptions.py +0 -0
  414. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
  415. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/command_executor.py +0 -0
  416. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
  417. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
  418. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/equipment.py +0 -0
  419. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
  420. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -0
  421. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
  422. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
  423. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/labware_movement.py +0 -0
  424. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/movement.py +0 -0
  425. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
  426. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
  427. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
  428. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
  429. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
  430. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
  431. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/execution/tip_handler.py +0 -0
  432. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/labware_offset_standardization.py +0 -0
  433. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
  434. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/notes/notes.py +0 -0
  435. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/plugins.py +0 -0
  436. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/protocol_engine.py +0 -0
  437. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
  438. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +0 -0
  439. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/deck_data_provider.py +0 -0
  440. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
  441. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
  442. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/labware_data_provider.py +0 -0
  443. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/labware_validation.py +0 -0
  444. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
  445. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/module_data_provider.py +0 -0
  446. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
  447. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +0 -0
  448. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/slot_standardization.py +0 -0
  449. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/__init__.py +0 -0
  450. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
  451. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/_move_types.py +0 -0
  452. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/_well_math.py +0 -0
  453. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/addressable_areas.py +0 -0
  454. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/command_history.py +0 -0
  455. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/commands.py +0 -0
  456. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/config.py +0 -0
  457. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/files.py +0 -0
  458. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/fluid_stack.py +0 -0
  459. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/frustum_helpers.py +0 -0
  460. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/geometry.py +0 -0
  461. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/labware.py +0 -0
  462. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/liquid_classes.py +0 -0
  463. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/liquids.py +0 -0
  464. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/__init__.py +0 -0
  465. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
  466. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +0 -0
  467. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +0 -0
  468. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
  469. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
  470. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +0 -0
  471. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +0 -0
  472. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/modules.py +0 -0
  473. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/motion.py +0 -0
  474. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/pipettes.py +0 -0
  475. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/state.py +0 -0
  476. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/state_summary.py +0 -0
  477. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/tips.py +0 -0
  478. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/update_types.py +0 -0
  479. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/state/wells.py +0 -0
  480. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/__init__.py +0 -0
  481. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/automatic_tip_selection.py +0 -0
  482. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/command_annotations.py +0 -0
  483. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/deck_configuration.py +0 -0
  484. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/execution.py +0 -0
  485. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/hardware_passthrough.py +0 -0
  486. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/instrument.py +0 -0
  487. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/instrument_sensors.py +0 -0
  488. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/labware.py +0 -0
  489. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/labware_movement.py +0 -0
  490. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/labware_offset_location.py +0 -0
  491. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/labware_offset_vector.py +0 -0
  492. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/liquid.py +0 -0
  493. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/liquid_class.py +0 -0
  494. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/liquid_handling.py +0 -0
  495. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/liquid_level_detection.py +0 -0
  496. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/location.py +0 -0
  497. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/module.py +0 -0
  498. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/partial_tip_configuration.py +0 -0
  499. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/run_time_parameters.py +0 -0
  500. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/tip.py +0 -0
  501. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/util.py +0 -0
  502. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_engine/types/well_position.py +0 -0
  503. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/__init__.py +0 -0
  504. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/extract_labware_definitions.py +0 -0
  505. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/file_format_validator.py +0 -0
  506. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/file_hasher.py +0 -0
  507. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/file_identifier.py +0 -0
  508. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
  509. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/input_file.py +0 -0
  510. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
  511. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
  512. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/protocol_source.py +0 -0
  513. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
  514. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/__init__.py +0 -0
  515. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
  516. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/json_file_reader.py +0 -0
  517. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/json_translator.py +0 -0
  518. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/legacy_command_mapper.py +0 -0
  519. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
  520. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/protocol_runner.py +0 -0
  521. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/python_protocol_wrappers.py +0 -0
  522. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/run_orchestrator.py +0 -0
  523. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocol_runner/task_queue.py +0 -0
  524. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/__init__.py +0 -0
  525. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/__init__.py +0 -0
  526. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/common.py +0 -0
  527. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/mix.py +0 -0
  528. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
  529. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/transfers/common.py +0 -0
  530. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/transfers/transfer.py +0 -0
  531. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +0 -0
  532. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/__init__.py +0 -0
  533. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/constants.py +0 -0
  534. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/deck_type.py +0 -0
  535. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/definitions.py +0 -0
  536. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/instrument.py +0 -0
  537. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/labware_like.py +0 -0
  538. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
  539. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/types.py +0 -0
  540. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/api_support/util.py +0 -0
  541. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/bundle.py +0 -0
  542. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/duration/__init__.py +0 -0
  543. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/duration/errors.py +0 -0
  544. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/duration/estimator.py +0 -0
  545. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/__init__.py +0 -0
  546. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/dev_types.py +0 -0
  547. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/errors.py +0 -0
  548. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/execute.py +0 -0
  549. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
  550. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
  551. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
  552. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/execute_python.py +0 -0
  553. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
  554. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/execution/types.py +0 -0
  555. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/geometry/__init__.py +0 -0
  556. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
  557. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/geometry/planning.py +0 -0
  558. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/labware.py +0 -0
  559. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/models/__init__.py +0 -0
  560. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/models/json_protocol.py +0 -0
  561. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/__init__.py +0 -0
  562. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
  563. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
  564. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/exceptions.py +0 -0
  565. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
  566. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/types.py +0 -0
  567. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parameters/validation.py +0 -0
  568. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/parse.py +0 -0
  569. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/protocols/types.py +0 -0
  570. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/py.typed +0 -0
  571. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/resources/scripts/lpc21isp +0 -0
  572. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
  573. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/simulate.py +0 -0
  574. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/__init__.py +0 -0
  575. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/camera.py +0 -0
  576. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/log_control.py +0 -0
  577. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/nmcli.py +0 -0
  578. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/resin.py +0 -0
  579. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/smoothie_update.py +0 -0
  580. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/system/wifi.py +0 -0
  581. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/tools/__init__.py +0 -0
  582. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/tools/args_handler.py +0 -0
  583. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/tools/write_pipette_memory.py +0 -0
  584. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/types.py +0 -0
  585. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/__init__.py +0 -0
  586. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/async_helpers.py +0 -0
  587. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/broker.py +0 -0
  588. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/change_notifier.py +0 -0
  589. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/entrypoint_util.py +0 -0
  590. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/get_union_elements.py +0 -0
  591. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/helpers.py +0 -0
  592. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/linal.py +0 -0
  593. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons/util/performance_helpers.py +0 -0
  594. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons.egg-info/dependency_links.txt +0 -0
  595. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons.egg-info/entry_points.txt +0 -0
  596. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/src/opentrons.egg-info/not-zip-safe +0 -0
  597. {opentrons-8.4.0a4 → opentrons-8.4.0a5}/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.0a4
3
+ Version: 8.4.0a5
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.0a4
24
+ Requires-Dist: opentrons-shared-data==8.4.0a5
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.0a4; extra == "ot2-hardware"
38
+ Requires-Dist: opentrons-hardware==8.4.0a5; extra == "ot2-hardware"
39
39
  Provides-Extra: flex-hardware
40
- Requires-Dist: opentrons-hardware[FLEX]==8.4.0a4; extra == "flex-hardware"
40
+ Requires-Dist: opentrons-hardware[FLEX]==8.4.0a5; extra == "flex-hardware"
41
41
 
42
42
  .. _Full API Documentation: http://docs.opentrons.com
43
43
 
@@ -12,6 +12,7 @@ from typing import (
12
12
  Tuple,
13
13
  NamedTuple,
14
14
  Generator,
15
+ Literal,
15
16
  )
16
17
  from opentrons.types import (
17
18
  Location,
@@ -747,6 +748,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
747
748
  force_direct: bool,
748
749
  minimum_z_height: Optional[float],
749
750
  speed: Optional[float],
751
+ check_for_movement_conflicts: bool = True,
750
752
  ) -> None:
751
753
  if well_core is not None:
752
754
  if isinstance(location, (TrashBin, WasteChute)):
@@ -765,6 +767,14 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
765
767
  assert isinstance(well_location, LiquidHandlingWellLocation)
766
768
  if well_location.volumeOffset and well_location.volumeOffset != 0:
767
769
  raise ValueError("volume offset not supported with move_to")
770
+ if check_for_movement_conflicts:
771
+ pipette_movement_conflict.check_safe_for_pipette_movement(
772
+ engine_state=self._engine_client.state,
773
+ pipette_id=self._pipette_id,
774
+ labware_id=labware_id,
775
+ well_name=well_name,
776
+ well_location=well_location,
777
+ )
768
778
  self._engine_client.execute_command(
769
779
  cmd.MoveToWellParams(
770
780
  pipetteId=self._pipette_id,
@@ -1399,7 +1409,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1399
1409
  volume: float,
1400
1410
  source: Tuple[Location, WellCore],
1401
1411
  dest: List[Tuple[Location, WellCore]],
1402
- new_tip: TransferTipPolicyV2,
1412
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
1403
1413
  tip_racks: List[Tuple[Location, LabwareCore]],
1404
1414
  starting_tip: Optional[WellCore],
1405
1415
  trash_location: Union[Location, TrashBin, WasteChute],
@@ -1415,8 +1425,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1415
1425
  dest: List of destination wells, with each well represented as a tuple of
1416
1426
  types.Location and WellCore.
1417
1427
  types.Location is only necessary for saving the last accessed location.
1418
- new_tip: Whether the transfer should use a new tip 'once', 'never', 'always',
1419
- or 'per source'.
1428
+ new_tip: Whether the transfer should use a new tip 'once' or 'never'.
1420
1429
  tiprack_uri: The URI of the tiprack that the transfer settings are for.
1421
1430
  tip_drop_location: Location where the tip will be dropped (if appropriate).
1422
1431
 
@@ -1432,6 +1441,8 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1432
1441
  raise RuntimeError(
1433
1442
  "No tipracks found for pipette in order to perform transfer"
1434
1443
  )
1444
+ assert new_tip in [TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE]
1445
+
1435
1446
  tiprack_uri_for_transfer_props = tip_racks[0][1].get_uri()
1436
1447
  working_volume = min(
1437
1448
  self.get_max_volume(),
@@ -1559,7 +1570,6 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1559
1570
  )
1560
1571
  return tip_well
1561
1572
 
1562
- tip_used = False
1563
1573
  if new_tip != TransferTipPolicyV2.NEVER:
1564
1574
  last_tip_picked_up_from = _pick_up_tip()
1565
1575
 
@@ -1604,16 +1614,6 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1604
1614
  )
1605
1615
  )
1606
1616
 
1607
- if new_tip == TransferTipPolicyV2.ALWAYS and tip_used:
1608
- _drop_tip()
1609
- last_tip_picked_up_from = _pick_up_tip()
1610
- tip_contents = [
1611
- tx_comps_executor.LiquidAndAirGapPair(
1612
- liquid=0,
1613
- air_gap=0,
1614
- )
1615
- ]
1616
-
1617
1617
  use_single_dispense = False
1618
1618
  if total_aspirate_volume == volume and len(vol_dest_combo) == 1:
1619
1619
  # We are only doing a single transfer. Either because this is the last
@@ -1696,7 +1696,6 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1696
1696
  disposal_volume=disposal_vol,
1697
1697
  )
1698
1698
  is_first_step = False
1699
- tip_used = True
1700
1699
 
1701
1700
  if new_tip != TransferTipPolicyV2.NEVER:
1702
1701
  _drop_tip()
@@ -1728,7 +1727,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1728
1727
  volume: float,
1729
1728
  source: List[Tuple[Location, WellCore]],
1730
1729
  dest: Tuple[Location, WellCore],
1731
- new_tip: TransferTipPolicyV2,
1730
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
1732
1731
  tip_racks: List[Tuple[Location, LabwareCore]],
1733
1732
  starting_tip: Optional[WellCore],
1734
1733
  trash_location: Union[Location, TrashBin, WasteChute],
@@ -1738,7 +1737,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1738
1737
  raise RuntimeError(
1739
1738
  "No tipracks found for pipette in order to perform transfer"
1740
1739
  )
1741
-
1740
+ assert new_tip in [TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE]
1742
1741
  tiprack_uri_for_transfer_props = tip_racks[0][1].get_uri()
1743
1742
  try:
1744
1743
  transfer_props = liquid_class.get_for(
@@ -1841,7 +1840,6 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1841
1840
  if new_tip == TransferTipPolicyV2.ONCE:
1842
1841
  last_tip_picked_up_from = _pick_up_tip()
1843
1842
 
1844
- prev_src: Optional[Tuple[Location, WellCore]] = None
1845
1843
  tip_contents = [
1846
1844
  tx_comps_executor.LiquidAndAirGapPair(
1847
1845
  liquid=0,
@@ -1849,6 +1847,7 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1849
1847
  )
1850
1848
  ]
1851
1849
  next_step_volume, next_source = next(source_per_volume_step)
1850
+ is_first_step = True
1852
1851
  is_last_step = False
1853
1852
  while not is_last_step:
1854
1853
  total_dispense_volume = 0.0
@@ -1863,21 +1862,17 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1863
1862
  is_last_step = True
1864
1863
  break
1865
1864
 
1866
- if new_tip == TransferTipPolicyV2.ALWAYS:
1867
- if prev_src is not None:
1868
- _drop_tip()
1869
- last_tip_picked_up_from = _pick_up_tip()
1870
- tip_contents = [
1871
- tx_comps_executor.LiquidAndAirGapPair(
1872
- liquid=0,
1873
- air_gap=0,
1874
- )
1875
- ]
1876
- # TODO (spp, 2025-03-24): add LPD feature when 'per source' tip policy is added for consolidate_liquid
1877
- with self.lpd_for_transfer(enable=False):
1878
- for step_num, (step_volume, step_source) in enumerate(
1879
- vol_aspirate_combo
1880
- ):
1865
+ if (
1866
+ self.get_liquid_presence_detection()
1867
+ and new_tip != TransferTipPolicyV2.NEVER
1868
+ and is_first_step
1869
+ ):
1870
+ enable_lpd = True
1871
+ else:
1872
+ enable_lpd = False
1873
+
1874
+ for step_num, (step_volume, step_source) in enumerate(vol_aspirate_combo):
1875
+ with self.lpd_for_transfer(enable=enable_lpd):
1881
1876
  tip_contents = self.aspirate_liquid_class(
1882
1877
  volume=step_volume,
1883
1878
  source=step_source,
@@ -1888,6 +1883,8 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1888
1883
  total_dispense_volume if step_num == 0 else None
1889
1884
  ),
1890
1885
  )
1886
+ is_first_step = False
1887
+ enable_lpd = False
1891
1888
  tip_contents = self.dispense_liquid_class(
1892
1889
  volume=total_dispense_volume,
1893
1890
  dest=dest,
@@ -1902,7 +1899,6 @@ class InstrumentCore(AbstractInstrument[WellCore, LabwareCore]):
1902
1899
  ),
1903
1900
  trash_location=trash_location,
1904
1901
  )
1905
- prev_src = next_source
1906
1902
  if new_tip != TransferTipPolicyV2.NEVER:
1907
1903
  _drop_tip()
1908
1904
 
@@ -99,6 +99,14 @@ class TipState:
99
99
  ), "Last air gap volume doe not match the volume being removed"
100
100
  self.last_liquid_and_air_gap_in_tip.air_gap = 0
101
101
 
102
+ def delete_last_air_gap_and_liquid(self) -> None:
103
+ air_gap_in_tip = self.last_liquid_and_air_gap_in_tip.air_gap
104
+ liquid_in_tip = self.last_liquid_and_air_gap_in_tip.liquid
105
+ if air_gap_in_tip:
106
+ self.delete_air_gap(air_gap_in_tip)
107
+ if liquid_in_tip:
108
+ self.delete_liquid(volume=liquid_in_tip)
109
+
102
110
 
103
111
  class TransferType(Enum):
104
112
  ONE_TO_ONE = "one_to_one"
@@ -525,6 +533,9 @@ class TransferComponentsExecutor:
525
533
  if isinstance(trash_location, Location)
526
534
  else None
527
535
  )
536
+ # A non-multi-dispense blowout will only have air and maybe droplets in the tip
537
+ # since we only blowout after dispensing the full tip contents.
538
+ # So delete the air gap from tip state
528
539
  last_air_gap = self._tip_state.last_liquid_and_air_gap_in_tip.air_gap
529
540
  self._tip_state.delete_air_gap(last_air_gap)
530
541
  self._tip_state.ready_to_aspirate = False
@@ -608,6 +619,10 @@ class TransferComponentsExecutor:
608
619
  well_core=None,
609
620
  in_place=True,
610
621
  )
622
+ # A blowout will remove all air gap and liquid (disposal volume) from the tip
623
+ # so delete them from tip state (although practically, there will not be
624
+ # any air gaps in the tip before blowing out in the destination well)
625
+ self._tip_state.delete_last_air_gap_and_liquid()
611
626
  self._tip_state.ready_to_aspirate = False
612
627
 
613
628
  # A retract will perform total of two air gaps if we need to blow out in source or trash:
@@ -695,8 +710,9 @@ class TransferComponentsExecutor:
695
710
  if isinstance(trash_location, Location)
696
711
  else None
697
712
  )
698
- last_air_gap = self._tip_state.last_liquid_and_air_gap_in_tip.air_gap
699
- self._tip_state.delete_air_gap(last_air_gap)
713
+ # A blowout will remove all air gap and liquid (disposal volume) from the tip
714
+ # so delete them from tip state
715
+ self._tip_state.delete_last_air_gap_and_liquid()
700
716
  self._tip_state.ready_to_aspirate = False
701
717
 
702
718
  # Do touch tip and air gap again after blowing out into source well or trash
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from abc import abstractmethod, ABC
6
- from typing import Any, Generic, Optional, TypeVar, Union, List, Tuple
6
+ from typing import Any, Generic, Optional, TypeVar, Union, List, Tuple, Literal
7
7
 
8
8
  from opentrons import types
9
9
  from opentrons.hardware_control.dev_types import PipetteDict
@@ -190,6 +190,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
190
190
  force_direct: bool,
191
191
  minimum_z_height: Optional[float],
192
192
  speed: Optional[float],
193
+ check_for_movement_conflicts: bool,
193
194
  ) -> None:
194
195
  ...
195
196
 
@@ -381,7 +382,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
381
382
  volume: float,
382
383
  source: Tuple[types.Location, WellCoreType],
383
384
  dest: List[Tuple[types.Location, WellCoreType]],
384
- new_tip: TransferTipPolicyV2,
385
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
385
386
  tip_racks: List[Tuple[types.Location, LabwareCoreType]],
386
387
  starting_tip: Optional[WellCoreType],
387
388
  trash_location: Union[types.Location, TrashBin, WasteChute],
@@ -400,7 +401,7 @@ class AbstractInstrument(ABC, Generic[WellCoreType, LabwareCoreType]):
400
401
  volume: float,
401
402
  source: List[Tuple[types.Location, WellCoreType]],
402
403
  dest: Tuple[types.Location, WellCoreType],
403
- new_tip: TransferTipPolicyV2,
404
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
404
405
  tip_racks: List[Tuple[types.Location, LabwareCoreType]],
405
406
  starting_tip: Optional[WellCoreType],
406
407
  trash_location: Union[types.Location, TrashBin, WasteChute],
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, Optional, Union, List, Tuple
4
+ from typing import TYPE_CHECKING, Optional, Union, List, Tuple, Literal
5
5
 
6
6
  from opentrons import types
7
7
  from opentrons.hardware_control import CriticalPoint
@@ -367,6 +367,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
367
367
  force_direct: bool = False,
368
368
  minimum_z_height: Optional[float] = None,
369
369
  speed: Optional[float] = None,
370
+ check_for_movement_conflicts: bool = False,
370
371
  ) -> None:
371
372
  """Move the instrument.
372
373
 
@@ -376,6 +377,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
376
377
  force_direct: Force a direct movement instead of an arc.
377
378
  minimum_z_height: Set a minimum travel height for a movement arc.
378
379
  speed: Override the travel speed in mm/s.
380
+ check_for_movement_conflicts: Not used in legacy implementation
379
381
 
380
382
  Raises:
381
383
  LabwareHeightError: An item on the deck is taller than
@@ -619,7 +621,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
619
621
  volume: float,
620
622
  source: Tuple[types.Location, LegacyWellCore],
621
623
  dest: List[Tuple[types.Location, LegacyWellCore]],
622
- new_tip: TransferTipPolicyV2,
624
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
623
625
  tip_racks: List[Tuple[types.Location, LegacyLabwareCore]],
624
626
  starting_tip: Optional[LegacyWellCore],
625
627
  trash_location: Union[types.Location, TrashBin, WasteChute],
@@ -634,7 +636,7 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore, LegacyLabwareCore]
634
636
  volume: float,
635
637
  source: List[Tuple[types.Location, LegacyWellCore]],
636
638
  dest: Tuple[types.Location, LegacyWellCore],
637
- new_tip: TransferTipPolicyV2,
639
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
638
640
  tip_racks: List[Tuple[types.Location, LegacyLabwareCore]],
639
641
  starting_tip: Optional[LegacyWellCore],
640
642
  trash_location: Union[types.Location, TrashBin, WasteChute],
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- from typing import TYPE_CHECKING, Optional, Union, List, Tuple
4
+ from typing import TYPE_CHECKING, Optional, Union, List, Tuple, Literal
5
5
 
6
6
  from opentrons import types
7
7
  from opentrons.hardware_control.dev_types import PipetteDict
@@ -325,6 +325,7 @@ class LegacyInstrumentCoreSimulator(
325
325
  force_direct: bool = False,
326
326
  minimum_z_height: Optional[float] = None,
327
327
  speed: Optional[float] = None,
328
+ check_for_movement_conflicts: bool = False, # Not used in this implementation
328
329
  ) -> None:
329
330
  """Simulation of only the motion planning portion of move_to."""
330
331
  if isinstance(location, (TrashBin, WasteChute)):
@@ -534,7 +535,7 @@ class LegacyInstrumentCoreSimulator(
534
535
  volume: float,
535
536
  source: Tuple[types.Location, LegacyWellCore],
536
537
  dest: List[Tuple[types.Location, LegacyWellCore]],
537
- new_tip: TransferTipPolicyV2,
538
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
538
539
  tip_racks: List[Tuple[types.Location, LegacyLabwareCore]],
539
540
  starting_tip: Optional[LegacyWellCore],
540
541
  trash_location: Union[types.Location, TrashBin, WasteChute],
@@ -549,7 +550,7 @@ class LegacyInstrumentCoreSimulator(
549
550
  volume: float,
550
551
  source: List[Tuple[types.Location, LegacyWellCore]],
551
552
  dest: Tuple[types.Location, LegacyWellCore],
552
- new_tip: TransferTipPolicyV2,
553
+ new_tip: Literal[TransferTipPolicyV2.NEVER, TransferTipPolicyV2.ONCE],
553
554
  tip_racks: List[Tuple[types.Location, LegacyLabwareCore]],
554
555
  starting_tip: Optional[LegacyWellCore],
555
556
  trash_location: Union[types.Location, TrashBin, WasteChute],
@@ -1529,7 +1529,7 @@ class InstrumentContext(publisher.CommandPublisher):
1529
1529
  """Move a particular type of liquid from one well or group of wells to another.
1530
1530
 
1531
1531
  :param liquid_class: The type of liquid to move. You must specify the liquid class,
1532
- even if you have used :py:meth:`.load_liquid` to indicate what liquid the
1532
+ even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
1533
1533
  source contains.
1534
1534
  :type liquid_class: :py:class:`.LiquidClass`
1535
1535
 
@@ -1552,6 +1552,8 @@ class InstrumentContext(publisher.CommandPublisher):
1552
1552
  tips. Depending on the liquid class, the pipette may also blow out liquid here.
1553
1553
  :param return_tip: Whether to drop used tips in their original locations
1554
1554
  in the tip rack, instead of the trash.
1555
+
1556
+ :meta private:
1555
1557
  """
1556
1558
  if volume == 0.0:
1557
1559
  _log.info(
@@ -1634,7 +1636,7 @@ class InstrumentContext(publisher.CommandPublisher):
1634
1636
  Distribute a particular type of liquid from one well to a group of wells.
1635
1637
 
1636
1638
  :param liquid_class: The type of liquid to move. You must specify the liquid class,
1637
- even if you have used :py:meth:`.load_liquid` to indicate what liquid the
1639
+ even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
1638
1640
  source contains.
1639
1641
  :type liquid_class: :py:class:`.LiquidClass`
1640
1642
 
@@ -1645,8 +1647,7 @@ class InstrumentContext(publisher.CommandPublisher):
1645
1647
  :param new_tip: When to pick up and drop tips during the command.
1646
1648
  Defaults to ``"once"``.
1647
1649
 
1648
- - ``"once"`` or ``"per source"``: Use one tip for the entire command.
1649
- - ``"always"``: Use a new tip for each set of aspirate and dispense steps.
1650
+ - ``"once"``: Use one tip for the entire command.
1650
1651
  - ``"never"``: Do not pick up or drop tips at all.
1651
1652
 
1652
1653
  See :ref:`param-tip-handling` for details.
@@ -1655,6 +1656,8 @@ class InstrumentContext(publisher.CommandPublisher):
1655
1656
  tips. Depending on the liquid class, the pipette may also blow out liquid here.
1656
1657
  :param return_tip: Whether to drop used tips in their original locations
1657
1658
  in the tip rack, instead of the trash.
1659
+
1660
+ :meta private:
1658
1661
  """
1659
1662
  if volume == 0.0:
1660
1663
  _log.info(
@@ -1681,9 +1684,14 @@ class InstrumentContext(publisher.CommandPublisher):
1681
1684
  f"Source should be a single well (or resolve to a single transfer for multi-channel) "
1682
1685
  f"but received {transfer_args.sources_list}."
1683
1686
  )
1684
- if transfer_args.tip_policy == TransferTipPolicyV2.PER_SOURCE:
1685
- raise RuntimeError(
1686
- 'Tip transfer policy "per source" incompatible with distribute.'
1687
+ if transfer_args.tip_policy not in [
1688
+ TransferTipPolicyV2.ONCE,
1689
+ TransferTipPolicyV2.NEVER,
1690
+ ]:
1691
+ raise ValueError(
1692
+ f"Incompatible `new_tip` value of {new_tip}."
1693
+ f" `distribute_with_liquid_class()` only supports `new_tip` values of"
1694
+ f" 'once' and 'never'."
1687
1695
  )
1688
1696
 
1689
1697
  verified_source = transfer_args.sources_list[0]
@@ -1708,7 +1716,7 @@ class InstrumentContext(publisher.CommandPublisher):
1708
1716
  (types.Location(types.Point(), labware=well), well._core)
1709
1717
  for well in transfer_args.destinations_list
1710
1718
  ],
1711
- new_tip=transfer_args.tip_policy,
1719
+ new_tip=transfer_args.tip_policy, # type: ignore[arg-type]
1712
1720
  tip_racks=[
1713
1721
  (types.Location(types.Point(), labware=rack), rack._core)
1714
1722
  for rack in transfer_args.tip_racks
@@ -1741,7 +1749,7 @@ class InstrumentContext(publisher.CommandPublisher):
1741
1749
  Consolidate a particular type of liquid from a group of wells to one well.
1742
1750
 
1743
1751
  :param liquid_class: The type of liquid to move. You must specify the liquid class,
1744
- even if you have used :py:meth:`.load_liquid` to indicate what liquid the
1752
+ even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
1745
1753
  source contains.
1746
1754
  :type liquid_class: :py:class:`.LiquidClass`
1747
1755
 
@@ -1753,8 +1761,6 @@ class InstrumentContext(publisher.CommandPublisher):
1753
1761
  Defaults to ``"once"``.
1754
1762
 
1755
1763
  - ``"once"``: Use one tip for the entire command.
1756
- - ``"always"``: Use a new tip for each set of aspirate and dispense steps.
1757
- - ``"per source"``: Not available when consolidating.
1758
1764
  - ``"never"``: Do not pick up or drop tips at all.
1759
1765
 
1760
1766
  See :ref:`param-tip-handling` for details.
@@ -1763,6 +1769,8 @@ class InstrumentContext(publisher.CommandPublisher):
1763
1769
  tips. Depending on the liquid class, the pipette may also blow out liquid here.
1764
1770
  :param return_tip: Whether to drop used tips in their original locations
1765
1771
  in the tip rack, instead of the trash.
1772
+
1773
+ :meta private:
1766
1774
  """
1767
1775
  if volume == 0.0:
1768
1776
  _log.info(
@@ -1789,9 +1797,14 @@ class InstrumentContext(publisher.CommandPublisher):
1789
1797
  f"Destination should be a single well (or resolve to a single transfer for multi-channel) "
1790
1798
  f"but received {transfer_args.destinations_list}."
1791
1799
  )
1792
- if transfer_args.tip_policy == TransferTipPolicyV2.PER_SOURCE:
1793
- raise RuntimeError(
1794
- 'Tip transfer policy "per source" incompatible with consolidate.'
1800
+ if transfer_args.tip_policy not in [
1801
+ TransferTipPolicyV2.ONCE,
1802
+ TransferTipPolicyV2.NEVER,
1803
+ ]:
1804
+ raise ValueError(
1805
+ f"Incompatible `new_tip` value of {new_tip}."
1806
+ f" `consolidate_with_liquid_class()` only supports `new_tip` values of"
1807
+ f" 'once' and 'never'."
1795
1808
  )
1796
1809
 
1797
1810
  verified_dest = transfer_args.destinations_list[0]
@@ -1816,7 +1829,7 @@ class InstrumentContext(publisher.CommandPublisher):
1816
1829
  types.Location(types.Point(), labware=verified_dest),
1817
1830
  verified_dest._core,
1818
1831
  ),
1819
- new_tip=transfer_args.tip_policy,
1832
+ new_tip=transfer_args.tip_policy, # type: ignore[arg-type]
1820
1833
  tip_racks=[
1821
1834
  (types.Location(types.Point(), labware=rack), rack._core)
1822
1835
  for rack in transfer_args.tip_racks
@@ -1907,6 +1920,7 @@ class InstrumentContext(publisher.CommandPublisher):
1907
1920
  force_direct=force_direct,
1908
1921
  minimum_z_height=minimum_z_height,
1909
1922
  speed=speed,
1923
+ check_for_movement_conflicts=False,
1910
1924
  )
1911
1925
  else:
1912
1926
  if publish:
@@ -1925,6 +1939,7 @@ class InstrumentContext(publisher.CommandPublisher):
1925
1939
  force_direct=force_direct,
1926
1940
  minimum_z_height=minimum_z_height,
1927
1941
  speed=speed,
1942
+ check_for_movement_conflicts=False,
1928
1943
  )
1929
1944
 
1930
1945
  return self
@@ -263,15 +263,15 @@ class Well:
263
263
 
264
264
  @requires_version(2, 21)
265
265
  def meniscus(
266
- self, target: Literal["start", "end", "dynamic"], z: float = 0.0
266
+ self, z: float = 0.0, target: Literal["start", "end", "dynamic"] = "end"
267
267
  ) -> Location:
268
268
  """
269
269
  :param z: An offset on the z-axis, in mm. Positive offsets are higher and
270
270
  negative offsets are lower.
271
- :param target: The relative position inside the well to target when performing a liquid handling operation.
272
- :return: A :py:class:`~opentrons.types.Location` that indicates location is meniscus and that holds the ``z`` offset in its point.z field.
271
+ :param target: The relative position of the liquid meniscus inside the well to target when performing a liquid handling operation.
272
+
273
+ :return: A :py:class:`~opentrons.types.Location` corresponding to the liquid meniscus, plus a target position and ``z`` offset as specified.
273
274
 
274
- :meta private:
275
275
  """
276
276
  return Location(
277
277
  point=Point(x=0, y=0, z=z),
@@ -326,9 +326,9 @@ class Well:
326
326
  :param Liquid liquid: The liquid to load into the well.
327
327
  :param float volume: The volume of liquid to load, in µL.
328
328
 
329
- .. TODO: flag as deprecated in 2.22 docs
330
- In API version 2.22 and later, use :py:meth:`~Labware.load_liquid`, :py:meth:`~Labware.load_liquid_by_well`,
331
- or :py:meth:`~Labware.load_empty` to load liquid into a well.
329
+ .. deprecated:: 2.22
330
+ Use :py:meth:`.Labware.load_liquid`, :py:meth:`.Labware.load_liquid_by_well`, or :py:meth:`.Labware.load_empty` instead.
331
+
332
332
  """
333
333
  self._core.load_liquid(
334
334
  liquid=liquid,
@@ -1270,22 +1270,15 @@ class Labware:
1270
1270
  ) -> None:
1271
1271
  """Mark several wells as containing the same amount of liquid.
1272
1272
 
1273
- This method should be called at the beginning of a protocol, soon after loading the labware and before
1274
- liquid handling operations begin. It is a base of information for liquid tracking functionality. If a well in a labware
1275
- has not been named in a call to :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1276
- :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked.
1277
-
1278
- For example, to load 10µL of a liquid named ``water`` (defined with :py:meth:`~ProtocolContext.define_liquid`)
1279
- into all the wells of a labware, you could call ``labware.load_liquid(labware.wells(), 10, water)``.
1280
-
1281
- If you want to load different volumes of liquid into different wells, use :py:meth:`~Labware.load_liquid_by_well`.
1282
-
1283
- If you want to mark the well as containing no liquid, use :py:meth:`~Labware.load_empty`.
1273
+ This method should be called at the beginning of a protocol, soon after loading labware and before
1274
+ liquid handling operations begin. Loading liquids is required for liquid tracking functionality. If a well
1275
+ hasn't been assigned a starting volume with :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1276
+ :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked throughout the protocol.
1284
1277
 
1285
1278
  :param wells: The wells to load the liquid into.
1286
- :type wells: List of well names or list of Well objects, for instance from :py:meth:`~Labware.wells`.
1279
+ :type wells: List of string well names or list of :py:class:`.Well` objects (e.g., from :py:meth:`~Labware.wells`).
1287
1280
 
1288
- :param volume: The volume of liquid to load into each well, in 10µL.
1281
+ :param volume: The volume of liquid to load into each well.
1289
1282
  :type volume: float
1290
1283
 
1291
1284
  :param liquid: The liquid to load into each well, previously defined by :py:meth:`~ProtocolContext.define_liquid`
@@ -1321,18 +1314,9 @@ class Labware:
1321
1314
  ) -> None:
1322
1315
  """Mark several wells as containing unique volumes of liquid.
1323
1316
 
1324
- This method should be called at the beginning of a protocol, soon after loading the labware and before
1325
- liquid handling operations begin. It is a base of information for liquid tracking functionality. If a well in a labware
1326
- has not been named in a call to :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1327
- :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked.
1328
-
1329
- For example, to load a decreasing amount of of a liquid named ``water`` (defined with :py:meth:`~ProtocolContext.define_liquid`)
1330
- into each successive well of a row, you could call
1331
- ``labware.load_liquid_by_well({'A1': 1000, 'A2': 950, 'A3': 900, ..., 'A12': 600}, water)``
1332
-
1333
- If you want to load the same volume of a liquid into multiple wells, it is often easier to use :py:meth:`~Labware.load_liquid`.
1334
-
1335
- If you want to mark the well as containing no liquid, use :py:meth:`~Labware.load_empty`.
1317
+ This method should be called at the beginning of a protocol, soon after loading labware and before
1318
+ liquid handling begins. Loading liquids is required for liquid tracking functionality. If a well hasn't been assigned a starting volume with :py:meth:`~Labware.load_empty`, :py:meth:`~Labware.load_liquid`, or
1319
+ :py:meth:`~Labware.load_liquid_by_well`, the volume it contains is unknown and the well's liquid will not be tracked throughout the protocol.
1336
1320
 
1337
1321
  :param volumes: A dictionary of well names (or :py:class:`Well` objects, for instance from ``labware['A1']``)
1338
1322
  :type wells: Dict[Union[str, Well], float]
@@ -1368,12 +1352,9 @@ class Labware:
1368
1352
  def load_empty(self, wells: Sequence[Union[Well, str]]) -> None:
1369
1353
  """Mark several wells as empty.
1370
1354
 
1371
- This method should be called at the beginning of a protocol, soon after loading the labware and before liquid handling
1372
- operations begin. It is a base of information for liquid tracking functionality. If a well in a labware has not been named
1373
- in a call to :py:meth:`Labware.load_empty`, :py:meth:`Labware.load_liquid`, or :py:meth:`Labware.load_liquid_by_well`, the
1374
- volume it contains is unknown and the well's liquid will not be tracked.
1375
-
1376
- For instance, to mark all wells in the labware as empty, you can call ``labware.load_empty(labware.wells())``.
1355
+ This method should be called at the beginning of a protocol, after loading the labware and before liquid handling
1356
+ begins. Loading liquids is required for liquid tracking functionality. If a well in a labware hasn't been assigned a starting volume with :py:meth:`Labware.load_empty`, :py:meth:`Labware.load_liquid`, or :py:meth:`Labware.load_liquid_by_well`, the
1357
+ volume it contains is unknown and the well's liquid will not be tracked throughout the protocol.
1377
1358
 
1378
1359
  :param wells: The list of wells to mark empty. To mark all wells as empty, pass ``labware.wells()``. You can also specify
1379
1360
  wells by their names (for instance, ``labware.load_empty(['A1', 'A2'])``).