opentrons 8.2.0a4__tar.gz → 8.3.0a0__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 (526) hide show
  1. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/PKG-INFO +4 -4
  2. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/defaults_ot3.py +1 -0
  3. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/flex_protocol.py +13 -1
  4. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/ot3controller.py +36 -4
  5. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/ot3simulator.py +8 -1
  6. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/ot3utils.py +40 -2
  7. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/dev_types.py +2 -0
  8. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot2/pipette.py +6 -1
  9. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot3/pipette.py +10 -0
  10. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/ot3api.py +26 -1
  11. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/instrument.py +15 -0
  12. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/instrument.py +4 -0
  13. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +3 -0
  14. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +3 -0
  15. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/instrument_context.py +13 -1
  16. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/validation.py +1 -0
  17. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/liquid_probe.py +8 -0
  18. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +14 -0
  19. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/pipettes.py +9 -0
  20. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons.egg-info/PKG-INFO +4 -4
  21. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons.egg-info/requires.txt +3 -3
  22. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/MANIFEST.in +0 -0
  23. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/README.rst +0 -0
  24. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/setup.cfg +0 -0
  25. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/setup.py +0 -0
  26. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/__init__.py +0 -0
  27. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/_version.py +0 -0
  28. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/__init__.py +0 -0
  29. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/deck_configuration.py +0 -0
  30. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
  31. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/file_operators.py +0 -0
  32. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/helpers.py +0 -0
  33. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
  34. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
  35. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +0 -0
  36. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
  37. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/models/defaults.py +0 -0
  38. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/models/v1.py +0 -0
  39. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
  40. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot2/tip_length.py +0 -0
  41. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
  42. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
  43. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
  44. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
  45. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/models/defaults.py +0 -0
  46. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/models/v1.py +0 -0
  47. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
  48. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
  49. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/calibration_storage/types.py +0 -0
  50. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/cli/__init__.py +0 -0
  51. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/cli/__main__.py +0 -0
  52. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/cli/analyze.py +0 -0
  53. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/__init__.py +0 -0
  54. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/advanced_settings.py +0 -0
  55. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/defaults_ot2.py +0 -0
  56. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/feature_flags.py +0 -0
  57. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/gripper_config.py +0 -0
  58. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/reset.py +0 -0
  59. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/robot_configs.py +0 -0
  60. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/config/types.py +0 -0
  61. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/__init__.py +0 -0
  62. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
  63. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
  64. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
  65. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
  66. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
  67. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
  68. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/asyncio/__init__.py +0 -0
  69. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/asyncio/communication/__init__.py +0 -0
  70. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/asyncio/communication/async_serial.py +0 -0
  71. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/asyncio/communication/errors.py +0 -0
  72. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/asyncio/communication/serial_connection.py +0 -0
  73. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/command_builder.py +0 -0
  74. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
  75. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
  76. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/heater_shaker/driver.py +0 -0
  77. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
  78. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
  79. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
  80. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/mag_deck/driver.py +0 -0
  81. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
  82. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
  83. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
  84. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
  85. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
  86. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
  87. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
  88. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
  89. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
  90. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/serial_communication.py +0 -0
  91. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
  92. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
  93. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
  94. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
  95. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
  96. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
  97. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
  98. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
  99. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
  100. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
  101. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/temp_deck/driver.py +0 -0
  102. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
  103. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
  104. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
  105. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/thermocycler/driver.py +0 -0
  106. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
  107. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/types.py +0 -0
  108. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/drivers/utils.py +0 -0
  109. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/execute.py +0 -0
  110. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/__init__.py +0 -0
  111. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/__main__.py +0 -0
  112. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/adapters.py +0 -0
  113. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/api.py +0 -0
  114. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/__init__.py +0 -0
  115. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/controller.py +0 -0
  116. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/errors.py +0 -0
  117. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
  118. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/simulator.py +0 -0
  119. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
  120. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/subsystem_manager.py +0 -0
  121. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
  122. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/backends/types.py +0 -0
  123. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/constants.py +0 -0
  124. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
  125. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
  126. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/app.py +0 -0
  127. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
  128. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/heater_shaker.py +0 -0
  129. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
  130. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
  131. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/module_server/client.py +0 -0
  132. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
  133. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
  134. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/module_server/server.py +0 -0
  135. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/parser.py +0 -0
  136. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
  137. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
  138. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
  139. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
  140. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
  141. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
  142. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/settings.py +0 -0
  143. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
  144. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
  145. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
  146. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
  147. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/types.py +0 -0
  148. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/emulation/util.py +0 -0
  149. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/errors.py +0 -0
  150. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/execution_manager.py +0 -0
  151. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
  152. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
  153. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
  154. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +0 -0
  155. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +0 -0
  156. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
  157. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot3/gripper.py +0 -0
  158. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
  159. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
  160. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +0 -0
  161. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/module_control.py +0 -0
  162. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/__init__.py +0 -0
  163. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/absorbance_reader.py +0 -0
  164. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/errors.py +0 -0
  165. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/heater_shaker.py +0 -0
  166. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
  167. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/magdeck.py +0 -0
  168. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/mod_abc.py +0 -0
  169. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
  170. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
  171. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/tempdeck.py +0 -0
  172. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/thermocycler.py +0 -0
  173. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/types.py +0 -0
  174. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/update.py +0 -0
  175. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/modules/utils.py +0 -0
  176. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/motion_utilities.py +0 -0
  177. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/nozzle_manager.py +0 -0
  178. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/ot3_calibration.py +0 -0
  179. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/pause_manager.py +0 -0
  180. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/poller.py +0 -0
  181. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
  182. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
  183. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
  184. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
  185. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
  186. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
  187. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
  188. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
  189. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
  190. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/gripper_controller.py +0 -0
  191. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/hardware_manager.py +0 -0
  192. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
  193. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
  194. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/liquid_handler.py +0 -0
  195. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
  196. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/motion_controller.py +0 -0
  197. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
  198. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
  199. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
  200. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/protocols/types.py +0 -0
  201. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/robot_calibration.py +0 -0
  202. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
  203. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
  204. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/scripts/repl.py +0 -0
  205. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
  206. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/simulator_setup.py +0 -0
  207. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/thread_manager.py +0 -0
  208. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
  209. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/types.py +0 -0
  210. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/hardware_control/util.py +0 -0
  211. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_broker.py +0 -0
  212. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/__init__.py +0 -0
  213. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/commands.py +0 -0
  214. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/helpers.py +0 -0
  215. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/module_commands.py +0 -0
  216. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
  217. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/publisher.py +0 -0
  218. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/legacy_commands/types.py +0 -0
  219. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/motion_planning/__init__.py +0 -0
  220. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
  221. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/motion_planning/deck_conflict.py +0 -0
  222. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/motion_planning/errors.py +0 -0
  223. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/motion_planning/types.py +0 -0
  224. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/motion_planning/waypoints.py +0 -0
  225. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/ordered_set.py +0 -0
  226. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/__init__.py +0 -0
  227. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/_liquid.py +0 -0
  228. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
  229. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/_parameter_context.py +0 -0
  230. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/_parameters.py +0 -0
  231. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/_types.py +0 -0
  232. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/config.py +0 -0
  233. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/__init__.py +0 -0
  234. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/common.py +0 -0
  235. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/core_map.py +0 -0
  236. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
  237. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/deck_conflict.py +0 -0
  238. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
  239. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/labware.py +0 -0
  240. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/load_labware_params.py +0 -0
  241. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/module_core.py +0 -0
  242. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
  243. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +0 -0
  244. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
  245. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/protocol.py +0 -0
  246. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/stringify.py +0 -0
  247. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/engine/well.py +0 -0
  248. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/labware.py +0 -0
  249. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
  250. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
  251. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +0 -0
  252. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +0 -0
  253. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
  254. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +0 -0
  255. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +0 -0
  256. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/load_info.py +0 -0
  257. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/module_geometry.py +0 -0
  258. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy/well_geometry.py +0 -0
  259. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
  260. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
  261. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/module.py +0 -0
  262. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/protocol.py +0 -0
  263. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/well.py +0 -0
  264. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/core/well_grid.py +0 -0
  265. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
  266. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/deck.py +0 -0
  267. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/disposal_locations.py +0 -0
  268. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/labware.py +0 -0
  269. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/module_contexts.py +0 -0
  270. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
  271. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/protocol_context.py +0 -0
  272. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_api/robot_context.py +0 -0
  273. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/__init__.py +0 -0
  274. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
  275. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
  276. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
  277. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/actions/actions.py +0 -0
  278. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
  279. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
  280. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/clients/sync_client.py +0 -0
  281. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/clients/transports.py +0 -0
  282. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/__init__.py +0 -0
  283. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -0
  284. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -0
  285. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +0 -0
  286. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -0
  287. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +0 -0
  288. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/aspirate.py +0 -0
  289. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +0 -0
  290. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/blow_out.py +0 -0
  291. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +0 -0
  292. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
  293. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +0 -0
  294. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +0 -0
  295. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +0 -0
  296. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +0 -0
  297. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/command.py +0 -0
  298. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/command_unions.py +0 -0
  299. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/comment.py +0 -0
  300. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/configure_for_volume.py +0 -0
  301. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +0 -0
  302. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/custom.py +0 -0
  303. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/dispense.py +0 -0
  304. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/dispense_in_place.py +0 -0
  305. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/drop_tip.py +0 -0
  306. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +0 -0
  307. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/generate_command_schema.py +0 -0
  308. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/get_tip_presence.py +0 -0
  309. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
  310. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
  311. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +0 -0
  312. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +0 -0
  313. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +0 -0
  314. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +0 -0
  315. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +0 -0
  316. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +0 -0
  317. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +0 -0
  318. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/home.py +0 -0
  319. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/load_labware.py +0 -0
  320. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/load_liquid.py +0 -0
  321. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/load_module.py +0 -0
  322. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/load_pipette.py +0 -0
  323. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
  324. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +0 -0
  325. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +0 -0
  326. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/move_labware.py +0 -0
  327. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/move_relative.py +0 -0
  328. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +0 -0
  329. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +0 -0
  330. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +0 -0
  331. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/move_to_well.py +0 -0
  332. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/pick_up_tip.py +0 -0
  333. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/pipetting_common.py +0 -0
  334. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +0 -0
  335. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/reload_labware.py +0 -0
  336. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/retract_axis.py +0 -0
  337. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -0
  338. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/save_position.py +0 -0
  339. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/set_rail_lights.py +0 -0
  340. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/set_status_bar.py +0 -0
  341. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
  342. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +0 -0
  343. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +0 -0
  344. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +0 -0
  345. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
  346. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +0 -0
  347. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +0 -0
  348. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +0 -0
  349. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +0 -0
  350. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +0 -0
  351. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +0 -0
  352. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +0 -0
  353. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +0 -0
  354. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +0 -0
  355. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +0 -0
  356. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/touch_tip.py +0 -0
  357. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
  358. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +0 -0
  359. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +0 -0
  360. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +0 -0
  361. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
  362. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
  363. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +0 -0
  364. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +0 -0
  365. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/wait_for_duration.py +0 -0
  366. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/commands/wait_for_resume.py +0 -0
  367. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
  368. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/engine_support.py +0 -0
  369. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
  370. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/errors/__init__.py +0 -0
  371. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/errors/error_occurrence.py +0 -0
  372. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/errors/exceptions.py +0 -0
  373. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
  374. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/command_executor.py +0 -0
  375. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
  376. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
  377. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/equipment.py +0 -0
  378. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
  379. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -0
  380. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
  381. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
  382. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/labware_movement.py +0 -0
  383. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/movement.py +0 -0
  384. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/pipetting.py +0 -0
  385. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
  386. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
  387. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
  388. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
  389. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
  390. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
  391. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/execution/tip_handler.py +0 -0
  392. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
  393. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/notes/notes.py +0 -0
  394. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/plugins.py +0 -0
  395. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/protocol_engine.py +0 -0
  396. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
  397. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +0 -0
  398. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/deck_data_provider.py +0 -0
  399. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
  400. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
  401. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/labware_data_provider.py +0 -0
  402. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/labware_validation.py +0 -0
  403. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
  404. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/module_data_provider.py +0 -0
  405. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
  406. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/slot_standardization.py +0 -0
  407. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/__init__.py +0 -0
  408. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
  409. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/_move_types.py +0 -0
  410. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/addressable_areas.py +0 -0
  411. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/command_history.py +0 -0
  412. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/commands.py +0 -0
  413. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/config.py +0 -0
  414. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/files.py +0 -0
  415. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/frustum_helpers.py +0 -0
  416. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/geometry.py +0 -0
  417. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/labware.py +0 -0
  418. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/liquids.py +0 -0
  419. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/__init__.py +0 -0
  420. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
  421. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +0 -0
  422. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
  423. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
  424. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +0 -0
  425. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +0 -0
  426. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/modules.py +0 -0
  427. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/motion.py +0 -0
  428. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/state.py +0 -0
  429. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/state_summary.py +0 -0
  430. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/tips.py +0 -0
  431. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/update_types.py +0 -0
  432. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/state/wells.py +0 -0
  433. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_engine/types.py +0 -0
  434. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/__init__.py +0 -0
  435. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/extract_labware_definitions.py +0 -0
  436. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/file_format_validator.py +0 -0
  437. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/file_hasher.py +0 -0
  438. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/file_identifier.py +0 -0
  439. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
  440. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/input_file.py +0 -0
  441. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
  442. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
  443. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/protocol_source.py +0 -0
  444. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
  445. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/__init__.py +0 -0
  446. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
  447. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/json_file_reader.py +0 -0
  448. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/json_translator.py +0 -0
  449. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/legacy_command_mapper.py +0 -0
  450. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
  451. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/protocol_runner.py +0 -0
  452. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/python_protocol_wrappers.py +0 -0
  453. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/run_orchestrator.py +0 -0
  454. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocol_runner/task_queue.py +0 -0
  455. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/__init__.py +0 -0
  456. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/advanced_control/__init__.py +0 -0
  457. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/advanced_control/mix.py +0 -0
  458. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/advanced_control/transfers.py +0 -0
  459. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/__init__.py +0 -0
  460. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/constants.py +0 -0
  461. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/deck_type.py +0 -0
  462. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/definitions.py +0 -0
  463. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/instrument.py +0 -0
  464. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/labware_like.py +0 -0
  465. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
  466. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/types.py +0 -0
  467. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/api_support/util.py +0 -0
  468. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/bundle.py +0 -0
  469. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/duration/__init__.py +0 -0
  470. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/duration/errors.py +0 -0
  471. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/duration/estimator.py +0 -0
  472. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/__init__.py +0 -0
  473. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/dev_types.py +0 -0
  474. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/errors.py +0 -0
  475. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/execute.py +0 -0
  476. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
  477. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
  478. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
  479. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/execute_python.py +0 -0
  480. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
  481. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/execution/types.py +0 -0
  482. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/geometry/__init__.py +0 -0
  483. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
  484. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/geometry/planning.py +0 -0
  485. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/labware.py +0 -0
  486. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/models/__init__.py +0 -0
  487. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/models/json_protocol.py +0 -0
  488. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/__init__.py +0 -0
  489. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
  490. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
  491. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/exceptions.py +0 -0
  492. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
  493. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/types.py +0 -0
  494. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parameters/validation.py +0 -0
  495. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/parse.py +0 -0
  496. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/protocols/types.py +0 -0
  497. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/py.typed +0 -0
  498. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/resources/scripts/lpc21isp +0 -0
  499. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
  500. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/simulate.py +0 -0
  501. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/__init__.py +0 -0
  502. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/camera.py +0 -0
  503. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/log_control.py +0 -0
  504. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/nmcli.py +0 -0
  505. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/resin.py +0 -0
  506. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/smoothie_update.py +0 -0
  507. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/system/wifi.py +0 -0
  508. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/tools/__init__.py +0 -0
  509. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/tools/args_handler.py +0 -0
  510. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/tools/write_pipette_memory.py +0 -0
  511. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/types.py +0 -0
  512. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/__init__.py +0 -0
  513. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/async_helpers.py +0 -0
  514. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/broker.py +0 -0
  515. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/change_notifier.py +0 -0
  516. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/entrypoint_util.py +0 -0
  517. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/get_union_elements.py +0 -0
  518. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/helpers.py +0 -0
  519. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/linal.py +0 -0
  520. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/logging_config.py +0 -0
  521. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons/util/performance_helpers.py +0 -0
  522. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons.egg-info/SOURCES.txt +0 -0
  523. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons.egg-info/dependency_links.txt +0 -0
  524. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons.egg-info/entry_points.txt +0 -0
  525. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/src/opentrons.egg-info/not-zip-safe +0 -0
  526. {opentrons-8.2.0a4 → opentrons-8.3.0a0}/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.2.0a4
