opentrons 8.6.0a1__py3-none-any.whl

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 (600) hide show
  1. opentrons/__init__.py +150 -0
  2. opentrons/_version.py +34 -0
  3. opentrons/calibration_storage/__init__.py +54 -0
  4. opentrons/calibration_storage/deck_configuration.py +62 -0
  5. opentrons/calibration_storage/encoder_decoder.py +31 -0
  6. opentrons/calibration_storage/file_operators.py +142 -0
  7. opentrons/calibration_storage/helpers.py +103 -0
  8. opentrons/calibration_storage/ot2/__init__.py +34 -0
  9. opentrons/calibration_storage/ot2/deck_attitude.py +85 -0
  10. opentrons/calibration_storage/ot2/mark_bad_calibration.py +27 -0
  11. opentrons/calibration_storage/ot2/models/__init__.py +0 -0
  12. opentrons/calibration_storage/ot2/models/v1.py +149 -0
  13. opentrons/calibration_storage/ot2/pipette_offset.py +129 -0
  14. opentrons/calibration_storage/ot2/tip_length.py +281 -0
  15. opentrons/calibration_storage/ot3/__init__.py +31 -0
  16. opentrons/calibration_storage/ot3/deck_attitude.py +83 -0
  17. opentrons/calibration_storage/ot3/gripper_offset.py +156 -0
  18. opentrons/calibration_storage/ot3/models/__init__.py +0 -0
  19. opentrons/calibration_storage/ot3/models/v1.py +122 -0
  20. opentrons/calibration_storage/ot3/module_offset.py +138 -0
  21. opentrons/calibration_storage/ot3/pipette_offset.py +95 -0
  22. opentrons/calibration_storage/types.py +45 -0
  23. opentrons/cli/__init__.py +21 -0
  24. opentrons/cli/__main__.py +5 -0
  25. opentrons/cli/analyze.py +501 -0
  26. opentrons/config/__init__.py +631 -0
  27. opentrons/config/advanced_settings.py +871 -0
  28. opentrons/config/defaults_ot2.py +214 -0
  29. opentrons/config/defaults_ot3.py +499 -0
  30. opentrons/config/feature_flags.py +86 -0
  31. opentrons/config/gripper_config.py +55 -0
  32. opentrons/config/reset.py +203 -0
  33. opentrons/config/robot_configs.py +187 -0
  34. opentrons/config/types.py +183 -0
  35. opentrons/drivers/__init__.py +0 -0
  36. opentrons/drivers/absorbance_reader/__init__.py +11 -0
  37. opentrons/drivers/absorbance_reader/abstract.py +72 -0
  38. opentrons/drivers/absorbance_reader/async_byonoy.py +352 -0
  39. opentrons/drivers/absorbance_reader/driver.py +81 -0
  40. opentrons/drivers/absorbance_reader/hid_protocol.py +161 -0
  41. opentrons/drivers/absorbance_reader/simulator.py +84 -0
  42. opentrons/drivers/asyncio/__init__.py +0 -0
  43. opentrons/drivers/asyncio/communication/__init__.py +22 -0
  44. opentrons/drivers/asyncio/communication/async_serial.py +183 -0
  45. opentrons/drivers/asyncio/communication/errors.py +88 -0
  46. opentrons/drivers/asyncio/communication/serial_connection.py +552 -0
  47. opentrons/drivers/command_builder.py +102 -0
  48. opentrons/drivers/flex_stacker/__init__.py +13 -0
  49. opentrons/drivers/flex_stacker/abstract.py +214 -0
  50. opentrons/drivers/flex_stacker/driver.py +768 -0
  51. opentrons/drivers/flex_stacker/errors.py +68 -0
  52. opentrons/drivers/flex_stacker/simulator.py +309 -0
  53. opentrons/drivers/flex_stacker/types.py +367 -0
  54. opentrons/drivers/flex_stacker/utils.py +19 -0
  55. opentrons/drivers/heater_shaker/__init__.py +5 -0
  56. opentrons/drivers/heater_shaker/abstract.py +76 -0
  57. opentrons/drivers/heater_shaker/driver.py +204 -0
  58. opentrons/drivers/heater_shaker/simulator.py +94 -0
  59. opentrons/drivers/mag_deck/__init__.py +6 -0
  60. opentrons/drivers/mag_deck/abstract.py +44 -0
  61. opentrons/drivers/mag_deck/driver.py +208 -0
  62. opentrons/drivers/mag_deck/simulator.py +63 -0
  63. opentrons/drivers/rpi_drivers/__init__.py +33 -0
  64. opentrons/drivers/rpi_drivers/dev_types.py +94 -0
  65. opentrons/drivers/rpi_drivers/gpio.py +282 -0
  66. opentrons/drivers/rpi_drivers/gpio_simulator.py +127 -0
  67. opentrons/drivers/rpi_drivers/interfaces.py +15 -0
  68. opentrons/drivers/rpi_drivers/types.py +364 -0
  69. opentrons/drivers/rpi_drivers/usb.py +102 -0
  70. opentrons/drivers/rpi_drivers/usb_simulator.py +22 -0
  71. opentrons/drivers/serial_communication.py +151 -0
  72. opentrons/drivers/smoothie_drivers/__init__.py +4 -0
  73. opentrons/drivers/smoothie_drivers/connection.py +51 -0
  74. opentrons/drivers/smoothie_drivers/constants.py +121 -0
  75. opentrons/drivers/smoothie_drivers/driver_3_0.py +1933 -0
  76. opentrons/drivers/smoothie_drivers/errors.py +49 -0
  77. opentrons/drivers/smoothie_drivers/parse_utils.py +143 -0
  78. opentrons/drivers/smoothie_drivers/simulator.py +99 -0
  79. opentrons/drivers/smoothie_drivers/types.py +16 -0
  80. opentrons/drivers/temp_deck/__init__.py +10 -0
  81. opentrons/drivers/temp_deck/abstract.py +54 -0
  82. opentrons/drivers/temp_deck/driver.py +197 -0
  83. opentrons/drivers/temp_deck/simulator.py +57 -0
  84. opentrons/drivers/thermocycler/__init__.py +12 -0
  85. opentrons/drivers/thermocycler/abstract.py +99 -0
  86. opentrons/drivers/thermocycler/driver.py +395 -0
  87. opentrons/drivers/thermocycler/simulator.py +126 -0
  88. opentrons/drivers/types.py +107 -0
  89. opentrons/drivers/utils.py +222 -0
  90. opentrons/execute.py +742 -0
  91. opentrons/hardware_control/__init__.py +65 -0
  92. opentrons/hardware_control/__main__.py +77 -0
  93. opentrons/hardware_control/adapters.py +98 -0
  94. opentrons/hardware_control/api.py +1347 -0
  95. opentrons/hardware_control/backends/__init__.py +7 -0
  96. opentrons/hardware_control/backends/controller.py +400 -0
  97. opentrons/hardware_control/backends/errors.py +9 -0
  98. opentrons/hardware_control/backends/estop_state.py +164 -0
  99. opentrons/hardware_control/backends/flex_protocol.py +497 -0
  100. opentrons/hardware_control/backends/ot3controller.py +1930 -0
  101. opentrons/hardware_control/backends/ot3simulator.py +900 -0
  102. opentrons/hardware_control/backends/ot3utils.py +664 -0
  103. opentrons/hardware_control/backends/simulator.py +442 -0
  104. opentrons/hardware_control/backends/status_bar_state.py +240 -0
  105. opentrons/hardware_control/backends/subsystem_manager.py +431 -0
  106. opentrons/hardware_control/backends/tip_presence_manager.py +173 -0
  107. opentrons/hardware_control/backends/types.py +14 -0
  108. opentrons/hardware_control/constants.py +6 -0
  109. opentrons/hardware_control/dev_types.py +125 -0
  110. opentrons/hardware_control/emulation/__init__.py +0 -0
  111. opentrons/hardware_control/emulation/abstract_emulator.py +21 -0
  112. opentrons/hardware_control/emulation/app.py +56 -0
  113. opentrons/hardware_control/emulation/connection_handler.py +38 -0
  114. opentrons/hardware_control/emulation/heater_shaker.py +150 -0
  115. opentrons/hardware_control/emulation/magdeck.py +60 -0
  116. opentrons/hardware_control/emulation/module_server/__init__.py +8 -0
  117. opentrons/hardware_control/emulation/module_server/client.py +78 -0
  118. opentrons/hardware_control/emulation/module_server/helpers.py +130 -0
  119. opentrons/hardware_control/emulation/module_server/models.py +31 -0
  120. opentrons/hardware_control/emulation/module_server/server.py +110 -0
  121. opentrons/hardware_control/emulation/parser.py +74 -0
  122. opentrons/hardware_control/emulation/proxy.py +241 -0
  123. opentrons/hardware_control/emulation/run_emulator.py +68 -0
  124. opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
  125. opentrons/hardware_control/emulation/scripts/run_app.py +54 -0
  126. opentrons/hardware_control/emulation/scripts/run_module_emulator.py +72 -0
  127. opentrons/hardware_control/emulation/scripts/run_smoothie.py +37 -0
  128. opentrons/hardware_control/emulation/settings.py +119 -0
  129. opentrons/hardware_control/emulation/simulations.py +133 -0
  130. opentrons/hardware_control/emulation/smoothie.py +192 -0
  131. opentrons/hardware_control/emulation/tempdeck.py +69 -0
  132. opentrons/hardware_control/emulation/thermocycler.py +128 -0
  133. opentrons/hardware_control/emulation/types.py +10 -0
  134. opentrons/hardware_control/emulation/util.py +38 -0
  135. opentrons/hardware_control/errors.py +43 -0
  136. opentrons/hardware_control/execution_manager.py +164 -0
  137. opentrons/hardware_control/instruments/__init__.py +5 -0
  138. opentrons/hardware_control/instruments/instrument_abc.py +39 -0
  139. opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
  140. opentrons/hardware_control/instruments/ot2/instrument_calibration.py +152 -0
  141. opentrons/hardware_control/instruments/ot2/pipette.py +777 -0
  142. opentrons/hardware_control/instruments/ot2/pipette_handler.py +995 -0
  143. opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
  144. opentrons/hardware_control/instruments/ot3/gripper.py +420 -0
  145. opentrons/hardware_control/instruments/ot3/gripper_handler.py +173 -0
  146. opentrons/hardware_control/instruments/ot3/instrument_calibration.py +214 -0
  147. opentrons/hardware_control/instruments/ot3/pipette.py +858 -0
  148. opentrons/hardware_control/instruments/ot3/pipette_handler.py +1030 -0
  149. opentrons/hardware_control/module_control.py +332 -0
  150. opentrons/hardware_control/modules/__init__.py +69 -0
  151. opentrons/hardware_control/modules/absorbance_reader.py +373 -0
  152. opentrons/hardware_control/modules/errors.py +7 -0
  153. opentrons/hardware_control/modules/flex_stacker.py +948 -0
  154. opentrons/hardware_control/modules/heater_shaker.py +426 -0
  155. opentrons/hardware_control/modules/lid_temp_status.py +35 -0
  156. opentrons/hardware_control/modules/magdeck.py +233 -0
  157. opentrons/hardware_control/modules/mod_abc.py +245 -0
  158. opentrons/hardware_control/modules/module_calibration.py +93 -0
  159. opentrons/hardware_control/modules/plate_temp_status.py +61 -0
  160. opentrons/hardware_control/modules/tempdeck.py +299 -0
  161. opentrons/hardware_control/modules/thermocycler.py +731 -0
  162. opentrons/hardware_control/modules/types.py +417 -0
  163. opentrons/hardware_control/modules/update.py +255 -0
  164. opentrons/hardware_control/modules/utils.py +73 -0
  165. opentrons/hardware_control/motion_utilities.py +318 -0
  166. opentrons/hardware_control/nozzle_manager.py +422 -0
  167. opentrons/hardware_control/ot3_calibration.py +1171 -0
  168. opentrons/hardware_control/ot3api.py +3227 -0
  169. opentrons/hardware_control/pause_manager.py +31 -0
  170. opentrons/hardware_control/poller.py +112 -0
  171. opentrons/hardware_control/protocols/__init__.py +106 -0
  172. opentrons/hardware_control/protocols/asyncio_configurable.py +11 -0
  173. opentrons/hardware_control/protocols/calibratable.py +45 -0
  174. opentrons/hardware_control/protocols/chassis_accessory_manager.py +90 -0
  175. opentrons/hardware_control/protocols/configurable.py +48 -0
  176. opentrons/hardware_control/protocols/event_sourcer.py +18 -0
  177. opentrons/hardware_control/protocols/execution_controllable.py +33 -0
  178. opentrons/hardware_control/protocols/flex_calibratable.py +96 -0
  179. opentrons/hardware_control/protocols/flex_instrument_configurer.py +52 -0
  180. opentrons/hardware_control/protocols/gripper_controller.py +55 -0
  181. opentrons/hardware_control/protocols/hardware_manager.py +51 -0
  182. opentrons/hardware_control/protocols/identifiable.py +16 -0
  183. opentrons/hardware_control/protocols/instrument_configurer.py +206 -0
  184. opentrons/hardware_control/protocols/liquid_handler.py +266 -0
  185. opentrons/hardware_control/protocols/module_provider.py +16 -0
  186. opentrons/hardware_control/protocols/motion_controller.py +243 -0
  187. opentrons/hardware_control/protocols/position_estimator.py +45 -0
  188. opentrons/hardware_control/protocols/simulatable.py +10 -0
  189. opentrons/hardware_control/protocols/stoppable.py +9 -0
  190. opentrons/hardware_control/protocols/types.py +27 -0
  191. opentrons/hardware_control/robot_calibration.py +224 -0
  192. opentrons/hardware_control/scripts/README.md +28 -0
  193. opentrons/hardware_control/scripts/__init__.py +1 -0
  194. opentrons/hardware_control/scripts/gripper_control.py +208 -0
  195. opentrons/hardware_control/scripts/ot3gripper +7 -0
  196. opentrons/hardware_control/scripts/ot3repl +7 -0
  197. opentrons/hardware_control/scripts/repl.py +187 -0
  198. opentrons/hardware_control/scripts/tc_control.py +97 -0
  199. opentrons/hardware_control/simulator_setup.py +260 -0
  200. opentrons/hardware_control/thread_manager.py +431 -0
  201. opentrons/hardware_control/threaded_async_lock.py +97 -0
  202. opentrons/hardware_control/types.py +792 -0
  203. opentrons/hardware_control/util.py +234 -0
  204. opentrons/legacy_broker.py +53 -0
  205. opentrons/legacy_commands/__init__.py +1 -0
  206. opentrons/legacy_commands/commands.py +483 -0
  207. opentrons/legacy_commands/helpers.py +153 -0
  208. opentrons/legacy_commands/module_commands.py +215 -0
  209. opentrons/legacy_commands/protocol_commands.py +54 -0
  210. opentrons/legacy_commands/publisher.py +155 -0
  211. opentrons/legacy_commands/robot_commands.py +51 -0
  212. opentrons/legacy_commands/types.py +1115 -0
  213. opentrons/motion_planning/__init__.py +32 -0
  214. opentrons/motion_planning/adjacent_slots_getters.py +168 -0
  215. opentrons/motion_planning/deck_conflict.py +396 -0
  216. opentrons/motion_planning/errors.py +35 -0
  217. opentrons/motion_planning/types.py +42 -0
  218. opentrons/motion_planning/waypoints.py +218 -0
  219. opentrons/ordered_set.py +138 -0
  220. opentrons/protocol_api/__init__.py +105 -0
  221. opentrons/protocol_api/_liquid.py +157 -0
  222. opentrons/protocol_api/_liquid_properties.py +814 -0
  223. opentrons/protocol_api/_nozzle_layout.py +31 -0
  224. opentrons/protocol_api/_parameter_context.py +300 -0
  225. opentrons/protocol_api/_parameters.py +31 -0
  226. opentrons/protocol_api/_transfer_liquid_validation.py +108 -0
  227. opentrons/protocol_api/_types.py +43 -0
  228. opentrons/protocol_api/config.py +23 -0
  229. opentrons/protocol_api/core/__init__.py +23 -0
  230. opentrons/protocol_api/core/common.py +33 -0
  231. opentrons/protocol_api/core/core_map.py +74 -0
  232. opentrons/protocol_api/core/engine/__init__.py +22 -0
  233. opentrons/protocol_api/core/engine/_default_labware_versions.py +179 -0
  234. opentrons/protocol_api/core/engine/deck_conflict.py +348 -0
  235. opentrons/protocol_api/core/engine/exceptions.py +19 -0
  236. opentrons/protocol_api/core/engine/instrument.py +2391 -0
  237. opentrons/protocol_api/core/engine/labware.py +238 -0
  238. opentrons/protocol_api/core/engine/load_labware_params.py +73 -0
  239. opentrons/protocol_api/core/engine/module_core.py +1025 -0
  240. opentrons/protocol_api/core/engine/overlap_versions.py +20 -0
  241. opentrons/protocol_api/core/engine/pipette_movement_conflict.py +358 -0
  242. opentrons/protocol_api/core/engine/point_calculations.py +64 -0
  243. opentrons/protocol_api/core/engine/protocol.py +1153 -0
  244. opentrons/protocol_api/core/engine/robot.py +139 -0
  245. opentrons/protocol_api/core/engine/stringify.py +74 -0
  246. opentrons/protocol_api/core/engine/transfer_components_executor.py +990 -0
  247. opentrons/protocol_api/core/engine/well.py +241 -0
  248. opentrons/protocol_api/core/instrument.py +459 -0
  249. opentrons/protocol_api/core/labware.py +151 -0
  250. opentrons/protocol_api/core/legacy/__init__.py +11 -0
  251. opentrons/protocol_api/core/legacy/_labware_geometry.py +37 -0
  252. opentrons/protocol_api/core/legacy/deck.py +369 -0
  253. opentrons/protocol_api/core/legacy/labware_offset_provider.py +108 -0
  254. opentrons/protocol_api/core/legacy/legacy_instrument_core.py +709 -0
  255. opentrons/protocol_api/core/legacy/legacy_labware_core.py +235 -0
  256. opentrons/protocol_api/core/legacy/legacy_module_core.py +592 -0
  257. opentrons/protocol_api/core/legacy/legacy_protocol_core.py +612 -0
  258. opentrons/protocol_api/core/legacy/legacy_well_core.py +162 -0
  259. opentrons/protocol_api/core/legacy/load_info.py +67 -0
  260. opentrons/protocol_api/core/legacy/module_geometry.py +547 -0
  261. opentrons/protocol_api/core/legacy/well_geometry.py +148 -0
  262. opentrons/protocol_api/core/legacy_simulator/__init__.py +16 -0
  263. opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +624 -0
  264. opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +85 -0
  265. opentrons/protocol_api/core/module.py +484 -0
  266. opentrons/protocol_api/core/protocol.py +311 -0
  267. opentrons/protocol_api/core/robot.py +51 -0
  268. opentrons/protocol_api/core/well.py +116 -0
  269. opentrons/protocol_api/core/well_grid.py +45 -0
  270. opentrons/protocol_api/create_protocol_context.py +177 -0
  271. opentrons/protocol_api/deck.py +223 -0
  272. opentrons/protocol_api/disposal_locations.py +244 -0
  273. opentrons/protocol_api/instrument_context.py +3212 -0
  274. opentrons/protocol_api/labware.py +1579 -0
  275. opentrons/protocol_api/module_contexts.py +1425 -0
  276. opentrons/protocol_api/module_validation_and_errors.py +61 -0
  277. opentrons/protocol_api/protocol_context.py +1688 -0
  278. opentrons/protocol_api/robot_context.py +303 -0
  279. opentrons/protocol_api/validation.py +761 -0
  280. opentrons/protocol_engine/__init__.py +155 -0
  281. opentrons/protocol_engine/actions/__init__.py +65 -0
  282. opentrons/protocol_engine/actions/action_dispatcher.py +30 -0
  283. opentrons/protocol_engine/actions/action_handler.py +13 -0
  284. opentrons/protocol_engine/actions/actions.py +302 -0
  285. opentrons/protocol_engine/actions/get_state_update.py +38 -0
  286. opentrons/protocol_engine/clients/__init__.py +5 -0
  287. opentrons/protocol_engine/clients/sync_client.py +174 -0
  288. opentrons/protocol_engine/clients/transports.py +197 -0
  289. opentrons/protocol_engine/commands/__init__.py +757 -0
  290. opentrons/protocol_engine/commands/absorbance_reader/__init__.py +61 -0
  291. opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +154 -0
  292. opentrons/protocol_engine/commands/absorbance_reader/common.py +6 -0
  293. opentrons/protocol_engine/commands/absorbance_reader/initialize.py +151 -0
  294. opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +154 -0
  295. opentrons/protocol_engine/commands/absorbance_reader/read.py +226 -0
  296. opentrons/protocol_engine/commands/air_gap_in_place.py +162 -0
  297. opentrons/protocol_engine/commands/aspirate.py +244 -0
  298. opentrons/protocol_engine/commands/aspirate_in_place.py +184 -0
  299. opentrons/protocol_engine/commands/aspirate_while_tracking.py +211 -0
  300. opentrons/protocol_engine/commands/blow_out.py +146 -0
  301. opentrons/protocol_engine/commands/blow_out_in_place.py +119 -0
  302. opentrons/protocol_engine/commands/calibration/__init__.py +60 -0
  303. opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +166 -0
  304. opentrons/protocol_engine/commands/calibration/calibrate_module.py +117 -0
  305. opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +96 -0
  306. opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +156 -0
  307. opentrons/protocol_engine/commands/command.py +308 -0
  308. opentrons/protocol_engine/commands/command_unions.py +974 -0
  309. opentrons/protocol_engine/commands/comment.py +57 -0
  310. opentrons/protocol_engine/commands/configure_for_volume.py +108 -0
  311. opentrons/protocol_engine/commands/configure_nozzle_layout.py +115 -0
  312. opentrons/protocol_engine/commands/custom.py +67 -0
  313. opentrons/protocol_engine/commands/dispense.py +194 -0
  314. opentrons/protocol_engine/commands/dispense_in_place.py +179 -0
  315. opentrons/protocol_engine/commands/dispense_while_tracking.py +204 -0
  316. opentrons/protocol_engine/commands/drop_tip.py +232 -0
  317. opentrons/protocol_engine/commands/drop_tip_in_place.py +205 -0
  318. opentrons/protocol_engine/commands/flex_stacker/__init__.py +64 -0
  319. opentrons/protocol_engine/commands/flex_stacker/common.py +900 -0
  320. opentrons/protocol_engine/commands/flex_stacker/empty.py +293 -0
  321. opentrons/protocol_engine/commands/flex_stacker/fill.py +281 -0
  322. opentrons/protocol_engine/commands/flex_stacker/retrieve.py +339 -0
  323. opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +328 -0
  324. opentrons/protocol_engine/commands/flex_stacker/store.py +326 -0
  325. opentrons/protocol_engine/commands/generate_command_schema.py +61 -0
  326. opentrons/protocol_engine/commands/get_next_tip.py +134 -0
  327. opentrons/protocol_engine/commands/get_tip_presence.py +87 -0
  328. opentrons/protocol_engine/commands/hash_command_params.py +38 -0
  329. opentrons/protocol_engine/commands/heater_shaker/__init__.py +102 -0
  330. opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +83 -0
  331. opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +82 -0
  332. opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +84 -0
  333. opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +110 -0
  334. opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +125 -0
  335. opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +90 -0
  336. opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +102 -0
  337. opentrons/protocol_engine/commands/home.py +100 -0
  338. opentrons/protocol_engine/commands/identify_module.py +86 -0
  339. opentrons/protocol_engine/commands/labware_handling_common.py +29 -0
  340. opentrons/protocol_engine/commands/liquid_probe.py +464 -0
  341. opentrons/protocol_engine/commands/load_labware.py +210 -0
  342. opentrons/protocol_engine/commands/load_lid.py +154 -0
  343. opentrons/protocol_engine/commands/load_lid_stack.py +272 -0
  344. opentrons/protocol_engine/commands/load_liquid.py +95 -0
  345. opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
  346. opentrons/protocol_engine/commands/load_module.py +223 -0
  347. opentrons/protocol_engine/commands/load_pipette.py +167 -0
  348. opentrons/protocol_engine/commands/magnetic_module/__init__.py +32 -0
  349. opentrons/protocol_engine/commands/magnetic_module/disengage.py +97 -0
  350. opentrons/protocol_engine/commands/magnetic_module/engage.py +119 -0
  351. opentrons/protocol_engine/commands/move_labware.py +546 -0
  352. opentrons/protocol_engine/commands/move_relative.py +102 -0
  353. opentrons/protocol_engine/commands/move_to_addressable_area.py +176 -0
  354. opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +198 -0
  355. opentrons/protocol_engine/commands/move_to_coordinates.py +107 -0
  356. opentrons/protocol_engine/commands/move_to_well.py +119 -0
  357. opentrons/protocol_engine/commands/movement_common.py +338 -0
  358. opentrons/protocol_engine/commands/pick_up_tip.py +241 -0
  359. opentrons/protocol_engine/commands/pipetting_common.py +443 -0
  360. opentrons/protocol_engine/commands/prepare_to_aspirate.py +121 -0
  361. opentrons/protocol_engine/commands/pressure_dispense.py +155 -0
  362. opentrons/protocol_engine/commands/reload_labware.py +90 -0
  363. opentrons/protocol_engine/commands/retract_axis.py +75 -0
  364. opentrons/protocol_engine/commands/robot/__init__.py +70 -0
  365. opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +96 -0
  366. opentrons/protocol_engine/commands/robot/common.py +18 -0
  367. opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
  368. opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
  369. opentrons/protocol_engine/commands/robot/move_to.py +94 -0
  370. opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +86 -0
  371. opentrons/protocol_engine/commands/save_position.py +109 -0
  372. opentrons/protocol_engine/commands/seal_pipette_to_tip.py +353 -0
  373. opentrons/protocol_engine/commands/set_rail_lights.py +67 -0
  374. opentrons/protocol_engine/commands/set_status_bar.py +89 -0
  375. opentrons/protocol_engine/commands/temperature_module/__init__.py +46 -0
  376. opentrons/protocol_engine/commands/temperature_module/deactivate.py +86 -0
  377. opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +97 -0
  378. opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +104 -0
  379. opentrons/protocol_engine/commands/thermocycler/__init__.py +152 -0
  380. opentrons/protocol_engine/commands/thermocycler/close_lid.py +87 -0
  381. opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +80 -0
  382. opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +80 -0
  383. opentrons/protocol_engine/commands/thermocycler/open_lid.py +87 -0
  384. opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +171 -0
  385. opentrons/protocol_engine/commands/thermocycler/run_profile.py +124 -0
  386. opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +140 -0
  387. opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +100 -0
  388. opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +93 -0
  389. opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +89 -0
  390. opentrons/protocol_engine/commands/touch_tip.py +189 -0
  391. opentrons/protocol_engine/commands/unsafe/__init__.py +161 -0
  392. opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +100 -0
  393. opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +121 -0
  394. opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +82 -0
  395. opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +208 -0
  396. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_close_latch.py +94 -0
  397. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_manual_retrieve.py +295 -0
  398. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_open_latch.py +91 -0
  399. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_prepare_shuttle.py +136 -0
  400. opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +77 -0
  401. opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +90 -0
  402. opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +153 -0
  403. opentrons/protocol_engine/commands/verify_tip_presence.py +100 -0
  404. opentrons/protocol_engine/commands/wait_for_duration.py +76 -0
  405. opentrons/protocol_engine/commands/wait_for_resume.py +75 -0
  406. opentrons/protocol_engine/create_protocol_engine.py +193 -0
  407. opentrons/protocol_engine/engine_support.py +28 -0
  408. opentrons/protocol_engine/error_recovery_policy.py +81 -0
  409. opentrons/protocol_engine/errors/__init__.py +191 -0
  410. opentrons/protocol_engine/errors/error_occurrence.py +182 -0
  411. opentrons/protocol_engine/errors/exceptions.py +1308 -0
  412. opentrons/protocol_engine/execution/__init__.py +50 -0
  413. opentrons/protocol_engine/execution/command_executor.py +216 -0
  414. opentrons/protocol_engine/execution/create_queue_worker.py +102 -0
  415. opentrons/protocol_engine/execution/door_watcher.py +119 -0
  416. opentrons/protocol_engine/execution/equipment.py +819 -0
  417. opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +101 -0
  418. opentrons/protocol_engine/execution/gantry_mover.py +686 -0
  419. opentrons/protocol_engine/execution/hardware_stopper.py +147 -0
  420. opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +207 -0
  421. opentrons/protocol_engine/execution/labware_movement.py +297 -0
  422. opentrons/protocol_engine/execution/movement.py +349 -0
  423. opentrons/protocol_engine/execution/pipetting.py +607 -0
  424. opentrons/protocol_engine/execution/queue_worker.py +86 -0
  425. opentrons/protocol_engine/execution/rail_lights.py +25 -0
  426. opentrons/protocol_engine/execution/run_control.py +33 -0
  427. opentrons/protocol_engine/execution/status_bar.py +34 -0
  428. opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +188 -0
  429. opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +81 -0
  430. opentrons/protocol_engine/execution/tip_handler.py +550 -0
  431. opentrons/protocol_engine/labware_offset_standardization.py +194 -0
  432. opentrons/protocol_engine/notes/__init__.py +17 -0
  433. opentrons/protocol_engine/notes/notes.py +59 -0
  434. opentrons/protocol_engine/plugins.py +104 -0
  435. opentrons/protocol_engine/protocol_engine.py +683 -0
  436. opentrons/protocol_engine/resources/__init__.py +26 -0
  437. opentrons/protocol_engine/resources/deck_configuration_provider.py +232 -0
  438. opentrons/protocol_engine/resources/deck_data_provider.py +94 -0
  439. opentrons/protocol_engine/resources/file_provider.py +161 -0
  440. opentrons/protocol_engine/resources/fixture_validation.py +58 -0
  441. opentrons/protocol_engine/resources/labware_data_provider.py +106 -0
  442. opentrons/protocol_engine/resources/labware_validation.py +73 -0
  443. opentrons/protocol_engine/resources/model_utils.py +32 -0
  444. opentrons/protocol_engine/resources/module_data_provider.py +44 -0
  445. opentrons/protocol_engine/resources/ot3_validation.py +21 -0
  446. opentrons/protocol_engine/resources/pipette_data_provider.py +379 -0
  447. opentrons/protocol_engine/slot_standardization.py +128 -0
  448. opentrons/protocol_engine/state/__init__.py +1 -0
  449. opentrons/protocol_engine/state/_abstract_store.py +27 -0
  450. opentrons/protocol_engine/state/_axis_aligned_bounding_box.py +50 -0
  451. opentrons/protocol_engine/state/_labware_origin_math.py +636 -0
  452. opentrons/protocol_engine/state/_move_types.py +83 -0
  453. opentrons/protocol_engine/state/_well_math.py +193 -0
  454. opentrons/protocol_engine/state/addressable_areas.py +699 -0
  455. opentrons/protocol_engine/state/command_history.py +309 -0
  456. opentrons/protocol_engine/state/commands.py +1158 -0
  457. opentrons/protocol_engine/state/config.py +39 -0
  458. opentrons/protocol_engine/state/files.py +57 -0
  459. opentrons/protocol_engine/state/fluid_stack.py +138 -0
  460. opentrons/protocol_engine/state/geometry.py +2359 -0
  461. opentrons/protocol_engine/state/inner_well_math_utils.py +548 -0
  462. opentrons/protocol_engine/state/labware.py +1459 -0
  463. opentrons/protocol_engine/state/liquid_classes.py +82 -0
  464. opentrons/protocol_engine/state/liquids.py +73 -0
  465. opentrons/protocol_engine/state/module_substates/__init__.py +45 -0
  466. opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +35 -0
  467. opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +112 -0
  468. opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +115 -0
  469. opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +17 -0
  470. opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +65 -0
  471. opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +67 -0
  472. opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +163 -0
  473. opentrons/protocol_engine/state/modules.py +1500 -0
  474. opentrons/protocol_engine/state/motion.py +373 -0
  475. opentrons/protocol_engine/state/pipettes.py +905 -0
  476. opentrons/protocol_engine/state/state.py +421 -0
  477. opentrons/protocol_engine/state/state_summary.py +36 -0
  478. opentrons/protocol_engine/state/tips.py +420 -0
  479. opentrons/protocol_engine/state/update_types.py +904 -0
  480. opentrons/protocol_engine/state/wells.py +290 -0
  481. opentrons/protocol_engine/types/__init__.py +308 -0
  482. opentrons/protocol_engine/types/automatic_tip_selection.py +39 -0
  483. opentrons/protocol_engine/types/command_annotations.py +53 -0
  484. opentrons/protocol_engine/types/deck_configuration.py +81 -0
  485. opentrons/protocol_engine/types/execution.py +96 -0
  486. opentrons/protocol_engine/types/hardware_passthrough.py +25 -0
  487. opentrons/protocol_engine/types/instrument.py +47 -0
  488. opentrons/protocol_engine/types/instrument_sensors.py +47 -0
  489. opentrons/protocol_engine/types/labware.py +131 -0
  490. opentrons/protocol_engine/types/labware_movement.py +22 -0
  491. opentrons/protocol_engine/types/labware_offset_location.py +111 -0
  492. opentrons/protocol_engine/types/labware_offset_vector.py +16 -0
  493. opentrons/protocol_engine/types/liquid.py +40 -0
  494. opentrons/protocol_engine/types/liquid_class.py +59 -0
  495. opentrons/protocol_engine/types/liquid_handling.py +13 -0
  496. opentrons/protocol_engine/types/liquid_level_detection.py +191 -0
  497. opentrons/protocol_engine/types/location.py +194 -0
  498. opentrons/protocol_engine/types/module.py +303 -0
  499. opentrons/protocol_engine/types/partial_tip_configuration.py +76 -0
  500. opentrons/protocol_engine/types/run_time_parameters.py +133 -0
  501. opentrons/protocol_engine/types/tip.py +18 -0
  502. opentrons/protocol_engine/types/util.py +21 -0
  503. opentrons/protocol_engine/types/well_position.py +124 -0
  504. opentrons/protocol_reader/__init__.py +37 -0
  505. opentrons/protocol_reader/extract_labware_definitions.py +66 -0
  506. opentrons/protocol_reader/file_format_validator.py +152 -0
  507. opentrons/protocol_reader/file_hasher.py +27 -0
  508. opentrons/protocol_reader/file_identifier.py +284 -0
  509. opentrons/protocol_reader/file_reader_writer.py +90 -0
  510. opentrons/protocol_reader/input_file.py +16 -0
  511. opentrons/protocol_reader/protocol_files_invalid_error.py +6 -0
  512. opentrons/protocol_reader/protocol_reader.py +188 -0
  513. opentrons/protocol_reader/protocol_source.py +124 -0
  514. opentrons/protocol_reader/role_analyzer.py +86 -0
  515. opentrons/protocol_runner/__init__.py +26 -0
  516. opentrons/protocol_runner/create_simulating_orchestrator.py +118 -0
  517. opentrons/protocol_runner/json_file_reader.py +55 -0
  518. opentrons/protocol_runner/json_translator.py +314 -0
  519. opentrons/protocol_runner/legacy_command_mapper.py +848 -0
  520. opentrons/protocol_runner/legacy_context_plugin.py +116 -0
  521. opentrons/protocol_runner/protocol_runner.py +530 -0
  522. opentrons/protocol_runner/python_protocol_wrappers.py +179 -0
  523. opentrons/protocol_runner/run_orchestrator.py +496 -0
  524. opentrons/protocol_runner/task_queue.py +95 -0
  525. opentrons/protocols/__init__.py +6 -0
  526. opentrons/protocols/advanced_control/__init__.py +0 -0
  527. opentrons/protocols/advanced_control/common.py +38 -0
  528. opentrons/protocols/advanced_control/mix.py +60 -0
  529. opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
  530. opentrons/protocols/advanced_control/transfers/common.py +180 -0
  531. opentrons/protocols/advanced_control/transfers/transfer.py +972 -0
  532. opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +231 -0
  533. opentrons/protocols/api_support/__init__.py +0 -0
  534. opentrons/protocols/api_support/constants.py +8 -0
  535. opentrons/protocols/api_support/deck_type.py +110 -0
  536. opentrons/protocols/api_support/definitions.py +18 -0
  537. opentrons/protocols/api_support/instrument.py +151 -0
  538. opentrons/protocols/api_support/labware_like.py +233 -0
  539. opentrons/protocols/api_support/tip_tracker.py +175 -0
  540. opentrons/protocols/api_support/types.py +32 -0
  541. opentrons/protocols/api_support/util.py +403 -0
  542. opentrons/protocols/bundle.py +89 -0
  543. opentrons/protocols/duration/__init__.py +4 -0
  544. opentrons/protocols/duration/errors.py +5 -0
  545. opentrons/protocols/duration/estimator.py +628 -0
  546. opentrons/protocols/execution/__init__.py +0 -0
  547. opentrons/protocols/execution/dev_types.py +181 -0
  548. opentrons/protocols/execution/errors.py +40 -0
  549. opentrons/protocols/execution/execute.py +84 -0
  550. opentrons/protocols/execution/execute_json_v3.py +275 -0
  551. opentrons/protocols/execution/execute_json_v4.py +359 -0
  552. opentrons/protocols/execution/execute_json_v5.py +28 -0
  553. opentrons/protocols/execution/execute_python.py +169 -0
  554. opentrons/protocols/execution/json_dispatchers.py +87 -0
  555. opentrons/protocols/execution/types.py +7 -0
  556. opentrons/protocols/geometry/__init__.py +0 -0
  557. opentrons/protocols/geometry/planning.py +297 -0
  558. opentrons/protocols/labware.py +312 -0
  559. opentrons/protocols/models/__init__.py +0 -0
  560. opentrons/protocols/models/json_protocol.py +679 -0
  561. opentrons/protocols/parameters/__init__.py +0 -0
  562. opentrons/protocols/parameters/csv_parameter_definition.py +77 -0
  563. opentrons/protocols/parameters/csv_parameter_interface.py +96 -0
  564. opentrons/protocols/parameters/exceptions.py +34 -0
  565. opentrons/protocols/parameters/parameter_definition.py +272 -0
  566. opentrons/protocols/parameters/types.py +17 -0
  567. opentrons/protocols/parameters/validation.py +267 -0
  568. opentrons/protocols/parse.py +671 -0
  569. opentrons/protocols/types.py +159 -0
  570. opentrons/py.typed +0 -0
  571. opentrons/resources/scripts/lpc21isp +0 -0
  572. opentrons/resources/smoothie-edge-8414642.hex +23010 -0
  573. opentrons/simulate.py +1065 -0
  574. opentrons/system/__init__.py +6 -0
  575. opentrons/system/camera.py +51 -0
  576. opentrons/system/log_control.py +59 -0
  577. opentrons/system/nmcli.py +856 -0
  578. opentrons/system/resin.py +24 -0
  579. opentrons/system/smoothie_update.py +15 -0
  580. opentrons/system/wifi.py +204 -0
  581. opentrons/tools/__init__.py +0 -0
  582. opentrons/tools/args_handler.py +22 -0
  583. opentrons/tools/write_pipette_memory.py +157 -0
  584. opentrons/types.py +618 -0
  585. opentrons/util/__init__.py +1 -0
  586. opentrons/util/async_helpers.py +166 -0
  587. opentrons/util/broker.py +84 -0
  588. opentrons/util/change_notifier.py +47 -0
  589. opentrons/util/entrypoint_util.py +278 -0
  590. opentrons/util/get_union_elements.py +26 -0
  591. opentrons/util/helpers.py +6 -0
  592. opentrons/util/linal.py +178 -0
  593. opentrons/util/logging_config.py +265 -0
  594. opentrons/util/logging_queue_handler.py +61 -0
  595. opentrons/util/performance_helpers.py +157 -0
  596. opentrons-8.6.0a1.dist-info/METADATA +37 -0
  597. opentrons-8.6.0a1.dist-info/RECORD +600 -0
  598. opentrons-8.6.0a1.dist-info/WHEEL +4 -0
  599. opentrons-8.6.0a1.dist-info/entry_points.txt +3 -0
  600. opentrons-8.6.0a1.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,155 @@
