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.
- opentrons/__init__.py +150 -0
- opentrons/_version.py +34 -0
- opentrons/calibration_storage/__init__.py +54 -0
- opentrons/calibration_storage/deck_configuration.py +62 -0
- opentrons/calibration_storage/encoder_decoder.py +31 -0
- opentrons/calibration_storage/file_operators.py +142 -0
- opentrons/calibration_storage/helpers.py +103 -0
- opentrons/calibration_storage/ot2/__init__.py +34 -0
- opentrons/calibration_storage/ot2/deck_attitude.py +85 -0
- opentrons/calibration_storage/ot2/mark_bad_calibration.py +27 -0
- opentrons/calibration_storage/ot2/models/__init__.py +0 -0
- opentrons/calibration_storage/ot2/models/v1.py +149 -0
- opentrons/calibration_storage/ot2/pipette_offset.py +129 -0
- opentrons/calibration_storage/ot2/tip_length.py +281 -0
- opentrons/calibration_storage/ot3/__init__.py +31 -0
- opentrons/calibration_storage/ot3/deck_attitude.py +83 -0
- opentrons/calibration_storage/ot3/gripper_offset.py +156 -0
- opentrons/calibration_storage/ot3/models/__init__.py +0 -0
- opentrons/calibration_storage/ot3/models/v1.py +122 -0
- opentrons/calibration_storage/ot3/module_offset.py +138 -0
- opentrons/calibration_storage/ot3/pipette_offset.py +95 -0
- opentrons/calibration_storage/types.py +45 -0
- opentrons/cli/__init__.py +21 -0
- opentrons/cli/__main__.py +5 -0
- opentrons/cli/analyze.py +557 -0
- opentrons/config/__init__.py +631 -0
- opentrons/config/advanced_settings.py +871 -0
- opentrons/config/defaults_ot2.py +214 -0
- opentrons/config/defaults_ot3.py +499 -0
- opentrons/config/feature_flags.py +86 -0
- opentrons/config/gripper_config.py +55 -0
- opentrons/config/reset.py +203 -0
- opentrons/config/robot_configs.py +187 -0
- opentrons/config/types.py +183 -0
- opentrons/drivers/__init__.py +0 -0
- opentrons/drivers/absorbance_reader/__init__.py +11 -0
- opentrons/drivers/absorbance_reader/abstract.py +72 -0
- opentrons/drivers/absorbance_reader/async_byonoy.py +352 -0
- opentrons/drivers/absorbance_reader/driver.py +81 -0
- opentrons/drivers/absorbance_reader/hid_protocol.py +161 -0
- opentrons/drivers/absorbance_reader/simulator.py +84 -0
- opentrons/drivers/asyncio/__init__.py +0 -0
- opentrons/drivers/asyncio/communication/__init__.py +22 -0
- opentrons/drivers/asyncio/communication/async_serial.py +187 -0
- opentrons/drivers/asyncio/communication/errors.py +88 -0
- opentrons/drivers/asyncio/communication/serial_connection.py +557 -0
- opentrons/drivers/command_builder.py +102 -0
- opentrons/drivers/flex_stacker/__init__.py +13 -0
- opentrons/drivers/flex_stacker/abstract.py +214 -0
- opentrons/drivers/flex_stacker/driver.py +768 -0
- opentrons/drivers/flex_stacker/errors.py +68 -0
- opentrons/drivers/flex_stacker/simulator.py +309 -0
- opentrons/drivers/flex_stacker/types.py +367 -0
- opentrons/drivers/flex_stacker/utils.py +19 -0
- opentrons/drivers/heater_shaker/__init__.py +5 -0
- opentrons/drivers/heater_shaker/abstract.py +76 -0
- opentrons/drivers/heater_shaker/driver.py +204 -0
- opentrons/drivers/heater_shaker/simulator.py +94 -0
- opentrons/drivers/mag_deck/__init__.py +6 -0
- opentrons/drivers/mag_deck/abstract.py +44 -0
- opentrons/drivers/mag_deck/driver.py +208 -0
- opentrons/drivers/mag_deck/simulator.py +63 -0
- opentrons/drivers/rpi_drivers/__init__.py +33 -0
- opentrons/drivers/rpi_drivers/dev_types.py +94 -0
- opentrons/drivers/rpi_drivers/gpio.py +282 -0
- opentrons/drivers/rpi_drivers/gpio_simulator.py +127 -0
- opentrons/drivers/rpi_drivers/interfaces.py +15 -0
- opentrons/drivers/rpi_drivers/types.py +364 -0
- opentrons/drivers/rpi_drivers/usb.py +102 -0
- opentrons/drivers/rpi_drivers/usb_simulator.py +22 -0
- opentrons/drivers/serial_communication.py +151 -0
- opentrons/drivers/smoothie_drivers/__init__.py +4 -0
- opentrons/drivers/smoothie_drivers/connection.py +51 -0
- opentrons/drivers/smoothie_drivers/constants.py +121 -0
- opentrons/drivers/smoothie_drivers/driver_3_0.py +1933 -0
- opentrons/drivers/smoothie_drivers/errors.py +49 -0
- opentrons/drivers/smoothie_drivers/parse_utils.py +143 -0
- opentrons/drivers/smoothie_drivers/simulator.py +99 -0
- opentrons/drivers/smoothie_drivers/types.py +16 -0
- opentrons/drivers/temp_deck/__init__.py +10 -0
- opentrons/drivers/temp_deck/abstract.py +54 -0
- opentrons/drivers/temp_deck/driver.py +197 -0
- opentrons/drivers/temp_deck/simulator.py +57 -0
- opentrons/drivers/thermocycler/__init__.py +12 -0
- opentrons/drivers/thermocycler/abstract.py +99 -0
- opentrons/drivers/thermocycler/driver.py +395 -0
- opentrons/drivers/thermocycler/simulator.py +126 -0
- opentrons/drivers/types.py +107 -0
- opentrons/drivers/utils.py +222 -0
- opentrons/execute.py +742 -0
- opentrons/hardware_control/__init__.py +65 -0
- opentrons/hardware_control/__main__.py +77 -0
- opentrons/hardware_control/adapters.py +98 -0
- opentrons/hardware_control/api.py +1347 -0
- opentrons/hardware_control/backends/__init__.py +7 -0
- opentrons/hardware_control/backends/controller.py +400 -0
- opentrons/hardware_control/backends/errors.py +9 -0
- opentrons/hardware_control/backends/estop_state.py +164 -0
- opentrons/hardware_control/backends/flex_protocol.py +497 -0
- opentrons/hardware_control/backends/ot3controller.py +1930 -0
- opentrons/hardware_control/backends/ot3simulator.py +900 -0
- opentrons/hardware_control/backends/ot3utils.py +664 -0
- opentrons/hardware_control/backends/simulator.py +442 -0
- opentrons/hardware_control/backends/status_bar_state.py +240 -0
- opentrons/hardware_control/backends/subsystem_manager.py +431 -0
- opentrons/hardware_control/backends/tip_presence_manager.py +173 -0
- opentrons/hardware_control/backends/types.py +14 -0
- opentrons/hardware_control/constants.py +6 -0
- opentrons/hardware_control/dev_types.py +125 -0
- opentrons/hardware_control/emulation/__init__.py +0 -0
- opentrons/hardware_control/emulation/abstract_emulator.py +21 -0
- opentrons/hardware_control/emulation/app.py +56 -0
- opentrons/hardware_control/emulation/connection_handler.py +38 -0
- opentrons/hardware_control/emulation/heater_shaker.py +150 -0
- opentrons/hardware_control/emulation/magdeck.py +60 -0
- opentrons/hardware_control/emulation/module_server/__init__.py +8 -0
- opentrons/hardware_control/emulation/module_server/client.py +78 -0
- opentrons/hardware_control/emulation/module_server/helpers.py +130 -0
- opentrons/hardware_control/emulation/module_server/models.py +31 -0
- opentrons/hardware_control/emulation/module_server/server.py +110 -0
- opentrons/hardware_control/emulation/parser.py +74 -0
- opentrons/hardware_control/emulation/proxy.py +241 -0
- opentrons/hardware_control/emulation/run_emulator.py +68 -0
- opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
- opentrons/hardware_control/emulation/scripts/run_app.py +54 -0
- opentrons/hardware_control/emulation/scripts/run_module_emulator.py +72 -0
- opentrons/hardware_control/emulation/scripts/run_smoothie.py +37 -0
- opentrons/hardware_control/emulation/settings.py +119 -0
- opentrons/hardware_control/emulation/simulations.py +133 -0
- opentrons/hardware_control/emulation/smoothie.py +192 -0
- opentrons/hardware_control/emulation/tempdeck.py +69 -0
- opentrons/hardware_control/emulation/thermocycler.py +128 -0
- opentrons/hardware_control/emulation/types.py +10 -0
- opentrons/hardware_control/emulation/util.py +38 -0
- opentrons/hardware_control/errors.py +43 -0
- opentrons/hardware_control/execution_manager.py +164 -0
- opentrons/hardware_control/instruments/__init__.py +5 -0
- opentrons/hardware_control/instruments/instrument_abc.py +39 -0
- opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
- opentrons/hardware_control/instruments/ot2/instrument_calibration.py +152 -0
- opentrons/hardware_control/instruments/ot2/pipette.py +777 -0
- opentrons/hardware_control/instruments/ot2/pipette_handler.py +995 -0
- opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
- opentrons/hardware_control/instruments/ot3/gripper.py +420 -0
- opentrons/hardware_control/instruments/ot3/gripper_handler.py +173 -0
- opentrons/hardware_control/instruments/ot3/instrument_calibration.py +214 -0
- opentrons/hardware_control/instruments/ot3/pipette.py +858 -0
- opentrons/hardware_control/instruments/ot3/pipette_handler.py +1030 -0
- opentrons/hardware_control/module_control.py +332 -0
- opentrons/hardware_control/modules/__init__.py +69 -0
- opentrons/hardware_control/modules/absorbance_reader.py +373 -0
- opentrons/hardware_control/modules/errors.py +7 -0
- opentrons/hardware_control/modules/flex_stacker.py +948 -0
- opentrons/hardware_control/modules/heater_shaker.py +426 -0
- opentrons/hardware_control/modules/lid_temp_status.py +35 -0
- opentrons/hardware_control/modules/magdeck.py +233 -0
- opentrons/hardware_control/modules/mod_abc.py +245 -0
- opentrons/hardware_control/modules/module_calibration.py +93 -0
- opentrons/hardware_control/modules/plate_temp_status.py +61 -0
- opentrons/hardware_control/modules/tempdeck.py +299 -0
- opentrons/hardware_control/modules/thermocycler.py +731 -0
- opentrons/hardware_control/modules/types.py +417 -0
- opentrons/hardware_control/modules/update.py +255 -0
- opentrons/hardware_control/modules/utils.py +73 -0
- opentrons/hardware_control/motion_utilities.py +318 -0
- opentrons/hardware_control/nozzle_manager.py +422 -0
- opentrons/hardware_control/ot3_calibration.py +1171 -0
- opentrons/hardware_control/ot3api.py +3227 -0
- opentrons/hardware_control/pause_manager.py +31 -0
- opentrons/hardware_control/poller.py +112 -0
- opentrons/hardware_control/protocols/__init__.py +106 -0
- opentrons/hardware_control/protocols/asyncio_configurable.py +11 -0
- opentrons/hardware_control/protocols/calibratable.py +45 -0
- opentrons/hardware_control/protocols/chassis_accessory_manager.py +90 -0
- opentrons/hardware_control/protocols/configurable.py +48 -0
- opentrons/hardware_control/protocols/event_sourcer.py +18 -0
- opentrons/hardware_control/protocols/execution_controllable.py +33 -0
- opentrons/hardware_control/protocols/flex_calibratable.py +96 -0
- opentrons/hardware_control/protocols/flex_instrument_configurer.py +52 -0
- opentrons/hardware_control/protocols/gripper_controller.py +55 -0
- opentrons/hardware_control/protocols/hardware_manager.py +51 -0
- opentrons/hardware_control/protocols/identifiable.py +16 -0
- opentrons/hardware_control/protocols/instrument_configurer.py +206 -0
- opentrons/hardware_control/protocols/liquid_handler.py +266 -0
- opentrons/hardware_control/protocols/module_provider.py +16 -0
- opentrons/hardware_control/protocols/motion_controller.py +243 -0
- opentrons/hardware_control/protocols/position_estimator.py +45 -0
- opentrons/hardware_control/protocols/simulatable.py +10 -0
- opentrons/hardware_control/protocols/stoppable.py +9 -0
- opentrons/hardware_control/protocols/types.py +27 -0
- opentrons/hardware_control/robot_calibration.py +224 -0
- opentrons/hardware_control/scripts/README.md +28 -0
- opentrons/hardware_control/scripts/__init__.py +1 -0
- opentrons/hardware_control/scripts/gripper_control.py +208 -0
- opentrons/hardware_control/scripts/ot3gripper +7 -0
- opentrons/hardware_control/scripts/ot3repl +7 -0
- opentrons/hardware_control/scripts/repl.py +187 -0
- opentrons/hardware_control/scripts/tc_control.py +97 -0
- opentrons/hardware_control/scripts/update_module_fw.py +274 -0
- opentrons/hardware_control/simulator_setup.py +260 -0
- opentrons/hardware_control/thread_manager.py +431 -0
- opentrons/hardware_control/threaded_async_lock.py +97 -0
- opentrons/hardware_control/types.py +792 -0
- opentrons/hardware_control/util.py +234 -0
- opentrons/legacy_broker.py +53 -0
- opentrons/legacy_commands/__init__.py +1 -0
- opentrons/legacy_commands/commands.py +483 -0
- opentrons/legacy_commands/helpers.py +153 -0
- opentrons/legacy_commands/module_commands.py +276 -0
- opentrons/legacy_commands/protocol_commands.py +54 -0
- opentrons/legacy_commands/publisher.py +155 -0
- opentrons/legacy_commands/robot_commands.py +51 -0
- opentrons/legacy_commands/types.py +1186 -0
- opentrons/motion_planning/__init__.py +32 -0
- opentrons/motion_planning/adjacent_slots_getters.py +168 -0
- opentrons/motion_planning/deck_conflict.py +501 -0
- opentrons/motion_planning/errors.py +35 -0
- opentrons/motion_planning/types.py +42 -0
- opentrons/motion_planning/waypoints.py +218 -0
- opentrons/ordered_set.py +138 -0
- opentrons/protocol_api/__init__.py +105 -0
- opentrons/protocol_api/_liquid.py +157 -0
- opentrons/protocol_api/_liquid_properties.py +814 -0
- opentrons/protocol_api/_nozzle_layout.py +31 -0
- opentrons/protocol_api/_parameter_context.py +300 -0
- opentrons/protocol_api/_parameters.py +31 -0
- opentrons/protocol_api/_transfer_liquid_validation.py +108 -0
- opentrons/protocol_api/_types.py +43 -0
- opentrons/protocol_api/config.py +23 -0
- opentrons/protocol_api/core/__init__.py +23 -0
- opentrons/protocol_api/core/common.py +33 -0
- opentrons/protocol_api/core/core_map.py +74 -0
- opentrons/protocol_api/core/engine/__init__.py +22 -0
- opentrons/protocol_api/core/engine/_default_labware_versions.py +179 -0
- opentrons/protocol_api/core/engine/deck_conflict.py +400 -0
- opentrons/protocol_api/core/engine/exceptions.py +19 -0
- opentrons/protocol_api/core/engine/instrument.py +2391 -0
- opentrons/protocol_api/core/engine/labware.py +238 -0
- opentrons/protocol_api/core/engine/load_labware_params.py +73 -0
- opentrons/protocol_api/core/engine/module_core.py +1027 -0
- opentrons/protocol_api/core/engine/overlap_versions.py +20 -0
- opentrons/protocol_api/core/engine/pipette_movement_conflict.py +358 -0
- opentrons/protocol_api/core/engine/point_calculations.py +64 -0
- opentrons/protocol_api/core/engine/protocol.py +1153 -0
- opentrons/protocol_api/core/engine/robot.py +139 -0
- opentrons/protocol_api/core/engine/stringify.py +74 -0
- opentrons/protocol_api/core/engine/transfer_components_executor.py +1006 -0
- opentrons/protocol_api/core/engine/well.py +241 -0
- opentrons/protocol_api/core/instrument.py +459 -0
- opentrons/protocol_api/core/labware.py +151 -0
- opentrons/protocol_api/core/legacy/__init__.py +11 -0
- opentrons/protocol_api/core/legacy/_labware_geometry.py +37 -0
- opentrons/protocol_api/core/legacy/deck.py +369 -0
- opentrons/protocol_api/core/legacy/labware_offset_provider.py +108 -0
- opentrons/protocol_api/core/legacy/legacy_instrument_core.py +709 -0
- opentrons/protocol_api/core/legacy/legacy_labware_core.py +235 -0
- opentrons/protocol_api/core/legacy/legacy_module_core.py +592 -0
- opentrons/protocol_api/core/legacy/legacy_protocol_core.py +612 -0
- opentrons/protocol_api/core/legacy/legacy_well_core.py +162 -0
- opentrons/protocol_api/core/legacy/load_info.py +67 -0
- opentrons/protocol_api/core/legacy/module_geometry.py +547 -0
- opentrons/protocol_api/core/legacy/well_geometry.py +148 -0
- opentrons/protocol_api/core/legacy_simulator/__init__.py +16 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +624 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +85 -0
- opentrons/protocol_api/core/module.py +484 -0
- opentrons/protocol_api/core/protocol.py +311 -0
- opentrons/protocol_api/core/robot.py +51 -0
- opentrons/protocol_api/core/well.py +116 -0
- opentrons/protocol_api/core/well_grid.py +45 -0
- opentrons/protocol_api/create_protocol_context.py +177 -0
- opentrons/protocol_api/deck.py +223 -0
- opentrons/protocol_api/disposal_locations.py +244 -0
- opentrons/protocol_api/instrument_context.py +3272 -0
- opentrons/protocol_api/labware.py +1579 -0
- opentrons/protocol_api/module_contexts.py +1447 -0
- opentrons/protocol_api/module_validation_and_errors.py +61 -0
- opentrons/protocol_api/protocol_context.py +1688 -0
- opentrons/protocol_api/robot_context.py +303 -0
- opentrons/protocol_api/validation.py +761 -0
- opentrons/protocol_engine/__init__.py +155 -0
- opentrons/protocol_engine/actions/__init__.py +65 -0
- opentrons/protocol_engine/actions/action_dispatcher.py +30 -0
- opentrons/protocol_engine/actions/action_handler.py +13 -0
- opentrons/protocol_engine/actions/actions.py +302 -0
- opentrons/protocol_engine/actions/get_state_update.py +38 -0
- opentrons/protocol_engine/clients/__init__.py +5 -0
- opentrons/protocol_engine/clients/sync_client.py +174 -0
- opentrons/protocol_engine/clients/transports.py +197 -0
- opentrons/protocol_engine/commands/__init__.py +757 -0
- opentrons/protocol_engine/commands/absorbance_reader/__init__.py +61 -0
- opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +154 -0
- opentrons/protocol_engine/commands/absorbance_reader/common.py +6 -0
- opentrons/protocol_engine/commands/absorbance_reader/initialize.py +151 -0
- opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +154 -0
- opentrons/protocol_engine/commands/absorbance_reader/read.py +226 -0
- opentrons/protocol_engine/commands/air_gap_in_place.py +162 -0
- opentrons/protocol_engine/commands/aspirate.py +244 -0
- opentrons/protocol_engine/commands/aspirate_in_place.py +184 -0
- opentrons/protocol_engine/commands/aspirate_while_tracking.py +211 -0
- opentrons/protocol_engine/commands/blow_out.py +146 -0
- opentrons/protocol_engine/commands/blow_out_in_place.py +119 -0
- opentrons/protocol_engine/commands/calibration/__init__.py +60 -0
- opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +166 -0
- opentrons/protocol_engine/commands/calibration/calibrate_module.py +117 -0
- opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +96 -0
- opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +156 -0
- opentrons/protocol_engine/commands/command.py +308 -0
- opentrons/protocol_engine/commands/command_unions.py +974 -0
- opentrons/protocol_engine/commands/comment.py +57 -0
- opentrons/protocol_engine/commands/configure_for_volume.py +108 -0
- opentrons/protocol_engine/commands/configure_nozzle_layout.py +115 -0
- opentrons/protocol_engine/commands/custom.py +67 -0
- opentrons/protocol_engine/commands/dispense.py +194 -0
- opentrons/protocol_engine/commands/dispense_in_place.py +179 -0
- opentrons/protocol_engine/commands/dispense_while_tracking.py +204 -0
- opentrons/protocol_engine/commands/drop_tip.py +232 -0
- opentrons/protocol_engine/commands/drop_tip_in_place.py +205 -0
- opentrons/protocol_engine/commands/flex_stacker/__init__.py +64 -0
- opentrons/protocol_engine/commands/flex_stacker/common.py +900 -0
- opentrons/protocol_engine/commands/flex_stacker/empty.py +293 -0
- opentrons/protocol_engine/commands/flex_stacker/fill.py +281 -0
- opentrons/protocol_engine/commands/flex_stacker/retrieve.py +339 -0
- opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +328 -0
- opentrons/protocol_engine/commands/flex_stacker/store.py +339 -0
- opentrons/protocol_engine/commands/generate_command_schema.py +61 -0
- opentrons/protocol_engine/commands/get_next_tip.py +134 -0
- opentrons/protocol_engine/commands/get_tip_presence.py +87 -0
- opentrons/protocol_engine/commands/hash_command_params.py +38 -0
- opentrons/protocol_engine/commands/heater_shaker/__init__.py +102 -0
- opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +83 -0
- opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +82 -0
- opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +84 -0
- opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +110 -0
- opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +125 -0
- opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +90 -0
- opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +102 -0
- opentrons/protocol_engine/commands/home.py +100 -0
- opentrons/protocol_engine/commands/identify_module.py +86 -0
- opentrons/protocol_engine/commands/labware_handling_common.py +29 -0
- opentrons/protocol_engine/commands/liquid_probe.py +464 -0
- opentrons/protocol_engine/commands/load_labware.py +210 -0
- opentrons/protocol_engine/commands/load_lid.py +154 -0
- opentrons/protocol_engine/commands/load_lid_stack.py +272 -0
- opentrons/protocol_engine/commands/load_liquid.py +95 -0
- opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
- opentrons/protocol_engine/commands/load_module.py +223 -0
- opentrons/protocol_engine/commands/load_pipette.py +167 -0
- opentrons/protocol_engine/commands/magnetic_module/__init__.py +32 -0
- opentrons/protocol_engine/commands/magnetic_module/disengage.py +97 -0
- opentrons/protocol_engine/commands/magnetic_module/engage.py +119 -0
- opentrons/protocol_engine/commands/move_labware.py +546 -0
- opentrons/protocol_engine/commands/move_relative.py +102 -0
- opentrons/protocol_engine/commands/move_to_addressable_area.py +176 -0
- opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +198 -0
- opentrons/protocol_engine/commands/move_to_coordinates.py +107 -0
- opentrons/protocol_engine/commands/move_to_well.py +119 -0
- opentrons/protocol_engine/commands/movement_common.py +338 -0
- opentrons/protocol_engine/commands/pick_up_tip.py +241 -0
- opentrons/protocol_engine/commands/pipetting_common.py +443 -0
- opentrons/protocol_engine/commands/prepare_to_aspirate.py +121 -0
- opentrons/protocol_engine/commands/pressure_dispense.py +155 -0
- opentrons/protocol_engine/commands/reload_labware.py +90 -0
- opentrons/protocol_engine/commands/retract_axis.py +75 -0
- opentrons/protocol_engine/commands/robot/__init__.py +70 -0
- opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +96 -0
- opentrons/protocol_engine/commands/robot/common.py +18 -0
- opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
- opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
- opentrons/protocol_engine/commands/robot/move_to.py +94 -0
- opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +86 -0
- opentrons/protocol_engine/commands/save_position.py +109 -0
- opentrons/protocol_engine/commands/seal_pipette_to_tip.py +353 -0
- opentrons/protocol_engine/commands/set_rail_lights.py +67 -0
- opentrons/protocol_engine/commands/set_status_bar.py +89 -0
- opentrons/protocol_engine/commands/temperature_module/__init__.py +46 -0
- opentrons/protocol_engine/commands/temperature_module/deactivate.py +86 -0
- opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +97 -0
- opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +104 -0
- opentrons/protocol_engine/commands/thermocycler/__init__.py +152 -0
- opentrons/protocol_engine/commands/thermocycler/close_lid.py +87 -0
- opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +80 -0
- opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +80 -0
- opentrons/protocol_engine/commands/thermocycler/open_lid.py +87 -0
- opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +171 -0
- opentrons/protocol_engine/commands/thermocycler/run_profile.py +124 -0
- opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +140 -0
- opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +100 -0
- opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +93 -0
- opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +89 -0
- opentrons/protocol_engine/commands/touch_tip.py +189 -0
- opentrons/protocol_engine/commands/unsafe/__init__.py +161 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +100 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +121 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +82 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +208 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_close_latch.py +94 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_manual_retrieve.py +295 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_open_latch.py +91 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_prepare_shuttle.py +136 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +77 -0
- opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +90 -0
- opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +153 -0
- opentrons/protocol_engine/commands/verify_tip_presence.py +100 -0
- opentrons/protocol_engine/commands/wait_for_duration.py +76 -0
- opentrons/protocol_engine/commands/wait_for_resume.py +75 -0
- opentrons/protocol_engine/create_protocol_engine.py +193 -0
- opentrons/protocol_engine/engine_support.py +28 -0
- opentrons/protocol_engine/error_recovery_policy.py +81 -0
- opentrons/protocol_engine/errors/__init__.py +191 -0
- opentrons/protocol_engine/errors/error_occurrence.py +182 -0
- opentrons/protocol_engine/errors/exceptions.py +1308 -0
- opentrons/protocol_engine/execution/__init__.py +50 -0
- opentrons/protocol_engine/execution/command_executor.py +216 -0
- opentrons/protocol_engine/execution/create_queue_worker.py +102 -0
- opentrons/protocol_engine/execution/door_watcher.py +119 -0
- opentrons/protocol_engine/execution/equipment.py +819 -0
- opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +101 -0
- opentrons/protocol_engine/execution/gantry_mover.py +686 -0
- opentrons/protocol_engine/execution/hardware_stopper.py +147 -0
- opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +207 -0
- opentrons/protocol_engine/execution/labware_movement.py +297 -0
- opentrons/protocol_engine/execution/movement.py +350 -0
- opentrons/protocol_engine/execution/pipetting.py +607 -0
- opentrons/protocol_engine/execution/queue_worker.py +86 -0
- opentrons/protocol_engine/execution/rail_lights.py +25 -0
- opentrons/protocol_engine/execution/run_control.py +33 -0
- opentrons/protocol_engine/execution/status_bar.py +34 -0
- opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +188 -0
- opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +81 -0
- opentrons/protocol_engine/execution/tip_handler.py +550 -0
- opentrons/protocol_engine/labware_offset_standardization.py +194 -0
- opentrons/protocol_engine/notes/__init__.py +17 -0
- opentrons/protocol_engine/notes/notes.py +59 -0
- opentrons/protocol_engine/plugins.py +104 -0
- opentrons/protocol_engine/protocol_engine.py +683 -0
- opentrons/protocol_engine/resources/__init__.py +26 -0
- opentrons/protocol_engine/resources/deck_configuration_provider.py +232 -0
- opentrons/protocol_engine/resources/deck_data_provider.py +94 -0
- opentrons/protocol_engine/resources/file_provider.py +161 -0
- opentrons/protocol_engine/resources/fixture_validation.py +68 -0
- opentrons/protocol_engine/resources/labware_data_provider.py +106 -0
- opentrons/protocol_engine/resources/labware_validation.py +73 -0
- opentrons/protocol_engine/resources/model_utils.py +32 -0
- opentrons/protocol_engine/resources/module_data_provider.py +44 -0
- opentrons/protocol_engine/resources/ot3_validation.py +21 -0
- opentrons/protocol_engine/resources/pipette_data_provider.py +379 -0
- opentrons/protocol_engine/slot_standardization.py +128 -0
- opentrons/protocol_engine/state/__init__.py +1 -0
- opentrons/protocol_engine/state/_abstract_store.py +27 -0
- opentrons/protocol_engine/state/_axis_aligned_bounding_box.py +50 -0
- opentrons/protocol_engine/state/_labware_origin_math.py +636 -0
- opentrons/protocol_engine/state/_move_types.py +83 -0
- opentrons/protocol_engine/state/_well_math.py +193 -0
- opentrons/protocol_engine/state/addressable_areas.py +699 -0
- opentrons/protocol_engine/state/command_history.py +309 -0
- opentrons/protocol_engine/state/commands.py +1164 -0
- opentrons/protocol_engine/state/config.py +39 -0
- opentrons/protocol_engine/state/files.py +57 -0
- opentrons/protocol_engine/state/fluid_stack.py +138 -0
- opentrons/protocol_engine/state/geometry.py +2408 -0
- opentrons/protocol_engine/state/inner_well_math_utils.py +548 -0
- opentrons/protocol_engine/state/labware.py +1432 -0
- opentrons/protocol_engine/state/liquid_classes.py +82 -0
- opentrons/protocol_engine/state/liquids.py +73 -0
- opentrons/protocol_engine/state/module_substates/__init__.py +45 -0
- opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +35 -0
- opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +112 -0
- opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +115 -0
- opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +17 -0
- opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +65 -0
- opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +67 -0
- opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +163 -0
- opentrons/protocol_engine/state/modules.py +1515 -0
- opentrons/protocol_engine/state/motion.py +373 -0
- opentrons/protocol_engine/state/pipettes.py +905 -0
- opentrons/protocol_engine/state/state.py +421 -0
- opentrons/protocol_engine/state/state_summary.py +36 -0
- opentrons/protocol_engine/state/tips.py +420 -0
- opentrons/protocol_engine/state/update_types.py +904 -0
- opentrons/protocol_engine/state/wells.py +290 -0
- opentrons/protocol_engine/types/__init__.py +310 -0
- opentrons/protocol_engine/types/automatic_tip_selection.py +39 -0
- opentrons/protocol_engine/types/command_annotations.py +53 -0
- opentrons/protocol_engine/types/deck_configuration.py +81 -0
- opentrons/protocol_engine/types/execution.py +96 -0
- opentrons/protocol_engine/types/hardware_passthrough.py +25 -0
- opentrons/protocol_engine/types/instrument.py +47 -0
- opentrons/protocol_engine/types/instrument_sensors.py +47 -0
- opentrons/protocol_engine/types/labware.py +131 -0
- opentrons/protocol_engine/types/labware_movement.py +22 -0
- opentrons/protocol_engine/types/labware_offset_location.py +111 -0
- opentrons/protocol_engine/types/labware_offset_vector.py +16 -0
- opentrons/protocol_engine/types/liquid.py +40 -0
- opentrons/protocol_engine/types/liquid_class.py +59 -0
- opentrons/protocol_engine/types/liquid_handling.py +13 -0
- opentrons/protocol_engine/types/liquid_level_detection.py +191 -0
- opentrons/protocol_engine/types/location.py +194 -0
- opentrons/protocol_engine/types/module.py +310 -0
- opentrons/protocol_engine/types/partial_tip_configuration.py +76 -0
- opentrons/protocol_engine/types/run_time_parameters.py +133 -0
- opentrons/protocol_engine/types/tip.py +18 -0
- opentrons/protocol_engine/types/util.py +21 -0
- opentrons/protocol_engine/types/well_position.py +124 -0
- opentrons/protocol_reader/__init__.py +37 -0
- opentrons/protocol_reader/extract_labware_definitions.py +66 -0
- opentrons/protocol_reader/file_format_validator.py +152 -0
- opentrons/protocol_reader/file_hasher.py +27 -0
- opentrons/protocol_reader/file_identifier.py +284 -0
- opentrons/protocol_reader/file_reader_writer.py +90 -0
- opentrons/protocol_reader/input_file.py +16 -0
- opentrons/protocol_reader/protocol_files_invalid_error.py +6 -0
- opentrons/protocol_reader/protocol_reader.py +188 -0
- opentrons/protocol_reader/protocol_source.py +124 -0
- opentrons/protocol_reader/role_analyzer.py +86 -0
- opentrons/protocol_runner/__init__.py +26 -0
- opentrons/protocol_runner/create_simulating_orchestrator.py +118 -0
- opentrons/protocol_runner/json_file_reader.py +55 -0
- opentrons/protocol_runner/json_translator.py +314 -0
- opentrons/protocol_runner/legacy_command_mapper.py +852 -0
- opentrons/protocol_runner/legacy_context_plugin.py +116 -0
- opentrons/protocol_runner/protocol_runner.py +530 -0
- opentrons/protocol_runner/python_protocol_wrappers.py +179 -0
- opentrons/protocol_runner/run_orchestrator.py +496 -0
- opentrons/protocol_runner/task_queue.py +95 -0
- opentrons/protocols/__init__.py +6 -0
- opentrons/protocols/advanced_control/__init__.py +0 -0
- opentrons/protocols/advanced_control/common.py +38 -0
- opentrons/protocols/advanced_control/mix.py +60 -0
- opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
- opentrons/protocols/advanced_control/transfers/common.py +180 -0
- opentrons/protocols/advanced_control/transfers/transfer.py +972 -0
- opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +231 -0
- opentrons/protocols/api_support/__init__.py +0 -0
- opentrons/protocols/api_support/constants.py +8 -0
- opentrons/protocols/api_support/deck_type.py +110 -0
- opentrons/protocols/api_support/definitions.py +18 -0
- opentrons/protocols/api_support/instrument.py +151 -0
- opentrons/protocols/api_support/labware_like.py +233 -0
- opentrons/protocols/api_support/tip_tracker.py +175 -0
- opentrons/protocols/api_support/types.py +32 -0
- opentrons/protocols/api_support/util.py +403 -0
- opentrons/protocols/bundle.py +89 -0
- opentrons/protocols/duration/__init__.py +4 -0
- opentrons/protocols/duration/errors.py +5 -0
- opentrons/protocols/duration/estimator.py +628 -0
- opentrons/protocols/execution/__init__.py +0 -0
- opentrons/protocols/execution/dev_types.py +181 -0
- opentrons/protocols/execution/errors.py +40 -0
- opentrons/protocols/execution/execute.py +84 -0
- opentrons/protocols/execution/execute_json_v3.py +275 -0
- opentrons/protocols/execution/execute_json_v4.py +359 -0
- opentrons/protocols/execution/execute_json_v5.py +28 -0
- opentrons/protocols/execution/execute_python.py +169 -0
- opentrons/protocols/execution/json_dispatchers.py +87 -0
- opentrons/protocols/execution/types.py +7 -0
- opentrons/protocols/geometry/__init__.py +0 -0
- opentrons/protocols/geometry/planning.py +297 -0
- opentrons/protocols/labware.py +312 -0
- opentrons/protocols/models/__init__.py +0 -0
- opentrons/protocols/models/json_protocol.py +679 -0
- opentrons/protocols/parameters/__init__.py +0 -0
- opentrons/protocols/parameters/csv_parameter_definition.py +77 -0
- opentrons/protocols/parameters/csv_parameter_interface.py +96 -0
- opentrons/protocols/parameters/exceptions.py +34 -0
- opentrons/protocols/parameters/parameter_definition.py +272 -0
- opentrons/protocols/parameters/types.py +17 -0
- opentrons/protocols/parameters/validation.py +267 -0
- opentrons/protocols/parse.py +671 -0
- opentrons/protocols/types.py +159 -0
- opentrons/py.typed +0 -0
- opentrons/resources/scripts/lpc21isp +0 -0
- opentrons/resources/smoothie-edge-8414642.hex +23010 -0
- opentrons/simulate.py +1065 -0
- opentrons/system/__init__.py +6 -0
- opentrons/system/camera.py +51 -0
- opentrons/system/log_control.py +59 -0
- opentrons/system/nmcli.py +856 -0
- opentrons/system/resin.py +24 -0
- opentrons/system/smoothie_update.py +15 -0
- opentrons/system/wifi.py +204 -0
- opentrons/tools/__init__.py +0 -0
- opentrons/tools/args_handler.py +22 -0
- opentrons/tools/write_pipette_memory.py +157 -0
- opentrons/types.py +618 -0
- opentrons/util/__init__.py +1 -0
- opentrons/util/async_helpers.py +166 -0
- opentrons/util/broker.py +84 -0
- opentrons/util/change_notifier.py +47 -0
- opentrons/util/entrypoint_util.py +278 -0
- opentrons/util/get_union_elements.py +26 -0
- opentrons/util/helpers.py +6 -0
- opentrons/util/linal.py +178 -0
- opentrons/util/logging_config.py +265 -0
- opentrons/util/logging_queue_handler.py +61 -0
- opentrons/util/performance_helpers.py +157 -0
- opentrons-8.6.0.dist-info/METADATA +37 -0
- opentrons-8.6.0.dist-info/RECORD +601 -0
- opentrons-8.6.0.dist-info/WHEEL +4 -0
- opentrons-8.6.0.dist-info/entry_points.txt +3 -0
- 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
|