3
+ Version: 8.3.0a0
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.2.0a4
24
+ Requires-Dist: opentrons-shared-data==8.3.0a0
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
@@ -34,9 +34,9 @@ Requires-Dist: pyusb==1.2.1
34
34
  Requires-Dist: importlib-metadata>=1.0; python_version < "3.8"
35
35
  Requires-Dist: packaging>=21.0
36
36
  Provides-Extra: ot2-hardware
37
- Requires-Dist: opentrons-hardware==8.2.0a4; extra == "ot2-hardware"
37
+ Requires-Dist: opentrons-hardware==8.3.0a0; extra == "ot2-hardware"
38
38
  Provides-Extra: flex-hardware
39
- Requires-Dist: opentrons-hardware[FLEX]==8.2.0a4; extra == "flex-hardware"
39
+ Requires-Dist: opentrons-hardware[FLEX]==8.3.0a0; extra == "flex-hardware"
40
40
 
41
41
  .. _Full API Documentation: http://docs.opentrons.com
42
42
 
@@ -75,6 +75,7 @@ DEFAULT_RIGHT_MOUNT_OFFSET: Final[Offset] = (40.5, -60.5, 255.675)
75
75
  DEFAULT_GRIPPER_MOUNT_OFFSET: Final[Offset] = (84.55, -12.75, 93.85)
