opentrons 8.6.0__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 (601) 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 +557 -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 +187 -0
  45. opentrons/drivers/asyncio/communication/errors.py +88 -0
  46. opentrons/drivers/asyncio/communication/serial_connection.py +557 -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/scripts/update_module_fw.py +274 -0
  200. opentrons/hardware_control/simulator_setup.py +260 -0
  201. opentrons/hardware_control/thread_manager.py +431 -0
  202. opentrons/hardware_control/threaded_async_lock.py +97 -0
  203. opentrons/hardware_control/types.py +792 -0
  204. opentrons/hardware_control/util.py +234 -0
  205. opentrons/legacy_broker.py +53 -0
  206. opentrons/legacy_commands/__init__.py +1 -0
  207. opentrons/legacy_commands/commands.py +483 -0
  208. opentrons/legacy_commands/helpers.py +153 -0
  209. opentrons/legacy_commands/module_commands.py +276 -0
  210. opentrons/legacy_commands/protocol_commands.py +54 -0
  211. opentrons/legacy_commands/publisher.py +155 -0
  212. opentrons/legacy_commands/robot_commands.py +51 -0
  213. opentrons/legacy_commands/types.py +1186 -0
  214. opentrons/motion_planning/__init__.py +32 -0
  215. opentrons/motion_planning/adjacent_slots_getters.py +168 -0
  216. opentrons/motion_planning/deck_conflict.py +501 -0
  217. opentrons/motion_planning/errors.py +35 -0
  218. opentrons/motion_planning/types.py +42 -0
  219. opentrons/motion_planning/waypoints.py +218 -0
  220. opentrons/ordered_set.py +138 -0
  221. opentrons/protocol_api/__init__.py +105 -0
  222. opentrons/protocol_api/_liquid.py +157 -0
  223. opentrons/protocol_api/_liquid_properties.py +814 -0
  224. opentrons/protocol_api/_nozzle_layout.py +31 -0
  225. opentrons/protocol_api/_parameter_context.py +300 -0
  226. opentrons/protocol_api/_parameters.py +31 -0
  227. opentrons/protocol_api/_transfer_liquid_validation.py +108 -0
  228. opentrons/protocol_api/_types.py +43 -0
  229. opentrons/protocol_api/config.py +23 -0
  230. opentrons/protocol_api/core/__init__.py +23 -0
  231. opentrons/protocol_api/core/common.py +33 -0
  232. opentrons/protocol_api/core/core_map.py +74 -0
  233. opentrons/protocol_api/core/engine/__init__.py +22 -0
  234. opentrons/protocol_api/core/engine/_default_labware_versions.py +179 -0
  235. opentrons/protocol_api/core/engine/deck_conflict.py +400 -0
  236. opentrons/protocol_api/core/engine/exceptions.py +19 -0
  237. opentrons/protocol_api/core/engine/instrument.py +2391 -0
  238. opentrons/protocol_api/core/engine/labware.py +238 -0
  239. opentrons/protocol_api/core/engine/load_labware_params.py +73 -0
  240. opentrons/protocol_api/core/engine/module_core.py +1027 -0
  241. opentrons/protocol_api/core/engine/overlap_versions.py +20 -0
  242. opentrons/protocol_api/core/engine/pipette_movement_conflict.py +358 -0
  243. opentrons/protocol_api/core/engine/point_calculations.py +64 -0
  244. opentrons/protocol_api/core/engine/protocol.py +1153 -0
  245. opentrons/protocol_api/core/engine/robot.py +139 -0
  246. opentrons/protocol_api/core/engine/stringify.py +74 -0
  247. opentrons/protocol_api/core/engine/transfer_components_executor.py +1006 -0
  248. opentrons/protocol_api/core/engine/well.py +241 -0
  249. opentrons/protocol_api/core/instrument.py +459 -0
  250. opentrons/protocol_api/core/labware.py +151 -0
  251. opentrons/protocol_api/core/legacy/__init__.py +11 -0
  252. opentrons/protocol_api/core/legacy/_labware_geometry.py +37 -0
  253. opentrons/protocol_api/core/legacy/deck.py +369 -0
  254. opentrons/protocol_api/core/legacy/labware_offset_provider.py +108 -0
  255. opentrons/protocol_api/core/legacy/legacy_instrument_core.py +709 -0
  256. opentrons/protocol_api/core/legacy/legacy_labware_core.py +235 -0
  257. opentrons/protocol_api/core/legacy/legacy_module_core.py +592 -0
  258. opentrons/protocol_api/core/legacy/legacy_protocol_core.py +612 -0
  259. opentrons/protocol_api/core/legacy/legacy_well_core.py +162 -0
  260. opentrons/protocol_api/core/legacy/load_info.py +67 -0
  261. opentrons/protocol_api/core/legacy/module_geometry.py +547 -0
  262. opentrons/protocol_api/core/legacy/well_geometry.py +148 -0
  263. opentrons/protocol_api/core/legacy_simulator/__init__.py +16 -0
  264. opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +624 -0
  265. opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +85 -0
  266. opentrons/protocol_api/core/module.py +484 -0
  267. opentrons/protocol_api/core/protocol.py +311 -0
  268. opentrons/protocol_api/core/robot.py +51 -0
  269. opentrons/protocol_api/core/well.py +116 -0
  270. opentrons/protocol_api/core/well_grid.py +45 -0
  271. opentrons/protocol_api/create_protocol_context.py +177 -0
  272. opentrons/protocol_api/deck.py +223 -0
  273. opentrons/protocol_api/disposal_locations.py +244 -0
  274. opentrons/protocol_api/instrument_context.py +3272 -0
  275. opentrons/protocol_api/labware.py +1579 -0
  276. opentrons/protocol_api/module_contexts.py +1447 -0
  277. opentrons/protocol_api/module_validation_and_errors.py +61 -0
  278. opentrons/protocol_api/protocol_context.py +1688 -0
  279. opentrons/protocol_api/robot_context.py +303 -0
  280. opentrons/protocol_api/validation.py +761 -0
  281. opentrons/protocol_engine/__init__.py +155 -0
  282. opentrons/protocol_engine/actions/__init__.py +65 -0
  283. opentrons/protocol_engine/actions/action_dispatcher.py +30 -0
  284. opentrons/protocol_engine/actions/action_handler.py +13 -0
  285. opentrons/protocol_engine/actions/actions.py +302 -0
  286. opentrons/protocol_engine/actions/get_state_update.py +38 -0
  287. opentrons/protocol_engine/clients/__init__.py +5 -0
  288. opentrons/protocol_engine/clients/sync_client.py +174 -0
  289. opentrons/protocol_engine/clients/transports.py +197 -0
  290. opentrons/protocol_engine/commands/__init__.py +757 -0
  291. opentrons/protocol_engine/commands/absorbance_reader/__init__.py +61 -0
  292. opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +154 -0
  293. opentrons/protocol_engine/commands/absorbance_reader/common.py +6 -0
  294. opentrons/protocol_engine/commands/absorbance_reader/initialize.py +151 -0
  295. opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +154 -0
  296. opentrons/protocol_engine/commands/absorbance_reader/read.py +226 -0
  297. opentrons/protocol_engine/commands/air_gap_in_place.py +162 -0
  298. opentrons/protocol_engine/commands/aspirate.py +244 -0
  299. opentrons/protocol_engine/commands/aspirate_in_place.py +184 -0
  300. opentrons/protocol_engine/commands/aspirate_while_tracking.py +211 -0
  301. opentrons/protocol_engine/commands/blow_out.py +146 -0
  302. opentrons/protocol_engine/commands/blow_out_in_place.py +119 -0
  303. opentrons/protocol_engine/commands/calibration/__init__.py +60 -0
  304. opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +166 -0
  305. opentrons/protocol_engine/commands/calibration/calibrate_module.py +117 -0
  306. opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +96 -0
  307. opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +156 -0
  308. opentrons/protocol_engine/commands/command.py +308 -0
  309. opentrons/protocol_engine/commands/command_unions.py +974 -0
  310. opentrons/protocol_engine/commands/comment.py +57 -0
  311. opentrons/protocol_engine/commands/configure_for_volume.py +108 -0
  312. opentrons/protocol_engine/commands/configure_nozzle_layout.py +115 -0
  313. opentrons/protocol_engine/commands/custom.py +67 -0
  314. opentrons/protocol_engine/commands/dispense.py +194 -0
  315. opentrons/protocol_engine/commands/dispense_in_place.py +179 -0
  316. opentrons/protocol_engine/commands/dispense_while_tracking.py +204 -0
  317. opentrons/protocol_engine/commands/drop_tip.py +232 -0
  318. opentrons/protocol_engine/commands/drop_tip_in_place.py +205 -0
  319. opentrons/protocol_engine/commands/flex_stacker/__init__.py +64 -0
  320. opentrons/protocol_engine/commands/flex_stacker/common.py +900 -0
  321. opentrons/protocol_engine/commands/flex_stacker/empty.py +293 -0
  322. opentrons/protocol_engine/commands/flex_stacker/fill.py +281 -0
  323. opentrons/protocol_engine/commands/flex_stacker/retrieve.py +339 -0
  324. opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +328 -0
  325. opentrons/protocol_engine/commands/flex_stacker/store.py +339 -0
  326. opentrons/protocol_engine/commands/generate_command_schema.py +61 -0
  327. opentrons/protocol_engine/commands/get_next_tip.py +134 -0
  328. opentrons/protocol_engine/commands/get_tip_presence.py +87 -0
  329. opentrons/protocol_engine/commands/hash_command_params.py +38 -0
  330. opentrons/protocol_engine/commands/heater_shaker/__init__.py +102 -0
  331. opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +83 -0
  332. opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +82 -0
  333. opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +84 -0
  334. opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +110 -0
  335. opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +125 -0
  336. opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +90 -0
  337. opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +102 -0
  338. opentrons/protocol_engine/commands/home.py +100 -0
  339. opentrons/protocol_engine/commands/identify_module.py +86 -0
  340. opentrons/protocol_engine/commands/labware_handling_common.py +29 -0
  341. opentrons/protocol_engine/commands/liquid_probe.py +464 -0
  342. opentrons/protocol_engine/commands/load_labware.py +210 -0
  343. opentrons/protocol_engine/commands/load_lid.py +154 -0
  344. opentrons/protocol_engine/commands/load_lid_stack.py +272 -0
  345. opentrons/protocol_engine/commands/load_liquid.py +95 -0
  346. opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
  347. opentrons/protocol_engine/commands/load_module.py +223 -0
  348. opentrons/protocol_engine/commands/load_pipette.py +167 -0
  349. opentrons/protocol_engine/commands/magnetic_module/__init__.py +32 -0
  350. opentrons/protocol_engine/commands/magnetic_module/disengage.py +97 -0
  351. opentrons/protocol_engine/commands/magnetic_module/engage.py +119 -0
  352. opentrons/protocol_engine/commands/move_labware.py +546 -0
  353. opentrons/protocol_engine/commands/move_relative.py +102 -0
  354. opentrons/protocol_engine/commands/move_to_addressable_area.py +176 -0
  355. opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +198 -0
  356. opentrons/protocol_engine/commands/move_to_coordinates.py +107 -0
  357. opentrons/protocol_engine/commands/move_to_well.py +119 -0
  358. opentrons/protocol_engine/commands/movement_common.py +338 -0
  359. opentrons/protocol_engine/commands/pick_up_tip.py +241 -0
  360. opentrons/protocol_engine/commands/pipetting_common.py +443 -0
  361. opentrons/protocol_engine/commands/prepare_to_aspirate.py +121 -0
  362. opentrons/protocol_engine/commands/pressure_dispense.py +155 -0
  363. opentrons/protocol_engine/commands/reload_labware.py +90 -0
  364. opentrons/protocol_engine/commands/retract_axis.py +75 -0
  365. opentrons/protocol_engine/commands/robot/__init__.py +70 -0
  366. opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +96 -0
  367. opentrons/protocol_engine/commands/robot/common.py +18 -0
  368. opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
  369. opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
  370. opentrons/protocol_engine/commands/robot/move_to.py +94 -0
  371. opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +86 -0
  372. opentrons/protocol_engine/commands/save_position.py +109 -0
  373. opentrons/protocol_engine/commands/seal_pipette_to_tip.py +353 -0
  374. opentrons/protocol_engine/commands/set_rail_lights.py +67 -0
  375. opentrons/protocol_engine/commands/set_status_bar.py +89 -0
  376. opentrons/protocol_engine/commands/temperature_module/__init__.py +46 -0
  377. opentrons/protocol_engine/commands/temperature_module/deactivate.py +86 -0
  378. opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +97 -0
  379. opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +104 -0
  380. opentrons/protocol_engine/commands/thermocycler/__init__.py +152 -0
  381. opentrons/protocol_engine/commands/thermocycler/close_lid.py +87 -0
  382. opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +80 -0
  383. opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +80 -0
  384. opentrons/protocol_engine/commands/thermocycler/open_lid.py +87 -0
  385. opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +171 -0
  386. opentrons/protocol_engine/commands/thermocycler/run_profile.py +124 -0
  387. opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +140 -0
  388. opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +100 -0
  389. opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +93 -0
  390. opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +89 -0
  391. opentrons/protocol_engine/commands/touch_tip.py +189 -0
  392. opentrons/protocol_engine/commands/unsafe/__init__.py +161 -0
  393. opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +100 -0
  394. opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +121 -0
  395. opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +82 -0
  396. opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +208 -0
  397. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_close_latch.py +94 -0
  398. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_manual_retrieve.py +295 -0
  399. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_open_latch.py +91 -0
  400. opentrons/protocol_engine/commands/unsafe/unsafe_stacker_prepare_shuttle.py +136 -0
  401. opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +77 -0
  402. opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +90 -0
  403. opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +153 -0
  404. opentrons/protocol_engine/commands/verify_tip_presence.py +100 -0
  405. opentrons/protocol_engine/commands/wait_for_duration.py +76 -0
  406. opentrons/protocol_engine/commands/wait_for_resume.py +75 -0
  407. opentrons/protocol_engine/create_protocol_engine.py +193 -0
  408. opentrons/protocol_engine/engine_support.py +28 -0
  409. opentrons/protocol_engine/error_recovery_policy.py +81 -0
  410. opentrons/protocol_engine/errors/__init__.py +191 -0
  411. opentrons/protocol_engine/errors/error_occurrence.py +182 -0
  412. opentrons/protocol_engine/errors/exceptions.py +1308 -0
  413. opentrons/protocol_engine/execution/__init__.py +50 -0
  414. opentrons/protocol_engine/execution/command_executor.py +216 -0
  415. opentrons/protocol_engine/execution/create_queue_worker.py +102 -0
  416. opentrons/protocol_engine/execution/door_watcher.py +119 -0
  417. opentrons/protocol_engine/execution/equipment.py +819 -0
  418. opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +101 -0
  419. opentrons/protocol_engine/execution/gantry_mover.py +686 -0
  420. opentrons/protocol_engine/execution/hardware_stopper.py +147 -0
  421. opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +207 -0
  422. opentrons/protocol_engine/execution/labware_movement.py +297 -0
  423. opentrons/protocol_engine/execution/movement.py +350 -0
  424. opentrons/protocol_engine/execution/pipetting.py +607 -0
  425. opentrons/protocol_engine/execution/queue_worker.py +86 -0
  426. opentrons/protocol_engine/execution/rail_lights.py +25 -0
  427. opentrons/protocol_engine/execution/run_control.py +33 -0
  428. opentrons/protocol_engine/execution/status_bar.py +34 -0
  429. opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +188 -0
  430. opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +81 -0
  431. opentrons/protocol_engine/execution/tip_handler.py +550 -0
  432. opentrons/protocol_engine/labware_offset_standardization.py +194 -0
  433. opentrons/protocol_engine/notes/__init__.py +17 -0
  434. opentrons/protocol_engine/notes/notes.py +59 -0
  435. opentrons/protocol_engine/plugins.py +104 -0
  436. opentrons/protocol_engine/protocol_engine.py +683 -0
  437. opentrons/protocol_engine/resources/__init__.py +26 -0
  438. opentrons/protocol_engine/resources/deck_configuration_provider.py +232 -0
  439. opentrons/protocol_engine/resources/deck_data_provider.py +94 -0
  440. opentrons/protocol_engine/resources/file_provider.py +161 -0
  441. opentrons/protocol_engine/resources/fixture_validation.py +68 -0
  442. opentrons/protocol_engine/resources/labware_data_provider.py +106 -0
  443. opentrons/protocol_engine/resources/labware_validation.py +73 -0
  444. opentrons/protocol_engine/resources/model_utils.py +32 -0
  445. opentrons/protocol_engine/resources/module_data_provider.py +44 -0
  446. opentrons/protocol_engine/resources/ot3_validation.py +21 -0
  447. opentrons/protocol_engine/resources/pipette_data_provider.py +379 -0
  448. opentrons/protocol_engine/slot_standardization.py +128 -0
  449. opentrons/protocol_engine/state/__init__.py +1 -0
  450. opentrons/protocol_engine/state/_abstract_store.py +27 -0
  451. opentrons/protocol_engine/state/_axis_aligned_bounding_box.py +50 -0
  452. opentrons/protocol_engine/state/_labware_origin_math.py +636 -0
  453. opentrons/protocol_engine/state/_move_types.py +83 -0
  454. opentrons/protocol_engine/state/_well_math.py +193 -0
  455. opentrons/protocol_engine/state/addressable_areas.py +699 -0
  456. opentrons/protocol_engine/state/command_history.py +309 -0
  457. opentrons/protocol_engine/state/commands.py +1164 -0
  458. opentrons/protocol_engine/state/config.py +39 -0
  459. opentrons/protocol_engine/state/files.py +57 -0
  460. opentrons/protocol_engine/state/fluid_stack.py +138 -0
  461. opentrons/protocol_engine/state/geometry.py +2408 -0
  462. opentrons/protocol_engine/state/inner_well_math_utils.py +548 -0
  463. opentrons/protocol_engine/state/labware.py +1432 -0
  464. opentrons/protocol_engine/state/liquid_classes.py +82 -0
  465. opentrons/protocol_engine/state/liquids.py +73 -0
  466. opentrons/protocol_engine/state/module_substates/__init__.py +45 -0
  467. opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +35 -0
  468. opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +112 -0
  469. opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +115 -0
  470. opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +17 -0
  471. opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +65 -0
  472. opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +67 -0
  473. opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +163 -0
  474. opentrons/protocol_engine/state/modules.py +1515 -0
  475. opentrons/protocol_engine/state/motion.py +373 -0
  476. opentrons/protocol_engine/state/pipettes.py +905 -0
  477. opentrons/protocol_engine/state/state.py +421 -0
  478. opentrons/protocol_engine/state/state_summary.py +36 -0
  479. opentrons/protocol_engine/state/tips.py +420 -0
  480. opentrons/protocol_engine/state/update_types.py +904 -0
  481. opentrons/protocol_engine/state/wells.py +290 -0
  482. opentrons/protocol_engine/types/__init__.py +310 -0
  483. opentrons/protocol_engine/types/automatic_tip_selection.py +39 -0
  484. opentrons/protocol_engine/types/command_annotations.py +53 -0
  485. opentrons/protocol_engine/types/deck_configuration.py +81 -0
  486. opentrons/protocol_engine/types/execution.py +96 -0
  487. opentrons/protocol_engine/types/hardware_passthrough.py +25 -0
  488. opentrons/protocol_engine/types/instrument.py +47 -0
  489. opentrons/protocol_engine/types/instrument_sensors.py +47 -0
  490. opentrons/protocol_engine/types/labware.py +131 -0
  491. opentrons/protocol_engine/types/labware_movement.py +22 -0
  492. opentrons/protocol_engine/types/labware_offset_location.py +111 -0
  493. opentrons/protocol_engine/types/labware_offset_vector.py +16 -0
  494. opentrons/protocol_engine/types/liquid.py +40 -0
  495. opentrons/protocol_engine/types/liquid_class.py +59 -0
  496. opentrons/protocol_engine/types/liquid_handling.py +13 -0
  497. opentrons/protocol_engine/types/liquid_level_detection.py +191 -0
  498. opentrons/protocol_engine/types/location.py +194 -0
  499. opentrons/protocol_engine/types/module.py +310 -0
  500. opentrons/protocol_engine/types/partial_tip_configuration.py +76 -0
  501. opentrons/protocol_engine/types/run_time_parameters.py +133 -0
  502. opentrons/protocol_engine/types/tip.py +18 -0
  503. opentrons/protocol_engine/types/util.py +21 -0
  504. opentrons/protocol_engine/types/well_position.py +124 -0
  505. opentrons/protocol_reader/__init__.py +37 -0
  506. opentrons/protocol_reader/extract_labware_definitions.py +66 -0
  507. opentrons/protocol_reader/file_format_validator.py +152 -0
  508. opentrons/protocol_reader/file_hasher.py +27 -0
  509. opentrons/protocol_reader/file_identifier.py +284 -0
  510. opentrons/protocol_reader/file_reader_writer.py +90 -0
  511. opentrons/protocol_reader/input_file.py +16 -0
  512. opentrons/protocol_reader/protocol_files_invalid_error.py +6 -0
  513. opentrons/protocol_reader/protocol_reader.py +188 -0
  514. opentrons/protocol_reader/protocol_source.py +124 -0
  515. opentrons/protocol_reader/role_analyzer.py +86 -0
  516. opentrons/protocol_runner/__init__.py +26 -0
  517. opentrons/protocol_runner/create_simulating_orchestrator.py +118 -0
  518. opentrons/protocol_runner/json_file_reader.py +55 -0
  519. opentrons/protocol_runner/json_translator.py +314 -0
  520. opentrons/protocol_runner/legacy_command_mapper.py +852 -0
  521. opentrons/protocol_runner/legacy_context_plugin.py +116 -0
  522. opentrons/protocol_runner/protocol_runner.py +530 -0
  523. opentrons/protocol_runner/python_protocol_wrappers.py +179 -0
  524. opentrons/protocol_runner/run_orchestrator.py +496 -0
  525. opentrons/protocol_runner/task_queue.py +95 -0
  526. opentrons/protocols/__init__.py +6 -0
  527. opentrons/protocols/advanced_control/__init__.py +0 -0
  528. opentrons/protocols/advanced_control/common.py +38 -0
  529. opentrons/protocols/advanced_control/mix.py +60 -0
  530. opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
  531. opentrons/protocols/advanced_control/transfers/common.py +180 -0
  532. opentrons/protocols/advanced_control/transfers/transfer.py +972 -0
  533. opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +231 -0
  534. opentrons/protocols/api_support/__init__.py +0 -0
  535. opentrons/protocols/api_support/constants.py +8 -0
  536. opentrons/protocols/api_support/deck_type.py +110 -0
  537. opentrons/protocols/api_support/definitions.py +18 -0
  538. opentrons/protocols/api_support/instrument.py +151 -0
  539. opentrons/protocols/api_support/labware_like.py +233 -0
  540. opentrons/protocols/api_support/tip_tracker.py +175 -0
  541. opentrons/protocols/api_support/types.py +32 -0
  542. opentrons/protocols/api_support/util.py +403 -0
  543. opentrons/protocols/bundle.py +89 -0
  544. opentrons/protocols/duration/__init__.py +4 -0
  545. opentrons/protocols/duration/errors.py +5 -0
  546. opentrons/protocols/duration/estimator.py +628 -0
  547. opentrons/protocols/execution/__init__.py +0 -0
  548. opentrons/protocols/execution/dev_types.py +181 -0
  549. opentrons/protocols/execution/errors.py +40 -0
  550. opentrons/protocols/execution/execute.py +84 -0
  551. opentrons/protocols/execution/execute_json_v3.py +275 -0
  552. opentrons/protocols/execution/execute_json_v4.py +359 -0
  553. opentrons/protocols/execution/execute_json_v5.py +28 -0
  554. opentrons/protocols/execution/execute_python.py +169 -0
  555. opentrons/protocols/execution/json_dispatchers.py +87 -0
  556. opentrons/protocols/execution/types.py +7 -0
  557. opentrons/protocols/geometry/__init__.py +0 -0
  558. opentrons/protocols/geometry/planning.py +297 -0
  559. opentrons/protocols/labware.py +312 -0
  560. opentrons/protocols/models/__init__.py +0 -0
  561. opentrons/protocols/models/json_protocol.py +679 -0
  562. opentrons/protocols/parameters/__init__.py +0 -0
  563. opentrons/protocols/parameters/csv_parameter_definition.py +77 -0
  564. opentrons/protocols/parameters/csv_parameter_interface.py +96 -0
  565. opentrons/protocols/parameters/exceptions.py +34 -0
  566. opentrons/protocols/parameters/parameter_definition.py +272 -0
  567. opentrons/protocols/parameters/types.py +17 -0
  568. opentrons/protocols/parameters/validation.py +267 -0
  569. opentrons/protocols/parse.py +671 -0
  570. opentrons/protocols/types.py +159 -0
  571. opentrons/py.typed +0 -0
  572. opentrons/resources/scripts/lpc21isp +0 -0
  573. opentrons/resources/smoothie-edge-8414642.hex +23010 -0
  574. opentrons/simulate.py +1065 -0
  575. opentrons/system/__init__.py +6 -0
  576. opentrons/system/camera.py +51 -0
  577. opentrons/system/log_control.py +59 -0
  578. opentrons/system/nmcli.py +856 -0
  579. opentrons/system/resin.py +24 -0
  580. opentrons/system/smoothie_update.py +15 -0
  581. opentrons/system/wifi.py +204 -0
  582. opentrons/tools/__init__.py +0 -0
  583. opentrons/tools/args_handler.py +22 -0
  584. opentrons/tools/write_pipette_memory.py +157 -0
  585. opentrons/types.py +618 -0
  586. opentrons/util/__init__.py +1 -0
  587. opentrons/util/async_helpers.py +166 -0
  588. opentrons/util/broker.py +84 -0
  589. opentrons/util/change_notifier.py +47 -0
  590. opentrons/util/entrypoint_util.py +278 -0
  591. opentrons/util/get_union_elements.py +26 -0
  592. opentrons/util/helpers.py +6 -0
  593. opentrons/util/linal.py +178 -0
  594. opentrons/util/logging_config.py +265 -0
  595. opentrons/util/logging_queue_handler.py +61 -0
  596. opentrons/util/performance_helpers.py +157 -0
  597. opentrons-8.6.0.dist-info/METADATA +37 -0
  598. opentrons-8.6.0.dist-info/RECORD +601 -0
  599. opentrons-8.6.0.dist-info/WHEEL +4 -0
  600. opentrons-8.6.0.dist-info/entry_points.txt +3 -0
  601. opentrons-8.6.0.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,155 @@
