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,155 @@
|
|
|
1
|
+
"""Protocol engine module.
|
|
2
|
+
|
|
3
|
+
The protocol_engine module contains the logic necessary to take a stream of
|
|
4
|
+
protocol commands, issued by some arbitrary protocol runner, and turn it into
|
|
5
|
+
protocol state and side-effects like robot movements.
|
|
6
|
+
|
|
7
|
+
The main interface is the `ProtocolEngine` class.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from .protocol_engine import ProtocolEngine
|
|
11
|
+
from .errors import ProtocolEngineError, ErrorOccurrence
|
|
12
|
+
from .notes import CommandNote
|
|
13
|
+
from .commands import (
|
|
14
|
+
Command,
|
|
15
|
+
CommandParams,
|
|
16
|
+
CommandCreate,
|
|
17
|
+
CommandStatus,
|
|
18
|
+
CommandType,
|
|
19
|
+
CommandIntent,
|
|
20
|
+
)
|
|
21
|
+
from .state.state import State, StateView
|
|
22
|
+
from .state.state_summary import StateSummary
|
|
23
|
+
from .state.commands import CommandSlice, CommandErrorSlice, CommandPointer
|
|
24
|
+
from .state.config import Config
|
|
25
|
+
from .plugins import AbstractPlugin
|
|
26
|
+
|
|
27
|
+
from .types import (
|
|
28
|
+
LabwareOffset,
|
|
29
|
+
LegacyLabwareOffsetCreate,
|
|
30
|
+
LabwareOffsetCreate,
|
|
31
|
+
LabwareOffsetVector,
|
|
32
|
+
LegacyLabwareOffsetLocation,
|
|
33
|
+
LabwareOffsetLocationSequence,
|
|
34
|
+
OnLabwareOffsetLocationSequenceComponent,
|
|
35
|
+
OnModuleOffsetLocationSequenceComponent,
|
|
36
|
+
OnAddressableAreaOffsetLocationSequenceComponent,
|
|
37
|
+
LabwareOffsetLocationSequenceComponents,
|
|
38
|
+
LabwareMovementStrategy,
|
|
39
|
+
AddressableOffsetVector,
|
|
40
|
+
DeckPoint,
|
|
41
|
+
DeckType,
|
|
42
|
+
DeckSlotLocation,
|
|
43
|
+
InStackerHopperLocation,
|
|
44
|
+
ModuleLocation,
|
|
45
|
+
OnLabwareLocation,
|
|
46
|
+
AddressableAreaLocation,
|
|
47
|
+
OFF_DECK_LOCATION,
|
|
48
|
+
SYSTEM_LOCATION,
|
|
49
|
+
Dimensions,
|
|
50
|
+
EngineStatus,
|
|
51
|
+
LabwareLocation,
|
|
52
|
+
LoadableLabwareLocation,
|
|
53
|
+
NonStackedLocation,
|
|
54
|
+
LoadedLabware,
|
|
55
|
+
LoadedModule,
|
|
56
|
+
LoadedPipette,
|
|
57
|
+
MotorAxis,
|
|
58
|
+
WellLocation,
|
|
59
|
+
LiquidHandlingWellLocation,
|
|
60
|
+
PickUpTipWellLocation,
|
|
61
|
+
DropTipWellLocation,
|
|
62
|
+
WellOrigin,
|
|
63
|
+
DropTipWellOrigin,
|
|
64
|
+
PickUpTipWellOrigin,
|
|
65
|
+
WellOffset,
|
|
66
|
+
ModuleModel,
|
|
67
|
+
ModuleDefinition,
|
|
68
|
+
Liquid,
|
|
69
|
+
LiquidClassRecord,
|
|
70
|
+
LiquidClassRecordWithId,
|
|
71
|
+
AllNozzleLayoutConfiguration,
|
|
72
|
+
SingleNozzleLayoutConfiguration,
|
|
73
|
+
RowNozzleLayoutConfiguration,
|
|
74
|
+
ColumnNozzleLayoutConfiguration,
|
|
75
|
+
QuadrantNozzleLayoutConfiguration,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
__all__ = [
|
|
80
|
+
# main factory and interface exports
|
|
81
|
+
"create_protocol_engine",
|
|
82
|
+
"create_protocol_engine_in_thread",
|
|
83
|
+
"ProtocolEngine",
|
|
84
|
+
"StateSummary",
|
|
85
|
+
"Config",
|
|
86
|
+
# error types
|
|
87
|
+
"ProtocolEngineError",
|
|
88
|
+
"ErrorOccurrence",
|
|
89
|
+
# top level command unions and values
|
|
90
|
+
"Command",
|
|
91
|
+
"CommandParams",
|
|
92
|
+
"CommandCreate",
|
|
93
|
+
"CommandStatus",
|
|
94
|
+
"CommandType",
|
|
95
|
+
"CommandIntent",
|
|
96
|
+
"CommandNote",
|
|
97
|
+
# state interfaces and models
|
|
98
|
+
"State",
|
|
99
|
+
"StateView",
|
|
100
|
+
"CommandSlice",
|
|
101
|
+
"CommandErrorSlice",
|
|
102
|
+
"CommandPointer",
|
|
103
|
+
# public value interfaces and models
|
|
104
|
+
"LabwareOffset",
|
|
105
|
+
"LabwareOffsetCreate",
|
|
106
|
+
"LegacyLabwareOffsetCreate",
|
|
107
|
+
"LabwareOffsetLocationSequence",
|
|
108
|
+
"LabwareOffsetVector",
|
|
109
|
+
"OnLabwareOffsetLocationSequenceComponent",
|
|
110
|
+
"OnModuleOffsetLocationSequenceComponent",
|
|
111
|
+
"OnAddressableAreaOffsetLocationSequenceComponent",
|
|
112
|
+
"LabwareOffsetLocationSequenceComponents",
|
|
113
|
+
"LegacyLabwareOffsetCreate",
|
|
114
|
+
"LegacyLabwareOffsetLocation",
|
|
115
|
+
"LabwareMovementStrategy",
|
|
116
|
+
"AddressableOffsetVector",
|
|
117
|
+
"DeckSlotLocation",
|
|
118
|
+
"DeckPoint",
|
|
119
|
+
"DeckType",
|
|
120
|
+
"ModuleLocation",
|
|
121
|
+
"OnLabwareLocation",
|
|
122
|
+
"AddressableAreaLocation",
|
|
123
|
+
"InStackerHopperLocation",
|
|
124
|
+
"OFF_DECK_LOCATION",
|
|
125
|
+
"SYSTEM_LOCATION",
|
|
126
|
+
"Dimensions",
|
|
127
|
+
"EngineStatus",
|
|
128
|
+
"LabwareLocation",
|
|
129
|
+
"LoadableLabwareLocation",
|
|
130
|
+
"NonStackedLocation",
|
|
131
|
+
"LoadedLabware",
|
|
132
|
+
"LoadedModule",
|
|
133
|
+
"LoadedPipette",
|
|
134
|
+
"MotorAxis",
|
|
135
|
+
"WellLocation",
|
|
136
|
+
"LiquidHandlingWellLocation",
|
|
137
|
+
"PickUpTipWellLocation",
|
|
138
|
+
"DropTipWellLocation",
|
|
139
|
+
"WellOrigin",
|
|
140
|
+
"DropTipWellOrigin",
|
|
141
|
+
"PickUpTipWellOrigin",
|
|
142
|
+
"WellOffset",
|
|
143
|
+
"ModuleModel",
|
|
144
|
+
"ModuleDefinition",
|
|
145
|
+
"Liquid",
|
|
146
|
+
"LiquidClassRecord",
|
|
147
|
+
"LiquidClassRecordWithId",
|
|
148
|
+
"AllNozzleLayoutConfiguration",
|
|
149
|
+
"SingleNozzleLayoutConfiguration",
|
|
150
|
+
"RowNozzleLayoutConfiguration",
|
|
151
|
+
"ColumnNozzleLayoutConfiguration",
|
|
152
|
+
"QuadrantNozzleLayoutConfiguration",
|
|
153
|
+
# plugins
|
|
154
|
+
"AbstractPlugin",
|
|
155
|
+
]
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""ProtocolEngine action interfaces.
|
|
2
|
+
|
|
3
|
+
Actions are the driver of state changes in the ProtocolEngine.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
from .action_dispatcher import ActionDispatcher
|
|
7
|
+
from .action_handler import ActionHandler
|
|
8
|
+
from .actions import (
|
|
9
|
+
Action,
|
|
10
|
+
PlayAction,
|
|
11
|
+
PauseAction,
|
|
12
|
+
PauseSource,
|
|
13
|
+
StopAction,
|
|
14
|
+
ResumeFromRecoveryAction,
|
|
15
|
+
FinishAction,
|
|
16
|
+
HardwareStoppedAction,
|
|
17
|
+
QueueCommandAction,
|
|
18
|
+
RunCommandAction,
|
|
19
|
+
SucceedCommandAction,
|
|
20
|
+
FailCommandAction,
|
|
21
|
+
AddLabwareOffsetAction,
|
|
22
|
+
AddLabwareDefinitionAction,
|
|
23
|
+
AddLiquidAction,
|
|
24
|
+
SetDeckConfigurationAction,
|
|
25
|
+
AddAddressableAreaAction,
|
|
26
|
+
AddModuleAction,
|
|
27
|
+
FinishErrorDetails,
|
|
28
|
+
DoorChangeAction,
|
|
29
|
+
ResetTipsAction,
|
|
30
|
+
SetPipetteMovementSpeedAction,
|
|
31
|
+
)
|
|
32
|
+
from .get_state_update import get_state_updates
|
|
33
|
+
|
|
34
|
+
__all__ = [
|
|
35
|
+
# action pipeline interface
|
|
36
|
+
"ActionDispatcher",
|
|
37
|
+
# action reaction interface
|
|
38
|
+
"ActionHandler",
|
|
39
|
+
# action values
|
|
40
|
+
"Action",
|
|
41
|
+
"PlayAction",
|
|
42
|
+
"PauseAction",
|
|
43
|
+
"StopAction",
|
|
44
|
+
"ResumeFromRecoveryAction",
|
|
45
|
+
"FinishAction",
|
|
46
|
+
"HardwareStoppedAction",
|
|
47
|
+
"QueueCommandAction",
|
|
48
|
+
"RunCommandAction",
|
|
49
|
+
"SucceedCommandAction",
|
|
50
|
+
"FailCommandAction",
|
|
51
|
+
"AddLabwareOffsetAction",
|
|
52
|
+
"AddLabwareDefinitionAction",
|
|
53
|
+
"AddLiquidAction",
|
|
54
|
+
"SetDeckConfigurationAction",
|
|
55
|
+
"AddAddressableAreaAction",
|
|
56
|
+
"AddModuleAction",
|
|
57
|
+
"DoorChangeAction",
|
|
58
|
+
"ResetTipsAction",
|
|
59
|
+
"SetPipetteMovementSpeedAction",
|
|
60
|
+
# action payload values
|
|
61
|
+
"PauseSource",
|
|
62
|
+
"FinishErrorDetails",
|
|
63
|
+
# helper functions
|
|
64
|
+
"get_state_updates",
|
|
65
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Action pipeline module."""
|
|
2
|
+
from typing import List
|
|
3
|
+
|
|
4
|
+
from .action_handler import ActionHandler
|
|
5
|
+
from .actions import Action
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ActionDispatcher:
|
|
9
|
+
"""A pipeline, with an endpoint, that actions can be dispatched into."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, sink: ActionHandler) -> None:
|
|
12
|
+
"""Initialize the ActionDispatcher and action pipeline.
|
|
13
|
+
|
|
14
|
+
Arguments:
|
|
15
|
+
sink: The action handler that all actions in the pipeline
|
|
16
|
+
are sent to.
|
|
17
|
+
"""
|
|
18
|
+
self._handlers: List[ActionHandler] = []
|
|
19
|
+
self._sink = sink
|
|
20
|
+
|
|
21
|
+
def add_handler(self, handler: ActionHandler) -> None:
|
|
22
|
+
"""Add an action handler to the pipeline before the sink."""
|
|
23
|
+
self._handlers.append(handler)
|
|
24
|
+
|
|
25
|
+
def dispatch(self, action: Action) -> None:
|
|
26
|
+
"""Dispatch an action into the pipeline."""
|
|
27
|
+
for handler in self._handlers:
|
|
28
|
+
handler.handle_action(action)
|
|
29
|
+
|
|
30
|
+
self._sink.handle_action(action)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""Abstract interfaces for engine plugins."""
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
|
|
4
|
+
from .actions import Action
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ActionHandler(ABC):
|
|
8
|
+
"""An abstract interface for an object that reacts to actions."""
|
|
9
|
+
|
|
10
|
+
@abstractmethod
|
|
11
|
+
def handle_action(self, action: Action) -> None:
|
|
12
|
+
"""React to a state-change action."""
|
|
13
|
+
...
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"""State store actions.
|
|
2
|
+
|
|
3
|
+
Actions can be passed to the ActionDispatcher, where they will trigger
|
|
4
|
+
reactions in objects that subscribe to the pipeline, like the StateStore.
|
|
5
|
+
"""
|
|
6
|
+
import dataclasses
|
|
7
|
+
from datetime import datetime
|
|
8
|
+
from enum import Enum
|
|
9
|
+
from typing import List, Optional, Union
|
|
10
|
+
|
|
11
|
+
from opentrons_shared_data.errors import EnumeratedError
|
|
12
|
+
from opentrons_shared_data.labware.labware_definition import LabwareDefinition
|
|
13
|
+
|
|
14
|
+
from opentrons.hardware_control.types import DoorState
|
|
15
|
+
from opentrons.hardware_control.modules import LiveData
|
|
16
|
+
|
|
17
|
+
from ..commands import (
|
|
18
|
+
Command,
|
|
19
|
+
CommandCreate,
|
|
20
|
+
CommandDefinedErrorData,
|
|
21
|
+
)
|
|
22
|
+
from ..error_recovery_policy import ErrorRecoveryPolicy, ErrorRecoveryType
|
|
23
|
+
from ..notes.notes import CommandNote
|
|
24
|
+
from ..state.update_types import StateUpdate
|
|
25
|
+
from ..types import (
|
|
26
|
+
LabwareOffsetCreateInternal,
|
|
27
|
+
ModuleDefinition,
|
|
28
|
+
Liquid,
|
|
29
|
+
DeckConfigurationType,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclasses.dataclass(frozen=True)
|
|
34
|
+
class PlayAction:
|
|
35
|
+
"""Start or resume processing commands in the engine."""
|
|
36
|
+
|
|
37
|
+
requested_at: datetime
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class PauseSource(str, Enum):
|
|
41
|
+
"""The source of a PauseAction.
|
|
42
|
+
|
|
43
|
+
Attributes:
|
|
44
|
+
CLIENT: the pause came externally, from the engine client.
|
|
45
|
+
PROTOCOL: the pause came from the protocol itself.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
CLIENT = "client"
|
|
49
|
+
PROTOCOL = "protocol"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@dataclasses.dataclass(frozen=True)
|
|
53
|
+
class PauseAction:
|
|
54
|
+
"""Pause processing commands in the engine."""
|
|
55
|
+
|
|
56
|
+
source: PauseSource
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclasses.dataclass(frozen=True)
|
|
60
|
+
class StopAction:
|
|
61
|
+
"""Request engine execution to stop soon."""
|
|
62
|
+
|
|
63
|
+
from_estop: bool = False
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@dataclasses.dataclass(frozen=True)
|
|
67
|
+
class ResumeFromRecoveryAction:
|
|
68
|
+
"""See `ProtocolEngine.resume_from_recovery()`."""
|
|
69
|
+
|
|
70
|
+
state_update: StateUpdate
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@dataclasses.dataclass(frozen=True)
|
|
74
|
+
class FinishErrorDetails:
|
|
75
|
+
"""Error details for the payload of a FinishAction or HardwareStoppedAction."""
|
|
76
|
+
|
|
77
|
+
error: Exception
|
|
78
|
+
error_id: str
|
|
79
|
+
created_at: datetime
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
@dataclasses.dataclass(frozen=True)
|
|
83
|
+
class FinishAction:
|
|
84
|
+
"""Gracefully stop processing commands in the engine."""
|
|
85
|
+
|
|
86
|
+
set_run_status: bool = True
|
|
87
|
+
"""Whether to set the engine status depending on `error_details`.
|
|
88
|
+
|
|
89
|
+
If True, the engine status will be marked `succeeded` or `failed`, depending on `error_details`.
|
|
90
|
+
If False, the engine status will be marked `stopped`.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
error_details: Optional[FinishErrorDetails] = None
|
|
94
|
+
"""The fatal error that caused the run to fail."""
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@dataclasses.dataclass(frozen=True)
|
|
98
|
+
class HardwareStoppedAction:
|
|
99
|
+
"""An action dispatched after hardware has been stopped for good, for this engine instance."""
|
|
100
|
+
|
|
101
|
+
completed_at: datetime
|
|
102
|
+
|
|
103
|
+
finish_error_details: Optional[FinishErrorDetails]
|
|
104
|
+
"""The error that happened while doing post-run finish steps (homing and dropping tips)."""
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@dataclasses.dataclass(frozen=True)
|
|
108
|
+
class DoorChangeAction:
|
|
109
|
+
"""Handle events coming in from hardware control."""
|
|
110
|
+
|
|
111
|
+
door_state: DoorState
|
|
112
|
+
module_serial: str | None = None
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@dataclasses.dataclass(frozen=True)
|
|
116
|
+
class QueueCommandAction:
|
|
117
|
+
"""Add a command request to the queue."""
|
|
118
|
+
|
|
119
|
+
command_id: str
|
|
120
|
+
created_at: datetime
|
|
121
|
+
request: CommandCreate
|
|
122
|
+
request_hash: Optional[str]
|
|
123
|
+
failed_command_id: Optional[str] = None
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@dataclasses.dataclass(frozen=True)
|
|
127
|
+
class RunCommandAction:
|
|
128
|
+
"""Mark a given command as running.
|
|
129
|
+
|
|
130
|
+
At the time of dispatching this action, the command must be queued,
|
|
131
|
+
and no other command may be running.
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
command_id: str
|
|
135
|
+
started_at: datetime
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
@dataclasses.dataclass(frozen=True)
|
|
139
|
+
class SucceedCommandAction:
|
|
140
|
+
"""Mark a given command as succeeded.
|
|
141
|
+
|
|
142
|
+
At the time of dispatching this action, the command must be running.
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
command: Command
|
|
146
|
+
"""The command in its new succeeded state."""
|
|
147
|
+
|
|
148
|
+
state_update: StateUpdate = dataclasses.field(
|
|
149
|
+
# todo(mm, 2024-08-26): This has a default only to make it easier to transition
|
|
150
|
+
# old tests while https://opentrons.atlassian.net/browse/EXEC-639 is in
|
|
151
|
+
# progress. Make this mandatory when that's completed.
|
|
152
|
+
default_factory=StateUpdate
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@dataclasses.dataclass(frozen=True)
|
|
157
|
+
class FailCommandAction:
|
|
158
|
+
"""Mark a given command as failed.
|
|
159
|
+
|
|
160
|
+
At the time of dispatching this action, the command must be running.
|
|
161
|
+
"""
|
|
162
|
+
|
|
163
|
+
command_id: str
|
|
164
|
+
"""The command to fail."""
|
|
165
|
+
|
|
166
|
+
error_id: str
|
|
167
|
+
"""An ID to assign to the command's error.
|
|
168
|
+
|
|
169
|
+
Must be unique to this occurrence of the error.
|
|
170
|
+
|
|
171
|
+
todo(mm, 2024-05-13): This is redundant with `error` when it's a defined error.
|
|
172
|
+
"""
|
|
173
|
+
|
|
174
|
+
failed_at: datetime
|
|
175
|
+
"""When the command failed.
|
|
176
|
+
|
|
177
|
+
todo(mm, 2024-05-13): This is redundant with `error` when it's a defined error.
|
|
178
|
+
"""
|
|
179
|
+
|
|
180
|
+
error: Union[CommandDefinedErrorData, EnumeratedError]
|
|
181
|
+
"""The error that caused the command to fail.
|
|
182
|
+
|
|
183
|
+
If it was a defined error, this should be the `DefinedErrorData` that the command
|
|
184
|
+
returned.
|
|
185
|
+
|
|
186
|
+
If it was an undefined error, this should be the underlying exception
|
|
187
|
+
that caused the command to fail, represented as an `EnumeratedError`.
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
notes: List[CommandNote]
|
|
191
|
+
"""Overwrite the command's `.notes` with these."""
|
|
192
|
+
|
|
193
|
+
type: ErrorRecoveryType
|
|
194
|
+
"""How this error should be handled in the context of the overall run."""
|
|
195
|
+
|
|
196
|
+
# This is a quick hack so FailCommandAction handlers can get the params of the
|
|
197
|
+
# command that failed. We probably want this to be a new "failure details"
|
|
198
|
+
# object instead, similar to how succeeded commands can send a "private result"
|
|
199
|
+
# to Protocol Engine internals.
|
|
200
|
+
running_command: Command
|
|
201
|
+
"""The command to fail, in its prior `running` state."""
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
@dataclasses.dataclass(frozen=True)
|
|
205
|
+
class AddLabwareOffsetAction:
|
|
206
|
+
"""Add a labware offset, to apply to subsequent `LoadLabwareCommand`s."""
|
|
207
|
+
|
|
208
|
+
labware_offset_id: str
|
|
209
|
+
created_at: datetime
|
|
210
|
+
request: LabwareOffsetCreateInternal
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
@dataclasses.dataclass(frozen=True)
|
|
214
|
+
class AddLabwareDefinitionAction:
|
|
215
|
+
"""Add a labware definition, to apply to subsequent `LoadLabwareCommand`s."""
|
|
216
|
+
|
|
217
|
+
definition: LabwareDefinition
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
@dataclasses.dataclass(frozen=True)
|
|
221
|
+
class AddLiquidAction:
|
|
222
|
+
"""Add a liquid, to apply to subsequent `LoadLiquid`s."""
|
|
223
|
+
|
|
224
|
+
liquid: Liquid
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
@dataclasses.dataclass(frozen=True)
|
|
228
|
+
class SetDeckConfigurationAction:
|
|
229
|
+
"""See `ProtocolEngine.set_deck_configuration()`."""
|
|
230
|
+
|
|
231
|
+
deck_configuration: Optional[DeckConfigurationType]
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
@dataclasses.dataclass(frozen=True)
|
|
235
|
+
class AddAddressableAreaAction:
|
|
236
|
+
"""Add a single addressable area to state.
|
|
237
|
+
|
|
238
|
+
This differs from the deck configuration in SetDeckConfigurationAction which
|
|
239
|
+
sends over a mapping of cutout fixtures. This action will only load one addressable
|
|
240
|
+
area and that should be pre-validated before being sent via the action.
|
|
241
|
+
"""
|
|
242
|
+
|
|
243
|
+
addressable_area_name: str
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
@dataclasses.dataclass(frozen=True)
|
|
247
|
+
class AddModuleAction:
|
|
248
|
+
"""Add an attached module directly to state without a location."""
|
|
249
|
+
|
|
250
|
+
module_id: str
|
|
251
|
+
serial_number: str
|
|
252
|
+
definition: ModuleDefinition
|
|
253
|
+
module_live_data: LiveData
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
@dataclasses.dataclass(frozen=True)
|
|
257
|
+
class ResetTipsAction:
|
|
258
|
+
"""Reset the tip tracking state of a given tip rack."""
|
|
259
|
+
|
|
260
|
+
labware_id: str
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
@dataclasses.dataclass(frozen=True)
|
|
264
|
+
class SetPipetteMovementSpeedAction:
|
|
265
|
+
"""Set the speed of a pipette's X/Y/Z movements. Does not affect plunger speed.
|
|
266
|
+
|
|
267
|
+
None will use the hardware API's default.
|
|
268
|
+
"""
|
|
269
|
+
|
|
270
|
+
pipette_id: str
|
|
271
|
+
speed: Optional[float]
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
@dataclasses.dataclass(frozen=True)
|
|
275
|
+
class SetErrorRecoveryPolicyAction:
|
|
276
|
+
"""See `ProtocolEngine.set_error_recovery_policy()`."""
|
|
277
|
+
|
|
278
|
+
error_recovery_policy: ErrorRecoveryPolicy
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
Action = Union[
|
|
282
|
+
PlayAction,
|
|
283
|
+
PauseAction,
|
|
284
|
+
StopAction,
|
|
285
|
+
ResumeFromRecoveryAction,
|
|
286
|
+
FinishAction,
|
|
287
|
+
HardwareStoppedAction,
|
|
288
|
+
DoorChangeAction,
|
|
289
|
+
QueueCommandAction,
|
|
290
|
+
RunCommandAction,
|
|
291
|
+
SucceedCommandAction,
|
|
292
|
+
FailCommandAction,
|
|
293
|
+
AddLabwareOffsetAction,
|
|
294
|
+
AddLabwareDefinitionAction,
|
|
295
|
+
AddModuleAction,
|
|
296
|
+
SetDeckConfigurationAction,
|
|
297
|
+
AddAddressableAreaAction,
|
|
298
|
+
AddLiquidAction,
|
|
299
|
+
ResetTipsAction,
|
|
300
|
+
SetPipetteMovementSpeedAction,
|
|
301
|
+
SetErrorRecoveryPolicyAction,
|
|
302
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# noqa: D100
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from .actions import (
|
|
6
|
+
Action,
|
|
7
|
+
ResumeFromRecoveryAction,
|
|
8
|
+
SucceedCommandAction,
|
|
9
|
+
FailCommandAction,
|
|
10
|
+
)
|
|
11
|
+
from ..commands.command import DefinedErrorData
|
|
12
|
+
from ..error_recovery_policy import ErrorRecoveryType
|
|
13
|
+
|
|
14
|
+
if TYPE_CHECKING:
|
|
15
|
+
from ..state.update_types import StateUpdate
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def get_state_updates(action: Action) -> list[StateUpdate]:
|
|
19
|
+
"""Extract all the StateUpdates that the StateStores should apply when they apply an action."""
|
|
20
|
+
if isinstance(action, SucceedCommandAction):
|
|
21
|
+
return [action.state_update]
|
|
22
|
+
|
|
23
|
+
elif isinstance(action, FailCommandAction) and isinstance(
|
|
24
|
+
action.error, DefinedErrorData
|
|
25
|
+
):
|
|
26
|
+
if action.type == ErrorRecoveryType.ASSUME_FALSE_POSITIVE_AND_CONTINUE:
|
|
27
|
+
return [
|
|
28
|
+
action.error.state_update,
|
|
29
|
+
action.error.state_update_if_false_positive,
|
|
30
|
+
]
|
|
31
|
+
else:
|
|
32
|
+
return [action.error.state_update]
|
|
33
|
+
|
|
34
|
+
elif isinstance(action, ResumeFromRecoveryAction):
|
|
35
|
+
return [action.state_update]
|
|
36
|
+
|
|
37
|
+
else:
|
|
38
|
+
return []
|