76
76
  DEFAULT_SAFE_HOME_DISTANCE: Final = 5
77
77
  DEFAULT_CALIBRATION_AXIS_MAX_SPEED: Final = 30
78
+ DEFAULT_EMULSIFYING_PIPETTE_AXIS_MAX_SPEED: Final = 90
78
79
 
79
80
  DEFAULT_MAX_SPEEDS: Final[ByGantryLoad[Dict[OT3AxisKind, float]]] = ByGantryLoad(
80
81
  high_throughput={
@@ -60,6 +60,14 @@ class FlexBackend(Protocol):
60
60
  def grab_pressure(self, channels: int, mount: OT3Mount) -> AsyncIterator[None]:
61
61
  ...
62
62
 
63
+ def set_pressure_sensor_available(
64
+ self, pipette_axis: Axis, available: bool
65
+ ) -> None:
66
+ ...
67
+
68
+ def get_pressure_sensor_available(self, pipette_axis: Axis) -> bool:
69
+ ...
70
+
63
71
  def update_constraints_for_gantry_load(self, gantry_load: GantryLoad) -> None:
64
72
  ...
65
73
 
@@ -70,7 +78,11 @@ class FlexBackend(Protocol):
70
78
  ...
71
79
 
72
80
  def update_constraints_for_plunger_acceleration(
73
- self, mount: OT3Mount, acceleration: float, gantry_load: GantryLoad
81
+ self,
82
+ mount: OT3Mount,
83
+ acceleration: float,
84
+ gantry_load: GantryLoad,
85
+ high_speed_pipette: bool = False,
74
86
  ) -> None:
75
87
  ...
76
88
 
@@ -197,6 +197,7 @@ from opentrons_shared_data.errors.exceptions import (
197
197
  PipetteLiquidNotFoundError,
198
198
  CommunicationError,
199
199
  PythonException,
200
+ UnsupportedHardwareCommand,
200
201
  )
201
202
 
202
203
  from .subsystem_manager import SubsystemManager
@@ -362,6 +363,7 @@ class OT3Controller(FlexBackend):
362
363
  self._configuration.motion_settings, GantryLoad.LOW_THROUGHPUT
363
364
  )
364
365
  )
