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,76 @@
|
|
|
1
|
+
"""Wait for duration command request, result, and implementation models."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import TYPE_CHECKING, Optional, Type, Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
7
|
+
from typing_extensions import Literal
|
|
8
|
+
|
|
9
|
+
from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
10
|
+
from ..errors.error_occurrence import ErrorOccurrence
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from ..execution import RunControlHandler
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
WaitForDurationCommandType = Literal["waitForDuration"]
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _remove_default(s: dict[str, Any]) -> None:
|
|
20
|
+
s.pop("default", None)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class WaitForDurationParams(BaseModel):
|
|
24
|
+
"""Payload required to pause the protocol."""
|
|
25
|
+
|
|
26
|
+
seconds: float = Field(..., description="Duration, in seconds, to wait for.")
|
|
27
|
+
message: str | SkipJsonSchema[None] = Field(
|
|
28
|
+
None,
|
|
29
|
+
description="A user-facing message associated with the pause",
|
|
30
|
+
json_schema_extra=_remove_default,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class WaitForDurationResult(BaseModel):
|
|
35
|
+
"""Result data from the execution of a wait for duration command."""
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class WaitForDurationImplementation(
|
|
39
|
+
AbstractCommandImpl[WaitForDurationParams, SuccessData[WaitForDurationResult]]
|
|
40
|
+
):
|
|
41
|
+
"""Wait for duration command implementation."""
|
|
42
|
+
|
|
43
|
+
def __init__(self, run_control: RunControlHandler, **kwargs: object) -> None:
|
|
44
|
+
self._run_control = run_control
|
|
45
|
+
|
|
46
|
+
async def execute(
|
|
47
|
+
self, params: WaitForDurationParams
|
|
48
|
+
) -> SuccessData[WaitForDurationResult]:
|
|
49
|
+
"""Wait for a duration of time."""
|
|
50
|
+
await self._run_control.wait_for_duration(params.seconds)
|
|
51
|
+
return SuccessData(
|
|
52
|
+
public=WaitForDurationResult(),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class WaitForDuration(
|
|
57
|
+
BaseCommand[WaitForDurationParams, WaitForDurationResult, ErrorOccurrence]
|
|
58
|
+
):
|
|
59
|
+
"""Wait for duration command model."""
|
|
60
|
+
|
|
61
|
+
commandType: WaitForDurationCommandType = "waitForDuration"
|
|
62
|
+
params: WaitForDurationParams
|
|
63
|
+
result: Optional[WaitForDurationResult] = None
|
|
64
|
+
|
|
65
|
+
_ImplementationCls: Type[
|
|
66
|
+
WaitForDurationImplementation
|
|
67
|
+
] = WaitForDurationImplementation
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class WaitForDurationCreate(BaseCommandCreate[WaitForDurationParams]):
|
|
71
|
+
"""Wait for duration command request model."""
|
|
72
|
+
|
|
73
|
+
commandType: WaitForDurationCommandType = "waitForDuration"
|
|
74
|
+
params: WaitForDurationParams
|
|
75
|
+
|
|
76
|
+
_CommandCls: Type[WaitForDuration] = WaitForDuration
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""Wait for resume command request, result, and implementation models."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
from typing import TYPE_CHECKING, Optional, Type, Any
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field
|
|
6
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
7
|
+
from typing_extensions import Literal
|
|
8
|
+
|
|
9
|
+
from .command import AbstractCommandImpl, BaseCommand, BaseCommandCreate, SuccessData
|
|
10
|
+
from ..errors.error_occurrence import ErrorOccurrence
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from ..execution import RunControlHandler
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# NOTE: multiple values accepted for backwards compatibility
|
|
17
|
+
# with the 6.0.0-beta.0 release, which used `pause`
|
|
18
|
+
WaitForResumeCommandType = Literal["waitForResume", "pause"]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _remove_default(s: dict[str, Any]) -> None:
|
|
22
|
+
s.pop("default", None)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class WaitForResumeParams(BaseModel):
|
|
26
|
+
"""Payload required to pause the protocol."""
|
|
27
|
+
|
|
28
|
+
message: str | SkipJsonSchema[None] = Field(
|
|
29
|
+
None,
|
|
30
|
+
description="A user-facing message associated with the pause",
|
|
31
|
+
json_schema_extra=_remove_default,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class WaitForResumeResult(BaseModel):
|
|
36
|
+
"""Result data from the execution of a WaitForResume command."""
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class WaitForResumeImplementation(
|
|
40
|
+
AbstractCommandImpl[WaitForResumeParams, SuccessData[WaitForResumeResult]]
|
|
41
|
+
):
|
|
42
|
+
"""Wait for resume command implementation."""
|
|
43
|
+
|
|
44
|
+
def __init__(self, run_control: RunControlHandler, **kwargs: object) -> None:
|
|
45
|
+
self._run_control = run_control
|
|
46
|
+
|
|
47
|
+
async def execute(
|
|
48
|
+
self, params: WaitForResumeParams
|
|
49
|
+
) -> SuccessData[WaitForResumeResult]:
|
|
50
|
+
"""Dispatch a PauseAction to the store to pause the protocol."""
|
|
51
|
+
await self._run_control.wait_for_resume()
|
|
52
|
+
return SuccessData(
|
|
53
|
+
public=WaitForResumeResult(),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class WaitForResume(
|
|
58
|
+
BaseCommand[WaitForResumeParams, WaitForResumeResult, ErrorOccurrence]
|
|
59
|
+
):
|
|
60
|
+
"""Wait for resume command model."""
|
|
61
|
+
|
|
62
|
+
commandType: WaitForResumeCommandType = "waitForResume"
|
|
63
|
+
params: WaitForResumeParams
|
|
64
|
+
result: Optional[WaitForResumeResult] = None
|
|
65
|
+
|
|
66
|
+
_ImplementationCls: Type[WaitForResumeImplementation] = WaitForResumeImplementation
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class WaitForResumeCreate(BaseCommandCreate[WaitForResumeParams]):
|
|
70
|
+
"""Wait for resume command request model."""
|
|
71
|
+
|
|
72
|
+
commandType: WaitForResumeCommandType = "waitForResume"
|
|
73
|
+
params: WaitForResumeParams
|
|
74
|
+
|
|
75
|
+
_CommandCls: Type[WaitForResume] = WaitForResume
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"""Main ProtocolEngine factory."""
|
|
2
|
+
import asyncio
|
|
3
|
+
import contextlib
|
|
4
|
+
import typing
|
|
5
|
+
|
|
6
|
+
from opentrons.hardware_control import HardwareControlAPI
|
|
7
|
+
from opentrons.hardware_control.types import DoorState
|
|
8
|
+
from opentrons.protocol_engine.execution.error_recovery_hardware_state_synchronizer import (
|
|
9
|
+
ErrorRecoveryHardwareStateSynchronizer,
|
|
10
|
+
)
|
|
11
|
+
from opentrons.protocol_engine.resources.labware_data_provider import (
|
|
12
|
+
LabwareDataProvider,
|
|
13
|
+
)
|
|
14
|
+
from opentrons.util.async_helpers import async_context_manager_in_thread
|
|
15
|
+
|
|
16
|
+
from opentrons_shared_data.robot import load as load_robot
|
|
17
|
+
|
|
18
|
+
from .actions.action_dispatcher import ActionDispatcher
|
|
19
|
+
from .error_recovery_policy import ErrorRecoveryPolicy
|
|
20
|
+
from .execution.door_watcher import DoorWatcher
|
|
21
|
+
from .execution.hardware_stopper import HardwareStopper
|
|
22
|
+
from .plugins import PluginStarter
|
|
23
|
+
from .protocol_engine import ProtocolEngine
|
|
24
|
+
from .resources import DeckDataProvider, ModuleDataProvider, FileProvider, ModelUtils
|
|
25
|
+
from .state.config import Config
|
|
26
|
+
from .state.state import StateStore
|
|
27
|
+
from .types import PostRunHardwareState, DeckConfigurationType
|
|
28
|
+
|
|
29
|
+
from .engine_support import create_run_orchestrator
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
# TODO(mm, 2023-06-16): Arguably, this not being a context manager makes us prone to forgetting to
|
|
33
|
+
# clean it up properly, especially in tests. See e.g. https://opentrons.atlassian.net/browse/RSS-222
|
|
34
|
+
async def create_protocol_engine(
|
|
35
|
+
hardware_api: HardwareControlAPI,
|
|
36
|
+
config: Config,
|
|
37
|
+
error_recovery_policy: ErrorRecoveryPolicy,
|
|
38
|
+
load_fixed_trash: bool = False,
|
|
39
|
+
deck_configuration: typing.Optional[DeckConfigurationType] = None,
|
|
40
|
+
file_provider: typing.Optional[FileProvider] = None,
|
|
41
|
+
notify_publishers: typing.Optional[typing.Callable[[], None]] = None,
|
|
42
|
+
) -> ProtocolEngine:
|
|
43
|
+
"""Create a ProtocolEngine instance.
|
|
44
|
+
|
|
45
|
+
Arguments:
|
|
46
|
+
hardware_api: Hardware control API to pass down to dependencies.
|
|
47
|
+
config: ProtocolEngine configuration.
|
|
48
|
+
error_recovery_policy: The error recovery policy to create the engine with.
|
|
49
|
+
See documentation on `ErrorRecoveryPolicy`.
|
|
50
|
+
load_fixed_trash: Automatically load fixed trash labware in engine.
|
|
51
|
+
deck_configuration: The initial deck configuration the engine will be instantiated with.
|
|
52
|
+
file_provider: Provides access to robot server file writing procedures for protocol output.
|
|
53
|
+
notify_publishers: Notifies robot server publishers of internal state change.
|
|
54
|
+
"""
|
|
55
|
+
deck_data = DeckDataProvider(config.deck_type)
|
|
56
|
+
deck_definition = await deck_data.get_deck_definition()
|
|
57
|
+
deck_fixed_labware = await deck_data.get_deck_fixed_labware(
|
|
58
|
+
load_fixed_trash, deck_definition, deck_configuration
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
module_calibration_offsets = ModuleDataProvider.load_module_calibrations()
|
|
62
|
+
robot_definition = load_robot(config.robot_type)
|
|
63
|
+
|
|
64
|
+
state_store = StateStore(
|
|
65
|
+
config=config,
|
|
66
|
+
deck_definition=deck_definition,
|
|
67
|
+
deck_fixed_labware=deck_fixed_labware,
|
|
68
|
+
robot_definition=robot_definition,
|
|
69
|
+
is_door_open=hardware_api.door_state is DoorState.OPEN,
|
|
70
|
+
error_recovery_policy=error_recovery_policy,
|
|
71
|
+
module_calibration_offsets=module_calibration_offsets,
|
|
72
|
+
deck_configuration=deck_configuration,
|
|
73
|
+
notify_publishers=notify_publishers,
|
|
74
|
+
)
|
|
75
|
+
hardware_state_synchronizer = ErrorRecoveryHardwareStateSynchronizer(
|
|
76
|
+
hardware_api, state_store
|
|
77
|
+
)
|
|
78
|
+
action_dispatcher = ActionDispatcher(state_store)
|
|
79
|
+
action_dispatcher.add_handler(hardware_state_synchronizer)
|
|
80
|
+
plugin_starter = PluginStarter(state_store, action_dispatcher)
|
|
81
|
+
model_utils = ModelUtils()
|
|
82
|
+
hardware_stopper = HardwareStopper(hardware_api, state_store)
|
|
83
|
+
door_watcher = DoorWatcher(state_store, hardware_api, action_dispatcher)
|
|
84
|
+
module_data_provider = ModuleDataProvider()
|
|
85
|
+
file_provider = file_provider or FileProvider()
|
|
86
|
+
|
|
87
|
+
pe = ProtocolEngine(
|
|
88
|
+
hardware_api=hardware_api,
|
|
89
|
+
state_store=state_store,
|
|
90
|
+
action_dispatcher=action_dispatcher,
|
|
91
|
+
plugin_starter=plugin_starter,
|
|
92
|
+
model_utils=model_utils,
|
|
93
|
+
hardware_stopper=hardware_stopper,
|
|
94
|
+
door_watcher=door_watcher,
|
|
95
|
+
module_data_provider=module_data_provider,
|
|
96
|
+
file_provider=file_provider,
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
# todo(mm, 2024-11-08): This is a quick hack to support the absorbance reader, which
|
|
100
|
+
# expects the engine to have this special labware definition available. It would be
|
|
101
|
+
# cleaner for the `loadModule` command to do this I/O and insert the definition
|
|
102
|
+
# into state. That gets easier after https://opentrons.atlassian.net/browse/EXEC-756.
|
|
103
|
+
#
|
|
104
|
+
# NOTE: This needs to stay in sync with LabwareView.get_absorbance_reader_lid_definition().
|
|
105
|
+
pe.add_labware_definition(
|
|
106
|
+
await LabwareDataProvider().get_labware_definition(
|
|
107
|
+
"opentrons_flex_lid_absorbance_plate_reader_module", "opentrons", 1
|
|
108
|
+
)
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
return pe
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@contextlib.contextmanager
|
|
115
|
+
def create_protocol_engine_in_thread(
|
|
116
|
+
hardware_api: HardwareControlAPI,
|
|
117
|
+
config: Config,
|
|
118
|
+
deck_configuration: typing.Optional[DeckConfigurationType],
|
|
119
|
+
file_provider: typing.Optional[FileProvider],
|
|
120
|
+
error_recovery_policy: ErrorRecoveryPolicy,
|
|
121
|
+
drop_tips_after_run: bool,
|
|
122
|
+
post_run_hardware_state: PostRunHardwareState,
|
|
123
|
+
load_fixed_trash: bool = False,
|
|
124
|
+
) -> typing.Generator[
|
|
125
|
+
typing.Tuple[ProtocolEngine, asyncio.AbstractEventLoop], None, None
|
|
126
|
+
]:
|
|
127
|
+
"""Run a `ProtocolEngine` in a worker thread.
|
|
128
|
+
|
|
129
|
+
When this context manager is entered, it:
|
|
130
|
+
|
|
131
|
+
1. Starts a worker thread.
|
|
132
|
+
2. Starts an asyncio event loop in that worker thread.
|
|
133
|
+
3. Creates and `.play()`s a `ProtocolEngine` in that event loop.
|
|
134
|
+
4. Returns the `ProtocolEngine` and the event loop.
|
|
135
|
+
Use functions like `asyncio.run_coroutine_threadsafe()` to safely interact with
|
|
136
|
+
the `ProtocolEngine` from your thread.
|
|
137
|
+
|
|
138
|
+
When this context manager is exited, it:
|
|
139
|
+
|
|
140
|
+
1. Cleans up the `ProtocolEngine`.
|
|
141
|
+
2. Stops and cleans up the event loop.
|
|
142
|
+
3. Joins the thread.
|
|
143
|
+
"""
|
|
144
|
+
with async_context_manager_in_thread(
|
|
145
|
+
_protocol_engine(
|
|
146
|
+
hardware_api,
|
|
147
|
+
file_provider,
|
|
148
|
+
config,
|
|
149
|
+
deck_configuration,
|
|
150
|
+
error_recovery_policy,
|
|
151
|
+
drop_tips_after_run,
|
|
152
|
+
post_run_hardware_state,
|
|
153
|
+
load_fixed_trash,
|
|
154
|
+
)
|
|
155
|
+
) as (
|
|
156
|
+
protocol_engine,
|
|
157
|
+
loop,
|
|
158
|
+
):
|
|
159
|
+
yield protocol_engine, loop
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
@contextlib.asynccontextmanager
|
|
163
|
+
async def _protocol_engine(
|
|
164
|
+
hardware_api: HardwareControlAPI,
|
|
165
|
+
file_provider: typing.Optional[FileProvider],
|
|
166
|
+
config: Config,
|
|
167
|
+
deck_configuration: typing.Optional[DeckConfigurationType],
|
|
168
|
+
error_recovery_policy: ErrorRecoveryPolicy,
|
|
169
|
+
drop_tips_after_run: bool,
|
|
170
|
+
post_run_hardware_state: PostRunHardwareState,
|
|
171
|
+
load_fixed_trash: bool = False,
|
|
172
|
+
) -> typing.AsyncGenerator[ProtocolEngine, None]:
|
|
173
|
+
protocol_engine = await create_protocol_engine(
|
|
174
|
+
hardware_api=hardware_api,
|
|
175
|
+
file_provider=file_provider,
|
|
176
|
+
config=config,
|
|
177
|
+
error_recovery_policy=error_recovery_policy,
|
|
178
|
+
load_fixed_trash=load_fixed_trash,
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# TODO(tz, 6-20-2024): This feels like a hack, we should probably return the orchestrator instead of pe.
|
|
182
|
+
orchestrator = create_run_orchestrator(
|
|
183
|
+
hardware_api=hardware_api,
|
|
184
|
+
protocol_engine=protocol_engine,
|
|
185
|
+
)
|
|
186
|
+
try:
|
|
187
|
+
orchestrator.play(deck_configuration)
|
|
188
|
+
yield protocol_engine
|
|
189
|
+
finally:
|
|
190
|
+
await orchestrator.finish(
|
|
191
|
+
drop_tips_after_run=drop_tips_after_run,
|
|
192
|
+
post_run_hardware_state=post_run_hardware_state,
|
|
193
|
+
)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Support for create_protocol_engine module."""
|
|
2
|
+
from . import ProtocolEngine
|
|
3
|
+
from ..hardware_control import HardwareControlAPI
|
|
4
|
+
|
|
5
|
+
from opentrons.protocol_runner import protocol_runner, RunOrchestrator
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def create_run_orchestrator(
|
|
9
|
+
hardware_api: HardwareControlAPI,
|
|
10
|
+
protocol_engine: ProtocolEngine,
|
|
11
|
+
) -> RunOrchestrator:
|
|
12
|
+
"""Create a RunOrchestrator instance."""
|
|
13
|
+
return RunOrchestrator(
|
|
14
|
+
protocol_engine=protocol_engine,
|
|
15
|
+
hardware_api=hardware_api,
|
|
16
|
+
setup_runner=protocol_runner.LiveRunner(
|
|
17
|
+
protocol_engine=protocol_engine,
|
|
18
|
+
hardware_api=hardware_api,
|
|
19
|
+
),
|
|
20
|
+
fixit_runner=protocol_runner.LiveRunner(
|
|
21
|
+
protocol_engine=protocol_engine,
|
|
22
|
+
hardware_api=hardware_api,
|
|
23
|
+
),
|
|
24
|
+
protocol_live_runner=protocol_runner.LiveRunner(
|
|
25
|
+
protocol_engine=protocol_engine,
|
|
26
|
+
hardware_api=hardware_api,
|
|
27
|
+
),
|
|
28
|
+
)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# noqa: D100
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import enum
|
|
6
|
+
from typing import Optional, Protocol, TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from opentrons.protocol_engine.commands import (
|
|
10
|
+
Command,
|
|
11
|
+
CommandDefinedErrorData,
|
|
12
|
+
)
|
|
13
|
+
from opentrons.protocol_engine.state.config import Config
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ErrorRecoveryType(enum.Enum):
|
|
17
|
+
"""Ways to handle a command failure."""
|
|
18
|
+
|
|
19
|
+
FAIL_RUN = enum.auto()
|
|
20
|
+
"""Permanently fail the entire run.
|
|
21
|
+
|
|
22
|
+
TODO(mm, 2024-03-18): This might be a misnomer because failing the run is not
|
|
23
|
+
a decision that's up to Protocol Engine. It's decided by what the caller supplies
|
|
24
|
+
to `ProtocolEngine.finish()`. For example, a Python protocol can
|
|
25
|
+
theoretically swallow the exception and continue on.
|
|
26
|
+
"""
|
|
27
|
+
|
|
28
|
+
WAIT_FOR_RECOVERY = enum.auto()
|
|
29
|
+
"""Enter interactive error recovery mode."""
|
|
30
|
+
|
|
31
|
+
CONTINUE_WITH_ERROR = enum.auto()
|
|
32
|
+
"""Continue without interruption, carrying on from whatever error state the failed
|
|
33
|
+
command left the engine in.
|
|
34
|
+
|
|
35
|
+
This is like `ProtocolEngine.resume_from_recovery(reconcile_false_positive=False)`.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
ASSUME_FALSE_POSITIVE_AND_CONTINUE = enum.auto()
|
|
39
|
+
"""Continue without interruption, acting as if the underlying error was a false positive.
|
|
40
|
+
|
|
41
|
+
This is like `ProtocolEngine.resume_from_recovery(reconcile_false_positive=True)`.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ErrorRecoveryPolicy(Protocol):
|
|
46
|
+
"""An interface to decide how to handle a command failure.
|
|
47
|
+
|
|
48
|
+
This describes a function that Protocol Engine calls after each command failure,
|
|
49
|
+
with the details of that failure. The implementation should inspect those details
|
|
50
|
+
and return an appropriate `ErrorRecoveryType`.
|
|
51
|
+
|
|
52
|
+
Args:
|
|
53
|
+
config: The config of the calling `ProtocolEngine`.
|
|
54
|
+
failed_command: The command that failed, in its final `status=="failed"` state.
|
|
55
|
+
defined_error_data: If the command failed with a defined error, details about
|
|
56
|
+
that error. If the command failed with an undefined error, `None`.
|
|
57
|
+
By design, this callable isn't given details about undefined errors,
|
|
58
|
+
since it would be fragile to rely on them.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
@staticmethod
|
|
62
|
+
def __call__( # noqa: D102
|
|
63
|
+
config: Config,
|
|
64
|
+
failed_command: Command,
|
|
65
|
+
defined_error_data: Optional[CommandDefinedErrorData],
|
|
66
|
+
) -> ErrorRecoveryType:
|
|
67
|
+
...
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def never_recover(
|
|
71
|
+
config: Config,
|
|
72
|
+
failed_command: Command,
|
|
73
|
+
defined_error_data: Optional[CommandDefinedErrorData],
|
|
74
|
+
) -> ErrorRecoveryType:
|
|
75
|
+
"""An error recovery policy where error recovery is never attempted.
|
|
76
|
+
|
|
77
|
+
This makes sense for things like the `opentrons_simulate` and `opentrons_execute`
|
|
78
|
+
CLIs. Those don't expose any way to bring the run out of recovery mode after it's
|
|
79
|
+
been entered, so we need to avoid entering recovery mode in the first place.
|
|
80
|
+
"""
|
|
81
|
+
return ErrorRecoveryType.FAIL_RUN
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"""Protocol engine errors module."""
|
|
2
|
+
|
|
3
|
+
from .exceptions import (
|
|
4
|
+
ProtocolEngineError,
|
|
5
|
+
UnexpectedProtocolError,
|
|
6
|
+
FailedToLoadPipetteError,
|
|
7
|
+
PipetteNotAttachedError,
|
|
8
|
+
InvalidSpecificationForRobotTypeError,
|
|
9
|
+
InvalidLoadPipetteSpecsError,
|
|
10
|
+
TipNotAttachedError,
|
|
11
|
+
PickUpTipTipNotAttachedError,
|
|
12
|
+
TipAttachedError,
|
|
13
|
+
CommandDoesNotExistError,
|
|
14
|
+
UnsupportedLabwareForActionError,
|
|
15
|
+
LabwareNotLoadedError,
|
|
16
|
+
LabwareNotLoadedOnModuleError,
|
|
17
|
+
LabwareNotLoadedOnLabwareError,
|
|
18
|
+
LabwareNotOnDeckError,
|
|
19
|
+
LiquidDoesNotExistError,
|
|
20
|
+
LabwareDefinitionDoesNotExistError,
|
|
21
|
+
LabwareCannotBeStackedError,
|
|
22
|
+
LabwareCannotSitOnDeckError,
|
|
23
|
+
LabwareIsInStackError,
|
|
24
|
+
LabwareOffsetDoesNotExistError,
|
|
25
|
+
LabwareIsNotTipRackError,
|
|
26
|
+
LabwareIsTipRackError,
|
|
27
|
+
LabwareIsAdapterError,
|
|
28
|
+
TouchTipDisabledError,
|
|
29
|
+
TouchTipIncompatibleArgumentsError,
|
|
30
|
+
WellDoesNotExistError,
|
|
31
|
+
PipetteNotLoadedError,
|
|
32
|
+
ModuleNotLoadedError,
|
|
33
|
+
ModuleNotOnDeckError,
|
|
34
|
+
ModuleNotConnectedError,
|
|
35
|
+
SlotDoesNotExistError,
|
|
36
|
+
CutoutDoesNotExistError,
|
|
37
|
+
FixtureDoesNotExistError,
|
|
38
|
+
AddressableAreaDoesNotExistError,
|
|
39
|
+
FixtureDoesNotProvideAreasError,
|
|
40
|
+
AreaNotInDeckConfigurationError,
|
|
41
|
+
IncompatibleAddressableAreaError,
|
|
42
|
+
FailedToPlanMoveError,
|
|
43
|
+
MustHomeError,
|
|
44
|
+
RunStoppedError,
|
|
45
|
+
SetupCommandNotAllowedError,
|
|
46
|
+
FixitCommandNotAllowedError,
|
|
47
|
+
ModuleNotAttachedError,
|
|
48
|
+
ModuleAlreadyPresentError,
|
|
49
|
+
WrongModuleTypeError,
|
|
50
|
+
ThermocyclerNotOpenError,
|
|
51
|
+
RobotDoorOpenError,
|
|
52
|
+
PipetteMovementRestrictedByHeaterShakerError,
|
|
53
|
+
HeaterShakerLabwareLatchNotOpenError,
|
|
54
|
+
HeaterShakerLabwareLatchStatusUnknown,
|
|
55
|
+
EngageHeightOutOfRangeError,
|
|
56
|
+
NoTargetTemperatureSetError,
|
|
57
|
+
InvalidTargetSpeedError,
|
|
58
|
+
InvalidTargetTemperatureError,
|
|
59
|
+
InvalidBlockVolumeError,
|
|
60
|
+
InvalidHoldTimeError,
|
|
61
|
+
InvalidWavelengthError,
|
|
62
|
+
CannotPerformModuleAction,
|
|
63
|
+
PauseNotAllowedError,
|
|
64
|
+
ResumeFromRecoveryNotAllowedError,
|
|
65
|
+
GripperNotAttachedError,
|
|
66
|
+
CannotPerformGripperAction,
|
|
67
|
+
HardwareNotSupportedError,
|
|
68
|
+
LabwareMovementNotAllowedError,
|
|
69
|
+
LabwareIsNotAllowedInLocationError,
|
|
70
|
+
LocationIsOccupiedError,
|
|
71
|
+
LocationNotAccessibleByPipetteError,
|
|
72
|
+
LocationIsStagingSlotError,
|
|
73
|
+
LocationIsLidDockSlotError,
|
|
74
|
+
InvalidAxisForRobotType,
|
|
75
|
+
NotSupportedOnRobotType,
|
|
76
|
+
CommandNotAllowedError,
|
|
77
|
+
InvalidLiquidHeightFound,
|
|
78
|
+
LiquidHeightUnknownError,
|
|
79
|
+
LiquidVolumeUnknownError,
|
|
80
|
+
IncompleteLabwareDefinitionError,
|
|
81
|
+
InvalidUserDefinedVolumesError,
|
|
82
|
+
IncompleteWellDefinitionError,
|
|
83
|
+
OperationLocationNotInWellError,
|
|
84
|
+
InvalidDispenseVolumeError,
|
|
85
|
+
StorageLimitReachedError,
|
|
86
|
+
InvalidLiquidError,
|
|
87
|
+
LiquidClassDoesNotExistError,
|
|
88
|
+
LiquidClassRedefinitionError,
|
|
89
|
+
OffsetLocationInvalidError,
|
|
90
|
+
FlexStackerLabwarePoolNotYetDefinedError,
|
|
91
|
+
FlexStackerNotLogicallyEmptyError,
|
|
92
|
+
InvalidLabwarePositionError,
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
from .error_occurrence import ErrorOccurrence, ProtocolCommandFailedError
|
|
96
|
+
|
|
97
|
+
__all__ = [
|
|
98
|
+
# exceptions
|
|
99
|
+
"ProtocolEngineError",
|
|
100
|
+
"UnexpectedProtocolError",
|
|
101
|
+
"FailedToLoadPipetteError",
|
|
102
|
+
"PipetteNotAttachedError",
|
|
103
|
+
"InvalidSpecificationForRobotTypeError",
|
|
104
|
+
"InvalidLoadPipetteSpecsError",
|
|
105
|
+
"TipNotAttachedError",
|
|
106
|
+
"PickUpTipTipNotAttachedError",
|
|
107
|
+
"TipAttachedError",
|
|
108
|
+
"CommandDoesNotExistError",
|
|
109
|
+
"LabwareNotLoadedError",
|
|
110
|
+
"LabwareNotLoadedOnModuleError",
|
|
111
|
+
"LabwareNotLoadedOnLabwareError",
|
|
112
|
+
"LabwareNotOnDeckError",
|
|
113
|
+
"LiquidDoesNotExistError",
|
|
114
|
+
"UnsupportedLabwareForActionError",
|
|
115
|
+
"LabwareDefinitionDoesNotExistError",
|
|
116
|
+
"LabwareCannotBeStackedError",
|
|
117
|
+
"LabwareCannotSitOnDeckError",
|
|
118
|
+
"LabwareIsInStackError",
|
|
119
|
+
"LabwareOffsetDoesNotExistError",
|
|
120
|
+
"LabwareIsNotTipRackError",
|
|
121
|
+
"LabwareIsTipRackError",
|
|
122
|
+
"LabwareIsAdapterError",
|
|
123
|
+
"TouchTipDisabledError",
|
|
124
|
+
"TouchTipIncompatibleArgumentsError",
|
|
125
|
+
"WellDoesNotExistError",
|
|
126
|
+
"PipetteNotLoadedError",
|
|
127
|
+
"ModuleNotLoadedError",
|
|
128
|
+
"ModuleNotOnDeckError",
|
|
129
|
+
"ModuleNotConnectedError",
|
|
130
|
+
"SlotDoesNotExistError",
|
|
131
|
+
"CutoutDoesNotExistError",
|
|
132
|
+
"FixtureDoesNotExistError",
|
|
133
|
+
"AddressableAreaDoesNotExistError",
|
|
134
|
+
"FixtureDoesNotProvideAreasError",
|
|
135
|
+
"AreaNotInDeckConfigurationError",
|
|
136
|
+
"IncompatibleAddressableAreaError",
|
|
137
|
+
"FailedToPlanMoveError",
|
|
138
|
+
"MustHomeError",
|
|
139
|
+
"RunStoppedError",
|
|
140
|
+
"SetupCommandNotAllowedError",
|
|
141
|
+
"FixitCommandNotAllowedError",
|
|
142
|
+
"ModuleNotAttachedError",
|
|
143
|
+
"ModuleAlreadyPresentError",
|
|
144
|
+
"WrongModuleTypeError",
|
|
145
|
+
"ThermocyclerNotOpenError",
|
|
146
|
+
"RobotDoorOpenError",
|
|
147
|
+
"PipetteMovementRestrictedByHeaterShakerError",
|
|
148
|
+
"HeaterShakerLabwareLatchNotOpenError",
|
|
149
|
+
"HeaterShakerLabwareLatchStatusUnknown",
|
|
150
|
+
"EngageHeightOutOfRangeError",
|
|
151
|
+
"NoTargetTemperatureSetError",
|
|
152
|
+
"InvalidTargetTemperatureError",
|
|
153
|
+
"InvalidTargetSpeedError",
|
|
154
|
+
"InvalidBlockVolumeError",
|
|
155
|
+
"InvalidHoldTimeError",
|
|
156
|
+
"InvalidLiquidError",
|
|
157
|
+
"InvalidWavelengthError",
|
|
158
|
+
"CannotPerformModuleAction",
|
|
159
|
+
"ResumeFromRecoveryNotAllowedError",
|
|
160
|
+
"PauseNotAllowedError",
|
|
161
|
+
"ProtocolCommandFailedError",
|
|
162
|
+
"GripperNotAttachedError",
|
|
163
|
+
"CannotPerformGripperAction",
|
|
164
|
+
"HardwareNotSupportedError",
|
|
165
|
+
"LabwareMovementNotAllowedError",
|
|
166
|
+
"LabwareIsNotAllowedInLocationError",
|
|
167
|
+
"LocationIsOccupiedError",
|
|
168
|
+
"LocationNotAccessibleByPipetteError",
|
|
169
|
+
"LocationIsStagingSlotError",
|
|
170
|
+
"LocationIsLidDockSlotError",
|
|
171
|
+
"InvalidAxisForRobotType",
|
|
172
|
+
"NotSupportedOnRobotType",
|
|
173
|
+
"OffsetLocationInvalidError",
|
|
174
|
+
"FlexStackerLabwarePoolNotYetDefinedError",
|
|
175
|
+
"FlexStackerNotLogicallyEmptyError",
|
|
176
|
+
"InvalidLabwarePositionError",
|
|
177
|
+
# error occurrence models
|
|
178
|
+
"ErrorOccurrence",
|
|
179
|
+
"CommandNotAllowedError",
|
|
180
|
+
"InvalidLiquidHeightFound",
|
|
181
|
+
"LiquidHeightUnknownError",
|
|
182
|
+
"LiquidVolumeUnknownError",
|
|
183
|
+
"IncompleteLabwareDefinitionError",
|
|
184
|
+
"InvalidUserDefinedVolumesError",
|
|
185
|
+
"IncompleteWellDefinitionError",
|
|
186
|
+
"OperationLocationNotInWellError",
|
|
187
|
+
"InvalidDispenseVolumeError",
|
|
188
|
+
"StorageLimitReachedError",
|
|
189
|
+
"LiquidClassDoesNotExistError",
|
|
190
|
+
"LiquidClassRedefinitionError",
|
|
191
|
+
]
|