opentrons 8.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of opentrons might be problematic. Click here for more details.
- opentrons/__init__.py +150 -0
- opentrons/_version.py +34 -0
- opentrons/calibration_storage/__init__.py +54 -0
- opentrons/calibration_storage/deck_configuration.py +62 -0
- opentrons/calibration_storage/encoder_decoder.py +31 -0
- opentrons/calibration_storage/file_operators.py +142 -0
- opentrons/calibration_storage/helpers.py +103 -0
- opentrons/calibration_storage/ot2/__init__.py +34 -0
- opentrons/calibration_storage/ot2/deck_attitude.py +85 -0
- opentrons/calibration_storage/ot2/mark_bad_calibration.py +27 -0
- opentrons/calibration_storage/ot2/models/__init__.py +0 -0
- opentrons/calibration_storage/ot2/models/v1.py +149 -0
- opentrons/calibration_storage/ot2/pipette_offset.py +129 -0
- opentrons/calibration_storage/ot2/tip_length.py +281 -0
- opentrons/calibration_storage/ot3/__init__.py +31 -0
- opentrons/calibration_storage/ot3/deck_attitude.py +83 -0
- opentrons/calibration_storage/ot3/gripper_offset.py +156 -0
- opentrons/calibration_storage/ot3/models/__init__.py +0 -0
- opentrons/calibration_storage/ot3/models/v1.py +122 -0
- opentrons/calibration_storage/ot3/module_offset.py +138 -0
- opentrons/calibration_storage/ot3/pipette_offset.py +95 -0
- opentrons/calibration_storage/types.py +45 -0
- opentrons/cli/__init__.py +21 -0
- opentrons/cli/__main__.py +5 -0
- opentrons/cli/analyze.py +557 -0
- opentrons/config/__init__.py +631 -0
- opentrons/config/advanced_settings.py +871 -0
- opentrons/config/defaults_ot2.py +214 -0
- opentrons/config/defaults_ot3.py +499 -0
- opentrons/config/feature_flags.py +86 -0
- opentrons/config/gripper_config.py +55 -0
- opentrons/config/reset.py +203 -0
- opentrons/config/robot_configs.py +187 -0
- opentrons/config/types.py +183 -0
- opentrons/drivers/__init__.py +0 -0
- opentrons/drivers/absorbance_reader/__init__.py +11 -0
- opentrons/drivers/absorbance_reader/abstract.py +72 -0
- opentrons/drivers/absorbance_reader/async_byonoy.py +352 -0
- opentrons/drivers/absorbance_reader/driver.py +81 -0
- opentrons/drivers/absorbance_reader/hid_protocol.py +161 -0
- opentrons/drivers/absorbance_reader/simulator.py +84 -0
- opentrons/drivers/asyncio/__init__.py +0 -0
- opentrons/drivers/asyncio/communication/__init__.py +22 -0
- opentrons/drivers/asyncio/communication/async_serial.py +187 -0
- opentrons/drivers/asyncio/communication/errors.py +88 -0
- opentrons/drivers/asyncio/communication/serial_connection.py +557 -0
- opentrons/drivers/command_builder.py +102 -0
- opentrons/drivers/flex_stacker/__init__.py +13 -0
- opentrons/drivers/flex_stacker/abstract.py +214 -0
- opentrons/drivers/flex_stacker/driver.py +768 -0
- opentrons/drivers/flex_stacker/errors.py +68 -0
- opentrons/drivers/flex_stacker/simulator.py +309 -0
- opentrons/drivers/flex_stacker/types.py +367 -0
- opentrons/drivers/flex_stacker/utils.py +19 -0
- opentrons/drivers/heater_shaker/__init__.py +5 -0
- opentrons/drivers/heater_shaker/abstract.py +76 -0
- opentrons/drivers/heater_shaker/driver.py +204 -0
- opentrons/drivers/heater_shaker/simulator.py +94 -0
- opentrons/drivers/mag_deck/__init__.py +6 -0
- opentrons/drivers/mag_deck/abstract.py +44 -0
- opentrons/drivers/mag_deck/driver.py +208 -0
- opentrons/drivers/mag_deck/simulator.py +63 -0
- opentrons/drivers/rpi_drivers/__init__.py +33 -0
- opentrons/drivers/rpi_drivers/dev_types.py +94 -0
- opentrons/drivers/rpi_drivers/gpio.py +282 -0
- opentrons/drivers/rpi_drivers/gpio_simulator.py +127 -0
- opentrons/drivers/rpi_drivers/interfaces.py +15 -0
- opentrons/drivers/rpi_drivers/types.py +364 -0
- opentrons/drivers/rpi_drivers/usb.py +102 -0
- opentrons/drivers/rpi_drivers/usb_simulator.py +22 -0
- opentrons/drivers/serial_communication.py +151 -0
- opentrons/drivers/smoothie_drivers/__init__.py +4 -0
- opentrons/drivers/smoothie_drivers/connection.py +51 -0
- opentrons/drivers/smoothie_drivers/constants.py +121 -0
- opentrons/drivers/smoothie_drivers/driver_3_0.py +1933 -0
- opentrons/drivers/smoothie_drivers/errors.py +49 -0
- opentrons/drivers/smoothie_drivers/parse_utils.py +143 -0
- opentrons/drivers/smoothie_drivers/simulator.py +99 -0
- opentrons/drivers/smoothie_drivers/types.py +16 -0
- opentrons/drivers/temp_deck/__init__.py +10 -0
- opentrons/drivers/temp_deck/abstract.py +54 -0
- opentrons/drivers/temp_deck/driver.py +197 -0
- opentrons/drivers/temp_deck/simulator.py +57 -0
- opentrons/drivers/thermocycler/__init__.py +12 -0
- opentrons/drivers/thermocycler/abstract.py +99 -0
- opentrons/drivers/thermocycler/driver.py +395 -0
- opentrons/drivers/thermocycler/simulator.py +126 -0
- opentrons/drivers/types.py +107 -0
- opentrons/drivers/utils.py +222 -0
- opentrons/execute.py +742 -0
- opentrons/hardware_control/__init__.py +65 -0
- opentrons/hardware_control/__main__.py +77 -0
- opentrons/hardware_control/adapters.py +98 -0
- opentrons/hardware_control/api.py +1347 -0
- opentrons/hardware_control/backends/__init__.py +7 -0
- opentrons/hardware_control/backends/controller.py +400 -0
- opentrons/hardware_control/backends/errors.py +9 -0
- opentrons/hardware_control/backends/estop_state.py +164 -0
- opentrons/hardware_control/backends/flex_protocol.py +497 -0
- opentrons/hardware_control/backends/ot3controller.py +1930 -0
- opentrons/hardware_control/backends/ot3simulator.py +900 -0
- opentrons/hardware_control/backends/ot3utils.py +664 -0
- opentrons/hardware_control/backends/simulator.py +442 -0
- opentrons/hardware_control/backends/status_bar_state.py +240 -0
- opentrons/hardware_control/backends/subsystem_manager.py +431 -0
- opentrons/hardware_control/backends/tip_presence_manager.py +173 -0
- opentrons/hardware_control/backends/types.py +14 -0
- opentrons/hardware_control/constants.py +6 -0
- opentrons/hardware_control/dev_types.py +125 -0
- opentrons/hardware_control/emulation/__init__.py +0 -0
- opentrons/hardware_control/emulation/abstract_emulator.py +21 -0
- opentrons/hardware_control/emulation/app.py +56 -0
- opentrons/hardware_control/emulation/connection_handler.py +38 -0
- opentrons/hardware_control/emulation/heater_shaker.py +150 -0
- opentrons/hardware_control/emulation/magdeck.py +60 -0
- opentrons/hardware_control/emulation/module_server/__init__.py +8 -0
- opentrons/hardware_control/emulation/module_server/client.py +78 -0
- opentrons/hardware_control/emulation/module_server/helpers.py +130 -0
- opentrons/hardware_control/emulation/module_server/models.py +31 -0
- opentrons/hardware_control/emulation/module_server/server.py +110 -0
- opentrons/hardware_control/emulation/parser.py +74 -0
- opentrons/hardware_control/emulation/proxy.py +241 -0
- opentrons/hardware_control/emulation/run_emulator.py +68 -0
- opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
- opentrons/hardware_control/emulation/scripts/run_app.py +54 -0
- opentrons/hardware_control/emulation/scripts/run_module_emulator.py +72 -0
- opentrons/hardware_control/emulation/scripts/run_smoothie.py +37 -0
- opentrons/hardware_control/emulation/settings.py +119 -0
- opentrons/hardware_control/emulation/simulations.py +133 -0
- opentrons/hardware_control/emulation/smoothie.py +192 -0
- opentrons/hardware_control/emulation/tempdeck.py +69 -0
- opentrons/hardware_control/emulation/thermocycler.py +128 -0
- opentrons/hardware_control/emulation/types.py +10 -0
- opentrons/hardware_control/emulation/util.py +38 -0
- opentrons/hardware_control/errors.py +43 -0
- opentrons/hardware_control/execution_manager.py +164 -0
- opentrons/hardware_control/instruments/__init__.py +5 -0
- opentrons/hardware_control/instruments/instrument_abc.py +39 -0
- opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
- opentrons/hardware_control/instruments/ot2/instrument_calibration.py +152 -0
- opentrons/hardware_control/instruments/ot2/pipette.py +777 -0
- opentrons/hardware_control/instruments/ot2/pipette_handler.py +995 -0
- opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
- opentrons/hardware_control/instruments/ot3/gripper.py +420 -0
- opentrons/hardware_control/instruments/ot3/gripper_handler.py +173 -0
- opentrons/hardware_control/instruments/ot3/instrument_calibration.py +214 -0
- opentrons/hardware_control/instruments/ot3/pipette.py +858 -0
- opentrons/hardware_control/instruments/ot3/pipette_handler.py +1030 -0
- opentrons/hardware_control/module_control.py +332 -0
- opentrons/hardware_control/modules/__init__.py +69 -0
- opentrons/hardware_control/modules/absorbance_reader.py +373 -0
- opentrons/hardware_control/modules/errors.py +7 -0
- opentrons/hardware_control/modules/flex_stacker.py +948 -0
- opentrons/hardware_control/modules/heater_shaker.py +426 -0
- opentrons/hardware_control/modules/lid_temp_status.py +35 -0
- opentrons/hardware_control/modules/magdeck.py +233 -0
- opentrons/hardware_control/modules/mod_abc.py +245 -0
- opentrons/hardware_control/modules/module_calibration.py +93 -0
- opentrons/hardware_control/modules/plate_temp_status.py +61 -0
- opentrons/hardware_control/modules/tempdeck.py +299 -0
- opentrons/hardware_control/modules/thermocycler.py +731 -0
- opentrons/hardware_control/modules/types.py +417 -0
- opentrons/hardware_control/modules/update.py +255 -0
- opentrons/hardware_control/modules/utils.py +73 -0
- opentrons/hardware_control/motion_utilities.py +318 -0
- opentrons/hardware_control/nozzle_manager.py +422 -0
- opentrons/hardware_control/ot3_calibration.py +1171 -0
- opentrons/hardware_control/ot3api.py +3227 -0
- opentrons/hardware_control/pause_manager.py +31 -0
- opentrons/hardware_control/poller.py +112 -0
- opentrons/hardware_control/protocols/__init__.py +106 -0
- opentrons/hardware_control/protocols/asyncio_configurable.py +11 -0
- opentrons/hardware_control/protocols/calibratable.py +45 -0
- opentrons/hardware_control/protocols/chassis_accessory_manager.py +90 -0
- opentrons/hardware_control/protocols/configurable.py +48 -0
- opentrons/hardware_control/protocols/event_sourcer.py +18 -0
- opentrons/hardware_control/protocols/execution_controllable.py +33 -0
- opentrons/hardware_control/protocols/flex_calibratable.py +96 -0
- opentrons/hardware_control/protocols/flex_instrument_configurer.py +52 -0
- opentrons/hardware_control/protocols/gripper_controller.py +55 -0
- opentrons/hardware_control/protocols/hardware_manager.py +51 -0
- opentrons/hardware_control/protocols/identifiable.py +16 -0
- opentrons/hardware_control/protocols/instrument_configurer.py +206 -0
- opentrons/hardware_control/protocols/liquid_handler.py +266 -0
- opentrons/hardware_control/protocols/module_provider.py +16 -0
- opentrons/hardware_control/protocols/motion_controller.py +243 -0
- opentrons/hardware_control/protocols/position_estimator.py +45 -0
- opentrons/hardware_control/protocols/simulatable.py +10 -0
- opentrons/hardware_control/protocols/stoppable.py +9 -0
- opentrons/hardware_control/protocols/types.py +27 -0
- opentrons/hardware_control/robot_calibration.py +224 -0
- opentrons/hardware_control/scripts/README.md +28 -0
- opentrons/hardware_control/scripts/__init__.py +1 -0
- opentrons/hardware_control/scripts/gripper_control.py +208 -0
- opentrons/hardware_control/scripts/ot3gripper +7 -0
- opentrons/hardware_control/scripts/ot3repl +7 -0
- opentrons/hardware_control/scripts/repl.py +187 -0
- opentrons/hardware_control/scripts/tc_control.py +97 -0
- opentrons/hardware_control/scripts/update_module_fw.py +274 -0
- opentrons/hardware_control/simulator_setup.py +260 -0
- opentrons/hardware_control/thread_manager.py +431 -0
- opentrons/hardware_control/threaded_async_lock.py +97 -0
- opentrons/hardware_control/types.py +792 -0
- opentrons/hardware_control/util.py +234 -0
- opentrons/legacy_broker.py +53 -0
- opentrons/legacy_commands/__init__.py +1 -0
- opentrons/legacy_commands/commands.py +483 -0
- opentrons/legacy_commands/helpers.py +153 -0
- opentrons/legacy_commands/module_commands.py +276 -0
- opentrons/legacy_commands/protocol_commands.py +54 -0
- opentrons/legacy_commands/publisher.py +155 -0
- opentrons/legacy_commands/robot_commands.py +51 -0
- opentrons/legacy_commands/types.py +1186 -0
- opentrons/motion_planning/__init__.py +32 -0
- opentrons/motion_planning/adjacent_slots_getters.py +168 -0
- opentrons/motion_planning/deck_conflict.py +501 -0
- opentrons/motion_planning/errors.py +35 -0
- opentrons/motion_planning/types.py +42 -0
- opentrons/motion_planning/waypoints.py +218 -0
- opentrons/ordered_set.py +138 -0
- opentrons/protocol_api/__init__.py +105 -0
- opentrons/protocol_api/_liquid.py +157 -0
- opentrons/protocol_api/_liquid_properties.py +814 -0
- opentrons/protocol_api/_nozzle_layout.py +31 -0
- opentrons/protocol_api/_parameter_context.py +300 -0
- opentrons/protocol_api/_parameters.py +31 -0
- opentrons/protocol_api/_transfer_liquid_validation.py +108 -0
- opentrons/protocol_api/_types.py +43 -0
- opentrons/protocol_api/config.py +23 -0
- opentrons/protocol_api/core/__init__.py +23 -0
- opentrons/protocol_api/core/common.py +33 -0
- opentrons/protocol_api/core/core_map.py +74 -0
- opentrons/protocol_api/core/engine/__init__.py +22 -0
- opentrons/protocol_api/core/engine/_default_labware_versions.py +179 -0
- opentrons/protocol_api/core/engine/deck_conflict.py +400 -0
- opentrons/protocol_api/core/engine/exceptions.py +19 -0
- opentrons/protocol_api/core/engine/instrument.py +2391 -0
- opentrons/protocol_api/core/engine/labware.py +238 -0
- opentrons/protocol_api/core/engine/load_labware_params.py +73 -0
- opentrons/protocol_api/core/engine/module_core.py +1027 -0
- opentrons/protocol_api/core/engine/overlap_versions.py +20 -0
- opentrons/protocol_api/core/engine/pipette_movement_conflict.py +358 -0
- opentrons/protocol_api/core/engine/point_calculations.py +64 -0
- opentrons/protocol_api/core/engine/protocol.py +1153 -0
- opentrons/protocol_api/core/engine/robot.py +139 -0
- opentrons/protocol_api/core/engine/stringify.py +74 -0
- opentrons/protocol_api/core/engine/transfer_components_executor.py +1006 -0
- opentrons/protocol_api/core/engine/well.py +241 -0
- opentrons/protocol_api/core/instrument.py +459 -0
- opentrons/protocol_api/core/labware.py +151 -0
- opentrons/protocol_api/core/legacy/__init__.py +11 -0
- opentrons/protocol_api/core/legacy/_labware_geometry.py +37 -0
- opentrons/protocol_api/core/legacy/deck.py +369 -0
- opentrons/protocol_api/core/legacy/labware_offset_provider.py +108 -0
- opentrons/protocol_api/core/legacy/legacy_instrument_core.py +709 -0
- opentrons/protocol_api/core/legacy/legacy_labware_core.py +235 -0
- opentrons/protocol_api/core/legacy/legacy_module_core.py +592 -0
- opentrons/protocol_api/core/legacy/legacy_protocol_core.py +612 -0
- opentrons/protocol_api/core/legacy/legacy_well_core.py +162 -0
- opentrons/protocol_api/core/legacy/load_info.py +67 -0
- opentrons/protocol_api/core/legacy/module_geometry.py +547 -0
- opentrons/protocol_api/core/legacy/well_geometry.py +148 -0
- opentrons/protocol_api/core/legacy_simulator/__init__.py +16 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +624 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +85 -0
- opentrons/protocol_api/core/module.py +484 -0
- opentrons/protocol_api/core/protocol.py +311 -0
- opentrons/protocol_api/core/robot.py +51 -0
- opentrons/protocol_api/core/well.py +116 -0
- opentrons/protocol_api/core/well_grid.py +45 -0
- opentrons/protocol_api/create_protocol_context.py +177 -0
- opentrons/protocol_api/deck.py +223 -0
- opentrons/protocol_api/disposal_locations.py +244 -0
- opentrons/protocol_api/instrument_context.py +3272 -0
- opentrons/protocol_api/labware.py +1579 -0
- opentrons/protocol_api/module_contexts.py +1447 -0
- opentrons/protocol_api/module_validation_and_errors.py +61 -0
- opentrons/protocol_api/protocol_context.py +1688 -0
- opentrons/protocol_api/robot_context.py +303 -0
- opentrons/protocol_api/validation.py +761 -0
- opentrons/protocol_engine/__init__.py +155 -0
- opentrons/protocol_engine/actions/__init__.py +65 -0
- opentrons/protocol_engine/actions/action_dispatcher.py +30 -0
- opentrons/protocol_engine/actions/action_handler.py +13 -0
- opentrons/protocol_engine/actions/actions.py +302 -0
- opentrons/protocol_engine/actions/get_state_update.py +38 -0
- opentrons/protocol_engine/clients/__init__.py +5 -0
- opentrons/protocol_engine/clients/sync_client.py +174 -0
- opentrons/protocol_engine/clients/transports.py +197 -0
- opentrons/protocol_engine/commands/__init__.py +757 -0
- opentrons/protocol_engine/commands/absorbance_reader/__init__.py +61 -0
- opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +154 -0
- opentrons/protocol_engine/commands/absorbance_reader/common.py +6 -0
- opentrons/protocol_engine/commands/absorbance_reader/initialize.py +151 -0
- opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +154 -0
- opentrons/protocol_engine/commands/absorbance_reader/read.py +226 -0
- opentrons/protocol_engine/commands/air_gap_in_place.py +162 -0
- opentrons/protocol_engine/commands/aspirate.py +244 -0
- opentrons/protocol_engine/commands/aspirate_in_place.py +184 -0
- opentrons/protocol_engine/commands/aspirate_while_tracking.py +211 -0
- opentrons/protocol_engine/commands/blow_out.py +146 -0
- opentrons/protocol_engine/commands/blow_out_in_place.py +119 -0
- opentrons/protocol_engine/commands/calibration/__init__.py +60 -0
- opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +166 -0
- opentrons/protocol_engine/commands/calibration/calibrate_module.py +117 -0
- opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +96 -0
- opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +156 -0
- opentrons/protocol_engine/commands/command.py +308 -0
- opentrons/protocol_engine/commands/command_unions.py +974 -0
- opentrons/protocol_engine/commands/comment.py +57 -0
- opentrons/protocol_engine/commands/configure_for_volume.py +108 -0
- opentrons/protocol_engine/commands/configure_nozzle_layout.py +115 -0
- opentrons/protocol_engine/commands/custom.py +67 -0
- opentrons/protocol_engine/commands/dispense.py +194 -0
- opentrons/protocol_engine/commands/dispense_in_place.py +179 -0
- opentrons/protocol_engine/commands/dispense_while_tracking.py +204 -0
- opentrons/protocol_engine/commands/drop_tip.py +232 -0
- opentrons/protocol_engine/commands/drop_tip_in_place.py +205 -0
- opentrons/protocol_engine/commands/flex_stacker/__init__.py +64 -0
- opentrons/protocol_engine/commands/flex_stacker/common.py +900 -0
- opentrons/protocol_engine/commands/flex_stacker/empty.py +293 -0
- opentrons/protocol_engine/commands/flex_stacker/fill.py +281 -0
- opentrons/protocol_engine/commands/flex_stacker/retrieve.py +339 -0
- opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +328 -0
- opentrons/protocol_engine/commands/flex_stacker/store.py +339 -0
- opentrons/protocol_engine/commands/generate_command_schema.py +61 -0
- opentrons/protocol_engine/commands/get_next_tip.py +134 -0
- opentrons/protocol_engine/commands/get_tip_presence.py +87 -0
- opentrons/protocol_engine/commands/hash_command_params.py +38 -0
- opentrons/protocol_engine/commands/heater_shaker/__init__.py +102 -0
- opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +83 -0
- opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +82 -0
- opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +84 -0
- opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +110 -0
- opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +125 -0
- opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +90 -0
- opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +102 -0
- opentrons/protocol_engine/commands/home.py +100 -0
- opentrons/protocol_engine/commands/identify_module.py +86 -0
- opentrons/protocol_engine/commands/labware_handling_common.py +29 -0
- opentrons/protocol_engine/commands/liquid_probe.py +464 -0
- opentrons/protocol_engine/commands/load_labware.py +210 -0
- opentrons/protocol_engine/commands/load_lid.py +154 -0
- opentrons/protocol_engine/commands/load_lid_stack.py +272 -0
- opentrons/protocol_engine/commands/load_liquid.py +95 -0
- opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
- opentrons/protocol_engine/commands/load_module.py +223 -0
- opentrons/protocol_engine/commands/load_pipette.py +167 -0
- opentrons/protocol_engine/commands/magnetic_module/__init__.py +32 -0
- opentrons/protocol_engine/commands/magnetic_module/disengage.py +97 -0
- opentrons/protocol_engine/commands/magnetic_module/engage.py +119 -0
- opentrons/protocol_engine/commands/move_labware.py +546 -0
- opentrons/protocol_engine/commands/move_relative.py +102 -0
- opentrons/protocol_engine/commands/move_to_addressable_area.py +176 -0
- opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +198 -0
- opentrons/protocol_engine/commands/move_to_coordinates.py +107 -0
- opentrons/protocol_engine/commands/move_to_well.py +119 -0
- opentrons/protocol_engine/commands/movement_common.py +338 -0
- opentrons/protocol_engine/commands/pick_up_tip.py +241 -0
- opentrons/protocol_engine/commands/pipetting_common.py +443 -0
- opentrons/protocol_engine/commands/prepare_to_aspirate.py +121 -0
- opentrons/protocol_engine/commands/pressure_dispense.py +155 -0
- opentrons/protocol_engine/commands/reload_labware.py +90 -0
- opentrons/protocol_engine/commands/retract_axis.py +75 -0
- opentrons/protocol_engine/commands/robot/__init__.py +70 -0
- opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +96 -0
- opentrons/protocol_engine/commands/robot/common.py +18 -0
- opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
- opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
- opentrons/protocol_engine/commands/robot/move_to.py +94 -0
- opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +86 -0
- opentrons/protocol_engine/commands/save_position.py +109 -0
- opentrons/protocol_engine/commands/seal_pipette_to_tip.py +353 -0
- opentrons/protocol_engine/commands/set_rail_lights.py +67 -0
- opentrons/protocol_engine/commands/set_status_bar.py +89 -0
- opentrons/protocol_engine/commands/temperature_module/__init__.py +46 -0
- opentrons/protocol_engine/commands/temperature_module/deactivate.py +86 -0
- opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +97 -0
- opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +104 -0
- opentrons/protocol_engine/commands/thermocycler/__init__.py +152 -0
- opentrons/protocol_engine/commands/thermocycler/close_lid.py +87 -0
- opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +80 -0
- opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +80 -0
- opentrons/protocol_engine/commands/thermocycler/open_lid.py +87 -0
- opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +171 -0
- opentrons/protocol_engine/commands/thermocycler/run_profile.py +124 -0
- opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +140 -0
- opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +100 -0
- opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +93 -0
- opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +89 -0
- opentrons/protocol_engine/commands/touch_tip.py +189 -0
- opentrons/protocol_engine/commands/unsafe/__init__.py +161 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +100 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +121 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +82 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +208 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_close_latch.py +94 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_manual_retrieve.py +295 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_open_latch.py +91 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_stacker_prepare_shuttle.py +136 -0
- opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +77 -0
- opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +90 -0
- opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +153 -0
- opentrons/protocol_engine/commands/verify_tip_presence.py +100 -0
- opentrons/protocol_engine/commands/wait_for_duration.py +76 -0
- opentrons/protocol_engine/commands/wait_for_resume.py +75 -0
- opentrons/protocol_engine/create_protocol_engine.py +193 -0
- opentrons/protocol_engine/engine_support.py +28 -0
- opentrons/protocol_engine/error_recovery_policy.py +81 -0
- opentrons/protocol_engine/errors/__init__.py +191 -0
- opentrons/protocol_engine/errors/error_occurrence.py +182 -0
- opentrons/protocol_engine/errors/exceptions.py +1308 -0
- opentrons/protocol_engine/execution/__init__.py +50 -0
- opentrons/protocol_engine/execution/command_executor.py +216 -0
- opentrons/protocol_engine/execution/create_queue_worker.py +102 -0
- opentrons/protocol_engine/execution/door_watcher.py +119 -0
- opentrons/protocol_engine/execution/equipment.py +819 -0
- opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +101 -0
- opentrons/protocol_engine/execution/gantry_mover.py +686 -0
- opentrons/protocol_engine/execution/hardware_stopper.py +147 -0
- opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +207 -0
- opentrons/protocol_engine/execution/labware_movement.py +297 -0
- opentrons/protocol_engine/execution/movement.py +350 -0
- opentrons/protocol_engine/execution/pipetting.py +607 -0
- opentrons/protocol_engine/execution/queue_worker.py +86 -0
- opentrons/protocol_engine/execution/rail_lights.py +25 -0
- opentrons/protocol_engine/execution/run_control.py +33 -0
- opentrons/protocol_engine/execution/status_bar.py +34 -0
- opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +188 -0
- opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +81 -0
- opentrons/protocol_engine/execution/tip_handler.py +550 -0
- opentrons/protocol_engine/labware_offset_standardization.py +194 -0
- opentrons/protocol_engine/notes/__init__.py +17 -0
- opentrons/protocol_engine/notes/notes.py +59 -0
- opentrons/protocol_engine/plugins.py +104 -0
- opentrons/protocol_engine/protocol_engine.py +683 -0
- opentrons/protocol_engine/resources/__init__.py +26 -0
- opentrons/protocol_engine/resources/deck_configuration_provider.py +232 -0
- opentrons/protocol_engine/resources/deck_data_provider.py +94 -0
- opentrons/protocol_engine/resources/file_provider.py +161 -0
- opentrons/protocol_engine/resources/fixture_validation.py +68 -0
- opentrons/protocol_engine/resources/labware_data_provider.py +106 -0
- opentrons/protocol_engine/resources/labware_validation.py +73 -0
- opentrons/protocol_engine/resources/model_utils.py +32 -0
- opentrons/protocol_engine/resources/module_data_provider.py +44 -0
- opentrons/protocol_engine/resources/ot3_validation.py +21 -0
- opentrons/protocol_engine/resources/pipette_data_provider.py +379 -0
- opentrons/protocol_engine/slot_standardization.py +128 -0
- opentrons/protocol_engine/state/__init__.py +1 -0
- opentrons/protocol_engine/state/_abstract_store.py +27 -0
- opentrons/protocol_engine/state/_axis_aligned_bounding_box.py +50 -0
- opentrons/protocol_engine/state/_labware_origin_math.py +636 -0
- opentrons/protocol_engine/state/_move_types.py +83 -0
- opentrons/protocol_engine/state/_well_math.py +193 -0
- opentrons/protocol_engine/state/addressable_areas.py +699 -0
- opentrons/protocol_engine/state/command_history.py +309 -0
- opentrons/protocol_engine/state/commands.py +1164 -0
- opentrons/protocol_engine/state/config.py +39 -0
- opentrons/protocol_engine/state/files.py +57 -0
- opentrons/protocol_engine/state/fluid_stack.py +138 -0
- opentrons/protocol_engine/state/geometry.py +2408 -0
- opentrons/protocol_engine/state/inner_well_math_utils.py +548 -0
- opentrons/protocol_engine/state/labware.py +1432 -0
- opentrons/protocol_engine/state/liquid_classes.py +82 -0
- opentrons/protocol_engine/state/liquids.py +73 -0
- opentrons/protocol_engine/state/module_substates/__init__.py +45 -0
- opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +35 -0
- opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +112 -0
- opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +115 -0
- opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +17 -0
- opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +65 -0
- opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +67 -0
- opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +163 -0
- opentrons/protocol_engine/state/modules.py +1515 -0
- opentrons/protocol_engine/state/motion.py +373 -0
- opentrons/protocol_engine/state/pipettes.py +905 -0
- opentrons/protocol_engine/state/state.py +421 -0
- opentrons/protocol_engine/state/state_summary.py +36 -0
- opentrons/protocol_engine/state/tips.py +420 -0
- opentrons/protocol_engine/state/update_types.py +904 -0
- opentrons/protocol_engine/state/wells.py +290 -0
- opentrons/protocol_engine/types/__init__.py +310 -0
- opentrons/protocol_engine/types/automatic_tip_selection.py +39 -0
- opentrons/protocol_engine/types/command_annotations.py +53 -0
- opentrons/protocol_engine/types/deck_configuration.py +81 -0
- opentrons/protocol_engine/types/execution.py +96 -0
- opentrons/protocol_engine/types/hardware_passthrough.py +25 -0
- opentrons/protocol_engine/types/instrument.py +47 -0
- opentrons/protocol_engine/types/instrument_sensors.py +47 -0
- opentrons/protocol_engine/types/labware.py +131 -0
- opentrons/protocol_engine/types/labware_movement.py +22 -0
- opentrons/protocol_engine/types/labware_offset_location.py +111 -0
- opentrons/protocol_engine/types/labware_offset_vector.py +16 -0
- opentrons/protocol_engine/types/liquid.py +40 -0
- opentrons/protocol_engine/types/liquid_class.py +59 -0
- opentrons/protocol_engine/types/liquid_handling.py +13 -0
- opentrons/protocol_engine/types/liquid_level_detection.py +191 -0
- opentrons/protocol_engine/types/location.py +194 -0
- opentrons/protocol_engine/types/module.py +310 -0
- opentrons/protocol_engine/types/partial_tip_configuration.py +76 -0
- opentrons/protocol_engine/types/run_time_parameters.py +133 -0
- opentrons/protocol_engine/types/tip.py +18 -0
- opentrons/protocol_engine/types/util.py +21 -0
- opentrons/protocol_engine/types/well_position.py +124 -0
- opentrons/protocol_reader/__init__.py +37 -0
- opentrons/protocol_reader/extract_labware_definitions.py +66 -0
- opentrons/protocol_reader/file_format_validator.py +152 -0
- opentrons/protocol_reader/file_hasher.py +27 -0
- opentrons/protocol_reader/file_identifier.py +284 -0
- opentrons/protocol_reader/file_reader_writer.py +90 -0
- opentrons/protocol_reader/input_file.py +16 -0
- opentrons/protocol_reader/protocol_files_invalid_error.py +6 -0
- opentrons/protocol_reader/protocol_reader.py +188 -0
- opentrons/protocol_reader/protocol_source.py +124 -0
- opentrons/protocol_reader/role_analyzer.py +86 -0
- opentrons/protocol_runner/__init__.py +26 -0
- opentrons/protocol_runner/create_simulating_orchestrator.py +118 -0
- opentrons/protocol_runner/json_file_reader.py +55 -0
- opentrons/protocol_runner/json_translator.py +314 -0
- opentrons/protocol_runner/legacy_command_mapper.py +852 -0
- opentrons/protocol_runner/legacy_context_plugin.py +116 -0
- opentrons/protocol_runner/protocol_runner.py +530 -0
- opentrons/protocol_runner/python_protocol_wrappers.py +179 -0
- opentrons/protocol_runner/run_orchestrator.py +496 -0
- opentrons/protocol_runner/task_queue.py +95 -0
- opentrons/protocols/__init__.py +6 -0
- opentrons/protocols/advanced_control/__init__.py +0 -0
- opentrons/protocols/advanced_control/common.py +38 -0
- opentrons/protocols/advanced_control/mix.py +60 -0
- opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
- opentrons/protocols/advanced_control/transfers/common.py +180 -0
- opentrons/protocols/advanced_control/transfers/transfer.py +972 -0
- opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +231 -0
- opentrons/protocols/api_support/__init__.py +0 -0
- opentrons/protocols/api_support/constants.py +8 -0
- opentrons/protocols/api_support/deck_type.py +110 -0
- opentrons/protocols/api_support/definitions.py +18 -0
- opentrons/protocols/api_support/instrument.py +151 -0
- opentrons/protocols/api_support/labware_like.py +233 -0
- opentrons/protocols/api_support/tip_tracker.py +175 -0
- opentrons/protocols/api_support/types.py +32 -0
- opentrons/protocols/api_support/util.py +403 -0
- opentrons/protocols/bundle.py +89 -0
- opentrons/protocols/duration/__init__.py +4 -0
- opentrons/protocols/duration/errors.py +5 -0
- opentrons/protocols/duration/estimator.py +628 -0
- opentrons/protocols/execution/__init__.py +0 -0
- opentrons/protocols/execution/dev_types.py +181 -0
- opentrons/protocols/execution/errors.py +40 -0
- opentrons/protocols/execution/execute.py +84 -0
- opentrons/protocols/execution/execute_json_v3.py +275 -0
- opentrons/protocols/execution/execute_json_v4.py +359 -0
- opentrons/protocols/execution/execute_json_v5.py +28 -0
- opentrons/protocols/execution/execute_python.py +169 -0
- opentrons/protocols/execution/json_dispatchers.py +87 -0
- opentrons/protocols/execution/types.py +7 -0
- opentrons/protocols/geometry/__init__.py +0 -0
- opentrons/protocols/geometry/planning.py +297 -0
- opentrons/protocols/labware.py +312 -0
- opentrons/protocols/models/__init__.py +0 -0
- opentrons/protocols/models/json_protocol.py +679 -0
- opentrons/protocols/parameters/__init__.py +0 -0
- opentrons/protocols/parameters/csv_parameter_definition.py +77 -0
- opentrons/protocols/parameters/csv_parameter_interface.py +96 -0
- opentrons/protocols/parameters/exceptions.py +34 -0
- opentrons/protocols/parameters/parameter_definition.py +272 -0
- opentrons/protocols/parameters/types.py +17 -0
- opentrons/protocols/parameters/validation.py +267 -0
- opentrons/protocols/parse.py +671 -0
- opentrons/protocols/types.py +159 -0
- opentrons/py.typed +0 -0
- opentrons/resources/scripts/lpc21isp +0 -0
- opentrons/resources/smoothie-edge-8414642.hex +23010 -0
- opentrons/simulate.py +1065 -0
- opentrons/system/__init__.py +6 -0
- opentrons/system/camera.py +51 -0
- opentrons/system/log_control.py +59 -0
- opentrons/system/nmcli.py +856 -0
- opentrons/system/resin.py +24 -0
- opentrons/system/smoothie_update.py +15 -0
- opentrons/system/wifi.py +204 -0
- opentrons/tools/__init__.py +0 -0
- opentrons/tools/args_handler.py +22 -0
- opentrons/tools/write_pipette_memory.py +157 -0
- opentrons/types.py +618 -0
- opentrons/util/__init__.py +1 -0
- opentrons/util/async_helpers.py +166 -0
- opentrons/util/broker.py +84 -0
- opentrons/util/change_notifier.py +47 -0
- opentrons/util/entrypoint_util.py +278 -0
- opentrons/util/get_union_elements.py +26 -0
- opentrons/util/helpers.py +6 -0
- opentrons/util/linal.py +178 -0
- opentrons/util/logging_config.py +265 -0
- opentrons/util/logging_queue_handler.py +61 -0
- opentrons/util/performance_helpers.py +157 -0
- opentrons-8.6.0.dist-info/METADATA +37 -0
- opentrons-8.6.0.dist-info/RECORD +601 -0
- opentrons-8.6.0.dist-info/WHEEL +4 -0
- opentrons-8.6.0.dist-info/entry_points.txt +3 -0
- opentrons-8.6.0.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"""Deck state accessors for the Protocol API."""
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Iterator, List, Mapping, Optional, Tuple, Union
|
|
4
|
+
|
|
5
|
+
from opentrons_shared_data.deck.types import SlotDefV3
|
|
6
|
+
|
|
7
|
+
from opentrons.motion_planning import adjacent_slots_getters
|
|
8
|
+
from opentrons.protocols.api_support.types import APIVersion
|
|
9
|
+
from opentrons.protocols.api_support.util import APIVersionError
|
|
10
|
+
from opentrons.types import DeckLocation, DeckSlotName, StagingSlotName, Location, Point
|
|
11
|
+
from opentrons_shared_data.robot.types import RobotType
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
from .core.common import ProtocolCore
|
|
15
|
+
from .core.core_map import LoadedCoreMap
|
|
16
|
+
from .core.module import AbstractModuleCore
|
|
17
|
+
from .labware import Labware
|
|
18
|
+
from .module_contexts import ModuleContext
|
|
19
|
+
from ._types import OFF_DECK
|
|
20
|
+
from . import validation
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
DeckItem = Union[Labware, ModuleContext]
|
|
24
|
+
|
|
25
|
+
STAGING_SLOT_VERSION_GATE = APIVersion(2, 16)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class CalibrationPosition:
|
|
30
|
+
"""A calibration point on the deck of the robot.
|
|
31
|
+
|
|
32
|
+
Attributes:
|
|
33
|
+
id: Unique identifier for the calibration point.
|
|
34
|
+
position: The absolute x, y, z coordinate of the point.
|
|
35
|
+
displayName: A human-readable nickname for this point.
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
id: str
|
|
39
|
+
position: Tuple[float, float, float]
|
|
40
|
+
displayName: str
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _get_slot_name(
|
|
44
|
+
slot_key: DeckLocation, api_version: APIVersion, robot_type: RobotType
|
|
45
|
+
) -> Union[DeckSlotName, StagingSlotName]:
|
|
46
|
+
try:
|
|
47
|
+
slot = validation.ensure_and_convert_deck_slot(
|
|
48
|
+
slot_key, api_version, robot_type
|
|
49
|
+
)
|
|
50
|
+
return slot
|
|
51
|
+
except (TypeError, ValueError) as error:
|
|
52
|
+
raise KeyError(slot_key) from error
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class Deck(Mapping[DeckLocation, Optional[DeckItem]]):
|
|
56
|
+
"""A dictionary-like object to access Protocol API objects loaded on the deck.
|
|
57
|
+
|
|
58
|
+
Accessible via :py:meth:`ProtocolContext.deck`.
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
def __init__(
|
|
62
|
+
self,
|
|
63
|
+
protocol_core: ProtocolCore,
|
|
64
|
+
core_map: LoadedCoreMap,
|
|
65
|
+
api_version: APIVersion,
|
|
66
|
+
) -> None:
|
|
67
|
+
self._protocol_core = protocol_core
|
|
68
|
+
self._core_map = core_map
|
|
69
|
+
self._api_version = api_version
|
|
70
|
+
|
|
71
|
+
deck_locations = protocol_core.get_deck_definition()["locations"]
|
|
72
|
+
|
|
73
|
+
self._slot_definitions_by_name = self._protocol_core.get_slot_definitions()
|
|
74
|
+
if self._api_version >= STAGING_SLOT_VERSION_GATE:
|
|
75
|
+
self._slot_definitions_by_name.update(
|
|
76
|
+
self._protocol_core.get_staging_slot_definitions()
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
self._calibration_positions = [
|
|
80
|
+
CalibrationPosition(
|
|
81
|
+
id=point["id"],
|
|
82
|
+
displayName=point["displayName"],
|
|
83
|
+
position=(
|
|
84
|
+
point["position"][0],
|
|
85
|
+
point["position"][1],
|
|
86
|
+
point["position"][2],
|
|
87
|
+
),
|
|
88
|
+
)
|
|
89
|
+
for point in deck_locations["calibrationPoints"]
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
def __getitem__(self, key: DeckLocation) -> Optional[DeckItem]:
|
|
93
|
+
"""Get the item, if any, located in a given slot."""
|
|
94
|
+
slot_name = _get_slot_name(
|
|
95
|
+
key, self._api_version, self._protocol_core.robot_type
|
|
96
|
+
)
|
|
97
|
+
item_core = self._protocol_core.get_slot_item(slot_name)
|
|
98
|
+
item = self._core_map.get(item_core)
|
|
99
|
+
|
|
100
|
+
return item
|
|
101
|
+
|
|
102
|
+
def __delitem__(self, key: DeckLocation) -> None:
|
|
103
|
+
if self._api_version == APIVersion(2, 14):
|
|
104
|
+
# __delitem__() support history:
|
|
105
|
+
#
|
|
106
|
+
# * PAPIv<=2.13 (non Protocol Engine): Yes, but that goes through a different Deck class
|
|
107
|
+
# * PAPIv2.14 (Protocol Engine): No
|
|
108
|
+
# * PAPIv2.15 (Protocol Engine): Yes
|
|
109
|
+
raise APIVersionError(
|
|
110
|
+
api_element="Deleting deck elements",
|
|
111
|
+
until_version="2.15",
|
|
112
|
+
current_version=f"{self._api_version}",
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
slot_name = _get_slot_name(
|
|
116
|
+
key, self._api_version, self._protocol_core.robot_type
|
|
117
|
+
)
|
|
118
|
+
item_core = self._protocol_core.get_slot_item(slot_name)
|
|
119
|
+
|
|
120
|
+
if item_core is None:
|
|
121
|
+
# No-op if trying to delete from an empty slot.
|
|
122
|
+
# This matches pre-Protocol-Engine (PAPIv<=2.13) behavior.
|
|
123
|
+
pass
|
|
124
|
+
elif isinstance(item_core, AbstractModuleCore):
|
|
125
|
+
# Protocol Engine does not support removing modules from the deck.
|
|
126
|
+
# This is a change from pre-Protocol-Engine (PAPIv<=2.13) behavior, unfortunately.
|
|
127
|
+
raise TypeError(
|
|
128
|
+
f"Slot {repr(key)} contains a module, {item_core.get_display_name()}."
|
|
129
|
+
f" You can only delete labware, not modules."
|
|
130
|
+
)
|
|
131
|
+
else:
|
|
132
|
+
self._protocol_core.move_labware(
|
|
133
|
+
item_core,
|
|
134
|
+
new_location=OFF_DECK,
|
|
135
|
+
use_gripper=False,
|
|
136
|
+
pause_for_manual_move=False,
|
|
137
|
+
pick_up_offset=None,
|
|
138
|
+
drop_offset=None,
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
def __iter__(self) -> Iterator[str]:
|
|
142
|
+
"""Iterate through all deck slots."""
|
|
143
|
+
return iter(self._slot_definitions_by_name)
|
|
144
|
+
|
|
145
|
+
def __len__(self) -> int:
|
|
146
|
+
"""Get the number of slots on the deck."""
|
|
147
|
+
return len(self._slot_definitions_by_name)
|
|
148
|
+
|
|
149
|
+
# todo(mm, 2023-05-08): This may be internal and removable from this public class. Jira RSS-236.
|
|
150
|
+
def right_of(self, slot: DeckLocation) -> Optional[DeckItem]:
|
|
151
|
+
"""Get the item directly to the right of the given slot, if any."""
|
|
152
|
+
slot_name = _get_slot_name(
|
|
153
|
+
slot, self._api_version, self._protocol_core.robot_type
|
|
154
|
+
)
|
|
155
|
+
if isinstance(slot_name, DeckSlotName):
|
|
156
|
+
east_slot = adjacent_slots_getters.get_east_slot(slot_name.as_int())
|
|
157
|
+
else:
|
|
158
|
+
east_slot = None
|
|
159
|
+
|
|
160
|
+
return self[east_slot] if east_slot is not None else None
|
|
161
|
+
|
|
162
|
+
# todo(mm, 2023-05-08): This may be internal and removable from this public class. Jira RSS-236.
|
|
163
|
+
def left_of(self, slot: DeckLocation) -> Optional[DeckItem]:
|
|
164
|
+
"""Get the item directly to the left of the given slot, if any."""
|
|
165
|
+
slot_name = _get_slot_name(
|
|
166
|
+
slot, self._api_version, self._protocol_core.robot_type
|
|
167
|
+
)
|
|
168
|
+
west_slot: Optional[DeckLocation]
|
|
169
|
+
if isinstance(slot_name, DeckSlotName):
|
|
170
|
+
west_slot = adjacent_slots_getters.get_west_slot(slot_name.as_int())
|
|
171
|
+
else:
|
|
172
|
+
west_slot = adjacent_slots_getters.get_west_of_staging_slot(slot_name).id
|
|
173
|
+
|
|
174
|
+
return self[west_slot] if west_slot is not None else None
|
|
175
|
+
|
|
176
|
+
# todo(mm, 2023-05-08): This is undocumented in the public PAPI, but is used in some protocols
|
|
177
|
+
# written by Applications Engineering. Either officially document this, or decide it's internal
|
|
178
|
+
# and remove it from this class. Jira RSS-236.
|
|
179
|
+
def position_for(self, slot: DeckLocation) -> Location:
|
|
180
|
+
"""Get the absolute location of a deck slot's front-left corner."""
|
|
181
|
+
slot_name = _get_slot_name(
|
|
182
|
+
slot, self._api_version, self._protocol_core.robot_type
|
|
183
|
+
)
|
|
184
|
+
slot_definition = self._slot_definitions_by_name[slot_name.id]
|
|
185
|
+
x, y, z = slot_definition["position"]
|
|
186
|
+
normalized_slot_name = validation.internal_slot_to_public_string(
|
|
187
|
+
slot_name, self._protocol_core.robot_type
|
|
188
|
+
)
|
|
189
|
+
return Location(point=Point(x, y, z), labware=normalized_slot_name)
|
|
190
|
+
|
|
191
|
+
# todo(mm, 2023-05-08): This may be internal and removable from this public class. Jira RSS-236.
|
|
192
|
+
def get_slot_definition(self, slot: DeckLocation) -> SlotDefV3:
|
|
193
|
+
"""Get the geometric definition data of a slot."""
|
|
194
|
+
slot_name = _get_slot_name(
|
|
195
|
+
slot, self._api_version, self._protocol_core.robot_type
|
|
196
|
+
)
|
|
197
|
+
return self._slot_definitions_by_name[slot_name.id]
|
|
198
|
+
|
|
199
|
+
# todo(mm, 2023-05-08): This may be internal and removable from this public class. Jira RSS-236.
|
|
200
|
+
def get_slot_center(self, slot: DeckLocation) -> Point:
|
|
201
|
+
"""Get the absolute coordinates of a slot's center."""
|
|
202
|
+
slot_name = _get_slot_name(
|
|
203
|
+
slot, self._api_version, self._protocol_core.robot_type
|
|
204
|
+
)
|
|
205
|
+
return self._protocol_core.get_slot_center(slot_name)
|
|
206
|
+
|
|
207
|
+
# todo(mm, 2023-05-08): This may be internal and removable from this public class. Jira RSS-236.
|
|
208
|
+
@property
|
|
209
|
+
def highest_z(self) -> float:
|
|
210
|
+
"""Get the height of the tallest known point on the deck."""
|
|
211
|
+
return self._protocol_core.get_highest_z()
|
|
212
|
+
|
|
213
|
+
# todo(mm, 2023-05-08): This appears internal. Remove it from this public class. Jira RSS-236.
|
|
214
|
+
@property
|
|
215
|
+
def slots(self) -> List[SlotDefV3]:
|
|
216
|
+
"""Get a list of all slot definitions."""
|
|
217
|
+
return list(self._slot_definitions_by_name.values())
|
|
218
|
+
|
|
219
|
+
# todo(mm, 2023-05-08): This appears internal. Remove it from this public class. Jira RSS-236.
|
|
220
|
+
@property
|
|
221
|
+
def calibration_positions(self) -> List[CalibrationPosition]:
|
|
222
|
+
"""Get a list of all calibration positions on the deck."""
|
|
223
|
+
return list(self._calibration_positions)
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dataclasses import dataclass
|
|
4
|
+
from typing_extensions import Protocol as TypingProtocol
|
|
5
|
+
|
|
6
|
+
from opentrons.types import DeckSlotName
|
|
7
|
+
from opentrons.protocols.api_support.types import APIVersion
|
|
8
|
+
from opentrons.protocols.api_support.util import requires_version
|
|
9
|
+
from opentrons.protocol_engine.clients import SyncClient
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# TODO(jbl 2024-02-26) these are hardcoded here since there is a 1 to many relationship going from
|
|
13
|
+
# addressable area names to cutout fixture ids. Currently for trash and waste chute this would not be
|
|
14
|
+
# an issue (trash has only one fixture that provides it, all waste chute fixtures are the same height).
|
|
15
|
+
# The ultimate fix for this is a multiple pass analysis, so for now these are being hardcoded to avoid
|
|
16
|
+
# writing cumbersome guessing logic for area name -> fixture name while still providing a direct link to
|
|
17
|
+
# the numbers in shared data.
|
|
18
|
+
_TRASH_BIN_CUTOUT_FIXTURE = "trashBinAdapter"
|
|
19
|
+
_TRASH_BIN_OT2_CUTOUT_FIXTURE = "fixedTrashSlot"
|
|
20
|
+
_WASTE_CHUTE_CUTOUT_FIXTURE = "wasteChuteRightAdapterCovered"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass(frozen=True)
|
|
24
|
+
class DisposalOffset:
|
|
25
|
+
x: float
|
|
26
|
+
y: float
|
|
27
|
+
z: float
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class _DisposalLocation(TypingProtocol):
|
|
31
|
+
"""Abstract class for disposal location."""
|
|
32
|
+
|
|
33
|
+
def top(self, x: float = 0, y: float = 0, z: float = 0) -> _DisposalLocation:
|
|
34
|
+
"""Returns a disposal location with a user set offset."""
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def offset(self) -> DisposalOffset:
|
|
39
|
+
"""Offset of the disposal location.
|
|
40
|
+
|
|
41
|
+
:meta private:
|
|
42
|
+
|
|
43
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
44
|
+
"""
|
|
45
|
+
...
|
|
46
|
+
|
|
47
|
+
@property
|
|
48
|
+
def location(self) -> DeckSlotName:
|
|
49
|
+
"""Location of the disposal location.
|
|
50
|
+
|
|
51
|
+
:meta private:
|
|
52
|
+
|
|
53
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
54
|
+
"""
|
|
55
|
+
...
|
|
56
|
+
|
|
57
|
+
@property
|
|
58
|
+
def area_name(self) -> str:
|
|
59
|
+
"""Addressable area name of the disposal location.
|
|
60
|
+
|
|
61
|
+
:meta private:
|
|
62
|
+
|
|
63
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
64
|
+
"""
|
|
65
|
+
...
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def height(self) -> float:
|
|
69
|
+
"""Height of the disposal location.
|
|
70
|
+
|
|
71
|
+
:meta private:
|
|
72
|
+
|
|
73
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
74
|
+
"""
|
|
75
|
+
...
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class TrashBin(_DisposalLocation):
|
|
79
|
+
"""Represents a Flex or OT-2 trash bin.
|
|
80
|
+
|
|
81
|
+
See :py:meth:`.ProtocolContext.load_trash_bin`.
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
def __init__(
|
|
85
|
+
self,
|
|
86
|
+
location: DeckSlotName,
|
|
87
|
+
addressable_area_name: str,
|
|
88
|
+
engine_client: SyncClient,
|
|
89
|
+
api_version: APIVersion,
|
|
90
|
+
offset: DisposalOffset = DisposalOffset(x=0, y=0, z=0),
|
|
91
|
+
) -> None:
|
|
92
|
+
self._location = location
|
|
93
|
+
self._addressable_area_name = addressable_area_name
|
|
94
|
+
self._offset = offset
|
|
95
|
+
self._api_version = api_version
|
|
96
|
+
self._engine_client = engine_client
|
|
97
|
+
if self._engine_client.state.config.robot_type == "OT-2 Standard":
|
|
98
|
+
self._cutout_fixture_name = _TRASH_BIN_OT2_CUTOUT_FIXTURE
|
|
99
|
+
else:
|
|
100
|
+
self._cutout_fixture_name = _TRASH_BIN_CUTOUT_FIXTURE
|
|
101
|
+
|
|
102
|
+
@requires_version(2, 18)
|
|
103
|
+
def top(self, x: float = 0, y: float = 0, z: float = 0) -> TrashBin:
|
|
104
|
+
"""Add a location offset to a trash bin.
|
|
105
|
+
|
|
106
|
+
The default location (``x``, ``y``, and ``z`` all set to ``0``) is the center of
|
|
107
|
+
the bin on the x- and y-axes, and slightly below its physical top on the z-axis.
|
|
108
|
+
|
|
109
|
+
Offsets can be positive or negative and are measured in mm.
|
|
110
|
+
See :ref:`protocol-api-deck-coords`.
|
|
111
|
+
"""
|
|
112
|
+
return TrashBin(
|
|
113
|
+
location=self._location,
|
|
114
|
+
addressable_area_name=self._addressable_area_name,
|
|
115
|
+
engine_client=self._engine_client,
|
|
116
|
+
api_version=self._api_version,
|
|
117
|
+
offset=DisposalOffset(x=x, y=y, z=z),
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
@property
|
|
121
|
+
def offset(self) -> DisposalOffset:
|
|
122
|
+
"""Current offset of the trash bin.
|
|
123
|
+
|
|
124
|
+
:meta private:
|
|
125
|
+
|
|
126
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
127
|
+
"""
|
|
128
|
+
return self._offset
|
|
129
|
+
|
|
130
|
+
@property
|
|
131
|
+
def location(self) -> DeckSlotName:
|
|
132
|
+
"""Location of the trash bin.
|
|
133
|
+
|
|
134
|
+
:meta private:
|
|
135
|
+
|
|
136
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
137
|
+
"""
|
|
138
|
+
return self._location
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def area_name(self) -> str:
|
|
142
|
+
"""Addressable area name of the trash bin.
|
|
143
|
+
|
|
144
|
+
:meta private:
|
|
145
|
+
|
|
146
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
147
|
+
"""
|
|
148
|
+
return self._addressable_area_name
|
|
149
|
+
|
|
150
|
+
@property
|
|
151
|
+
def height(self) -> float:
|
|
152
|
+
"""Height of the trash bin.
|
|
153
|
+
|
|
154
|
+
:meta private:
|
|
155
|
+
|
|
156
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
157
|
+
"""
|
|
158
|
+
return self._engine_client.state.addressable_areas.get_fixture_height(
|
|
159
|
+
self._cutout_fixture_name
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class WasteChute(_DisposalLocation):
|
|
164
|
+
"""Represents a Flex waste chute.
|
|
165
|
+
|
|
166
|
+
See :py:meth:`.ProtocolContext.load_waste_chute`.
|
|
167
|
+
"""
|
|
168
|
+
|
|
169
|
+
def __init__(
|
|
170
|
+
self,
|
|
171
|
+
engine_client: SyncClient,
|
|
172
|
+
api_version: APIVersion,
|
|
173
|
+
offset: DisposalOffset = DisposalOffset(x=0, y=0, z=0),
|
|
174
|
+
) -> None:
|
|
175
|
+
self._engine_client = engine_client
|
|
176
|
+
self._api_version = api_version
|
|
177
|
+
self._offset = offset
|
|
178
|
+
|
|
179
|
+
@requires_version(2, 18)
|
|
180
|
+
def top(self, x: float = 0, y: float = 0, z: float = 0) -> WasteChute:
|
|
181
|
+
"""Add a location offset to a waste chute.
|
|
182
|
+
|
|
183
|
+
The default location (``x``, ``y``, and ``z`` all set to ``0``) is the center of
|
|
184
|
+
the chute's opening on the x- and y-axes, and slightly below its physical top
|
|
185
|
+
on the z-axis. See :ref:`configure-waste-chute` for more information on possible
|
|
186
|
+
configurations of the chute.
|
|
187
|
+
|
|
188
|
+
Offsets can be positive or negative and are measured in mm.
|
|
189
|
+
See :ref:`protocol-api-deck-coords`.
|
|
190
|
+
"""
|
|
191
|
+
return WasteChute(
|
|
192
|
+
engine_client=self._engine_client,
|
|
193
|
+
api_version=self._api_version,
|
|
194
|
+
offset=DisposalOffset(x=x, y=y, z=z),
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
@property
|
|
198
|
+
def offset(self) -> DisposalOffset:
|
|
199
|
+
"""Current offset of the waste chute.
|
|
200
|
+
|
|
201
|
+
:meta private:
|
|
202
|
+
|
|
203
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
204
|
+
"""
|
|
205
|
+
return self._offset
|
|
206
|
+
|
|
207
|
+
@property
|
|
208
|
+
def location(self) -> DeckSlotName:
|
|
209
|
+
"""Location of the waste chute.
|
|
210
|
+
|
|
211
|
+
:meta private:
|
|
212
|
+
|
|
213
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
214
|
+
"""
|
|
215
|
+
return DeckSlotName.SLOT_D3
|
|
216
|
+
|
|
217
|
+
@property
|
|
218
|
+
def area_name(self) -> str:
|
|
219
|
+
"""Addressable area name of the waste chute.
|
|
220
|
+
|
|
221
|
+
:meta private:
|
|
222
|
+
|
|
223
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
224
|
+
"""
|
|
225
|
+
# TODO(jbl 2024-02-06) this is hardcoded here and should be removed when a multiple pass analysis exists
|
|
226
|
+
#
|
|
227
|
+
# We want to tell Protocol Engine that there's a waste chute in the waste chute location when it's loaded,
|
|
228
|
+
# so analysis can prevent the user from doing anything that would collide with it. At the same time, we
|
|
229
|
+
# do not want to create a false negative when it comes to addressable area conflict. We therefore use the
|
|
230
|
+
# addressable area `1ChannelWasteChute` because every waste chute cutout fixture provides it and it will
|
|
231
|
+
# provide the engine with the information it needs.
|
|
232
|
+
return "1ChannelWasteChute"
|
|
233
|
+
|
|
234
|
+
@property
|
|
235
|
+
def height(self) -> float:
|
|
236
|
+
"""Height of the waste chute.
|
|
237
|
+
|
|
238
|
+
:meta private:
|
|
239
|
+
|
|
240
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
241
|
+
"""
|
|
242
|
+
return self._engine_client.state.addressable_areas.get_fixture_height(
|
|
243
|
+
_WASTE_CHUTE_CUTOUT_FIXTURE
|
|
244
|
+
)
|