366
+ self._pressure_sensor_available: Dict[NodeId, bool] = {}
365
367
 
366
368
  @asynccontextmanager
367
369
  async def restore_system_constraints(self) -> AsyncIterator[None]:
@@ -380,6 +382,16 @@ class OT3Controller(FlexBackend):
380
382
  async with grab_pressure(channels, tool, self._messenger):
381
383
  yield
382
384
 
385
+ def set_pressure_sensor_available(
386
+ self, pipette_axis: Axis, available: bool
387
+ ) -> None:
388
+ pip_node = axis_to_node(pipette_axis)
389
+ self._pressure_sensor_available[pip_node] = available
390
+
391
+ def get_pressure_sensor_available(self, pipette_axis: Axis) -> bool:
392
+ pip_node = axis_to_node(pipette_axis)
393
+ return self._pressure_sensor_available[pip_node]
394
+
383
395
  def update_constraints_for_calibration_with_gantry_load(
384
396
  self,
385
397
  gantry_load: GantryLoad,
@@ -399,10 +411,18 @@ class OT3Controller(FlexBackend):
399
411
  )
400
412
 
401
413
  def update_constraints_for_plunger_acceleration(
402
- self, mount: OT3Mount, acceleration: float, gantry_load: GantryLoad
414
+ self,
415
+ mount: OT3Mount,
416
+ acceleration: float,
417
+ gantry_load: GantryLoad,
418
+ high_speed_pipette: bool = False,
403
419
  ) -> None:
404
420
  new_constraints = get_system_constraints_for_plunger_acceleration(
405
- self._configuration.motion_settings, gantry_load, mount, acceleration
421
+ self._configuration.motion_settings,
422
+ gantry_load,
423
+ mount,
424
+ acceleration,
425
+ high_speed_pipette,
406
426
  )
407
427
  self._move_manager.update_constraints(new_constraints)
408
428
 
@@ -679,7 +699,8 @@ class OT3Controller(FlexBackend):
679
699
 
680
700
  pipettes_moving = moving_pipettes_in_move_group(move_group)
681
701
 
682
- async with self._monitor_overpressure(pipettes_moving):
702
+ checked_moving_pipettes = self._pipettes_to_monitor_pressure(pipettes_moving)
703
+ async with self._monitor_overpressure(checked_moving_pipettes):
683
704
  positions = await runner.run(can_messenger=self._messenger)
684
705
  self._handle_motor_status_response(positions)
685
706
 
@@ -786,7 +807,8 @@ class OT3Controller(FlexBackend):
786
807
  moving_pipettes = [
787
808
  axis_to_node(ax) for ax in checked_axes if ax in Axis.pipette_axes()
788
809
  ]
789
- async with self._monitor_overpressure(moving_pipettes):
810
+ checked_moving_pipettes = self._pipettes_to_monitor_pressure(moving_pipettes)
811
+ async with self._monitor_overpressure(checked_moving_pipettes):
790
812
  positions = await asyncio.gather(*coros)
791
813
  # TODO(CM): default gear motor homing routine to have some acceleration
792
814
  if Axis.Q in checked_axes:
@@ -800,6 +822,9 @@ class OT3Controller(FlexBackend):
800
822
  self._handle_motor_status_response(position)
801
823
  return axis_convert(self._position, 0.0)
802
824
 
825
+ def _pipettes_to_monitor_pressure(self, pipettes: List[NodeId]) -> List[NodeId]:
826
+ return [pip for pip in pipettes if self._pressure_sensor_available[pip]]
827
+
803
828
  def _filter_move_group(self, move_group: MoveGroup) -> MoveGroup:
