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,97 @@
1
+ """Command models to start heating a Temperature Module."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING
4
+ from typing_extensions import Literal, Type
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
9
+ from ...errors.error_occurrence import ErrorOccurrence
10
+
11
+ if TYPE_CHECKING:
12
+ from opentrons.protocol_engine.state.state import StateView
13
+ from opentrons.protocol_engine.execution import EquipmentHandler
14
+
15
+ SetTargetTemperatureCommandType = Literal["temperatureModule/setTargetTemperature"]
16
+
17
+
18
+ class SetTargetTemperatureParams(BaseModel):
19
+ """Input parameters to set a Temperature Module's target temperature."""
20
+
21
+ moduleId: str = Field(..., description="Unique ID of the Temperature Module.")
22
+ celsius: float = Field(..., description="Target temperature in °C.")
23
+
24
+
25
+ class SetTargetTemperatureResult(BaseModel):
26
+ """Result data from setting a Temperature Module's target temperature."""
27
+
28
+ targetTemperature: float = Field(
29
+ ...,
30
+ description="The target temperature that was set after validation "
31
+ "and type conversion (if any).",
32
+ )
33
+
34
+
35
+ class SetTargetTemperatureImpl(
36
+ AbstractCommandImpl[
37
+ SetTargetTemperatureParams, SuccessData[SetTargetTemperatureResult]
38
+ ]
39
+ ):
40
+ """Execution implementation of a Temperature Module's set temperature command."""
41
+
42
+ def __init__(
43
+ self,
44
+ state_view: StateView,
45
+ equipment: EquipmentHandler,
46
+ **unused_dependencies: object,
47
+ ) -> None:
48
+ self._state_view = state_view
49
+ self._equipment = equipment
50
+
51
+ async def execute(
52
+ self, params: SetTargetTemperatureParams
53
+ ) -> SuccessData[SetTargetTemperatureResult]:
54
+ """Set a Temperature Module's target temperature."""
55
+ # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
56
+ module_substate = self._state_view.modules.get_temperature_module_substate(
57
+ module_id=params.moduleId
58
+ )
59
+
60
+ # Verify temperature from temperature module view
61
+ validated_temp = module_substate.validate_target_temperature(params.celsius)
62
+
63
+ # Allow propagation of ModuleNotAttachedError.
64
+ temp_hardware_module = self._equipment.get_module_hardware_api(
65
+ module_substate.module_id
66
+ )
67
+
68
+ if temp_hardware_module is not None:
69
+ await temp_hardware_module.start_set_temperature(celsius=validated_temp)
70
+ return SuccessData(
71
+ public=SetTargetTemperatureResult(targetTemperature=validated_temp),
72
+ )
73
+
74
+
75
+ class SetTargetTemperature(
76
+ BaseCommand[SetTargetTemperatureParams, SetTargetTemperatureResult, ErrorOccurrence]
77
+ ):
78
+ """A command to set a Temperature Module's target temperature."""
79
+
80
+ commandType: SetTargetTemperatureCommandType = (
81
+ "temperatureModule/setTargetTemperature"
82
+ )
83
+ params: SetTargetTemperatureParams
84
+ result: Optional[SetTargetTemperatureResult] = None
85
+
86
+ _ImplementationCls: Type[SetTargetTemperatureImpl] = SetTargetTemperatureImpl
87
+
88
+
89
+ class SetTargetTemperatureCreate(BaseCommandCreate[SetTargetTemperatureParams]):
90
+ """A request to create a Temperature Module's set temperature command."""
91
+
92
+ commandType: SetTargetTemperatureCommandType = (
93
+ "temperatureModule/setTargetTemperature"
94
+ )
95
+ params: SetTargetTemperatureParams
96
+
97
+ _CommandCls: Type[SetTargetTemperature] = SetTargetTemperature
@@ -0,0 +1,104 @@
1
+ """Command models to wait for target temperature of a Temperature Module."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING, Any
4
+
5
+ from typing_extensions import Literal, Type
6
+ from pydantic import BaseModel, Field
7
+ from pydantic.json_schema import SkipJsonSchema
8
+
9
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
10
+ from ...errors.error_occurrence import ErrorOccurrence
11
+
12
+ if TYPE_CHECKING:
13
+ from opentrons.protocol_engine.state.state import StateView
14
+ from opentrons.protocol_engine.execution import EquipmentHandler
15
+
16
+ WaitForTemperatureCommandType = Literal["temperatureModule/waitForTemperature"]
17
+
18
+
19
+ def _remove_default(s: dict[str, Any]) -> None:
20
+ s.pop("default", None)
21
+
22
+
23
+ class WaitForTemperatureParams(BaseModel):
24
+ """Input parameters to wait for a Temperature Module's target temperature."""
25
+
26
+ moduleId: str = Field(..., description="Unique ID of the Temperature Module.")
27
+ celsius: float | SkipJsonSchema[None] = Field(
28
+ None,
29
+ description="Target temperature in °C. If not specified, will "
30
+ "default to the module's target temperature. "
31
+ "Specifying a celsius parameter other than the target temperature "
32
+ "could lead to unpredictable behavior and hence is not "
33
+ "recommended for use. This parameter can be removed in a "
34
+ "future version without prior notice.",
35
+ json_schema_extra=_remove_default,
36
+ )
37
+
38
+
39
+ class WaitForTemperatureResult(BaseModel):
40
+ """Result data from waiting for a Temperature Module's target temperature."""
41
+
42
+
43
+ class WaitForTemperatureImpl(
44
+ AbstractCommandImpl[WaitForTemperatureParams, SuccessData[WaitForTemperatureResult]]
45
+ ):
46
+ """Execution implementation of Temperature Module's wait for temperature command."""
47
+
48
+ def __init__(
49
+ self,
50
+ state_view: StateView,
51
+ equipment: EquipmentHandler,
52
+ **unused_dependencies: object,
53
+ ) -> None:
54
+ self._state_view = state_view
55
+ self._equipment = equipment
56
+
57
+ async def execute(
58
+ self, params: WaitForTemperatureParams
59
+ ) -> SuccessData[WaitForTemperatureResult]:
60
+ """Wait for a Temperature Module's target temperature."""
61
+ # Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
62
+ module_substate = self._state_view.modules.get_temperature_module_substate(
63
+ module_id=params.moduleId
64
+ )
65
+
66
+ if params.celsius is None:
67
+ # Raises error if no target temperature
68
+ target_temp = module_substate.get_plate_target_temperature()
69
+ else:
70
+ target_temp = module_substate.validate_target_temperature(params.celsius)
71
+
72
+ # Allow propagation of ModuleNotAttachedError.
73
+ temp_hardware_module = self._equipment.get_module_hardware_api(
74
+ module_substate.module_id
75
+ )
76
+
77
+ if temp_hardware_module is not None:
78
+ await temp_hardware_module.await_temperature(
79
+ awaiting_temperature=target_temp
80
+ )
81
+ return SuccessData(
82
+ public=WaitForTemperatureResult(),
83
+ )
84
+
85
+
86
+ class WaitForTemperature(
87
+ BaseCommand[WaitForTemperatureParams, WaitForTemperatureResult, ErrorOccurrence]
88
+ ):
89
+ """A command to wait for a Temperature Module's target temperature."""
90
+
91
+ commandType: WaitForTemperatureCommandType = "temperatureModule/waitForTemperature"
92
+ params: WaitForTemperatureParams
93
+ result: Optional[WaitForTemperatureResult] = None
94
+
95
+ _ImplementationCls: Type[WaitForTemperatureImpl] = WaitForTemperatureImpl
96
+
97
+
98
+ class WaitForTemperatureCreate(BaseCommandCreate[WaitForTemperatureParams]):
99
+ """A request to create a Temperature Module's wait for temperature command."""
100
+
101
+ commandType: WaitForTemperatureCommandType = "temperatureModule/waitForTemperature"
102
+ params: WaitForTemperatureParams
103
+
104
+ _CommandCls: Type[WaitForTemperature] = WaitForTemperature
@@ -0,0 +1,152 @@
1
+ """Command models for Thermocycler commands."""
2
+
3
+ from .set_target_block_temperature import (
4
+ SetTargetBlockTemperatureCommandType,
5
+ SetTargetBlockTemperatureParams,
6
+ SetTargetBlockTemperatureResult,
7
+ SetTargetBlockTemperature,
8
+ SetTargetBlockTemperatureCreate,
9
+ )
10
+
11
+ from .wait_for_block_temperature import (
12
+ WaitForBlockTemperatureCommandType,
13
+ WaitForBlockTemperatureParams,
14
+ WaitForBlockTemperatureResult,
15
+ WaitForBlockTemperature,
16
+ WaitForBlockTemperatureCreate,
17
+ )
18
+
19
+ from .set_target_lid_temperature import (
20
+ SetTargetLidTemperatureCommandType,
21
+ SetTargetLidTemperatureParams,
22
+ SetTargetLidTemperatureResult,
23
+ SetTargetLidTemperature,
24
+ SetTargetLidTemperatureCreate,
25
+ )
26
+
27
+ from .wait_for_lid_temperature import (
28
+ WaitForLidTemperatureCommandType,
29
+ WaitForLidTemperatureParams,
30
+ WaitForLidTemperatureResult,
31
+ WaitForLidTemperature,
32
+ WaitForLidTemperatureCreate,
33
+ )
34
+
35
+ from .deactivate_block import (
36
+ DeactivateBlockCommandType,
37
+ DeactivateBlockParams,
38
+ DeactivateBlockResult,
39
+ DeactivateBlock,
40
+ DeactivateBlockCreate,
41
+ )
42
+
43
+ from .deactivate_lid import (
44
+ DeactivateLidCommandType,
45
+ DeactivateLidParams,
46
+ DeactivateLidResult,
47
+ DeactivateLid,
48
+ DeactivateLidCreate,
49
+ )
50
+
51
+ from .open_lid import (
52
+ OpenLidCommandType,
53
+ OpenLidParams,
54
+ OpenLidResult,
55
+ OpenLid,
56
+ OpenLidCreate,
57
+ )
58
+
59
+ from .close_lid import (
60
+ CloseLidCommandType,
61
+ CloseLidParams,
62
+ CloseLidResult,
63
+ CloseLid,
64
+ CloseLidCreate,
65
+ )
66
+
67
+ from .run_profile import (
68
+ RunProfileCommandType,
69
+ RunProfileParams,
70
+ RunProfileStepParams,
71
+ RunProfileResult,
72
+ RunProfile,
73
+ RunProfileCreate,
74
+ )
75
+
76
+ from .run_extended_profile import (
77
+ RunExtendedProfileCommandType,
78
+ RunExtendedProfileParams,
79
+ RunExtendedProfileResult,
80
+ RunExtendedProfile,
81
+ RunExtendedProfileCreate,
82
+ ProfileCycle,
83
+ ProfileStep,
84
+ )
85
+
86
+
87
+ __all__ = [
88
+ # Set target block temperature command models
89
+ "SetTargetBlockTemperatureCommandType",
90
+ "SetTargetBlockTemperatureParams",
91
+ "SetTargetBlockTemperatureResult",
92
+ "SetTargetBlockTemperature",
93
+ "SetTargetBlockTemperatureCreate",
94
+ # Wait for block temperature command models
95
+ "WaitForBlockTemperatureCommandType",
96
+ "WaitForBlockTemperatureParams",
97
+ "WaitForBlockTemperatureResult",
98
+ "WaitForBlockTemperature",
99
+ "WaitForBlockTemperatureCreate",
100
+ # Set target lid temperature command models
101
+ "SetTargetLidTemperatureCommandType",
102
+ "SetTargetLidTemperatureParams",
103
+ "SetTargetLidTemperatureResult",
104
+ "SetTargetLidTemperature",
105
+ "SetTargetLidTemperatureCreate",
106
+ # Wait for lid temperature command models
107
+ "WaitForLidTemperatureCommandType",
108
+ "WaitForLidTemperatureParams",
109
+ "WaitForLidTemperatureResult",
110
+ "WaitForLidTemperature",
111
+ "WaitForLidTemperatureCreate",
112
+ # Deactivate block command models
113
+ "DeactivateBlockCommandType",
114
+ "DeactivateBlockParams",
115
+ "DeactivateBlockResult",
116
+ "DeactivateBlock",
117
+ "DeactivateBlockCreate",
118
+ # Deactivate lid command models
119
+ "DeactivateLidCommandType",
120
+ "DeactivateLidParams",
121
+ "DeactivateLidResult",
122
+ "DeactivateLid",
123
+ "DeactivateLidCreate",
124
+ # Open lid command models
125
+ "OpenLidCommandType",
126
+ "OpenLidParams",
127
+ "OpenLidResult",
128
+ "OpenLid",
129
+ "OpenLidCreate",
130
+ # Close lid command models
131
+ "CloseLidCommandType",
132
+ "CloseLidParams",
133
+ "CloseLidResult",
134
+ "CloseLid",
135
+ "CloseLidCreate",
136
+ # Run profile command models,
137
+ "RunProfileCommandType",
138
+ "RunProfileParams",
139
+ "RunProfileStepParams",
140
+ "RunProfileResult",
141
+ "RunProfile",
142
+ "RunProfileCreate",
143
+ # Run extended profile command models.
144
+ "RunExtendedProfileCommandType",
145
+ "RunExtendedProfileParams",
146
+ "RunExtendedProfileStepParams",
147
+ "RunExtendedProfileResult",
148
+ "RunExtendedProfile",
149
+ "RunExtendedProfileCreate",
150
+ "ProfileCycle",
151
+ "ProfileStep",
152
+ ]
@@ -0,0 +1,87 @@
1
+ """Command models to close a Thermocycler's lid."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING
4
+ from typing_extensions import Literal, Type
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
9
+ from ...errors.error_occurrence import ErrorOccurrence
10
+ from ...state import update_types
11
+ from opentrons.protocol_engine.types import MotorAxis
12
+
13
+ if TYPE_CHECKING:
14
+ from opentrons.protocol_engine.state.state import StateView
15
+ from opentrons.protocol_engine.execution import EquipmentHandler, MovementHandler
16
+
17
+
18
+ CloseLidCommandType = Literal["thermocycler/closeLid"]
19
+
20
+
21
+ class CloseLidParams(BaseModel):
22
+ """Input parameters to close a Thermocycler's lid."""
23
+
24
+ moduleId: str = Field(..., description="Unique ID of the Thermocycler.")
25
+
26
+
27
+ class CloseLidResult(BaseModel):
28
+ """Result data from closing a Thermocycler's lid."""
29
+
30
+
31
+ class CloseLidImpl(AbstractCommandImpl[CloseLidParams, SuccessData[CloseLidResult]]):
32
+ """Execution implementation of a Thermocycler's close lid command."""
33
+
34
+ def __init__(
35
+ self,
36
+ state_view: StateView,
37
+ equipment: EquipmentHandler,
38
+ movement: MovementHandler,
39
+ **unused_dependencies: object,
40
+ ) -> None:
41
+ self._state_view = state_view
42
+ self._equipment = equipment
43
+ self._movement = movement
44
+
45
+ async def execute(self, params: CloseLidParams) -> SuccessData[CloseLidResult]:
46
+ """Close a Thermocycler's lid."""
47
+ state_update = update_types.StateUpdate()
48
+
49
+ thermocycler_state = self._state_view.modules.get_thermocycler_module_substate(
50
+ params.moduleId
51
+ )
52
+ thermocycler_hardware = self._equipment.get_module_hardware_api(
53
+ thermocycler_state.module_id
54
+ )
55
+
56
+ # move the pipettes and gantry over the trash
57
+ # do not home plunger axes because pipettes may be holding liquid
58
+ axes_to_home = [
59
+ MotorAxis.X,
60
+ MotorAxis.Y,
61
+ ] + self._state_view.motion.get_robot_mount_axes()
62
+ await self._movement.home(axes=axes_to_home)
63
+ state_update.clear_all_pipette_locations()
64
+
65
+ if thermocycler_hardware is not None:
66
+ await thermocycler_hardware.close()
67
+
68
+ return SuccessData(public=CloseLidResult(), state_update=state_update)
69
+
70
+
71
+ class CloseLid(BaseCommand[CloseLidParams, CloseLidResult, ErrorOccurrence]):
72
+ """A command to close a Thermocycler's lid."""
73
+
74
+ commandType: CloseLidCommandType = "thermocycler/closeLid"
75
+ params: CloseLidParams
76
+ result: Optional[CloseLidResult] = None
77
+
78
+ _ImplementationCls: Type[CloseLidImpl] = CloseLidImpl
79
+
80
+
81
+ class CloseLidCreate(BaseCommandCreate[CloseLidParams]):
82
+ """A request to close a Thermocycler's lid."""
83
+
84
+ commandType: CloseLidCommandType = "thermocycler/closeLid"
85
+ params: CloseLidParams
86
+
87
+ _CommandCls: Type[CloseLid] = CloseLid
@@ -0,0 +1,80 @@
1
+ """Command models to stop heating a Thermocycler's block."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING
4
+ from typing_extensions import Literal, Type
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
9
+ from ...errors.error_occurrence import ErrorOccurrence
10
+
11
+ if TYPE_CHECKING:
12
+ from opentrons.protocol_engine.state.state import StateView
13
+ from opentrons.protocol_engine.execution import EquipmentHandler
14
+
15
+
16
+ DeactivateBlockCommandType = Literal["thermocycler/deactivateBlock"]
17
+
18
+
19
+ class DeactivateBlockParams(BaseModel):
20
+ """Input parameters to unset a Thermocycler's target block temperature."""
21
+
22
+ moduleId: str = Field(..., description="Unique ID of the Thermocycler.")
23
+
24
+
25
+ class DeactivateBlockResult(BaseModel):
26
+ """Result data from unsetting a Thermocycler's target block temperature."""
27
+
28
+
29
+ class DeactivateBlockImpl(
30
+ AbstractCommandImpl[DeactivateBlockParams, SuccessData[DeactivateBlockResult]]
31
+ ):
32
+ """Execution implementation of a Thermocycler's deactivate block command."""
33
+
34
+ def __init__(
35
+ self,
36
+ state_view: StateView,
37
+ equipment: EquipmentHandler,
38
+ **unused_dependencies: object,
39
+ ) -> None:
40
+ self._state_view = state_view
41
+ self._equipment = equipment
42
+
43
+ async def execute(
44
+ self, params: DeactivateBlockParams
45
+ ) -> SuccessData[DeactivateBlockResult]:
46
+ """Unset a Thermocycler's target block temperature."""
47
+ thermocycler_state = self._state_view.modules.get_thermocycler_module_substate(
48
+ params.moduleId
49
+ )
50
+ thermocycler_hardware = self._equipment.get_module_hardware_api(
51
+ thermocycler_state.module_id
52
+ )
53
+
54
+ if thermocycler_hardware is not None:
55
+ await thermocycler_hardware.deactivate_block()
56
+
57
+ return SuccessData(
58
+ public=DeactivateBlockResult(),
59
+ )
60
+
61
+
62
+ class DeactivateBlock(
63
+ BaseCommand[DeactivateBlockParams, DeactivateBlockResult, ErrorOccurrence]
64
+ ):
65
+ """A command to unset a Thermocycler's target block temperature."""
66
+
67
+ commandType: DeactivateBlockCommandType = "thermocycler/deactivateBlock"
68
+ params: DeactivateBlockParams
69
+ result: Optional[DeactivateBlockResult] = None
70
+
71
+ _ImplementationCls: Type[DeactivateBlockImpl] = DeactivateBlockImpl
72
+
73
+
74
+ class DeactivateBlockCreate(BaseCommandCreate[DeactivateBlockParams]):
75
+ """A request to create a Thermocycler's deactivate block command."""
76
+
77
+ commandType: DeactivateBlockCommandType = "thermocycler/deactivateBlock"
78
+ params: DeactivateBlockParams
79
+
80
+ _CommandCls: Type[DeactivateBlock] = DeactivateBlock
@@ -0,0 +1,80 @@
1
+ """Command models to stop heating a Thermocycler's lid."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING
4
+ from typing_extensions import Literal, Type
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
9
+ from ...errors.error_occurrence import ErrorOccurrence
10
+
11
+ if TYPE_CHECKING:
12
+ from opentrons.protocol_engine.state.state import StateView
13
+ from opentrons.protocol_engine.execution import EquipmentHandler
14
+
15
+
16
+ DeactivateLidCommandType = Literal["thermocycler/deactivateLid"]
17
+
18
+
19
+ class DeactivateLidParams(BaseModel):
20
+ """Input parameters to unset a Thermocycler's target lid temperature."""
21
+
22
+ moduleId: str = Field(..., description="Unique ID of the Thermocycler.")
23
+
24
+
25
+ class DeactivateLidResult(BaseModel):
26
+ """Result data from unsetting a Thermocycler's target lid temperature."""
27
+
28
+
29
+ class DeactivateLidImpl(
30
+ AbstractCommandImpl[DeactivateLidParams, SuccessData[DeactivateLidResult]]
31
+ ):
32
+ """Execution implementation of a Thermocycler's deactivate lid command."""
33
+
34
+ def __init__(
35
+ self,
36
+ state_view: StateView,
37
+ equipment: EquipmentHandler,
38
+ **unused_dependencies: object,
39
+ ) -> None:
40
+ self._state_view = state_view
41
+ self._equipment = equipment
42
+
43
+ async def execute(
44
+ self, params: DeactivateLidParams
45
+ ) -> SuccessData[DeactivateLidResult]:
46
+ """Unset a Thermocycler's target lid temperature."""
47
+ thermocycler_state = self._state_view.modules.get_thermocycler_module_substate(
48
+ params.moduleId
49
+ )
50
+ thermocycler_hardware = self._equipment.get_module_hardware_api(
51
+ thermocycler_state.module_id
52
+ )
53
+
54
+ if thermocycler_hardware is not None:
55
+ await thermocycler_hardware.deactivate_lid()
56
+
57
+ return SuccessData(
58
+ public=DeactivateLidResult(),
59
+ )
60
+
61
+
62
+ class DeactivateLid(
63
+ BaseCommand[DeactivateLidParams, DeactivateLidResult, ErrorOccurrence]
64
+ ):
65
+ """A command to unset a Thermocycler's target lid temperature."""
66
+
67
+ commandType: DeactivateLidCommandType = "thermocycler/deactivateLid"
68
+ params: DeactivateLidParams
69
+ result: Optional[DeactivateLidResult] = None
70
+
71
+ _ImplementationCls: Type[DeactivateLidImpl] = DeactivateLidImpl
72
+
73
+
74
+ class DeactivateLidCreate(BaseCommandCreate[DeactivateLidParams]):
75
+ """A request to create a Thermocycler's deactivate lid command."""
76
+
77
+ commandType: DeactivateLidCommandType = "thermocycler/deactivateLid"
78
+ params: DeactivateLidParams
79
+
80
+ _CommandCls: Type[DeactivateLid] = DeactivateLid
@@ -0,0 +1,87 @@
1
+ """Command models to open a Thermocycler's lid."""
2
+ from __future__ import annotations
3
+ from typing import Optional, TYPE_CHECKING
4
+ from typing_extensions import Literal, Type
5
+
6
+ from pydantic import BaseModel, Field
7
+
8
+ from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
9
+ from ...state import update_types
10
+ from ...errors.error_occurrence import ErrorOccurrence
11
+ from opentrons.protocol_engine.types import MotorAxis
12
+
13
+ if TYPE_CHECKING:
14
+ from opentrons.protocol_engine.state.state import StateView
15
+ from opentrons.protocol_engine.execution import EquipmentHandler, MovementHandler
16
+
17
+
18
+ OpenLidCommandType = Literal["thermocycler/openLid"]
19
+
20
+
21
+ class OpenLidParams(BaseModel):
22
+ """Input parameters to open a Thermocycler's lid."""
23
+
24
+ moduleId: str = Field(..., description="Unique ID of the Thermocycler.")
25
+
26
+
27
+ class OpenLidResult(BaseModel):
28
+ """Result data from opening a Thermocycler's lid."""
29
+
30
+
31
+ class OpenLidImpl(AbstractCommandImpl[OpenLidParams, SuccessData[OpenLidResult]]):
32
+ """Execution implementation of a Thermocycler's open lid command."""
33
+
34
+ def __init__(
35
+ self,
36
+ state_view: StateView,
37
+ equipment: EquipmentHandler,
38
+ movement: MovementHandler,
39
+ **unused_dependencies: object,
40
+ ) -> None:
41
+ self._state_view = state_view
42
+ self._equipment = equipment
43
+ self._movement = movement
44
+
45
+ async def execute(self, params: OpenLidParams) -> SuccessData[OpenLidResult]:
46
+ """Open a Thermocycler's lid."""
47
+ state_update = update_types.StateUpdate()
48
+
49
+ thermocycler_state = self._state_view.modules.get_thermocycler_module_substate(
50
+ params.moduleId
51
+ )
52
+ thermocycler_hardware = self._equipment.get_module_hardware_api(
53
+ thermocycler_state.module_id
54
+ )
55
+
56
+ # move the pipettes and gantry over the trash
57
+ # do not home plunger axes because pipettes may be holding liquid
58
+ axes_to_home = [
59
+ MotorAxis.X,
60
+ MotorAxis.Y,
61
+ ] + self._state_view.motion.get_robot_mount_axes()
62
+ await self._movement.home(axes=axes_to_home)
63
+ state_update.clear_all_pipette_locations()
64
+
65
+ if thermocycler_hardware is not None:
66
+ await thermocycler_hardware.open()
67
+
68
+ return SuccessData(public=OpenLidResult(), state_update=state_update)
69
+
70
+
71
+ class OpenLid(BaseCommand[OpenLidParams, OpenLidResult, ErrorOccurrence]):
72
+ """A command to open a Thermocycler's lid."""
73
+
74
+ commandType: OpenLidCommandType = "thermocycler/openLid"
75
+ params: OpenLidParams
76
+ result: Optional[OpenLidResult] = None
77
+
78
+ _ImplementationCls: Type[OpenLidImpl] = OpenLidImpl
79
+
80
+
81
+ class OpenLidCreate(BaseCommandCreate[OpenLidParams]):
82
+ """A request to open a Thermocycler's lid."""
83
+
84
+ commandType: OpenLidCommandType = "thermocycler/openLid"
85
+ params: OpenLidParams
86
+
87
+ _CommandCls: Type[OpenLid] = OpenLid