opentrons 8.3.2a0__tar.gz → 8.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. {opentrons-8.3.2a0 → opentrons-8.4.0}/PKG-INFO +4 -4
  2. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +2 -0
  3. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/tip_length.py +6 -6
  4. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/advanced_settings.py +9 -11
  5. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/feature_flags.py +0 -4
  6. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/reset.py +7 -2
  7. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/asyncio/communication/__init__.py +2 -0
  8. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/asyncio/communication/async_serial.py +4 -0
  9. opentrons-8.4.0/src/opentrons/drivers/asyncio/communication/errors.py +78 -0
  10. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/asyncio/communication/serial_connection.py +36 -10
  11. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/__init__.py +15 -0
  12. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/abstract.py +214 -0
  13. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/driver.py +806 -0
  14. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/errors.py +64 -0
  15. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/simulator.py +307 -0
  16. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/types.py +334 -0
  17. opentrons-8.4.0/src/opentrons/drivers/flex_stacker/utils.py +19 -0
  18. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/execute.py +4 -2
  19. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/api.py +5 -0
  20. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/flex_protocol.py +4 -0
  21. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/ot3controller.py +12 -1
  22. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/ot3simulator.py +3 -0
  23. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/subsystem_manager.py +8 -4
  24. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +10 -6
  25. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +59 -6
  26. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/__init__.py +12 -1
  27. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/absorbance_reader.py +11 -9
  28. opentrons-8.4.0/src/opentrons/hardware_control/modules/flex_stacker.py +498 -0
  29. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/heater_shaker.py +12 -10
  30. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/magdeck.py +5 -1
  31. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/tempdeck.py +5 -1
  32. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/thermocycler.py +15 -14
  33. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/types.py +191 -1
  34. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/utils.py +3 -0
  35. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/motion_utilities.py +20 -0
  36. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/ot3api.py +145 -15
  37. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/liquid_handler.py +47 -1
  38. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/types.py +6 -0
  39. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/commands.py +102 -5
  40. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/helpers.py +74 -1
  41. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/types.py +33 -2
  42. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/__init__.py +2 -0
  43. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/_liquid.py +39 -8
  44. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/_liquid_properties.py +20 -19
  45. opentrons-8.4.0/src/opentrons/protocol_api/_transfer_liquid_validation.py +91 -0
  46. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/common.py +3 -1
  47. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/deck_conflict.py +11 -1
  48. opentrons-8.4.0/src/opentrons/protocol_api/core/engine/instrument.py +2354 -0
  49. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/labware.py +8 -4
  50. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/load_labware_params.py +68 -10
  51. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/module_core.py +118 -2
  52. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +6 -14
  53. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/protocol.py +253 -11
  54. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/stringify.py +19 -8
  55. opentrons-8.4.0/src/opentrons/protocol_api/core/engine/transfer_components_executor.py +858 -0
  56. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/well.py +73 -5
  57. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/instrument.py +71 -21
  58. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/labware.py +6 -2
  59. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +7 -3
  60. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +76 -49
  61. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +8 -4
  62. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +36 -0
  63. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +27 -2
  64. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/load_info.py +4 -12
  65. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/module_geometry.py +6 -1
  66. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/well_geometry.py +3 -3
  67. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +73 -23
  68. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/module.py +43 -0
  69. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/protocol.py +33 -0
  70. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/well.py +23 -2
  71. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/instrument_context.py +454 -150
  72. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/labware.py +98 -50
  73. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/module_contexts.py +140 -0
  74. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/protocol_context.py +163 -19
  75. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/validation.py +51 -41
  76. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/__init__.py +21 -2
  77. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/actions/actions.py +5 -5
  78. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/clients/sync_client.py +6 -0
  79. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/__init__.py +66 -36
  80. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -1
  81. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/air_gap_in_place.py +3 -2
  82. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/aspirate.py +6 -2
  83. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +3 -1
  84. opentrons-8.4.0/src/opentrons/protocol_engine/commands/aspirate_while_tracking.py +210 -0
  85. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/blow_out.py +2 -0
  86. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +4 -1
  87. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/command_unions.py +102 -33
  88. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/configure_for_volume.py +3 -0
  89. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/dispense.py +3 -1
  90. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/dispense_in_place.py +3 -0
  91. opentrons-8.4.0/src/opentrons/protocol_engine/commands/dispense_while_tracking.py +204 -0
  92. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/drop_tip.py +23 -1
  93. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/__init__.py +106 -0
  94. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/close_latch.py +72 -0
  95. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/common.py +15 -0
  96. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/empty.py +161 -0
  97. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/fill.py +164 -0
  98. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/open_latch.py +70 -0
  99. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/prepare_shuttle.py +112 -0
  100. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/retrieve.py +394 -0
  101. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +190 -0
  102. opentrons-8.4.0/src/opentrons/protocol_engine/commands/flex_stacker/store.py +291 -0
  103. opentrons-8.4.0/src/opentrons/protocol_engine/commands/generate_command_schema.py +61 -0
  104. opentrons-8.4.0/src/opentrons/protocol_engine/commands/labware_handling_common.py +29 -0
  105. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/liquid_probe.py +27 -13
  106. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_labware.py +42 -39
  107. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_lid.py +21 -13
  108. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_lid_stack.py +130 -47
  109. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_module.py +18 -17
  110. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_pipette.py +3 -0
  111. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/move_labware.py +139 -20
  112. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/move_to_well.py +5 -11
  113. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/pick_up_tip.py +5 -2
  114. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/pipetting_common.py +159 -8
  115. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +15 -5
  116. opentrons-8.3.2a0/src/opentrons/protocol_engine/commands/evotip_dispense.py → opentrons-8.4.0/src/opentrons/protocol_engine/commands/pressure_dispense.py +33 -34
  117. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/reload_labware.py +6 -19
  118. opentrons-8.3.2a0/src/opentrons/protocol_engine/commands/evotip_seal_pipette.py → opentrons-8.4.0/src/opentrons/protocol_engine/commands/seal_pipette_to_tip.py +97 -76
  119. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +3 -1
  120. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +6 -1
  121. opentrons-8.3.2a0/src/opentrons/protocol_engine/commands/evotip_unseal_pipette.py → opentrons-8.4.0/src/opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +31 -40
  122. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/errors/__init__.py +10 -0
  123. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/errors/exceptions.py +62 -0
  124. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/equipment.py +123 -106
  125. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/labware_movement.py +8 -6
  126. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/pipetting.py +235 -25
  127. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/tip_handler.py +82 -32
  128. opentrons-8.4.0/src/opentrons/protocol_engine/labware_offset_standardization.py +194 -0
  129. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/protocol_engine.py +22 -13
  130. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +98 -2
  131. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/deck_data_provider.py +1 -1
  132. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/labware_data_provider.py +32 -12
  133. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/labware_validation.py +7 -5
  134. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/slot_standardization.py +11 -23
  135. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/addressable_areas.py +84 -46
  136. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/frustum_helpers.py +36 -14
  137. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/geometry.py +892 -227
  138. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/labware.py +252 -55
  139. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/__init__.py +4 -0
  140. opentrons-8.4.0/src/opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +68 -0
  141. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +22 -0
  142. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +13 -0
  143. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +20 -0
  144. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/modules.py +210 -67
  145. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/pipettes.py +54 -0
  146. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/state.py +1 -1
  147. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/tips.py +14 -0
  148. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/update_types.py +180 -25
  149. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/wells.py +55 -9
  150. opentrons-8.4.0/src/opentrons/protocol_engine/types/__init__.py +300 -0
  151. opentrons-8.4.0/src/opentrons/protocol_engine/types/automatic_tip_selection.py +39 -0
  152. opentrons-8.4.0/src/opentrons/protocol_engine/types/command_annotations.py +53 -0
  153. opentrons-8.4.0/src/opentrons/protocol_engine/types/deck_configuration.py +72 -0
  154. opentrons-8.4.0/src/opentrons/protocol_engine/types/execution.py +96 -0
  155. opentrons-8.4.0/src/opentrons/protocol_engine/types/hardware_passthrough.py +25 -0
  156. opentrons-8.4.0/src/opentrons/protocol_engine/types/instrument.py +47 -0
  157. opentrons-8.4.0/src/opentrons/protocol_engine/types/instrument_sensors.py +47 -0
  158. opentrons-8.4.0/src/opentrons/protocol_engine/types/labware.py +111 -0
  159. opentrons-8.4.0/src/opentrons/protocol_engine/types/labware_movement.py +22 -0
  160. opentrons-8.4.0/src/opentrons/protocol_engine/types/labware_offset_location.py +111 -0
  161. opentrons-8.4.0/src/opentrons/protocol_engine/types/labware_offset_vector.py +33 -0
  162. opentrons-8.4.0/src/opentrons/protocol_engine/types/liquid.py +40 -0
  163. opentrons-8.4.0/src/opentrons/protocol_engine/types/liquid_class.py +59 -0
  164. opentrons-8.4.0/src/opentrons/protocol_engine/types/liquid_handling.py +13 -0
  165. opentrons-8.4.0/src/opentrons/protocol_engine/types/liquid_level_detection.py +131 -0
  166. opentrons-8.4.0/src/opentrons/protocol_engine/types/location.py +194 -0
  167. opentrons-8.4.0/src/opentrons/protocol_engine/types/module.py +301 -0
  168. opentrons-8.4.0/src/opentrons/protocol_engine/types/partial_tip_configuration.py +76 -0
  169. opentrons-8.4.0/src/opentrons/protocol_engine/types/run_time_parameters.py +133 -0
  170. opentrons-8.4.0/src/opentrons/protocol_engine/types/tip.py +18 -0
  171. opentrons-8.4.0/src/opentrons/protocol_engine/types/util.py +21 -0
  172. opentrons-8.4.0/src/opentrons/protocol_engine/types/well_position.py +124 -0
  173. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/extract_labware_definitions.py +7 -3
  174. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/file_format_validator.py +5 -3
  175. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/json_translator.py +4 -2
  176. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/legacy_command_mapper.py +6 -2
  177. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/run_orchestrator.py +4 -1
  178. opentrons-8.4.0/src/opentrons/protocols/advanced_control/transfers/common.py +103 -0
  179. opentrons-8.4.0/src/opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +204 -0
  180. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/definitions.py +1 -1
  181. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/instrument.py +16 -3
  182. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/labware.py +27 -23
  183. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/simulate.py +4 -2
  184. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/types.py +20 -7
  185. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/logging_config.py +94 -25
  186. opentrons-8.4.0/src/opentrons/util/logging_queue_handler.py +61 -0
  187. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons.egg-info/PKG-INFO +4 -4
  188. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons.egg-info/SOURCES.txt +48 -7
  189. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons.egg-info/requires.txt +3 -3
  190. opentrons-8.3.2a0/src/opentrons/calibration_storage/ot3/models/defaults.py +0 -0
  191. opentrons-8.3.2a0/src/opentrons/drivers/asyncio/communication/errors.py +0 -45
  192. opentrons-8.3.2a0/src/opentrons/drivers/flex_stacker/__init__.py +0 -9
  193. opentrons-8.3.2a0/src/opentrons/drivers/flex_stacker/abstract.py +0 -89
  194. opentrons-8.3.2a0/src/opentrons/drivers/flex_stacker/driver.py +0 -260
  195. opentrons-8.3.2a0/src/opentrons/drivers/flex_stacker/simulator.py +0 -109
  196. opentrons-8.3.2a0/src/opentrons/drivers/flex_stacker/types.py +0 -138
  197. opentrons-8.3.2a0/src/opentrons/protocol_api/core/engine/instrument.py +0 -1105
  198. opentrons-8.3.2a0/src/opentrons/protocol_api/core/legacy/legacy_robot_core.py +0 -0
  199. opentrons-8.3.2a0/src/opentrons/protocol_engine/commands/generate_command_schema.py +0 -32
  200. opentrons-8.3.2a0/src/opentrons/protocol_engine/types.py +0 -1311
  201. opentrons-8.3.2a0/src/opentrons/protocols/advanced_control/transfers/common.py +0 -56
  202. opentrons-8.3.2a0/src/opentrons/protocols/models/__init__.py +0 -21
  203. {opentrons-8.3.2a0 → opentrons-8.4.0}/MANIFEST.in +0 -0
  204. {opentrons-8.3.2a0 → opentrons-8.4.0}/README.rst +0 -0
  205. {opentrons-8.3.2a0 → opentrons-8.4.0}/setup.cfg +0 -0
  206. {opentrons-8.3.2a0 → opentrons-8.4.0}/setup.py +0 -0
  207. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/__init__.py +0 -0
  208. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/_version.py +0 -0
  209. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/__init__.py +0 -0
  210. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/deck_configuration.py +0 -0
  211. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
  212. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/file_operators.py +0 -0
  213. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/helpers.py +0 -0
  214. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
  215. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
  216. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
  217. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/models/v1.py +0 -0
  218. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
  219. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
  220. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
  221. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
  222. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
  223. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/models/v1.py +0 -0
  224. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
  225. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
  226. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/calibration_storage/types.py +0 -0
  227. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/cli/__init__.py +0 -0
  228. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/cli/__main__.py +0 -0
  229. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/cli/analyze.py +0 -0
  230. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/__init__.py +0 -0
  231. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/defaults_ot2.py +0 -0
  232. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/defaults_ot3.py +0 -0
  233. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/gripper_config.py +0 -0
  234. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/robot_configs.py +0 -0
  235. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/config/types.py +0 -0
  236. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/__init__.py +0 -0
  237. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
  238. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
  239. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
  240. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
  241. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
  242. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
  243. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/asyncio/__init__.py +0 -0
  244. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/command_builder.py +0 -0
  245. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
  246. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
  247. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/heater_shaker/driver.py +0 -0
  248. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
  249. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
  250. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
  251. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/mag_deck/driver.py +0 -0
  252. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
  253. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
  254. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
  255. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
  256. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
  257. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
  258. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
  259. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
  260. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
  261. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/serial_communication.py +0 -0
  262. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
  263. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
  264. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
  265. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
  266. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
  267. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
  268. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
  269. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
  270. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
  271. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
  272. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/temp_deck/driver.py +0 -0
  273. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
  274. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
  275. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
  276. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/thermocycler/driver.py +0 -0
  277. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
  278. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/types.py +0 -0
  279. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/drivers/utils.py +0 -0
  280. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/__init__.py +0 -0
  281. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/__main__.py +0 -0
  282. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/adapters.py +0 -0
  283. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/__init__.py +0 -0
  284. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/controller.py +0 -0
  285. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/errors.py +0 -0
  286. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
  287. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/ot3utils.py +0 -0
  288. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/simulator.py +0 -0
  289. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
  290. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
  291. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/backends/types.py +0 -0
  292. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/constants.py +0 -0
  293. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/dev_types.py +0 -0
  294. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
  295. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
  296. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/app.py +0 -0
  297. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
  298. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/heater_shaker.py +0 -0
  299. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
  300. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
  301. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/module_server/client.py +0 -0
  302. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
  303. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
  304. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/module_server/server.py +0 -0
  305. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/parser.py +0 -0
  306. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
  307. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
  308. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
  309. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
  310. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
  311. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
  312. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/settings.py +0 -0
  313. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
  314. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
  315. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
  316. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
  317. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/types.py +0 -0
  318. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/emulation/util.py +0 -0
  319. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/errors.py +0 -0
  320. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/execution_manager.py +0 -0
  321. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
  322. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
  323. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
  324. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot2/pipette.py +0 -0
  325. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +0 -0
  326. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
  327. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot3/gripper.py +0 -0
  328. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
  329. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
  330. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/instruments/ot3/pipette.py +0 -0
  331. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/module_control.py +0 -0
  332. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/errors.py +0 -0
  333. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
  334. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/mod_abc.py +0 -0
  335. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
  336. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
  337. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/modules/update.py +0 -0
  338. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/nozzle_manager.py +0 -0
  339. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/ot3_calibration.py +0 -0
  340. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/pause_manager.py +0 -0
  341. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/poller.py +0 -0
  342. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
  343. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
  344. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
  345. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
  346. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
  347. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
  348. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
  349. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
  350. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
  351. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/gripper_controller.py +0 -0
  352. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/hardware_manager.py +0 -0
  353. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
  354. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
  355. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
  356. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/motion_controller.py +0 -0
  357. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
  358. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
  359. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
  360. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/protocols/types.py +0 -0
  361. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/robot_calibration.py +0 -0
  362. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
  363. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
  364. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/scripts/repl.py +0 -0
  365. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
  366. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/simulator_setup.py +0 -0
  367. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/thread_manager.py +0 -0
  368. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
  369. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/hardware_control/util.py +0 -0
  370. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_broker.py +0 -0
  371. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/__init__.py +0 -0
  372. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/module_commands.py +0 -0
  373. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
  374. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/legacy_commands/publisher.py +0 -0
  375. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/motion_planning/__init__.py +0 -0
  376. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
  377. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/motion_planning/deck_conflict.py +0 -0
  378. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/motion_planning/errors.py +0 -0
  379. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/motion_planning/types.py +0 -0
  380. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/motion_planning/waypoints.py +0 -0
  381. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/ordered_set.py +0 -0
  382. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
  383. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/_parameter_context.py +0 -0
  384. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/_parameters.py +0 -0
  385. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/_types.py +0 -0
  386. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/config.py +0 -0
  387. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/__init__.py +0 -0
  388. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/core_map.py +0 -0
  389. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
  390. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
  391. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
  392. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
  393. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/engine/robot.py +0 -0
  394. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
  395. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
  396. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
  397. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
  398. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
  399. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/robot.py +0 -0
  400. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/core/well_grid.py +0 -0
  401. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
  402. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/deck.py +0 -0
  403. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/disposal_locations.py +0 -0
  404. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
  405. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_api/robot_context.py +0 -0
  406. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
  407. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
  408. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
  409. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
  410. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
  411. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/clients/transports.py +0 -0
  412. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -0
  413. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +0 -0
  414. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -0
  415. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +0 -0
  416. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
  417. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +0 -0
  418. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +0 -0
  419. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +0 -0
  420. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +0 -0
  421. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/command.py +0 -0
  422. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/comment.py +0 -0
  423. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +0 -0
  424. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/custom.py +0 -0
  425. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +0 -0
  426. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/get_next_tip.py +0 -0
  427. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/get_tip_presence.py +0 -0
  428. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
  429. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
  430. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +0 -0
  431. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +0 -0
  432. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +0 -0
  433. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +0 -0
  434. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +0 -0
  435. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +0 -0
  436. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +0 -0
  437. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/home.py +0 -0
  438. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_liquid.py +0 -0
  439. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/load_liquid_class.py +0 -0
  440. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
  441. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +0 -0
  442. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +0 -0
  443. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/move_relative.py +0 -0
  444. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +0 -0
  445. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +0 -0
  446. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +0 -0
  447. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/movement_common.py +0 -0
  448. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/retract_axis.py +0 -0
  449. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -0
  450. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +0 -0
  451. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/common.py +0 -0
  452. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/move_axes_relative.py +0 -0
  453. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/move_axes_to.py +0 -0
  454. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/move_to.py +0 -0
  455. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +0 -0
  456. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/save_position.py +0 -0
  457. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/set_rail_lights.py +0 -0
  458. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/set_status_bar.py +0 -0
  459. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
  460. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +0 -0
  461. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +0 -0
  462. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +0 -0
  463. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
  464. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +0 -0
  465. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +0 -0
  466. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +0 -0
  467. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +0 -0
  468. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +0 -0
  469. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +0 -0
  470. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +0 -0
  471. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +0 -0
  472. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +0 -0
  473. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +0 -0
  474. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/touch_tip.py +0 -0
  475. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
  476. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +0 -0
  477. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
  478. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
  479. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +0 -0
  480. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +0 -0
  481. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/wait_for_duration.py +0 -0
  482. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/commands/wait_for_resume.py +0 -0
  483. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
  484. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/engine_support.py +0 -0
  485. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
  486. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/errors/error_occurrence.py +0 -0
  487. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
  488. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/command_executor.py +0 -0
  489. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
  490. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
  491. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
  492. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -0
  493. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
  494. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
  495. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/movement.py +0 -0
  496. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
  497. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
  498. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
  499. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
  500. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
  501. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
  502. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
  503. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/notes/notes.py +0 -0
  504. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/plugins.py +0 -0
  505. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
  506. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
  507. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
  508. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
  509. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/module_data_provider.py +0 -0
  510. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
  511. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +0 -0
  512. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/__init__.py +0 -0
  513. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
  514. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/_move_types.py +0 -0
  515. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/_well_math.py +0 -0
  516. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/command_history.py +0 -0
  517. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/commands.py +0 -0
  518. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/config.py +0 -0
  519. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/files.py +0 -0
  520. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/fluid_stack.py +0 -0
  521. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/liquid_classes.py +0 -0
  522. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/liquids.py +0 -0
  523. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
  524. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
  525. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
  526. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/motion.py +0 -0
  527. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_engine/state/state_summary.py +0 -0
  528. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/__init__.py +0 -0
  529. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/file_hasher.py +0 -0
  530. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/file_identifier.py +0 -0
  531. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
  532. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/input_file.py +0 -0
  533. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
  534. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
  535. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/protocol_source.py +0 -0
  536. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
  537. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/__init__.py +0 -0
  538. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
  539. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/json_file_reader.py +0 -0
  540. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
  541. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/protocol_runner.py +0 -0
  542. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/python_protocol_wrappers.py +0 -0
  543. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocol_runner/task_queue.py +0 -0
  544. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/__init__.py +0 -0
  545. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/advanced_control/__init__.py +0 -0
  546. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/advanced_control/common.py +0 -0
  547. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/advanced_control/mix.py +0 -0
  548. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
  549. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/advanced_control/transfers/transfer.py +0 -0
  550. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/__init__.py +0 -0
  551. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/constants.py +0 -0
  552. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/deck_type.py +0 -0
  553. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/labware_like.py +0 -0
  554. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
  555. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/types.py +0 -0
  556. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/api_support/util.py +0 -0
  557. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/bundle.py +0 -0
  558. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/duration/__init__.py +0 -0
  559. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/duration/errors.py +0 -0
  560. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/duration/estimator.py +0 -0
  561. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/__init__.py +0 -0
  562. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/dev_types.py +0 -0
  563. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/errors.py +0 -0
  564. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/execute.py +0 -0
  565. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
  566. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
  567. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
  568. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/execute_python.py +0 -0
  569. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
  570. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/execution/types.py +0 -0
  571. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/geometry/__init__.py +0 -0
  572. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
  573. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/geometry/planning.py +0 -0
  574. {opentrons-8.3.2a0/src/opentrons/protocols/parameters → opentrons-8.4.0/src/opentrons/protocols/models}/__init__.py +0 -0
  575. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/models/json_protocol.py +0 -0
  576. {opentrons-8.3.2a0/src/opentrons/tools → opentrons-8.4.0/src/opentrons/protocols/parameters}/__init__.py +0 -0
  577. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
  578. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
  579. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parameters/exceptions.py +0 -0
  580. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
  581. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parameters/types.py +0 -0
  582. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parameters/validation.py +0 -0
  583. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/parse.py +0 -0
  584. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/protocols/types.py +0 -0
  585. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/py.typed +0 -0
  586. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/resources/scripts/lpc21isp +0 -0
  587. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
  588. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/__init__.py +0 -0
  589. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/camera.py +0 -0
  590. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/log_control.py +0 -0
  591. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/nmcli.py +0 -0
  592. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/resin.py +0 -0
  593. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/smoothie_update.py +0 -0
  594. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/system/wifi.py +0 -0
  595. /opentrons-8.3.2a0/src/opentrons/calibration_storage/ot2/models/defaults.py → /opentrons-8.4.0/src/opentrons/tools/__init__.py +0 -0
  596. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/tools/args_handler.py +0 -0
  597. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/tools/write_pipette_memory.py +0 -0
  598. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/__init__.py +0 -0
  599. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/async_helpers.py +0 -0
  600. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/broker.py +0 -0
  601. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/change_notifier.py +0 -0
  602. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/entrypoint_util.py +0 -0
  603. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/get_union_elements.py +0 -0
  604. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/helpers.py +0 -0
  605. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/linal.py +0 -0
  606. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons/util/performance_helpers.py +0 -0
  607. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons.egg-info/dependency_links.txt +0 -0
  608. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons.egg-info/entry_points.txt +0 -0
  609. {opentrons-8.3.2a0 → opentrons-8.4.0}/src/opentrons.egg-info/not-zip-safe +0 -0
  610. {opentrons-8.3.2a0 → opentrons-8.4.0}/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.3.2a0