804
829
  new_group: MoveGroup = []
805
830
  for step in move_group:
@@ -915,6 +940,7 @@ class OT3Controller(FlexBackend):
915
940
  lookup_name = {
916
941
  FirmwarePipetteName.p1000_single: "P1KS",
917
942
  FirmwarePipetteName.p1000_multi: "P1KM",
943
+ FirmwarePipetteName.p1000_multi_em: "P1KP",
918
944
  FirmwarePipetteName.p50_single: "P50S",
919
945
  FirmwarePipetteName.p50_multi: "P50M",
920
946
  FirmwarePipetteName.p1000_96: "P1KH",
@@ -949,6 +975,7 @@ class OT3Controller(FlexBackend):
949
975
  converted_name.pipette_type,
950
976
  converted_name.pipette_channels,
951
977
  converted_name.pipette_version,
978
+ converted_name.oem_type,
952
979
  ),
953
980
  "id": OT3Controller._combine_serial_number(attached),
954
981
  }
@@ -1378,6 +1405,11 @@ class OT3Controller(FlexBackend):
1378
1405
  ) -> float:
1379
1406
  head_node = axis_to_node(Axis.by_mount(mount))
1380
1407
  tool = sensor_node_for_pipette(OT3Mount(mount.value))
1408
+ if tool not in self._pipettes_to_monitor_pressure([tool]):
1409
+ raise UnsupportedHardwareCommand(
1410
+ "Liquid Presence Detection not available on this pipette."
1411
+ )
1412
+
1381
1413
  positions = await liquid_probe(
1382
1414
  messenger=self._messenger,
1383
1415
  tool=tool,
@@ -235,7 +235,11 @@ class OT3Simulator(FlexBackend):
235
235
  self._sim_gantry_load = gantry_load
236
236
 
237
237
  def update_constraints_for_plunger_acceleration(
238
- self, mount: OT3Mount, acceleration: float, gantry_load: GantryLoad
238
+ self,
239
+ mount: OT3Mount,
240
+ acceleration: float,
241
+ gantry_load: GantryLoad,
242
+ high_speed_pipette: bool = False,
239
243
  ) -> None:
240
244
  self._sim_gantry_load = gantry_load
241
245
 
@@ -505,6 +509,7 @@ class OT3Simulator(FlexBackend):
505
509
  converted_name.pipette_type,
506
510
  converted_name.pipette_channels,
507
511
  converted_name.pipette_version,
512
+ converted_name.oem_type,
508
513
  ),
509
514
  "id": None,
510
515
  }
@@ -527,6 +532,7 @@ class OT3Simulator(FlexBackend):
527
532
  converted_name.pipette_type,
528
533
  converted_name.pipette_channels,
529
534
  converted_name.pipette_version,
535
+ converted_name.oem_type,
530
536
  ),
531
537
  "id": init_instr["id"],
532
538
  }
@@ -538,6 +544,7 @@ class OT3Simulator(FlexBackend):
538
544
  converted_name.pipette_type,
539
545
  converted_name.pipette_channels,
540
546
  converted_name.pipette_version,
547
+ converted_name.oem_type,
541
548
  ),
542
549
  "id": None,
543
550
  }
@@ -2,7 +2,10 @@
2
2
  from typing import Dict, Iterable, List, Set, Tuple, TypeVar, cast, Sequence, Optional
3
3
  from typing_extensions import Literal
4
4
  from logging import getLogger
5
- from opentrons.config.defaults_ot3 import DEFAULT_CALIBRATION_AXIS_MAX_SPEED
5
+ from opentrons.config.defaults_ot3 import (
6
+ DEFAULT_CALIBRATION_AXIS_MAX_SPEED,
7
+ DEFAULT_EMULSIFYING_PIPETTE_AXIS_MAX_SPEED,
8
+ )
6
9
  from opentrons.config.types import OT3MotionSettings, OT3CurrentSettings, GantryLoad
