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,55 @@
1
+ """Protocol specifying API gripper control."""
2
+ from typing import Optional
3
+ from typing_extensions import Protocol
4
+
5
+ from opentrons.hardware_control.dev_types import GripperDict
6
+ from opentrons.hardware_control.instruments.ot3.gripper import Gripper
7
+
8
+
9
+ class GripperController(Protocol):
10
+ """A protocol specifying gripper API functions."""
11
+
12
+ async def grip(
13
+ self, force_newtons: Optional[float] = None, stay_engaged: bool = True
14
+ ) -> None:
15
+ ...
16
+
17
+ async def home_gripper_jaw(self, recalibrate_jaw_width: bool = False) -> None:
18
+ ...
19
+
20
+ async def ungrip(self, force_newtons: Optional[float] = None) -> None:
21
+ """Release gripped object.
22
+
23
+ To simply open the jaw, use `home_gripper_jaw` instead.
24
+ """
25
+ ...
26
+
27
+ async def idle_gripper(self) -> None:
28
+ """Move gripper to its idle, gripped position."""
29
+ ...
30
+
31
+ def gripper_jaw_can_home(self) -> bool:
32
+ """Check if it is valid to home the gripper jaw.
33
+
34
+ This should return False if the API believes that the gripper is
35
+ currently holding something.
36
+ """
37
+ ...
38
+
39
+ def raise_error_if_gripper_pickup_failed(
40
+ self,
41
+ expected_grip_width: float,
42
+ grip_width_uncertainty_wider: float,
43
+ grip_width_uncertainty_narrower: float,
44
+ ) -> None:
45
+ """Ensure that a gripper pickup succeeded."""
46
+
47
+ @property
48
+ def attached_gripper(self) -> Optional[GripperDict]:
49
+ """Get a dict of all attached grippers."""
50
+ ...
51
+
52
+ @property
53
+ def hardware_gripper(self) -> Optional[Gripper]:
54
+ """Get attached gripper, if present."""
55
+ ...
@@ -0,0 +1,51 @@
1
+ from typing import Dict, Optional
2
+ from typing_extensions import Protocol
3
+
4
+ from ..types import SubSystem, SubSystemState, Axis
5
+
6
+
7
+ class HardwareManager(Protocol):
8
+ """Protocol specifying access to configuration plane elements of hardware."""
9
+
10
+ def get_fw_version(self) -> str:
11
+ """
12
+ Return the firmware version of the connected hardware.
13
+ """
14
+ ...
15
+
16
+ @property
17
+ def fw_version(self) -> str:
18
+ """
19
+ Return the firmware version of the connected hardware.
20
+
21
+ The version is a string retrieved directly from the attached hardware
22
+ (or possibly simulator).
23
+ """
24
+ ...
25
+
26
+ @property
27
+ def board_revision(self) -> str:
28
+ """
29
+ Return the revision of the central hardware.
30
+ """
31
+ ...
32
+
33
+ @property
34
+ def attached_subsystems(self) -> Dict[SubSystem, SubSystemState]:
35
+ """
36
+ Get a view of the hardware subsystems currently attached to the machine.
37
+
38
+ These subsystems are the programmable parts that underly and provide things like motion
39
+ control and instruments. Depending on the machine, different subsystems may be available.
40
+ In general, callers should not use the presence or absence of a specific subsystem to decide
41
+ whether or not the hardware is operating properly.
42
+ """
43
+ ...
44
+
45
+ async def get_serial_number(self) -> Optional[str]:
46
+ """Get the robot serial number, if provisioned. If not provisioned, will be None."""
47
+ ...
48
+
49
+ def axis_is_present(self, axis: Axis) -> bool:
50
+ """Get whether a motor axis is present on the machine."""
51
+ ...
@@ -0,0 +1,16 @@
1
+ from typing_extensions import Protocol
2
+
3
+ from .types import ProtocolRobotType
4
+
5
+
6
+ class Identifiable(Protocol[ProtocolRobotType]):
7
+ """Protocol specifying support for hardware identification."""
8
+
9
+ def get_robot_type(self) -> ProtocolRobotType:
10
+ """Return the enumerated robot type that this API controls.
11
+
12
+ When a caller needs to determine whether an API function is expected
13
+ to be present on a hardware_control instance, it is preferable to check
14
+ with this function rather than check the exact type via `isinstance`.
15
+ """
16
+ ...
@@ -0,0 +1,206 @@
1
+ from typing import Dict, Optional
2
+ from typing_extensions import Protocol
3
+
4
+ from opentrons_shared_data.pipette.types import PipetteName
5
+ from opentrons.types import Mount
6
+ from .types import MountArgType
7
+
8
+ # TODO (lc 12-05-2022) This protocol has deviated from the OT3 api. We
9
+ # need to figure out how to combine them again in follow-up refactors.
10
+ from opentrons.hardware_control.instruments.ot2.pipette import Pipette
11
+ from ..dev_types import PipetteDict
12
+ from ..types import CriticalPoint
13
+
14
+
15
+ class InstrumentConfigurer(Protocol[MountArgType]):
16
+ """A protocol specifying how to interact with instrument presence and detection."""
17
+
18
+ def reset_instrument(self, mount: Optional[MountArgType] = None) -> None:
19
+ """
20
+ Reset the internal state of a pipette by its mount, without doing
21
+ any lower level reconfiguration. This is useful to make sure that no
22
+ settings changes from a protocol persist.
23
+
24
+ mount: If specified, reset that mount. If not specified, reset both
25
+ """
26
+ ...
27
+
28
+ async def cache_instruments(
29
+ self,
30
+ require: Optional[Dict[Mount, PipetteName]] = None,
31
+ skip_if_would_block: bool = False,
32
+ ) -> None:
33
+ """
34
+ Scan the attached instruments, take necessary configuration actions,
35
+ and set up hardware controller internal state if necessary.
36
+
37
+ require: If specified, the require should be a dict of mounts to
38
+ instrument names describing the instruments expected to be
39
+ present. This can save a subsequent call of attached_instruments
40
+ and also serves as the hook for the hardware simulator to decide
41
+ what is attached.
42
+ raises RuntimeError: If an instrument is expected but not found.
43
+
44
+ This function will only change the things that need to be changed.
45
+ If the same pipette (by serial) or the same lack of pipette is
46
+ observed on a mount before and after the scan, no action will be
47
+ taken. That makes this function appropriate for setting up the
48
+ robot for operation, but not for making sure that any previous
49
+ settings changes have been reset. For the latter use case, use
50
+ reset_instrument.
51
+ """
52
+ ...
53
+
54
+ def get_attached_instruments(self) -> Dict[Mount, PipetteDict]:
55
+ """Get the status dicts of the cached attached instruments.
56
+
57
+ Also available as :py:meth:`get_attached_instruments`.
58
+
59
+ This returns a dictified version of the
60
+ hardware_control.instruments.pipette.Pipette as a dict keyed by
61
+ the Mount to which the pipette is attached.
62
+ If no pipette is attached on a given mount, the mount key will
63
+ still be present but will have the value ``None``.
64
+
65
+ Note that on the OT-2 this is only a query of a cached value;
66
+ to actively scan for changes, use cache_instruments`. This process
67
+ deactivates the OT-2's motors and should be used sparingly.
68
+ """
69
+ ...
70
+
71
+ def get_attached_instrument(self, mount: MountArgType) -> PipetteDict:
72
+ """Get the status dict of a single cached instrument.
73
+
74
+ Return values and caveats are as get_attached_instruments.
75
+ """
76
+ ...
77
+
78
+ @property
79
+ def attached_instruments(self) -> Dict[Mount, PipetteDict]:
80
+ return self.get_attached_instruments()
81
+
82
+ def get_attached_pipettes(self) -> Dict[Mount, PipetteDict]:
83
+ """Get the status dicts of cached attached pipettes.
84
+
85
+ Works like get_attached_instruments but for pipettes only - on the Flex,
86
+ there will be no gripper information here.
87
+ """
88
+ ...
89
+
90
+ @property
91
+ def attached_pipettes(self) -> Dict[Mount, PipetteDict]:
92
+ return self.get_attached_pipettes()
93
+
94
+ def calibrate_plunger(
95
+ self,
96
+ mount: MountArgType,
97
+ top: Optional[float] = None,
98
+ bottom: Optional[float] = None,
99
+ blow_out: Optional[float] = None,
100
+ drop_tip: Optional[float] = None,
101
+ ) -> None:
102
+ """
103
+ Set calibration values for the pipette plunger.
104
+ This can be called multiple times as the user sets each value,
105
+ or you can set them all at once.
106
+ :param top: Touching but not engaging the plunger.
107
+ :param bottom: Must be above the pipette's physical hard-stop, while
108
+ still leaving enough room for 'blow_out'
109
+ :param blow_out: Plunger is pushed down enough to expel all liquids.
110
+ :param drop_tip: Position that causes the tip to be released from the
111
+ pipette
112
+ """
113
+ ...
114
+
115
+ def set_flow_rate(
116
+ self,
117
+ mount: MountArgType,
118
+ aspirate: Optional[float] = None,
119
+ dispense: Optional[float] = None,
120
+ blow_out: Optional[float] = None,
121
+ ) -> None:
122
+ """Set a pipette's rate of liquid handling in flow rate units"""
123
+ ...
124
+
125
+ def set_pipette_speed(
126
+ self,
127
+ mount: MountArgType,
128
+ aspirate: Optional[float] = None,
129
+ dispense: Optional[float] = None,
130
+ blow_out: Optional[float] = None,
131
+ ) -> None:
132
+ """Set a pipette's rate of liquid handling in linear speed units."""
133
+ ...
134
+
135
+ def get_instrument_max_height(
136
+ self,
137
+ mount: MountArgType,
138
+ critical_point: Optional[CriticalPoint] = None,
139
+ ) -> float:
140
+ """Return max achievable height of the attached instrument
141
+ based on the current critical point
142
+ """
143
+ ...
144
+
145
+ # todo(mm, 2024-10-17): Consider deleting this in favor of cache_tip()
146
+ # if we can do so without breaking anything.
147
+ def add_tip(self, mount: MountArgType, tip_length: float) -> None:
148
+ """Inform the hardware that a tip is now attached to a pipette.
149
+
150
+ If a tip is already attached, this no-ops.
151
+
152
+ This changes the critical point of the pipette to make sure that
153
+ the end of the tip is what moves around, and allows liquid handling.
154
+ """
155
+ ...
156
+
157
+ def cache_tip(self, mount: MountArgType, tip_length: float) -> None:
158
+ """Inform the hardware that a tip is now attached to a pipette.
159
+
160
+ This is like `add_tip()`, except that if a tip is already attached,
161
+ this replaces it instead of no-opping.
162
+ """
163
+ ...
164
+
165
+ def remove_tip(self, mount: MountArgType) -> None:
166
+ """Inform the hardware that a tip is no longer attached to a pipette.
167
+
168
+ This changes the critical point of the system to the end of the
169
+ nozzle and prevents further liquid handling commands.
170
+ """
171
+ ...
172
+
173
+ def set_current_tiprack_diameter(
174
+ self, mount: MountArgType, tiprack_diameter: float
175
+ ) -> None:
176
+ """Inform the hardware of the diameter of the tiprack.
177
+
178
+ This drives the magnitude of the shake commanded for pipettes that need
179
+ a shake after dropping or picking up tips.
180
+ """
181
+ ...
182
+
183
+ def set_working_volume(self, mount: MountArgType, tip_volume: float) -> None:
184
+ """Inform the hardware how much volume a pipette can aspirate.
185
+
186
+ This will set the limit of aspiration for the pipette, and is
187
+ necessary for backcompatibility.
188
+ """
189
+ ...
190
+
191
+ @property
192
+ def hardware_instruments(self) -> Dict[Mount, Optional[Pipette]]:
193
+ """Return the underlying hardware representation of the instruments.
194
+
195
+ This should rarely be used. Do not write new code that uses it.
196
+ """
197
+ ...
198
+
199
+ def has_gripper(self) -> bool:
200
+ """Return whether there is a gripper attached to this instance.
201
+
202
+ - On robots that do not support a gripper, this will always return False.
203
+ - On robots that support a gripper, this will return based on the current
204
+ presence of a gripper.
205
+ """
206
+ ...
@@ -0,0 +1,266 @@
1
+ from typing import Optional
2
+ from typing_extensions import Protocol
3
+
4
+ from opentrons.types import Point
5
+ from opentrons.hardware_control.types import CriticalPoint, TipScrapeType
6
+ from .types import MountArgType, CalibrationType, ConfigType
7
+
8
+ from .instrument_configurer import InstrumentConfigurer
9
+ from .motion_controller import MotionController
10
+ from .configurable import Configurable
11
+ from .calibratable import Calibratable
12
+
13
+
14
+ class LiquidHandler(
15
+ InstrumentConfigurer[MountArgType],
16
+ MotionController[MountArgType],
17
+ Configurable[ConfigType],
18
+ Calibratable[CalibrationType],
19
+ Protocol[CalibrationType, MountArgType, ConfigType],
20
+ ):
21
+ def critical_point_for(
22
+ self,
23
+ mount: MountArgType,
24
+ cp_override: Optional[CriticalPoint] = None,
25
+ ) -> Point:
26
+ """
27
+ Determine the current critical point for the specified mount.
28
+
29
+ :param mount: A robot mount that the instrument is on.
30
+ :param cp_override: The critical point override to use.
31
+
32
+ If no critical point override is specified, the robot defaults to nozzle location `A1` or the mount critical point.
33
+ :return: Point.
34
+ """
35
+ ...
36
+
37
+ async def update_nozzle_configuration_for_mount(
38
+ self,
39
+ mount: MountArgType,
40
+ back_left_nozzle: Optional[str],
41
+ front_right_nozzle: Optional[str],
42
+ starting_nozzle: Optional[str] = None,
43
+ ) -> None:
44
+ """
45
+ The expectation of this function is that the back_left_nozzle/front_right_nozzle are the two corners
46
+ of a rectangle of nozzles. A call to this function that does not follow that schema will result
47
+ in an error.
48
+
49
+ :param mount: A robot mount that the instrument is on.
50
+ :param back_left_nozzle: A string representing a nozzle name of the form <LETTER><NUMBER> such as 'A1'.
51
+ :param front_right_nozzle: A string representing a nozzle name of the form <LETTER><NUMBER> such as 'A1'.
52
+ :param starting_nozzle: A string representing the starting nozzle which will be used as the critical point
53
+ of the pipette nozzle configuration. By default, the back left nozzle will be the starting nozzle if
54
+ none is provided.
55
+
56
+ If none of the nozzle parameters are provided, the nozzle configuration will be reset to default.
57
+ :return: None.
58
+ """
59
+ ...
60
+
61
+ async def configure_for_volume(self, mount: MountArgType, volume: float) -> None:
62
+ """
63
+ Configure a pipette to handle the specified volume.
64
+
65
+ Some pipettes need to switch modes to handle different volumes of liquid. Calling
66
+ this ensures they do so. If the pipette does not need to switch modes, or the pipette
67
+ is already in the specified mode, nothing will happen.
68
+
69
+ If the pipette does need to switch modes, it will likely be unready for aspiration and
70
+ you will need to call :py:meth:`prepare_for_aspirate` afterwards.
71
+ """
72
+ ...
73
+
74
+ async def prepare_for_aspirate(
75
+ self, mount: MountArgType, rate: float = 1.0
76
+ ) -> None:
77
+ """
78
+ Prepare the pipette for aspiration.
79
+
80
+ This must happen after every :py:meth:`blow_out` and should probably be
81
+ called before every :py:meth:`aspirate`, while the pipette tip is not
82
+ immersed in a well. It ensures that the plunger is at the 0-volume
83
+ position of the pipette if necessary (if not necessary, it does
84
+ nothing).
85
+
86
+ If :py:meth:`aspirate` is called immediately after :py:meth:`blow_out`,
87
+ the plunger is left at the ``blow_out`` position, below the ``bottom``
88
+ position, and moving the plunger up during :py:meth:`aspirate` is
89
+ expected to aspirate liquid - :py:meth:`aspirate` is called once the
90
+ pipette tip is already in the well. This will cause a subtle over
91
+ aspiration. To make the problem more obvious, :py:meth:`aspirate` will
92
+ raise an exception if this method has not previously been called.
93
+ """
94
+ ...
95
+
96
+ async def aspirate(
97
+ self,
98
+ mount: MountArgType,
99
+ volume: Optional[float] = None,
100
+ rate: float = 1.0,
101
+ correction_volume: float = 0.0,
102
+ ) -> None:
103
+ """
104
+ Aspirate a volume of liquid (in microliters/uL) using this pipette
105
+ from the *current location*. If no volume is passed, `aspirate` will
106
+ default to max available volume (after taking into account the volume
107
+ already present in the tip).
108
+
109
+ The function :py:meth:`prepare_for_aspirate` must be called prior to
110
+ calling this function, while the tip is above the well. This ensures
111
+ that the pipette tip is in the proper position at the bottom of the
112
+ pipette to begin aspiration, and prevents subtle over-aspiration if
113
+ an aspirate is done immediately after :py:meth:`blow_out`. If
114
+ :py:meth:`prepare_for_aspirate` has not been called since the last
115
+ call to :py:meth:`aspirate`, an exception will be raised.
116
+
117
+ mount : Mount.LEFT or Mount.RIGHT
118
+ volume : [float] The number of microliters to aspirate
119
+ rate : [float] Set plunger speed for this aspirate, where
120
+ speed = rate * aspirate_speed
121
+ correction_volume : Correction volume in uL for the specified aspirate volume
122
+ """
123
+ ...
124
+
125
+ async def aspirate_while_tracking(
126
+ self,
127
+ mount: MountArgType,
128
+ z_distance: float,
129
+ volume: float,
130
+ flow_rate: float = 1.0,
131
+ ) -> None:
132
+ """
133
+ Aspirate a volume of liquid (in microliters/uL) while moving the z axis synchronously.
134
+
135
+ :param mount: A robot mount that the instrument is on.
136
+ :param z_distance: The distance the z axis will move during apsiration.
137
+ :param volume: The volume of liquid to be aspirated.
138
+ :param flow_rate: The flow rate to aspirate with.
139
+ """
140
+ ...
141
+
142
+ async def dispense(
143
+ self,
144
+ mount: MountArgType,
145
+ volume: Optional[float] = None,
146
+ rate: float = 1.0,
147
+ push_out: Optional[float] = None,
148
+ correction_volume: float = 0.0,
149
+ is_full_dispense: bool = False,
150
+ ) -> None:
151
+ """
152
+ Dispense a volume of liquid in microliters(uL) using this pipette
153
+ at the current location. If no volume is specified, `dispense` will
154
+ dispense all volume currently present in pipette
155
+
156
+ mount : Mount.LEFT or Mount.RIGHT
157
+ volume : [float] The number of microliters to dispense
158
+ rate : [float] Set plunger speed for this dispense, where
159
+ speed = rate * dispense_speed
160
+ correction_volume : Correction volume in uL for the specified dispense volume
161
+ """
162
+ ...
163
+
164
+ async def dispense_while_tracking(
165
+ self,
166
+ mount: MountArgType,
167
+ z_distance: float,
168
+ volume: float,
169
+ push_out: Optional[float],
170
+ flow_rate: float = 1.0,
171
+ is_full_dispense: bool = False,
172
+ ) -> None:
173
+ """
174
+ Dispense a volume of liquid (in microliters/uL) while moving the z axis synchronously.
175
+
176
+ :param mount: A robot mount that the instrument is on.
177
+ :param z_distance: The distance the z axis will move during dispensing.
178
+ :param volume: The volume of liquid to be dispensed.
179
+ :param flow_rate: The flow rate to dispense with.
180
+ """
181
+ ...
182
+
183
+ async def blow_out(
184
+ self, mount: MountArgType, volume: Optional[float] = None
185
+ ) -> None:
186
+ """
187
+ Force any remaining liquid to dispense. The liquid will be dispensed at
188
+ the current location of pipette
189
+ """
190
+ ...
191
+
192
+ async def tip_pickup_moves(
193
+ self,
194
+ mount: MountArgType,
195
+ presses: Optional[int] = None,
196
+ increment: Optional[float] = None,
197
+ ) -> None:
198
+ ...
199
+
200
+ async def pick_up_tip(
201
+ self,
202
+ mount: MountArgType,
203
+ tip_length: float,
204
+ presses: Optional[int] = None,
205
+ increment: Optional[float] = None,
206
+ prep_after: bool = True,
207
+ ) -> None:
208
+ """
209
+ Pick up tip from current location.
210
+
211
+ This is achieved by attempting to move the instrument down by its
212
+ `pick_up_distance`, in a series of presses. This distance is larger
213
+ than the space available in the tip, so the stepper motor will
214
+ eventually skip steps, which is resolved by homing afterwards. The
215
+ pick up operation is done at a current specified in the pipette config,
216
+ which is experimentally determined to skip steps at a level of force
217
+ sufficient to provide a good seal between the pipette nozzle and tip
218
+ while also avoiding attaching the tip so firmly that it can't be
219
+ dropped later.
220
+
221
+ If ``presses`` or ``increment`` is not specified (or is ``None``),
222
+ their value is taken from the pipette configuration.
223
+ """
224
+ ...
225
+
226
+ async def tip_drop_moves(
227
+ self,
228
+ mount: MountArgType,
229
+ home_after: bool = True,
230
+ ignore_plunger: bool = False,
231
+ scrape_type: TipScrapeType = TipScrapeType.NONE,
232
+ ) -> None:
233
+ ...
234
+
235
+ async def drop_tip(
236
+ self,
237
+ mount: MountArgType,
238
+ home_after: bool = True,
239
+ ) -> None:
240
+ """
241
+ Drop tip at the current location
242
+
243
+ :param Mount mount: The mount to drop a tip from
244
+ :param bool home_after: Home the plunger motor after dropping tip. This
245
+ is used in case the plunger motor skipped while
246
+ dropping the tip, and is also used to recover
247
+ the ejector shroud after a drop.
248
+ """
249
+ ...
250
+
251
+ async def liquid_probe(
252
+ self,
253
+ mount: MountArgType,
254
+ max_z_dist: float,
255
+ ) -> float:
256
+ """Search for and return liquid level height using this pipette
257
+ at the current location.
258
+
259
+ mount : Mount.LEFT or Mount.RIGHT
260
+ max_z_dist : maximum depth to probe for liquid
261
+ """
262
+ ...
263
+
264
+ async def increase_evo_disp_count(self, mount: MountArgType) -> None:
265
+ """Tell a pipette to increase it's evo-tip-dispense-count in eeprom."""
266
+ ...
@@ -0,0 +1,16 @@
1
+ from typing import List
2
+ from typing_extensions import Protocol
3
+
4
+ from ..modules import AbstractModule, ModuleModel
5
+
6
+
7
+ class ModuleProvider(Protocol):
8
+ """A protocol specifying access to modules."""
9
+
10
+ @property
11
+ def attached_modules(self) -> List[AbstractModule]:
12
+ """Return a list of currently-attached modules."""
13
+ ...
14
+
15
+ async def create_simulating_module(self, model: ModuleModel) -> AbstractModule:
16
+ """Create a simulating module hardware interface."""