3
+ Version: 8.4.0
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.3.2a0
24
+ Requires-Dist: opentrons-shared-data==8.4.0
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.3.2a0; extra == "ot2-hardware"
38
+ Requires-Dist: opentrons-hardware==8.4.0; extra == "ot2-hardware"
39
39
  Provides-Extra: flex-hardware
40
- Requires-Dist: opentrons-hardware[FLEX]==8.3.2a0; extra == "flex-hardware"
40
+ Requires-Dist: opentrons-hardware[FLEX]==8.4.0; extra == "flex-hardware"
41
41
 
42
42
  .. _Full API Documentation: http://docs.opentrons.com
43
43
 
@@ -10,7 +10,9 @@ from .models import v1
10
10
  CalibrationType = typing.TypeVar(
11
11
  "CalibrationType",
12
12
  v1.PipetteOffsetCalibration,
13
+ v1.InstrumentOffsetModel,
13
14
  v1.TipLengthCalibration,
15
+ v1.TipLengthModel,
14
16
  v1.DeckCalibrationModel,
15
17
  )
16
18
 
@@ -16,7 +16,7 @@ from opentrons.util.helpers import utc_now
16
16
  from .models import v1
17
17
 
18
18
  if typing.TYPE_CHECKING:
19
- from opentrons_shared_data.labware.types import LabwareDefinition
19
+ from opentrons_shared_data.labware.types import LabwareDefinition2
20
20
 