7
10
  from opentrons.hardware_control.types import (
8
11
  Axis,
@@ -281,12 +284,22 @@ def get_system_constraints_for_plunger_acceleration(
281
284
  gantry_load: GantryLoad,
282
285
  mount: OT3Mount,
283
286
  acceleration: float,
287
+ high_speed_pipette: bool = False,
284
288
  ) -> "SystemConstraints[Axis]":
285
289
  old_constraints = config.by_gantry_load(gantry_load)
286
290
  new_constraints = {}
287
291
  axis_kinds = set([k for _, v in old_constraints.items() for k in v.keys()])
292
+
293
+ def _get_axis_max_speed(ax: Axis) -> float:
294
+ if ax == Axis.of_main_tool_actuator(mount) and high_speed_pipette:
295
+ _max_speed = float(DEFAULT_EMULSIFYING_PIPETTE_AXIS_MAX_SPEED)
296
+ else:
297
+ _max_speed = old_constraints["default_max_speed"][axis_kind]
298
+ return _max_speed
299
+
288
300
  for axis_kind in axis_kinds:
289
301
  for axis in Axis.of_kind(axis_kind):
302
+ _default_max_speed = _get_axis_max_speed(axis)
290
303
  if axis == Axis.of_main_tool_actuator(mount):
291
304
  _accel = acceleration
292
305
  else:
@@ -295,7 +308,32 @@ def get_system_constraints_for_plunger_acceleration(
295
308
  _accel,
296
309
  old_constraints["max_speed_discontinuity"][axis_kind],
297
310
  old_constraints["direction_change_speed_discontinuity"][axis_kind],
298
- old_constraints["default_max_speed"][axis_kind],
311
+ _default_max_speed,
312
+ )
313
+ return new_constraints
314
+
315
+
316
+ def get_system_constraints_for_emulsifying_pipette(
317
+ config: OT3MotionSettings,
318
+ gantry_load: GantryLoad,
319
+ mount: OT3Mount,
320
+ ) -> "SystemConstraints[Axis]":
321
+ old_constraints = config.by_gantry_load(gantry_load)
322
+ new_constraints = {}
323
+ axis_kinds = set([k for _, v in old_constraints.items() for k in v.keys()])
324
+ for axis_kind in axis_kinds:
325
+ for axis in Axis.of_kind(axis_kind):
326
+ if axis == Axis.of_main_tool_actuator(mount):
327
+ _max_speed = float(DEFAULT_EMULSIFYING_PIPETTE_AXIS_MAX_SPEED)
328
+ else:
329
+ _max_speed = old_constraints["default_max_speed"][axis_kind]
330
+ new_constraints[axis] = AxisConstraints.build(
331
+ max_acceleration=old_constraints["acceleration"][axis_kind],
332
+ max_speed_discont=old_constraints["max_speed_discontinuity"][axis_kind],
333
+ max_direction_change_speed_discont=old_constraints[
334
+ "direction_change_speed_discontinuity"
335
+ ][axis_kind],
336
+ max_speed=_max_speed,
299
337
  )
300
338
  return new_constraints
301
339
 
@@ -20,6 +20,7 @@ from opentrons_shared_data.pipette.pipette_definition import (
20
20
  PipetteConfigurations,
21
21
  SupportedTipsDefinition,
22
22
  PipetteBoundingBoxOffsetDefinition,
23
+ AvailableSensorDefinition,
23
24
  )
24
25
  from opentrons_shared_data.gripper import (
25
26
  GripperModel,
@@ -100,6 +101,7 @@ class PipetteDict(InstrumentDict):
100
101
  pipette_bounding_box_offsets: PipetteBoundingBoxOffsetDefinition
101
102
  current_nozzle_map: NozzleMap
102
103
  lld_settings: Optional[Dict[str, Dict[str, float]]]
104
+ available_sensors: AvailableSensorDefinition
103
105
 
104
106
 
105
107
  class PipetteStateDict(TypedDict):
@@ -56,6 +56,7 @@ from opentrons_shared_data.pipette.types import (
56
56
  UlPerMmAction,
57
57
  PipetteName,
58
58
  PipetteModel,
59
+ PipetteOEMType,
59
60
  )
60
61
  from opentrons.hardware_control.dev_types import InstrumentHardwareConfigs
61
62
 
@@ -112,17 +113,20 @@ class Pipette(AbstractInstrument[PipetteConfigurations]):
112
113
  pipette_type=config.pipette_type,
113
114
  pipette_channels=config.channels,
114
115
  pipette_generation=config.display_category,
116
+ oem_type=PipetteOEMType.OT,
115
117
  )
116
118
  self._acting_as = self._pipette_name
117
119
  self._pipette_model = PipetteModelVersionType(
118
120
  pipette_type=config.pipette_type,
119
121
  pipette_channels=config.channels,
120
122
  pipette_version=config.version,
123
+ oem_type=PipetteOEMType.OT,
121
124
  )
122
125
  self._valid_nozzle_maps = load_pipette_data.load_valid_nozzle_maps(
123
126
  self._pipette_model.pipette_type,
124
127
  self._pipette_model.pipette_channels,
125
128
  self._pipette_model.pipette_version,
129
+ PipetteOEMType.OT,
126
130
  )
127
131
  self._nozzle_offset = self._config.nozzle_offset
128
132
  self._nozzle_manager = (
@@ -189,7 +193,7 @@ class Pipette(AbstractInstrument[PipetteConfigurations]):
189
193
  ], f"{self.name} is not back-compatible with {name}"
190
194
 
191
195
  liquid_model = load_pipette_data.load_liquid_model(
192
- name.pipette_type, name.pipette_channels, name.get_version()
196
+ name.pipette_type, name.pipette_channels, name.get_version(), name.oem_type
193
197
  )
194
198
  # TODO need to grab name config here to deal with act as test
195
199
  self._liquid_class.max_volume = liquid_model["default"].max_volume
@@ -280,6 +284,7 @@ class Pipette(AbstractInstrument[PipetteConfigurations]):
280
284
  self._pipette_model.pipette_type,
281
285
  self._pipette_model.pipette_channels,
282
286
  self._pipette_model.pipette_version,
287
+ self._pipette_model.oem_type,
283
288
  )
284
289
  self._config_as_dict = self._config.dict()
285
290
 
@@ -41,6 +41,8 @@ from opentrons_shared_data.pipette.types import (
41
41
  UlPerMmAction,
42
42
  PipetteName,
43
43
  PipetteModel,
44
+ Quirks,
45
+ PipetteOEMType,
44
46
  )
