opentrons 8.6.0a1__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 +501 -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 +183 -0
- opentrons/drivers/asyncio/communication/errors.py +88 -0
- opentrons/drivers/asyncio/communication/serial_connection.py +552 -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/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 +215 -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 +1115 -0
- opentrons/motion_planning/__init__.py +32 -0
- opentrons/motion_planning/adjacent_slots_getters.py +168 -0
- opentrons/motion_planning/deck_conflict.py +396 -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 +348 -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 +1025 -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 +990 -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 +3212 -0
- opentrons/protocol_api/labware.py +1579 -0
- opentrons/protocol_api/module_contexts.py +1425 -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 +326 -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 +349 -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 +58 -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 +1158 -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 +2359 -0
- opentrons/protocol_engine/state/inner_well_math_utils.py +548 -0
- opentrons/protocol_engine/state/labware.py +1459 -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 +1500 -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 +308 -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 +303 -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 +848 -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.0a1.dist-info/METADATA +37 -0
- opentrons-8.6.0a1.dist-info/RECORD +600 -0
- opentrons-8.6.0a1.dist-info/WHEEL +4 -0
- opentrons-8.6.0a1.dist-info/entry_points.txt +3 -0
- opentrons-8.6.0a1.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"""Heater-Shaker Module protocol commands."""
|
|
2
|
+
|
|
3
|
+
from .wait_for_temperature import (
|
|
4
|
+
WaitForTemperature,
|
|
5
|
+
WaitForTemperatureCreate,
|
|
6
|
+
WaitForTemperatureParams,
|
|
7
|
+
WaitForTemperatureResult,
|
|
8
|
+
WaitForTemperatureCommandType,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
from .set_target_temperature import (
|
|
12
|
+
SetTargetTemperature,
|
|
13
|
+
SetTargetTemperatureCreate,
|
|
14
|
+
SetTargetTemperatureParams,
|
|
15
|
+
SetTargetTemperatureResult,
|
|
16
|
+
SetTargetTemperatureCommandType,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from .deactivate_heater import (
|
|
20
|
+
DeactivateHeater,
|
|
21
|
+
DeactivateHeaterCreate,
|
|
22
|
+
DeactivateHeaterParams,
|
|
23
|
+
DeactivateHeaterResult,
|
|
24
|
+
DeactivateHeaterCommandType,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
from .set_and_wait_for_shake_speed import (
|
|
28
|
+
SetAndWaitForShakeSpeed,
|
|
29
|
+
SetAndWaitForShakeSpeedCreate,
|
|
30
|
+
SetAndWaitForShakeSpeedParams,
|
|
31
|
+
SetAndWaitForShakeSpeedResult,
|
|
32
|
+
SetAndWaitForShakeSpeedCommandType,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
from .deactivate_shaker import (
|
|
36
|
+
DeactivateShaker,
|
|
37
|
+
DeactivateShakerCreate,
|
|
38
|
+
DeactivateShakerParams,
|
|
39
|
+
DeactivateShakerResult,
|
|
40
|
+
DeactivateShakerCommandType,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
from .open_labware_latch import (
|
|
44
|
+
OpenLabwareLatch,
|
|
45
|
+
OpenLabwareLatchCreate,
|
|
46
|
+
OpenLabwareLatchParams,
|
|
47
|
+
OpenLabwareLatchResult,
|
|
48
|
+
OpenLabwareLatchCommandType,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
from .close_labware_latch import (
|
|
52
|
+
CloseLabwareLatch,
|
|
53
|
+
CloseLabwareLatchCreate,
|
|
54
|
+
CloseLabwareLatchParams,
|
|
55
|
+
CloseLabwareLatchResult,
|
|
56
|
+
CloseLabwareLatchCommandType,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
__all__ = [
|
|
60
|
+
# heaterShaker/waitForTemperature
|
|
61
|
+
"WaitForTemperature",
|
|
62
|
+
"WaitForTemperatureCreate",
|
|
63
|
+
"WaitForTemperatureParams",
|
|
64
|
+
"WaitForTemperatureResult",
|
|
65
|
+
"WaitForTemperatureCommandType",
|
|
66
|
+
# heaterShaker/setTargetTemperature
|
|
67
|
+
"SetTargetTemperature",
|
|
68
|
+
"SetTargetTemperatureCreate",
|
|
69
|
+
"SetTargetTemperatureParams",
|
|
70
|
+
"SetTargetTemperatureResult",
|
|
71
|
+
"SetTargetTemperatureCommandType",
|
|
72
|
+
# heaterShaker/deactivateHeater
|
|
73
|
+
"DeactivateHeater",
|
|
74
|
+
"DeactivateHeaterCreate",
|
|
75
|
+
"DeactivateHeaterParams",
|
|
76
|
+
"DeactivateHeaterResult",
|
|
77
|
+
"DeactivateHeaterCommandType",
|
|
78
|
+
# heaterShaker/setAndWaitForShakeSpeed
|
|
79
|
+
"SetAndWaitForShakeSpeed",
|
|
80
|
+
"SetAndWaitForShakeSpeedCreate",
|
|
81
|
+
"SetAndWaitForShakeSpeedParams",
|
|
82
|
+
"SetAndWaitForShakeSpeedResult",
|
|
83
|
+
"SetAndWaitForShakeSpeedCommandType",
|
|
84
|
+
# heaterShaker/deactivateShaker
|
|
85
|
+
"DeactivateShaker",
|
|
86
|
+
"DeactivateShakerCreate",
|
|
87
|
+
"DeactivateShakerParams",
|
|
88
|
+
"DeactivateShakerResult",
|
|
89
|
+
"DeactivateShakerCommandType",
|
|
90
|
+
# heaterShaker/openLabwareLatch
|
|
91
|
+
"OpenLabwareLatch",
|
|
92
|
+
"OpenLabwareLatchCreate",
|
|
93
|
+
"OpenLabwareLatchParams",
|
|
94
|
+
"OpenLabwareLatchResult",
|
|
95
|
+
"OpenLabwareLatchCommandType",
|
|
96
|
+
# heaterShaker/closeLabwareLatch
|
|
97
|
+
"CloseLabwareLatch",
|
|
98
|
+
"CloseLabwareLatchCreate",
|
|
99
|
+
"CloseLabwareLatchParams",
|
|
100
|
+
"CloseLabwareLatchResult",
|
|
101
|
+
"CloseLabwareLatchCommandType",
|
|
102
|
+
]
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"""Command models to close the Heater-Shaker Module's labware latch."""
|
|
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
|
+
CloseLabwareLatchCommandType = Literal["heaterShaker/closeLabwareLatch"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class CloseLabwareLatchParams(BaseModel):
|
|
20
|
+
"""Input parameters to close a Heater-Shaker Module's labware latch."""
|
|
21
|
+
|
|
22
|
+
moduleId: str = Field(..., description="Unique ID of the Heater-Shaker Module.")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class CloseLabwareLatchResult(BaseModel):
|
|
26
|
+
"""Result data from closing a Heater-Shaker's labware latch."""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class CloseLabwareLatchImpl(
|
|
30
|
+
AbstractCommandImpl[CloseLabwareLatchParams, SuccessData[CloseLabwareLatchResult]]
|
|
31
|
+
):
|
|
32
|
+
"""Execution implementation of a Heater-Shaker's close labware latch 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: CloseLabwareLatchParams
|
|
45
|
+
) -> SuccessData[CloseLabwareLatchResult]:
|
|
46
|
+
"""Close a Heater-Shaker's labware latch."""
|
|
47
|
+
# Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
|
|
48
|
+
hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate(
|
|
49
|
+
module_id=params.moduleId
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
# Allow propagation of ModuleNotAttachedError.
|
|
53
|
+
hs_hardware_module = self._equipment.get_module_hardware_api(
|
|
54
|
+
hs_module_substate.module_id
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
if hs_hardware_module is not None:
|
|
58
|
+
await hs_hardware_module.close_labware_latch()
|
|
59
|
+
|
|
60
|
+
return SuccessData(
|
|
61
|
+
public=CloseLabwareLatchResult(),
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class CloseLabwareLatch(
|
|
66
|
+
BaseCommand[CloseLabwareLatchParams, CloseLabwareLatchResult, ErrorOccurrence]
|
|
67
|
+
):
|
|
68
|
+
"""A command to close a Heater-Shaker's latch."""
|
|
69
|
+
|
|
70
|
+
commandType: CloseLabwareLatchCommandType = "heaterShaker/closeLabwareLatch"
|
|
71
|
+
params: CloseLabwareLatchParams
|
|
72
|
+
result: Optional[CloseLabwareLatchResult] = None
|
|
73
|
+
|
|
74
|
+
_ImplementationCls: Type[CloseLabwareLatchImpl] = CloseLabwareLatchImpl
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class CloseLabwareLatchCreate(BaseCommandCreate[CloseLabwareLatchParams]):
|
|
78
|
+
"""A request to create a Heater-Shaker's close latch command."""
|
|
79
|
+
|
|
80
|
+
commandType: CloseLabwareLatchCommandType = "heaterShaker/closeLabwareLatch"
|
|
81
|
+
params: CloseLabwareLatchParams
|
|
82
|
+
|
|
83
|
+
_CommandCls: Type[CloseLabwareLatch] = CloseLabwareLatch
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"""Command models to stop heating Heater-Shaker 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
|
+
|
|
16
|
+
DeactivateHeaterCommandType = Literal["heaterShaker/deactivateHeater"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class DeactivateHeaterParams(BaseModel):
|
|
20
|
+
"""Input parameters to unset a Heater-Shaker's target temperature."""
|
|
21
|
+
|
|
22
|
+
moduleId: str = Field(..., description="Unique ID of the Heater-Shaker Module.")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class DeactivateHeaterResult(BaseModel):
|
|
26
|
+
"""Result data from unsetting a Heater-Shaker's target temperature."""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class DeactivateHeaterImpl(
|
|
30
|
+
AbstractCommandImpl[DeactivateHeaterParams, SuccessData[DeactivateHeaterResult]]
|
|
31
|
+
):
|
|
32
|
+
"""Execution implementation of a Heater-Shaker's deactivate heater 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: DeactivateHeaterParams
|
|
45
|
+
) -> SuccessData[DeactivateHeaterResult]:
|
|
46
|
+
"""Unset a Heater-Shaker's target temperature."""
|
|
47
|
+
hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate(
|
|
48
|
+
module_id=params.moduleId
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Allow propagation of ModuleNotAttachedError.
|
|
52
|
+
hs_hardware_module = self._equipment.get_module_hardware_api(
|
|
53
|
+
hs_module_substate.module_id
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
if hs_hardware_module is not None:
|
|
57
|
+
await hs_hardware_module.deactivate_heater()
|
|
58
|
+
|
|
59
|
+
return SuccessData(
|
|
60
|
+
public=DeactivateHeaterResult(),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class DeactivateHeater(
|
|
65
|
+
BaseCommand[DeactivateHeaterParams, DeactivateHeaterResult, ErrorOccurrence]
|
|
66
|
+
):
|
|
67
|
+
"""A command to unset a Heater-Shaker's target temperature."""
|
|
68
|
+
|
|
69
|
+
commandType: DeactivateHeaterCommandType = "heaterShaker/deactivateHeater"
|
|
70
|
+
params: DeactivateHeaterParams
|
|
71
|
+
result: Optional[DeactivateHeaterResult] = None
|
|
72
|
+
|
|
73
|
+
_ImplementationCls: Type[DeactivateHeaterImpl] = DeactivateHeaterImpl
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class DeactivateHeaterCreate(BaseCommandCreate[DeactivateHeaterParams]):
|
|
77
|
+
"""A request to create a Heater-Shaker's deactivate heater command."""
|
|
78
|
+
|
|
79
|
+
commandType: DeactivateHeaterCommandType = "heaterShaker/deactivateHeater"
|
|
80
|
+
params: DeactivateHeaterParams
|
|
81
|
+
|
|
82
|
+
_CommandCls: Type[DeactivateHeater] = DeactivateHeater
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"""Command models to deactivate shaker for the Heater-Shaker 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
|
+
DeactivateShakerCommandType = Literal["heaterShaker/deactivateShaker"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class DeactivateShakerParams(BaseModel):
|
|
19
|
+
"""Input parameters to deactivate shaker for a Heater-Shaker Module."""
|
|
20
|
+
|
|
21
|
+
moduleId: str = Field(..., description="Unique ID of the Heater-Shaker Module.")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class DeactivateShakerResult(BaseModel):
|
|
25
|
+
"""Result data from deactivating shaker for a Heater-Shaker."""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class DeactivateShakerImpl(
|
|
29
|
+
AbstractCommandImpl[DeactivateShakerParams, SuccessData[DeactivateShakerResult]]
|
|
30
|
+
):
|
|
31
|
+
"""Execution implementation of a Heater-Shaker's deactivate shaker command."""
|
|
32
|
+
|
|
33
|
+
def __init__(
|
|
34
|
+
self,
|
|
35
|
+
state_view: StateView,
|
|
36
|
+
equipment: EquipmentHandler,
|
|
37
|
+
**unused_dependencies: object,
|
|
38
|
+
) -> None:
|
|
39
|
+
self._state_view = state_view
|
|
40
|
+
self._equipment = equipment
|
|
41
|
+
|
|
42
|
+
async def execute(
|
|
43
|
+
self, params: DeactivateShakerParams
|
|
44
|
+
) -> SuccessData[DeactivateShakerResult]:
|
|
45
|
+
"""Deactivate shaker for a Heater-Shaker."""
|
|
46
|
+
# Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
|
|
47
|
+
hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate(
|
|
48
|
+
module_id=params.moduleId
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
hs_module_substate.raise_if_labware_latch_not_closed()
|
|
52
|
+
|
|
53
|
+
# Allow propagation of ModuleNotAttachedError.
|
|
54
|
+
hs_hardware_module = self._equipment.get_module_hardware_api(
|
|
55
|
+
hs_module_substate.module_id
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
if hs_hardware_module is not None:
|
|
59
|
+
await hs_hardware_module.deactivate_shaker()
|
|
60
|
+
|
|
61
|
+
return SuccessData(
|
|
62
|
+
public=DeactivateShakerResult(),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class DeactivateShaker(
|
|
67
|
+
BaseCommand[DeactivateShakerParams, DeactivateShakerResult, ErrorOccurrence]
|
|
68
|
+
):
|
|
69
|
+
"""A command to deactivate shaker for a Heater-Shaker."""
|
|
70
|
+
|
|
71
|
+
commandType: DeactivateShakerCommandType = "heaterShaker/deactivateShaker"
|
|
72
|
+
params: DeactivateShakerParams
|
|
73
|
+
result: Optional[DeactivateShakerResult] = None
|
|
74
|
+
|
|
75
|
+
_ImplementationCls: Type[DeactivateShakerImpl] = DeactivateShakerImpl
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class DeactivateShakerCreate(BaseCommandCreate[DeactivateShakerParams]):
|
|
79
|
+
"""A request to create a Heater-Shaker's deactivate shaker command."""
|
|
80
|
+
|
|
81
|
+
commandType: DeactivateShakerCommandType = "heaterShaker/deactivateShaker"
|
|
82
|
+
params: DeactivateShakerParams
|
|
83
|
+
|
|
84
|
+
_CommandCls: Type[DeactivateShaker] = DeactivateShaker
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"""Command models to open the Heater-Shaker Module's labware latch."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Optional, TYPE_CHECKING
|
|
4
|
+
from typing_extensions import Literal, Type
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
8
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
9
|
+
from ...state import update_types
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from opentrons.protocol_engine.state.state import StateView
|
|
13
|
+
from opentrons.protocol_engine.execution import EquipmentHandler, MovementHandler
|
|
14
|
+
|
|
15
|
+
OpenLabwareLatchCommandType = Literal["heaterShaker/openLabwareLatch"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class OpenLabwareLatchParams(BaseModel):
|
|
19
|
+
"""Input parameters to open a Heater-Shaker Module's labware latch."""
|
|
20
|
+
|
|
21
|
+
moduleId: str = Field(..., description="Unique ID of the Heater-Shaker Module.")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class OpenLabwareLatchResult(BaseModel):
|
|
25
|
+
"""Result data from opening a Heater-Shaker's labware latch."""
|
|
26
|
+
|
|
27
|
+
pipetteRetracted: bool = Field(
|
|
28
|
+
...,
|
|
29
|
+
description=(
|
|
30
|
+
"Whether this command automatically retracted the pipettes"
|
|
31
|
+
" before opening the latch, to avoid a potential collision."
|
|
32
|
+
),
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class OpenLabwareLatchImpl(
|
|
37
|
+
AbstractCommandImpl[OpenLabwareLatchParams, SuccessData[OpenLabwareLatchResult]]
|
|
38
|
+
):
|
|
39
|
+
"""Execution implementation of a Heater-Shaker's open latch labware command."""
|
|
40
|
+
|
|
41
|
+
def __init__(
|
|
42
|
+
self,
|
|
43
|
+
state_view: StateView,
|
|
44
|
+
equipment: EquipmentHandler,
|
|
45
|
+
movement: MovementHandler,
|
|
46
|
+
**unused_dependencies: object,
|
|
47
|
+
) -> None:
|
|
48
|
+
self._state_view = state_view
|
|
49
|
+
self._equipment = equipment
|
|
50
|
+
self._movement = movement
|
|
51
|
+
|
|
52
|
+
async def execute(
|
|
53
|
+
self, params: OpenLabwareLatchParams
|
|
54
|
+
) -> SuccessData[OpenLabwareLatchResult]:
|
|
55
|
+
"""Open a Heater-Shaker's labware latch."""
|
|
56
|
+
state_update = update_types.StateUpdate()
|
|
57
|
+
|
|
58
|
+
# Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
|
|
59
|
+
hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate(
|
|
60
|
+
module_id=params.moduleId
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
hs_module_substate.raise_if_shaking()
|
|
64
|
+
|
|
65
|
+
pipette_should_retract = (
|
|
66
|
+
self._state_view.motion.check_pipette_blocking_hs_latch(
|
|
67
|
+
hs_module_substate.module_id
|
|
68
|
+
)
|
|
69
|
+
)
|
|
70
|
+
if pipette_should_retract:
|
|
71
|
+
# Move pipette away if it is close to the heater-shaker
|
|
72
|
+
# TODO(jbl 2022-07-28) replace home movement with a retract movement
|
|
73
|
+
await self._movement.home(
|
|
74
|
+
axes=self._state_view.motion.get_robot_mount_axes()
|
|
75
|
+
)
|
|
76
|
+
state_update.clear_all_pipette_locations()
|
|
77
|
+
|
|
78
|
+
# Allow propagation of ModuleNotAttachedError.
|
|
79
|
+
hs_hardware_module = self._equipment.get_module_hardware_api(
|
|
80
|
+
hs_module_substate.module_id
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
if hs_hardware_module is not None:
|
|
84
|
+
await hs_hardware_module.open_labware_latch()
|
|
85
|
+
|
|
86
|
+
return SuccessData(
|
|
87
|
+
public=OpenLabwareLatchResult(pipetteRetracted=pipette_should_retract),
|
|
88
|
+
state_update=state_update,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class OpenLabwareLatch(
|
|
93
|
+
BaseCommand[OpenLabwareLatchParams, OpenLabwareLatchResult, ErrorOccurrence]
|
|
94
|
+
):
|
|
95
|
+
"""A command to open a Heater-Shaker's labware latch."""
|
|
96
|
+
|
|
97
|
+
commandType: OpenLabwareLatchCommandType = "heaterShaker/openLabwareLatch"
|
|
98
|
+
params: OpenLabwareLatchParams
|
|
99
|
+
result: Optional[OpenLabwareLatchResult] = None
|
|
100
|
+
|
|
101
|
+
_ImplementationCls: Type[OpenLabwareLatchImpl] = OpenLabwareLatchImpl
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
class OpenLabwareLatchCreate(BaseCommandCreate[OpenLabwareLatchParams]):
|
|
105
|
+
"""A request to create a Heater-Shaker's open labware latch command."""
|
|
106
|
+
|
|
107
|
+
commandType: OpenLabwareLatchCommandType = "heaterShaker/openLabwareLatch"
|
|
108
|
+
params: OpenLabwareLatchParams
|
|
109
|
+
|
|
110
|
+
_CommandCls: Type[OpenLabwareLatch] = OpenLabwareLatch
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"""Command models to set and wait for a shake speed for a Heater-Shaker Module."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import Optional, TYPE_CHECKING
|
|
4
|
+
from typing_extensions import Literal, Type
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
|
|
7
|
+
from ..command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
8
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
9
|
+
from ...state import update_types
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from opentrons.protocol_engine.state.state import StateView
|
|
13
|
+
from opentrons.protocol_engine.execution import EquipmentHandler, MovementHandler
|
|
14
|
+
|
|
15
|
+
SetAndWaitForShakeSpeedCommandType = Literal["heaterShaker/setAndWaitForShakeSpeed"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SetAndWaitForShakeSpeedParams(BaseModel):
|
|
19
|
+
"""Input parameters to set and wait for a shake speed for a Heater-Shaker Module."""
|
|
20
|
+
|
|
21
|
+
moduleId: str = Field(..., description="Unique ID of the Heater-Shaker Module.")
|
|
22
|
+
rpm: float = Field(..., description="Target speed in rotations per minute.")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class SetAndWaitForShakeSpeedResult(BaseModel):
|
|
26
|
+
"""Result data from setting and waiting for a Heater-Shaker's shake speed."""
|
|
27
|
+
|
|
28
|
+
pipetteRetracted: bool = Field(
|
|
29
|
+
...,
|
|
30
|
+
description=(
|
|
31
|
+
"Whether this command automatically retracted the pipettes"
|
|
32
|
+
" before starting the shake, to avoid a potential collision."
|
|
33
|
+
),
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class SetAndWaitForShakeSpeedImpl(
|
|
38
|
+
AbstractCommandImpl[
|
|
39
|
+
SetAndWaitForShakeSpeedParams, SuccessData[SetAndWaitForShakeSpeedResult]
|
|
40
|
+
]
|
|
41
|
+
):
|
|
42
|
+
"""Execution implementation of Heater-Shaker's set and wait shake speed command."""
|
|
43
|
+
|
|
44
|
+
def __init__(
|
|
45
|
+
self,
|
|
46
|
+
state_view: StateView,
|
|
47
|
+
equipment: EquipmentHandler,
|
|
48
|
+
movement: MovementHandler,
|
|
49
|
+
**unused_dependencies: object,
|
|
50
|
+
) -> None:
|
|
51
|
+
self._state_view = state_view
|
|
52
|
+
self._equipment = equipment
|
|
53
|
+
self._movement = movement
|
|
54
|
+
|
|
55
|
+
async def execute(
|
|
56
|
+
self,
|
|
57
|
+
params: SetAndWaitForShakeSpeedParams,
|
|
58
|
+
) -> SuccessData[SetAndWaitForShakeSpeedResult]:
|
|
59
|
+
"""Set and wait for a Heater-Shaker's target shake speed."""
|
|
60
|
+
state_update = update_types.StateUpdate()
|
|
61
|
+
|
|
62
|
+
# Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
|
|
63
|
+
hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate(
|
|
64
|
+
module_id=params.moduleId
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
hs_module_substate.raise_if_labware_latch_not_closed()
|
|
68
|
+
|
|
69
|
+
# Verify speed from hs module view
|
|
70
|
+
validated_speed = hs_module_substate.validate_target_speed(params.rpm)
|
|
71
|
+
|
|
72
|
+
pipette_should_retract = (
|
|
73
|
+
self._state_view.motion.check_pipette_blocking_hs_shaker(
|
|
74
|
+
hs_module_substate.module_id
|
|
75
|
+
)
|
|
76
|
+
)
|
|
77
|
+
if pipette_should_retract:
|
|
78
|
+
# Move pipette away if it is close to the heater-shaker
|
|
79
|
+
# TODO(jbl 2022-07-28) replace home movement with a retract movement
|
|
80
|
+
await self._movement.home(
|
|
81
|
+
axes=self._state_view.motion.get_robot_mount_axes()
|
|
82
|
+
)
|
|
83
|
+
state_update.clear_all_pipette_locations()
|
|
84
|
+
|
|
85
|
+
# Allow propagation of ModuleNotAttachedError.
|
|
86
|
+
hs_hardware_module = self._equipment.get_module_hardware_api(
|
|
87
|
+
hs_module_substate.module_id
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
if hs_hardware_module is not None:
|
|
91
|
+
await hs_hardware_module.set_speed(rpm=validated_speed)
|
|
92
|
+
|
|
93
|
+
return SuccessData(
|
|
94
|
+
public=SetAndWaitForShakeSpeedResult(
|
|
95
|
+
pipetteRetracted=pipette_should_retract
|
|
96
|
+
),
|
|
97
|
+
state_update=state_update,
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
class SetAndWaitForShakeSpeed(
|
|
102
|
+
BaseCommand[
|
|
103
|
+
SetAndWaitForShakeSpeedParams, SetAndWaitForShakeSpeedResult, ErrorOccurrence
|
|
104
|
+
]
|
|
105
|
+
):
|
|
106
|
+
"""A command to set and wait for a Heater-Shaker's shake speed."""
|
|
107
|
+
|
|
108
|
+
commandType: SetAndWaitForShakeSpeedCommandType = (
|
|
109
|
+
"heaterShaker/setAndWaitForShakeSpeed"
|
|
110
|
+
)
|
|
111
|
+
params: SetAndWaitForShakeSpeedParams
|
|
112
|
+
result: Optional[SetAndWaitForShakeSpeedResult] = None
|
|
113
|
+
|
|
114
|
+
_ImplementationCls: Type[SetAndWaitForShakeSpeedImpl] = SetAndWaitForShakeSpeedImpl
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class SetAndWaitForShakeSpeedCreate(BaseCommandCreate[SetAndWaitForShakeSpeedParams]):
|
|
118
|
+
"""A request to create a Heater-Shaker's set and wait for shake speed command."""
|
|
119
|
+
|
|
120
|
+
commandType: SetAndWaitForShakeSpeedCommandType = (
|
|
121
|
+
"heaterShaker/setAndWaitForShakeSpeed"
|
|
122
|
+
)
|
|
123
|
+
params: SetAndWaitForShakeSpeedParams
|
|
124
|
+
|
|
125
|
+
_CommandCls: Type[SetAndWaitForShakeSpeed] = SetAndWaitForShakeSpeed
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Command models to start heating a Heater-Shaker 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
|
+
|
|
16
|
+
SetTargetTemperatureCommandType = Literal["heaterShaker/setTargetTemperature"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class SetTargetTemperatureParams(BaseModel):
|
|
20
|
+
"""Input parameters to set a Heater-Shaker's target temperature."""
|
|
21
|
+
|
|
22
|
+
moduleId: str = Field(..., description="Unique ID of the Heater-Shaker Module.")
|
|
23
|
+
celsius: float = Field(..., description="Target temperature in °C.")
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class SetTargetTemperatureResult(BaseModel):
|
|
27
|
+
"""Result data from setting a Heater-Shaker's target temperature."""
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class SetTargetTemperatureImpl(
|
|
31
|
+
AbstractCommandImpl[
|
|
32
|
+
SetTargetTemperatureParams, SuccessData[SetTargetTemperatureResult]
|
|
33
|
+
]
|
|
34
|
+
):
|
|
35
|
+
"""Execution implementation of a Heater-Shaker's set temperature command."""
|
|
36
|
+
|
|
37
|
+
def __init__(
|
|
38
|
+
self,
|
|
39
|
+
state_view: StateView,
|
|
40
|
+
equipment: EquipmentHandler,
|
|
41
|
+
**unused_dependencies: object,
|
|
42
|
+
) -> None:
|
|
43
|
+
self._state_view = state_view
|
|
44
|
+
self._equipment = equipment
|
|
45
|
+
|
|
46
|
+
async def execute(
|
|
47
|
+
self,
|
|
48
|
+
params: SetTargetTemperatureParams,
|
|
49
|
+
) -> SuccessData[SetTargetTemperatureResult]:
|
|
50
|
+
"""Set a Heater-Shaker's target temperature."""
|
|
51
|
+
# Allow propagation of ModuleNotLoadedError and WrongModuleTypeError.
|
|
52
|
+
hs_module_substate = self._state_view.modules.get_heater_shaker_module_substate(
|
|
53
|
+
module_id=params.moduleId
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
# Verify temperature from hs module view
|
|
57
|
+
validated_temp = hs_module_substate.validate_target_temperature(params.celsius)
|
|
58
|
+
|
|
59
|
+
# Allow propagation of ModuleNotAttachedError.
|
|
60
|
+
hs_hardware_module = self._equipment.get_module_hardware_api(
|
|
61
|
+
hs_module_substate.module_id
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
if hs_hardware_module is not None:
|
|
65
|
+
await hs_hardware_module.start_set_temperature(validated_temp)
|
|
66
|
+
|
|
67
|
+
return SuccessData(
|
|
68
|
+
public=SetTargetTemperatureResult(),
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class SetTargetTemperature(
|
|
73
|
+
BaseCommand[SetTargetTemperatureParams, SetTargetTemperatureResult, ErrorOccurrence]
|
|
74
|
+
):
|
|
75
|
+
"""A command to set a Heater-Shaker's target temperature."""
|
|
76
|
+
|
|
77
|
+
commandType: SetTargetTemperatureCommandType = "heaterShaker/setTargetTemperature"
|
|
78
|
+
params: SetTargetTemperatureParams
|
|
79
|
+
result: Optional[SetTargetTemperatureResult] = None
|
|
80
|
+
|
|
81
|
+
_ImplementationCls: Type[SetTargetTemperatureImpl] = SetTargetTemperatureImpl
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class SetTargetTemperatureCreate(BaseCommandCreate[SetTargetTemperatureParams]):
|
|
85
|
+
"""A request to create a Heater-Shaker's set temperature command."""
|
|
86
|
+
|
|
87
|
+
commandType: SetTargetTemperatureCommandType = "heaterShaker/setTargetTemperature"
|
|
88
|
+
params: SetTargetTemperatureParams
|
|
89
|
+
|
|
90
|
+
_CommandCls: Type[SetTargetTemperature] = SetTargetTemperature
|