opentrons 8.4.0a5__tar.gz → 8.4.0a7__tar.gz
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-8.4.0a5 → opentrons-8.4.0a7}/PKG-INFO +4 -4
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/well.py +12 -1
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +2 -1
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/well.py +2 -1
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/instrument_context.py +64 -23
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/labware.py +3 -1
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/protocol_context.py +2 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/pipetting.py +2 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/tip_handler.py +68 -27
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/frustum_helpers.py +1 -1
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/geometry.py +29 -3
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/__init__.py +2 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/liquid_level_detection.py +14 -20
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/PKG-INFO +4 -4
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/requires.txt +3 -3
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/MANIFEST.in +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/README.rst +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/setup.cfg +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/setup.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/_version.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/deck_configuration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/file_operators.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/helpers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/models/v1.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot2/tip_length.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/models/v1.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/calibration_storage/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/cli/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/cli/__main__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/cli/analyze.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/advanced_settings.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/defaults_ot2.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/defaults_ot3.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/feature_flags.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/gripper_config.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/reset.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/robot_configs.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/config/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/asyncio/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/asyncio/communication/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/asyncio/communication/async_serial.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/asyncio/communication/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/asyncio/communication/serial_connection.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/command_builder.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/abstract.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/driver.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/flex_stacker/utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/heater_shaker/driver.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/mag_deck/driver.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/serial_communication.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/temp_deck/driver.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/thermocycler/driver.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/drivers/utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/execute.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/__main__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/adapters.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/api.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/controller.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/flex_protocol.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/ot3controller.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/ot3simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/ot3utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/simulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/subsystem_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/backends/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/constants.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/dev_types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/app.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/heater_shaker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/module_server/client.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/module_server/server.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/parser.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/settings.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/emulation/util.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/execution_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot2/pipette.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot3/gripper.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot3/pipette.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/module_control.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/absorbance_reader.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/flex_stacker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/heater_shaker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/magdeck.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/mod_abc.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/tempdeck.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/thermocycler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/update.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/modules/utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/motion_utilities.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/nozzle_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/ot3_calibration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/ot3api.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/pause_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/poller.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/gripper_controller.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/hardware_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/liquid_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/motion_controller.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/protocols/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/robot_calibration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/scripts/repl.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/simulator_setup.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/thread_manager.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/hardware_control/util.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_broker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/commands.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/helpers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/module_commands.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/publisher.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/legacy_commands/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/motion_planning/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/motion_planning/deck_conflict.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/motion_planning/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/motion_planning/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/motion_planning/waypoints.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/ordered_set.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_liquid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_liquid_properties.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_parameter_context.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_parameters.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_transfer_liquid_validation.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/_types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/config.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/core_map.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/deck_conflict.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/instrument.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/load_labware_params.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/module_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/protocol.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/robot.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/stringify.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/engine/transfer_components_executor.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/instrument.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/load_info.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/module_geometry.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/well_geometry.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/module.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/protocol.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/robot.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/well_grid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/deck.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/disposal_locations.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/module_contexts.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/robot_context.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/validation.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/actions/actions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/clients/sync_client.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/clients/transports.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/air_gap_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/aspirate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/aspirate_while_tracking.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/blow_out.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/command.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/command_unions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/comment.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/configure_for_volume.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/custom.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/dispense.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/dispense_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/dispense_while_tracking.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/drop_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/close_latch.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/empty.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/fill.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/open_latch.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/prepare_shuttle.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/retrieve.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/set_stored_labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/flex_stacker/store.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/generate_command_schema.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/get_next_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/get_tip_presence.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/home.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/labware_handling_common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/liquid_probe.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_lid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_lid_stack.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_liquid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_liquid_class.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_module.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/load_pipette.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/move_labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/move_relative.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/move_to_well.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/movement_common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/pick_up_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/pipetting_common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/pressure_dispense.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/reload_labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/retract_axis.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/move_axes_relative.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/move_axes_to.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/move_to.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/save_position.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/seal_pipette_to_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/set_rail_lights.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/set_status_bar.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/touch_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/unseal_pipette_from_tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/wait_for_duration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/commands/wait_for_resume.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/engine_support.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/errors/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/errors/error_occurrence.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/errors/exceptions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/command_executor.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/equipment.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/labware_movement.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/movement.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/labware_offset_standardization.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/notes/notes.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/plugins.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/protocol_engine.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/deck_data_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/labware_data_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/labware_validation.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/module_data_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/slot_standardization.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/_move_types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/_well_math.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/addressable_areas.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/command_history.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/commands.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/config.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/files.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/fluid_stack.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/liquid_classes.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/liquids.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/flex_stacker_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/modules.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/motion.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/pipettes.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/state.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/state_summary.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/tips.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/update_types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/wells.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/automatic_tip_selection.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/command_annotations.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/deck_configuration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/execution.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/hardware_passthrough.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/instrument.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/instrument_sensors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/labware_movement.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/labware_offset_location.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/labware_offset_vector.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/liquid.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/liquid_class.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/liquid_handling.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/location.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/module.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/partial_tip_configuration.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/run_time_parameters.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/tip.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/util.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/types/well_position.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/extract_labware_definitions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/file_format_validator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/file_hasher.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/file_identifier.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/input_file.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/protocol_source.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/json_file_reader.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/json_translator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/legacy_command_mapper.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/protocol_runner.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/python_protocol_wrappers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/run_orchestrator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_runner/task_queue.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/mix.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/transfers/common.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/transfers/transfer.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/advanced_control/transfers/transfer_liquid_utils.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/constants.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/deck_type.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/definitions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/instrument.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/labware_like.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/api_support/util.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/bundle.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/duration/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/duration/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/duration/estimator.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/dev_types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/errors.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/execute.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/execute_python.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/execution/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/geometry/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/geometry/planning.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/labware.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/models/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/models/json_protocol.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/exceptions.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parameters/validation.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/parse.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocols/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/py.typed +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/resources/scripts/lpc21isp +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/simulate.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/camera.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/log_control.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/nmcli.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/resin.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/smoothie_update.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/system/wifi.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/tools/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/tools/args_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/tools/write_pipette_memory.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/types.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/__init__.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/async_helpers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/broker.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/change_notifier.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/entrypoint_util.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/get_union_elements.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/helpers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/linal.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/logging_config.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/logging_queue_handler.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/util/performance_helpers.py +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/SOURCES.txt +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/dependency_links.txt +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/entry_points.txt +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/not-zip-safe +0 -0
- {opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: opentrons
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.0a7
|
|
4
4
|
Summary: The Opentrons API is a simple framework designed to make writing automated biology lab protocols easy.
|
|
5
5
|
Author: Opentrons
|
|
6
6
|
Author-email: engineering@opentrons.com
|
|
@@ -21,7 +21,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
21
21
|
Classifier: Topic :: Scientific/Engineering
|
|
22
22
|
Requires-Python: >=3.10
|
|
23
23
|
License-File: ../LICENSE
|
|
24
|
-
Requires-Dist: opentrons-shared-data==8.4.
|
|
24
|
+
Requires-Dist: opentrons-shared-data==8.4.0a7
|
|
25
25
|
Requires-Dist: aionotify==0.3.1
|
|
26
26
|
Requires-Dist: anyio<4.0.0,>=3.6.1
|
|
27
27
|
Requires-Dist: jsonschema<4.18.0,>=3.0.1
|
|
@@ -35,9 +35,9 @@ Requires-Dist: pyusb==1.2.1
|
|
|
35
35
|
Requires-Dist: importlib-metadata>=1.0; python_version < "3.8"
|
|
36
36
|
Requires-Dist: packaging>=21.0
|
|
37
37
|
Provides-Extra: ot2-hardware
|
|
38
|
-
Requires-Dist: opentrons-hardware==8.4.
|
|
38
|
+
Requires-Dist: opentrons-hardware==8.4.0a7; extra == "ot2-hardware"
|
|
39
39
|
Provides-Extra: flex-hardware
|
|
40
|
-
Requires-Dist: opentrons-hardware[FLEX]==8.4.
|
|
40
|
+
Requires-Dist: opentrons-hardware[FLEX]==8.4.0a7; extra == "flex-hardware"
|
|
41
41
|
|
|
42
42
|
.. _Full API Documentation: http://docs.opentrons.com
|
|
43
43
|
|
|
@@ -3,7 +3,7 @@ from typing import Optional, Union
|
|
|
3
3
|
|
|
4
4
|
from opentrons_shared_data.labware.constants import WELL_NAME_PATTERN
|
|
5
5
|
|
|
6
|
-
from opentrons.types import Point
|
|
6
|
+
from opentrons.types import Point, Mount, MountType
|
|
7
7
|
|
|
8
8
|
from opentrons.protocol_engine import WellLocation, WellOrigin, WellOffset
|
|
9
9
|
from opentrons.protocol_engine import commands as cmd
|
|
@@ -13,6 +13,7 @@ from opentrons.protocol_engine.types.liquid_level_detection import (
|
|
|
13
13
|
SimulatedProbeResult,
|
|
14
14
|
LiquidTrackingType,
|
|
15
15
|
)
|
|
16
|
+
from opentrons.protocol_engine.errors import PipetteNotAttachedError
|
|
16
17
|
|
|
17
18
|
from . import point_calculations
|
|
18
19
|
from . import stringify
|
|
@@ -181,15 +182,25 @@ class WellCore(AbstractWellCore):
|
|
|
181
182
|
|
|
182
183
|
def estimate_liquid_height_after_pipetting(
|
|
183
184
|
self,
|
|
185
|
+
mount: Mount | str,
|
|
184
186
|
operation_volume: float,
|
|
185
187
|
) -> LiquidTrackingType:
|
|
186
188
|
"""Return an estimate of liquid height after pipetting without raising an error."""
|
|
187
189
|
labware_id = self.labware_id
|
|
188
190
|
well_name = self._name
|
|
191
|
+
if isinstance(mount, Mount):
|
|
192
|
+
mount_type = MountType.from_hw_mount(mount)
|
|
193
|
+
else:
|
|
194
|
+
mount_type = MountType(mount)
|
|
195
|
+
pipette_from_mount = self._engine_client.state.pipettes.get_by_mount(mount_type)
|
|
196
|
+
if pipette_from_mount is None:
|
|
197
|
+
raise PipetteNotAttachedError(f"No pipette present on mount {mount}")
|
|
198
|
+
pipette_id = pipette_from_mount.id
|
|
189
199
|
starting_liquid_height = self.current_liquid_height()
|
|
190
200
|
projected_final_height = self._engine_client.state.geometry.get_well_height_after_liquid_handling_no_error(
|
|
191
201
|
labware_id=labware_id,
|
|
192
202
|
well_name=well_name,
|
|
203
|
+
pipette_id=pipette_id,
|
|
193
204
|
initial_height=starting_liquid_height,
|
|
194
205
|
volume=operation_volume,
|
|
195
206
|
)
|
{opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py
RENAMED
|
@@ -5,7 +5,7 @@ from opentrons_shared_data.labware.constants import WELL_NAME_PATTERN
|
|
|
5
5
|
|
|
6
6
|
from opentrons.protocols.api_support.util import APIVersionError
|
|
7
7
|
|
|
8
|
-
from opentrons.types import Point
|
|
8
|
+
from opentrons.types import Point, Mount
|
|
9
9
|
|
|
10
10
|
from opentrons.protocol_engine.types.liquid_level_detection import (
|
|
11
11
|
SimulatedProbeResult,
|
|
@@ -129,6 +129,7 @@ class LegacyWellCore(AbstractWellCore):
|
|
|
129
129
|
|
|
130
130
|
def estimate_liquid_height_after_pipetting(
|
|
131
131
|
self,
|
|
132
|
+
mount: Mount | str,
|
|
132
133
|
operation_volume: float,
|
|
133
134
|
) -> LiquidTrackingType:
|
|
134
135
|
"""Estimate what the liquid height will be after pipetting, without raising an error."""
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from abc import ABC, abstractmethod
|
|
4
4
|
from typing import TypeVar, Optional, Union
|
|
5
5
|
|
|
6
|
-
from opentrons.types import Point
|
|
6
|
+
from opentrons.types import Point, Mount
|
|
7
7
|
from opentrons.protocol_engine.types import LiquidTrackingType
|
|
8
8
|
|
|
9
9
|
from .._liquid import Liquid
|
|
@@ -91,6 +91,7 @@ class AbstractWellCore(ABC):
|
|
|
91
91
|
@abstractmethod
|
|
92
92
|
def estimate_liquid_height_after_pipetting(
|
|
93
93
|
self,
|
|
94
|
+
mount: Mount | str,
|
|
94
95
|
operation_volume: float,
|
|
95
96
|
) -> LiquidTrackingType:
|
|
96
97
|
"""Estimate what the liquid height will be after pipetting, without raising an error."""
|
|
@@ -1528,6 +1528,9 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1528
1528
|
) -> InstrumentContext:
|
|
1529
1529
|
"""Move a particular type of liquid from one well or group of wells to another.
|
|
1530
1530
|
|
|
1531
|
+
..
|
|
1532
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
1533
|
+
|
|
1531
1534
|
:param liquid_class: The type of liquid to move. You must specify the liquid class,
|
|
1532
1535
|
even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
|
|
1533
1536
|
source contains.
|
|
@@ -1553,7 +1556,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1553
1556
|
:param return_tip: Whether to drop used tips in their original locations
|
|
1554
1557
|
in the tip rack, instead of the trash.
|
|
1555
1558
|
|
|
1556
|
-
|
|
1559
|
+
:meta private:
|
|
1557
1560
|
"""
|
|
1558
1561
|
if volume == 0.0:
|
|
1559
1562
|
_log.info(
|
|
@@ -1635,6 +1638,9 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1635
1638
|
"""
|
|
1636
1639
|
Distribute a particular type of liquid from one well to a group of wells.
|
|
1637
1640
|
|
|
1641
|
+
..
|
|
1642
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
1643
|
+
|
|
1638
1644
|
:param liquid_class: The type of liquid to move. You must specify the liquid class,
|
|
1639
1645
|
even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
|
|
1640
1646
|
source contains.
|
|
@@ -1657,7 +1663,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1657
1663
|
:param return_tip: Whether to drop used tips in their original locations
|
|
1658
1664
|
in the tip rack, instead of the trash.
|
|
1659
1665
|
|
|
1660
|
-
|
|
1666
|
+
:meta private:
|
|
1661
1667
|
"""
|
|
1662
1668
|
if volume == 0.0:
|
|
1663
1669
|
_log.info(
|
|
@@ -1748,6 +1754,9 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1748
1754
|
"""
|
|
1749
1755
|
Consolidate a particular type of liquid from a group of wells to one well.
|
|
1750
1756
|
|
|
1757
|
+
..
|
|
1758
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
1759
|
+
|
|
1751
1760
|
:param liquid_class: The type of liquid to move. You must specify the liquid class,
|
|
1752
1761
|
even if you have used :py:meth:`.Labware.load_liquid` to indicate what liquid the
|
|
1753
1762
|
source contains.
|
|
@@ -1770,7 +1779,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1770
1779
|
:param return_tip: Whether to drop used tips in their original locations
|
|
1771
1780
|
in the tip rack, instead of the trash.
|
|
1772
1781
|
|
|
1773
|
-
|
|
1782
|
+
:meta private:
|
|
1774
1783
|
"""
|
|
1775
1784
|
if volume == 0.0:
|
|
1776
1785
|
_log.info(
|
|
@@ -1944,19 +1953,19 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1944
1953
|
|
|
1945
1954
|
return self
|
|
1946
1955
|
|
|
1947
|
-
@requires_version(2,
|
|
1956
|
+
@requires_version(2, 23)
|
|
1948
1957
|
def resin_tip_seal(
|
|
1949
1958
|
self,
|
|
1950
1959
|
location: Union[labware.Well, labware.Labware],
|
|
1951
1960
|
) -> InstrumentContext:
|
|
1952
1961
|
"""Seal resin tips onto the pipette.
|
|
1953
1962
|
|
|
1954
|
-
The location provided should contain resin tips.
|
|
1955
|
-
|
|
1956
|
-
|
|
1963
|
+
The location provided should contain resin tips. The pipette will attach itself
|
|
1964
|
+
to the resin tips but does not check any tip presence sensors. Before the pipette
|
|
1965
|
+
seals to the tips, the plunger will rise to the top of its working range so that
|
|
1966
|
+
it can perform a :py:func:`resin_tip_dispense` immediately.
|
|
1957
1967
|
|
|
1958
1968
|
:param location: A location containing resin tips, must be a Labware or a Well.
|
|
1959
|
-
|
|
1960
1969
|
:type location: :py:class:`~.types.Location`
|
|
1961
1970
|
"""
|
|
1962
1971
|
if isinstance(location, labware.Labware):
|
|
@@ -1976,7 +1985,7 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
1976
1985
|
)
|
|
1977
1986
|
return self
|
|
1978
1987
|
|
|
1979
|
-
@requires_version(2,
|
|
1988
|
+
@requires_version(2, 23)
|
|
1980
1989
|
def resin_tip_unseal(
|
|
1981
1990
|
self,
|
|
1982
1991
|
location: Union[labware.Well, labware.Labware],
|
|
@@ -2014,31 +2023,62 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
2014
2023
|
|
|
2015
2024
|
return self
|
|
2016
2025
|
|
|
2017
|
-
@requires_version(2,
|
|
2026
|
+
@requires_version(2, 23)
|
|
2018
2027
|
def resin_tip_dispense(
|
|
2019
2028
|
self,
|
|
2020
2029
|
location: types.Location,
|
|
2021
2030
|
volume: Optional[float] = None,
|
|
2022
2031
|
rate: Optional[float] = None,
|
|
2023
2032
|
) -> InstrumentContext:
|
|
2024
|
-
"""
|
|
2033
|
+
"""Push liquid out of resin tips that are currently sealed to a pipette.
|
|
2034
|
+
|
|
2035
|
+
The volume and rate parameters for this function control the motion of the plunger
|
|
2036
|
+
to create a desired pressure profile inside the pipette chamber. Unlike a regular
|
|
2037
|
+
dispense action, the volume and rate do not correspond to liquid volume or flow rate
|
|
2038
|
+
dispensed from the resin tips. Select your values for volume and flow rate based on
|
|
2039
|
+
experimentation with the resin tips to create a pressure profile.
|
|
2040
|
+
|
|
2041
|
+
The common way to use this function is as follows:
|
|
2042
|
+
|
|
2043
|
+
#. Seal resin tips to the pipette using :py:meth:`InstrumentContext.resin_tip_seal`.
|
|
2025
2044
|
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2045
|
+
#. Use :py:meth:`InstrumentContext.resin_tip_dispense` to displace an experimentally
|
|
2046
|
+
derived volume at an experimentally derived rate to create an experimentally derived
|
|
2047
|
+
target pressure inside the pipette.
|
|
2029
2048
|
|
|
2030
|
-
|
|
2049
|
+
#. Use :py:meth:`ProtocolContext.delay` to wait an experimentally derived amount of
|
|
2050
|
+
time for the pressure inside the pipette to push liquid into and through the resin tip
|
|
2051
|
+
and out the other side.
|
|
2052
|
+
|
|
2053
|
+
#. As liquid passes through the resin tip, the pressure inside the pipette will
|
|
2054
|
+
fall. If not all liquid has been dispensed from the resin tip, repeat steps 2
|
|
2055
|
+
and 3.
|
|
2056
|
+
|
|
2057
|
+
#. Unseal resin tips from the pipette using :py:meth:`InstrumentContext.resin_tip_unseal`.
|
|
2058
|
+
|
|
2059
|
+
Flex pipette pressure sensors will raise an overpressure when a differential pressure
|
|
2060
|
+
inside the pipette chamber above sensor limits is detected. You may need to disable the
|
|
2061
|
+
pressure sensor to create the required pressure profile.
|
|
2062
|
+
|
|
2063
|
+
.. warning::
|
|
2064
|
+
Building excessive pressure inside the pipette chamber (significantly above the sensor
|
|
2065
|
+
limit) with the pressure sensors disabled can damage the pipette.
|
|
2066
|
+
|
|
2067
|
+
|
|
2068
|
+
:param location: Tells the robot where to dispense.
|
|
2031
2069
|
:type location: :py:class:`~.types.Location`
|
|
2032
2070
|
|
|
2033
|
-
:param volume:
|
|
2034
|
-
|
|
2071
|
+
:param volume: The volume that the plunger should displace, in µL. Does not directly relate
|
|
2072
|
+
to the volume of liquid that will be dispensed.
|
|
2035
2073
|
:type volume: float
|
|
2036
2074
|
|
|
2037
|
-
:param rate:
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2075
|
+
:param rate: How quickly the plunger moves to displace the commanded volume. The plunger speed
|
|
2076
|
+
in µL/s is calculated as ``rate`` multiplied by
|
|
2077
|
+
:py:attr:`flow_rate.dispense<flow_rate>`. This rate does not directly relate to
|
|
2078
|
+
the flow rate of liquid out of the resin tip.
|
|
2041
2079
|
|
|
2080
|
+
The default value of ``10.0`` is recommended.
|
|
2081
|
+
:type rate: float
|
|
2042
2082
|
"""
|
|
2043
2083
|
well: Optional[labware.Well] = None
|
|
2044
2084
|
last_location = self._get_last_location_by_api_version()
|
|
@@ -2654,11 +2694,12 @@ class InstrumentContext(publisher.CommandPublisher):
|
|
|
2654
2694
|
def measure_liquid_height(self, well: labware.Well) -> LiquidTrackingType:
|
|
2655
2695
|
"""Check the height of the liquid within a well.
|
|
2656
2696
|
|
|
2657
|
-
:returns: The height, in mm, of the liquid from the
|
|
2697
|
+
:returns: The height, in mm, of the liquid from the bottom of the well.
|
|
2658
2698
|
"""
|
|
2659
2699
|
self._raise_if_pressure_not_supported_by_pipette()
|
|
2660
2700
|
loc = well.top()
|
|
2661
|
-
|
|
2701
|
+
self._core.liquid_probe_with_recovery(well._core, loc)
|
|
2702
|
+
return well.current_liquid_height()
|
|
2662
2703
|
|
|
2663
2704
|
def _raise_if_configuration_not_supported_by_pipette(
|
|
2664
2705
|
self, style: NozzleLayout
|
|
@@ -39,6 +39,7 @@ from opentrons.types import (
|
|
|
39
39
|
Point,
|
|
40
40
|
NozzleMapInterface,
|
|
41
41
|
MeniscusTrackingTarget,
|
|
42
|
+
Mount,
|
|
42
43
|
)
|
|
43
44
|
from opentrons.protocols.api_support.types import APIVersion
|
|
44
45
|
from opentrons.protocols.api_support.util import (
|
|
@@ -348,6 +349,7 @@ class Well:
|
|
|
348
349
|
@requires_version(2, 21)
|
|
349
350
|
def estimate_liquid_height_after_pipetting(
|
|
350
351
|
self,
|
|
352
|
+
mount: Mount | str,
|
|
351
353
|
operation_volume: float,
|
|
352
354
|
) -> LiquidTrackingType:
|
|
353
355
|
"""Check the height of the liquid within a well.
|
|
@@ -360,7 +362,7 @@ class Well:
|
|
|
360
362
|
"""
|
|
361
363
|
|
|
362
364
|
projected_final_height = self._core.estimate_liquid_height_after_pipetting(
|
|
363
|
-
operation_volume=operation_volume,
|
|
365
|
+
operation_volume=operation_volume, mount=mount
|
|
364
366
|
)
|
|
365
367
|
return projected_final_height
|
|
366
368
|
|
|
@@ -1363,6 +1363,8 @@ class ProtocolContext(CommandPublisher):
|
|
|
1363
1363
|
) -> LiquidClass:
|
|
1364
1364
|
"""
|
|
1365
1365
|
Define a liquid class for use in the protocol.
|
|
1366
|
+
..
|
|
1367
|
+
This is intended for Opentrons internal use only and is not a guaranteed API.
|
|
1366
1368
|
|
|
1367
1369
|
:meta private:
|
|
1368
1370
|
"""
|
{opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/pipetting.py
RENAMED
|
@@ -199,6 +199,7 @@ class HardwarePipettingHandler(PipettingHandler):
|
|
|
199
199
|
labware_id=labware_id,
|
|
200
200
|
well_name=well_name,
|
|
201
201
|
operation_volume=volume * -1,
|
|
202
|
+
pipette_id=pipette_id,
|
|
202
203
|
)
|
|
203
204
|
if isinstance(aspirate_z_distance, SimulatedProbeResult):
|
|
204
205
|
raise InvalidLiquidHeightFound(
|
|
@@ -234,6 +235,7 @@ class HardwarePipettingHandler(PipettingHandler):
|
|
|
234
235
|
labware_id=labware_id,
|
|
235
236
|
well_name=well_name,
|
|
236
237
|
operation_volume=volume,
|
|
238
|
+
pipette_id=pipette_id,
|
|
237
239
|
)
|
|
238
240
|
if isinstance(dispense_z_distance, SimulatedProbeResult):
|
|
239
241
|
raise InvalidLiquidHeightFound(
|
{opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/execution/tip_handler.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Tip pickup and drop procedures."""
|
|
2
2
|
|
|
3
|
-
from typing import Optional, Dict
|
|
3
|
+
from typing import Optional, Dict, Tuple
|
|
4
4
|
from typing_extensions import Protocol as TypingProtocol
|
|
5
5
|
|
|
6
6
|
from opentrons.hardware_control import HardwareControlAPI
|
|
@@ -201,6 +201,18 @@ async def _available_for_nozzle_layout( # noqa: C901
|
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
|
|
204
|
+
def tip_on_left_side_96(back_left_nozzle: str) -> bool:
|
|
205
|
+
"""Return if there is a tip on the left edge of the 96 channel."""
|
|
206
|
+
left_most_column = int(back_left_nozzle[1:])
|
|
207
|
+
return left_most_column == 1
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def tip_on_right_side_96(front_right_nozzle: str) -> bool:
|
|
211
|
+
"""Return if there is a tip on the left edge of the 96 channel."""
|
|
212
|
+
right_most_column = int(front_right_nozzle[1:])
|
|
213
|
+
return right_most_column == 12
|
|
214
|
+
|
|
215
|
+
|
|
204
216
|
class HardwareTipHandler(TipHandler):
|
|
205
217
|
"""Pick up and drop tips, using the Hardware API."""
|
|
206
218
|
|
|
@@ -237,6 +249,50 @@ class HardwareTipHandler(TipHandler):
|
|
|
237
249
|
channels, style, primary_nozzle, front_right_nozzle, back_left_nozzle
|
|
238
250
|
)
|
|
239
251
|
|
|
252
|
+
def get_tip_presence_config(
|
|
253
|
+
self, pipette_id: str
|
|
254
|
+
) -> Tuple[bool, Optional[InstrumentProbeType]]:
|
|
255
|
+
"""Return the supported settings for tip presence on a given pipette depending on it's current nozzle map."""
|
|
256
|
+
follow_singular_sensor = None
|
|
257
|
+
|
|
258
|
+
unsupported_layout_types_96 = [NozzleConfigurationType.SINGLE]
|
|
259
|
+
# NOTE: (09-20-2024) Current on multi-channel pipettes, utilizing less than 4 nozzles risks false positives on the tip presence sensor
|
|
260
|
+
supported_partial_nozzle_minimum = 4
|
|
261
|
+
|
|
262
|
+
nozzle_configuration = self._state_view.pipettes.get_nozzle_configuration(
|
|
263
|
+
pipette_id=pipette_id
|
|
264
|
+
)
|
|
265
|
+
|
|
266
|
+
match self._state_view.pipettes.get_channels(pipette_id):
|
|
267
|
+
case 1:
|
|
268
|
+
tip_presence_supported = True
|
|
269
|
+
case 8:
|
|
270
|
+
tip_presence_supported = (
|
|
271
|
+
nozzle_configuration.tip_count >= supported_partial_nozzle_minimum
|
|
272
|
+
)
|
|
273
|
+
case 96:
|
|
274
|
+
tip_presence_supported = (
|
|
275
|
+
nozzle_configuration.configuration
|
|
276
|
+
not in unsupported_layout_types_96
|
|
277
|
+
and nozzle_configuration.tip_count
|
|
278
|
+
>= supported_partial_nozzle_minimum
|
|
279
|
+
)
|
|
280
|
+
if (
|
|
281
|
+
nozzle_configuration.configuration != NozzleConfigurationType.FULL
|
|
282
|
+
and tip_presence_supported
|
|
283
|
+
):
|
|
284
|
+
use_left = tip_on_left_side_96(nozzle_configuration.back_left)
|
|
285
|
+
use_right = tip_on_right_side_96(nozzle_configuration.front_right)
|
|
286
|
+
if not (use_left and use_right):
|
|
287
|
+
if use_left:
|
|
288
|
+
follow_singular_sensor = InstrumentProbeType.PRIMARY
|
|
289
|
+
else:
|
|
290
|
+
follow_singular_sensor = InstrumentProbeType.SECONDARY
|
|
291
|
+
case _:
|
|
292
|
+
raise ValueError("Unknown pipette type.")
|
|
293
|
+
|
|
294
|
+
return (tip_presence_supported, follow_singular_sensor)
|
|
295
|
+
|
|
240
296
|
async def pick_up_tip(
|
|
241
297
|
self,
|
|
242
298
|
pipette_id: str,
|
|
@@ -266,9 +322,18 @@ class HardwareTipHandler(TipHandler):
|
|
|
266
322
|
await self._hardware_api.tip_pickup_moves(
|
|
267
323
|
mount=hw_mount, presses=None, increment=None
|
|
268
324
|
)
|
|
269
|
-
|
|
325
|
+
|
|
326
|
+
tip_presence_supported, follow_singular_sensor = self.get_tip_presence_config(
|
|
327
|
+
pipette_id
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
if do_not_ignore_tip_presence and tip_presence_supported:
|
|
270
331
|
try:
|
|
271
|
-
await self.verify_tip_presence(
|
|
332
|
+
await self.verify_tip_presence(
|
|
333
|
+
pipette_id,
|
|
334
|
+
TipPresenceStatus.PRESENT,
|
|
335
|
+
follow_singular_sensor=follow_singular_sensor,
|
|
336
|
+
)
|
|
272
337
|
except TipNotAttachedError as e:
|
|
273
338
|
raise PickUpTipTipNotAttachedError(tip_geometry=tip_geometry) from e
|
|
274
339
|
|
|
@@ -350,30 +415,6 @@ class HardwareTipHandler(TipHandler):
|
|
|
350
415
|
follow_singular_sensor: Optional[InstrumentProbeType] = None,
|
|
351
416
|
) -> None:
|
|
352
417
|
"""See documentation on abstract base class."""
|
|
353
|
-
nozzle_configuration = self._state_view.pipettes.get_nozzle_configuration(
|
|
354
|
-
pipette_id=pipette_id
|
|
355
|
-
)
|
|
356
|
-
|
|
357
|
-
# Configuration metrics by which tip presence checking is ignored
|
|
358
|
-
unsupported_pipette_types = [8, 96]
|
|
359
|
-
unsupported_layout_types = [
|
|
360
|
-
NozzleConfigurationType.SINGLE,
|
|
361
|
-
NozzleConfigurationType.COLUMN,
|
|
362
|
-
]
|
|
363
|
-
# NOTE: (09-20-2024) Current on multi-channel pipettes, utilizing less than 4 nozzles risks false positives on the tip presence sensor
|
|
364
|
-
supported_partial_nozzle_minimum = 4
|
|
365
|
-
|
|
366
|
-
if (
|
|
367
|
-
nozzle_configuration is not None
|
|
368
|
-
and self._state_view.pipettes.get_channels(pipette_id)
|
|
369
|
-
in unsupported_pipette_types
|
|
370
|
-
and nozzle_configuration.configuration in unsupported_layout_types
|
|
371
|
-
and len(nozzle_configuration.map_store) < supported_partial_nozzle_minimum
|
|
372
|
-
):
|
|
373
|
-
# Tip presence sensing is not supported for single tip pick up on the 96ch Flex Pipette, nor with single and some partial layous of the 8ch Flex Pipette.
|
|
374
|
-
# This is due in part to a press distance tolerance which creates a risk case for false positives. In the case of single tip, the mechanical tolerance
|
|
375
|
-
# for presses with 100% success is below the minimum average achieved press distance for a given multi channel pipette in that configuration.
|
|
376
|
-
return
|
|
377
418
|
try:
|
|
378
419
|
ot3api = ensure_ot3_hardware(hardware_api=self._hardware_api)
|
|
379
420
|
hw_mount = self._get_hw_mount(pipette_id)
|
{opentrons-8.4.0a5 → opentrons-8.4.0a7}/src/opentrons/protocol_engine/state/frustum_helpers.py
RENAMED
|
@@ -371,7 +371,7 @@ def find_volume_at_well_height(
|
|
|
371
371
|
max_height = volumetric_capacity[-1][0]
|
|
372
372
|
if target_height < 0 or target_height > max_height:
|
|
373
373
|
raise InvalidLiquidHeightFound(
|
|
374
|
-
"Invalid target height {target_height} mm; max well height is {max_height} mm."
|
|
374
|
+
f"Invalid target height {target_height} mm; max well height is {max_height} mm."
|
|
375
375
|
)
|
|
376
376
|
# volumes in volumetric_capacity are relative to each frustum,
|
|
377
377
|
# so we have to find the volume of all the full sections enclosed
|
|
@@ -7,6 +7,7 @@ from numpy.typing import NDArray
|
|
|
7
7
|
from typing import Optional, List, Tuple, Union, cast, TypeVar, Dict, Set
|
|
8
8
|
from dataclasses import dataclass
|
|
9
9
|
from functools import cached_property
|
|
10
|
+
from math import isclose
|
|
10
11
|
|
|
11
12
|
from opentrons.types import (
|
|
12
13
|
Point,
|
|
@@ -487,7 +488,7 @@ class GeometryView:
|
|
|
487
488
|
raise OperationLocationNotInWellError(
|
|
488
489
|
f"Specifying {well_location.origin} with an offset of {well_location.offset} results in an operation location that could be below the bottom of the well"
|
|
489
490
|
)
|
|
490
|
-
elif z_offset < 0:
|
|
491
|
+
elif z_offset < 0 and not isclose(z_offset, 0, abs_tol=0.0000001):
|
|
491
492
|
if isinstance(well_location, LiquidHandlingWellLocation):
|
|
492
493
|
raise OperationLocationNotInWellError(
|
|
493
494
|
f"Specifying {well_location.origin} with an offset of {well_location.offset} and a volume offset of {well_location.volumeOffset} results in an operation location below the bottom of the well"
|
|
@@ -519,6 +520,7 @@ class GeometryView:
|
|
|
519
520
|
well_location=well_location,
|
|
520
521
|
well_depth=well_depth,
|
|
521
522
|
operation_volume=operation_volume,
|
|
523
|
+
pipette_id=pipette_id,
|
|
522
524
|
)
|
|
523
525
|
if not isinstance(offset_adjustment, SimulatedProbeResult):
|
|
524
526
|
offset = offset.model_copy(update={"z": offset.z + offset_adjustment})
|
|
@@ -1843,6 +1845,7 @@ class GeometryView:
|
|
|
1843
1845
|
self,
|
|
1844
1846
|
labware_id: str,
|
|
1845
1847
|
well_name: str,
|
|
1848
|
+
pipette_id: str,
|
|
1846
1849
|
operation_volume: float,
|
|
1847
1850
|
) -> float:
|
|
1848
1851
|
"""Get the change in height from a liquid handling operation."""
|
|
@@ -1852,6 +1855,7 @@ class GeometryView:
|
|
|
1852
1855
|
final_height = self.get_well_height_after_liquid_handling(
|
|
1853
1856
|
labware_id=labware_id,
|
|
1854
1857
|
well_name=well_name,
|
|
1858
|
+
pipette_id=pipette_id,
|
|
1855
1859
|
initial_height=initial_handling_height,
|
|
1856
1860
|
volume=operation_volume,
|
|
1857
1861
|
)
|
|
@@ -1872,6 +1876,7 @@ class GeometryView:
|
|
|
1872
1876
|
well_name: str,
|
|
1873
1877
|
well_location: WellLocationType,
|
|
1874
1878
|
well_depth: float,
|
|
1879
|
+
pipette_id: Optional[str] = None,
|
|
1875
1880
|
operation_volume: Optional[float] = None,
|
|
1876
1881
|
) -> LiquidTrackingType:
|
|
1877
1882
|
"""Return a z-axis distance that accounts for well handling height and operation volume.
|
|
@@ -1905,9 +1910,14 @@ class GeometryView:
|
|
|
1905
1910
|
volume = well_location.volumeOffset
|
|
1906
1911
|
|
|
1907
1912
|
if volume:
|
|
1913
|
+
if pipette_id is None:
|
|
1914
|
+
raise ValueError(
|
|
1915
|
+
"cannot get liquid handling offset without pipette id."
|
|
1916
|
+
)
|
|
1908
1917
|
liquid_height_after = self.get_well_height_after_liquid_handling(
|
|
1909
1918
|
labware_id=labware_id,
|
|
1910
1919
|
well_name=well_name,
|
|
1920
|
+
pipette_id=pipette_id,
|
|
1911
1921
|
initial_height=initial_handling_height,
|
|
1912
1922
|
volume=volume,
|
|
1913
1923
|
)
|
|
@@ -2029,6 +2039,7 @@ class GeometryView:
|
|
|
2029
2039
|
self,
|
|
2030
2040
|
labware_id: str,
|
|
2031
2041
|
well_name: str,
|
|
2042
|
+
pipette_id: str,
|
|
2032
2043
|
initial_height: LiquidTrackingType,
|
|
2033
2044
|
volume: float,
|
|
2034
2045
|
) -> LiquidTrackingType:
|
|
@@ -2043,7 +2054,14 @@ class GeometryView:
|
|
|
2043
2054
|
initial_volume = find_volume_at_well_height(
|
|
2044
2055
|
target_height=initial_height, well_geometry=well_geometry
|
|
2045
2056
|
)
|
|
2046
|
-
final_volume = initial_volume +
|
|
2057
|
+
final_volume = initial_volume + (
|
|
2058
|
+
volume
|
|
2059
|
+
* self.get_nozzles_per_well(
|
|
2060
|
+
labware_id=labware_id,
|
|
2061
|
+
target_well_name=well_name,
|
|
2062
|
+
pipette_id=pipette_id,
|
|
2063
|
+
)
|
|
2064
|
+
)
|
|
2047
2065
|
return find_height_at_well_volume(
|
|
2048
2066
|
target_volume=final_volume, well_geometry=well_geometry
|
|
2049
2067
|
)
|
|
@@ -2057,6 +2075,7 @@ class GeometryView:
|
|
|
2057
2075
|
self,
|
|
2058
2076
|
labware_id: str,
|
|
2059
2077
|
well_name: str,
|
|
2078
|
+
pipette_id: str,
|
|
2060
2079
|
initial_height: LiquidTrackingType,
|
|
2061
2080
|
volume: float,
|
|
2062
2081
|
) -> LiquidTrackingType:
|
|
@@ -2072,7 +2091,14 @@ class GeometryView:
|
|
|
2072
2091
|
initial_volume = find_volume_at_well_height(
|
|
2073
2092
|
target_height=initial_height, well_geometry=well_geometry
|
|
2074
2093
|
)
|
|
2075
|
-
final_volume = initial_volume +
|
|
2094
|
+
final_volume = initial_volume + (
|
|
2095
|
+
volume
|
|
2096
|
+
* self.get_nozzles_per_well(
|
|
2097
|
+
labware_id=labware_id,
|
|
2098
|
+
target_well_name=well_name,
|
|
2099
|
+
pipette_id=pipette_id,
|
|
2100
|
+
)
|
|
2101
|
+
)
|
|
2076
2102
|
well_volume = find_height_at_well_volume(
|
|
2077
2103
|
target_volume=final_volume,
|
|
2078
2104
|
well_geometry=well_geometry,
|
|
@@ -135,6 +135,7 @@ from .liquid_level_detection import (
|
|
|
135
135
|
WellInfoSummary,
|
|
136
136
|
WellLiquidInfo,
|
|
137
137
|
LiquidTrackingType,
|
|
138
|
+
SimulatedProbeResult,
|
|
138
139
|
)
|
|
139
140
|
from .liquid_handling import FlowRates
|
|
140
141
|
from .labware_movement import LabwareMovementStrategy, LabwareMovementOffsetData
|
|
@@ -280,6 +281,7 @@ __all__ = [
|
|
|
280
281
|
"WellInfoSummary",
|
|
281
282
|
"WellLiquidInfo",
|
|
282
283
|
"LiquidTrackingType",
|
|
284
|
+
"SimulatedProbeResult",
|
|
283
285
|
# Liquid handling
|
|
284
286
|
"FlowRates",
|
|
285
287
|
# Labware movement
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Protocol Engine types to do with liquid level detection."""
|
|
2
|
+
|
|
2
3
|
from __future__ import annotations
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from datetime import datetime
|
|
5
|
-
from typing import Optional, List
|
|
6
|
-
from pydantic import BaseModel, model_serializer,
|
|
6
|
+
from typing import Optional, List, Any
|
|
7
|
+
from pydantic import BaseModel, model_serializer, model_validator
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
class SimulatedProbeResult(BaseModel):
|
|
@@ -17,6 +18,14 @@ class SimulatedProbeResult(BaseModel):
|
|
|
17
18
|
"""Serialize instances of this class as a string."""
|
|
18
19
|
return "SimulatedProbeResult"
|
|
19
20
|
|
|
21
|
+
@model_validator(mode="before")
|
|
22
|
+
@classmethod
|
|
23
|
+
def validate_model(cls, data: object) -> Any:
|
|
24
|
+
"""Handle deserializing from a simulated probe result."""
|
|
25
|
+
if isinstance(data, str) and data == "SimulatedProbeResult":
|
|
26
|
+
return {}
|
|
27
|
+
return data
|
|
28
|
+
|
|
20
29
|
def __add__(
|
|
21
30
|
self, other: float | SimulatedProbeResult
|
|
22
31
|
) -> float | SimulatedProbeResult:
|
|
@@ -75,7 +84,9 @@ class SimulatedProbeResult(BaseModel):
|
|
|
75
84
|
self.operations_after_probe.append(volume)
|
|
76
85
|
|
|
77
86
|
|
|
78
|
-
|
|
87
|
+
# Work around https://github.com/pydantic/pydantic/issues/6830 - do not change the order of
|
|
88
|
+
# this union
|
|
89
|
+
LiquidTrackingType = float | SimulatedProbeResult
|
|
79
90
|
|
|
80
91
|
|
|
81
92
|
class LoadedVolumeInfo(BaseModel):
|
|
@@ -104,23 +115,6 @@ class ProbedVolumeInfo(BaseModel):
|
|
|
104
115
|
class WellInfoSummary(BaseModel):
|
|
105
116
|
"""Payload for a well's liquid info in StateSummary."""
|
|
106
117
|
|
|
107
|
-
# TODO(cm): 3/21/25: refactor SimulatedLiquidProbe in a way that
|
|
108
|
-
# doesn't require models like this one that are just using it to
|
|
109
|
-
# need a custom validator
|
|
110
|
-
@field_validator("probed_height", "probed_volume", mode="before")
|
|
111
|
-
@classmethod
|
|
112
|
-
def validate_simulated_probe_result(
|
|
113
|
-
cls, input_val: object
|
|
114
|
-
) -> LiquidTrackingType | None:
|
|
115
|
-
"""Return the appropriate input to WellInfoSummary from json data."""
|
|
116
|
-
if input_val is None:
|
|
117
|
-
return None
|
|
118
|
-
if isinstance(input_val, LiquidTrackingType):
|
|
119
|
-
return input_val
|
|
120
|
-
if isinstance(input_val, str) and input_val == "SimulatedProbeResult":
|
|
121
|
-
return SimulatedProbeResult()
|
|
122
|
-
raise ValueError(f"Invalid input value {input_val} to WellInfoSummary")
|
|
123
|
-
|
|
124
118
|
labware_id: str
|
|
125
119
|
well_name: str
|
|
126
120
|
loaded_volume: Optional[float] = None
|