45
47
  from opentrons_shared_data.pipette import (
46
48
  load_data as load_pipette_data,
@@ -92,22 +94,26 @@ class Pipette(AbstractInstrument[PipetteConfigurations]):
92
94
  self._liquid_class_name = pip_types.LiquidClasses.default
93
95
  self._liquid_class = self._config.liquid_properties[self._liquid_class_name]
94
96
 
97
+ oem = PipetteOEMType.get_oem_from_quirks(config.quirks)
95
98
  # TODO (lc 12-05-2022) figure out how we can safely deprecate "name" and "model"
96
99
  self._pipette_name = PipetteNameType(
97
100
  pipette_type=config.pipette_type,
98
101
  pipette_channels=config.channels,
99
102
  pipette_generation=config.display_category,
103
+ oem_type=oem,
100
104
  )
101
105
  self._acting_as = self._pipette_name
102
106
  self._pipette_model = PipetteModelVersionType(
103
107
  pipette_type=config.pipette_type,
104
108
  pipette_channels=config.channels,
105
109
  pipette_version=config.version,
110
+ oem_type=oem,
106
111
  )
107
112
  self._valid_nozzle_maps = load_pipette_data.load_valid_nozzle_maps(
108
113
  self._pipette_model.pipette_type,
109
114
  self._pipette_model.pipette_channels,
110
115
  self._pipette_model.pipette_version,
116
+ self._pipette_model.oem_type,
111
117
  )
112
118
  self._nozzle_offset = self._config.nozzle_offset
113
119
  self._nozzle_manager = (
@@ -225,6 +231,9 @@ class Pipette(AbstractInstrument[PipetteConfigurations]):
225
231
  def push_out_volume(self) -> float:
226
232
  return self._active_tip_settings.default_push_out_volume
227
233
 
234
+ def is_high_speed_pipette(self) -> bool:
235
+ return Quirks.highSpeed in self._config.quirks
236
+
228
237
  def act_as(self, name: PipetteName) -> None:
229
238
  """Reconfigure to act as ``name``. ``name`` must be either the
230
239
  actual name of the pipette, or a name in its back-compatibility
@@ -246,6 +255,7 @@ class Pipette(AbstractInstrument[PipetteConfigurations]):
246
255
  self._pipette_model.pipette_type,
247
256
  self._pipette_model.pipette_channels,
248
257
  self._pipette_model.pipette_version,
258
+ self._pipette_model.oem_type,
249
259
  )
250
260
  self._config_as_dict = self._config.dict()
251
261
 
@@ -32,6 +32,7 @@ from opentrons_shared_data.pipette.types import (
32
32
  )
33
33
  from opentrons_shared_data.pipette import (
34
34
  pipette_load_name_conversions as pipette_load_name,
35
+ pipette_definition,
35
36
  )
36
37
  from opentrons_shared_data.robot.types import RobotType
37
38
 
@@ -299,8 +300,11 @@ class OT3API(
299
300
  async def set_system_constraints_for_plunger_acceleration(
300
301
  self, mount: OT3Mount, acceleration: float
301
302
  ) -> None:
303
+ high_speed_pipette = self._pipette_handler.get_pipette(
304
+ mount
305
+ ).is_high_speed_pipette()
302
306
  self._backend.update_constraints_for_plunger_acceleration(
303
- mount, acceleration, self._gantry_load
307
+ mount, acceleration, self._gantry_load, high_speed_pipette
304
308
  )
305
309
 
306
310
  @contextlib.asynccontextmanager
@@ -633,10 +637,31 @@ class OT3API(
633
637
  self._feature_flags.use_old_aspiration_functions,
634
638
  )
635
639
  self._pipette_handler.hardware_instruments[mount] = p
640
+
641
+ if config is not None:
642
+ self._set_pressure_sensor_available(mount, instrument_config=config)
643
+
636
644
  # TODO (lc 12-5-2022) Properly support backwards compatibility
637
645
  # when applicable
638
646
  return skipped
639
647
 
648
+ def get_pressure_sensor_available(self, mount: OT3Mount) -> bool:
649
+ pip_axis = Axis.of_main_tool_actuator(mount)
650
+ return self._backend.get_pressure_sensor_available(pip_axis)
651
+
652
+ def _set_pressure_sensor_available(
653
+ self,
654
+ mount: OT3Mount,
655
+ instrument_config: pipette_definition.PipetteConfigurations,
656
+ ) -> None:
657
+ pressure_sensor_available = (
658
+ "pressure" in instrument_config.available_sensors.sensors
659
+ )
660
+ pip_axis = Axis.of_main_tool_actuator(mount)
661
+ self._backend.set_pressure_sensor_available(
662
+ pipette_axis=pip_axis, available=pressure_sensor_available
663
+ )
664
+
640
665
  async def cache_gripper(self, instrument_data: AttachedGripper) -> bool:
641
666
  """Set up gripper based on scanned information."""
642
667
  grip_cal = load_gripper_calibration_offset(instrument_data.get("id"))
@@ -31,6 +31,9 @@ from opentrons.protocol_engine.errors.exceptions import TipNotAttachedError
31
31
  from opentrons.protocol_engine.clients import SyncClient as EngineClient
32
32
  from opentrons.protocols.api_support.definitions import MAX_SUPPORTED_VERSION
33
33
  from opentrons_shared_data.pipette.types import PipetteNameType
34
+ from opentrons_shared_data.errors.exceptions import (
35
+ UnsupportedHardwareCommand,
36
+ )
34
37
  from opentrons.protocol_api._nozzle_layout import NozzleLayout
35
38
  from opentrons.hardware_control.nozzle_manager import NozzleConfigurationType
36
39
  from opentrons.hardware_control.nozzle_manager import NozzleMap
@@ -86,6 +89,13 @@ class InstrumentCore(AbstractInstrument[WellCore]):
86
89
  self._liquid_presence_detection = bool(
87
90
  self._engine_client.state.pipettes.get_liquid_presence_detection(pipette_id)
88
91
  )
92
+ if (
93
+ self._liquid_presence_detection
94
+ and not self._pressure_supported_by_pipette()
95
+ ):
96
+ raise UnsupportedHardwareCommand(
97
+ "Pressure sensor not available for this pipette"
98
+ )
89
99
 
90
100
  @property
91
101
  def pipette_id(self) -> str:
@@ -847,6 +857,11 @@ class InstrumentCore(AbstractInstrument[WellCore]):
847
857
  z_axis = self._engine_client.state.pipettes.get_z_axis(self._pipette_id)
848
858
  self._engine_client.execute_command(cmd.HomeParams(axes=[z_axis]))
849
859
 
860
+ def _pressure_supported_by_pipette(self) -> bool:
861
+ return self._engine_client.state.pipettes.get_pipette_supports_pressure(
862
+ self.pipette_id
863
+ )
864
+
850
865
  def detect_liquid_presence(self, well_core: WellCore, loc: Location) -> bool:
851
866
  labware_id = well_core.labware_id
852
867
  well_name = well_core.get_name()
@@ -253,6 +253,10 @@ class AbstractInstrument(ABC, Generic[WellCoreType]):
253
253
  def get_liquid_presence_detection(self) -> bool:
254
254
  ...
255
255
 
256
+ @abstractmethod
257
+ def _pressure_supported_by_pipette(self) -> bool:
258
+ ...
259
+
256
260
  @abstractmethod
257
261
  def set_liquid_presence_detection(self, enable: bool) -> None:
258
262
  ...
@@ -583,3 +583,6 @@ class LegacyInstrumentCore(AbstractInstrument[LegacyWellCore]):
583
583
  ) -> float:
584
584
  """This will never be called because it was added in API 2.20."""
585
585
  assert False, "liquid_probe_without_recovery only supported in API 2.20 & later"
586
+
587
+ def _pressure_supported_by_pipette(self) -> bool:
588
+ return False
@@ -501,3 +501,6 @@ class LegacyInstrumentCoreSimulator(AbstractInstrument[LegacyWellCore]):
501
501
  ) -> float:
502
502
  """This will never be called because it was added in API 2.20."""
503
503
  assert False, "liquid_probe_without_recovery only supported in API 2.20 & later"
504
+
505
+ def _pressure_supported_by_pipette(self) -> bool:
506
+ return False
@@ -7,6 +7,7 @@ from opentrons_shared_data.errors.exceptions import (
7
7
  CommandPreconditionViolated,
8
8
  CommandParameterLimitViolated,
9
9
  UnexpectedTipRemovalError,
10
+ UnsupportedHardwareCommand,
10
11
  )
11
12
  from opentrons.legacy_broker import LegacyBroker
12
13
  from opentrons.hardware_control.dev_types import PipetteDict
@@ -260,6 +261,7 @@ class InstrumentContext(publisher.CommandPublisher):
260
261
  and self._96_tip_config_valid()
261
262
  and self._core.get_current_volume() == 0
262
263
  ):
264
+ self._raise_if_pressure_not_supported_by_pipette()
263
265
  self.require_liquid_presence(well=well)
264
266
 
265
267
  with publisher.publish_context(
@@ -1694,6 +1696,8 @@ class InstrumentContext(publisher.CommandPublisher):
1694
1696
  @liquid_presence_detection.setter
1695
1697
  @requires_version(2, 20)
1696
1698
  def liquid_presence_detection(self, enable: bool) -> None:
1699
+ if enable:
1700
+ self._raise_if_pressure_not_supported_by_pipette()
1697
1701
  self._core.set_liquid_presence_detection(enable)
1698
1702
 
1699
1703
  @property
@@ -2143,6 +2147,7 @@ class InstrumentContext(publisher.CommandPublisher):
2143
2147
  .. note::
2144
2148
  The pressure sensors for the Flex 8-channel pipette are on channels 1 and 8 (positions A1 and H1). For the Flex 96-channel pipette, the pressure sensors are on channels 1 and 96 (positions A1 and H12). Other channels on multi-channel pipettes do not have sensors and cannot detect liquid.
2145
2149
  """
2150
+ self._raise_if_pressure_not_supported_by_pipette()
2146
2151
  loc = well.top()
2147
2152
  self._96_tip_config_valid()
2148
2153
  return self._core.detect_liquid_presence(well._core, loc)
@@ -2156,6 +2161,7 @@ class InstrumentContext(publisher.CommandPublisher):
2156
2161
  .. note::
2157
2162
  The pressure sensors for the Flex 8-channel pipette are on channels 1 and 8 (positions A1 and H1). For the Flex 96-channel pipette, the pressure sensors are on channels 1 and 96 (positions A1 and H12). Other channels on multi-channel pipettes do not have sensors and cannot detect liquid.
2158
2163
  """
2164
+ self._raise_if_pressure_not_supported_by_pipette()
2159
2165
  loc = well.top()
2160
2166
  self._96_tip_config_valid()
2161
2167
  self._core.liquid_probe_with_recovery(well._core, loc)
@@ -2170,7 +2176,7 @@ class InstrumentContext(publisher.CommandPublisher):
2170
2176
 
2171
2177
  This is intended for Opentrons internal use only and is not a guaranteed API.
2172
2178
  """
2173
-
2179
+ self._raise_if_pressure_not_supported_by_pipette()
2174
2180
  loc = well.top()
2175
2181
  self._96_tip_config_valid()
2176
2182
  height = self._core.liquid_probe_without_recovery(well._core, loc)
@@ -2192,6 +2198,12 @@ class InstrumentContext(publisher.CommandPublisher):
2192
2198
  )
2193
2199
  # SINGLE, QUADRANT and ALL are supported by all pipettes
2194
2200
 
2201
+ def _raise_if_pressure_not_supported_by_pipette(self) -> None:
2202
+ if not self._core._pressure_supported_by_pipette():
2203
+ raise UnsupportedHardwareCommand(
2204
+ "Pressure sensor not available for this pipette"
2205
+ )
2206
+
2195
2207
  def _handle_aspirate_target(
2196
2208
  self, target: validation.ValidTarget
2197
2209
  ) -> tuple[types.Location, Optional[labware.Well], Optional[bool]]:
@@ -63,6 +63,7 @@ _PIPETTE_NAMES_MAP = {
63
63
  "flex_8channel_50": PipetteNameType.P50_MULTI_FLEX,
64
64
  "flex_1channel_1000": PipetteNameType.P1000_SINGLE_FLEX,
65
65
  "flex_8channel_1000": PipetteNameType.P1000_MULTI_FLEX,
66
+ "flex_8channel_1000_em": PipetteNameType.P1000_MULTI_EM,
66
67
  "flex_96channel_1000": PipetteNameType.P1000_96,
67
68
  }
68
69
 
@@ -16,6 +16,7 @@ from opentrons.protocol_engine.errors.exceptions import (
16
16
  from opentrons.types import MountType
17
17
  from opentrons_shared_data.errors.exceptions import (
18
18
  PipetteLiquidNotFoundError,
19
+ UnsupportedHardwareCommand,
19
20
  )
20
21
 
21
22
  from ..types import DeckPoint
@@ -113,6 +114,13 @@ async def _execute_common(
113
114
  well_name = params.wellName
114
115
 
115
116
  state_update = update_types.StateUpdate()
117
+ if (
118
+ "pressure"
119
+ not in state_view.pipettes.get_config(pipette_id).available_sensors.sensors
120
+ ):
121
+ raise UnsupportedHardwareCommand(
122
+ "Pressure sensor not available for this pipette"
123
+ )
116
124
 
117
125
  # May raise TipNotAttachedError.
118
126
  aspirated_volume = state_view.pipettes.get_aspirated_volume(pipette_id)