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,60 @@
1
+ """Calibration commands."""
2
+ from .calibrate_gripper import (
3
+ CalibrateGripperParams,
4
+ CalibrateGripperResult,
5
+ CalibrateGripperCreate,
6
+ CalibrateGripperCommandType,
7
+ CalibrateGripper,
8
+ )
9
+
10
+ from .calibrate_pipette import (
11
+ CalibratePipetteParams,
12
+ CalibratePipetteResult,
13
+ CalibratePipetteCreate,
14
+ CalibratePipetteCommandType,
15
+ CalibratePipette,
16
+ )
17
+
18
+ from .calibrate_module import (
19
+ CalibrateModuleParams,
20
+ CalibrateModuleResult,
21
+ CalibrateModuleCreate,
22
+ CalibrateModuleCommandType,
23
+ CalibrateModule,
24
+ )
25
+
26
+ from .move_to_maintenance_position import (
27
+ MoveToMaintenancePositionParams,
28
+ MoveToMaintenancePositionResult,
29
+ MoveToMaintenancePositionCreate,
30
+ MoveToMaintenancePositionCommandType,
31
+ MoveToMaintenancePosition,
32
+ )
33
+
34
+ __all__ = [
35
+ # calibration/calibrateModule
36
+ "CalibrateModule",
37
+ "CalibrateModuleCreate",
38
+ "CalibrateModuleParams",
39
+ "CalibrateModuleResult",
40
+ "CalibrateModuleCommandType",
41
+ # calibration/calibrateGripper
42
+ "CalibrateGripper",
43
+ "CalibrateGripperCreate",
44
+ "CalibrateGripperParams",
45
+ "CalibrateGripperParamsProbe",
46
+ "CalibrateGripperResult",
47
+ "CalibrateGripperCommandType",
48
+ # calibration/calibratePipette
49
+ "CalibratePipette",
50
+ "CalibratePipetteCreate",
51
+ "CalibratePipetteParams",
52
+ "CalibratePipetteResult",
53
+ "CalibratePipetteCommandType",
54
+ # calibration/moveToMaintenancePosition
55
+ "MoveToMaintenancePosition",
56
+ "MoveToMaintenancePositionCreate",
57
+ "MoveToMaintenancePositionParams",
58
+ "MoveToMaintenancePositionResult",
59
+ "MoveToMaintenancePositionCommandType",
60
+ ]
@@ -0,0 +1,166 @@
1
+ """Models and implementation for the calibrateGripper command."""
2
+
3
+ from enum import Enum
4
+ from typing import Optional, Type, Any
5
+ from typing_extensions import Literal
6
+
7
+ from pydantic import BaseModel, Field
8
+ from pydantic.json_schema import SkipJsonSchema
9
+
10
+ from opentrons.types import Point
11
+ from opentrons.hardware_control import HardwareControlAPI
12
+ from opentrons.hardware_control import ot3_calibration
13
+ from opentrons.hardware_control.types import OT3Mount, GripperProbe as HWAPIGripperProbe
14
+ from opentrons.hardware_control.instruments.ot3.instrument_calibration import (
15
+ GripperCalibrationOffset,
16
+ )
17
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
18
+ from ...errors.error_occurrence import ErrorOccurrence
19
+ from opentrons.protocol_engine.types import Vec3f
20
+ from opentrons.protocol_engine.resources import ensure_ot3_hardware
21
+
22
+
23
+ CalibrateGripperCommandType = Literal["calibration/calibrateGripper"]
24
+
25
+
26
+ def _remove_default(s: dict[str, Any]) -> None:
27
+ s.pop("default", None)
28
+
29
+
30
+ class CalibrateGripperParamsJaw(Enum): # noqa: D101
31
+ FRONT = "front"
32
+ REAR = "rear"
33
+
34
+
35
+ class CalibrateGripperParams(BaseModel):
36
+ """Parameters for a `calibrateGripper` command."""
37
+
38
+ jaw: CalibrateGripperParamsJaw = Field(
39
+ ...,
40
+ description=(
41
+ "Which of the gripper's jaws to use to measure its offset."
42
+ " The robot will assume that a human operator has already attached"
43
+ " the capacitive probe to the jaw and none is attached to the other jaw."
44
+ ),
45
+ )
46
+
47
+ otherJawOffset: Vec3f | SkipJsonSchema[None] = Field(
48
+ None,
49
+ description=(
50
+ "If an offset for the other probe is already found, then specifying it here"
51
+ " will enable the CalibrateGripper command to complete the calibration"
52
+ " process by calculating the total offset and saving it to disk."
53
+ " If this param is not specified then the command will only find and return"
54
+ " the offset for the specified probe."
55
+ ),
56
+ json_schema_extra=_remove_default,
57
+ )
58
+
59
+
60
+ class CalibrateGripperResult(BaseModel):
61
+ """The result of a successful `calibrateGripper` command."""
62
+
63
+ jawOffset: Vec3f = Field(
64
+ ...,
65
+ description=(
66
+ "The offset from the probe's nominal position"
67
+ " to its actual measured position."
68
+ ),
69
+ )
70
+
71
+ savedCalibration: GripperCalibrationOffset | SkipJsonSchema[None] = Field(
72
+ None,
73
+ description=(
74
+ "Gripper calibration result data, when `otherJawOffset` is provided."
75
+ ),
76
+ json_schema_extra=_remove_default,
77
+ )
78
+
79
+
80
+ class CalibrateGripperImplementation(
81
+ AbstractCommandImpl[CalibrateGripperParams, SuccessData[CalibrateGripperResult]]
82
+ ):
83
+ """The implementation of a `calibrateGripper` command."""
84
+
85
+ def __init__(
86
+ self,
87
+ hardware_api: HardwareControlAPI,
88
+ *args: object,
89
+ **kwargs: object,
90
+ ) -> None:
91
+ self._hardware_api = hardware_api
92
+
93
+ async def execute(
94
+ self, params: CalibrateGripperParams
95
+ ) -> SuccessData[CalibrateGripperResult]:
96
+ """Execute a `calibrateGripper` command.
97
+
98
+ 1. Move from the current location to the calibration area on the deck.
99
+ 2. Using the given probe, sense the gripper's offset from its ideal position.
100
+ 3. Return the gripper's offset from its ideal position.
101
+ """
102
+ ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
103
+
104
+ probe_offset = await ot3_calibration.calibrate_gripper_jaw(
105
+ hcapi=ot3_hardware_api, probe=self._convert_to_hw_api_probe(params.jaw)
106
+ )
107
+ other_probe_offset = params.otherJawOffset
108
+ calibration_data: Optional[GripperCalibrationOffset] = None
109
+ if other_probe_offset is not None:
110
+ total_offset = 0.5 * (
111
+ probe_offset
112
+ + Point(
113
+ x=other_probe_offset.x,
114
+ y=other_probe_offset.y,
115
+ z=other_probe_offset.z,
116
+ )
117
+ )
118
+ result = await ot3_hardware_api.save_instrument_offset(
119
+ mount=OT3Mount.GRIPPER, delta=total_offset
120
+ )
121
+ assert isinstance(result, GripperCalibrationOffset), (
122
+ f"Expected result to be GripperCalibrationOffset type, "
123
+ f"but received {type(result)}"
124
+ )
125
+ calibration_data = result
126
+
127
+ return SuccessData(
128
+ public=CalibrateGripperResult.model_construct(
129
+ jawOffset=Vec3f.model_construct(
130
+ x=probe_offset.x, y=probe_offset.y, z=probe_offset.z
131
+ ),
132
+ savedCalibration=calibration_data,
133
+ ),
134
+ )
135
+
136
+ @staticmethod
137
+ def _convert_to_hw_api_probe(
138
+ probe_from_params: CalibrateGripperParamsJaw,
139
+ ) -> HWAPIGripperProbe:
140
+ if probe_from_params is CalibrateGripperParamsJaw.FRONT:
141
+ return HWAPIGripperProbe.FRONT
142
+ elif probe_from_params is CalibrateGripperParamsJaw.REAR:
143
+ return HWAPIGripperProbe.REAR
144
+
145
+
146
+ class CalibrateGripper(
147
+ BaseCommand[CalibrateGripperParams, CalibrateGripperResult, ErrorOccurrence]
148
+ ):
149
+ """A `calibrateGripper` command."""
150
+
151
+ commandType: CalibrateGripperCommandType = "calibration/calibrateGripper"
152
+ params: CalibrateGripperParams
153
+ result: Optional[CalibrateGripperResult] = None
154
+
155
+ _ImplementationCls: Type[
156
+ CalibrateGripperImplementation
157
+ ] = CalibrateGripperImplementation
158
+
159
+
160
+ class CalibrateGripperCreate(BaseCommandCreate[CalibrateGripperParams]):
161
+ """A request to create a `calibrateGripper` command."""
162
+
163
+ commandType: CalibrateGripperCommandType = "calibration/calibrateGripper"
164
+ params: CalibrateGripperParams
165
+
166
+ _CommandCls: Type[CalibrateGripper] = CalibrateGripper
@@ -0,0 +1,117 @@
1
+ """Calibrate-module command for OT3 hardware. request, result, and implementation models."""
2
+ from __future__ import annotations
3
+
4
+ from typing import TYPE_CHECKING, Optional, Type
5
+ from typing_extensions import Literal
6
+ from pydantic import BaseModel, Field
7
+
8
+ from opentrons.types import MountType
9
+ from opentrons.protocol_engine.resources.ot3_validation import ensure_ot3_hardware
10
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
11
+ from ...errors.error_occurrence import ErrorOccurrence
12
+
13
+ # Work around type-only circular dependencies.
14
+ if TYPE_CHECKING:
15
+ from ...state.state import StateView
16
+
17
+ from ...types import ModuleOffsetVector, DeckSlotLocation
18
+
19
+ from opentrons.hardware_control import HardwareControlAPI
20
+ from opentrons.hardware_control.types import OT3Mount
21
+ from opentrons.hardware_control import ot3_calibration as calibration
22
+
23
+
24
+ CalibrateModuleCommandType = Literal["calibration/calibrateModule"]
25
+
26
+
27
+ class CalibrateModuleParams(BaseModel):
28
+ """Payload required to calibrate-module."""
29
+
30
+ moduleId: str = Field(..., description="The unique id of module to calibrate.")
31
+ labwareId: str = Field(
32
+ ..., description="The unique id of module calibration adapter labware."
33
+ )
34
+ mount: MountType = Field(
35
+ ..., description="The instrument mount used to calibrate the module."
36
+ )
37
+
38
+
39
+ class CalibrateModuleResult(BaseModel):
40
+ """Result data from the execution of a calibrate-module command."""
41
+
42
+ moduleOffset: ModuleOffsetVector = Field(
43
+ ..., description="Offset of calibrated module."
44
+ )
45
+
46
+ location: DeckSlotLocation = Field(
47
+ ..., description="The deck slot this module was calibrated in."
48
+ )
49
+
50
+
51
+ class CalibrateModuleImplementation(
52
+ AbstractCommandImpl[CalibrateModuleParams, SuccessData[CalibrateModuleResult]]
53
+ ):
54
+ """CalibrateModule command implementation."""
55
+
56
+ def __init__(
57
+ self,
58
+ state_view: StateView,
59
+ hardware_api: HardwareControlAPI,
60
+ **kwargs: object,
61
+ ) -> None:
62
+ self._state_view = state_view
63
+ self._hardware_api = hardware_api
64
+
65
+ async def execute(
66
+ self, params: CalibrateModuleParams
67
+ ) -> SuccessData[CalibrateModuleResult]:
68
+ """Execute calibrate-module command."""
69
+ ot3_api = ensure_ot3_hardware(
70
+ self._hardware_api,
71
+ )
72
+ ot3_mount = OT3Mount.from_mount(params.mount)
73
+ slot = self._state_view.modules.get_location(params.moduleId)
74
+ module_serial = self._state_view.modules.get_serial_number(params.moduleId)
75
+ # NOTE (ba, 2023-03-31): There are two wells for calibration labware definitions
76
+ # well A1 represents the location calibration square center relative to the adapters bottom-left corner
77
+ # well B1 represents the location of the calibration square probe point relative to the adapters bottom-left corner.
78
+ nominal_position = self._state_view.geometry.get_well_position(
79
+ labware_id=params.labwareId, well_name="B1"
80
+ )
81
+
82
+ # start the calibration
83
+ module_offset = await calibration.calibrate_module(
84
+ ot3_api, ot3_mount, slot.slotName.id, module_serial, nominal_position
85
+ )
86
+
87
+ return SuccessData(
88
+ public=CalibrateModuleResult(
89
+ moduleOffset=ModuleOffsetVector(
90
+ x=module_offset.x, y=module_offset.y, z=module_offset.z
91
+ ),
92
+ location=slot,
93
+ ),
94
+ )
95
+
96
+
97
+ class CalibrateModule(
98
+ BaseCommand[CalibrateModuleParams, CalibrateModuleResult, ErrorOccurrence]
99
+ ):
100
+ """Calibrate-module command model."""
101
+
102
+ commandType: CalibrateModuleCommandType = "calibration/calibrateModule"
103
+ params: CalibrateModuleParams
104
+ result: Optional[CalibrateModuleResult] = None
105
+
106
+ _ImplementationCls: Type[
107
+ CalibrateModuleImplementation
108
+ ] = CalibrateModuleImplementation
109
+
110
+
111
+ class CalibrateModuleCreate(BaseCommandCreate[CalibrateModuleParams]):
112
+ """Create calibrate-module command request model."""
113
+
114
+ commandType: CalibrateModuleCommandType = "calibration/calibrateModule"
115
+ params: CalibrateModuleParams
116
+
117
+ _CommandCls: Type[CalibrateModule] = CalibrateModule
@@ -0,0 +1,96 @@
1
+ """Calibrate-pipette command for OT3 hardware. request, result, and implementation models."""
2
+ from typing import Optional, Type
3
+ from typing_extensions import Literal
4
+ from pydantic import BaseModel, Field
5
+
6
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
7
+ from ...errors.error_occurrence import ErrorOccurrence
8
+ from ...types import InstrumentOffsetVector
9
+
10
+ from opentrons.protocol_engine.resources.ot3_validation import ensure_ot3_hardware
11
+
12
+
13
+ from opentrons.hardware_control import HardwareControlAPI
14
+ from opentrons.hardware_control.types import OT3Mount
15
+ from opentrons.hardware_control import ot3_calibration as calibration
16
+
17
+ from opentrons.types import MountType
18
+
19
+ CalibratePipetteCommandType = Literal["calibration/calibratePipette"]
20
+
21
+
22
+ class CalibratePipetteParams(BaseModel):
23
+ """Payload required to calibrate-pipette."""
24
+
25
+ mount: MountType = Field(..., description="Instrument mount to calibrate.")
26
+
27
+
28
+ class CalibratePipetteResult(BaseModel):
29
+ """Result data from the execution of a calibrate-pipette command."""
30
+
31
+ pipetteOffset: InstrumentOffsetVector = Field(
32
+ ..., description="Offset of calibrated pipette."
33
+ )
34
+
35
+
36
+ class CalibratePipetteImplementation(
37
+ AbstractCommandImpl[CalibratePipetteParams, SuccessData[CalibratePipetteResult]]
38
+ ):
39
+ """CalibratePipette command implementation."""
40
+
41
+ def __init__(
42
+ self,
43
+ hardware_api: HardwareControlAPI,
44
+ **kwargs: object,
45
+ ) -> None:
46
+ self._hardware_api = hardware_api
47
+
48
+ async def execute(
49
+ self, params: CalibratePipetteParams
50
+ ) -> SuccessData[CalibratePipetteResult]:
51
+ """Execute calibrate-pipette command."""
52
+ # TODO (tz, 20-9-22): Add a better solution to determine if a command can be executed on an OT-3/OT-2
53
+ ot3_api = ensure_ot3_hardware(
54
+ self._hardware_api,
55
+ )
56
+ ot3_mount = OT3Mount.from_mount(params.mount)
57
+ assert (
58
+ ot3_mount is not OT3Mount.GRIPPER
59
+ ), "Expected a Pipette mount but Gripper mount was provided."
60
+
61
+ pipette_offset = await calibration.find_pipette_offset(
62
+ hcapi=ot3_api, mount=ot3_mount, slot=5
63
+ )
64
+
65
+ await ot3_api.save_instrument_offset(mount=ot3_mount, delta=pipette_offset)
66
+
67
+ return SuccessData(
68
+ public=CalibratePipetteResult.model_construct(
69
+ pipetteOffset=InstrumentOffsetVector.model_construct(
70
+ x=pipette_offset.x, y=pipette_offset.y, z=pipette_offset.z
71
+ )
72
+ ),
73
+ )
74
+
75
+
76
+ class CalibratePipette(
77
+ BaseCommand[CalibratePipetteParams, CalibratePipetteResult, ErrorOccurrence]
78
+ ):
79
+ """Calibrate-pipette command model."""
80
+
81
+ commandType: CalibratePipetteCommandType = "calibration/calibratePipette"
82
+ params: CalibratePipetteParams
83
+ result: Optional[CalibratePipetteResult] = None
84
+
85
+ _ImplementationCls: Type[
86
+ CalibratePipetteImplementation
87
+ ] = CalibratePipetteImplementation
88
+
89
+
90
+ class CalibratePipetteCreate(BaseCommandCreate[CalibratePipetteParams]):
91
+ """Create calibrate-pipette command request model."""
92
+
93
+ commandType: CalibratePipetteCommandType = "calibration/calibratePipette"
94
+ params: CalibratePipetteParams
95
+
96
+ _CommandCls: Type[CalibratePipette] = CalibratePipette
@@ -0,0 +1,156 @@
1
+ """Calibration Move To Maintenance Location command payload, result, and implementation models."""
2
+ from __future__ import annotations
3
+
4
+ import enum
5
+ from typing import TYPE_CHECKING, Type, Optional
6
+ from typing_extensions import Literal
7
+
8
+ from pydantic import BaseModel, Field
9
+
10
+ from opentrons.types import MountType, Point, Mount
11
+ from opentrons.hardware_control.types import Axis, CriticalPoint
12
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
13
+ from ...errors.error_occurrence import ErrorOccurrence
14
+ from opentrons.protocol_engine.resources.ot3_validation import ensure_ot3_hardware
15
+
16
+ if TYPE_CHECKING:
17
+ from opentrons.hardware_control import HardwareControlAPI
18
+ from ...state.state import StateView
19
+
20
+ # These offsets supplied from HW
21
+ _ATTACH_POINT = Point(x=0, y=110)
22
+ _MAX_Z_AXIS_MOTION_RANGE = 215
23
+ # These offsets are by eye measuring
24
+ _INSTRUMENT_ATTACH_Z_POINT = 400.0
25
+ _LEFT_MOUNT_Z_MARGIN = 5
26
+ # Move the right mount a bit higher than the left so the user won't forget to unscrew
27
+ _RIGHT_MOUNT_Z_MARGIN = 20
28
+
29
+ MoveToMaintenancePositionCommandType = Literal["calibration/moveToMaintenancePosition"]
30
+
31
+
32
+ class MaintenancePosition(enum.Enum):
33
+ """Maintenance position options."""
34
+
35
+ ATTACH_PLATE = "attachPlate"
36
+ ATTACH_INSTRUMENT = "attachInstrument"
37
+
38
+
39
+ class MoveToMaintenancePositionParams(BaseModel):
40
+ """Calibration set up position command parameters."""
41
+
42
+ mount: MountType = Field(
43
+ ...,
44
+ description="Gantry mount to move maintenance position.",
45
+ )
46
+
47
+ maintenancePosition: MaintenancePosition = Field(
48
+ MaintenancePosition.ATTACH_INSTRUMENT,
49
+ description="The position the gantry mount needs to move to.",
50
+ )
51
+
52
+
53
+ class MoveToMaintenancePositionResult(BaseModel):
54
+ """Result data from the execution of a MoveToMaintenancePosition command."""
55
+
56
+
57
+ class MoveToMaintenancePositionImplementation(
58
+ AbstractCommandImpl[
59
+ MoveToMaintenancePositionParams,
60
+ SuccessData[MoveToMaintenancePositionResult],
61
+ ]
62
+ ):
63
+ """Calibration set up position command implementation."""
64
+
65
+ def __init__(
66
+ self,
67
+ hardware_api: HardwareControlAPI,
68
+ state_view: StateView,
69
+ **kwargs: object,
70
+ ) -> None:
71
+ self._state_view = state_view
72
+ self._hardware_api = hardware_api
73
+
74
+ async def execute(
75
+ self, params: MoveToMaintenancePositionParams
76
+ ) -> SuccessData[MoveToMaintenancePositionResult]:
77
+ """Move the requested mount to a maintenance deck slot."""
78
+ ot3_api = ensure_ot3_hardware(
79
+ self._hardware_api,
80
+ )
81
+ max_height_z_tip = ot3_api.get_instrument_max_height(Mount.LEFT)
82
+ # disengage the gripper z mount if present and enabled
83
+ await ot3_api.prepare_for_mount_movement(Mount.LEFT)
84
+
85
+ await ot3_api.retract(Mount.LEFT)
86
+ current_pos = await ot3_api.gantry_position(
87
+ Mount.LEFT, critical_point=CriticalPoint.MOUNT
88
+ )
89
+ await ot3_api.move_to(
90
+ mount=Mount.LEFT,
91
+ abs_position=Point(x=_ATTACH_POINT.x, y=_ATTACH_POINT.y, z=current_pos.z),
92
+ critical_point=CriticalPoint.MOUNT,
93
+ )
94
+
95
+ if params.mount != MountType.EXTENSION:
96
+ if params.maintenancePosition == MaintenancePosition.ATTACH_INSTRUMENT:
97
+ mount = params.mount.to_hw_mount()
98
+ mount_to_axis = Axis.by_mount(mount)
99
+ await ot3_api.prepare_for_mount_movement(mount)
100
+ await ot3_api.move_axes(
101
+ {
102
+ mount_to_axis: _INSTRUMENT_ATTACH_Z_POINT,
103
+ }
104
+ )
105
+ await ot3_api.disengage_axes([mount_to_axis])
106
+ else:
107
+ max_motion_range = max_height_z_tip - _MAX_Z_AXIS_MOTION_RANGE
108
+ await ot3_api.move_axes(
109
+ {
110
+ Axis.Z_L: max_motion_range + _LEFT_MOUNT_Z_MARGIN,
111
+ }
112
+ )
113
+ await ot3_api.disengage_axes([Axis.Z_L])
114
+ await ot3_api.move_axes(
115
+ {
116
+ Axis.Z_R: max_motion_range + _RIGHT_MOUNT_Z_MARGIN,
117
+ }
118
+ )
119
+ await ot3_api.disengage_axes([Axis.Z_R])
120
+
121
+ return SuccessData(
122
+ public=MoveToMaintenancePositionResult(),
123
+ )
124
+
125
+
126
+ class MoveToMaintenancePosition(
127
+ BaseCommand[
128
+ MoveToMaintenancePositionParams,
129
+ MoveToMaintenancePositionResult,
130
+ ErrorOccurrence,
131
+ ]
132
+ ):
133
+ """Calibration set up position command model."""
134
+
135
+ commandType: MoveToMaintenancePositionCommandType = (
136
+ "calibration/moveToMaintenancePosition"
137
+ )
138
+ params: MoveToMaintenancePositionParams
139
+ result: Optional[MoveToMaintenancePositionResult] = None
140
+
141
+ _ImplementationCls: Type[
142
+ MoveToMaintenancePositionImplementation
143
+ ] = MoveToMaintenancePositionImplementation
144
+
145
+
146
+ class MoveToMaintenancePositionCreate(
147
+ BaseCommandCreate[MoveToMaintenancePositionParams]
148
+ ):
149
+ """Calibration set up position command creation request model."""
150
+
151
+ commandType: MoveToMaintenancePositionCommandType = (
152
+ "calibration/moveToMaintenancePosition"
153
+ )
154
+ params: MoveToMaintenancePositionParams
155
+
156
+ _CommandCls: Type[MoveToMaintenancePosition] = MoveToMaintenancePosition