1
+ """Protocol engine module.
2
+
3
+ The protocol_engine module contains the logic necessary to take a stream of
4
+ protocol commands, issued by some arbitrary protocol runner, and turn it into
5
+ protocol state and side-effects like robot movements.
6
+
7
+ The main interface is the `ProtocolEngine` class.
8
+ """
9
+
10
+ from .protocol_engine import ProtocolEngine
11
+ from .errors import ProtocolEngineError, ErrorOccurrence
12
+ from .notes import CommandNote
13
+ from .commands import (
14
+ Command,
15
+ CommandParams,
16
+ CommandCreate,
17
+ CommandStatus,
18
+ CommandType,
19
+ CommandIntent,
20
+ )
21
+ from .state.state import State, StateView
22
+ from .state.state_summary import StateSummary
23
+ from .state.commands import CommandSlice, CommandErrorSlice, CommandPointer
24
+ from .state.config import Config
25
+ from .plugins import AbstractPlugin
26
+
27
+ from .types import (
28
+ LabwareOffset,
29
+ LegacyLabwareOffsetCreate,
30
+ LabwareOffsetCreate,
31
+ LabwareOffsetVector,
32
+ LegacyLabwareOffsetLocation,
33
+ LabwareOffsetLocationSequence,
34
+ OnLabwareOffsetLocationSequenceComponent,
35
+ OnModuleOffsetLocationSequenceComponent,
36
+ OnAddressableAreaOffsetLocationSequenceComponent,
37
+ LabwareOffsetLocationSequenceComponents,
38
+ LabwareMovementStrategy,
39
+ AddressableOffsetVector,
40
+ DeckPoint,
41
+ DeckType,
42
+ DeckSlotLocation,
43
+ InStackerHopperLocation,
44
+ ModuleLocation,
45
+ OnLabwareLocation,
46
+ AddressableAreaLocation,
47
+ OFF_DECK_LOCATION,
48
+ SYSTEM_LOCATION,
49
+ Dimensions,
50
+ EngineStatus,
51
+ LabwareLocation,
52
+ LoadableLabwareLocation,
53
+ NonStackedLocation,
54
+ LoadedLabware,
55
+ LoadedModule,
56
+ LoadedPipette,
57
+ MotorAxis,
58
+ WellLocation,
59
+ LiquidHandlingWellLocation,
60
+ PickUpTipWellLocation,
61
+ DropTipWellLocation,
62
+ WellOrigin,
63
+ DropTipWellOrigin,
64
+ PickUpTipWellOrigin,
65
+ WellOffset,
66
+ ModuleModel,
67
+ ModuleDefinition,
68
+ Liquid,
69
+ LiquidClassRecord,
70
+ LiquidClassRecordWithId,
71
+ AllNozzleLayoutConfiguration,
72
+ SingleNozzleLayoutConfiguration,
73
+ RowNozzleLayoutConfiguration,
74
+ ColumnNozzleLayoutConfiguration,
75
+ QuadrantNozzleLayoutConfiguration,
76
+ )
77
+
78
+
79
+ __all__ = [
80
+ # main factory and interface exports
81
+ "create_protocol_engine",
82
+ "create_protocol_engine_in_thread",
83
+ "ProtocolEngine",
84
+ "StateSummary",
85
+ "Config",
86
+ # error types
87
+ "ProtocolEngineError",
88
+ "ErrorOccurrence",
89
+ # top level command unions and values
90
+ "Command",
91
+ "CommandParams",
92
+ "CommandCreate",
93
+ "CommandStatus",
94
+ "CommandType",
95
+ "CommandIntent",
96
+ "CommandNote",
97
+ # state interfaces and models
98
+ "State",
99
+ "StateView",
100
+ "CommandSlice",
101
+ "CommandErrorSlice",
102
+ "CommandPointer",
103
+ # public value interfaces and models
104
+ "LabwareOffset",
105
+ "LabwareOffsetCreate",
106
+ "LegacyLabwareOffsetCreate",
107
+ "LabwareOffsetLocationSequence",
108
+ "LabwareOffsetVector",
109
+ "OnLabwareOffsetLocationSequenceComponent",
110
+ "OnModuleOffsetLocationSequenceComponent",
111
+ "OnAddressableAreaOffsetLocationSequenceComponent",
112
+ "LabwareOffsetLocationSequenceComponents",
113
+ "LegacyLabwareOffsetCreate",
114
+ "LegacyLabwareOffsetLocation",
115
+ "LabwareMovementStrategy",
116
+ "AddressableOffsetVector",
117
+ "DeckSlotLocation",
118
+ "DeckPoint",
119
+ "DeckType",
120
+ "ModuleLocation",
121
+ "OnLabwareLocation",
122
+ "AddressableAreaLocation",
123
+ "InStackerHopperLocation",
124
+ "OFF_DECK_LOCATION",
125
+ "SYSTEM_LOCATION",
126
+ "Dimensions",
127
+ "EngineStatus",
128
+ "LabwareLocation",
129
+ "LoadableLabwareLocation",
130
+ "NonStackedLocation",
131
+ "LoadedLabware",
132
+ "LoadedModule",
133
+ "LoadedPipette",
134
+ "MotorAxis",
135
+ "WellLocation",
136
+ "LiquidHandlingWellLocation",
137
+ "PickUpTipWellLocation",
138
+ "DropTipWellLocation",
139
+ "WellOrigin",
140
+ "DropTipWellOrigin",
141
+ "PickUpTipWellOrigin",
142
+ "WellOffset",
143
+ "ModuleModel",
144
+ "ModuleDefinition",
145
+ "Liquid",
146
+ "LiquidClassRecord",
147
+ "LiquidClassRecordWithId",
148
+ "AllNozzleLayoutConfiguration",
149
+ "SingleNozzleLayoutConfiguration",
150
+ "RowNozzleLayoutConfiguration",
151
+ "ColumnNozzleLayoutConfiguration",
152
+ "QuadrantNozzleLayoutConfiguration",
153
+ # plugins
154
+ "AbstractPlugin",
155
+ ]
@@ -0,0 +1,65 @@
1
+ """ProtocolEngine action interfaces.
2
+
3
+ Actions are the driver of state changes in the ProtocolEngine.
4
+ """
5
+
6
+ from .action_dispatcher import ActionDispatcher
7
+ from .action_handler import ActionHandler
8
+ from .actions import (
9
+ Action,
10
+ PlayAction,
11
+ PauseAction,
12
+ PauseSource,
13
+ StopAction,
14
+ ResumeFromRecoveryAction,
15
+ FinishAction,
16
+ HardwareStoppedAction,
17
+ QueueCommandAction,
18
+ RunCommandAction,
19
+ SucceedCommandAction,
20
+ FailCommandAction,
21
+ AddLabwareOffsetAction,
22
+ AddLabwareDefinitionAction,
23
+ AddLiquidAction,
24
+ SetDeckConfigurationAction,
25
+ AddAddressableAreaAction,
26
+ AddModuleAction,
27
+ FinishErrorDetails,
28
+ DoorChangeAction,
29
+ ResetTipsAction,
30
+ SetPipetteMovementSpeedAction,
31
+ )
32
+ from .get_state_update import get_state_updates
33
+
34
+ __all__ = [
35
+ # action pipeline interface
36
+ "ActionDispatcher",
37
+ # action reaction interface
38
+ "ActionHandler",
39
+ # action values
40
+ "Action",
41
+ "PlayAction",
42
+ "PauseAction",
43
+ "StopAction",
44
+ "ResumeFromRecoveryAction",
45
+ "FinishAction",
46
+ "HardwareStoppedAction",
47
+ "QueueCommandAction",
48
+ "RunCommandAction",
49
+ "SucceedCommandAction",
50
+ "FailCommandAction",
51
+ "AddLabwareOffsetAction",
52
+ "AddLabwareDefinitionAction",
53
+ "AddLiquidAction",
54
+ "SetDeckConfigurationAction",
55
+ "AddAddressableAreaAction",
56
+ "AddModuleAction",
57
+ "DoorChangeAction",
58
+ "ResetTipsAction",
59
+ "SetPipetteMovementSpeedAction",
60
+ # action payload values
61
+ "PauseSource",
62
+ "FinishErrorDetails",
63
+ # helper functions
64
+ "get_state_updates",
65
+ ]
@@ -0,0 +1,30 @@
1
+ """Action pipeline module."""
2
+ from typing import List
3
+
4
+ from .action_handler import ActionHandler
5
+ from .actions import Action
6
+
7
+
8
+ class ActionDispatcher:
9
+ """A pipeline, with an endpoint, that actions can be dispatched into."""
10
+
11
+ def __init__(self, sink: ActionHandler) -> None:
12
+ """Initialize the ActionDispatcher and action pipeline.
13
+
14
+ Arguments:
15
+ sink: The action handler that all actions in the pipeline
16
+ are sent to.
17
+ """
18
+ self._handlers: List[ActionHandler] = []
19
+ self._sink = sink
20
+
21
+ def add_handler(self, handler: ActionHandler) -> None:
22
+ """Add an action handler to the pipeline before the sink."""
23
+ self._handlers.append(handler)
24
+
25
+ def dispatch(self, action: Action) -> None:
26
+ """Dispatch an action into the pipeline."""
27
+ for handler in self._handlers:
28
+ handler.handle_action(action)
29
+
30
+ self._sink.handle_action(action)
@@ -0,0 +1,13 @@
1
+ """Abstract interfaces for engine plugins."""
2
+ from abc import ABC, abstractmethod
3
+
4
+ from .actions import Action
5
+
6
+
7
+ class ActionHandler(ABC):
8
+ """An abstract interface for an object that reacts to actions."""
9
+
10
+ @abstractmethod
11
+ def handle_action(self, action: Action) -> None:
12
+ """React to a state-change action."""
13
+ ...
@@ -0,0 +1,302 @@
1
+ """State store actions.
2
+
3
+ Actions can be passed to the ActionDispatcher, where they will trigger
4
+ reactions in objects that subscribe to the pipeline, like the StateStore.
5
+ """
6
+ import dataclasses
7
+ from datetime import datetime
8
+ from enum import Enum
9
+ from typing import List, Optional, Union
10
+
11
+ from opentrons_shared_data.errors import EnumeratedError
12
+ from opentrons_shared_data.labware.labware_definition import LabwareDefinition
13
+
14
+ from opentrons.hardware_control.types import DoorState
15
+ from opentrons.hardware_control.modules import LiveData
16
+
17
+ from ..commands import (
18
+ Command,
19
+ CommandCreate,
20
+ CommandDefinedErrorData,
21
+ )
22
+ from ..error_recovery_policy import ErrorRecoveryPolicy, ErrorRecoveryType
23
+ from ..notes.notes import CommandNote
24
+ from ..state.update_types import StateUpdate
25
+ from ..types import (
26
+ LabwareOffsetCreateInternal,
27
+ ModuleDefinition,
28
+ Liquid,
29
+ DeckConfigurationType,
30
+ )
31
+
32
+
33
+ @dataclasses.dataclass(frozen=True)
34
+ class PlayAction:
35
+ """Start or resume processing commands in the engine."""
36
+
37
+ requested_at: datetime
38
+
39
+
40
+ class PauseSource(str, Enum):
41
+ """The source of a PauseAction.
42
+
43
+ Attributes:
44
+ CLIENT: the pause came externally, from the engine client.
45
+ PROTOCOL: the pause came from the protocol itself.
46
+ """
47
+
48
+ CLIENT = "client"
49
+ PROTOCOL = "protocol"
50
+
51
+
52
+ @dataclasses.dataclass(frozen=True)
53
+ class PauseAction:
54
+ """Pause processing commands in the engine."""
55
+
56
+ source: PauseSource
57
+
58
+
59
+ @dataclasses.dataclass(frozen=True)
60
+ class StopAction:
61
+ """Request engine execution to stop soon."""
62
+
63
+ from_estop: bool = False
64
+
65
+
66
+ @dataclasses.dataclass(frozen=True)
67
+ class ResumeFromRecoveryAction:
68
+ """See `ProtocolEngine.resume_from_recovery()`."""
69
+
70
+ state_update: StateUpdate
71
+
72
+
73
+ @dataclasses.dataclass(frozen=True)
74
+ class FinishErrorDetails:
75
+ """Error details for the payload of a FinishAction or HardwareStoppedAction."""
76
+
77
+ error: Exception
78
+ error_id: str
79
+ created_at: datetime
80
+
81
+
82
+ @dataclasses.dataclass(frozen=True)
83
+ class FinishAction:
84
+ """Gracefully stop processing commands in the engine."""
85
+
86
+ set_run_status: bool = True
87
+ """Whether to set the engine status depending on `error_details`.
88
+
89
+ If True, the engine status will be marked `succeeded` or `failed`, depending on `error_details`.
90
+ If False, the engine status will be marked `stopped`.
91
+ """
92
+
93
+ error_details: Optional[FinishErrorDetails] = None
94
+ """The fatal error that caused the run to fail."""
95
+
96
+
97
+ @dataclasses.dataclass(frozen=True)
98
+ class HardwareStoppedAction:
99
+ """An action dispatched after hardware has been stopped for good, for this engine instance."""
100
+
101
+ completed_at: datetime
102
+
103
+ finish_error_details: Optional[FinishErrorDetails]
104
+ """The error that happened while doing post-run finish steps (homing and dropping tips)."""
105
+
106
+
107
+ @dataclasses.dataclass(frozen=True)
108
+ class DoorChangeAction:
109
+ """Handle events coming in from hardware control."""
110
+
111
+ door_state: DoorState
112
+ module_serial: str | None = None
113
+
114
+
115
+ @dataclasses.dataclass(frozen=True)
116
+ class QueueCommandAction:
117
+ """Add a command request to the queue."""
118
+
119
+ command_id: str
120
+ created_at: datetime
121
+ request: CommandCreate
122
+ request_hash: Optional[str]
123
+ failed_command_id: Optional[str] = None
124
+
125
+
126
+ @dataclasses.dataclass(frozen=True)
127
+ class RunCommandAction:
128
+ """Mark a given command as running.
129
+
130
+ At the time of dispatching this action, the command must be queued,
131
+ and no other command may be running.
132
+ """
133
+
134
+ command_id: str
135
+ started_at: datetime
136
+
137
+
138
+ @dataclasses.dataclass(frozen=True)
139
+ class SucceedCommandAction:
140
+ """Mark a given command as succeeded.
141
+
142
+ At the time of dispatching this action, the command must be running.
143
+ """
144
+
145
+ command: Command
146
+ """The command in its new succeeded state."""
147
+
148
+ state_update: StateUpdate = dataclasses.field(
149
+ # todo(mm, 2024-08-26): This has a default only to make it easier to transition
150
+ # old tests while https://opentrons.atlassian.net/browse/EXEC-639 is in
151
+ # progress. Make this mandatory when that's completed.
152
+ default_factory=StateUpdate
153
+ )
154
+
155
+
156
+ @dataclasses.dataclass(frozen=True)
157
+ class FailCommandAction:
158
+ """Mark a given command as failed.
159
+
160
+ At the time of dispatching this action, the command must be running.
161
+ """
162
+
163
+ command_id: str
164
+ """The command to fail."""
165
+
166
+ error_id: str
167
+ """An ID to assign to the command's error.
168
+
169
+ Must be unique to this occurrence of the error.
170
+
171
+ todo(mm, 2024-05-13): This is redundant with `error` when it's a defined error.
172
+ """
173
+
174
+ failed_at: datetime
175
+ """When the command failed.
176
+
177
+ todo(mm, 2024-05-13): This is redundant with `error` when it's a defined error.
178
+ """
179
+
180
+ error: Union[CommandDefinedErrorData, EnumeratedError]
181
+ """The error that caused the command to fail.
182
+
183
+ If it was a defined error, this should be the `DefinedErrorData` that the command
184
+ returned.
185
+
186
+ If it was an undefined error, this should be the underlying exception
187
+ that caused the command to fail, represented as an `EnumeratedError`.
188
+ """
189
+
190
+ notes: List[CommandNote]
191
+ """Overwrite the command's `.notes` with these."""
192
+
193
+ type: ErrorRecoveryType
194
+ """How this error should be handled in the context of the overall run."""
195
+
196
+ # This is a quick hack so FailCommandAction handlers can get the params of the
197
+ # command that failed. We probably want this to be a new "failure details"
198
+ # object instead, similar to how succeeded commands can send a "private result"
199
+ # to Protocol Engine internals.
200
+ running_command: Command
201
+ """The command to fail, in its prior `running` state."""
202
+
203
+
204
+ @dataclasses.dataclass(frozen=True)
205
+ class AddLabwareOffsetAction:
206
+ """Add a labware offset, to apply to subsequent `LoadLabwareCommand`s."""
207
+
208
+ labware_offset_id: str
209
+ created_at: datetime
210
+ request: LabwareOffsetCreateInternal
211
+
212
+
213
+ @dataclasses.dataclass(frozen=True)
214
+ class AddLabwareDefinitionAction:
215
+ """Add a labware definition, to apply to subsequent `LoadLabwareCommand`s."""
216
+
217
+ definition: LabwareDefinition
218
+
219
+
220
+ @dataclasses.dataclass(frozen=True)
221
+ class AddLiquidAction:
222
+ """Add a liquid, to apply to subsequent `LoadLiquid`s."""
223
+
224
+ liquid: Liquid
225
+
226
+
227
+ @dataclasses.dataclass(frozen=True)
228
+ class SetDeckConfigurationAction:
229
+ """See `ProtocolEngine.set_deck_configuration()`."""
230
+
231
+ deck_configuration: Optional[DeckConfigurationType]
232
+
233
+
234
+ @dataclasses.dataclass(frozen=True)
235
+ class AddAddressableAreaAction:
236
+ """Add a single addressable area to state.
237
+
238
+ This differs from the deck configuration in SetDeckConfigurationAction which
239
+ sends over a mapping of cutout fixtures. This action will only load one addressable
240
+ area and that should be pre-validated before being sent via the action.
241
+ """
242
+
243
+ addressable_area_name: str
244
+
245
+
246
+ @dataclasses.dataclass(frozen=True)
247
+ class AddModuleAction:
248
+ """Add an attached module directly to state without a location."""
249
+
250
+ module_id: str
251
+ serial_number: str
252
+ definition: ModuleDefinition
253
+ module_live_data: LiveData
254
+
255
+
256
+ @dataclasses.dataclass(frozen=True)
257
+ class ResetTipsAction:
258
+ """Reset the tip tracking state of a given tip rack."""
259
+
260
+ labware_id: str
261
+
262
+
263
+ @dataclasses.dataclass(frozen=True)
264
+ class SetPipetteMovementSpeedAction:
265
+ """Set the speed of a pipette's X/Y/Z movements. Does not affect plunger speed.
266
+
267
+ None will use the hardware API's default.
268
+ """
269
+
270
+ pipette_id: str
271
+ speed: Optional[float]
272
+
273
+
274
+ @dataclasses.dataclass(frozen=True)
275
+ class SetErrorRecoveryPolicyAction:
276
+ """See `ProtocolEngine.set_error_recovery_policy()`."""
277
+
278
+ error_recovery_policy: ErrorRecoveryPolicy
279
+
280
+
281
+ Action = Union[
282
+ PlayAction,
283
+ PauseAction,
284
+ StopAction,
285
+ ResumeFromRecoveryAction,
286
+ FinishAction,
287
+ HardwareStoppedAction,
288
+ DoorChangeAction,
289
+ QueueCommandAction,
290
+ RunCommandAction,
291
+ SucceedCommandAction,
292
+ FailCommandAction,
293
+ AddLabwareOffsetAction,
294
+ AddLabwareDefinitionAction,
295
+ AddModuleAction,
296
+ SetDeckConfigurationAction,
297
+ AddAddressableAreaAction,
298
+ AddLiquidAction,
299
+ ResetTipsAction,
300
+ SetPipetteMovementSpeedAction,
301
+ SetErrorRecoveryPolicyAction,
302
+ ]
@@ -0,0 +1,38 @@
1
+ # noqa: D100
2
+ from __future__ import annotations
3
+ from typing import TYPE_CHECKING
4
+
5
+ from .actions import (
6
+ Action,
7
+ ResumeFromRecoveryAction,
8
+ SucceedCommandAction,
9
+ FailCommandAction,
10
+ )
11
+ from ..commands.command import DefinedErrorData
12
+ from ..error_recovery_policy import ErrorRecoveryType
13
+
14
+ if TYPE_CHECKING:
15
+ from ..state.update_types import StateUpdate
16
+
17
+
18
+ def get_state_updates(action: Action) -> list[StateUpdate]:
19
+ """Extract all the StateUpdates that the StateStores should apply when they apply an action."""
20
+ if isinstance(action, SucceedCommandAction):
21
+ return [action.state_update]
22
+
23
+ elif isinstance(action, FailCommandAction) and isinstance(
24
+ action.error, DefinedErrorData
25
+ ):
26
+ if action.type == ErrorRecoveryType.ASSUME_FALSE_POSITIVE_AND_CONTINUE:
27
+ return [
28
+ action.error.state_update,
29
+ action.error.state_update_if_false_positive,
30
+ ]
31
+ else:
32
+ return [action.error.state_update]
33
+
34
+ elif isinstance(action, ResumeFromRecoveryAction):
35
+ return [action.state_update]
36
+
37
+ else:
38
+ return []
@@ -0,0 +1,5 @@
1
+ """ProtocolEngine clients."""
2
+ from .sync_client import SyncClient
3
+ from .transports import ChildThreadTransport
4
+
5
+ __all__ = ["SyncClient", "ChildThreadTransport"]