1
+ """Pressure Dispense-in-place command request, result, and implementation models."""
2
+
3
+ from __future__ import annotations
4
+ from typing import TYPE_CHECKING, Optional, Type, Union
5
+ from typing_extensions import Literal
6
+
7
+ from .pipetting_common import (
8
+ PipetteIdMixin,
9
+ FlowRateMixin,
10
+ DispenseVolumeMixin,
11
+ BaseLiquidHandlingResult,
12
+ dispense_in_place,
13
+ increase_evo_disp_count,
14
+ DEFAULT_CORRECTION_VOLUME,
15
+ )
16
+ from .movement_common import (
17
+ LiquidHandlingWellLocationMixin,
18
+ StallOrCollisionError,
19
+ move_to_well,
20
+ )
21
+
22
+ from .command import (
23
+ AbstractCommandImpl,
24
+ BaseCommand,
25
+ BaseCommandCreate,
26
+ SuccessData,
27
+ DefinedErrorData,
28
+ )
29
+ from ..state.update_types import StateUpdate
30
+ from ..errors import ProtocolEngineError
31
+
32
+ if TYPE_CHECKING:
33
+ from ..execution import PipettingHandler, GantryMover, MovementHandler
34
+ from ..resources import ModelUtils
35
+ from ..state.state import StateView
36
+
37
+
38
+ PressureDispenseCommandType = Literal["pressureDispense"]
39
+
40
+
41
+ class PressureDispenseParams(
42
+ PipetteIdMixin, DispenseVolumeMixin, FlowRateMixin, LiquidHandlingWellLocationMixin
43
+ ):
44
+ """Payload required to pressure dispense in place."""
45
+
46
+ pass
47
+
48
+
49
+ class PressureDispenseResult(BaseLiquidHandlingResult):
50
+ """Result data from the execution of a PressureDispense command."""
51
+
52
+ pass
53
+
54
+
55
+ _ExecuteReturn = Union[
56
+ SuccessData[PressureDispenseResult],
57
+ DefinedErrorData[StallOrCollisionError],
58
+ ]
59
+
60
+
61
+ class PressureDispenseImplementation(
62
+ AbstractCommandImpl[PressureDispenseParams, _ExecuteReturn]
63
+ ):
64
+ """Pressure dispense command implementation."""
65
+
66
+ def __init__(
67
+ self,
68
+ pipetting: PipettingHandler,
69
+ state_view: StateView,
70
+ gantry_mover: GantryMover,
71
+ model_utils: ModelUtils,
72
+ movement: MovementHandler,
73
+ **kwargs: object,
74
+ ) -> None:
75
+ self._pipetting = pipetting
76
+ self._state_view = state_view
77
+ self._gantry_mover = gantry_mover
78
+ self._model_utils = model_utils
79
+ self._movement = movement
80
+
81
+ async def execute(self, params: PressureDispenseParams) -> _ExecuteReturn:
82
+ """Move to and pressure dispense to the requested well."""
83
+ well_location = params.wellLocation
84
+ labware_id = params.labwareId
85
+ well_name = params.wellName
86
+
87
+ move_result = await move_to_well(
88
+ movement=self._movement,
89
+ model_utils=self._model_utils,
90
+ pipette_id=params.pipetteId,
91
+ labware_id=labware_id,
92
+ well_name=well_name,
93
+ well_location=well_location,
94
+ )
95
+ if isinstance(move_result, DefinedErrorData):
96
+ return move_result
97
+
98
+ current_position = await self._gantry_mover.get_position(params.pipetteId)
99
+ await increase_evo_disp_count(
100
+ pipette_id=params.pipetteId, pipetting=self._pipetting
101
+ )
102
+ result = await dispense_in_place(
103
+ pipette_id=params.pipetteId,
104
+ volume=params.volume,
105
+ flow_rate=params.flowRate,
106
+ push_out=None,
107
+ location_if_error={
108
+ "retryLocation": (
109
+ current_position.x,
110
+ current_position.y,
111
+ current_position.z,
112
+ )
113
+ },
114
+ pipetting=self._pipetting,
115
+ model_utils=self._model_utils,
116
+ correction_volume=params.correctionVolume or DEFAULT_CORRECTION_VOLUME,
117
+ )
118
+ if isinstance(result, DefinedErrorData):
119
+ # TODO (chb, 2025-01-29): Remove this and the OverpressureError returns once disabled for this function
120
+ raise ProtocolEngineError(
121
+ message="Overpressure Error during Resin Tip Dispense Command."
122
+ )
123
+ return SuccessData(
124
+ public=PressureDispenseResult(volume=result.public.volume),
125
+ state_update=StateUpdate.reduce(
126
+ move_result.state_update, result.state_update
127
+ ),
128
+ )
129
+
130
+
131
+ class PressureDispense(
132
+ BaseCommand[
133
+ PressureDispenseParams,
134
+ PressureDispenseResult,
135
+ StallOrCollisionError,
136
+ ]
137
+ ):
138
+ """PressureDispense command model."""
139
+
140
+ commandType: PressureDispenseCommandType = "pressureDispense"
141
+ params: PressureDispenseParams
142
+ result: Optional[PressureDispenseResult] = None
143
+
144
+ _ImplementationCls: Type[
145
+ PressureDispenseImplementation
146
+ ] = PressureDispenseImplementation
147
+
148
+
149
+ class PressureDispenseCreate(BaseCommandCreate[PressureDispenseParams]):
150
+ """PressureDispense command request model."""
151
+
152
+ commandType: PressureDispenseCommandType = "pressureDispense"
153
+ params: PressureDispenseParams
154
+
155
+ _CommandCls: Type[PressureDispense] = PressureDispense
@@ -0,0 +1,90 @@
1
+ """Reload labware command request, result, and implementation models."""
2
+
3
+ from __future__ import annotations
4
+ from pydantic import BaseModel, Field
5
+ from typing import TYPE_CHECKING, Optional, Type
6
+ from typing_extensions import Literal
7
+
8
+ from .labware_handling_common import LabwarePositionResultMixin
9
+ from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
10
+ from ..errors.error_occurrence import ErrorOccurrence
11
+ from ..state.update_types import StateUpdate
12
+
13
+ if TYPE_CHECKING:
14
+ from ..state.state import StateView
15
+ from ..execution import EquipmentHandler
16
+
17
+
18
+ ReloadLabwareCommandType = Literal["reloadLabware"]
19
+
20
+
21
+ class ReloadLabwareParams(BaseModel):
22
+ """Payload required to load a labware into a slot."""
23
+
24
+ labwareId: str = Field(
25
+ ..., description="The already-loaded labware instance to update."
26
+ )
27
+
28
+
29
+ class ReloadLabwareResult(LabwarePositionResultMixin):
30
+ """Result data from the execution of a LoadLabware command."""
31
+
32
+
33
+ class ReloadLabwareImplementation(
34
+ AbstractCommandImpl[ReloadLabwareParams, SuccessData[ReloadLabwareResult]]
35
+ ):
36
+ """Reload labware command implementation."""
37
+
38
+ def __init__(
39
+ self, equipment: EquipmentHandler, state_view: StateView, **kwargs: object
40
+ ) -> None:
41
+ self._equipment = equipment
42
+ self._state_view = state_view
43
+
44
+ async def execute(
45
+ self, params: ReloadLabwareParams
46
+ ) -> SuccessData[ReloadLabwareResult]:
47
+ """Reload the definition and calibration data for a specific labware."""
48
+ reloaded_labware = await self._equipment.reload_labware(
49
+ labware_id=params.labwareId,
50
+ )
51
+
52
+ state_update = StateUpdate()
53
+
54
+ state_update.set_labware_location(
55
+ labware_id=params.labwareId,
56
+ new_location=reloaded_labware.location,
57
+ new_offset_id=reloaded_labware.offsetId,
58
+ )
59
+
60
+ return SuccessData(
61
+ public=ReloadLabwareResult(
62
+ labwareId=params.labwareId,
63
+ offsetId=reloaded_labware.offsetId,
64
+ locationSequence=self._state_view.geometry.get_predicted_location_sequence(
65
+ reloaded_labware.location
66
+ ),
67
+ ),
68
+ state_update=state_update,
69
+ )
70
+
71
+
72
+ class ReloadLabware(
73
+ BaseCommand[ReloadLabwareParams, ReloadLabwareResult, ErrorOccurrence]
74
+ ):
75
+ """Reload labware command resource model."""
76
+
77
+ commandType: ReloadLabwareCommandType = "reloadLabware"
78
+ params: ReloadLabwareParams
79
+ result: Optional[ReloadLabwareResult] = None
80
+
81
+ _ImplementationCls: Type[ReloadLabwareImplementation] = ReloadLabwareImplementation
82
+
83
+
84
+ class ReloadLabwareCreate(BaseCommandCreate[ReloadLabwareParams]):
85
+ """Reload labware command creation request."""
86
+
87
+ commandType: ReloadLabwareCommandType = "reloadLabware"
88
+ params: ReloadLabwareParams
89
+
90
+ _CommandCls: Type[ReloadLabware] = ReloadLabware
@@ -0,0 +1,75 @@
1
+ """Retract Axis command payload, result, and implementation models."""
2
+ from __future__ import annotations
3
+ from pydantic import BaseModel, Field
4
+ from typing import TYPE_CHECKING, Optional, Type
5
+ from typing_extensions import Literal
6
+
7
+ from ..state import update_types
8
+ from ..types import MotorAxis
9
+ from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
10
+ from ..errors.error_occurrence import ErrorOccurrence
11
+
12
+ if TYPE_CHECKING:
13
+ from ..execution import MovementHandler
14
+
15
+ RetractAxisCommandType = Literal["retractAxis"]
16
+
17
+
18
+ class RetractAxisParams(BaseModel):
19
+ """Payload required for a Retract Axis command."""
20
+
21
+ axis: MotorAxis = Field(
22
+ ...,
23
+ description=(
24
+ "Axis to retract to its home position as quickly as safely possible."
25
+ " The difference between retracting an axis and homing an axis using the"
26
+ " home command is that a home will always probe the limit switch and"
27
+ " will work as the first motion command a robot will need to execute;"
28
+ " On the other hand, retraction will rely on this previously determined "
29
+ " home position to move to it as fast as safely possible."
30
+ " So on the Flex, it will move (fast) the axis to the previously recorded home position"
31
+ " and on the OT2, it will move (fast) the axis a safe distance from the previously"
32
+ " recorded home position, and then slowly approach the limit switch."
33
+ ),
34
+ )
35
+
36
+
37
+ class RetractAxisResult(BaseModel):
38
+ """Result data from the execution of a Rectract Axis command."""
39
+
40
+
41
+ class RetractAxisImplementation(
42
+ AbstractCommandImpl[RetractAxisParams, SuccessData[RetractAxisResult]]
43
+ ):
44
+ """Retract Axis command implementation."""
45
+
46
+ def __init__(self, movement: MovementHandler, **kwargs: object) -> None:
47
+ self._movement = movement
48
+
49
+ async def execute(
50
+ self, params: RetractAxisParams
51
+ ) -> SuccessData[RetractAxisResult]:
52
+ """Retract the specified axis."""
53
+ state_update = update_types.StateUpdate()
54
+ await self._movement.retract_axis(axis=params.axis)
55
+ state_update.clear_all_pipette_locations()
56
+ return SuccessData(public=RetractAxisResult(), state_update=state_update)
57
+
58
+
59
+ class RetractAxis(BaseCommand[RetractAxisParams, RetractAxisResult, ErrorOccurrence]):
60
+ """Command to retract the specified axis to its home position."""
61
+
62
+ commandType: RetractAxisCommandType = "retractAxis"
63
+ params: RetractAxisParams
64
+ result: Optional[RetractAxisResult] = None
65
+
66
+ _ImplementationCls: Type[RetractAxisImplementation] = RetractAxisImplementation
67
+
68
+
69
+ class RetractAxisCreate(BaseCommandCreate[RetractAxisParams]):
70
+ """Data to create a Retract Axis command."""
71
+
72
+ commandType: RetractAxisCommandType = "retractAxis"
73
+ params: RetractAxisParams
74
+
75
+ _CommandCls: Type[RetractAxis] = RetractAxis
@@ -0,0 +1,70 @@
1
+ """Robot movement commands."""
2
+
3
+ from .move_to import (
4
+ MoveTo,
5
+ MoveToCreate,
6
+ MoveToParams,
7
+ MoveToResult,
8
+ MoveToCommandType,
9
+ )
10
+ from .move_axes_to import (
11
+ MoveAxesTo,
12
+ MoveAxesToCreate,
13
+ MoveAxesToParams,
14
+ MoveAxesToResult,
15
+ MoveAxesToCommandType,
16
+ )
17
+ from .move_axes_relative import (
18
+ MoveAxesRelative,
19
+ MoveAxesRelativeCreate,
20
+ MoveAxesRelativeParams,
21
+ MoveAxesRelativeResult,
22
+ MoveAxesRelativeCommandType,
23
+ )
24
+ from .open_gripper_jaw import (
25
+ OpenGripperJaw,
26
+ OpenGripperJawCreate,
27
+ OpenGripperJawParams,
28
+ OpenGripperJawResult,
29
+ OpenGripperJawCommandType,
30
+ )
31
+ from .close_gripper_jaw import (
32
+ CloseGripperJaw,
33
+ CloseGripperJawCreate,
34
+ CloseGripperJawParams,
35
+ CloseGripperJawResult,
36
+ CloseGripperJawCommandType,
37
+ )
38
+
39
+ __all__ = [
40
+ # robot/moveTo
41
+ "MoveTo",
42
+ "MoveToCreate",
43
+ "MoveToParams",
44
+ "MoveToResult",
45
+ "MoveToCommandType",
46
+ # robot/moveAxesTo
47
+ "MoveAxesTo",
48
+ "MoveAxesToCreate",
49
+ "MoveAxesToParams",
50
+ "MoveAxesToResult",
51
+ "MoveAxesToCommandType",
52
+ # robot/moveAxesRelative
53
+ "MoveAxesRelative",
54
+ "MoveAxesRelativeCreate",
55
+ "MoveAxesRelativeParams",
56
+ "MoveAxesRelativeResult",
57
+ "MoveAxesRelativeCommandType",
58
+ # robot/openGripperJaw
59
+ "OpenGripperJaw",
60
+ "OpenGripperJawCreate",
61
+ "OpenGripperJawParams",
62
+ "OpenGripperJawResult",
63
+ "OpenGripperJawCommandType",
64
+ # robot/closeGripperJaw
65
+ "CloseGripperJaw",
66
+ "CloseGripperJawCreate",
67
+ "CloseGripperJawParams",
68
+ "CloseGripperJawResult",
69
+ "CloseGripperJawCommandType",
70
+ ]
@@ -0,0 +1,96 @@
1
+ """Command models for opening a gripper jaw."""
2
+
3
+ from __future__ import annotations
4
+ from typing import Literal, Type, Optional, Any, TYPE_CHECKING
5
+
6
+ from pydantic import BaseModel, Field
7
+ from pydantic.json_schema import SkipJsonSchema
8
+
9
+ from opentrons.hardware_control import HardwareControlAPI
10
+ from opentrons.protocol_engine.resources import ensure_ot3_hardware
11
+
12
+ from ..command import (
13
+ AbstractCommandImpl,
14
+ BaseCommand,
15
+ BaseCommandCreate,
16
+ SuccessData,
17
+ )
18
+ from opentrons.protocol_engine.errors.error_occurrence import ErrorOccurrence
19
+
20
+ if TYPE_CHECKING:
21
+ from ...state.state import StateView
22
+
23
+
24
+ CloseGripperJawCommandType = Literal["robot/closeGripperJaw"]
25
+
26
+
27
+ def _remove_default(s: dict[str, Any]) -> None:
28
+ s.pop("default", None)
29
+
30
+
31
+ class CloseGripperJawParams(BaseModel):
32
+ """Payload required to close a gripper."""
33
+
34
+ force: float | SkipJsonSchema[None] = Field(
35
+ default=None,
36
+ description="The force the gripper should use to hold the jaws, falls to default if none is provided.",
37
+ json_schema_extra=_remove_default,
38
+ )
39
+
40
+
41
+ class CloseGripperJawResult(BaseModel):
42
+ """Result data from the execution of a CloseGripperJaw command."""
43
+
44
+ pass
45
+
46
+
47
+ class CloseGripperJawImplementation(
48
+ AbstractCommandImpl[CloseGripperJawParams, SuccessData[CloseGripperJawResult]]
49
+ ):
50
+ """CloseGripperJaw command implementation."""
51
+
52
+ def __init__(
53
+ self,
54
+ hardware_api: HardwareControlAPI,
55
+ state_view: StateView,
56
+ **kwargs: object,
57
+ ) -> None:
58
+ self._hardware_api = hardware_api
59
+ self._state_view = state_view
60
+
61
+ async def execute(
62
+ self, params: CloseGripperJawParams
63
+ ) -> SuccessData[CloseGripperJawResult]:
64
+ """Release the gripper."""
65
+ if self._state_view.config.use_virtual_gripper:
66
+ return SuccessData(
67
+ public=CloseGripperJawResult(),
68
+ )
69
+ ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
70
+ await ot3_hardware_api.grip(force_newtons=params.force)
71
+ return SuccessData(
72
+ public=CloseGripperJawResult(),
73
+ )
74
+
75
+
76
+ class CloseGripperJaw(
77
+ BaseCommand[CloseGripperJawParams, CloseGripperJawResult, ErrorOccurrence]
78
+ ):
79
+ """CloseGripperJaw command model."""
80
+
81
+ commandType: CloseGripperJawCommandType = "robot/closeGripperJaw"
82
+ params: CloseGripperJawParams
83
+ result: Optional[CloseGripperJawResult] = None
84
+
85
+ _ImplementationCls: Type[
86
+ CloseGripperJawImplementation
87
+ ] = CloseGripperJawImplementation
88
+
89
+
90
+ class CloseGripperJawCreate(BaseCommandCreate[CloseGripperJawParams]):
91
+ """CloseGripperJaw command request model."""
92
+
93
+ commandType: CloseGripperJawCommandType = "robot/closeGripperJaw"
94
+ params: CloseGripperJawParams
95
+
96
+ _CommandCls: Type[CloseGripperJaw] = CloseGripperJaw
@@ -0,0 +1,18 @@
1
+ """Shared result types for robot API commands."""
2
+ from pydantic import BaseModel, Field
3
+
4
+ from typing import Dict
5
+ from opentrons.protocol_engine.types import MotorAxis
6
+
7
+
8
+ MotorAxisMapType = Dict[MotorAxis, float]
9
+ default_position = {ax: 0.0 for ax in MotorAxis}
10
+
11
+
12
+ class DestinationRobotPositionResult(BaseModel):
13
+ """The result dictionary of `MotorAxis` type."""
14
+
15
+ position: MotorAxisMapType = Field(
16
+ default=default_position,
17
+ description="The position of all axes on the robot. If no mount was provided, the last moved mount is used to determine the location.",
18
+ )
@@ -0,0 +1,101 @@
1
+ """Command models for moving any robot axis relative."""
2
+
3
+ from __future__ import annotations
4
+ from typing import Literal, Type, Optional, TYPE_CHECKING, Any
5
+
6
+ from pydantic import BaseModel, Field
7
+ from pydantic.json_schema import SkipJsonSchema
8
+ from opentrons.hardware_control import HardwareControlAPI
9
+ from opentrons.protocol_engine.resources import ensure_ot3_hardware
10
+
11
+ from .common import MotorAxisMapType, DestinationRobotPositionResult
12
+
13
+ from ..command import (
14
+ AbstractCommandImpl,
15
+ BaseCommand,
16
+ BaseCommandCreate,
17
+ SuccessData,
18
+ )
19
+ from ...errors.error_occurrence import ErrorOccurrence
20
+
21
+ if TYPE_CHECKING:
22
+ from opentrons.protocol_engine.execution import GantryMover
23
+
24
+
25
+ MoveAxesRelativeCommandType = Literal["robot/moveAxesRelative"]
26
+
27
+
28
+ def _remove_default(s: dict[str, Any]) -> None:
29
+ s.pop("default", None)
30
+
31
+
32
+ class MoveAxesRelativeParams(BaseModel):
33
+ """Payload required to move axes relative to position."""
34
+
35
+ axis_map: MotorAxisMapType = Field(
36
+ ..., description="A dictionary mapping axes to relative movements in mm."
37
+ )
38
+ speed: float | SkipJsonSchema[None] = Field(
39
+ default=None,
40
+ description="The max velocity to move the axes at. Will fall to hardware defaults if none provided.",
41
+ json_schema_extra=_remove_default,
42
+ )
43
+
44
+
45
+ class MoveAxesRelativeResult(DestinationRobotPositionResult):
46
+ """Result data from the execution of a MoveAxesRelative command."""
47
+
48
+ pass
49
+
50
+
51
+ class MoveAxesRelativeImplementation(
52
+ AbstractCommandImpl[MoveAxesRelativeParams, SuccessData[MoveAxesRelativeResult]]
53
+ ):
54
+ """MoveAxesRelative command implementation."""
55
+
56
+ def __init__(
57
+ self,
58
+ gantry_mover: GantryMover,
59
+ hardware_api: HardwareControlAPI,
60
+ **kwargs: object,
61
+ ) -> None:
62
+ self._gantry_mover = gantry_mover
63
+ self._hardware_api = hardware_api
64
+
65
+ async def execute(
66
+ self, params: MoveAxesRelativeParams
67
+ ) -> SuccessData[MoveAxesRelativeResult]:
68
+ """Move the axes on a flex a relative distance."""
69
+ # TODO (lc 08-16-2024) implement `move_axes` for OT 2 hardware controller
70
+ # and then we can remove this validation.
71
+ ensure_ot3_hardware(self._hardware_api)
72
+
73
+ current_position = await self._gantry_mover.move_axes(
74
+ axis_map=params.axis_map, speed=params.speed, relative_move=True
75
+ )
76
+ return SuccessData(
77
+ public=MoveAxesRelativeResult(position=current_position),
78
+ )
79
+
80
+
81
+ class MoveAxesRelative(
82
+ BaseCommand[MoveAxesRelativeParams, MoveAxesRelativeResult, ErrorOccurrence]
83
+ ):
84
+ """MoveAxesRelative command model."""
85
+
86
+ commandType: MoveAxesRelativeCommandType = "robot/moveAxesRelative"
87
+ params: MoveAxesRelativeParams
88
+ result: Optional[MoveAxesRelativeResult] = None
89
+
90
+ _ImplementationCls: Type[
91
+ MoveAxesRelativeImplementation
92
+ ] = MoveAxesRelativeImplementation
93
+
94
+
95
+ class MoveAxesRelativeCreate(BaseCommandCreate[MoveAxesRelativeParams]):
96
+ """MoveAxesRelative command request model."""
97
+
98
+ commandType: MoveAxesRelativeCommandType = "robot/moveAxesRelative"
99
+ params: MoveAxesRelativeParams
100
+
101
+ _CommandCls: Type[MoveAxesRelative] = MoveAxesRelative