opentrons 8.2.0a4__tar.gz → 8.3.0a1__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.2.0a4 → opentrons-8.3.0a1}/PKG-INFO +6 -5
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/setup.py +3 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/deck_configuration.py +3 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/file_operators.py +3 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/helpers.py +3 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/models/v1.py +16 -29
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/tip_length.py +7 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/models/v1.py +14 -23
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/cli/analyze.py +18 -6
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/defaults_ot3.py +1 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/communication/__init__.py +2 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/communication/errors.py +16 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/communication/serial_connection.py +24 -9
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/command_builder.py +2 -2
- opentrons-8.3.0a1/src/opentrons/drivers/flex_stacker/__init__.py +9 -0
- opentrons-8.3.0a1/src/opentrons/drivers/flex_stacker/abstract.py +89 -0
- opentrons-8.3.0a1/src/opentrons/drivers/flex_stacker/driver.py +260 -0
- opentrons-8.3.0a1/src/opentrons/drivers/flex_stacker/simulator.py +109 -0
- opentrons-8.3.0a1/src/opentrons/drivers/flex_stacker/types.py +138 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/heater_shaker/driver.py +18 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/temp_deck/driver.py +13 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/thermocycler/driver.py +17 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/execute.py +3 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/__init__.py +1 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/api.py +28 -20
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/flex_protocol.py +17 -7
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/ot3controller.py +213 -63
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/ot3simulator.py +18 -9
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/ot3utils.py +43 -15
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/dev_types.py +4 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/heater_shaker.py +4 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/module_server/client.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/module_server/server.py +5 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/settings.py +3 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot2/instrument_calibration.py +2 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot2/pipette.py +15 -22
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot2/pipette_handler.py +8 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot3/gripper.py +2 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot3/pipette.py +23 -22
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot3/pipette_handler.py +10 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/mod_abc.py +2 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/motion_utilities.py +68 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/nozzle_manager.py +39 -41
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/ot3_calibration.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/ot3api.py +60 -23
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/gripper_controller.py +3 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/hardware_manager.py +5 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/liquid_handler.py +18 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/motion_controller.py +6 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/robot_calibration.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/types.py +61 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/__init__.py +20 -1
- opentrons-8.3.0a1/src/opentrons/protocol_api/_liquid.py +81 -0
- opentrons-8.3.0a1/src/opentrons/protocol_api/_liquid_properties.py +754 -0
- opentrons-8.3.0a1/src/opentrons/protocol_api/_types.py +43 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/common.py +2 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/instrument.py +82 -10
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/labware.py +29 -7
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/protocol.py +130 -5
- opentrons-8.3.0a1/src/opentrons/protocol_api/core/engine/robot.py +139 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/well.py +4 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/instrument.py +46 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/labware.py +13 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/legacy_instrument_core.py +37 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/legacy_labware_core.py +13 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/legacy_protocol_core.py +32 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +37 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/protocol.py +34 -1
- opentrons-8.3.0a1/src/opentrons/protocol_api/core/robot.py +51 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/instrument_context.py +158 -44
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/labware.py +231 -7
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/module_contexts.py +21 -17
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/protocol_context.py +125 -4
- opentrons-8.3.0a1/src/opentrons/protocol_api/robot_context.py +261 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/validation.py +262 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/__init__.py +4 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/actions/actions.py +2 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/clients/sync_client.py +18 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/__init__.py +81 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +0 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/absorbance_reader/initialize.py +19 -5
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +0 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/absorbance_reader/read.py +32 -9
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/air_gap_in_place.py +160 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/aspirate.py +103 -53
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/aspirate_in_place.py +55 -51
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/blow_out.py +44 -39
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/blow_out_in_place.py +21 -32
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +13 -6
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/calibration/calibrate_module.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +3 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/command.py +73 -66
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/command_unions.py +101 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/comment.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/configure_for_volume.py +10 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/configure_nozzle_layout.py +6 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/custom.py +6 -12
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/dispense.py +192 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/dispense_in_place.py +176 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/drop_tip.py +52 -31
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/drop_tip_in_place.py +13 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/generate_command_schema.py +4 -11
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/get_next_tip.py +134 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/get_tip_presence.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +10 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/home.py +13 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/liquid_probe.py +67 -24
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/load_labware.py +29 -7
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/load_lid.py +146 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/load_lid_stack.py +189 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/load_liquid.py +12 -4
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/load_module.py +31 -10
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/load_pipette.py +19 -8
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/magnetic_module/disengage.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/magnetic_module/engage.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/move_labware.py +19 -6
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/move_relative.py +35 -25
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/move_to_addressable_area.py +40 -27
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +53 -32
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/move_to_coordinates.py +36 -22
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/move_to_well.py +40 -24
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/movement_common.py +338 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/pick_up_tip.py +49 -27
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/pipetting_common.py +292 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/prepare_to_aspirate.py +24 -33
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/reload_labware.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/retract_axis.py +1 -1
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/__init__.py +70 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +86 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/common.py +18 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/move_to.py +94 -0
- opentrons-8.3.0a1/src/opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +77 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/save_position.py +14 -5
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/set_rail_lights.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/set_status_bar.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/temperature_module/deactivate.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +10 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/close_lid.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/open_lid.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +8 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/run_profile.py +9 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +11 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/touch_tip.py +65 -16
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +4 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +12 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +1 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +1 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/verify_tip_presence.py +11 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/wait_for_duration.py +10 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/wait_for_resume.py +10 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/errors/__init__.py +8 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/errors/error_occurrence.py +19 -20
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/errors/exceptions.py +50 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/command_executor.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/equipment.py +73 -5
- opentrons-8.3.0a1/src/opentrons/protocol_engine/execution/gantry_mover.py +681 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/movement.py +27 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/pipetting.py +5 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/tip_handler.py +4 -6
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/notes/notes.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/protocol_engine.py +7 -6
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/labware_data_provider.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/labware_validation.py +5 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/module_data_provider.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/pipette_data_provider.py +26 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/slot_standardization.py +9 -9
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/_move_types.py +9 -5
- opentrons-8.3.0a1/src/opentrons/protocol_engine/state/_well_math.py +193 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/addressable_areas.py +25 -61
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/command_history.py +12 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/commands.py +17 -13
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/files.py +10 -12
- opentrons-8.3.0a1/src/opentrons/protocol_engine/state/fluid_stack.py +138 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/frustum_helpers.py +57 -32
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/geometry.py +47 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/labware.py +79 -25
- opentrons-8.3.0a1/src/opentrons/protocol_engine/state/liquid_classes.py +82 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/liquids.py +16 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/modules.py +52 -70
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/motion.py +6 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/pipettes.py +144 -58
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/state.py +21 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/state_summary.py +4 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/tips.py +11 -44
- opentrons-8.3.0a1/src/opentrons/protocol_engine/state/update_types.py +719 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/wells.py +19 -11
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/types.py +176 -28
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/extract_labware_definitions.py +5 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/file_format_validator.py +5 -5
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/json_file_reader.py +9 -3
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/json_translator.py +51 -25
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/legacy_command_mapper.py +66 -64
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/protocol_runner.py +35 -4
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/python_protocol_wrappers.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/run_orchestrator.py +13 -3
- opentrons-8.3.0a1/src/opentrons/protocols/advanced_control/common.py +38 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/advanced_control/mix.py +1 -1
- opentrons-8.3.0a1/src/opentrons/protocols/advanced_control/transfers/common.py +56 -0
- opentrons-8.2.0a4/src/opentrons/protocols/advanced_control/transfers.py → opentrons-8.3.0a1/src/opentrons/protocols/advanced_control/transfers/transfer.py +10 -85
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/definitions.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/instrument.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/util.py +10 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/labware.py +39 -6
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/models/json_protocol.py +5 -9
- opentrons-8.3.0a1/src/opentrons/py.typed +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/simulate.py +3 -1
- opentrons-8.3.0a1/src/opentrons/tools/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/types.py +162 -2
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/logging_config.py +1 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons.egg-info/PKG-INFO +6 -5
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons.egg-info/SOURCES.txt +28 -1
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons.egg-info/requires.txt +5 -4
- opentrons-8.2.0a4/src/opentrons/protocol_api/_liquid.py +0 -106
- opentrons-8.2.0a4/src/opentrons/protocol_api/_types.py +0 -19
- opentrons-8.2.0a4/src/opentrons/protocol_api/robot_context.py +0 -89
- opentrons-8.2.0a4/src/opentrons/protocol_engine/commands/dispense.py +0 -158
- opentrons-8.2.0a4/src/opentrons/protocol_engine/commands/dispense_in_place.py +0 -156
- opentrons-8.2.0a4/src/opentrons/protocol_engine/commands/pipetting_common.py +0 -210
- opentrons-8.2.0a4/src/opentrons/protocol_engine/commands/robot/__init__.py +0 -1
- opentrons-8.2.0a4/src/opentrons/protocol_engine/execution/gantry_mover.py +0 -325
- opentrons-8.2.0a4/src/opentrons/protocol_engine/state/update_types.py +0 -424
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/MANIFEST.in +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/README.rst +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/setup.cfg +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/_version.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/encoder_decoder.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/deck_attitude.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/mark_bad_calibration.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/models/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/models/defaults.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot2/pipette_offset.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/deck_attitude.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/gripper_offset.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/models/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/models/defaults.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/module_offset.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/ot3/pipette_offset.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/cli/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/cli/__main__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/advanced_settings.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/defaults_ot2.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/feature_flags.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/gripper_config.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/reset.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/robot_configs.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/config/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/absorbance_reader/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/absorbance_reader/abstract.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/absorbance_reader/async_byonoy.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/absorbance_reader/driver.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/absorbance_reader/hid_protocol.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/absorbance_reader/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/communication/async_serial.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/heater_shaker/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/heater_shaker/abstract.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/heater_shaker/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/mag_deck/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/mag_deck/abstract.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/mag_deck/driver.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/mag_deck/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/dev_types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/gpio.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/gpio_simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/interfaces.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/usb.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/rpi_drivers/usb_simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/serial_communication.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/connection.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/constants.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/driver_3_0.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/parse_utils.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/smoothie_drivers/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/temp_deck/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/temp_deck/abstract.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/temp_deck/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/thermocycler/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/thermocycler/abstract.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/thermocycler/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/utils.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/__main__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/adapters.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/controller.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/estop_state.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/simulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/status_bar_state.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/subsystem_manager.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/tip_presence_manager.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/backends/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/constants.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/abstract_emulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/app.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/connection_handler.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/magdeck.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/module_server/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/module_server/helpers.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/module_server/models.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/parser.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/proxy.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/run_emulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/scripts/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/scripts/run_app.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/scripts/run_module_emulator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/scripts/run_smoothie.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/simulations.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/smoothie.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/tempdeck.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/thermocycler.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/emulation/util.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/execution_manager.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/instrument_abc.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot2/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot3/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot3/gripper_handler.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/instruments/ot3/instrument_calibration.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/module_control.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/absorbance_reader.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/heater_shaker.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/lid_temp_status.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/magdeck.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/module_calibration.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/plate_temp_status.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/tempdeck.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/thermocycler.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/update.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/modules/utils.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/pause_manager.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/poller.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/asyncio_configurable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/calibratable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/chassis_accessory_manager.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/configurable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/event_sourcer.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/execution_controllable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/flex_calibratable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/flex_instrument_configurer.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/identifiable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/instrument_configurer.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/module_provider.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/position_estimator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/simulatable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/stoppable.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/protocols/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/scripts/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/scripts/gripper_control.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/scripts/repl.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/scripts/tc_control.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/simulator_setup.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/thread_manager.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/threaded_async_lock.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/hardware_control/util.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_broker.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/commands.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/helpers.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/module_commands.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/protocol_commands.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/publisher.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/legacy_commands/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/motion_planning/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/motion_planning/adjacent_slots_getters.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/motion_planning/deck_conflict.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/motion_planning/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/motion_planning/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/motion_planning/waypoints.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/ordered_set.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/_nozzle_layout.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/_parameter_context.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/_parameters.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/config.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/core_map.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/deck_conflict.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/exceptions.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/load_labware_params.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/module_core.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/overlap_versions.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/pipette_movement_conflict.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/point_calculations.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/engine/stringify.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/deck.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/labware_offset_provider.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/legacy_module_core.py +0 -0
- /opentrons-8.2.0a4/src/opentrons/protocols/advanced_control/__init__.py → /opentrons-8.3.0a1/src/opentrons/protocol_api/core/legacy/legacy_robot_core.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/legacy_well_core.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/load_info.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/module_geometry.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy/well_geometry.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy_simulator/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/legacy_simulator/legacy_protocol_core.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/module.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/well.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/core/well_grid.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/create_protocol_context.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/deck.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/disposal_locations.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_api/module_validation_and_errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/actions/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/actions/action_dispatcher.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/actions/action_handler.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/actions/get_state_update.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/clients/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/clients/transports.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/absorbance_reader/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/calibration/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/hash_command_params.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/heater_shaker/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/magnetic_module/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/temperature_module/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/thermocycler/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/create_protocol_engine.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/engine_support.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/error_recovery_policy.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/create_queue_worker.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/door_watcher.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/error_recovery_hardware_state_synchronizer.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/hardware_stopper.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/heater_shaker_movement_flagger.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/labware_movement.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/queue_worker.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/rail_lights.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/run_control.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/status_bar.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/thermocycler_movement_flagger.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/execution/thermocycler_plate_lifter.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/notes/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/plugins.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/deck_configuration_provider.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/deck_data_provider.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/file_provider.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/fixture_validation.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/model_utils.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/resources/ot3_validation.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/_abstract_store.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/config.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/absorbance_reader_substate.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/heater_shaker_module_substate.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/magnetic_block_substate.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/magnetic_module_substate.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/temperature_module_substate.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_engine/state/module_substates/thermocycler_module_substate.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/file_hasher.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/file_identifier.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/file_reader_writer.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/input_file.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/protocol_files_invalid_error.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/protocol_reader.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/protocol_source.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_reader/role_analyzer.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/create_simulating_orchestrator.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/legacy_context_plugin.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocol_runner/task_queue.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/__init__.py +0 -0
- {opentrons-8.2.0a4/src/opentrons/protocols/api_support → opentrons-8.3.0a1/src/opentrons/protocols/advanced_control}/__init__.py +0 -0
- {opentrons-8.2.0a4/src/opentrons/protocols/execution → opentrons-8.3.0a1/src/opentrons/protocols/advanced_control/transfers}/__init__.py +0 -0
- {opentrons-8.2.0a4/src/opentrons/protocols/geometry → opentrons-8.3.0a1/src/opentrons/protocols/api_support}/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/constants.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/deck_type.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/labware_like.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/tip_tracker.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/api_support/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/bundle.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/duration/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/duration/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/duration/estimator.py +0 -0
- {opentrons-8.2.0a4/src/opentrons/protocols/parameters → opentrons-8.3.0a1/src/opentrons/protocols/execution}/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/dev_types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/errors.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/execute.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/execute_json_v3.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/execute_json_v4.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/execute_json_v5.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/execute_python.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/json_dispatchers.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/execution/types.py +0 -0
- {opentrons-8.2.0a4/src/opentrons/tools → opentrons-8.3.0a1/src/opentrons/protocols/geometry}/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/geometry/labware_geometry.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/geometry/planning.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/models/__init__.py +0 -0
- /opentrons-8.2.0a4/src/opentrons/py.typed → /opentrons-8.3.0a1/src/opentrons/protocols/parameters/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parameters/csv_parameter_definition.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parameters/csv_parameter_interface.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parameters/exceptions.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parameters/parameter_definition.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parameters/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parameters/validation.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/parse.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/protocols/types.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/resources/scripts/lpc21isp +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/resources/smoothie-edge-8414642.hex +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/camera.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/log_control.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/nmcli.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/resin.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/smoothie_update.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/system/wifi.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/tools/args_handler.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/tools/write_pipette_memory.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/__init__.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/async_helpers.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/broker.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/change_notifier.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/entrypoint_util.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/get_union_elements.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/helpers.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/linal.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/util/performance_helpers.py +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons.egg-info/dependency_links.txt +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons.egg-info/entry_points.txt +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons.egg-info/not-zip-safe +0 -0
- {opentrons-8.2.0a4 → opentrons-8.3.0a1}/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.
|
|
3
|
+
Version: 8.3.0a1
|
|
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,12 +21,13 @@ 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.
|
|
24
|
+
Requires-Dist: opentrons-shared-data==8.3.0a1
|
|
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
|
|
28
28
|
Requires-Dist: numpy<2,>=1.20.0
|
|
29
|
-
Requires-Dist: pydantic<2.0.0
|
|
29
|
+
Requires-Dist: pydantic<3,>=2.0.0
|
|
30
|
+
Requires-Dist: pydantic-settings<3,>=2
|
|
30
31
|
Requires-Dist: pyserial>=3.5
|
|
31
32
|
Requires-Dist: typing-extensions<5,>=4.0.0
|
|
32
33
|
Requires-Dist: click<9,>=8.0.0
|
|
@@ -34,9 +35,9 @@ Requires-Dist: pyusb==1.2.1
|
|
|
34
35
|
Requires-Dist: importlib-metadata>=1.0; python_version < "3.8"
|
|
35
36
|
Requires-Dist: packaging>=21.0
|
|
36
37
|
Provides-Extra: ot2-hardware
|
|
37
|
-
Requires-Dist: opentrons-hardware==8.
|
|
38
|
+
Requires-Dist: opentrons-hardware==8.3.0a1; extra == "ot2-hardware"
|
|
38
39
|
Provides-Extra: flex-hardware
|
|
39
|
-
Requires-Dist: opentrons-hardware[FLEX]==8.
|
|
40
|
+
Requires-Dist: opentrons-hardware[FLEX]==8.3.0a1; extra == "flex-hardware"
|
|
40
41
|
|
|
41
42
|
.. _Full API Documentation: http://docs.opentrons.com
|
|
42
43
|
|
|
@@ -59,9 +59,11 @@ INSTALL_REQUIRES = [
|
|
|
59
59
|
f"opentrons-shared-data=={VERSION}",
|
|
60
60
|
"aionotify==0.3.1",
|
|
61
61
|
"anyio>=3.6.1,<4.0.0",
|
|
62
|
+
# todo(mm, 2024-12-14): investigate ref resolution problems caused by jsonschema>=4.18.1.
|
|
62
63
|
"jsonschema>=3.0.1,<4.18.0",
|
|
63
64
|
"numpy>=1.20.0,<2",
|
|
64
|
-
"pydantic>=
|
|
65
|
+
"pydantic>=2.0.0,<3",
|
|
66
|
+
"pydantic-settings>=2,<3",
|
|
65
67
|
"pyserial>=3.5",
|
|
66
68
|
"typing-extensions>=4.0.0,<5",
|
|
67
69
|
"click>=8.0.0,<9",
|
{opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/calibration_storage/deck_configuration.py
RENAMED
|
@@ -10,7 +10,7 @@ from . import file_operators as io
|
|
|
10
10
|
class _CutoutFixturePlacementModel(pydantic.BaseModel):
|
|
11
11
|
cutoutId: str
|
|
12
12
|
cutoutFixtureId: str
|
|
13
|
-
opentronsModuleSerialNumber: Optional[str]
|
|
13
|
+
opentronsModuleSerialNumber: Optional[str] = None
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class _DeckConfigurationModel(pydantic.BaseModel):
|
|
@@ -24,9 +24,9 @@ def serialize_deck_configuration(
|
|
|
24
24
|
cutout_fixture_placements: List[CutoutFixturePlacement], last_modified: datetime
|
|
25
25
|
) -> bytes:
|
|
26
26
|
"""Serialize a deck configuration for storing on the filesystem."""
|
|
27
|
-
data = _DeckConfigurationModel.
|
|
27
|
+
data = _DeckConfigurationModel.model_construct(
|
|
28
28
|
cutoutFixtures=[
|
|
29
|
-
_CutoutFixturePlacementModel.
|
|
29
|
+
_CutoutFixturePlacementModel.model_construct(
|
|
30
30
|
cutoutId=e.cutout_id,
|
|
31
31
|
cutoutFixtureId=e.cutout_fixture_id,
|
|
32
32
|
opentronsModuleSerialNumber=e.opentrons_module_serial_number,
|
|
@@ -103,7 +103,7 @@ def save_to_file(
|
|
|
103
103
|
directory_path.mkdir(parents=True, exist_ok=True)
|
|
104
104
|
file_path = directory_path / f"{file_name}.json"
|
|
105
105
|
json_data = (
|
|
106
|
-
data.
|
|
106
|
+
data.model_dump_json()
|
|
107
107
|
if isinstance(data, pydantic.BaseModel)
|
|
108
108
|
else json.dumps(data, cls=encoder)
|
|
109
109
|
)
|
|
@@ -112,7 +112,7 @@ def save_to_file(
|
|
|
112
112
|
|
|
113
113
|
def serialize_pydantic_model(data: pydantic.BaseModel) -> bytes:
|
|
114
114
|
"""Safely serialize data from a Pydantic model into a form suitable for storing on disk."""
|
|
115
|
-
return data.
|
|
115
|
+
return data.model_dump_json(by_alias=True).encode("utf-8")
|
|
116
116
|
|
|
117
117
|
|
|
118
118
|
_ModelT = typing.TypeVar("_ModelT", bound=pydantic.BaseModel)
|
|
@@ -133,7 +133,7 @@ def deserialize_pydantic_model(
|
|
|
133
133
|
Returns `None` if the file is missing or corrupt.
|
|
134
134
|
"""
|
|
135
135
|
try:
|
|
136
|
-
return model.
|
|
136
|
+
return model.model_validate_json(serialized)
|
|
137
137
|
except json.JSONDecodeError:
|
|
138
138
|
_log.warning("Data is not valid JSON.", exc_info=True)
|
|
139
139
|
return None
|
|
@@ -31,7 +31,9 @@ def convert_to_dict(obj: Any) -> Dict[str, Any]:
|
|
|
31
31
|
# https://github.com/python/mypy/issues/6568
|
|
32
32
|
# Unfortunately, since it's not currently supported I have an
|
|
33
33
|
# assert check instead.
|
|
34
|
-
assert is_dataclass(obj)
|
|
34
|
+
assert is_dataclass(obj) and not isinstance(
|
|
35
|
+
obj, type
|
|
36
|
+
), "This function is intended for dataclasses only"
|
|
35
37
|
return asdict(obj, dict_factory=dict_filter_none)
|
|
36
38
|
|
|
37
39
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import typing
|
|
2
2
|
|
|
3
3
|
from typing_extensions import Literal
|
|
4
|
-
from pydantic import BaseModel, Field,
|
|
4
|
+
from pydantic import field_validator, BaseModel, Field, PlainSerializer
|
|
5
5
|
from datetime import datetime
|
|
6
6
|
|
|
7
7
|
from opentrons_shared_data.pipette.types import LabwareUri
|
|
@@ -9,11 +9,16 @@ from opentrons_shared_data.pipette.types import LabwareUri
|
|
|
9
9
|
from opentrons.types import Point
|
|
10
10
|
from opentrons.calibration_storage import types
|
|
11
11
|
|
|
12
|
+
DatetimeType = typing.Annotated[
|
|
13
|
+
datetime,
|
|
14
|
+
PlainSerializer(lambda x: x.isoformat(), when_used="json"),
|
|
15
|
+
]
|
|
16
|
+
|
|
12
17
|
|
|
13
18
|
class CalibrationStatus(BaseModel):
|
|
14
19
|
markedBad: bool = False
|
|
15
20
|
source: typing.Optional[types.SourceType] = None
|
|
16
|
-
markedAt: typing.Optional[
|
|
21
|
+
markedAt: typing.Optional[DatetimeType] = None
|
|
17
22
|
|
|
18
23
|
|
|
19
24
|
# Schemas used to store the data types
|
|
@@ -22,7 +27,7 @@ class CalibrationStatus(BaseModel):
|
|
|
22
27
|
# they are currently saved in on the OT-2 to avoid a large migration.
|
|
23
28
|
class TipLengthModel(BaseModel):
|
|
24
29
|
tipLength: float = Field(..., description="Tip length data found from calibration.")
|
|
25
|
-
lastModified:
|
|
30
|
+
lastModified: DatetimeType = Field(
|
|
26
31
|
..., description="The last time this tip length was calibrated."
|
|
27
32
|
)
|
|
28
33
|
source: types.SourceType = Field(
|
|
@@ -40,22 +45,19 @@ class TipLengthModel(BaseModel):
|
|
|
40
45
|
..., description="The tiprack hash associated with the tip length data."
|
|
41
46
|
)
|
|
42
47
|
|
|
43
|
-
@
|
|
48
|
+
@field_validator("tipLength")
|
|
49
|
+
@classmethod
|
|
44
50
|
def ensure_tip_length_positive(cls, tipLength: float) -> float:
|
|
45
51
|
if tipLength < 0.0:
|
|
46
52
|
raise ValueError("Tip Length must be a positive number")
|
|
47
53
|
return tipLength
|
|
48
54
|
|
|
49
|
-
class Config:
|
|
50
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
51
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
52
|
-
|
|
53
55
|
|
|
54
56
|
class DeckCalibrationModel(BaseModel):
|
|
55
57
|
attitude: types.AttitudeMatrix = Field(
|
|
56
58
|
..., description="Attitude matrix for deck found from calibration."
|
|
57
59
|
)
|
|
58
|
-
last_modified: typing.Optional[
|
|
60
|
+
last_modified: typing.Optional[DatetimeType] = Field(
|
|
59
61
|
default=None, description="The last time this deck was calibrated."
|
|
60
62
|
)
|
|
61
63
|
source: types.SourceType = Field(
|
|
@@ -72,10 +74,6 @@ class DeckCalibrationModel(BaseModel):
|
|
|
72
74
|
description="The status of the calibration data.",
|
|
73
75
|
)
|
|
74
76
|
|
|
75
|
-
class Config:
|
|
76
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
77
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
78
|
-
|
|
79
77
|
|
|
80
78
|
class InstrumentOffsetModel(BaseModel):
|
|
81
79
|
offset: Point = Field(..., description="Instrument offset found from calibration.")
|
|
@@ -83,7 +81,7 @@ class InstrumentOffsetModel(BaseModel):
|
|
|
83
81
|
uri: str = Field(
|
|
84
82
|
..., description="The URI of the labware used for instrument offset"
|
|
85
83
|
)
|
|
86
|
-
last_modified:
|
|
84
|
+
last_modified: DatetimeType = Field(
|
|
87
85
|
..., description="The last time this instrument was calibrated."
|
|
88
86
|
)
|
|
89
87
|
source: types.SourceType = Field(
|
|
@@ -94,10 +92,6 @@ class InstrumentOffsetModel(BaseModel):
|
|
|
94
92
|
description="The status of the calibration data.",
|
|
95
93
|
)
|
|
96
94
|
|
|
97
|
-
class Config:
|
|
98
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
99
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
100
|
-
|
|
101
95
|
|
|
102
96
|
# TODO(lc 09-19-2022) We need to refactor the calibration endpoints
|
|
103
97
|
# so that we only need to use one data model schema. This model is a
|
|
@@ -112,7 +106,7 @@ class PipetteOffsetCalibration(BaseModel):
|
|
|
112
106
|
uri: str = Field(
|
|
113
107
|
..., description="The URI of the labware used for instrument offset"
|
|
114
108
|
)
|
|
115
|
-
last_modified:
|
|
109
|
+
last_modified: DatetimeType = Field(
|
|
116
110
|
..., description="The last time this instrument was calibrated."
|
|
117
111
|
)
|
|
118
112
|
source: types.SourceType = Field(
|
|
@@ -123,10 +117,6 @@ class PipetteOffsetCalibration(BaseModel):
|
|
|
123
117
|
description="The status of the calibration data.",
|
|
124
118
|
)
|
|
125
119
|
|
|
126
|
-
class Config:
|
|
127
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
128
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
129
|
-
|
|
130
120
|
|
|
131
121
|
# TODO(lc 09-19-2022) We need to refactor the calibration endpoints
|
|
132
122
|
# so that we only need to use one data model schema. This model is a
|
|
@@ -137,7 +127,7 @@ class TipLengthCalibration(BaseModel):
|
|
|
137
127
|
..., description="The tiprack hash associated with this tip length data."
|
|
138
128
|
)
|
|
139
129
|
tipLength: float = Field(..., description="Tip length data found from calibration.")
|
|
140
|
-
lastModified:
|
|
130
|
+
lastModified: DatetimeType = Field(
|
|
141
131
|
..., description="The last time this tip length was calibrated."
|
|
142
132
|
)
|
|
143
133
|
source: types.SourceType = Field(
|
|
@@ -151,12 +141,9 @@ class TipLengthCalibration(BaseModel):
|
|
|
151
141
|
..., description="The tiprack URI associated with the tip length data."
|
|
152
142
|
)
|
|
153
143
|
|
|
154
|
-
@
|
|
144
|
+
@field_validator("tipLength")
|
|
145
|
+
@classmethod
|
|
155
146
|
def ensure_tip_length_positive(cls, tipLength: float) -> float:
|
|
156
147
|
if tipLength < 0.0:
|
|
157
148
|
raise ValueError("Tip Length must be a positive number")
|
|
158
149
|
return tipLength
|
|
159
|
-
|
|
160
|
-
class Config:
|
|
161
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
162
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
@@ -24,13 +24,14 @@ log = logging.getLogger(__name__)
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def _convert_tip_length_model_to_dict(
|
|
27
|
-
to_dict: typing.Dict[LabwareUri, v1.TipLengthModel]
|
|
27
|
+
to_dict: typing.Dict[LabwareUri, v1.TipLengthModel],
|
|
28
28
|
) -> typing.Dict[LabwareUri, typing.Any]:
|
|
29
|
+
# TODO[pydantic]: supported in Pydantic V2
|
|
29
30
|
# This is a workaround since pydantic doesn't have a nice way to
|
|
30
31
|
# add encoders when converting to a dict.
|
|
31
32
|
dict_of_tip_lengths = {}
|
|
32
33
|
for key, item in to_dict.items():
|
|
33
|
-
dict_of_tip_lengths[key] = json.loads(item.
|
|
34
|
+
dict_of_tip_lengths[key] = json.loads(item.model_dump_json())
|
|
34
35
|
return dict_of_tip_lengths
|
|
35
36
|
|
|
36
37
|
|
|
@@ -175,12 +176,14 @@ def delete_tip_length_calibration(
|
|
|
175
176
|
io.save_to_file(tip_length_dir, pipette_id, dict_of_tip_lengths)
|
|
176
177
|
else:
|
|
177
178
|
io.delete_file(tip_length_dir / f"{pipette_id}.json")
|
|
178
|
-
elif tiprack_hash and any(
|
|
179
|
+
elif tiprack_hash and any(
|
|
180
|
+
tiprack_hash in v.model_dump() for v in tip_lengths.values()
|
|
181
|
+
):
|
|
179
182
|
# NOTE this is for backwards compatibilty only
|
|
180
183
|
# TODO delete this check once the tip_length DELETE router
|
|
181
184
|
# no longer depends on a tiprack hash
|
|
182
185
|
for k, v in tip_lengths.items():
|
|
183
|
-
if tiprack_hash in v.
|
|
186
|
+
if tiprack_hash in v.model_dump():
|
|
184
187
|
tip_lengths.pop(k)
|
|
185
188
|
if tip_lengths:
|
|
186
189
|
dict_of_tip_lengths = _convert_tip_length_model_to_dict(tip_lengths)
|
|
@@ -3,7 +3,7 @@ import typing
|
|
|
3
3
|
from typing_extensions import Literal
|
|
4
4
|
from opentrons.hardware_control.modules.types import ModuleType
|
|
5
5
|
from opentrons.hardware_control.types import OT3Mount
|
|
6
|
-
from pydantic import BaseModel, Field,
|
|
6
|
+
from pydantic import field_validator, BaseModel, Field, PlainSerializer
|
|
7
7
|
from datetime import datetime
|
|
8
8
|
|
|
9
9
|
from opentrons_shared_data.pipette.types import LabwareUri
|
|
@@ -12,15 +12,21 @@ from opentrons.types import Point
|
|
|
12
12
|
from opentrons.calibration_storage import types
|
|
13
13
|
|
|
14
14
|
|
|
15
|
+
DatetimeType = typing.Annotated[
|
|
16
|
+
datetime,
|
|
17
|
+
PlainSerializer(lambda x: x.isoformat(), when_used="json"),
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
|
|
15
21
|
class CalibrationStatus(BaseModel):
|
|
16
22
|
markedBad: bool = False
|
|
17
23
|
source: typing.Optional[types.SourceType] = None
|
|
18
|
-
markedAt: typing.Optional[
|
|
24
|
+
markedAt: typing.Optional[DatetimeType] = None
|
|
19
25
|
|
|
20
26
|
|
|
21
27
|
class TipLengthModel(BaseModel):
|
|
22
28
|
tipLength: float = Field(..., description="Tip length data found from calibration.")
|
|
23
|
-
lastModified:
|
|
29
|
+
lastModified: DatetimeType = Field(
|
|
24
30
|
..., description="The last time this tip length was calibrated."
|
|
25
31
|
)
|
|
26
32
|
uri: typing.Union[LabwareUri, Literal[""]] = Field(
|
|
@@ -34,22 +40,19 @@ class TipLengthModel(BaseModel):
|
|
|
34
40
|
description="The status of the calibration data.",
|
|
35
41
|
)
|
|
36
42
|
|
|
37
|
-
@
|
|
43
|
+
@field_validator("tipLength")
|
|
44
|
+
@classmethod
|
|
38
45
|
def ensure_tip_length_positive(cls, tipLength: float) -> float:
|
|
39
46
|
if tipLength < 0.0:
|
|
40
47
|
raise ValueError("Tip Length must be a positive number")
|
|
41
48
|
return tipLength
|
|
42
49
|
|
|
43
|
-
class Config:
|
|
44
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
45
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
46
|
-
|
|
47
50
|
|
|
48
51
|
class BeltCalibrationModel(BaseModel):
|
|
49
52
|
attitude: types.AttitudeMatrix = Field(
|
|
50
53
|
..., description="Attitude matrix for belts found from calibration."
|
|
51
54
|
)
|
|
52
|
-
lastModified:
|
|
55
|
+
lastModified: DatetimeType = Field(
|
|
53
56
|
..., description="The last time this deck was calibrated."
|
|
54
57
|
)
|
|
55
58
|
source: types.SourceType = Field(
|
|
@@ -63,14 +66,10 @@ class BeltCalibrationModel(BaseModel):
|
|
|
63
66
|
description="The status of the calibration data.",
|
|
64
67
|
)
|
|
65
68
|
|
|
66
|
-
class Config:
|
|
67
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
68
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
69
|
-
|
|
70
69
|
|
|
71
70
|
class InstrumentOffsetModel(BaseModel):
|
|
72
71
|
offset: Point = Field(..., description="Instrument offset found from calibration.")
|
|
73
|
-
lastModified:
|
|
72
|
+
lastModified: DatetimeType = Field(
|
|
74
73
|
..., description="The last time this instrument was calibrated."
|
|
75
74
|
)
|
|
76
75
|
source: types.SourceType = Field(
|
|
@@ -81,10 +80,6 @@ class InstrumentOffsetModel(BaseModel):
|
|
|
81
80
|
description="The status of the calibration data.",
|
|
82
81
|
)
|
|
83
82
|
|
|
84
|
-
class Config:
|
|
85
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
86
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
87
|
-
|
|
88
83
|
|
|
89
84
|
class ModuleOffsetModel(BaseModel):
|
|
90
85
|
offset: Point = Field(..., description="Module offset found from calibration.")
|
|
@@ -99,7 +94,7 @@ class ModuleOffsetModel(BaseModel):
|
|
|
99
94
|
...,
|
|
100
95
|
description="The unique id of the instrument used to calibrate this module.",
|
|
101
96
|
)
|
|
102
|
-
lastModified:
|
|
97
|
+
lastModified: DatetimeType = Field(
|
|
103
98
|
..., description="The last time this module was calibrated."
|
|
104
99
|
)
|
|
105
100
|
source: types.SourceType = Field(
|
|
@@ -109,7 +104,3 @@ class ModuleOffsetModel(BaseModel):
|
|
|
109
104
|
default_factory=CalibrationStatus,
|
|
110
105
|
description="The status of the calibration data.",
|
|
111
106
|
)
|
|
112
|
-
|
|
113
|
-
class Config:
|
|
114
|
-
json_encoders = {datetime: lambda obj: obj.isoformat()}
|
|
115
|
-
json_decoders = {datetime: lambda obj: datetime.fromisoformat(obj)}
|
|
@@ -53,9 +53,11 @@ from opentrons.protocol_engine import (
|
|
|
53
53
|
LoadedPipette,
|
|
54
54
|
LoadedModule,
|
|
55
55
|
Liquid,
|
|
56
|
+
LiquidClassRecordWithId,
|
|
56
57
|
StateSummary,
|
|
57
58
|
)
|
|
58
59
|
from opentrons.protocol_engine.protocol_engine import code_in_error_tree
|
|
60
|
+
from opentrons.protocol_engine.types import CommandAnnotation
|
|
59
61
|
|
|
60
62
|
from opentrons_shared_data.robot.types import RobotType
|
|
61
63
|
|
|
@@ -333,8 +335,10 @@ async def _do_analyze(
|
|
|
333
335
|
wells=[],
|
|
334
336
|
hasEverEnteredErrorRecovery=False,
|
|
335
337
|
files=[],
|
|
338
|
+
liquidClasses=[],
|
|
336
339
|
),
|
|
337
340
|
parameters=[],
|
|
341
|
+
command_annotations=[],
|
|
338
342
|
)
|
|
339
343
|
return analysis
|
|
340
344
|
return await orchestrator.run(deck_configuration=[])
|
|
@@ -378,16 +382,20 @@ async def _analyze(
|
|
|
378
382
|
else:
|
|
379
383
|
result = AnalysisResult.OK
|
|
380
384
|
|
|
381
|
-
results = AnalyzeResults.
|
|
385
|
+
results = AnalyzeResults.model_construct(
|
|
382
386
|
createdAt=datetime.now(tz=timezone.utc),
|
|
383
387
|
files=[
|
|
384
|
-
ProtocolFile.
|
|
388
|
+
ProtocolFile.model_construct(name=f.path.name, role=f.role)
|
|
385
389
|
for f in protocol_source.files
|
|
386
390
|
],
|
|
387
391
|
config=(
|
|
388
|
-
JsonConfig.
|
|
392
|
+
JsonConfig.model_construct(
|
|
393
|
+
schemaVersion=protocol_source.config.schema_version
|
|
394
|
+
)
|
|
389
395
|
if isinstance(protocol_source.config, JsonProtocolConfig)
|
|
390
|
-
else PythonConfig.
|
|
396
|
+
else PythonConfig.model_construct(
|
|
397
|
+
apiVersion=protocol_source.config.api_version
|
|
398
|
+
)
|
|
391
399
|
),
|
|
392
400
|
result=result,
|
|
393
401
|
metadata=protocol_source.metadata,
|
|
@@ -399,20 +407,22 @@ async def _analyze(
|
|
|
399
407
|
pipettes=analysis.state_summary.pipettes,
|
|
400
408
|
modules=analysis.state_summary.modules,
|
|
401
409
|
liquids=analysis.state_summary.liquids,
|
|
410
|
+
commandAnnotations=analysis.command_annotations,
|
|
411
|
+
liquidClasses=analysis.state_summary.liquidClasses,
|
|
402
412
|
)
|
|
403
413
|
|
|
404
414
|
_call_for_output_of_kind(
|
|
405
415
|
"json",
|
|
406
416
|
outputs,
|
|
407
417
|
lambda to_file: to_file.write(
|
|
408
|
-
results.
|
|
418
|
+
results.model_dump_json(exclude_none=True).encode("utf-8"),
|
|
409
419
|
),
|
|
410
420
|
)
|
|
411
421
|
_call_for_output_of_kind(
|
|
412
422
|
"human-json",
|
|
413
423
|
outputs,
|
|
414
424
|
lambda to_file: to_file.write(
|
|
415
|
-
results.
|
|
425
|
+
results.model_dump_json(exclude_none=True, indent=2).encode("utf-8")
|
|
416
426
|
),
|
|
417
427
|
)
|
|
418
428
|
if check:
|
|
@@ -486,4 +496,6 @@ class AnalyzeResults(BaseModel):
|
|
|
486
496
|
pipettes: List[LoadedPipette]
|
|
487
497
|
modules: List[LoadedModule]
|
|
488
498
|
liquids: List[Liquid]
|
|
499
|
+
liquidClasses: List[LiquidClassRecordWithId]
|
|
489
500
|
errors: List[ErrorOccurrence]
|
|
501
|
+
commandAnnotations: List[CommandAnnotation]
|
|
@@ -75,6 +75,7 @@ DEFAULT_RIGHT_MOUNT_OFFSET: Final[Offset] = (40.5, -60.5, 255.675)
|
|
|
75
75
|
DEFAULT_GRIPPER_MOUNT_OFFSET: Final[Offset] = (84.55, -12.75, 93.85)
|
|
76
76
|
DEFAULT_SAFE_HOME_DISTANCE: Final = 5
|
|
77
77
|
DEFAULT_CALIBRATION_AXIS_MAX_SPEED: Final = 30
|
|
78
|
+
DEFAULT_EMULSIFYING_PIPETTE_AXIS_MAX_SPEED: Final = 90
|
|
78
79
|
|
|
79
80
|
DEFAULT_MAX_SPEEDS: Final[ByGantryLoad[Dict[OT3AxisKind, float]]] = ByGantryLoad(
|
|
80
81
|
high_throughput={
|
{opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/communication/__init__.py
RENAMED
|
@@ -4,6 +4,7 @@ from opentrons.drivers.asyncio.communication.errors import (
|
|
|
4
4
|
NoResponse,
|
|
5
5
|
AlarmResponse,
|
|
6
6
|
ErrorResponse,
|
|
7
|
+
UnhandledGcode,
|
|
7
8
|
)
|
|
8
9
|
from .async_serial import AsyncSerial
|
|
9
10
|
|
|
@@ -15,4 +16,5 @@ __all__ = [
|
|
|
15
16
|
"NoResponse",
|
|
16
17
|
"AlarmResponse",
|
|
17
18
|
"ErrorResponse",
|
|
19
|
+
"UnhandledGcode",
|
|
18
20
|
]
|
{opentrons-8.2.0a4 → opentrons-8.3.0a1}/src/opentrons/drivers/asyncio/communication/errors.py
RENAMED
|
@@ -1,23 +1,30 @@
|
|
|
1
1
|
"""Errors raised by serial connection."""
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
from enum import Enum
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class ErrorCodes(Enum):
|
|
8
|
+
UNHANDLED_GCODE = "ERR003"
|
|
9
|
+
|
|
10
|
+
|
|
4
11
|
class SerialException(Exception):
|
|
5
12
|
"""Base serial exception"""
|
|
6
13
|
|
|
7
|
-
def __init__(self, port: str, description: str):
|
|
14
|
+
def __init__(self, port: str, description: str) -> None:
|
|
8
15
|
super().__init__(f"{port}: {description}")
|
|
9
16
|
self.port = port
|
|
10
17
|
self.description = description
|
|
11
18
|
|
|
12
19
|
|
|
13
20
|
class NoResponse(SerialException):
|
|
14
|
-
def __init__(self, port: str, command: str):
|
|
21
|
+
def __init__(self, port: str, command: str) -> None:
|
|
15
22
|
super().__init__(port=port, description=f"No response to '{command}'")
|
|
16
23
|
self.command = command
|
|
17
24
|
|
|
18
25
|
|
|
19
26
|
class FailedCommand(SerialException):
|
|
20
|
-
def __init__(self, port: str, response: str):
|
|
27
|
+
def __init__(self, port: str, response: str) -> None:
|
|
21
28
|
super().__init__(
|
|
22
29
|
port=port, description=f"'Received error response '{response}'"
|
|
23
30
|
)
|
|
@@ -30,3 +37,9 @@ class AlarmResponse(FailedCommand):
|
|
|
30
37
|
|
|
31
38
|
class ErrorResponse(FailedCommand):
|
|
32
39
|
pass
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class UnhandledGcode(ErrorResponse):
|
|
43
|
+
def __init__(self, port: str, response: str, command: str) -> None:
|
|
44
|
+
self.command = command
|
|
45
|
+
super().__init__(port, response)
|
|
@@ -6,7 +6,7 @@ from typing import Optional, List
|
|
|
6
6
|
|
|
7
7
|
from opentrons.drivers.command_builder import CommandBuilder
|
|
8
8
|
|
|
9
|
-
from .errors import NoResponse, AlarmResponse, ErrorResponse
|
|
9
|
+
from .errors import NoResponse, AlarmResponse, ErrorResponse, UnhandledGcode, ErrorCodes
|
|
10
10
|
from .async_serial import AsyncSerial
|
|
11
11
|
|
|
12
12
|
log = logging.getLogger(__name__)
|
|
@@ -199,7 +199,7 @@ class SerialConnection:
|
|
|
199
199
|
str_response = self.process_raw_response(
|
|
200
200
|
command=data, response=response.decode()
|
|
201
201
|
)
|
|
202
|
-
self.raise_on_error(response=str_response)
|
|
202
|
+
self.raise_on_error(response=str_response, request=data)
|
|
203
203
|
return str_response
|
|
204
204
|
|
|
205
205
|
log.info(f"{self.name}: retry number {retry}/{retries}")
|
|
@@ -232,11 +232,12 @@ class SerialConnection:
|
|
|
232
232
|
def send_data_lock(self) -> asyncio.Lock:
|
|
233
233
|
return self._send_data_lock
|
|
234
234
|
|
|
235
|
-
def raise_on_error(self, response: str) -> None:
|
|
235
|
+
def raise_on_error(self, response: str, request: str) -> None:
|
|
236
236
|
"""
|
|
237
237
|
Raise an error if the response contains an error
|
|
238
238
|
|
|
239
239
|
Args:
|
|
240
|
+
gcode: the requesting gocde
|
|
240
241
|
response: response
|
|
241
242
|
|
|
242
243
|
Returns: None
|
|
@@ -248,8 +249,13 @@ class SerialConnection:
|
|
|
248
249
|
if self._alarm_keyword in lower:
|
|
249
250
|
raise AlarmResponse(port=self._port, response=response)
|
|
250
251
|
|
|
251
|
-
if self._error_keyword in lower:
|
|
252
|
-
|
|
252
|
+
if self._error_keyword.lower() in lower:
|
|
253
|
+
if ErrorCodes.UNHANDLED_GCODE.value.lower() in lower:
|
|
254
|
+
raise UnhandledGcode(
|
|
255
|
+
port=self._port, response=response, command=request
|
|
256
|
+
)
|
|
257
|
+
else:
|
|
258
|
+
raise ErrorResponse(port=self._port, response=response)
|
|
253
259
|
|
|
254
260
|
async def on_retry(self) -> None:
|
|
255
261
|
"""
|
|
@@ -292,6 +298,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
292
298
|
alarm_keyword: Optional[str] = None,
|
|
293
299
|
reset_buffer_before_write: bool = False,
|
|
294
300
|
async_error_ack: Optional[str] = None,
|
|
301
|
+
number_of_retries: int = 0,
|
|
295
302
|
) -> AsyncResponseSerialConnection:
|
|
296
303
|
"""
|
|
297
304
|
Create a connection.
|
|
@@ -334,6 +341,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
334
341
|
error_keyword=error_keyword or "err",
|
|
335
342
|
alarm_keyword=alarm_keyword or "alarm",
|
|
336
343
|
async_error_ack=async_error_ack or "async",
|
|
344
|
+
number_of_retries=number_of_retries,
|
|
337
345
|
)
|
|
338
346
|
|
|
339
347
|
def __init__(
|
|
@@ -346,6 +354,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
346
354
|
error_keyword: str,
|
|
347
355
|
alarm_keyword: str,
|
|
348
356
|
async_error_ack: str,
|
|
357
|
+
number_of_retries: int = 0,
|
|
349
358
|
) -> None:
|
|
350
359
|
"""
|
|
351
360
|
Constructor
|
|
@@ -377,6 +386,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
377
386
|
self._name = name
|
|
378
387
|
self._ack = ack.encode()
|
|
379
388
|
self._retry_wait_time_seconds = retry_wait_time_seconds
|
|
389
|
+
self._number_of_retries = number_of_retries
|
|
380
390
|
self._error_keyword = error_keyword.lower()
|
|
381
391
|
self._alarm_keyword = alarm_keyword.lower()
|
|
382
392
|
self._async_error_ack = async_error_ack.lower()
|
|
@@ -397,7 +407,9 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
397
407
|
Raises: SerialException
|
|
398
408
|
"""
|
|
399
409
|
return await self.send_data(
|
|
400
|
-
data=command.build(),
|
|
410
|
+
data=command.build(),
|
|
411
|
+
retries=retries or self._number_of_retries,
|
|
412
|
+
timeout=timeout,
|
|
401
413
|
)
|
|
402
414
|
|
|
403
415
|
async def send_data(
|
|
@@ -418,7 +430,9 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
418
430
|
async with super().send_data_lock, self._serial.timeout_override(
|
|
419
431
|
"timeout", timeout
|
|
420
432
|
):
|
|
421
|
-
return await self._send_data(
|
|
433
|
+
return await self._send_data(
|
|
434
|
+
data=data, retries=retries or self._number_of_retries
|
|
435
|
+
)
|
|
422
436
|
|
|
423
437
|
async def _send_data(self, data: str, retries: int = 0) -> str:
|
|
424
438
|
"""
|
|
@@ -433,6 +447,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
433
447
|
Raises: SerialException
|
|
434
448
|
"""
|
|
435
449
|
data_encode = data.encode()
|
|
450
|
+
retries = retries or self._number_of_retries
|
|
436
451
|
|
|
437
452
|
for retry in range(retries + 1):
|
|
438
453
|
log.debug(f"{self._name}: Write -> {data_encode!r}")
|
|
@@ -454,7 +469,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
454
469
|
str_response = self.process_raw_response(
|
|
455
470
|
command=data, response=ackless_response.decode()
|
|
456
471
|
)
|
|
457
|
-
self.raise_on_error(response=str_response)
|
|
472
|
+
self.raise_on_error(response=str_response, request=data)
|
|
458
473
|
|
|
459
474
|
if self._ack in response[-1]:
|
|
460
475
|
# Remove ack from response
|
|
@@ -462,7 +477,7 @@ class AsyncResponseSerialConnection(SerialConnection):
|
|
|
462
477
|
str_response = self.process_raw_response(
|
|
463
478
|
command=data, response=ackless_response.decode()
|
|
464
479
|
)
|
|
465
|
-
self.raise_on_error(response=str_response)
|
|
480
|
+
self.raise_on_error(response=str_response, request=data)
|
|
466
481
|
return str_response
|
|
467
482
|
|
|
468
483
|
log.info(f"{self._name}: retry number {retry}/{retries}")
|
|
@@ -6,7 +6,7 @@ from typing import List, Optional, Iterator
|
|
|
6
6
|
class CommandBuilder:
|
|
7
7
|
"""Class used to build GCODE commands."""
|
|
8
8
|
|
|
9
|
-
def __init__(self, terminator: str) -> None:
|
|
9
|
+
def __init__(self, terminator: str = "\n") -> None:
|
|
10
10
|
"""
|
|
11
11
|
Construct a command builder.
|
|
12
12
|
|
|
@@ -17,7 +17,7 @@ class CommandBuilder:
|
|
|
17
17
|
self._elements: List[str] = []
|
|
18
18
|
|
|
19
19
|
def add_float(
|
|
20
|
-
self, prefix: str, value: float, precision: Optional[int]
|
|
20
|
+
self, prefix: str, value: float, precision: Optional[int] = None
|
|
21
21
|
) -> CommandBuilder:
|
|
22
22
|
"""
|
|
23
23
|
Add a float value.
|