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,1308 @@
|
|
|
1
|
+
"""Protocol engine exceptions."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from logging import getLogger
|
|
6
|
+
from typing import Any, Dict, Final, Optional, Union, Iterator, Sequence, TYPE_CHECKING
|
|
7
|
+
|
|
8
|
+
from opentrons_shared_data.errors import ErrorCodes
|
|
9
|
+
from opentrons_shared_data.errors.exceptions import EnumeratedError, PythonException
|
|
10
|
+
|
|
11
|
+
if TYPE_CHECKING:
|
|
12
|
+
from opentrons.protocol_engine.types import TipGeometry
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
log = getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ProtocolEngineError(EnumeratedError):
|
|
19
|
+
"""Base Protocol Engine error class."""
|
|
20
|
+
|
|
21
|
+
def __init__(
|
|
22
|
+
self,
|
|
23
|
+
code: Optional[ErrorCodes] = None,
|
|
24
|
+
message: Optional[str] = None,
|
|
25
|
+
detail: Optional[Dict[str, Any]] = None,
|
|
26
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
27
|
+
) -> None:
|
|
28
|
+
"""Build a ProtocolEngineError."""
|
|
29
|
+
super().__init__(
|
|
30
|
+
code=code or ErrorCodes.GENERAL_ERROR,
|
|
31
|
+
message=message,
|
|
32
|
+
detail=detail,
|
|
33
|
+
wrapping=wrapping,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class UnexpectedProtocolError(ProtocolEngineError):
|
|
38
|
+
"""Raised when an unexpected error occurs.
|
|
39
|
+
|
|
40
|
+
This error is indicative of a software bug. If it happens, it means an
|
|
41
|
+
exception was raised somewhere in the stack and it was not properly caught
|
|
42
|
+
and wrapped.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
def __init__(
|
|
46
|
+
self,
|
|
47
|
+
message: Optional[str] = None,
|
|
48
|
+
wrapping: Optional[Sequence[Union[EnumeratedError, BaseException]]] = None,
|
|
49
|
+
) -> None:
|
|
50
|
+
"""Initialize an UnexpectedProtocolError with an original error."""
|
|
51
|
+
|
|
52
|
+
def _convert_exc() -> Iterator[EnumeratedError]:
|
|
53
|
+
if not wrapping:
|
|
54
|
+
return
|
|
55
|
+
for exc in wrapping:
|
|
56
|
+
if isinstance(exc, EnumeratedError):
|
|
57
|
+
yield exc
|
|
58
|
+
else:
|
|
59
|
+
yield PythonException(exc)
|
|
60
|
+
|
|
61
|
+
super().__init__(
|
|
62
|
+
code=ErrorCodes.GENERAL_ERROR,
|
|
63
|
+
message=message,
|
|
64
|
+
wrapping=[e for e in _convert_exc()],
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
# TODO(mc, 2020-10-18): differentiate between pipette missing vs incorrect.
|
|
69
|
+
# By comparison, loadModule uses ModuleAlreadyPresentError and ModuleNotAttachedError.
|
|
70
|
+
class FailedToLoadPipetteError(ProtocolEngineError):
|
|
71
|
+
"""Raised when a LoadPipette command fails.
|
|
72
|
+
|
|
73
|
+
This failure may be caused by:
|
|
74
|
+
- An incorrect pipette already attached to the mount
|
|
75
|
+
- A missing pipette on the requested mount
|
|
76
|
+
"""
|
|
77
|
+
|
|
78
|
+
def __init__(
|
|
79
|
+
self,
|
|
80
|
+
message: Optional[str] = None,
|
|
81
|
+
details: Optional[Dict[str, Any]] = None,
|
|
82
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
83
|
+
) -> None:
|
|
84
|
+
"""Build a FailedToLoadPipetteError."""
|
|
85
|
+
super().__init__(ErrorCodes.PIPETTE_NOT_PRESENT, message, details, wrapping)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# TODO(mc, 2020-10-18): differentiate between pipette missing vs incorrect
|
|
89
|
+
class PipetteNotAttachedError(ProtocolEngineError):
|
|
90
|
+
"""Raised when an operation's required pipette is not attached."""
|
|
91
|
+
|
|
92
|
+
def __init__(
|
|
93
|
+
self,
|
|
94
|
+
message: Optional[str] = None,
|
|
95
|
+
details: Optional[Dict[str, Any]] = None,
|
|
96
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
97
|
+
) -> None:
|
|
98
|
+
"""Build a PipetteNotAttachedError."""
|
|
99
|
+
super().__init__(ErrorCodes.PIPETTE_NOT_PRESENT, message, details, wrapping)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class InvalidLoadPipetteSpecsError(ProtocolEngineError):
|
|
103
|
+
"""Raised when a loadPipette uses invalid specifications."""
|
|
104
|
+
|
|
105
|
+
def __init__(
|
|
106
|
+
self,
|
|
107
|
+
message: Optional[str] = None,
|
|
108
|
+
details: Optional[Dict[str, Any]] = None,
|
|
109
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
110
|
+
) -> None:
|
|
111
|
+
"""Build an InvalidLoadPipetteSpecsError."""
|
|
112
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class InvalidSpecificationForRobotTypeError(ProtocolEngineError):
|
|
116
|
+
"""Raised when a command provides invalid specs for the given robot type."""
|
|
117
|
+
|
|
118
|
+
def __init__(
|
|
119
|
+
self,
|
|
120
|
+
message: Optional[str] = None,
|
|
121
|
+
details: Optional[Dict[str, Any]] = None,
|
|
122
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
123
|
+
) -> None:
|
|
124
|
+
"""Build an InvalidSpecificationForRobotTypeError."""
|
|
125
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class TipNotAttachedError(ProtocolEngineError):
|
|
129
|
+
"""Raised when an operation's required pipette tip is not attached."""
|
|
130
|
+
|
|
131
|
+
def __init__(
|
|
132
|
+
self,
|
|
133
|
+
message: Optional[str] = None,
|
|
134
|
+
details: Optional[Dict[str, Any]] = None,
|
|
135
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
136
|
+
) -> None:
|
|
137
|
+
"""Build a PipetteNotAttachedError."""
|
|
138
|
+
super().__init__(ErrorCodes.UNEXPECTED_TIP_REMOVAL, message, details, wrapping)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class PickUpTipTipNotAttachedError(TipNotAttachedError):
|
|
142
|
+
"""Raised from TipHandler.pick_up_tip().
|
|
143
|
+
|
|
144
|
+
This is like TipNotAttachedError except that it carries some extra information
|
|
145
|
+
about the attempted operation.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
tip_geometry: Final[TipGeometry]
|
|
149
|
+
"""The tip geometry that would have been on the pipette, had the operation succeeded."""
|
|
150
|
+
|
|
151
|
+
def __init__(self, tip_geometry: TipGeometry) -> None:
|
|
152
|
+
super().__init__()
|
|
153
|
+
self.tip_geometry = tip_geometry
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class TipAttachedError(ProtocolEngineError):
|
|
157
|
+
"""Raised when a tip shouldn't be attached, but is."""
|
|
158
|
+
|
|
159
|
+
def __init__(
|
|
160
|
+
self,
|
|
161
|
+
message: Optional[str] = None,
|
|
162
|
+
details: Optional[Dict[str, Any]] = None,
|
|
163
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
164
|
+
) -> None:
|
|
165
|
+
"""Build a PIpetteNotAttachedError."""
|
|
166
|
+
super().__init__(ErrorCodes.UNEXPECTED_TIP_ATTACH, message, details, wrapping)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
class CommandDoesNotExistError(ProtocolEngineError):
|
|
170
|
+
"""Raised when referencing a command that does not exist."""
|
|
171
|
+
|
|
172
|
+
def __init__(
|
|
173
|
+
self,
|
|
174
|
+
message: Optional[str] = None,
|
|
175
|
+
details: Optional[Dict[str, Any]] = None,
|
|
176
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
177
|
+
) -> None:
|
|
178
|
+
"""Build a CommandDoesNotExistError."""
|
|
179
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
class LabwareNotLoadedError(ProtocolEngineError):
|
|
183
|
+
"""Raised when referencing a labware that has not been loaded."""
|
|
184
|
+
|
|
185
|
+
def __init__(
|
|
186
|
+
self,
|
|
187
|
+
message: Optional[str] = None,
|
|
188
|
+
details: Optional[Dict[str, Any]] = None,
|
|
189
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
190
|
+
) -> None:
|
|
191
|
+
"""Build a LabwareNotLoadedError."""
|
|
192
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class LabwareNotLoadedOnModuleError(ProtocolEngineError):
|
|
196
|
+
"""Raised when there is no labware loaded on the requested module."""
|
|
197
|
+
|
|
198
|
+
def __init__(
|
|
199
|
+
self,
|
|
200
|
+
message: Optional[str] = None,
|
|
201
|
+
details: Optional[Dict[str, Any]] = None,
|
|
202
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
203
|
+
) -> None:
|
|
204
|
+
"""Build a LabwareNotLoadedOnModuleError."""
|
|
205
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
class LabwareNotLoadedOnLabwareError(ProtocolEngineError):
|
|
209
|
+
"""Raised when there is no labware loaded on the requested labware."""
|
|
210
|
+
|
|
211
|
+
def __init__(
|
|
212
|
+
self,
|
|
213
|
+
message: Optional[str] = None,
|
|
214
|
+
details: Optional[Dict[str, Any]] = None,
|
|
215
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
216
|
+
) -> None:
|
|
217
|
+
"""Build a LabwareNotLoadedOnLabwareError."""
|
|
218
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class LabwareNotOnDeckError(ProtocolEngineError):
|
|
222
|
+
"""Raised when a labware can't be used because it's off-deck."""
|
|
223
|
+
|
|
224
|
+
def __init__(
|
|
225
|
+
self,
|
|
226
|
+
message: Optional[str] = None,
|
|
227
|
+
details: Optional[Dict[str, Any]] = None,
|
|
228
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
229
|
+
) -> None:
|
|
230
|
+
"""Build a LabwareNotOnDeckError."""
|
|
231
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
class LiquidDoesNotExistError(ProtocolEngineError):
|
|
235
|
+
"""Raised when referencing a liquid that has not been loaded."""
|
|
236
|
+
|
|
237
|
+
def __init__(
|
|
238
|
+
self,
|
|
239
|
+
message: Optional[str] = None,
|
|
240
|
+
details: Optional[Dict[str, Any]] = None,
|
|
241
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
242
|
+
) -> None:
|
|
243
|
+
"""Build a LiquidDoesNotExistError."""
|
|
244
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
class InvalidLiquidError(ProtocolEngineError):
|
|
248
|
+
"""Raised when attempting to add a liquid with an invalid property."""
|
|
249
|
+
|
|
250
|
+
def __init__(
|
|
251
|
+
self,
|
|
252
|
+
message: Optional[str] = None,
|
|
253
|
+
details: Optional[Dict[str, Any]] = None,
|
|
254
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
255
|
+
) -> None:
|
|
256
|
+
"""Build an InvalidLiquidError."""
|
|
257
|
+
super().__init__(ErrorCodes.INVALID_PROTOCOL_DATA, message, details, wrapping)
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
class LabwareDefinitionDoesNotExistError(ProtocolEngineError):
|
|
261
|
+
"""Raised when referencing a labware definition that does not exist."""
|
|
262
|
+
|
|
263
|
+
def __init__(
|
|
264
|
+
self,
|
|
265
|
+
message: Optional[str] = None,
|
|
266
|
+
details: Optional[Dict[str, Any]] = None,
|
|
267
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
268
|
+
) -> None:
|
|
269
|
+
"""Build a LabwareDefinitionDoesNotExistError."""
|
|
270
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
class LabwareCannotBeStackedError(ProtocolEngineError):
|
|
274
|
+
"""Raised when trying to load labware onto another labware it is not defined to be loaded onto."""
|
|
275
|
+
|
|
276
|
+
def __init__(
|
|
277
|
+
self,
|
|
278
|
+
message: Optional[str] = None,
|
|
279
|
+
details: Optional[Dict[str, Any]] = None,
|
|
280
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
281
|
+
) -> None:
|
|
282
|
+
"""Build a LabwareCannotBeStackedError."""
|
|
283
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
class LabwareCannotSitOnDeckError(ProtocolEngineError):
|
|
287
|
+
"""Raised when a labware is incompatible with a deck slot."""
|
|
288
|
+
|
|
289
|
+
def __init__(
|
|
290
|
+
self,
|
|
291
|
+
message: Optional[str] = None,
|
|
292
|
+
details: Optional[Dict[str, Any]] = None,
|
|
293
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
294
|
+
) -> None:
|
|
295
|
+
"""Build a LabwareCannotSitOnDeckError."""
|
|
296
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
class LabwareIsInStackError(ProtocolEngineError):
|
|
300
|
+
"""Raised when trying to move to or physically interact with a labware that has another labware on top."""
|
|
301
|
+
|
|
302
|
+
def __init__(
|
|
303
|
+
self,
|
|
304
|
+
message: Optional[str] = None,
|
|
305
|
+
details: Optional[Dict[str, Any]] = None,
|
|
306
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
307
|
+
) -> None:
|
|
308
|
+
"""Build a LabwareIsInStackError."""
|
|
309
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
class LabwareOffsetDoesNotExistError(ProtocolEngineError):
|
|
313
|
+
"""Raised when referencing a labware offset that does not exist."""
|
|
314
|
+
|
|
315
|
+
def __init__(
|
|
316
|
+
self,
|
|
317
|
+
message: Optional[str] = None,
|
|
318
|
+
details: Optional[Dict[str, Any]] = None,
|
|
319
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
320
|
+
) -> None:
|
|
321
|
+
"""Build a LabwareOffsetDoesNotExistError."""
|
|
322
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
class LabwareIsNotTipRackError(ProtocolEngineError):
|
|
326
|
+
"""Raised when trying to use a regular labware as a tip rack."""
|
|
327
|
+
|
|
328
|
+
def __init__(
|
|
329
|
+
self,
|
|
330
|
+
message: Optional[str] = None,
|
|
331
|
+
details: Optional[Dict[str, Any]] = None,
|
|
332
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
333
|
+
) -> None:
|
|
334
|
+
"""Build a LabwareIsNotTiprackError."""
|
|
335
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
class LabwareIsTipRackError(ProtocolEngineError):
|
|
339
|
+
"""Raised when trying to use a command not allowed on tip rack."""
|
|
340
|
+
|
|
341
|
+
def __init__(
|
|
342
|
+
self,
|
|
343
|
+
message: Optional[str] = None,
|
|
344
|
+
details: Optional[Dict[str, Any]] = None,
|
|
345
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
346
|
+
) -> None:
|
|
347
|
+
"""Build a LabwareIsTiprackError."""
|
|
348
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
class LabwareIsAdapterError(ProtocolEngineError):
|
|
352
|
+
"""Raised when trying to use a command not allowed on adapter."""
|
|
353
|
+
|
|
354
|
+
def __init__(
|
|
355
|
+
self,
|
|
356
|
+
message: Optional[str] = None,
|
|
357
|
+
details: Optional[Dict[str, Any]] = None,
|
|
358
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
359
|
+
) -> None:
|
|
360
|
+
"""Build a LabwareIsAdapterError."""
|
|
361
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
class TouchTipDisabledError(ProtocolEngineError):
|
|
365
|
+
"""Raised when touch tip is used on well with touchTipDisabled quirk."""
|
|
366
|
+
|
|
367
|
+
def __init__(
|
|
368
|
+
self,
|
|
369
|
+
message: Optional[str] = None,
|
|
370
|
+
details: Optional[Dict[str, Any]] = None,
|
|
371
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
372
|
+
) -> None:
|
|
373
|
+
"""Build a TouchTipDisabledError."""
|
|
374
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
class TouchTipIncompatibleArgumentsError(ProtocolEngineError):
|
|
378
|
+
"""Raised when touch tip is used with both a custom radius and a mmFromEdge argument."""
|
|
379
|
+
|
|
380
|
+
def __init__(
|
|
381
|
+
self,
|
|
382
|
+
message: Optional[str] = None,
|
|
383
|
+
details: Optional[Dict[str, Any]] = None,
|
|
384
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
385
|
+
) -> None:
|
|
386
|
+
"""Build a TouchTipIncompatibleArgumentsError."""
|
|
387
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
class UnsupportedLabwareForActionError(ProtocolEngineError):
|
|
391
|
+
"""Raised when trying to use an unsupported labware for a command."""
|
|
392
|
+
|
|
393
|
+
def __init__(
|
|
394
|
+
self,
|
|
395
|
+
message: Optional[str] = None,
|
|
396
|
+
details: Optional[Dict[str, Any]] = None,
|
|
397
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
398
|
+
) -> None:
|
|
399
|
+
"""Build a UnsupportedLabwareForActionError."""
|
|
400
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
401
|
+
|
|
402
|
+
|
|
403
|
+
class WellDoesNotExistError(ProtocolEngineError):
|
|
404
|
+
"""Raised when referencing a well that does not exist."""
|
|
405
|
+
|
|
406
|
+
def __init__(
|
|
407
|
+
self,
|
|
408
|
+
message: Optional[str] = None,
|
|
409
|
+
details: Optional[Dict[str, Any]] = None,
|
|
410
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
411
|
+
) -> None:
|
|
412
|
+
"""Build a WellDoesNotExistError."""
|
|
413
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
class PipetteNotLoadedError(ProtocolEngineError):
|
|
417
|
+
"""Raised when referencing a pipette that has not been loaded."""
|
|
418
|
+
|
|
419
|
+
def __init__(
|
|
420
|
+
self,
|
|
421
|
+
message: Optional[str] = None,
|
|
422
|
+
details: Optional[Dict[str, Any]] = None,
|
|
423
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
424
|
+
) -> None:
|
|
425
|
+
"""Build a PipetteNotLoadedError."""
|
|
426
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
class ModuleNotLoadedError(ProtocolEngineError):
|
|
430
|
+
"""Raised when referencing a module that has not been loaded."""
|
|
431
|
+
|
|
432
|
+
def __init__(self, *, module_id: str) -> None:
|
|
433
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, f"Module {module_id} not found.")
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
class ModuleNotOnDeckError(ProtocolEngineError):
|
|
437
|
+
"""Raised when trying to use a module that is loaded off the deck."""
|
|
438
|
+
|
|
439
|
+
def __init__(
|
|
440
|
+
self,
|
|
441
|
+
message: Optional[str] = None,
|
|
442
|
+
details: Optional[Dict[str, Any]] = None,
|
|
443
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
444
|
+
) -> None:
|
|
445
|
+
"""Build a ModuleNotOnDeckError."""
|
|
446
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
447
|
+
|
|
448
|
+
|
|
449
|
+
class ModuleNotConnectedError(ProtocolEngineError):
|
|
450
|
+
"""Raised when trying to use a module that is not connected to the robot electrically."""
|
|
451
|
+
|
|
452
|
+
def __init__(
|
|
453
|
+
self,
|
|
454
|
+
message: Optional[str] = None,
|
|
455
|
+
details: Optional[Dict[str, Any]] = None,
|
|
456
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
457
|
+
) -> None:
|
|
458
|
+
"""Build a ModuleNotConnectedError."""
|
|
459
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
class OffsetLocationInvalidError(ProtocolEngineError):
|
|
463
|
+
"""Raised when encountering an invalid labware offset location sequence."""
|
|
464
|
+
|
|
465
|
+
def __init__(
|
|
466
|
+
self,
|
|
467
|
+
message: Optional[str] = None,
|
|
468
|
+
details: Optional[Dict[str, Any]] = None,
|
|
469
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
470
|
+
) -> None:
|
|
471
|
+
"""Build an OffsetLocationSequenceDoesNotTerminateAtAnAddressableAreaError."""
|
|
472
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
class SlotDoesNotExistError(ProtocolEngineError):
|
|
476
|
+
"""Raised when referencing a deck slot that does not exist."""
|
|
477
|
+
|
|
478
|
+
def __init__(
|
|
479
|
+
self,
|
|
480
|
+
message: Optional[str] = None,
|
|
481
|
+
details: Optional[Dict[str, Any]] = None,
|
|
482
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
483
|
+
) -> None:
|
|
484
|
+
"""Build a SlotDoesNotExistError."""
|
|
485
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
486
|
+
|
|
487
|
+
|
|
488
|
+
class CutoutDoesNotExistError(ProtocolEngineError):
|
|
489
|
+
"""Raised when referencing a cutout that does not exist."""
|
|
490
|
+
|
|
491
|
+
def __init__(
|
|
492
|
+
self,
|
|
493
|
+
message: Optional[str] = None,
|
|
494
|
+
details: Optional[Dict[str, Any]] = None,
|
|
495
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
496
|
+
) -> None:
|
|
497
|
+
"""Build a CutoutDoesNotExistError."""
|
|
498
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
class FixtureDoesNotExistError(ProtocolEngineError):
|
|
502
|
+
"""Raised when referencing a cutout fixture that does not exist."""
|
|
503
|
+
|
|
504
|
+
def __init__(
|
|
505
|
+
self,
|
|
506
|
+
message: Optional[str] = None,
|
|
507
|
+
details: Optional[Dict[str, Any]] = None,
|
|
508
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
509
|
+
) -> None:
|
|
510
|
+
"""Build a FixtureDoesNotExist."""
|
|
511
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
class AddressableAreaDoesNotExistError(ProtocolEngineError):
|
|
515
|
+
"""Raised when referencing an addressable area that does not exist."""
|
|
516
|
+
|
|
517
|
+
def __init__(
|
|
518
|
+
self,
|
|
519
|
+
message: Optional[str] = None,
|
|
520
|
+
details: Optional[Dict[str, Any]] = None,
|
|
521
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
522
|
+
) -> None:
|
|
523
|
+
"""Build a AddressableAreaDoesNotExistError."""
|
|
524
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
class FixtureDoesNotProvideAreasError(ProtocolEngineError):
|
|
528
|
+
"""Raised when a cutout fixture does not provide any addressable areas for a requested cutout."""
|
|
529
|
+
|
|
530
|
+
def __init__(
|
|
531
|
+
self,
|
|
532
|
+
message: Optional[str] = None,
|
|
533
|
+
details: Optional[Dict[str, Any]] = None,
|
|
534
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
535
|
+
) -> None:
|
|
536
|
+
"""Build a FixtureDoesNotProvideAreasError."""
|
|
537
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
class AreaNotInDeckConfigurationError(ProtocolEngineError):
|
|
541
|
+
"""Raised when an addressable area is referenced that is not provided by a deck configuration."""
|
|
542
|
+
|
|
543
|
+
def __init__(
|
|
544
|
+
self,
|
|
545
|
+
message: Optional[str] = None,
|
|
546
|
+
details: Optional[Dict[str, Any]] = None,
|
|
547
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
548
|
+
) -> None:
|
|
549
|
+
"""Build a AreaNotInDeckConfigurationError."""
|
|
550
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
class IncompatibleAddressableAreaError(ProtocolEngineError):
|
|
554
|
+
"""Raised when two non-compatible addressable areas are referenced during analysis."""
|
|
555
|
+
|
|
556
|
+
def __init__(
|
|
557
|
+
self,
|
|
558
|
+
message: Optional[str] = None,
|
|
559
|
+
details: Optional[Dict[str, Any]] = None,
|
|
560
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
561
|
+
) -> None:
|
|
562
|
+
"""Build a IncompatibleAddressableAreaError."""
|
|
563
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
# TODO(mc, 2020-11-06): flesh out with structured data to replicate
|
|
567
|
+
# existing LabwareHeightError
|
|
568
|
+
class FailedToPlanMoveError(ProtocolEngineError):
|
|
569
|
+
"""Raised when a requested movement could not be planned."""
|
|
570
|
+
|
|
571
|
+
def __init__(
|
|
572
|
+
self,
|
|
573
|
+
message: Optional[str] = None,
|
|
574
|
+
details: Optional[Dict[str, Any]] = None,
|
|
575
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
576
|
+
) -> None:
|
|
577
|
+
"""Build a FailedToPlanmoveError."""
|
|
578
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
class MustHomeError(ProtocolEngineError):
|
|
582
|
+
"""Raised when motors must be homed due to unknown current position."""
|
|
583
|
+
|
|
584
|
+
def __init__(
|
|
585
|
+
self,
|
|
586
|
+
message: Optional[str] = None,
|
|
587
|
+
details: Optional[Dict[str, Any]] = None,
|
|
588
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
589
|
+
) -> None:
|
|
590
|
+
"""Build a MustHomeError."""
|
|
591
|
+
super().__init__(ErrorCodes.POSITION_UNKNOWN, message, details, wrapping)
|
|
592
|
+
|
|
593
|
+
|
|
594
|
+
class CommandNotAllowedError(ProtocolEngineError):
|
|
595
|
+
"""Raised when adding a command with bad data."""
|
|
596
|
+
|
|
597
|
+
def __init__(
|
|
598
|
+
self,
|
|
599
|
+
message: Optional[str] = None,
|
|
600
|
+
details: Optional[Dict[str, Any]] = None,
|
|
601
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
602
|
+
) -> None:
|
|
603
|
+
"""Build a CommandNotAllowedError."""
|
|
604
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
class FixitCommandNotAllowedError(ProtocolEngineError):
|
|
608
|
+
"""Raised when adding a fixit command to a non-recoverable engine."""
|
|
609
|
+
|
|
610
|
+
def __init__(
|
|
611
|
+
self,
|
|
612
|
+
message: Optional[str] = None,
|
|
613
|
+
details: Optional[Dict[str, Any]] = None,
|
|
614
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
615
|
+
) -> None:
|
|
616
|
+
"""Build a SetupCommandNotAllowedError."""
|
|
617
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
618
|
+
|
|
619
|
+
|
|
620
|
+
class SetupCommandNotAllowedError(ProtocolEngineError):
|
|
621
|
+
"""Raised when adding a setup command to a non-idle/non-paused engine."""
|
|
622
|
+
|
|
623
|
+
def __init__(
|
|
624
|
+
self,
|
|
625
|
+
message: Optional[str] = None,
|
|
626
|
+
details: Optional[Dict[str, Any]] = None,
|
|
627
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
628
|
+
) -> None:
|
|
629
|
+
"""Build a SetupCommandNotAllowedError."""
|
|
630
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
class ResumeFromRecoveryNotAllowedError(ProtocolEngineError):
|
|
634
|
+
"""Raised when attempting to resume a run from recovery that has a fixit command in the queue."""
|
|
635
|
+
|
|
636
|
+
def __init__(
|
|
637
|
+
self,
|
|
638
|
+
message: Optional[str] = None,
|
|
639
|
+
details: Optional[Dict[str, Any]] = None,
|
|
640
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
641
|
+
) -> None:
|
|
642
|
+
"""Build a ResumeFromRecoveryNotAllowedError."""
|
|
643
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
644
|
+
|
|
645
|
+
|
|
646
|
+
class PauseNotAllowedError(ProtocolEngineError):
|
|
647
|
+
"""Raised when attempting to pause a run that is not running."""
|
|
648
|
+
|
|
649
|
+
def __init__(
|
|
650
|
+
self,
|
|
651
|
+
message: Optional[str] = None,
|
|
652
|
+
details: Optional[Dict[str, Any]] = None,
|
|
653
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
654
|
+
) -> None:
|
|
655
|
+
"""Build a PauseNotAllowedError."""
|
|
656
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
657
|
+
|
|
658
|
+
|
|
659
|
+
class RunStoppedError(ProtocolEngineError):
|
|
660
|
+
"""Raised when attempting to interact with a stopped engine."""
|
|
661
|
+
|
|
662
|
+
def __init__(
|
|
663
|
+
self,
|
|
664
|
+
message: Optional[str] = None,
|
|
665
|
+
details: Optional[Dict[str, Any]] = None,
|
|
666
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
667
|
+
) -> None:
|
|
668
|
+
"""Build a RunStoppedError."""
|
|
669
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
670
|
+
|
|
671
|
+
|
|
672
|
+
class ModuleNotAttachedError(ProtocolEngineError):
|
|
673
|
+
"""Raised when a requested module is not attached."""
|
|
674
|
+
|
|
675
|
+
def __init__(
|
|
676
|
+
self,
|
|
677
|
+
message: Optional[str] = None,
|
|
678
|
+
details: Optional[Dict[str, Any]] = None,
|
|
679
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
680
|
+
) -> None:
|
|
681
|
+
"""Build a ModuleNotAttached."""
|
|
682
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
683
|
+
|
|
684
|
+
|
|
685
|
+
class ModuleAlreadyPresentError(ProtocolEngineError):
|
|
686
|
+
"""Raised when a module is already present in a requested location."""
|
|
687
|
+
|
|
688
|
+
def __init__(
|
|
689
|
+
self,
|
|
690
|
+
message: Optional[str] = None,
|
|
691
|
+
details: Optional[Dict[str, Any]] = None,
|
|
692
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
693
|
+
) -> None:
|
|
694
|
+
"""Build a ModuleAlreadyPresentError."""
|
|
695
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
696
|
+
|
|
697
|
+
|
|
698
|
+
class WrongModuleTypeError(ProtocolEngineError):
|
|
699
|
+
"""Raised when performing a module action on the wrong kind of module."""
|
|
700
|
+
|
|
701
|
+
def __init__(
|
|
702
|
+
self,
|
|
703
|
+
message: Optional[str] = None,
|
|
704
|
+
details: Optional[Dict[str, Any]] = None,
|
|
705
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
706
|
+
) -> None:
|
|
707
|
+
"""Build a WrongModuleTypeError."""
|
|
708
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
709
|
+
|
|
710
|
+
|
|
711
|
+
class ThermocyclerNotOpenError(ProtocolEngineError):
|
|
712
|
+
"""Raised when trying to move to a labware that's in a closed Thermocycler."""
|
|
713
|
+
|
|
714
|
+
def __init__(
|
|
715
|
+
self,
|
|
716
|
+
message: Optional[str] = None,
|
|
717
|
+
details: Optional[Dict[str, Any]] = None,
|
|
718
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
719
|
+
) -> None:
|
|
720
|
+
"""Build a ThermocyclerNotOpenError."""
|
|
721
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
722
|
+
|
|
723
|
+
|
|
724
|
+
class RobotDoorOpenError(ProtocolEngineError):
|
|
725
|
+
"""Raised when executing a protocol command when a robot door is open."""
|
|
726
|
+
|
|
727
|
+
def __init__(
|
|
728
|
+
self,
|
|
729
|
+
message: Optional[str] = None,
|
|
730
|
+
details: Optional[Dict[str, Any]] = None,
|
|
731
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
732
|
+
) -> None:
|
|
733
|
+
"""Build a RobotDoorOpenError."""
|
|
734
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
735
|
+
|
|
736
|
+
|
|
737
|
+
class PipetteMovementRestrictedByHeaterShakerError(ProtocolEngineError):
|
|
738
|
+
"""Raised when trying to move to labware that's restricted by a module."""
|
|
739
|
+
|
|
740
|
+
def __init__(
|
|
741
|
+
self,
|
|
742
|
+
message: Optional[str] = None,
|
|
743
|
+
details: Optional[Dict[str, Any]] = None,
|
|
744
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
745
|
+
) -> None:
|
|
746
|
+
"""Build a PipetteMovementRestrictedByHeaterShakerError."""
|
|
747
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
748
|
+
|
|
749
|
+
|
|
750
|
+
class HeaterShakerLabwareLatchNotOpenError(ProtocolEngineError):
|
|
751
|
+
"""Raised when Heater-Shaker latch is not open when it is expected to be so."""
|
|
752
|
+
|
|
753
|
+
def __init__(
|
|
754
|
+
self,
|
|
755
|
+
message: Optional[str] = None,
|
|
756
|
+
details: Optional[Dict[str, Any]] = None,
|
|
757
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
758
|
+
) -> None:
|
|
759
|
+
"""Build a HeaterShakerLabwareLatchNotOpenError."""
|
|
760
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
class HeaterShakerLabwareLatchStatusUnknown(ProtocolEngineError):
|
|
764
|
+
"""Raised when Heater-Shaker latch has not been set before moving to it."""
|
|
765
|
+
|
|
766
|
+
def __init__(
|
|
767
|
+
self,
|
|
768
|
+
message: Optional[str] = None,
|
|
769
|
+
details: Optional[Dict[str, Any]] = None,
|
|
770
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
771
|
+
) -> None:
|
|
772
|
+
"""Build a HeaterShakerLabwareLatchStatusUnknown."""
|
|
773
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
774
|
+
|
|
775
|
+
|
|
776
|
+
class EngageHeightOutOfRangeError(ProtocolEngineError):
|
|
777
|
+
"""Raised when a Magnetic Module engage height is out of bounds."""
|
|
778
|
+
|
|
779
|
+
def __init__(
|
|
780
|
+
self,
|
|
781
|
+
message: Optional[str] = None,
|
|
782
|
+
details: Optional[Dict[str, Any]] = None,
|
|
783
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
784
|
+
) -> None:
|
|
785
|
+
"""Build a EngageHeightOutOfRangeError."""
|
|
786
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
class NoMagnetEngageHeightError(ProtocolEngineError):
|
|
790
|
+
"""Raised if a Magnetic Module engage height is missing."""
|
|
791
|
+
|
|
792
|
+
def __init__(
|
|
793
|
+
self,
|
|
794
|
+
message: Optional[str] = None,
|
|
795
|
+
details: Optional[Dict[str, Any]] = None,
|
|
796
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
797
|
+
) -> None:
|
|
798
|
+
"""Build a NoMagnetEngageHeightError."""
|
|
799
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
800
|
+
|
|
801
|
+
|
|
802
|
+
class NoTargetTemperatureSetError(ProtocolEngineError):
|
|
803
|
+
"""Raised when awaiting temperature when no target was set."""
|
|
804
|
+
|
|
805
|
+
def __init__(
|
|
806
|
+
self,
|
|
807
|
+
message: Optional[str] = None,
|
|
808
|
+
details: Optional[Dict[str, Any]] = None,
|
|
809
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
810
|
+
) -> None:
|
|
811
|
+
"""Build a NoTargetTemperatureSetError."""
|
|
812
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
813
|
+
|
|
814
|
+
|
|
815
|
+
class InvalidTargetTemperatureError(ProtocolEngineError):
|
|
816
|
+
"""Raised when attempting to set an invalid target temperature."""
|
|
817
|
+
|
|
818
|
+
def __init__(
|
|
819
|
+
self,
|
|
820
|
+
message: Optional[str] = None,
|
|
821
|
+
details: Optional[Dict[str, Any]] = None,
|
|
822
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
823
|
+
) -> None:
|
|
824
|
+
"""Build a InvalidTargetTemperatureError."""
|
|
825
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
class InvalidBlockVolumeError(ProtocolEngineError):
|
|
829
|
+
"""Raised when attempting to set an invalid block max volume."""
|
|
830
|
+
|
|
831
|
+
def __init__(
|
|
832
|
+
self,
|
|
833
|
+
message: Optional[str] = None,
|
|
834
|
+
details: Optional[Dict[str, Any]] = None,
|
|
835
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
836
|
+
) -> None:
|
|
837
|
+
"""Build a InvalidBlockVolumeError."""
|
|
838
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
839
|
+
|
|
840
|
+
|
|
841
|
+
class InvalidWavelengthError(ProtocolEngineError):
|
|
842
|
+
"""Raised when attempting to set an invalid absorbance wavelength."""
|
|
843
|
+
|
|
844
|
+
def __init__(
|
|
845
|
+
self,
|
|
846
|
+
message: Optional[str] = None,
|
|
847
|
+
details: Optional[Dict[str, Any]] = None,
|
|
848
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
849
|
+
) -> None:
|
|
850
|
+
"""Build a InvalidWavelengthError."""
|
|
851
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
class InvalidHoldTimeError(ProtocolEngineError):
|
|
855
|
+
"""An error raised when attempting to set an invalid temperature hold time."""
|
|
856
|
+
|
|
857
|
+
def __init__(
|
|
858
|
+
self,
|
|
859
|
+
message: Optional[str] = None,
|
|
860
|
+
details: Optional[Dict[str, Any]] = None,
|
|
861
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
862
|
+
) -> None:
|
|
863
|
+
"""Build a InvalidHoldTimeError."""
|
|
864
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
865
|
+
|
|
866
|
+
|
|
867
|
+
class InvalidTargetSpeedError(ProtocolEngineError):
|
|
868
|
+
"""Raised when attempting to set an invalid target speed."""
|
|
869
|
+
|
|
870
|
+
def __init__(
|
|
871
|
+
self,
|
|
872
|
+
message: Optional[str] = None,
|
|
873
|
+
details: Optional[Dict[str, Any]] = None,
|
|
874
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
875
|
+
) -> None:
|
|
876
|
+
"""Build a InvalidTargetSpeedError."""
|
|
877
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
878
|
+
|
|
879
|
+
|
|
880
|
+
class CannotPerformModuleAction(ProtocolEngineError):
|
|
881
|
+
"""Raised when trying to perform an illegal hardware module action."""
|
|
882
|
+
|
|
883
|
+
def __init__(
|
|
884
|
+
self,
|
|
885
|
+
message: Optional[str] = None,
|
|
886
|
+
details: Optional[Dict[str, Any]] = None,
|
|
887
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
888
|
+
) -> None:
|
|
889
|
+
"""Build a CannotPerformModuleAction."""
|
|
890
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
class HardwareNotSupportedError(ProtocolEngineError):
|
|
894
|
+
"""Raised when executing a command on the wrong hardware."""
|
|
895
|
+
|
|
896
|
+
def __init__(
|
|
897
|
+
self,
|
|
898
|
+
message: Optional[str] = None,
|
|
899
|
+
details: Optional[Dict[str, Any]] = None,
|
|
900
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
901
|
+
) -> None:
|
|
902
|
+
"""Build a HardwareNotSupportedError."""
|
|
903
|
+
super().__init__(
|
|
904
|
+
ErrorCodes.NOT_SUPPORTED_ON_ROBOT_TYPE, message, details, wrapping
|
|
905
|
+
)
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
class GripperNotAttachedError(ProtocolEngineError):
|
|
909
|
+
"""Raised when executing a gripper action without an attached gripper."""
|
|
910
|
+
|
|
911
|
+
def __init__(
|
|
912
|
+
self,
|
|
913
|
+
message: Optional[str] = None,
|
|
914
|
+
details: Optional[Dict[str, Any]] = None,
|
|
915
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
916
|
+
) -> None:
|
|
917
|
+
"""Build a GripperNotAttachedError."""
|
|
918
|
+
super().__init__(ErrorCodes.GRIPPER_NOT_PRESENT, message, details, wrapping)
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
class CannotPerformGripperAction(ProtocolEngineError):
|
|
922
|
+
"""Raised when trying to perform an illegal gripper action."""
|
|
923
|
+
|
|
924
|
+
def __init__(
|
|
925
|
+
self,
|
|
926
|
+
message: Optional[str] = None,
|
|
927
|
+
details: Optional[Dict[str, Any]] = None,
|
|
928
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
929
|
+
) -> None:
|
|
930
|
+
"""Build a CannotPerformGripperAction."""
|
|
931
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
932
|
+
|
|
933
|
+
|
|
934
|
+
class LabwareMovementNotAllowedError(ProtocolEngineError):
|
|
935
|
+
"""Raised when attempting an illegal labware movement."""
|
|
936
|
+
|
|
937
|
+
def __init__(
|
|
938
|
+
self,
|
|
939
|
+
message: Optional[str] = None,
|
|
940
|
+
details: Optional[Dict[str, Any]] = None,
|
|
941
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
942
|
+
) -> None:
|
|
943
|
+
"""Build a LabwareMovementNotAllowedError."""
|
|
944
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
945
|
+
|
|
946
|
+
|
|
947
|
+
class LabwareIsNotAllowedInLocationError(ProtocolEngineError):
|
|
948
|
+
"""Raised when attempting an illegal labware load into slot."""
|
|
949
|
+
|
|
950
|
+
def __init__(
|
|
951
|
+
self,
|
|
952
|
+
message: Optional[str] = None,
|
|
953
|
+
details: Optional[Dict[str, Any]] = None,
|
|
954
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
955
|
+
) -> None:
|
|
956
|
+
"""Build a LabwareIsNotAllowedInLocationError."""
|
|
957
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
958
|
+
|
|
959
|
+
|
|
960
|
+
class LocationIsOccupiedError(ProtocolEngineError):
|
|
961
|
+
"""Raised when attempting to place labware in a non-empty location."""
|
|
962
|
+
|
|
963
|
+
def __init__(
|
|
964
|
+
self,
|
|
965
|
+
message: Optional[str] = None,
|
|
966
|
+
details: Optional[Dict[str, Any]] = None,
|
|
967
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
968
|
+
) -> None:
|
|
969
|
+
"""Build a LocationIsOccupiedError."""
|
|
970
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
class LocationNotAccessibleByPipetteError(ProtocolEngineError):
|
|
974
|
+
"""Raised when attempting to move pipette to an inaccessible location."""
|
|
975
|
+
|
|
976
|
+
def __init__(
|
|
977
|
+
self,
|
|
978
|
+
message: Optional[str] = None,
|
|
979
|
+
details: Optional[Dict[str, Any]] = None,
|
|
980
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
981
|
+
) -> None:
|
|
982
|
+
"""Build a LocationNotAccessibleByPipetteError."""
|
|
983
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
984
|
+
|
|
985
|
+
|
|
986
|
+
class LocationIsStagingSlotError(ProtocolEngineError):
|
|
987
|
+
"""Raised when referencing a labware on a staging slot when trying to get standard deck slot."""
|
|
988
|
+
|
|
989
|
+
def __init__(
|
|
990
|
+
self,
|
|
991
|
+
message: Optional[str] = None,
|
|
992
|
+
details: Optional[Dict[str, Any]] = None,
|
|
993
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
994
|
+
) -> None:
|
|
995
|
+
"""Build a LocationIsStagingSlotError."""
|
|
996
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
class LocationIsLidDockSlotError(ProtocolEngineError):
|
|
1000
|
+
"""Raised when referencing a labware on a lid dock slot when trying to get standard deck slot."""
|
|
1001
|
+
|
|
1002
|
+
def __init__(
|
|
1003
|
+
self,
|
|
1004
|
+
message: Optional[str] = None,
|
|
1005
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1006
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1007
|
+
) -> None:
|
|
1008
|
+
"""Build a LocationIsLidDockSlotError."""
|
|
1009
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1010
|
+
|
|
1011
|
+
|
|
1012
|
+
class FirmwareUpdateRequired(ProtocolEngineError):
|
|
1013
|
+
"""Raised when the firmware needs to be updated."""
|
|
1014
|
+
|
|
1015
|
+
def __init__(
|
|
1016
|
+
self,
|
|
1017
|
+
message: Optional[str] = None,
|
|
1018
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1019
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1020
|
+
) -> None:
|
|
1021
|
+
"""Build a LocationIsOccupiedError."""
|
|
1022
|
+
super().__init__(
|
|
1023
|
+
ErrorCodes.FIRMWARE_UPDATE_REQUIRED, message, details, wrapping
|
|
1024
|
+
)
|
|
1025
|
+
|
|
1026
|
+
|
|
1027
|
+
class PipetteNotReadyToAspirateError(ProtocolEngineError):
|
|
1028
|
+
"""Raised when the pipette is not ready to aspirate."""
|
|
1029
|
+
|
|
1030
|
+
def __init__(
|
|
1031
|
+
self,
|
|
1032
|
+
message: Optional[str] = None,
|
|
1033
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1034
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1035
|
+
) -> None:
|
|
1036
|
+
"""Build a PipetteNotReadyToAspirateError."""
|
|
1037
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1038
|
+
|
|
1039
|
+
|
|
1040
|
+
class InvalidAspirateVolumeError(ProtocolEngineError):
|
|
1041
|
+
"""Raised when pipetting a volume larger than the pipette volume."""
|
|
1042
|
+
|
|
1043
|
+
def __init__(
|
|
1044
|
+
self,
|
|
1045
|
+
attempted_aspirate_volume: float,
|
|
1046
|
+
available_volume: float,
|
|
1047
|
+
max_pipette_volume: float,
|
|
1048
|
+
max_tip_volume: Optional[float], # None if there's no tip.
|
|
1049
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1050
|
+
) -> None:
|
|
1051
|
+
"""Build a InvalidPipettingVolumeError."""
|
|
1052
|
+
message = (
|
|
1053
|
+
f"Cannot aspirate {attempted_aspirate_volume} µL when only"
|
|
1054
|
+
f" {available_volume} is available in the tip."
|
|
1055
|
+
)
|
|
1056
|
+
details = {
|
|
1057
|
+
"attempted_aspirate_volume": attempted_aspirate_volume,
|
|
1058
|
+
"available_volume": available_volume,
|
|
1059
|
+
"max_pipette_volume": max_pipette_volume,
|
|
1060
|
+
"max_tip_volume": max_tip_volume,
|
|
1061
|
+
}
|
|
1062
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1063
|
+
|
|
1064
|
+
|
|
1065
|
+
class InvalidDispenseVolumeError(ProtocolEngineError):
|
|
1066
|
+
"""Raised when attempting to dispense a volume that was not aspirated."""
|
|
1067
|
+
|
|
1068
|
+
def __init__(
|
|
1069
|
+
self,
|
|
1070
|
+
message: Optional[str] = None,
|
|
1071
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1072
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1073
|
+
) -> None:
|
|
1074
|
+
"""Build a InvalidDispenseVolumeError."""
|
|
1075
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
class InvalidPushOutVolumeError(ProtocolEngineError):
|
|
1079
|
+
"""Raised when attempting to use an invalid volume for dispense push_out."""
|
|
1080
|
+
|
|
1081
|
+
def __init__(
|
|
1082
|
+
self,
|
|
1083
|
+
message: Optional[str] = None,
|
|
1084
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1085
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1086
|
+
) -> None:
|
|
1087
|
+
"""Build a InvalidPushOutVolumeError."""
|
|
1088
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1089
|
+
|
|
1090
|
+
|
|
1091
|
+
class InvalidAxisForRobotType(ProtocolEngineError):
|
|
1092
|
+
"""Raised when attempting to use an axis that is not present on the given type of robot."""
|
|
1093
|
+
|
|
1094
|
+
def __init__(
|
|
1095
|
+
self,
|
|
1096
|
+
message: Optional[str] = None,
|
|
1097
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1098
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1099
|
+
) -> None:
|
|
1100
|
+
"""Build a InvalidAxisForRobotType."""
|
|
1101
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1102
|
+
|
|
1103
|
+
|
|
1104
|
+
class InvalidLiquidHeightFound(ProtocolEngineError):
|
|
1105
|
+
"""Raised when attempting to estimate liquid height based on volume fails."""
|
|
1106
|
+
|
|
1107
|
+
def __init__(
|
|
1108
|
+
self,
|
|
1109
|
+
message: Optional[str] = None,
|
|
1110
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1111
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1112
|
+
) -> None:
|
|
1113
|
+
"""Build an InvalidLiquidHeightFound error."""
|
|
1114
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1115
|
+
|
|
1116
|
+
|
|
1117
|
+
class LiquidHeightUnknownError(ProtocolEngineError):
|
|
1118
|
+
"""Raised when attempting to specify WellOrigin.MENISCUS before liquid probing has been done."""
|
|
1119
|
+
|
|
1120
|
+
def __init__(
|
|
1121
|
+
self,
|
|
1122
|
+
message: Optional[str] = None,
|
|
1123
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1124
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1125
|
+
) -> None:
|
|
1126
|
+
"""Build a LiquidHeightUnknownError."""
|
|
1127
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
class LiquidVolumeUnknownError(ProtocolEngineError):
|
|
1131
|
+
"""Raised when attempting to report an unknown liquid volume."""
|
|
1132
|
+
|
|
1133
|
+
def __init__(
|
|
1134
|
+
self,
|
|
1135
|
+
message: Optional[str] = None,
|
|
1136
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1137
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1138
|
+
) -> None:
|
|
1139
|
+
"""Build a LiquidVolumeUnknownError."""
|
|
1140
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1141
|
+
|
|
1142
|
+
|
|
1143
|
+
class EStopActivatedError(ProtocolEngineError):
|
|
1144
|
+
"""Represents an E-stop event."""
|
|
1145
|
+
|
|
1146
|
+
def __init__(
|
|
1147
|
+
self,
|
|
1148
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1149
|
+
) -> None:
|
|
1150
|
+
"""Build an EStopActivatedError."""
|
|
1151
|
+
super().__init__(
|
|
1152
|
+
code=ErrorCodes.E_STOP_ACTIVATED,
|
|
1153
|
+
message="E-stop activated.",
|
|
1154
|
+
wrapping=wrapping,
|
|
1155
|
+
)
|
|
1156
|
+
|
|
1157
|
+
|
|
1158
|
+
class NotSupportedOnRobotType(ProtocolEngineError):
|
|
1159
|
+
"""Raised when attempting to perform an action that is not supported for the given robot type."""
|
|
1160
|
+
|
|
1161
|
+
def __init__(
|
|
1162
|
+
self,
|
|
1163
|
+
message: Optional[str] = None,
|
|
1164
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1165
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1166
|
+
) -> None:
|
|
1167
|
+
"""Build a NotSupportedOnRobotType exception."""
|
|
1168
|
+
super().__init__(
|
|
1169
|
+
ErrorCodes.NOT_SUPPORTED_ON_ROBOT_TYPE, message, details, wrapping
|
|
1170
|
+
)
|
|
1171
|
+
|
|
1172
|
+
|
|
1173
|
+
class TipNotEmptyError(ProtocolEngineError):
|
|
1174
|
+
"""Raised when an operation requires an empty tip but is provided a tip with liquid."""
|
|
1175
|
+
|
|
1176
|
+
def __init__(
|
|
1177
|
+
self,
|
|
1178
|
+
message: Optional[str] = None,
|
|
1179
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1180
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1181
|
+
) -> None:
|
|
1182
|
+
"""Build a TipNotEmptyError."""
|
|
1183
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1184
|
+
|
|
1185
|
+
|
|
1186
|
+
class IncompleteLabwareDefinitionError(ProtocolEngineError):
|
|
1187
|
+
"""Raised when a labware definition lacks innerLabwareGeometry in general or for a specific well_id."""
|
|
1188
|
+
|
|
1189
|
+
def __init__(
|
|
1190
|
+
self,
|
|
1191
|
+
message: Optional[str] = None,
|
|
1192
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1193
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1194
|
+
) -> None:
|
|
1195
|
+
"""Build an IncompleteLabwareDefinitionError."""
|
|
1196
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1197
|
+
|
|
1198
|
+
|
|
1199
|
+
class InvalidUserDefinedVolumesError(ProtocolEngineError):
|
|
1200
|
+
"""Raised when a UserDefinedVolumes type InnerLabwareDefinition is invalid."""
|
|
1201
|
+
|
|
1202
|
+
def __init__(
|
|
1203
|
+
self,
|
|
1204
|
+
message: Optional[str] = None,
|
|
1205
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1206
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1207
|
+
) -> None:
|
|
1208
|
+
"""Build an InvalidUserDefinedVolumesError."""
|
|
1209
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1210
|
+
|
|
1211
|
+
|
|
1212
|
+
class IncompleteWellDefinitionError(ProtocolEngineError):
|
|
1213
|
+
"""Raised when a well definition lacks a geometryDefinitionId."""
|
|
1214
|
+
|
|
1215
|
+
def __init__(
|
|
1216
|
+
self,
|
|
1217
|
+
message: Optional[str] = None,
|
|
1218
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1219
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1220
|
+
) -> None:
|
|
1221
|
+
"""Build an IncompleteWellDefinitionError."""
|
|
1222
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1223
|
+
|
|
1224
|
+
|
|
1225
|
+
class OperationLocationNotInWellError(ProtocolEngineError):
|
|
1226
|
+
"""Raised when a calculated operation location is not within a well."""
|
|
1227
|
+
|
|
1228
|
+
def __init__(
|
|
1229
|
+
self,
|
|
1230
|
+
message: Optional[str] = None,
|
|
1231
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1232
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1233
|
+
) -> None:
|
|
1234
|
+
"""Build an OperationLocationNotInWellError."""
|
|
1235
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1236
|
+
|
|
1237
|
+
|
|
1238
|
+
class StorageLimitReachedError(ProtocolEngineError):
|
|
1239
|
+
"""Raised to indicate that a file cannot be created due to storage limitations."""
|
|
1240
|
+
|
|
1241
|
+
def __init__(
|
|
1242
|
+
self,
|
|
1243
|
+
message: Optional[str] = None,
|
|
1244
|
+
detail: Optional[Dict[str, str]] = None,
|
|
1245
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1246
|
+
) -> None:
|
|
1247
|
+
"""Build an StorageLimitReached."""
|
|
1248
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, detail, wrapping)
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
class LiquidClassDoesNotExistError(ProtocolEngineError):
|
|
1252
|
+
"""Raised when referencing a liquid class that has not been loaded."""
|
|
1253
|
+
|
|
1254
|
+
def __init__(
|
|
1255
|
+
self,
|
|
1256
|
+
message: Optional[str] = None,
|
|
1257
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1258
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1259
|
+
) -> None:
|
|
1260
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1261
|
+
|
|
1262
|
+
|
|
1263
|
+
class LiquidClassRedefinitionError(ProtocolEngineError):
|
|
1264
|
+
"""Raised when attempting to load a liquid class that conflicts with a liquid class already loaded."""
|
|
1265
|
+
|
|
1266
|
+
def __init__(
|
|
1267
|
+
self,
|
|
1268
|
+
message: Optional[str] = None,
|
|
1269
|
+
details: Optional[Dict[str, Any]] = None,
|
|
1270
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1271
|
+
) -> None:
|
|
1272
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1273
|
+
|
|
1274
|
+
|
|
1275
|
+
class FlexStackerNotLogicallyEmptyError(ProtocolEngineError):
|
|
1276
|
+
"""Raised when attempting a stacker operation that requires it to be empty when it is known from the protocol that it is not."""
|
|
1277
|
+
|
|
1278
|
+
def __init__(
|
|
1279
|
+
self,
|
|
1280
|
+
message: Optional[str] = None,
|
|
1281
|
+
details: Optional[dict[str, Any]] = None,
|
|
1282
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1283
|
+
) -> None:
|
|
1284
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1285
|
+
|
|
1286
|
+
|
|
1287
|
+
class FlexStackerLabwarePoolNotYetDefinedError(ProtocolEngineError):
|
|
1288
|
+
"""Raised when attempting to modify labware in a stacker whose labware pool is not yet defined."""
|
|
1289
|
+
|
|
1290
|
+
def __init__(
|
|
1291
|
+
self,
|
|
1292
|
+
message: Optional[str] = None,
|
|
1293
|
+
details: Optional[dict[str, Any]] = None,
|
|
1294
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1295
|
+
) -> None:
|
|
1296
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|
|
1297
|
+
|
|
1298
|
+
|
|
1299
|
+
class InvalidLabwarePositionError(ProtocolEngineError):
|
|
1300
|
+
"""Raised when a labware position is internally invalid."""
|
|
1301
|
+
|
|
1302
|
+
def __init__(
|
|
1303
|
+
self,
|
|
1304
|
+
message: Optional[str] = None,
|
|
1305
|
+
details: Optional[dict[str, Any]] = None,
|
|
1306
|
+
wrapping: Optional[Sequence[EnumeratedError]] = None,
|
|
1307
|
+
) -> None:
|
|
1308
|
+
super().__init__(ErrorCodes.GENERAL_ERROR, message, details, wrapping)
|