21
21
 
22
22
  log = logging.getLogger(__name__)
@@ -78,7 +78,7 @@ def tip_lengths_for_pipette(
78
78
 
79
79
 
80
80
  def load_tip_length_calibration(
81
- pip_id: str, definition: "LabwareDefinition"
81
+ pip_id: str, definition: "LabwareDefinition2"
82
82
  ) -> v1.TipLengthModel:
83
83
  """
84
84
  Function used to grab the current tip length associated
@@ -127,7 +127,7 @@ def get_all_tip_length_calibrations() -> typing.List[v1.TipLengthCalibration]:
127
127
  return all_tip_lengths_available
128
128
 
129
129
 
130
- def get_custom_tiprack_definition_for_tlc(labware_uri: str) -> "LabwareDefinition":
130
+ def get_custom_tiprack_definition_for_tlc(labware_uri: str) -> "LabwareDefinition2":
131
131
  """
132
132
  Return the custom tiprack definition saved in the custom tiprack directory
133
133
  during tip length calibration
@@ -137,7 +137,7 @@ def get_custom_tiprack_definition_for_tlc(labware_uri: str) -> "LabwareDefinitio
137
137
  try:
138
138
  with open(custom_tiprack_path, "rb") as f:
139
139
  return typing.cast(
140
- "LabwareDefinition",
140
+ "LabwareDefinition2",
141
141
  json.loads(f.read().decode("utf-8")),
142
142
  )
143
143
  except FileNotFoundError:
@@ -213,7 +213,7 @@ def clear_tip_length_calibration() -> None:
213
213
 
214
214
 
215
215
  def create_tip_length_data(
216
- definition: "LabwareDefinition",
216
+ definition: "LabwareDefinition2",
217
217
  length: float,
218
218
  cal_status: typing.Optional[
219
219
  typing.Union[local_types.CalibrationStatus, v1.CalibrationStatus]
@@ -251,7 +251,7 @@ def create_tip_length_data(
251
251
 
252
252
  def _save_custom_tiprack_definition(
253
253
  labware_uri: str,
254
- definition: "LabwareDefinition",
254
+ definition: "LabwareDefinition2",
255
255
  ) -> None:
256
256
  namespace, load_name, version = labware_uri.split("/")
257
257
  custom_tr_dir_path = config.get_custom_tiprack_def_path()
@@ -222,17 +222,6 @@ settings = [
222
222
  robot_type=[RobotTypeEnum.OT2, RobotTypeEnum.FLEX],
223
223
  internal_only=True,
224
224
  ),
225
- SettingDefinition(
226
- _id="allowLiquidClasses",
227
- title="Allow the use of liquid classes",
228
- description=(
229
- "Do not enable."
230
- " This is an Opentrons internal setting to allow using in-development"
231
- " liquid classes."
232
- ),
233
- robot_type=[RobotTypeEnum.OT2, RobotTypeEnum.FLEX],
234
- internal_only=True,
235
- ),
236
225
  ]
237
226
 
238
227
 
@@ -736,6 +725,14 @@ def _migrate35to36(previous: SettingsMap) -> SettingsMap:
736
725
  return newmap
737
726
 
738
727
 
728
+ def _migrate36to37(previous: SettingsMap) -> SettingsMap:
729
+ """Migrate to version 37 of the feature flags file.
730
+
731
+ - Removes the allowLiquidClasses flag.
732
+ """
733
+ return {k: v for k, v in previous.items() if "allowLiquidClasses" != k}
734
+
735
+
739
736
  _MIGRATIONS = [
740
737
  _migrate0to1,
741
738
  _migrate1to2,
@@ -773,6 +770,7 @@ _MIGRATIONS = [
773
770
  _migrate33to34,
774
771
  _migrate34to35,
775
772
  _migrate35to36,
773
+ _migrate36to37,
776
774
  ]
777
775
  """
778
776
  List of all migrations to apply, indexed by (version - 1). See _migrate below
@@ -78,7 +78,3 @@ def enable_performance_metrics(robot_type: RobotTypeEnum) -> bool:
78
78
 
79
79
  def oem_mode_enabled() -> bool:
80
80
  return advs.get_setting_with_env_overload("enableOEMMode", RobotTypeEnum.FLEX)
81
-
82
-
83
- def allow_liquid_classes(robot_type: RobotTypeEnum) -> bool:
84
- return advs.get_setting_with_env_overload("allowLiquidClasses", robot_type)
@@ -90,8 +90,13 @@ _settings_reset_options = {
90
90
  # This option is defined here only as a convenience for robot-server.
91
91
  # Find a way to split things up and define this in robot-server instead.
92
92
  ResetOptionId.runs_history: CommonResetOption(
93
- name="Clear Runs History",
94
- description="Erase this device's stored history of protocols and runs.",
93
+ name="Clear Robot Server Data",
94
+ description=(
95
+ "Erase everything stored by the robot server. This is *not* everything stored"
96
+ " on the robot. It currently includes runs, protocols, labware offsets, and more,"
97
+ " and the exact list may change over time. This is exposed for troubleshooting"
98
+ " and system recovery. The name `runsHistory` is a misnomer, for historical reasons."
99
+ ),
95
100
  ),
96
101
  ResetOptionId.on_device_display: CommonResetOption(
97
102
  name="On-Device Display Configuration",
@@ -5,6 +5,7 @@ from opentrons.drivers.asyncio.communication.errors import (
5
5
  AlarmResponse,
6
6
  ErrorResponse,
7
7
  UnhandledGcode,
8
+ DefaultErrorCodes,
8
9
  )
9
10
  from .async_serial import AsyncSerial
10
11
 
@@ -17,4 +18,5 @@ __all__ = [
17
18
  "AlarmResponse",
18
19
  "ErrorResponse",
19
20
  "UnhandledGcode",
21
+ "DefaultErrorCodes",
20
22
  ]
@@ -155,6 +155,10 @@ class AsyncSerial:
155
155
  """Reset the input buffer"""
156
156
  self._serial.reset_input_buffer()
157
157
 
158
+ def reset_output_buffer(self) -> None:
159
+ """Reset the output buffer"""
160
+ self._serial.reset_output_buffer()
161
+
158
162
  @contextlib.asynccontextmanager
159
163
  async def timeout_override(
160
164
  self, timeout_property: TimeoutProperties, timeout: Optional[float]
@@ -0,0 +1,78 @@
1
+ """Errors raised by serial connection."""
2
+
3
+ from enum import Enum
4
+ from typing import Dict, Type, Optional
5
+
6
+
7
+ class SerialException(Exception):
8
+ """Base serial exception"""
9
+
10
+ def __init__(self, port: str, description: str) -> None:
11
+ super().__init__(f"{port}: {description}")
12
+ self.port = port
13
+ self.description = description
14
+
15
+
16
+ class NoResponse(SerialException):
17
+ def __init__(self, port: str, command: str) -> None:
18
+ super().__init__(port=port, description=f"No response to '{command}'")
19
+ self.command = command
20
+
21
+
22
+ class FailedCommand(SerialException):
23
+ def __init__(self, port: str, response: str) -> None:
24
+ super().__init__(
25
+ port=port, description=f"'Received error response '{response}'"
26
+ )
27
+ self.response = response
28
+
29
+
30
+ class AlarmResponse(FailedCommand):
31
+ pass
32
+
33
+
34
+ class ErrorResponse(FailedCommand):
35
+ def __init__(self, port: str, response: str, command: Optional[str] = None) -> None:
36
+ super().__init__(port, response)
37
+ self.command = command
38
+
39
+
40
+ class UnhandledGcode(ErrorResponse):
41
+ def __init__(self, port: str, response: str, command: str) -> None:
42
+ super().__init__(port, response, command)
43
+
44
+
45
+ class BaseErrorCode(Enum):
46
+ """Base class for error code enums.
47
+
48
+ This class should be inherited to define specific sets of error codes.
49
+ """
50
+
51
+ @property
52
+ def code_string(self) -> str:
53
+ """Return the error code string."""
54
+ code: str = self.value[0]
55
+ return code.lower()
56
+
57
+ @property
58
+ def exception(self) -> Type[ErrorResponse]:
59
+ """Return the exception class associated with this error code."""
60
+ exc: Type[ErrorResponse] = self.value[1]
61
+ return exc
62
+
63
+ def raise_exception(self, port: str, response: str, command: str) -> None:
64
+ """Raise the appropriate exception for this error code."""
65
+ raise self.exception(port=port, response=response, command=command)
66
+
67
+ @classmethod
68
+ def get_error_codes(cls) -> Dict[str, "BaseErrorCode"]:
69
+ """Get all error codes as a dictionary mapping code string to ErrorCode instance."""
70
+ return {code.code_string: code for code in cls}
71
+
72
+
73
+ class DefaultErrorCodes(BaseErrorCode):
74
+ """
75
+ Default error codes that are previously handled by the SerialConnection class.
76
+ """
77
+
78
+ UNHANDLED_GCODE = ("ERR003", UnhandledGcode)
@@ -2,11 +2,17 @@ from __future__ import annotations
2
2
 
3
3
  import asyncio
4
4
  import logging
5
- from typing import Optional, List
5
+ from typing import Optional, List, Type
6
6
 
7
7
  from opentrons.drivers.command_builder import CommandBuilder
8
8
 
9
- from .errors import NoResponse, AlarmResponse, ErrorResponse, UnhandledGcode, ErrorCodes
9
+ from .errors import (
10
+ NoResponse,
11
+ AlarmResponse,
12
+ ErrorResponse,
13
+ BaseErrorCode,
14
+ DefaultErrorCodes,
15
+ )
10
16
  from .async_serial import AsyncSerial
11
17
 
12
18
  log = logging.getLogger(__name__)
@@ -43,7 +49,8 @@ class SerialConnection:
43
49
  error_keyword: Optional[str] = None,
44
50
  alarm_keyword: Optional[str] = None,
45
51
  reset_buffer_before_write: bool = False,
46
- ) -> SerialConnection:
52
+ error_codes: Type[BaseErrorCode] = DefaultErrorCodes,
53
+ ) -> "SerialConnection":
47
54
  """
48
55
  Create a connection.
49
56
 
@@ -63,6 +70,8 @@ class SerialConnection:
63
70
  (default: alarm)
64
71
  reset_buffer_before_write: whether to reset the read buffer before
65
72
  every write
73
+ error_codes: Enum class for error codes
74
+ (default: DefaultErrorCodes)
66
75
 
67
76
  Returns: SerialConnection
68
77
  """
@@ -82,6 +91,7 @@ class SerialConnection:
82
91
  retry_wait_time_seconds=retry_wait_time_seconds,
83
92
  error_keyword=error_keyword or "error",
84
93
  alarm_keyword=alarm_keyword or "alarm",
94
+ error_codes=error_codes,
85
95
  )
86
96
 
87
97
  def __init__(
@@ -93,6 +103,7 @@ class SerialConnection:
93
103
  retry_wait_time_seconds: float,
94
104
  error_keyword: str,
95
105
  alarm_keyword: str,
106
+ error_codes: Type[BaseErrorCode] = DefaultErrorCodes,
96
107
  ) -> None:
97
108
  """
98
109
  Constructor
@@ -107,6 +118,7 @@ class SerialConnection:
107
118
  exception when detected
108
119
  alarm_keyword: string that will cause an AlarmResponse
109
120
  exception when detected
121
+ error_codes: Enum class for error codes
110
122
  """
111
123
  self._serial = serial
112
124
  self._port = port
@@ -116,6 +128,7 @@ class SerialConnection:
116
128
  self._send_data_lock = asyncio.Lock()
117
129
  self._error_keyword = error_keyword.lower()
118
130
  self._alarm_keyword = alarm_keyword.lower()
131
+ self._error_codes = error_codes
119
132
 
120
133
  async def send_command(
121
134
  self, command: CommandBuilder, retries: int = 0, timeout: Optional[float] = None
@@ -237,8 +250,8 @@ class SerialConnection:
237
250
  Raise an error if the response contains an error
238
251
 
239
252
  Args:
240
- gcode: the requesting gocde
241
253
  response: response
254
+ request: the requesting command
242
255
 
243
256
  Returns: None
244
257
 
@@ -250,12 +263,16 @@ class SerialConnection:
250
263
  raise AlarmResponse(port=self._port, response=response)
251
264
 
252
265
  if self._error_keyword.lower() in lower:
253
- if ErrorCodes.UNHANDLED_GCODE.value.lower() in lower:
254
- raise UnhandledGcode(
255
- port=self._port, response=response, command=request
256
- )
257
- else:
258
- raise ErrorResponse(port=self._port, response=response)
266
+ # Check for specific error codes
267
+ error_codes_dict = self._error_codes.get_error_codes()
268
+ for code, error_code in error_codes_dict.items():
269
+ if code in lower:
270
+ error_code.raise_exception(
271
+ port=self._port, response=response, command=request
272
+ )
273
+
274
+ # If no specific error code was found, raise a generic ErrorResponse
275
+ raise ErrorResponse(port=self._port, response=response)
259
276
 
260
277
  async def on_retry(self) -> None:
261
278
  """
@@ -297,6 +314,7 @@ class AsyncResponseSerialConnection(SerialConnection):
297
314
  error_keyword: Optional[str] = None,
298
315
  alarm_keyword: Optional[str] = None,
299
316
  reset_buffer_before_write: bool = False,
317
+ error_codes: Type[BaseErrorCode] = DefaultErrorCodes,
300
318
  async_error_ack: Optional[str] = None,
301
319
  number_of_retries: int = 0,
302
320
  ) -> AsyncResponseSerialConnection:
@@ -321,6 +339,9 @@ class AsyncResponseSerialConnection(SerialConnection):
321
339
  every write
322
340
  async_error_ack: optional string that will indicate an asynchronous
323
341
  error when detected (default: async)
342
+ number_of_retries: default number of retries
343
+ error_codes: Enum class for error codes
344
+ (default: DefaultErrorCodes)
324
345
 
325
346
  Returns: AsyncResponseSerialConnection
326
347
  """
@@ -342,6 +363,7 @@ class AsyncResponseSerialConnection(SerialConnection):
342
363
  alarm_keyword=alarm_keyword or "alarm",
343
364
  async_error_ack=async_error_ack or "async",
344
365
  number_of_retries=number_of_retries,
366
+ error_codes=error_codes,
345
367
  )
346
368
 
347
369
  def __init__(
@@ -355,6 +377,7 @@ class AsyncResponseSerialConnection(SerialConnection):
355
377
  alarm_keyword: str,
356
378
  async_error_ack: str,
357
379
  number_of_retries: int = 0,
380
+ error_codes: Type[BaseErrorCode] = DefaultErrorCodes,
358
381
  ) -> None:
359
382
  """
360
383
  Constructor
@@ -371,6 +394,8 @@ class AsyncResponseSerialConnection(SerialConnection):
371
394
  exception when detected
372
395
  async_error_ack: string that will indicate an asynchronous
373
396
  error when detected
397
+ number_of_retries: default number of retries
398
+ error_codes: Enum class for error codes
374
399
  """
375
400
  super().__init__(
376
401
  serial=serial,
@@ -380,6 +405,7 @@ class AsyncResponseSerialConnection(SerialConnection):
380
405
  retry_wait_time_seconds=retry_wait_time_seconds,
381
406
  error_keyword=error_keyword,
382
407
  alarm_keyword=alarm_keyword,
408
+ error_codes=error_codes,
383
409
  )
384
410
  self._serial = serial
385
411
  self._port = port
@@ -0,0 +1,15 @@
1
+ from .abstract import AbstractFlexStackerDriver
2
+ from .driver import FlexStackerDriver, STACKER_MOTION_CONFIG, STALLGUARD_CONFIG
3
+ from .simulator import SimulatingDriver
4
+ from . import types as FlexStackerTypes
5
+ from . import utils as FlexStackerUtils
6
+
7
+ __all__ = [
8
+ "AbstractFlexStackerDriver",
9
+ "FlexStackerDriver",
10
+ "SimulatingDriver",
11
+ "FlexStackerTypes",
12
+ "FlexStackerUtils",
13
+ "STACKER_MOTION_CONFIG",
14
+ "STALLGUARD_CONFIG",
15
+ ]
@@ -0,0 +1,214 @@
1
+ from typing import List, Optional, Protocol
2
+
3
+ from .types import (
4
+ ActiveRange,
5
+ LEDPattern,
6
+ LimitSwitchStatus,
7
+ MeasurementKind,
8
+ MoveResult,
9
+ SpadMapID,
10
+ StackerAxis,
11
+ PlatformStatus,
12
+ Direction,
13
+ MoveParams,
14
+ StackerInfo,
15
+ LEDColor,
16
+ StallGuardParams,
17
+ TOFConfiguration,
18
+ TOFMeasurement,
19
+ TOFMeasurementResult,
20
+ TOFSensor,
21
+ TOFSensorStatus,
22
+ )
23
+
24
+
25
+ class AbstractFlexStackerDriver(Protocol):
26
+ """Protocol for the Stacker driver."""
27
+
28
+ async def connect(self) -> None:
29
+ """Connect to stacker."""
30
+ ...
31
+
32
+ async def disconnect(self) -> None:
33
+ """Disconnect from stacker."""
34
+ ...
35
+
36
+ async def is_connected(self) -> bool:
37
+ """Check connection to stacker."""
38
+ ...
39
+
40
+ async def get_device_info(self) -> StackerInfo:
41
+ """Get Device Info."""
42
+ ...
43
+
44
+ async def set_serial_number(self, sn: str) -> None:
45
+ """Set Serial Number."""
46
+ ...
47
+
48
+ async def enable_motors(self, axis: List[StackerAxis]) -> None:
49
+ """Enables the axis motor if present, disables it otherwise."""
50
+ ...
51
+
52
+ async def stop_motors(self) -> None:
53
+ """Stop all motor movement."""
54
+ ...
55
+
56
+ async def set_run_current(self, axis: StackerAxis, current: float) -> None:
57
+ """Set axis peak run current in amps."""
58
+ ...
59
+
60
+ async def set_ihold_current(self, axis: StackerAxis, current: float) -> None:
61
+ """Set axis hold current in amps."""
62
+ ...
63
+
64
+ async def set_stallguard_threshold(
65
+ self, axis: StackerAxis, enable: bool, threshold: int
66
+ ) -> None:
67
+ """Enables and sets the stallguard threshold for the given axis motor."""
68
+ ...
69
+
70
+ async def enable_tof_sensor(self, sensor: TOFSensor, enable: bool) -> None:
71
+ """Enable or disable the TOF sensor."""
72
+ ...
73
+
74
+ async def manage_tof_measurement(
75
+ self,
76
+ sensor: TOFSensor,
77
+ kind: MeasurementKind = MeasurementKind.HISTOGRAM,
78
+ start: bool = True,
79
+ ) -> TOFMeasurement:
80
+ """Start or stop Measurements from the TOF sensor."""
81
+ ...
82
+
83
+ async def get_tof_histogram(self, sensor: TOFSensor) -> TOFMeasurementResult:
84
+ """Get the full histogram measurement from the TOF sensor."""
85
+ ...
86
+
87
+ async def set_tof_configuration(
88
+ self,
89
+ sensor: TOFSensor,
90
+ spad_map_id: SpadMapID,
91
+ active_range: Optional[ActiveRange] = None,
92
+ kilo_iterations: Optional[int] = None,
93
+ report_period_ms: Optional[int] = None,
94
+ histogram_dump: Optional[bool] = None,
95
+ ) -> None:
96
+ """Set the configuration of the TOF sensor.
97
+
98
+ :param sensor: The TOF sensor to configure.
99
+ :param spad_map_id: The pre-defined SPAD map which sets the fov and focus area (14 default).
100
+ :active_range: The operating mode Short-range high-accuracy (default) or long range.
101
+ :kilo_iterations: The Measurement iterations times 1024 (4000 default).
102
+ :report_period_ms: The reporting period before each measurement (500 default).
103
+ :histogram_dump: Enables/Disables histogram measurements (True default).
104
+ :return: None
105
+ """
106
+ ...
107
+
108
+ async def get_tof_configuration(self, sensor: TOFSensor) -> TOFConfiguration:
109
+ """Get the configuration of the TOF sensor."""
110
+ ...
111
+
112
+ async def set_motor_driver_register(
113
+ self, axis: StackerAxis, reg: int, value: int
114
+ ) -> None:
115
+ """Set the register of the given motor axis driver to the given value."""
116
+ ...
117
+
118
+ async def get_motor_driver_register(self, axis: StackerAxis, reg: int) -> int:
119
+ """Gets the register value of the given motor axis driver."""
120
+ ...
121
+
122
+ async def set_tof_driver_register(
123
+ self, sensor: TOFSensor, reg: int, value: int
124
+ ) -> None:
125
+ """Set the register of the given tof sensor driver to the given value."""
126
+ ...
127
+
128
+ async def get_tof_driver_register(self, sensor: TOFSensor, reg: int) -> int:
129
+ """Gets the register value of the given tof sensor driver."""
130
+ ...
131
+
132
+ async def get_tof_sensor_status(self, sensor: TOFSensor) -> TOFSensorStatus:
133
+ """Get the status of the tof sensor."""
134
+ ...
135
+
136
+ async def get_motion_params(self, axis: StackerAxis) -> MoveParams:
137
+ """Get the motion parameters used by the given axis motor."""
138
+ ...
139
+
140
+ async def get_stallguard_threshold(self, axis: StackerAxis) -> StallGuardParams:
141
+ """Get the stallguard parameters by the given axis motor."""
142
+ ...
143
+
144
+ async def get_limit_switch(self, axis: StackerAxis, direction: Direction) -> bool:
145
+ """Get limit switch status.
146
+
147
+ :return: True if limit switch is triggered, False otherwise
148
+ """
149
+ ...
150
+
151
+ async def get_limit_switches_status(self) -> LimitSwitchStatus:
152
+ """Get limit switch statuses for all axes."""
153
+ ...
154
+
155
+ async def get_platform_sensor(self, direction: Direction) -> bool:
156
+ """Get platform sensor status.
157
+
158
+ :return: True if platform is present, False otherwise
159
+ """
160
+ ...
161
+
162
+ async def get_platform_status(self) -> PlatformStatus:
163
+ """Get platform status."""
164
+ ...
165
+
166
+ async def get_hopper_door_closed(self) -> bool:
167
+ """Get whether or not door is closed.
168
+
169
+ :return: True if door is closed, False otherwise
170
+ """
171
+ ...
172
+
173
+ async def get_installation_detected(self) -> bool:
174
+ """Get whether or not installation is detected.
175
+
176
+ :return: True if installation is detected, False otherwise
177
+ """
178
+ ...
179
+
180
+ async def move_in_mm(
181
+ self, axis: StackerAxis, distance: float, params: MoveParams | None = None
182
+ ) -> MoveResult:
183
+ """Move axis by the given distance in mm."""
184
+ ...
185
+
186
+ async def move_to_limit_switch(
187
+ self, axis: StackerAxis, direction: Direction, params: MoveParams | None = None
188
+ ) -> MoveResult:
189
+ """Move until limit switch is triggered."""
190
+ ...
191
+
192
+ async def home_axis(self, axis: StackerAxis, direction: Direction) -> MoveResult:
193
+ """Home axis."""
194
+ ...
195
+
196
+ async def set_led(
197
+ self,
198
+ power: float,
199
+ color: Optional[LEDColor] = None,
200
+ external: Optional[bool] = None,
201
+ pattern: Optional[LEDPattern] = None,
202
+ duration: Optional[int] = None,
203
+ reps: Optional[int] = None,
204
+ ) -> None:
205
+ """Set LED Status bar color and pattern."""
206
+ ...
207
+
208
+ async def enter_programming_mode(self) -> None:
209
+ """Reboot into programming mode"""
210
+ ...
211
+
212
+ def reset_serial_buffers(self) -> None:
213
+ """Reset the input and output serial buffers."""
214
+ ...