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,155 @@
|
|
|
1
|
+
"""Pressure Dispense-in-place command request, result, and implementation models."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from typing import TYPE_CHECKING, Optional, Type, Union
|
|
5
|
+
from typing_extensions import Literal
|
|
6
|
+
|
|
7
|
+
from .pipetting_common import (
|
|
8
|
+
PipetteIdMixin,
|
|
9
|
+
FlowRateMixin,
|
|
10
|
+
DispenseVolumeMixin,
|
|
11
|
+
BaseLiquidHandlingResult,
|
|
12
|
+
dispense_in_place,
|
|
13
|
+
increase_evo_disp_count,
|
|
14
|
+
DEFAULT_CORRECTION_VOLUME,
|
|
15
|
+
)
|
|
16
|
+
from .movement_common import (
|
|
17
|
+
LiquidHandlingWellLocationMixin,
|
|
18
|
+
StallOrCollisionError,
|
|
19
|
+
move_to_well,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
from .command import (
|
|
23
|
+
AbstractCommandImpl,
|
|
24
|
+
BaseCommand,
|
|
25
|
+
BaseCommandCreate,
|
|
26
|
+
SuccessData,
|
|
27
|
+
DefinedErrorData,
|
|
28
|
+
)
|
|
29
|
+
from ..state.update_types import StateUpdate
|
|
30
|
+
from ..errors import ProtocolEngineError
|
|
31
|
+
|
|
32
|
+
if TYPE_CHECKING:
|
|
33
|
+
from ..execution import PipettingHandler, GantryMover, MovementHandler
|
|
34
|
+
from ..resources import ModelUtils
|
|
35
|
+
from ..state.state import StateView
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
PressureDispenseCommandType = Literal["pressureDispense"]
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class PressureDispenseParams(
|
|
42
|
+
PipetteIdMixin, DispenseVolumeMixin, FlowRateMixin, LiquidHandlingWellLocationMixin
|
|
43
|
+
):
|
|
44
|
+
"""Payload required to pressure dispense in place."""
|
|
45
|
+
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class PressureDispenseResult(BaseLiquidHandlingResult):
|
|
50
|
+
"""Result data from the execution of a PressureDispense command."""
|
|
51
|
+
|
|
52
|
+
pass
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
_ExecuteReturn = Union[
|
|
56
|
+
SuccessData[PressureDispenseResult],
|
|
57
|
+
DefinedErrorData[StallOrCollisionError],
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class PressureDispenseImplementation(
|
|
62
|
+
AbstractCommandImpl[PressureDispenseParams, _ExecuteReturn]
|
|
63
|
+
):
|
|
64
|
+
"""Pressure dispense command implementation."""
|
|
65
|
+
|
|
66
|
+
def __init__(
|
|
67
|
+
self,
|
|
68
|
+
pipetting: PipettingHandler,
|
|
69
|
+
state_view: StateView,
|
|
70
|
+
gantry_mover: GantryMover,
|
|
71
|
+
model_utils: ModelUtils,
|
|
72
|
+
movement: MovementHandler,
|
|
73
|
+
**kwargs: object,
|
|
74
|
+
) -> None:
|
|
75
|
+
self._pipetting = pipetting
|
|
76
|
+
self._state_view = state_view
|
|
77
|
+
self._gantry_mover = gantry_mover
|
|
78
|
+
self._model_utils = model_utils
|
|
79
|
+
self._movement = movement
|
|
80
|
+
|
|
81
|
+
async def execute(self, params: PressureDispenseParams) -> _ExecuteReturn:
|
|
82
|
+
"""Move to and pressure dispense to the requested well."""
|
|
83
|
+
well_location = params.wellLocation
|
|
84
|
+
labware_id = params.labwareId
|
|
85
|
+
well_name = params.wellName
|
|
86
|
+
|
|
87
|
+
move_result = await move_to_well(
|
|
88
|
+
movement=self._movement,
|
|
89
|
+
model_utils=self._model_utils,
|
|
90
|
+
pipette_id=params.pipetteId,
|
|
91
|
+
labware_id=labware_id,
|
|
92
|
+
well_name=well_name,
|
|
93
|
+
well_location=well_location,
|
|
94
|
+
)
|
|
95
|
+
if isinstance(move_result, DefinedErrorData):
|
|
96
|
+
return move_result
|
|
97
|
+
|
|
98
|
+
current_position = await self._gantry_mover.get_position(params.pipetteId)
|
|
99
|
+
await increase_evo_disp_count(
|
|
100
|
+
pipette_id=params.pipetteId, pipetting=self._pipetting
|
|
101
|
+
)
|
|
102
|
+
result = await dispense_in_place(
|
|
103
|
+
pipette_id=params.pipetteId,
|
|
104
|
+
volume=params.volume,
|
|
105
|
+
flow_rate=params.flowRate,
|
|
106
|
+
push_out=None,
|
|
107
|
+
location_if_error={
|
|
108
|
+
"retryLocation": (
|
|
109
|
+
current_position.x,
|
|
110
|
+
current_position.y,
|
|
111
|
+
current_position.z,
|
|
112
|
+
)
|
|
113
|
+
},
|
|
114
|
+
pipetting=self._pipetting,
|
|
115
|
+
model_utils=self._model_utils,
|
|
116
|
+
correction_volume=params.correctionVolume or DEFAULT_CORRECTION_VOLUME,
|
|
117
|
+
)
|
|
118
|
+
if isinstance(result, DefinedErrorData):
|
|
119
|
+
# TODO (chb, 2025-01-29): Remove this and the OverpressureError returns once disabled for this function
|
|
120
|
+
raise ProtocolEngineError(
|
|
121
|
+
message="Overpressure Error during Resin Tip Dispense Command."
|
|
122
|
+
)
|
|
123
|
+
return SuccessData(
|
|
124
|
+
public=PressureDispenseResult(volume=result.public.volume),
|
|
125
|
+
state_update=StateUpdate.reduce(
|
|
126
|
+
move_result.state_update, result.state_update
|
|
127
|
+
),
|
|
128
|
+
)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
class PressureDispense(
|
|
132
|
+
BaseCommand[
|
|
133
|
+
PressureDispenseParams,
|
|
134
|
+
PressureDispenseResult,
|
|
135
|
+
StallOrCollisionError,
|
|
136
|
+
]
|
|
137
|
+
):
|
|
138
|
+
"""PressureDispense command model."""
|
|
139
|
+
|
|
140
|
+
commandType: PressureDispenseCommandType = "pressureDispense"
|
|
141
|
+
params: PressureDispenseParams
|
|
142
|
+
result: Optional[PressureDispenseResult] = None
|
|
143
|
+
|
|
144
|
+
_ImplementationCls: Type[
|
|
145
|
+
PressureDispenseImplementation
|
|
146
|
+
] = PressureDispenseImplementation
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
class PressureDispenseCreate(BaseCommandCreate[PressureDispenseParams]):
|
|
150
|
+
"""PressureDispense command request model."""
|
|
151
|
+
|
|
152
|
+
commandType: PressureDispenseCommandType = "pressureDispense"
|
|
153
|
+
params: PressureDispenseParams
|
|
154
|
+
|
|
155
|
+
_CommandCls: Type[PressureDispense] = PressureDispense
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"""Reload labware command request, result, and implementation models."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from pydantic import BaseModel, Field
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Type
|
|
6
|
+
from typing_extensions import Literal
|
|
7
|
+
|
|
8
|
+
from .labware_handling_common import LabwarePositionResultMixin
|
|
9
|
+
from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
10
|
+
from ..errors.error_occurrence import ErrorOccurrence
|
|
11
|
+
from ..state.update_types import StateUpdate
|
|
12
|
+
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from ..state.state import StateView
|
|
15
|
+
from ..execution import EquipmentHandler
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
ReloadLabwareCommandType = Literal["reloadLabware"]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ReloadLabwareParams(BaseModel):
|
|
22
|
+
"""Payload required to load a labware into a slot."""
|
|
23
|
+
|
|
24
|
+
labwareId: str = Field(
|
|
25
|
+
..., description="The already-loaded labware instance to update."
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class ReloadLabwareResult(LabwarePositionResultMixin):
|
|
30
|
+
"""Result data from the execution of a LoadLabware command."""
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class ReloadLabwareImplementation(
|
|
34
|
+
AbstractCommandImpl[ReloadLabwareParams, SuccessData[ReloadLabwareResult]]
|
|
35
|
+
):
|
|
36
|
+
"""Reload labware command implementation."""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self, equipment: EquipmentHandler, state_view: StateView, **kwargs: object
|
|
40
|
+
) -> None:
|
|
41
|
+
self._equipment = equipment
|
|
42
|
+
self._state_view = state_view
|
|
43
|
+
|
|
44
|
+
async def execute(
|
|
45
|
+
self, params: ReloadLabwareParams
|
|
46
|
+
) -> SuccessData[ReloadLabwareResult]:
|
|
47
|
+
"""Reload the definition and calibration data for a specific labware."""
|
|
48
|
+
reloaded_labware = await self._equipment.reload_labware(
|
|
49
|
+
labware_id=params.labwareId,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
state_update = StateUpdate()
|
|
53
|
+
|
|
54
|
+
state_update.set_labware_location(
|
|
55
|
+
labware_id=params.labwareId,
|
|
56
|
+
new_location=reloaded_labware.location,
|
|
57
|
+
new_offset_id=reloaded_labware.offsetId,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
return SuccessData(
|
|
61
|
+
public=ReloadLabwareResult(
|
|
62
|
+
labwareId=params.labwareId,
|
|
63
|
+
offsetId=reloaded_labware.offsetId,
|
|
64
|
+
locationSequence=self._state_view.geometry.get_predicted_location_sequence(
|
|
65
|
+
reloaded_labware.location
|
|
66
|
+
),
|
|
67
|
+
),
|
|
68
|
+
state_update=state_update,
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class ReloadLabware(
|
|
73
|
+
BaseCommand[ReloadLabwareParams, ReloadLabwareResult, ErrorOccurrence]
|
|
74
|
+
):
|
|
75
|
+
"""Reload labware command resource model."""
|
|
76
|
+
|
|
77
|
+
commandType: ReloadLabwareCommandType = "reloadLabware"
|
|
78
|
+
params: ReloadLabwareParams
|
|
79
|
+
result: Optional[ReloadLabwareResult] = None
|
|
80
|
+
|
|
81
|
+
_ImplementationCls: Type[ReloadLabwareImplementation] = ReloadLabwareImplementation
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class ReloadLabwareCreate(BaseCommandCreate[ReloadLabwareParams]):
|
|
85
|
+
"""Reload labware command creation request."""
|
|
86
|
+
|
|
87
|
+
commandType: ReloadLabwareCommandType = "reloadLabware"
|
|
88
|
+
params: ReloadLabwareParams
|
|
89
|
+
|
|
90
|
+
_CommandCls: Type[ReloadLabware] = ReloadLabware
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""Retract Axis command payload, result, and implementation models."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from pydantic import BaseModel, Field
|
|
4
|
+
from typing import TYPE_CHECKING, Optional, Type
|
|
5
|
+
from typing_extensions import Literal
|
|
6
|
+
|
|
7
|
+
from ..state import update_types
|
|
8
|
+
from ..types import MotorAxis
|
|
9
|
+
from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
10
|
+
from ..errors.error_occurrence import ErrorOccurrence
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from ..execution import MovementHandler
|
|
14
|
+
|
|
15
|
+
RetractAxisCommandType = Literal["retractAxis"]
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class RetractAxisParams(BaseModel):
|
|
19
|
+
"""Payload required for a Retract Axis command."""
|
|
20
|
+
|
|
21
|
+
axis: MotorAxis = Field(
|
|
22
|
+
...,
|
|
23
|
+
description=(
|
|
24
|
+
"Axis to retract to its home position as quickly as safely possible."
|
|
25
|
+
" The difference between retracting an axis and homing an axis using the"
|
|
26
|
+
" home command is that a home will always probe the limit switch and"
|
|
27
|
+
" will work as the first motion command a robot will need to execute;"
|
|
28
|
+
" On the other hand, retraction will rely on this previously determined "
|
|
29
|
+
" home position to move to it as fast as safely possible."
|
|
30
|
+
" So on the Flex, it will move (fast) the axis to the previously recorded home position"
|
|
31
|
+
" and on the OT2, it will move (fast) the axis a safe distance from the previously"
|
|
32
|
+
" recorded home position, and then slowly approach the limit switch."
|
|
33
|
+
),
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class RetractAxisResult(BaseModel):
|
|
38
|
+
"""Result data from the execution of a Rectract Axis command."""
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class RetractAxisImplementation(
|
|
42
|
+
AbstractCommandImpl[RetractAxisParams, SuccessData[RetractAxisResult]]
|
|
43
|
+
):
|
|
44
|
+
"""Retract Axis command implementation."""
|
|
45
|
+
|
|
46
|
+
def __init__(self, movement: MovementHandler, **kwargs: object) -> None:
|
|
47
|
+
self._movement = movement
|
|
48
|
+
|
|
49
|
+
async def execute(
|
|
50
|
+
self, params: RetractAxisParams
|
|
51
|
+
) -> SuccessData[RetractAxisResult]:
|
|
52
|
+
"""Retract the specified axis."""
|
|
53
|
+
state_update = update_types.StateUpdate()
|
|
54
|
+
await self._movement.retract_axis(axis=params.axis)
|
|
55
|
+
state_update.clear_all_pipette_locations()
|
|
56
|
+
return SuccessData(public=RetractAxisResult(), state_update=state_update)
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class RetractAxis(BaseCommand[RetractAxisParams, RetractAxisResult, ErrorOccurrence]):
|
|
60
|
+
"""Command to retract the specified axis to its home position."""
|
|
61
|
+
|
|
62
|
+
commandType: RetractAxisCommandType = "retractAxis"
|
|
63
|
+
params: RetractAxisParams
|
|
64
|
+
result: Optional[RetractAxisResult] = None
|
|
65
|
+
|
|
66
|
+
_ImplementationCls: Type[RetractAxisImplementation] = RetractAxisImplementation
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class RetractAxisCreate(BaseCommandCreate[RetractAxisParams]):
|
|
70
|
+
"""Data to create a Retract Axis command."""
|
|
71
|
+
|
|
72
|
+
commandType: RetractAxisCommandType = "retractAxis"
|
|
73
|
+
params: RetractAxisParams
|
|
74
|
+
|
|
75
|
+
_CommandCls: Type[RetractAxis] = RetractAxis
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"""Robot movement commands."""
|
|
2
|
+
|
|
3
|
+
from .move_to import (
|
|
4
|
+
MoveTo,
|
|
5
|
+
MoveToCreate,
|
|
6
|
+
MoveToParams,
|
|
7
|
+
MoveToResult,
|
|
8
|
+
MoveToCommandType,
|
|
9
|
+
)
|
|
10
|
+
from .move_axes_to import (
|
|
11
|
+
MoveAxesTo,
|
|
12
|
+
MoveAxesToCreate,
|
|
13
|
+
MoveAxesToParams,
|
|
14
|
+
MoveAxesToResult,
|
|
15
|
+
MoveAxesToCommandType,
|
|
16
|
+
)
|
|
17
|
+
from .move_axes_relative import (
|
|
18
|
+
MoveAxesRelative,
|
|
19
|
+
MoveAxesRelativeCreate,
|
|
20
|
+
MoveAxesRelativeParams,
|
|
21
|
+
MoveAxesRelativeResult,
|
|
22
|
+
MoveAxesRelativeCommandType,
|
|
23
|
+
)
|
|
24
|
+
from .open_gripper_jaw import (
|
|
25
|
+
OpenGripperJaw,
|
|
26
|
+
OpenGripperJawCreate,
|
|
27
|
+
OpenGripperJawParams,
|
|
28
|
+
OpenGripperJawResult,
|
|
29
|
+
OpenGripperJawCommandType,
|
|
30
|
+
)
|
|
31
|
+
from .close_gripper_jaw import (
|
|
32
|
+
CloseGripperJaw,
|
|
33
|
+
CloseGripperJawCreate,
|
|
34
|
+
CloseGripperJawParams,
|
|
35
|
+
CloseGripperJawResult,
|
|
36
|
+
CloseGripperJawCommandType,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
# robot/moveTo
|
|
41
|
+
"MoveTo",
|
|
42
|
+
"MoveToCreate",
|
|
43
|
+
"MoveToParams",
|
|
44
|
+
"MoveToResult",
|
|
45
|
+
"MoveToCommandType",
|
|
46
|
+
# robot/moveAxesTo
|
|
47
|
+
"MoveAxesTo",
|
|
48
|
+
"MoveAxesToCreate",
|
|
49
|
+
"MoveAxesToParams",
|
|
50
|
+
"MoveAxesToResult",
|
|
51
|
+
"MoveAxesToCommandType",
|
|
52
|
+
# robot/moveAxesRelative
|
|
53
|
+
"MoveAxesRelative",
|
|
54
|
+
"MoveAxesRelativeCreate",
|
|
55
|
+
"MoveAxesRelativeParams",
|
|
56
|
+
"MoveAxesRelativeResult",
|
|
57
|
+
"MoveAxesRelativeCommandType",
|
|
58
|
+
# robot/openGripperJaw
|
|
59
|
+
"OpenGripperJaw",
|
|
60
|
+
"OpenGripperJawCreate",
|
|
61
|
+
"OpenGripperJawParams",
|
|
62
|
+
"OpenGripperJawResult",
|
|
63
|
+
"OpenGripperJawCommandType",
|
|
64
|
+
# robot/closeGripperJaw
|
|
65
|
+
"CloseGripperJaw",
|
|
66
|
+
"CloseGripperJawCreate",
|
|
67
|
+
"CloseGripperJawParams",
|
|
68
|
+
"CloseGripperJawResult",
|
|
69
|
+
"CloseGripperJawCommandType",
|
|
70
|
+
]
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""Command models for opening a gripper jaw."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from typing import Literal, Type, Optional, Any, TYPE_CHECKING
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
8
|
+
|
|
9
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
10
|
+
from opentrons.protocol_engine.resources import ensure_ot3_hardware
|
|
11
|
+
|
|
12
|
+
from ..command import (
|
|
13
|
+
AbstractCommandImpl,
|
|
14
|
+
BaseCommand,
|
|
15
|
+
BaseCommandCreate,
|
|
16
|
+
SuccessData,
|
|
17
|
+
)
|
|
18
|
+
from opentrons.protocol_engine.errors.error_occurrence import ErrorOccurrence
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from ...state.state import StateView
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
CloseGripperJawCommandType = Literal["robot/closeGripperJaw"]
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _remove_default(s: dict[str, Any]) -> None:
|
|
28
|
+
s.pop("default", None)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class CloseGripperJawParams(BaseModel):
|
|
32
|
+
"""Payload required to close a gripper."""
|
|
33
|
+
|
|
34
|
+
force: float | SkipJsonSchema[None] = Field(
|
|
35
|
+
default=None,
|
|
36
|
+
description="The force the gripper should use to hold the jaws, falls to default if none is provided.",
|
|
37
|
+
json_schema_extra=_remove_default,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class CloseGripperJawResult(BaseModel):
|
|
42
|
+
"""Result data from the execution of a CloseGripperJaw command."""
|
|
43
|
+
|
|
44
|
+
pass
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class CloseGripperJawImplementation(
|
|
48
|
+
AbstractCommandImpl[CloseGripperJawParams, SuccessData[CloseGripperJawResult]]
|
|
49
|
+
):
|
|
50
|
+
"""CloseGripperJaw command implementation."""
|
|
51
|
+
|
|
52
|
+
def __init__(
|
|
53
|
+
self,
|
|
54
|
+
hardware_api: HardwareControlAPI,
|
|
55
|
+
state_view: StateView,
|
|
56
|
+
**kwargs: object,
|
|
57
|
+
) -> None:
|
|
58
|
+
self._hardware_api = hardware_api
|
|
59
|
+
self._state_view = state_view
|
|
60
|
+
|
|
61
|
+
async def execute(
|
|
62
|
+
self, params: CloseGripperJawParams
|
|
63
|
+
) -> SuccessData[CloseGripperJawResult]:
|
|
64
|
+
"""Release the gripper."""
|
|
65
|
+
if self._state_view.config.use_virtual_gripper:
|
|
66
|
+
return SuccessData(
|
|
67
|
+
public=CloseGripperJawResult(),
|
|
68
|
+
)
|
|
69
|
+
ot3_hardware_api = ensure_ot3_hardware(self._hardware_api)
|
|
70
|
+
await ot3_hardware_api.grip(force_newtons=params.force)
|
|
71
|
+
return SuccessData(
|
|
72
|
+
public=CloseGripperJawResult(),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class CloseGripperJaw(
|
|
77
|
+
BaseCommand[CloseGripperJawParams, CloseGripperJawResult, ErrorOccurrence]
|
|
78
|
+
):
|
|
79
|
+
"""CloseGripperJaw command model."""
|
|
80
|
+
|
|
81
|
+
commandType: CloseGripperJawCommandType = "robot/closeGripperJaw"
|
|
82
|
+
params: CloseGripperJawParams
|
|
83
|
+
result: Optional[CloseGripperJawResult] = None
|
|
84
|
+
|
|
85
|
+
_ImplementationCls: Type[
|
|
86
|
+
CloseGripperJawImplementation
|
|
87
|
+
] = CloseGripperJawImplementation
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class CloseGripperJawCreate(BaseCommandCreate[CloseGripperJawParams]):
|
|
91
|
+
"""CloseGripperJaw command request model."""
|
|
92
|
+
|
|
93
|
+
commandType: CloseGripperJawCommandType = "robot/closeGripperJaw"
|
|
94
|
+
params: CloseGripperJawParams
|
|
95
|
+
|
|
96
|
+
_CommandCls: Type[CloseGripperJaw] = CloseGripperJaw
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Shared result types for robot API commands."""
|
|
2
|
+
from pydantic import BaseModel, Field
|
|
3
|
+
|
|
4
|
+
from typing import Dict
|
|
5
|
+
from opentrons.protocol_engine.types import MotorAxis
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
MotorAxisMapType = Dict[MotorAxis, float]
|
|
9
|
+
default_position = {ax: 0.0 for ax in MotorAxis}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class DestinationRobotPositionResult(BaseModel):
|
|
13
|
+
"""The result dictionary of `MotorAxis` type."""
|
|
14
|
+
|
|
15
|
+
position: MotorAxisMapType = Field(
|
|
16
|
+
default=default_position,
|
|
17
|
+
description="The position of all axes on the robot. If no mount was provided, the last moved mount is used to determine the location.",
|
|
18
|
+
)
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"""Command models for moving any robot axis relative."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
from typing import Literal, Type, Optional, TYPE_CHECKING, Any
|
|
5
|
+
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
8
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
9
|
+
from opentrons.protocol_engine.resources import ensure_ot3_hardware
|
|
10
|
+
|
|
11
|
+
from .common import MotorAxisMapType, DestinationRobotPositionResult
|
|
12
|
+
|
|
13
|
+
from ..command import (
|
|
14
|
+
AbstractCommandImpl,
|
|
15
|
+
BaseCommand,
|
|
16
|
+
BaseCommandCreate,
|
|
17
|
+
SuccessData,
|
|
18
|
+
)
|
|
19
|
+
from ...errors.error_occurrence import ErrorOccurrence
|
|
20
|
+
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
from opentrons.protocol_engine.execution import GantryMover
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
MoveAxesRelativeCommandType = Literal["robot/moveAxesRelative"]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def _remove_default(s: dict[str, Any]) -> None:
|
|
29
|
+
s.pop("default", None)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class MoveAxesRelativeParams(BaseModel):
|
|
33
|
+
"""Payload required to move axes relative to position."""
|
|
34
|
+
|
|
35
|
+
axis_map: MotorAxisMapType = Field(
|
|
36
|
+
..., description="A dictionary mapping axes to relative movements in mm."
|
|
37
|
+
)
|
|
38
|
+
speed: float | SkipJsonSchema[None] = Field(
|
|
39
|
+
default=None,
|
|
40
|
+
description="The max velocity to move the axes at. Will fall to hardware defaults if none provided.",
|
|
41
|
+
json_schema_extra=_remove_default,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class MoveAxesRelativeResult(DestinationRobotPositionResult):
|
|
46
|
+
"""Result data from the execution of a MoveAxesRelative command."""
|
|
47
|
+
|
|
48
|
+
pass
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class MoveAxesRelativeImplementation(
|
|
52
|
+
AbstractCommandImpl[MoveAxesRelativeParams, SuccessData[MoveAxesRelativeResult]]
|
|
53
|
+
):
|
|
54
|
+
"""MoveAxesRelative command implementation."""
|
|
55
|
+
|
|
56
|
+
def __init__(
|
|
57
|
+
self,
|
|
58
|
+
gantry_mover: GantryMover,
|
|
59
|
+
hardware_api: HardwareControlAPI,
|
|
60
|
+
**kwargs: object,
|
|
61
|
+
) -> None:
|
|
62
|
+
self._gantry_mover = gantry_mover
|
|
63
|
+
self._hardware_api = hardware_api
|
|
64
|
+
|
|
65
|
+
async def execute(
|
|
66
|
+
self, params: MoveAxesRelativeParams
|
|
67
|
+
) -> SuccessData[MoveAxesRelativeResult]:
|
|
68
|
+
"""Move the axes on a flex a relative distance."""
|
|
69
|
+
# TODO (lc 08-16-2024) implement `move_axes` for OT 2 hardware controller
|
|
70
|
+
# and then we can remove this validation.
|
|
71
|
+
ensure_ot3_hardware(self._hardware_api)
|
|
72
|
+
|
|
73
|
+
current_position = await self._gantry_mover.move_axes(
|
|
74
|
+
axis_map=params.axis_map, speed=params.speed, relative_move=True
|
|
75
|
+
)
|
|
76
|
+
return SuccessData(
|
|
77
|
+
public=MoveAxesRelativeResult(position=current_position),
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class MoveAxesRelative(
|
|
82
|
+
BaseCommand[MoveAxesRelativeParams, MoveAxesRelativeResult, ErrorOccurrence]
|
|
83
|
+
):
|
|
84
|
+
"""MoveAxesRelative command model."""
|
|
85
|
+
|
|
86
|
+
commandType: MoveAxesRelativeCommandType = "robot/moveAxesRelative"
|
|
87
|
+
params: MoveAxesRelativeParams
|
|
88
|
+
result: Optional[MoveAxesRelativeResult] = None
|
|
89
|
+
|
|
90
|
+
_ImplementationCls: Type[
|
|
91
|
+
MoveAxesRelativeImplementation
|
|
92
|
+
] = MoveAxesRelativeImplementation
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
class MoveAxesRelativeCreate(BaseCommandCreate[MoveAxesRelativeParams]):
|
|
96
|
+
"""MoveAxesRelative command request model."""
|
|
97
|
+
|
|
98
|
+
commandType: MoveAxesRelativeCommandType = "robot/moveAxesRelative"
|
|
99
|
+
params: MoveAxesRelativeParams
|
|
100
|
+
|
|
101
|
+
_CommandCls: Type[MoveAxesRelative] = MoveAxesRelative
|