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,89 @@
1
+ """Command models to wait for heating a Thermocycler's lid."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING
4
+ from typing_extensions import Literal, Type
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
9
+ from ...errors.error_occurrence import ErrorOccurrence
10
+
11
+ if TYPE_CHECKING:
12
+ from opentrons.protocol_engine.state.state import StateView
13
+ from opentrons.protocol_engine.execution import EquipmentHandler
14
+
15
+
16
+ WaitForLidTemperatureCommandType = Literal["thermocycler/waitForLidTemperature"]
17
+
18
+
19
+ class WaitForLidTemperatureParams(BaseModel):
20
+ """Input parameters to wait for Thermocycler's lid temperature."""
21
+
22
+ moduleId: str = Field(..., description="Unique ID of the Thermocycler Module.")
23
+
24
+
25
+ class WaitForLidTemperatureResult(BaseModel):
26
+ """Result data from wait for Thermocycler's lid temperature."""
27
+
28
+
29
+ class WaitForLidTemperatureImpl(
30
+ AbstractCommandImpl[
31
+ WaitForLidTemperatureParams, SuccessData[WaitForLidTemperatureResult]
32
+ ]
33
+ ):
34
+ """Execution implementation of Thermocycler's wait for lid temperature command."""
35
+
36
+ def __init__(
37
+ self,
38
+ state_view: StateView,
39
+ equipment: EquipmentHandler,
40
+ **unused_dependencies: object,
41
+ ) -> None:
42
+ self._state_view = state_view
43
+ self._equipment = equipment
44
+
45
+ async def execute(
46
+ self,
47
+ params: WaitForLidTemperatureParams,
48
+ ) -> SuccessData[WaitForLidTemperatureResult]:
49
+ """Wait for a Thermocycler's lid temperature."""
50
+ thermocycler_state = self._state_view.modules.get_thermocycler_module_substate(
51
+ params.moduleId
52
+ )
53
+
54
+ # Raises error if no target temperature
55
+ thermocycler_state.get_target_lid_temperature()
56
+
57
+ thermocycler_hardware = self._equipment.get_module_hardware_api(
58
+ thermocycler_state.module_id
59
+ )
60
+
61
+ if thermocycler_hardware is not None:
62
+ await thermocycler_hardware.wait_for_lid_target()
63
+
64
+ return SuccessData(
65
+ public=WaitForLidTemperatureResult(),
66
+ )
67
+
68
+
69
+ class WaitForLidTemperature(
70
+ BaseCommand[
71
+ WaitForLidTemperatureParams, WaitForLidTemperatureResult, ErrorOccurrence
72
+ ]
73
+ ):
74
+ """A command to wait for a Thermocycler's lid temperature."""
75
+
76
+ commandType: WaitForLidTemperatureCommandType = "thermocycler/waitForLidTemperature"
77
+ params: WaitForLidTemperatureParams
78
+ result: Optional[WaitForLidTemperatureResult] = None
79
+
80
+ _ImplementationCls: Type[WaitForLidTemperatureImpl] = WaitForLidTemperatureImpl
81
+
82
+
83
+ class WaitForLidTemperatureCreate(BaseCommandCreate[WaitForLidTemperatureParams]):
84
+ """A request to create Thermocycler's wait for lid temperature command."""
85
+
86
+ commandType: WaitForLidTemperatureCommandType = "thermocycler/waitForLidTemperature"
87
+ params: WaitForLidTemperatureParams
88
+
89
+ _CommandCls: Type[WaitForLidTemperature] = WaitForLidTemperature
@@ -0,0 +1,189 @@
1
+ """Touch tip command request, result, and implementation models."""
2
+
3
+ from __future__ import annotations
4
+ from typing import TYPE_CHECKING, Optional, Type, Any
5
+
6
+ from typing_extensions import Literal
7
+ from pydantic import Field
8
+ from pydantic.json_schema import SkipJsonSchema
9
+
10
+ from opentrons.types import Point
11
+
12
+ from ..errors import (
13
+ TouchTipDisabledError,
14
+ TouchTipIncompatibleArgumentsError,
15
+ LabwareIsTipRackError,
16
+ )
17
+ from ..types import DeckPoint
18
+ from .command import (
19
+ AbstractCommandImpl,
20
+ BaseCommand,
21
+ BaseCommandCreate,
22
+ SuccessData,
23
+ DefinedErrorData,
24
+ )
25
+ from .pipetting_common import (
26
+ PipetteIdMixin,
27
+ )
28
+ from .movement_common import (
29
+ WellLocationMixin,
30
+ DestinationPositionResult,
31
+ StallOrCollisionError,
32
+ move_to_well,
33
+ )
34
+
35
+ if TYPE_CHECKING:
36
+ from ..execution import MovementHandler, GantryMover
37
+ from ..state.state import StateView
38
+ from ..resources.model_utils import ModelUtils
39
+
40
+
41
+ TouchTipCommandType = Literal["touchTip"]
42
+
43
+
44
+ def _remove_default(s: dict[str, Any]) -> None:
45
+ s.pop("default", None)
46
+
47
+
48
+ class TouchTipParams(PipetteIdMixin, WellLocationMixin):
49
+ """Payload needed to touch a pipette tip the sides of a specific well."""
50
+
51
+ radius: float = Field(
52
+ 1.0,
53
+ description=(
54
+ "The proportion of the target well's radius the pipette tip will move towards."
55
+ ),
56
+ )
57
+
58
+ mmFromEdge: float | SkipJsonSchema[None] = Field(
59
+ None,
60
+ description="Offset away from the the well edge, in millimeters."
61
+ "Incompatible when a radius is included as a non 1.0 value.",
62
+ json_schema_extra=_remove_default,
63
+ )
64
+
65
+ speed: float | SkipJsonSchema[None] = Field(
66
+ None,
67
+ description=(
68
+ "Override the travel speed in mm/s."
69
+ " This controls the straight linear speed of motion."
70
+ ),
71
+ json_schema_extra=_remove_default,
72
+ )
73
+
74
+
75
+ class TouchTipResult(DestinationPositionResult):
76
+ """Result data from the execution of a TouchTip."""
77
+
78
+ pass
79
+
80
+
81
+ class TouchTipImplementation(
82
+ AbstractCommandImpl[
83
+ TouchTipParams,
84
+ SuccessData[TouchTipResult] | DefinedErrorData[StallOrCollisionError],
85
+ ]
86
+ ):
87
+ """Touch tip command implementation."""
88
+
89
+ def __init__(
90
+ self,
91
+ state_view: StateView,
92
+ movement: MovementHandler,
93
+ gantry_mover: GantryMover,
94
+ model_utils: ModelUtils,
95
+ **kwargs: object,
96
+ ) -> None:
97
+ self._state_view = state_view
98
+ self._movement = movement
99
+ self._gantry_mover = gantry_mover
100
+ self._model_utils = model_utils
101
+
102
+ async def execute(
103
+ self, params: TouchTipParams
104
+ ) -> SuccessData[TouchTipResult] | DefinedErrorData[StallOrCollisionError]:
105
+ """Touch tip to sides of a well using the requested pipette."""
106
+ pipette_id = params.pipetteId
107
+ labware_id = params.labwareId
108
+ well_name = params.wellName
109
+
110
+ if params.radius != 1.0 and params.mmFromEdge is not None:
111
+ raise TouchTipIncompatibleArgumentsError(
112
+ "Cannot use mmFromEdge with a radius that is not 1.0"
113
+ )
114
+
115
+ if self._state_view.labware.get_has_quirk(labware_id, "touchTipDisabled"):
116
+ raise TouchTipDisabledError(
117
+ f"Touch tip not allowed on labware {labware_id}"
118
+ )
119
+
120
+ if self._state_view.labware.is_tiprack(labware_id):
121
+ raise LabwareIsTipRackError("Cannot touch tip on tip rack")
122
+
123
+ center_result = await move_to_well(
124
+ movement=self._movement,
125
+ model_utils=self._model_utils,
126
+ pipette_id=pipette_id,
127
+ labware_id=labware_id,
128
+ well_name=well_name,
129
+ well_location=params.wellLocation,
130
+ )
131
+ if isinstance(center_result, DefinedErrorData):
132
+ return center_result
133
+
134
+ touch_speed = self._state_view.pipettes.get_movement_speed(
135
+ pipette_id, params.speed
136
+ )
137
+
138
+ mm_from_edge = params.mmFromEdge if params.mmFromEdge is not None else 0
139
+ touch_waypoints = self._state_view.motion.get_touch_tip_waypoints(
140
+ pipette_id=pipette_id,
141
+ labware_id=labware_id,
142
+ well_name=well_name,
143
+ radius=params.radius,
144
+ mm_from_edge=mm_from_edge,
145
+ center_point=Point(
146
+ center_result.public.position.x,
147
+ center_result.public.position.y,
148
+ center_result.public.position.z,
149
+ ),
150
+ )
151
+
152
+ final_point = await self._gantry_mover.move_to(
153
+ pipette_id=pipette_id,
154
+ waypoints=touch_waypoints,
155
+ speed=touch_speed,
156
+ )
157
+ final_deck_point = DeckPoint.model_construct(
158
+ x=final_point.x, y=final_point.y, z=final_point.z
159
+ )
160
+ state_update = center_result.state_update.set_pipette_location(
161
+ pipette_id=pipette_id,
162
+ new_labware_id=labware_id,
163
+ new_well_name=well_name,
164
+ new_deck_point=final_deck_point,
165
+ )
166
+
167
+ return SuccessData(
168
+ public=TouchTipResult(position=final_deck_point),
169
+ state_update=state_update,
170
+ )
171
+
172
+
173
+ class TouchTip(BaseCommand[TouchTipParams, TouchTipResult, StallOrCollisionError]):
174
+ """Touch up tip command model."""
175
+
176
+ commandType: TouchTipCommandType = "touchTip"
177
+ params: TouchTipParams
178
+ result: Optional[TouchTipResult] = None
179
+
180
+ _ImplementationCls: Type[TouchTipImplementation] = TouchTipImplementation
181
+
182
+
183
+ class TouchTipCreate(BaseCommandCreate[TouchTipParams]):
184
+ """Touch tip command creation request model."""
185
+
186
+ commandType: TouchTipCommandType = "touchTip"
187
+ params: TouchTipParams
188
+
189
+ _CommandCls: Type[TouchTip] = TouchTip
@@ -0,0 +1,161 @@
1
+ """Commands that are "unsafe".
2
+
3
+ "Unsafe" means that they can cause inaccuracy or incorrect behavior. They should
4
+ therefore never be used in protocols, and should only be used otherwise as a last
5
+ resort.
6
+
7
+ These exist as a necessary evil for implementing things like error recovery.
8
+ Even in those narrow contexts, these commands must be used with care.
9
+ e.g. after an `UpdatePositionEstimators` command, there must be a `Home` command,
10
+ or positioning will be subtly wrong. Each unsafe command should document its intended
11
+ use case and its caveats.
12
+
13
+ Because we don't expect unsafe commands to be used in any protocols whose behavior we
14
+ must preserve, we may change the commands' semantics over time. We may also change
15
+ their shapes if we're confident that it won't break something in robot-server's
16
+ persistent storage.
17
+ """
18
+
19
+
20
+ from .unsafe_blow_out_in_place import (
21
+ UnsafeBlowOutInPlaceCommandType,
22
+ UnsafeBlowOutInPlaceParams,
23
+ UnsafeBlowOutInPlaceResult,
24
+ UnsafeBlowOutInPlace,
25
+ UnsafeBlowOutInPlaceCreate,
26
+ )
27
+ from .unsafe_drop_tip_in_place import (
28
+ UnsafeDropTipInPlaceCommandType,
29
+ UnsafeDropTipInPlaceParams,
30
+ UnsafeDropTipInPlaceResult,
31
+ UnsafeDropTipInPlace,
32
+ UnsafeDropTipInPlaceCreate,
33
+ )
34
+
35
+ from .update_position_estimators import (
36
+ UpdatePositionEstimatorsCommandType,
37
+ UpdatePositionEstimatorsParams,
38
+ UpdatePositionEstimatorsResult,
39
+ UpdatePositionEstimators,
40
+ UpdatePositionEstimatorsCreate,
41
+ )
42
+
43
+ from .unsafe_engage_axes import (
44
+ UnsafeEngageAxesCommandType,
45
+ UnsafeEngageAxesParams,
46
+ UnsafeEngageAxesResult,
47
+ UnsafeEngageAxes,
48
+ UnsafeEngageAxesCreate,
49
+ )
50
+
51
+ from .unsafe_ungrip_labware import (
52
+ UnsafeUngripLabwareCommandType,
53
+ UnsafeUngripLabwareParams,
54
+ UnsafeUngripLabwareResult,
55
+ UnsafeUngripLabware,
56
+ UnsafeUngripLabwareCreate,
57
+ )
58
+
59
+
60
+ from .unsafe_place_labware import (
61
+ UnsafePlaceLabwareCommandType,
62
+ UnsafePlaceLabwareParams,
63
+ UnsafePlaceLabwareResult,
64
+ UnsafePlaceLabware,
65
+ UnsafePlaceLabwareCreate,
66
+ )
67
+
68
+ from .unsafe_stacker_manual_retrieve import (
69
+ UnsafeFlexStackerManualRetrieveCommandType,
70
+ UnsafeFlexStackerManualRetrieveParams,
71
+ UnsafeFlexStackerManualRetrieveResult,
72
+ UnsafeFlexStackerManualRetrieve,
73
+ UnsafeFlexStackerManualRetrieveCreate,
74
+ )
75
+
76
+ from .unsafe_stacker_close_latch import (
77
+ UnsafeFlexStackerCloseLatchCommandType,
78
+ UnsafeFlexStackerCloseLatchParams,
79
+ UnsafeFlexStackerCloseLatchResult,
80
+ UnsafeFlexStackerCloseLatch,
81
+ UnsafeFlexStackerCloseLatchCreate,
82
+ )
83
+
84
+ from .unsafe_stacker_open_latch import (
85
+ UnsafeFlexStackerOpenLatchCommandType,
86
+ UnsafeFlexStackerOpenLatchParams,
87
+ UnsafeFlexStackerOpenLatchResult,
88
+ UnsafeFlexStackerOpenLatch,
89
+ UnsafeFlexStackerOpenLatchCreate,
90
+ )
91
+
92
+ from .unsafe_stacker_prepare_shuttle import (
93
+ UnsafeFlexStackerPrepareShuttleCommandType,
94
+ UnsafeFlexStackerPrepareShuttleParams,
95
+ UnsafeFlexStackerPrepareShuttleResult,
96
+ UnsafeFlexStackerPrepareShuttle,
97
+ UnsafeFlexStackerPrepareShuttleCreate,
98
+ )
99
+
100
+ __all__ = [
101
+ # Unsafe blow-out-in-place command models
102
+ "UnsafeBlowOutInPlaceCommandType",
103
+ "UnsafeBlowOutInPlaceParams",
104
+ "UnsafeBlowOutInPlaceResult",
105
+ "UnsafeBlowOutInPlace",
106
+ "UnsafeBlowOutInPlaceCreate",
107
+ # Unsafe drop-tip command models
108
+ "UnsafeDropTipInPlaceCommandType",
109
+ "UnsafeDropTipInPlaceParams",
110
+ "UnsafeDropTipInPlaceResult",
111
+ "UnsafeDropTipInPlace",
112
+ "UnsafeDropTipInPlaceCreate",
113
+ # Update position estimate command models
114
+ "UpdatePositionEstimatorsCommandType",
115
+ "UpdatePositionEstimatorsParams",
116
+ "UpdatePositionEstimatorsResult",
117
+ "UpdatePositionEstimators",
118
+ "UpdatePositionEstimatorsCreate",
119
+ # Unsafe engage axes
120
+ "UnsafeEngageAxesCommandType",
121
+ "UnsafeEngageAxesParams",
122
+ "UnsafeEngageAxesResult",
123
+ "UnsafeEngageAxes",
124
+ "UnsafeEngageAxesCreate",
125
+ # Unsafe ungrip labware
126
+ "UnsafeUngripLabwareCommandType",
127
+ "UnsafeUngripLabwareParams",
128
+ "UnsafeUngripLabwareResult",
129
+ "UnsafeUngripLabware",
130
+ "UnsafeUngripLabwareCreate",
131
+ # Unsafe place labware
132
+ "UnsafePlaceLabwareCommandType",
133
+ "UnsafePlaceLabwareParams",
134
+ "UnsafePlaceLabwareResult",
135
+ "UnsafePlaceLabware",
136
+ "UnsafePlaceLabwareCreate",
137
+ # Unsafe manual retrieve
138
+ "UnsafeFlexStackerManualRetrieveCommandType",
139
+ "UnsafeFlexStackerManualRetrieveParams",
140
+ "UnsafeFlexStackerManualRetrieveResult",
141
+ "UnsafeFlexStackerManualRetrieve",
142
+ "UnsafeFlexStackerManualRetrieveCreate",
143
+ # Unsafe flex stacker close latch
144
+ "UnsafeFlexStackerCloseLatchCommandType",
145
+ "UnsafeFlexStackerCloseLatchParams",
146
+ "UnsafeFlexStackerCloseLatchResult",
147
+ "UnsafeFlexStackerCloseLatch",
148
+ "UnsafeFlexStackerCloseLatchCreate",
149
+ # Unsafe flex stacker open latch
150
+ "UnsafeFlexStackerOpenLatchCommandType",
151
+ "UnsafeFlexStackerOpenLatchParams",
152
+ "UnsafeFlexStackerOpenLatchResult",
153
+ "UnsafeFlexStackerOpenLatch",
154
+ "UnsafeFlexStackerOpenLatchCreate",
155
+ # Unsafe flex stacker prepare shuttle
156
+ "UnsafeFlexStackerPrepareShuttleCommandType",
157
+ "UnsafeFlexStackerPrepareShuttleParams",
158
+ "UnsafeFlexStackerPrepareShuttleResult",
159
+ "UnsafeFlexStackerPrepareShuttle",
160
+ "UnsafeFlexStackerPrepareShuttleCreate",
161
+ ]
@@ -0,0 +1,100 @@
1
+ """Command models to blow out in place while plunger positions are unknown."""
2
+
3
+ from __future__ import annotations
4
+ from typing import TYPE_CHECKING, Optional, Type
5
+ from typing_extensions import Literal
6
+
7
+ from pydantic import BaseModel
8
+
9
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
10
+ from ..pipetting_common import PipetteIdMixin, FlowRateMixin
11
+ from ...resources import ensure_ot3_hardware
12
+ from ...errors.error_occurrence import ErrorOccurrence
13
+ from ...state import update_types
14
+
15
+ from opentrons.hardware_control import HardwareControlAPI
16
+ from opentrons.hardware_control.types import Axis
17
+
18
+ if TYPE_CHECKING:
19
+ from ...execution import PipettingHandler
20
+ from ...state.state import StateView
21
+
22
+
23
+ UnsafeBlowOutInPlaceCommandType = Literal["unsafe/blowOutInPlace"]
24
+
25
+
26
+ class UnsafeBlowOutInPlaceParams(PipetteIdMixin, FlowRateMixin):
27
+ """Payload required to blow-out in place while position is unknown."""
28
+
29
+ pass
30
+
31
+
32
+ class UnsafeBlowOutInPlaceResult(BaseModel):
33
+ """Result data from an UnsafeBlowOutInPlace command."""
34
+
35
+ pass
36
+
37
+
38
+ class UnsafeBlowOutInPlaceImplementation(
39
+ AbstractCommandImpl[
40
+ UnsafeBlowOutInPlaceParams, SuccessData[UnsafeBlowOutInPlaceResult]
41
+ ]
42
+ ):
43
+ """UnsafeBlowOutInPlace command implementation."""
44
+
45
+ def __init__(
46
+ self,
47
+ pipetting: PipettingHandler,
48
+ state_view: StateView,
49
+ hardware_api: HardwareControlAPI,
50
+ **kwargs: object,
51
+ ) -> None:
52
+ self._pipetting = pipetting
53
+ self._state_view = state_view
54
+ self._hardware_api = hardware_api
55
+
56
+ async def execute(
57
+ self, params: UnsafeBlowOutInPlaceParams
58
+ ) -> SuccessData[UnsafeBlowOutInPlaceResult]:
59
+ """Blow-out without moving the pipette even when position is unknown."""
60
+ ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
61
+ pipette_location = self._state_view.motion.get_pipette_location(
62
+ params.pipetteId
63
+ )
64
+ await ot3_hardware_api.update_axis_position_estimations(
65
+ [Axis.of_main_tool_actuator(pipette_location.mount.to_hw_mount())]
66
+ )
67
+ await self._pipetting.blow_out_in_place(
68
+ pipette_id=params.pipetteId, flow_rate=params.flowRate
69
+ )
70
+ state_update = update_types.StateUpdate()
71
+ state_update.set_fluid_empty(pipette_id=params.pipetteId)
72
+ state_update.set_pipette_ready_to_aspirate(
73
+ pipette_id=params.pipetteId, ready_to_aspirate=False
74
+ )
75
+ return SuccessData(
76
+ public=UnsafeBlowOutInPlaceResult(), state_update=state_update
77
+ )
78
+
79
+
80
+ class UnsafeBlowOutInPlace(
81
+ BaseCommand[UnsafeBlowOutInPlaceParams, UnsafeBlowOutInPlaceResult, ErrorOccurrence]
82
+ ):
83
+ """UnsafeBlowOutInPlace command model."""
84
+
85
+ commandType: UnsafeBlowOutInPlaceCommandType = "unsafe/blowOutInPlace"
86
+ params: UnsafeBlowOutInPlaceParams
87
+ result: Optional[UnsafeBlowOutInPlaceResult] = None
88
+
89
+ _ImplementationCls: Type[
90
+ UnsafeBlowOutInPlaceImplementation
91
+ ] = UnsafeBlowOutInPlaceImplementation
92
+
93
+
94
+ class UnsafeBlowOutInPlaceCreate(BaseCommandCreate[UnsafeBlowOutInPlaceParams]):
95
+ """UnsafeBlowOutInPlace command request model."""
96
+
97
+ commandType: UnsafeBlowOutInPlaceCommandType = "unsafe/blowOutInPlace"
98
+ params: UnsafeBlowOutInPlaceParams
99
+
100
+ _CommandCls: Type[UnsafeBlowOutInPlace] = UnsafeBlowOutInPlace
@@ -0,0 +1,121 @@
1
+ """Command models to drop tip in place while plunger positions are unknown."""
2
+
3
+ from __future__ import annotations
4
+ from typing import TYPE_CHECKING, Optional, Type, Any
5
+
6
+ from pydantic import Field, BaseModel
7
+ from pydantic.json_schema import SkipJsonSchema
8
+ from typing_extensions import Literal
9
+
10
+ from opentrons.hardware_control import HardwareControlAPI
11
+ from opentrons.hardware_control.types import Axis
12
+
13
+ from opentrons.protocol_engine.state.update_types import StateUpdate
14
+ from ..pipetting_common import PipetteIdMixin
15
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
16
+ from ...errors.error_occurrence import ErrorOccurrence
17
+ from ...resources import ensure_ot3_hardware
18
+
19
+ if TYPE_CHECKING:
20
+ from ...execution import TipHandler
21
+ from ...state.state import StateView
22
+
23
+
24
+ UnsafeDropTipInPlaceCommandType = Literal["unsafe/dropTipInPlace"]
25
+
26
+
27
+ def _remove_default(s: dict[str, Any]) -> None:
28
+ s.pop("default", None)
29
+
30
+
31
+ class UnsafeDropTipInPlaceParams(PipetteIdMixin):
32
+ """Payload required to drop a tip in place even if the plunger position is not known."""
33
+
34
+ homeAfter: bool | SkipJsonSchema[None] = Field(
35
+ None,
36
+ description=(
37
+ "Whether to home this pipette's plunger after dropping the tip."
38
+ " You should normally leave this unspecified to let the robot choose"
39
+ " a safe default depending on its hardware."
40
+ ),
41
+ json_schema_extra=_remove_default,
42
+ )
43
+
44
+
45
+ class UnsafeDropTipInPlaceResult(BaseModel):
46
+ """Result data from the execution of an UnsafeDropTipInPlace command."""
47
+
48
+ pass
49
+
50
+
51
+ class UnsafeDropTipInPlaceImplementation(
52
+ AbstractCommandImpl[
53
+ UnsafeDropTipInPlaceParams, SuccessData[UnsafeDropTipInPlaceResult]
54
+ ]
55
+ ):
56
+ """Unsafe drop tip in place command implementation."""
57
+
58
+ def __init__(
59
+ self,
60
+ tip_handler: TipHandler,
61
+ state_view: StateView,
62
+ hardware_api: HardwareControlAPI,
63
+ **kwargs: object,
64
+ ) -> None:
65
+ self._state_view = state_view
66
+ self._tip_handler = tip_handler
67
+ self._hardware_api = hardware_api
68
+
69
+ async def execute(
70
+ self, params: UnsafeDropTipInPlaceParams
71
+ ) -> SuccessData[UnsafeDropTipInPlaceResult]:
72
+ """Drop a tip using the requested pipette, even if the plunger position is not known."""
73
+ ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
74
+ pipette_location = self._state_view.motion.get_pipette_location(
75
+ params.pipetteId
76
+ )
77
+ await ot3_hardware_api.update_axis_position_estimations(
78
+ [Axis.of_main_tool_actuator(pipette_location.mount.to_hw_mount())]
79
+ )
80
+ await self._tip_handler.drop_tip(
81
+ pipette_id=params.pipetteId,
82
+ home_after=params.homeAfter,
83
+ ignore_plunger=(
84
+ self._state_view.pipettes.get_active_channels(params.pipetteId) == 96
85
+ ),
86
+ )
87
+
88
+ state_update = StateUpdate()
89
+ state_update.update_pipette_tip_state(
90
+ pipette_id=params.pipetteId,
91
+ tip_geometry=None,
92
+ tip_source=None,
93
+ )
94
+ state_update.set_fluid_unknown(pipette_id=params.pipetteId)
95
+
96
+ return SuccessData(
97
+ public=UnsafeDropTipInPlaceResult(), state_update=state_update
98
+ )
99
+
100
+
101
+ class UnsafeDropTipInPlace(
102
+ BaseCommand[UnsafeDropTipInPlaceParams, UnsafeDropTipInPlaceResult, ErrorOccurrence]
103
+ ):
104
+ """Drop tip in place command model."""
105
+
106
+ commandType: UnsafeDropTipInPlaceCommandType = "unsafe/dropTipInPlace"
107
+ params: UnsafeDropTipInPlaceParams
108
+ result: Optional[UnsafeDropTipInPlaceResult] = None
109
+
110
+ _ImplementationCls: Type[
111
+ UnsafeDropTipInPlaceImplementation
112
+ ] = UnsafeDropTipInPlaceImplementation
113
+
114
+
115
+ class UnsafeDropTipInPlaceCreate(BaseCommandCreate[UnsafeDropTipInPlaceParams]):
116
+ """Drop tip in place command creation request model."""
117
+
118
+ commandType: UnsafeDropTipInPlaceCommandType = "unsafe/dropTipInPlace"
119
+ params: UnsafeDropTipInPlaceParams
120
+
121
+ _CommandCls: Type[UnsafeDropTipInPlace] = UnsafeDropTipInPlace