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,85 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from typing import Dict, Optional
|
|
3
|
+
|
|
4
|
+
from opentrons_shared_data.pipette.types import PipetteNameType
|
|
5
|
+
from opentrons_shared_data.pipette.pipette_load_name_conversions import (
|
|
6
|
+
convert_to_pipette_name_type,
|
|
7
|
+
)
|
|
8
|
+
from opentrons_shared_data.pipette.types import PipetteGenerationType
|
|
9
|
+
|
|
10
|
+
from opentrons.types import Mount
|
|
11
|
+
|
|
12
|
+
from ..protocol import AbstractProtocol
|
|
13
|
+
from ..legacy.legacy_protocol_core import LegacyProtocolCore
|
|
14
|
+
from ..legacy.legacy_labware_core import LegacyLabwareCore
|
|
15
|
+
from ..legacy.legacy_module_core import LegacyModuleCore
|
|
16
|
+
from ..legacy.load_info import InstrumentLoadInfo
|
|
17
|
+
|
|
18
|
+
from .legacy_instrument_core import LegacyInstrumentCoreSimulator
|
|
19
|
+
|
|
20
|
+
logger = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class LegacyProtocolCoreSimulator(
|
|
24
|
+
LegacyProtocolCore,
|
|
25
|
+
AbstractProtocol[
|
|
26
|
+
LegacyInstrumentCoreSimulator, LegacyLabwareCore, LegacyModuleCore
|
|
27
|
+
],
|
|
28
|
+
):
|
|
29
|
+
_instruments: Dict[Mount, Optional[LegacyInstrumentCoreSimulator]] # type: ignore[assignment]
|
|
30
|
+
|
|
31
|
+
def load_instrument( # type: ignore[override]
|
|
32
|
+
self,
|
|
33
|
+
instrument_name: PipetteNameType,
|
|
34
|
+
mount: Mount,
|
|
35
|
+
liquid_presence_detection: bool = False,
|
|
36
|
+
) -> LegacyInstrumentCoreSimulator:
|
|
37
|
+
"""Create a simulating instrument context."""
|
|
38
|
+
pipette_generation = convert_to_pipette_name_type(
|
|
39
|
+
instrument_name.value
|
|
40
|
+
).pipette_generation
|
|
41
|
+
|
|
42
|
+
if pipette_generation not in [
|
|
43
|
+
PipetteGenerationType.GEN1,
|
|
44
|
+
PipetteGenerationType.GEN2,
|
|
45
|
+
]:
|
|
46
|
+
raise ValueError(f"{instrument_name} is not a valid OT-2 pipette.")
|
|
47
|
+
|
|
48
|
+
existing_instrument = self._instruments[mount]
|
|
49
|
+
|
|
50
|
+
if (
|
|
51
|
+
existing_instrument
|
|
52
|
+
and existing_instrument.get_requested_as_name() == instrument_name.value
|
|
53
|
+
):
|
|
54
|
+
# Replacing with the exact same instrument name. Just return the
|
|
55
|
+
# existing instrument instance.
|
|
56
|
+
return existing_instrument
|
|
57
|
+
|
|
58
|
+
attached = {
|
|
59
|
+
att_mount: instr.get("name", None)
|
|
60
|
+
for att_mount, instr in self._sync_hardware.attached_instruments.items()
|
|
61
|
+
if instr
|
|
62
|
+
}
|
|
63
|
+
attached[mount] = instrument_name.value
|
|
64
|
+
self._sync_hardware.cache_instruments(attached)
|
|
65
|
+
|
|
66
|
+
pipette_dict = self._sync_hardware.get_attached_instruments()[mount]
|
|
67
|
+
new_instr = LegacyInstrumentCoreSimulator(
|
|
68
|
+
protocol_interface=self,
|
|
69
|
+
pipette_dict=pipette_dict,
|
|
70
|
+
mount=mount,
|
|
71
|
+
instrument_name=instrument_name.value,
|
|
72
|
+
api_version=self._api_version,
|
|
73
|
+
)
|
|
74
|
+
self._instruments[mount] = new_instr
|
|
75
|
+
|
|
76
|
+
logger.info(f"Instrument {new_instr} loaded")
|
|
77
|
+
self._equipment_broker.publish(
|
|
78
|
+
InstrumentLoadInfo(
|
|
79
|
+
instrument_load_name=instrument_name.value,
|
|
80
|
+
mount=mount,
|
|
81
|
+
pipette_dict=pipette_dict,
|
|
82
|
+
)
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
return new_instr
|
|
@@ -0,0 +1,484 @@
|
|
|
1
|
+
"""Core module control interfaces."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from abc import ABC, abstractmethod
|
|
6
|
+
from typing import List, Dict, Optional, TypeVar, ClassVar, Sequence, Any, Generic
|
|
7
|
+
|
|
8
|
+
from opentrons.drivers.types import (
|
|
9
|
+
HeaterShakerLabwareLatchStatus,
|
|
10
|
+
ThermocyclerLidStatus,
|
|
11
|
+
)
|
|
12
|
+
from opentrons.hardware_control.modules.types import (
|
|
13
|
+
ModuleModel,
|
|
14
|
+
ModuleType,
|
|
15
|
+
TemperatureStatus,
|
|
16
|
+
ThermocyclerStep,
|
|
17
|
+
MagneticStatus,
|
|
18
|
+
SpeedStatus,
|
|
19
|
+
)
|
|
20
|
+
from .labware import LabwareCoreType, AbstractLabware
|
|
21
|
+
from opentrons.protocol_engine.types import ABSMeasureMode
|
|
22
|
+
from opentrons.types import DeckSlotName
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class AbstractModuleCore(ABC, Generic[LabwareCoreType]):
|
|
26
|
+
"""Abstract core module control interface."""
|
|
27
|
+
|
|
28
|
+
MODULE_TYPE: ClassVar[ModuleType]
|
|
29
|
+
|
|
30
|
+
@abstractmethod
|
|
31
|
+
def get_model(self) -> ModuleModel:
|
|
32
|
+
"""Get the module's model identifier."""
|
|
33
|
+
|
|
34
|
+
@abstractmethod
|
|
35
|
+
def get_deck_slot(self) -> DeckSlotName:
|
|
36
|
+
"""Get the module's deck slot."""
|
|
37
|
+
|
|
38
|
+
@abstractmethod
|
|
39
|
+
def get_deck_slot_id(self) -> str:
|
|
40
|
+
"""Get the module's deck slot in a robot accurate format."""
|
|
41
|
+
|
|
42
|
+
@abstractmethod
|
|
43
|
+
def get_display_name(self) -> str:
|
|
44
|
+
"""Get the module's display name."""
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
ModuleCoreType = TypeVar("ModuleCoreType", bound=AbstractModuleCore[Any])
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class AbstractTemperatureModuleCore(
|
|
51
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
52
|
+
):
|
|
53
|
+
"""Core control interface for an attached Temperature Module."""
|
|
54
|
+
|
|
55
|
+
MODULE_TYPE: ClassVar = ModuleType.TEMPERATURE
|
|
56
|
+
|
|
57
|
+
@abstractmethod
|
|
58
|
+
def get_serial_number(self) -> str:
|
|
59
|
+
"""Get the module's unique hardware serial number."""
|
|
60
|
+
|
|
61
|
+
@abstractmethod
|
|
62
|
+
def set_target_temperature(self, celsius: float) -> None:
|
|
63
|
+
"""Set the Temperature Module's target temperature in °C."""
|
|
64
|
+
|
|
65
|
+
@abstractmethod
|
|
66
|
+
def wait_for_target_temperature(self, celsius: Optional[float] = None) -> None:
|
|
67
|
+
"""Wait until the module's target temperature is reached.
|
|
68
|
+
|
|
69
|
+
Specifying a value for ``celsius`` that is different than
|
|
70
|
+
the module's current target temperature may behave unpredictably.
|
|
71
|
+
"""
|
|
72
|
+
|
|
73
|
+
@abstractmethod
|
|
74
|
+
def deactivate(self) -> None:
|
|
75
|
+
"""Deactivate the Temperature Module."""
|
|
76
|
+
|
|
77
|
+
@abstractmethod
|
|
78
|
+
def get_current_temperature(self) -> float:
|
|
79
|
+
"""Get the module's current temperature in °C."""
|
|
80
|
+
|
|
81
|
+
@abstractmethod
|
|
82
|
+
def get_target_temperature(self) -> Optional[float]:
|
|
83
|
+
"""Get the module's target temperature in °C, if set."""
|
|
84
|
+
|
|
85
|
+
@abstractmethod
|
|
86
|
+
def get_status(self) -> TemperatureStatus:
|
|
87
|
+
"""Get the module's current temperature status."""
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class AbstractMagneticModuleCore(
|
|
91
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
92
|
+
):
|
|
93
|
+
"""Core control interface for an attached Magnetic Module."""
|
|
94
|
+
|
|
95
|
+
MODULE_TYPE: ClassVar = ModuleType.MAGNETIC
|
|
96
|
+
|
|
97
|
+
@abstractmethod
|
|
98
|
+
def get_serial_number(self) -> str:
|
|
99
|
+
"""Get the module's unique hardware serial number."""
|
|
100
|
+
|
|
101
|
+
@abstractmethod
|
|
102
|
+
def engage(
|
|
103
|
+
self,
|
|
104
|
+
height_from_base: Optional[float] = None,
|
|
105
|
+
height_from_home: Optional[float] = None,
|
|
106
|
+
) -> None:
|
|
107
|
+
"""Raise the module's magnets.
|
|
108
|
+
|
|
109
|
+
Only one of `height_from_base` or `height_from_home` may be specified.
|
|
110
|
+
|
|
111
|
+
Args:
|
|
112
|
+
height_from_base: Distance from labware base to raise the magnets.
|
|
113
|
+
height_from_home: Distance from motor home position to raise the magnets.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
@abstractmethod
|
|
117
|
+
def engage_to_labware(
|
|
118
|
+
self, offset: float = 0, preserve_half_mm: bool = False
|
|
119
|
+
) -> None:
|
|
120
|
+
"""Raise the module's magnets up to its loaded labware.
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
offset: Offset from the labware's default engage height.
|
|
124
|
+
preserve_half_mm: For labware whose definitions
|
|
125
|
+
erroneously use half-mm for their defined default engage height,
|
|
126
|
+
use the value directly instead of converting it to real millimeters.
|
|
127
|
+
|
|
128
|
+
Raises:
|
|
129
|
+
Exception: Labware is not loaded or has no default engage height.
|
|
130
|
+
"""
|
|
131
|
+
|
|
132
|
+
@abstractmethod
|
|
133
|
+
def disengage(self) -> None:
|
|
134
|
+
"""Lower the magnets back into the module."""
|
|
135
|
+
|
|
136
|
+
@abstractmethod
|
|
137
|
+
def get_status(self) -> MagneticStatus:
|
|
138
|
+
"""Get the module's current magnet status."""
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
class AbstractThermocyclerCore(
|
|
142
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
143
|
+
):
|
|
144
|
+
"""Core control interface for an attached Thermocycler Module."""
|
|
145
|
+
|
|
146
|
+
MODULE_TYPE: ClassVar = ModuleType.THERMOCYCLER
|
|
147
|
+
|
|
148
|
+
@abstractmethod
|
|
149
|
+
def get_serial_number(self) -> str:
|
|
150
|
+
"""Get the module's unique hardware serial number."""
|
|
151
|
+
|
|
152
|
+
@abstractmethod
|
|
153
|
+
def open_lid(self) -> ThermocyclerLidStatus:
|
|
154
|
+
"""Open the Thermocycler's lid."""
|
|
155
|
+
|
|
156
|
+
@abstractmethod
|
|
157
|
+
def close_lid(self) -> ThermocyclerLidStatus:
|
|
158
|
+
"""Close the Thermocycler's lid."""
|
|
159
|
+
|
|
160
|
+
@abstractmethod
|
|
161
|
+
def set_target_block_temperature(
|
|
162
|
+
self,
|
|
163
|
+
celsius: float,
|
|
164
|
+
hold_time_seconds: Optional[float] = None,
|
|
165
|
+
block_max_volume: Optional[float] = None,
|
|
166
|
+
) -> None:
|
|
167
|
+
"""Set the target temperature for the well block, in °C.
|
|
168
|
+
|
|
169
|
+
Note:
|
|
170
|
+
If ``hold_time_seconds`` is not specified, the Thermocycler
|
|
171
|
+
will proceed to the next command after ``temperature`` is reached.
|
|
172
|
+
Args:
|
|
173
|
+
celsius: The target temperature, in °C.
|
|
174
|
+
hold_time_seconds: The number of seconds to hold, after reaching
|
|
175
|
+
``temperature``, before proceeding to the next command.
|
|
176
|
+
block_max_volume: The maximum volume of any individual well
|
|
177
|
+
of the loaded labware. If not supplied, the thermocycler
|
|
178
|
+
will default to 25µL/well.
|
|
179
|
+
"""
|
|
180
|
+
|
|
181
|
+
@abstractmethod
|
|
182
|
+
def wait_for_block_temperature(self) -> None:
|
|
183
|
+
"""Wait for target block temperature to be reached."""
|
|
184
|
+
|
|
185
|
+
@abstractmethod
|
|
186
|
+
def set_target_lid_temperature(self, celsius: float) -> None:
|
|
187
|
+
"""Set the target temperature for the heated lid, in °C."""
|
|
188
|
+
|
|
189
|
+
@abstractmethod
|
|
190
|
+
def wait_for_lid_temperature(self) -> None:
|
|
191
|
+
"""Wait for target lid temperature to be reached."""
|
|
192
|
+
|
|
193
|
+
@abstractmethod
|
|
194
|
+
def execute_profile(
|
|
195
|
+
self,
|
|
196
|
+
steps: List[ThermocyclerStep],
|
|
197
|
+
repetitions: int,
|
|
198
|
+
block_max_volume: Optional[float] = None,
|
|
199
|
+
) -> None:
|
|
200
|
+
"""Execute a Thermocycler Profile.
|
|
201
|
+
|
|
202
|
+
Profile defined as a cycle of ``steps`` to repeat for a given number of ``repetitions``
|
|
203
|
+
|
|
204
|
+
Note:
|
|
205
|
+
Unlike the :py:meth:`set_block_temperature`, either or both of
|
|
206
|
+
'hold_time_minutes' and 'hold_time_seconds' must be defined
|
|
207
|
+
and finite for each step.
|
|
208
|
+
Args:
|
|
209
|
+
steps: List of unique steps that make up a single cycle.
|
|
210
|
+
Each list item should be a dictionary that maps to
|
|
211
|
+
the parameters of the :py:meth:`set_block_temperature`
|
|
212
|
+
method with keys 'temperature', 'hold_time_seconds',
|
|
213
|
+
and 'hold_time_minutes'.
|
|
214
|
+
repetitions: The number of times to repeat the cycled steps.
|
|
215
|
+
block_max_volume: The maximum volume of any individual well
|
|
216
|
+
of the loaded labware. If not supplied, the thermocycler
|
|
217
|
+
will default to 25µL/well.
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
@abstractmethod
|
|
221
|
+
def deactivate_lid(self) -> None:
|
|
222
|
+
"""Turn off the heated lid."""
|
|
223
|
+
|
|
224
|
+
@abstractmethod
|
|
225
|
+
def deactivate_block(self) -> None:
|
|
226
|
+
"""Turn off the well block temperature controller"""
|
|
227
|
+
|
|
228
|
+
@abstractmethod
|
|
229
|
+
def deactivate(self) -> None:
|
|
230
|
+
"""Turn off the well block temperature controller, and heated lid"""
|
|
231
|
+
|
|
232
|
+
@abstractmethod
|
|
233
|
+
def get_lid_position(self) -> Optional[ThermocyclerLidStatus]:
|
|
234
|
+
"""Get the Thermocycler's lid position."""
|
|
235
|
+
|
|
236
|
+
@abstractmethod
|
|
237
|
+
def get_block_temperature_status(self) -> TemperatureStatus:
|
|
238
|
+
"""Get the Thermocycler's block temperature status."""
|
|
239
|
+
|
|
240
|
+
@abstractmethod
|
|
241
|
+
def get_lid_temperature_status(self) -> Optional[TemperatureStatus]:
|
|
242
|
+
"""Get the Thermocycler's lid temperature status."""
|
|
243
|
+
|
|
244
|
+
@abstractmethod
|
|
245
|
+
def get_block_temperature(self) -> Optional[float]:
|
|
246
|
+
"""Get the Thermocycler's current block temperature in °C."""
|
|
247
|
+
|
|
248
|
+
@abstractmethod
|
|
249
|
+
def get_block_target_temperature(self) -> Optional[float]:
|
|
250
|
+
"""Get the Thermocycler's target block temperature in °C."""
|
|
251
|
+
|
|
252
|
+
@abstractmethod
|
|
253
|
+
def get_lid_temperature(self) -> Optional[float]:
|
|
254
|
+
"""Get the Thermocycler's current lid temperature in °C."""
|
|
255
|
+
|
|
256
|
+
@abstractmethod
|
|
257
|
+
def get_lid_target_temperature(self) -> Optional[float]:
|
|
258
|
+
"""Get the Thermocycler's target lid temperature in °C."""
|
|
259
|
+
|
|
260
|
+
@abstractmethod
|
|
261
|
+
def get_ramp_rate(self) -> Optional[float]:
|
|
262
|
+
"""Get the Thermocycler's current ramp rate in °C/sec."""
|
|
263
|
+
|
|
264
|
+
@abstractmethod
|
|
265
|
+
def get_hold_time(self) -> Optional[float]:
|
|
266
|
+
"""Get the remaining hold time in seconds."""
|
|
267
|
+
|
|
268
|
+
@abstractmethod
|
|
269
|
+
def get_total_cycle_count(self) -> Optional[int]:
|
|
270
|
+
"""Get number of repetitions for current set cycle."""
|
|
271
|
+
|
|
272
|
+
@abstractmethod
|
|
273
|
+
def get_current_cycle_index(self) -> Optional[int]:
|
|
274
|
+
"""Get index of the current set cycle repetition."""
|
|
275
|
+
|
|
276
|
+
@abstractmethod
|
|
277
|
+
def get_total_step_count(self) -> Optional[int]:
|
|
278
|
+
"""Get number of steps within the current cycle."""
|
|
279
|
+
|
|
280
|
+
@abstractmethod
|
|
281
|
+
def get_current_step_index(self) -> Optional[int]:
|
|
282
|
+
"""Get the index of the current step within the current cycle."""
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
class AbstractHeaterShakerCore(
|
|
286
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
287
|
+
):
|
|
288
|
+
"""Core control interface for an attached Heater-Shaker Module."""
|
|
289
|
+
|
|
290
|
+
MODULE_TYPE: ClassVar = ModuleType.HEATER_SHAKER
|
|
291
|
+
|
|
292
|
+
@abstractmethod
|
|
293
|
+
def get_serial_number(self) -> str:
|
|
294
|
+
"""Get the module's unique hardware serial number."""
|
|
295
|
+
|
|
296
|
+
@abstractmethod
|
|
297
|
+
def set_target_temperature(self, celsius: float) -> None:
|
|
298
|
+
"""Set the labware plate's target temperature in °C."""
|
|
299
|
+
|
|
300
|
+
@abstractmethod
|
|
301
|
+
def wait_for_target_temperature(self) -> None:
|
|
302
|
+
"""Wait for the labware plate's target temperature to be reached."""
|
|
303
|
+
|
|
304
|
+
@abstractmethod
|
|
305
|
+
def set_and_wait_for_shake_speed(self, rpm: int) -> None:
|
|
306
|
+
"""Set the shaker's target shake speed and wait for it to spin up."""
|
|
307
|
+
|
|
308
|
+
@abstractmethod
|
|
309
|
+
def open_labware_latch(self) -> None:
|
|
310
|
+
"""Open the labware latch."""
|
|
311
|
+
|
|
312
|
+
@abstractmethod
|
|
313
|
+
def close_labware_latch(self) -> None:
|
|
314
|
+
"""Close the labware latch."""
|
|
315
|
+
|
|
316
|
+
@abstractmethod
|
|
317
|
+
def deactivate_shaker(self) -> None:
|
|
318
|
+
"""Stop shaking."""
|
|
319
|
+
|
|
320
|
+
@abstractmethod
|
|
321
|
+
def deactivate_heater(self) -> None:
|
|
322
|
+
"""Stop heating."""
|
|
323
|
+
|
|
324
|
+
@abstractmethod
|
|
325
|
+
def get_current_temperature(self) -> float:
|
|
326
|
+
"""Get the labware plate's current temperature in °C."""
|
|
327
|
+
|
|
328
|
+
@abstractmethod
|
|
329
|
+
def get_target_temperature(self) -> Optional[float]:
|
|
330
|
+
"""Get the labware plate's target temperature in °C, if set."""
|
|
331
|
+
|
|
332
|
+
@abstractmethod
|
|
333
|
+
def get_current_speed(self) -> int:
|
|
334
|
+
"""Get the shaker's current speed in RPM."""
|
|
335
|
+
|
|
336
|
+
@abstractmethod
|
|
337
|
+
def get_target_speed(self) -> Optional[int]:
|
|
338
|
+
"""Get the shaker's target speed in RPM, if set."""
|
|
339
|
+
|
|
340
|
+
@abstractmethod
|
|
341
|
+
def get_temperature_status(self) -> TemperatureStatus:
|
|
342
|
+
"""Get the module's heater status."""
|
|
343
|
+
|
|
344
|
+
@abstractmethod
|
|
345
|
+
def get_speed_status(self) -> SpeedStatus:
|
|
346
|
+
"""Get the module's heater status."""
|
|
347
|
+
|
|
348
|
+
@abstractmethod
|
|
349
|
+
def get_labware_latch_status(self) -> HeaterShakerLabwareLatchStatus:
|
|
350
|
+
"""Get the module's labware latch status."""
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
class AbstractMagneticBlockCore(
|
|
354
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
355
|
+
):
|
|
356
|
+
"""Core control interface for an attached Magnetic Block."""
|
|
357
|
+
|
|
358
|
+
MODULE_TYPE: ClassVar = ModuleType.MAGNETIC_BLOCK
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
class AbstractAbsorbanceReaderCore(
|
|
362
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
363
|
+
):
|
|
364
|
+
"""Core control interface for an attached Absorbance Reader Module."""
|
|
365
|
+
|
|
366
|
+
MODULE_TYPE: ClassVar = ModuleType.ABSORBANCE_READER
|
|
367
|
+
|
|
368
|
+
@abstractmethod
|
|
369
|
+
def get_serial_number(self) -> str:
|
|
370
|
+
"""Get the module's unique hardware serial number."""
|
|
371
|
+
|
|
372
|
+
@abstractmethod
|
|
373
|
+
def initialize(
|
|
374
|
+
self,
|
|
375
|
+
mode: ABSMeasureMode,
|
|
376
|
+
wavelengths: List[int],
|
|
377
|
+
reference_wavelength: Optional[int] = None,
|
|
378
|
+
) -> None:
|
|
379
|
+
"""Initialize the Absorbance Reader by taking zero reading."""
|
|
380
|
+
|
|
381
|
+
@abstractmethod
|
|
382
|
+
def read(self, filename: Optional[str] = None) -> Dict[int, Dict[str, float]]:
|
|
383
|
+
"""Get an absorbance reading from the Absorbance Reader."""
|
|
384
|
+
|
|
385
|
+
@abstractmethod
|
|
386
|
+
def close_lid(self) -> None:
|
|
387
|
+
"""Close the Absorbance Reader's lid."""
|
|
388
|
+
|
|
389
|
+
@abstractmethod
|
|
390
|
+
def open_lid(self) -> None:
|
|
391
|
+
"""Open the Absorbance Reader's lid."""
|
|
392
|
+
|
|
393
|
+
@abstractmethod
|
|
394
|
+
def is_lid_on(self) -> bool:
|
|
395
|
+
"""Return True if the Absorbance Reader's lid is currently closed."""
|
|
396
|
+
|
|
397
|
+
|
|
398
|
+
class AbstractFlexStackerCore(
|
|
399
|
+
AbstractModuleCore[LabwareCoreType], Generic[LabwareCoreType]
|
|
400
|
+
):
|
|
401
|
+
"""Core control interface for an attached Flex Stacker."""
|
|
402
|
+
|
|
403
|
+
MODULE_TYPE: ClassVar = ModuleType.FLEX_STACKER
|
|
404
|
+
|
|
405
|
+
@abstractmethod
|
|
406
|
+
def get_serial_number(self) -> str:
|
|
407
|
+
"""Get the module's unique hardware serial number."""
|
|
408
|
+
|
|
409
|
+
@abstractmethod
|
|
410
|
+
def retrieve(self) -> AbstractLabware[Any]:
|
|
411
|
+
"""Release a labware from the hopper to the staging slot.
|
|
412
|
+
|
|
413
|
+
Returns the retreived primary labware.
|
|
414
|
+
"""
|
|
415
|
+
|
|
416
|
+
@abstractmethod
|
|
417
|
+
def store(self) -> None:
|
|
418
|
+
"""Store a labware in the stacker hopper."""
|
|
419
|
+
|
|
420
|
+
@abstractmethod
|
|
421
|
+
def fill(self, count: int | None, message: str | None) -> None:
|
|
422
|
+
"""Pause the protocol to allow for filling the stacker."""
|
|
423
|
+
|
|
424
|
+
@abstractmethod
|
|
425
|
+
def fill_items(
|
|
426
|
+
self, labware: Sequence[LabwareCoreType], message: str | None
|
|
427
|
+
) -> None:
|
|
428
|
+
"""Pause the protocol to fill with a specific set of labware."""
|
|
429
|
+
|
|
430
|
+
@abstractmethod
|
|
431
|
+
def empty(self, message: str | None) -> None:
|
|
432
|
+
"""Pause the protocol to allow for emptying the stacker."""
|
|
433
|
+
|
|
434
|
+
@abstractmethod
|
|
435
|
+
def set_stored_labware_items(
|
|
436
|
+
self,
|
|
437
|
+
labware: Sequence[LabwareCoreType],
|
|
438
|
+
stacking_offset_z: float | None,
|
|
439
|
+
) -> None:
|
|
440
|
+
"""Configure the stacker to contain a set of labware."""
|
|
441
|
+
|
|
442
|
+
@abstractmethod
|
|
443
|
+
def get_max_storable_labware(self) -> int:
|
|
444
|
+
"""Get the total number of configured labware the stacker can store."""
|
|
445
|
+
|
|
446
|
+
@abstractmethod
|
|
447
|
+
def get_current_storable_labware(self) -> int:
|
|
448
|
+
"""Get the amount of space currently available for labware."""
|
|
449
|
+
|
|
450
|
+
@abstractmethod
|
|
451
|
+
def get_max_storable_labware_from_list(
|
|
452
|
+
self,
|
|
453
|
+
labware: Sequence[LabwareCoreType],
|
|
454
|
+
overlap_offset: float | None = None,
|
|
455
|
+
) -> Sequence[LabwareCoreType]:
|
|
456
|
+
"""Limit the passed list to how many labware can fit in a stacker."""
|
|
457
|
+
|
|
458
|
+
@abstractmethod
|
|
459
|
+
def get_current_storable_labware_from_list(
|
|
460
|
+
self,
|
|
461
|
+
labware: Sequence[LabwareCoreType],
|
|
462
|
+
) -> Sequence[LabwareCoreType]:
|
|
463
|
+
"""Limit the passed list to how many labware can fit in the stacker right now."""
|
|
464
|
+
|
|
465
|
+
@abstractmethod
|
|
466
|
+
def get_stored_labware(self) -> Sequence[LabwareCoreType]:
|
|
467
|
+
"""Get the currently-stored labware from the stacker."""
|
|
468
|
+
|
|
469
|
+
@abstractmethod
|
|
470
|
+
def set_stored_labware(
|
|
471
|
+
self,
|
|
472
|
+
main_load_name: str,
|
|
473
|
+
main_namespace: str | None,
|
|
474
|
+
main_version: int | None,
|
|
475
|
+
lid_load_name: str | None,
|
|
476
|
+
lid_namespace: str | None,
|
|
477
|
+
lid_version: int | None,
|
|
478
|
+
adapter_load_name: str | None,
|
|
479
|
+
adapter_namespace: str | None,
|
|
480
|
+
adapter_version: int | None,
|
|
481
|
+
count: int | None,
|
|
482
|
+
stacking_offset_z: float | None = None,
|
|
483
|
+
) -> None:
|
|
484
|
+
"""Configure the kind of labware that the stacker stores."""
|