opentrons 8.2.0a3__py2.py3-none-any.whl → 8.3.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- opentrons/calibration_storage/deck_configuration.py +3 -3
- opentrons/calibration_storage/file_operators.py +3 -3
- opentrons/calibration_storage/helpers.py +3 -1
- opentrons/calibration_storage/ot2/models/v1.py +16 -29
- opentrons/calibration_storage/ot2/tip_length.py +7 -4
- opentrons/calibration_storage/ot3/models/v1.py +14 -23
- opentrons/cli/analyze.py +18 -6
- opentrons/config/defaults_ot3.py +1 -0
- opentrons/drivers/asyncio/communication/__init__.py +2 -0
- opentrons/drivers/asyncio/communication/errors.py +16 -3
- opentrons/drivers/asyncio/communication/serial_connection.py +24 -9
- opentrons/drivers/command_builder.py +2 -2
- opentrons/drivers/flex_stacker/__init__.py +9 -0
- opentrons/drivers/flex_stacker/abstract.py +89 -0
- opentrons/drivers/flex_stacker/driver.py +260 -0
- opentrons/drivers/flex_stacker/simulator.py +109 -0
- opentrons/drivers/flex_stacker/types.py +138 -0
- opentrons/drivers/heater_shaker/driver.py +18 -3
- opentrons/drivers/temp_deck/driver.py +13 -3
- opentrons/drivers/thermocycler/driver.py +17 -3
- opentrons/execute.py +3 -1
- opentrons/hardware_control/__init__.py +1 -2
- opentrons/hardware_control/api.py +33 -21
- opentrons/hardware_control/backends/flex_protocol.py +17 -7
- opentrons/hardware_control/backends/ot3controller.py +213 -63
- opentrons/hardware_control/backends/ot3simulator.py +18 -9
- opentrons/hardware_control/backends/ot3utils.py +43 -15
- opentrons/hardware_control/dev_types.py +4 -0
- opentrons/hardware_control/emulation/heater_shaker.py +4 -0
- opentrons/hardware_control/emulation/module_server/client.py +1 -1
- opentrons/hardware_control/emulation/module_server/server.py +5 -3
- opentrons/hardware_control/emulation/settings.py +3 -4
- opentrons/hardware_control/instruments/ot2/instrument_calibration.py +2 -1
- opentrons/hardware_control/instruments/ot2/pipette.py +15 -22
- opentrons/hardware_control/instruments/ot2/pipette_handler.py +8 -1
- opentrons/hardware_control/instruments/ot3/gripper.py +2 -2
- opentrons/hardware_control/instruments/ot3/pipette.py +23 -22
- opentrons/hardware_control/instruments/ot3/pipette_handler.py +10 -1
- opentrons/hardware_control/modules/mod_abc.py +2 -2
- opentrons/hardware_control/motion_utilities.py +68 -0
- opentrons/hardware_control/nozzle_manager.py +39 -41
- opentrons/hardware_control/ot3_calibration.py +1 -1
- opentrons/hardware_control/ot3api.py +78 -31
- opentrons/hardware_control/protocols/gripper_controller.py +3 -0
- opentrons/hardware_control/protocols/hardware_manager.py +5 -1
- opentrons/hardware_control/protocols/liquid_handler.py +22 -1
- opentrons/hardware_control/protocols/motion_controller.py +7 -0
- opentrons/hardware_control/robot_calibration.py +1 -1
- opentrons/hardware_control/types.py +61 -0
- opentrons/legacy_commands/commands.py +37 -0
- opentrons/legacy_commands/types.py +39 -0
- opentrons/protocol_api/__init__.py +20 -1
- opentrons/protocol_api/_liquid.py +24 -49
- opentrons/protocol_api/_liquid_properties.py +754 -0
- opentrons/protocol_api/_types.py +24 -0
- opentrons/protocol_api/core/common.py +2 -0
- opentrons/protocol_api/core/engine/instrument.py +191 -10
- opentrons/protocol_api/core/engine/labware.py +29 -7
- opentrons/protocol_api/core/engine/protocol.py +130 -5
- opentrons/protocol_api/core/engine/robot.py +139 -0
- opentrons/protocol_api/core/engine/well.py +4 -1
- opentrons/protocol_api/core/instrument.py +73 -4
- opentrons/protocol_api/core/labware.py +13 -4
- opentrons/protocol_api/core/legacy/legacy_instrument_core.py +87 -3
- opentrons/protocol_api/core/legacy/legacy_labware_core.py +13 -4
- opentrons/protocol_api/core/legacy/legacy_protocol_core.py +32 -1
- opentrons/protocol_api/core/legacy/legacy_robot_core.py +0 -0
- opentrons/protocol_api/core/legacy_simulator/legacy_instrument_core.py +61 -3
- opentrons/protocol_api/core/protocol.py +34 -1
- opentrons/protocol_api/core/robot.py +51 -0
- opentrons/protocol_api/instrument_context.py +299 -44
- opentrons/protocol_api/labware.py +248 -9
- opentrons/protocol_api/module_contexts.py +21 -17
- opentrons/protocol_api/protocol_context.py +125 -4
- opentrons/protocol_api/robot_context.py +204 -32
- opentrons/protocol_api/validation.py +262 -3
- opentrons/protocol_engine/__init__.py +4 -0
- opentrons/protocol_engine/actions/actions.py +2 -3
- opentrons/protocol_engine/clients/sync_client.py +18 -0
- opentrons/protocol_engine/commands/__init__.py +121 -0
- opentrons/protocol_engine/commands/absorbance_reader/close_lid.py +1 -3
- opentrons/protocol_engine/commands/absorbance_reader/initialize.py +20 -6
- opentrons/protocol_engine/commands/absorbance_reader/open_lid.py +1 -2
- opentrons/protocol_engine/commands/absorbance_reader/read.py +40 -10
- opentrons/protocol_engine/commands/air_gap_in_place.py +160 -0
- opentrons/protocol_engine/commands/aspirate.py +103 -53
- opentrons/protocol_engine/commands/aspirate_in_place.py +55 -51
- opentrons/protocol_engine/commands/blow_out.py +44 -39
- opentrons/protocol_engine/commands/blow_out_in_place.py +21 -32
- opentrons/protocol_engine/commands/calibration/calibrate_gripper.py +13 -6
- opentrons/protocol_engine/commands/calibration/calibrate_module.py +1 -1
- opentrons/protocol_engine/commands/calibration/calibrate_pipette.py +3 -3
- opentrons/protocol_engine/commands/calibration/move_to_maintenance_position.py +1 -1
- opentrons/protocol_engine/commands/command.py +73 -66
- opentrons/protocol_engine/commands/command_unions.py +140 -1
- opentrons/protocol_engine/commands/comment.py +1 -1
- opentrons/protocol_engine/commands/configure_for_volume.py +10 -3
- opentrons/protocol_engine/commands/configure_nozzle_layout.py +6 -4
- opentrons/protocol_engine/commands/custom.py +6 -12
- opentrons/protocol_engine/commands/dispense.py +82 -48
- opentrons/protocol_engine/commands/dispense_in_place.py +71 -51
- opentrons/protocol_engine/commands/drop_tip.py +52 -31
- opentrons/protocol_engine/commands/drop_tip_in_place.py +79 -8
- opentrons/protocol_engine/commands/evotip_dispense.py +156 -0
- opentrons/protocol_engine/commands/evotip_seal_pipette.py +331 -0
- opentrons/protocol_engine/commands/evotip_unseal_pipette.py +160 -0
- opentrons/protocol_engine/commands/generate_command_schema.py +4 -11
- opentrons/protocol_engine/commands/get_next_tip.py +134 -0
- opentrons/protocol_engine/commands/get_tip_presence.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/close_labware_latch.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/deactivate_heater.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/deactivate_shaker.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/open_labware_latch.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/set_and_wait_for_shake_speed.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/set_target_temperature.py +1 -1
- opentrons/protocol_engine/commands/heater_shaker/wait_for_temperature.py +10 -4
- opentrons/protocol_engine/commands/home.py +13 -4
- opentrons/protocol_engine/commands/liquid_probe.py +125 -31
- opentrons/protocol_engine/commands/load_labware.py +33 -6
- opentrons/protocol_engine/commands/load_lid.py +146 -0
- opentrons/protocol_engine/commands/load_lid_stack.py +189 -0
- opentrons/protocol_engine/commands/load_liquid.py +12 -4
- opentrons/protocol_engine/commands/load_liquid_class.py +144 -0
- opentrons/protocol_engine/commands/load_module.py +31 -10
- opentrons/protocol_engine/commands/load_pipette.py +19 -8
- opentrons/protocol_engine/commands/magnetic_module/disengage.py +1 -1
- opentrons/protocol_engine/commands/magnetic_module/engage.py +1 -1
- opentrons/protocol_engine/commands/move_labware.py +28 -6
- opentrons/protocol_engine/commands/move_relative.py +35 -25
- opentrons/protocol_engine/commands/move_to_addressable_area.py +40 -27
- opentrons/protocol_engine/commands/move_to_addressable_area_for_drop_tip.py +53 -32
- opentrons/protocol_engine/commands/move_to_coordinates.py +36 -22
- opentrons/protocol_engine/commands/move_to_well.py +40 -24
- opentrons/protocol_engine/commands/movement_common.py +338 -0
- opentrons/protocol_engine/commands/pick_up_tip.py +49 -27
- opentrons/protocol_engine/commands/pipetting_common.py +169 -87
- opentrons/protocol_engine/commands/prepare_to_aspirate.py +24 -33
- opentrons/protocol_engine/commands/reload_labware.py +1 -1
- opentrons/protocol_engine/commands/retract_axis.py +1 -1
- opentrons/protocol_engine/commands/robot/__init__.py +69 -0
- opentrons/protocol_engine/commands/robot/close_gripper_jaw.py +86 -0
- opentrons/protocol_engine/commands/robot/common.py +18 -0
- opentrons/protocol_engine/commands/robot/move_axes_relative.py +101 -0
- opentrons/protocol_engine/commands/robot/move_axes_to.py +100 -0
- opentrons/protocol_engine/commands/robot/move_to.py +94 -0
- opentrons/protocol_engine/commands/robot/open_gripper_jaw.py +77 -0
- opentrons/protocol_engine/commands/save_position.py +14 -5
- opentrons/protocol_engine/commands/set_rail_lights.py +1 -1
- opentrons/protocol_engine/commands/set_status_bar.py +1 -1
- opentrons/protocol_engine/commands/temperature_module/deactivate.py +1 -1
- opentrons/protocol_engine/commands/temperature_module/set_target_temperature.py +1 -1
- opentrons/protocol_engine/commands/temperature_module/wait_for_temperature.py +10 -4
- opentrons/protocol_engine/commands/thermocycler/close_lid.py +1 -1
- opentrons/protocol_engine/commands/thermocycler/deactivate_block.py +1 -1
- opentrons/protocol_engine/commands/thermocycler/deactivate_lid.py +1 -1
- opentrons/protocol_engine/commands/thermocycler/open_lid.py +1 -1
- opentrons/protocol_engine/commands/thermocycler/run_extended_profile.py +9 -3
- opentrons/protocol_engine/commands/thermocycler/run_profile.py +9 -3
- opentrons/protocol_engine/commands/thermocycler/set_target_block_temperature.py +11 -4
- opentrons/protocol_engine/commands/thermocycler/set_target_lid_temperature.py +1 -1
- opentrons/protocol_engine/commands/thermocycler/wait_for_block_temperature.py +1 -1
- opentrons/protocol_engine/commands/thermocycler/wait_for_lid_temperature.py +1 -1
- opentrons/protocol_engine/commands/touch_tip.py +65 -16
- opentrons/protocol_engine/commands/unsafe/unsafe_blow_out_in_place.py +5 -2
- opentrons/protocol_engine/commands/unsafe/unsafe_drop_tip_in_place.py +13 -4
- opentrons/protocol_engine/commands/unsafe/unsafe_engage_axes.py +2 -5
- opentrons/protocol_engine/commands/unsafe/unsafe_place_labware.py +1 -1
- opentrons/protocol_engine/commands/unsafe/unsafe_ungrip_labware.py +4 -2
- opentrons/protocol_engine/commands/unsafe/update_position_estimators.py +2 -5
- opentrons/protocol_engine/commands/verify_tip_presence.py +11 -4
- opentrons/protocol_engine/commands/wait_for_duration.py +10 -3
- opentrons/protocol_engine/commands/wait_for_resume.py +10 -3
- opentrons/protocol_engine/errors/__init__.py +12 -0
- opentrons/protocol_engine/errors/error_occurrence.py +19 -20
- opentrons/protocol_engine/errors/exceptions.py +76 -0
- opentrons/protocol_engine/execution/command_executor.py +1 -1
- opentrons/protocol_engine/execution/equipment.py +73 -5
- opentrons/protocol_engine/execution/gantry_mover.py +369 -8
- opentrons/protocol_engine/execution/hardware_stopper.py +7 -7
- opentrons/protocol_engine/execution/movement.py +27 -0
- opentrons/protocol_engine/execution/pipetting.py +5 -1
- opentrons/protocol_engine/execution/tip_handler.py +34 -15
- opentrons/protocol_engine/notes/notes.py +1 -1
- opentrons/protocol_engine/protocol_engine.py +7 -6
- opentrons/protocol_engine/resources/labware_data_provider.py +1 -1
- opentrons/protocol_engine/resources/labware_validation.py +18 -0
- opentrons/protocol_engine/resources/module_data_provider.py +1 -1
- opentrons/protocol_engine/resources/pipette_data_provider.py +26 -0
- opentrons/protocol_engine/slot_standardization.py +9 -9
- opentrons/protocol_engine/state/_move_types.py +9 -5
- opentrons/protocol_engine/state/_well_math.py +193 -0
- opentrons/protocol_engine/state/addressable_areas.py +25 -61
- opentrons/protocol_engine/state/command_history.py +12 -0
- opentrons/protocol_engine/state/commands.py +22 -14
- opentrons/protocol_engine/state/files.py +10 -12
- opentrons/protocol_engine/state/fluid_stack.py +138 -0
- opentrons/protocol_engine/state/frustum_helpers.py +63 -69
- opentrons/protocol_engine/state/geometry.py +47 -1
- opentrons/protocol_engine/state/labware.py +92 -26
- opentrons/protocol_engine/state/liquid_classes.py +82 -0
- opentrons/protocol_engine/state/liquids.py +16 -4
- opentrons/protocol_engine/state/modules.py +56 -71
- opentrons/protocol_engine/state/motion.py +6 -1
- opentrons/protocol_engine/state/pipettes.py +149 -58
- opentrons/protocol_engine/state/state.py +21 -2
- opentrons/protocol_engine/state/state_summary.py +4 -2
- opentrons/protocol_engine/state/tips.py +11 -44
- opentrons/protocol_engine/state/update_types.py +343 -48
- opentrons/protocol_engine/state/wells.py +19 -11
- opentrons/protocol_engine/types.py +176 -28
- opentrons/protocol_reader/extract_labware_definitions.py +5 -2
- opentrons/protocol_reader/file_format_validator.py +5 -5
- opentrons/protocol_runner/json_file_reader.py +9 -3
- opentrons/protocol_runner/json_translator.py +51 -25
- opentrons/protocol_runner/legacy_command_mapper.py +66 -64
- opentrons/protocol_runner/protocol_runner.py +35 -4
- opentrons/protocol_runner/python_protocol_wrappers.py +1 -1
- opentrons/protocol_runner/run_orchestrator.py +13 -3
- opentrons/protocols/advanced_control/common.py +38 -0
- opentrons/protocols/advanced_control/mix.py +1 -1
- opentrons/protocols/advanced_control/transfers/__init__.py +0 -0
- opentrons/protocols/advanced_control/transfers/common.py +56 -0
- opentrons/protocols/advanced_control/{transfers.py → transfers/transfer.py} +10 -85
- opentrons/protocols/api_support/definitions.py +1 -1
- opentrons/protocols/api_support/instrument.py +1 -1
- opentrons/protocols/api_support/util.py +10 -0
- opentrons/protocols/labware.py +70 -8
- opentrons/protocols/models/json_protocol.py +5 -9
- opentrons/simulate.py +3 -1
- opentrons/types.py +162 -2
- opentrons/util/entrypoint_util.py +2 -5
- opentrons/util/logging_config.py +1 -1
- {opentrons-8.2.0a3.dist-info → opentrons-8.3.0.dist-info}/METADATA +16 -15
- {opentrons-8.2.0a3.dist-info → opentrons-8.3.0.dist-info}/RECORD +238 -208
- {opentrons-8.2.0a3.dist-info → opentrons-8.3.0.dist-info}/WHEEL +1 -1
- {opentrons-8.2.0a3.dist-info → opentrons-8.3.0.dist-info}/LICENSE +0 -0
- {opentrons-8.2.0a3.dist-info → opentrons-8.3.0.dist-info}/entry_points.txt +0 -0
- {opentrons-8.2.0a3.dist-info → opentrons-8.3.0.dist-info}/top_level.txt +0 -0
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"""Models and implementation for the calibrateGripper command."""
|
|
2
2
|
|
|
3
3
|
from enum import Enum
|
|
4
|
-
from typing import Optional, Type
|
|
4
|
+
from typing import Optional, Type, Any
|
|
5
5
|
from typing_extensions import Literal
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, Field
|
|
8
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
8
9
|
|
|
9
10
|
from opentrons.types import Point
|
|
10
11
|
from opentrons.hardware_control import HardwareControlAPI
|
|
@@ -22,6 +23,10 @@ from opentrons.protocol_engine.resources import ensure_ot3_hardware
|
|
|
22
23
|
CalibrateGripperCommandType = Literal["calibration/calibrateGripper"]
|
|
23
24
|
|
|
24
25
|
|
|
26
|
+
def _remove_default(s: dict[str, Any]) -> None:
|
|
27
|
+
s.pop("default", None)
|
|
28
|
+
|
|
29
|
+
|
|
25
30
|
class CalibrateGripperParamsJaw(Enum): # noqa: D101
|
|
26
31
|
FRONT = "front"
|
|
27
32
|
REAR = "rear"
|
|
@@ -39,7 +44,7 @@ class CalibrateGripperParams(BaseModel):
|
|
|
39
44
|
),
|
|
40
45
|
)
|
|
41
46
|
|
|
42
|
-
otherJawOffset:
|
|
47
|
+
otherJawOffset: Vec3f | SkipJsonSchema[None] = Field(
|
|
43
48
|
None,
|
|
44
49
|
description=(
|
|
45
50
|
"If an offset for the other probe is already found, then specifying it here"
|
|
@@ -48,6 +53,7 @@ class CalibrateGripperParams(BaseModel):
|
|
|
48
53
|
" If this param is not specified then the command will only find and return"
|
|
49
54
|
" the offset for the specified probe."
|
|
50
55
|
),
|
|
56
|
+
json_schema_extra=_remove_default,
|
|
51
57
|
)
|
|
52
58
|
|
|
53
59
|
|
|
@@ -62,11 +68,12 @@ class CalibrateGripperResult(BaseModel):
|
|
|
62
68
|
),
|
|
63
69
|
)
|
|
64
70
|
|
|
65
|
-
savedCalibration:
|
|
71
|
+
savedCalibration: GripperCalibrationOffset | SkipJsonSchema[None] = Field(
|
|
66
72
|
None,
|
|
67
73
|
description=(
|
|
68
74
|
"Gripper calibration result data, when `otherJawOffset` is provided."
|
|
69
75
|
),
|
|
76
|
+
json_schema_extra=_remove_default,
|
|
70
77
|
)
|
|
71
78
|
|
|
72
79
|
|
|
@@ -118,8 +125,8 @@ class CalibrateGripperImplementation(
|
|
|
118
125
|
calibration_data = result
|
|
119
126
|
|
|
120
127
|
return SuccessData(
|
|
121
|
-
public=CalibrateGripperResult.
|
|
122
|
-
jawOffset=Vec3f.
|
|
128
|
+
public=CalibrateGripperResult.model_construct(
|
|
129
|
+
jawOffset=Vec3f.model_construct(
|
|
123
130
|
x=probe_offset.x, y=probe_offset.y, z=probe_offset.z
|
|
124
131
|
),
|
|
125
132
|
savedCalibration=calibration_data,
|
|
@@ -143,7 +150,7 @@ class CalibrateGripper(
|
|
|
143
150
|
|
|
144
151
|
commandType: CalibrateGripperCommandType = "calibration/calibrateGripper"
|
|
145
152
|
params: CalibrateGripperParams
|
|
146
|
-
result: Optional[CalibrateGripperResult]
|
|
153
|
+
result: Optional[CalibrateGripperResult] = None
|
|
147
154
|
|
|
148
155
|
_ImplementationCls: Type[
|
|
149
156
|
CalibrateGripperImplementation
|
|
@@ -101,7 +101,7 @@ class CalibrateModule(
|
|
|
101
101
|
|
|
102
102
|
commandType: CalibrateModuleCommandType = "calibration/calibrateModule"
|
|
103
103
|
params: CalibrateModuleParams
|
|
104
|
-
result: Optional[CalibrateModuleResult]
|
|
104
|
+
result: Optional[CalibrateModuleResult] = None
|
|
105
105
|
|
|
106
106
|
_ImplementationCls: Type[
|
|
107
107
|
CalibrateModuleImplementation
|
|
@@ -65,8 +65,8 @@ class CalibratePipetteImplementation(
|
|
|
65
65
|
await ot3_api.save_instrument_offset(mount=ot3_mount, delta=pipette_offset)
|
|
66
66
|
|
|
67
67
|
return SuccessData(
|
|
68
|
-
public=CalibratePipetteResult.
|
|
69
|
-
pipetteOffset=InstrumentOffsetVector.
|
|
68
|
+
public=CalibratePipetteResult.model_construct(
|
|
69
|
+
pipetteOffset=InstrumentOffsetVector.model_construct(
|
|
70
70
|
x=pipette_offset.x, y=pipette_offset.y, z=pipette_offset.z
|
|
71
71
|
)
|
|
72
72
|
),
|
|
@@ -80,7 +80,7 @@ class CalibratePipette(
|
|
|
80
80
|
|
|
81
81
|
commandType: CalibratePipetteCommandType = "calibration/calibratePipette"
|
|
82
82
|
params: CalibratePipetteParams
|
|
83
|
-
result: Optional[CalibratePipetteResult]
|
|
83
|
+
result: Optional[CalibratePipetteResult] = None
|
|
84
84
|
|
|
85
85
|
_ImplementationCls: Type[
|
|
86
86
|
CalibratePipetteImplementation
|
|
@@ -136,7 +136,7 @@ class MoveToMaintenancePosition(
|
|
|
136
136
|
"calibration/moveToMaintenancePosition"
|
|
137
137
|
)
|
|
138
138
|
params: MoveToMaintenancePositionParams
|
|
139
|
-
result: Optional[MoveToMaintenancePositionResult]
|
|
139
|
+
result: Optional[MoveToMaintenancePositionResult] = None
|
|
140
140
|
|
|
141
141
|
_ImplementationCls: Type[
|
|
142
142
|
MoveToMaintenancePositionImplementation
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"""Base command data model and type definitions."""
|
|
2
2
|
|
|
3
|
-
|
|
4
3
|
from __future__ import annotations
|
|
5
4
|
|
|
6
5
|
import dataclasses
|
|
7
6
|
from abc import ABC, abstractmethod
|
|
8
7
|
from datetime import datetime
|
|
9
|
-
|
|
8
|
+
import enum
|
|
10
9
|
from typing import (
|
|
11
10
|
TYPE_CHECKING,
|
|
12
11
|
Generic,
|
|
@@ -15,10 +14,12 @@ from typing import (
|
|
|
15
14
|
List,
|
|
16
15
|
Type,
|
|
17
16
|
Union,
|
|
17
|
+
Any,
|
|
18
|
+
Dict,
|
|
18
19
|
)
|
|
19
20
|
|
|
20
21
|
from pydantic import BaseModel, Field
|
|
21
|
-
from pydantic.
|
|
22
|
+
from pydantic.json_schema import SkipJsonSchema
|
|
22
23
|
|
|
23
24
|
from opentrons.hardware_control import HardwareControlAPI
|
|
24
25
|
from opentrons.protocol_engine.state.update_types import StateUpdate
|
|
@@ -41,7 +42,7 @@ _ErrorT = TypeVar("_ErrorT", bound=ErrorOccurrence)
|
|
|
41
42
|
_ErrorT_co = TypeVar("_ErrorT_co", bound=ErrorOccurrence, covariant=True)
|
|
42
43
|
|
|
43
44
|
|
|
44
|
-
class CommandStatus(str, Enum):
|
|
45
|
+
class CommandStatus(str, enum.Enum):
|
|
45
46
|
"""Command execution status."""
|
|
46
47
|
|
|
47
48
|
QUEUED = "queued"
|
|
@@ -50,7 +51,7 @@ class CommandStatus(str, Enum):
|
|
|
50
51
|
FAILED = "failed"
|
|
51
52
|
|
|
52
53
|
|
|
53
|
-
class CommandIntent(str, Enum):
|
|
54
|
+
class CommandIntent(str, enum.Enum):
|
|
54
55
|
"""Run intent for a given command.
|
|
55
56
|
|
|
56
57
|
Props:
|
|
@@ -63,8 +64,12 @@ class CommandIntent(str, Enum):
|
|
|
63
64
|
FIXIT = "fixit"
|
|
64
65
|
|
|
65
66
|
|
|
67
|
+
def _pop_default(s: Dict[str, Any]) -> None:
|
|
68
|
+
s.pop("default", None)
|
|
69
|
+
|
|
70
|
+
|
|
66
71
|
class BaseCommandCreate(
|
|
67
|
-
|
|
72
|
+
BaseModel,
|
|
68
73
|
# These type parameters need to be invariant because our fields are mutable.
|
|
69
74
|
Generic[_ParamsT],
|
|
70
75
|
):
|
|
@@ -82,7 +87,7 @@ class BaseCommandCreate(
|
|
|
82
87
|
),
|
|
83
88
|
)
|
|
84
89
|
params: _ParamsT = Field(..., description="Command execution data payload")
|
|
85
|
-
intent:
|
|
90
|
+
intent: CommandIntent | SkipJsonSchema[None] = Field(
|
|
86
91
|
None,
|
|
87
92
|
description=(
|
|
88
93
|
"The reason the command was added. If not specified or `protocol`,"
|
|
@@ -95,14 +100,16 @@ class BaseCommandCreate(
|
|
|
95
100
|
"Use setup commands for activities like pre-run calibration checks"
|
|
96
101
|
" and module setup, like pre-heating."
|
|
97
102
|
),
|
|
103
|
+
json_schema_extra=_pop_default,
|
|
98
104
|
)
|
|
99
|
-
key:
|
|
105
|
+
key: str | SkipJsonSchema[None] = Field(
|
|
100
106
|
None,
|
|
101
107
|
description=(
|
|
102
108
|
"A key value, unique in this run, that can be used to track"
|
|
103
109
|
" the same logical command across multiple runs of the same protocol."
|
|
104
110
|
" If a value is not provided, one will be generated."
|
|
105
111
|
),
|
|
112
|
+
json_schema_extra=_pop_default,
|
|
106
113
|
)
|
|
107
114
|
|
|
108
115
|
|
|
@@ -144,8 +151,65 @@ class DefinedErrorData(Generic[_ErrorT_co]):
|
|
|
144
151
|
)
|
|
145
152
|
|
|
146
153
|
|
|
154
|
+
_ExecuteReturnT_co = TypeVar(
|
|
155
|
+
"_ExecuteReturnT_co",
|
|
156
|
+
bound=Union[
|
|
157
|
+
SuccessData[BaseModel],
|
|
158
|
+
DefinedErrorData[ErrorOccurrence],
|
|
159
|
+
],
|
|
160
|
+
covariant=True,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
class AbstractCommandImpl(
|
|
165
|
+
ABC,
|
|
166
|
+
Generic[_ParamsT_contra, _ExecuteReturnT_co],
|
|
167
|
+
):
|
|
168
|
+
"""Abstract command creation and execution implementation.
|
|
169
|
+
|
|
170
|
+
A given command request should map to a specific command implementation,
|
|
171
|
+
which defines how to execute the command and map data from execution into the
|
|
172
|
+
result model.
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
def __init__(
|
|
176
|
+
self,
|
|
177
|
+
state_view: StateView,
|
|
178
|
+
hardware_api: HardwareControlAPI,
|
|
179
|
+
equipment: execution.EquipmentHandler,
|
|
180
|
+
file_provider: execution.FileProvider,
|
|
181
|
+
movement: execution.MovementHandler,
|
|
182
|
+
gantry_mover: execution.GantryMover,
|
|
183
|
+
labware_movement: execution.LabwareMovementHandler,
|
|
184
|
+
pipetting: execution.PipettingHandler,
|
|
185
|
+
tip_handler: execution.TipHandler,
|
|
186
|
+
run_control: execution.RunControlHandler,
|
|
187
|
+
rail_lights: execution.RailLightsHandler,
|
|
188
|
+
model_utils: ModelUtils,
|
|
189
|
+
status_bar: execution.StatusBarHandler,
|
|
190
|
+
command_note_adder: CommandNoteAdder,
|
|
191
|
+
) -> None:
|
|
192
|
+
"""Initialize the command implementation with execution handlers."""
|
|
193
|
+
pass
|
|
194
|
+
|
|
195
|
+
@abstractmethod
|
|
196
|
+
async def execute(self, params: _ParamsT_contra) -> _ExecuteReturnT_co:
|
|
197
|
+
"""Execute the command, mapping data from execution into a response model.
|
|
198
|
+
|
|
199
|
+
This should either:
|
|
200
|
+
|
|
201
|
+
- Return a `SuccessData`, if the command completed normally.
|
|
202
|
+
- Return a `DefinedErrorData`, if the command failed with a "defined error."
|
|
203
|
+
Defined errors are errors that are documented as part of the robot's public
|
|
204
|
+
API.
|
|
205
|
+
- Raise an exception, if the command failed with any other error
|
|
206
|
+
(in other words, an undefined error).
|
|
207
|
+
"""
|
|
208
|
+
...
|
|
209
|
+
|
|
210
|
+
|
|
147
211
|
class BaseCommand(
|
|
148
|
-
|
|
212
|
+
BaseModel,
|
|
149
213
|
# These type parameters need to be invariant because our fields are mutable.
|
|
150
214
|
Generic[_ParamsT, _ResultT, _ErrorT],
|
|
151
215
|
):
|
|
@@ -242,60 +306,3 @@ class BaseCommand(
|
|
|
242
306
|
],
|
|
243
307
|
]
|
|
244
308
|
]
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
_ExecuteReturnT_co = TypeVar(
|
|
248
|
-
"_ExecuteReturnT_co",
|
|
249
|
-
bound=Union[
|
|
250
|
-
SuccessData[BaseModel],
|
|
251
|
-
DefinedErrorData[ErrorOccurrence],
|
|
252
|
-
],
|
|
253
|
-
covariant=True,
|
|
254
|
-
)
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
class AbstractCommandImpl(
|
|
258
|
-
ABC,
|
|
259
|
-
Generic[_ParamsT_contra, _ExecuteReturnT_co],
|
|
260
|
-
):
|
|
261
|
-
"""Abstract command creation and execution implementation.
|
|
262
|
-
|
|
263
|
-
A given command request should map to a specific command implementation,
|
|
264
|
-
which defines how to execute the command and map data from execution into the
|
|
265
|
-
result model.
|
|
266
|
-
"""
|
|
267
|
-
|
|
268
|
-
def __init__(
|
|
269
|
-
self,
|
|
270
|
-
state_view: StateView,
|
|
271
|
-
hardware_api: HardwareControlAPI,
|
|
272
|
-
equipment: execution.EquipmentHandler,
|
|
273
|
-
file_provider: execution.FileProvider,
|
|
274
|
-
movement: execution.MovementHandler,
|
|
275
|
-
gantry_mover: execution.GantryMover,
|
|
276
|
-
labware_movement: execution.LabwareMovementHandler,
|
|
277
|
-
pipetting: execution.PipettingHandler,
|
|
278
|
-
tip_handler: execution.TipHandler,
|
|
279
|
-
run_control: execution.RunControlHandler,
|
|
280
|
-
rail_lights: execution.RailLightsHandler,
|
|
281
|
-
model_utils: ModelUtils,
|
|
282
|
-
status_bar: execution.StatusBarHandler,
|
|
283
|
-
command_note_adder: CommandNoteAdder,
|
|
284
|
-
) -> None:
|
|
285
|
-
"""Initialize the command implementation with execution handlers."""
|
|
286
|
-
pass
|
|
287
|
-
|
|
288
|
-
@abstractmethod
|
|
289
|
-
async def execute(self, params: _ParamsT_contra) -> _ExecuteReturnT_co:
|
|
290
|
-
"""Execute the command, mapping data from execution into a response model.
|
|
291
|
-
|
|
292
|
-
This should either:
|
|
293
|
-
|
|
294
|
-
- Return a `SuccessData`, if the command completed normally.
|
|
295
|
-
- Return a `DefinedErrorData`, if the command failed with a "defined error."
|
|
296
|
-
Defined errors are errors that are documented as part of the robot's public
|
|
297
|
-
API.
|
|
298
|
-
- Raise an exception, if the command failed with any other error
|
|
299
|
-
(in other words, an undefined error).
|
|
300
|
-
"""
|
|
301
|
-
...
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
from collections.abc import Collection
|
|
4
4
|
from typing import Annotated, Type, Union, get_type_hints
|
|
5
5
|
|
|
6
|
-
from pydantic import Field
|
|
6
|
+
from pydantic import Field, TypeAdapter
|
|
7
7
|
|
|
8
8
|
from opentrons.util.get_union_elements import get_union_elements
|
|
9
9
|
|
|
@@ -13,6 +13,7 @@ from .pipetting_common import (
|
|
|
13
13
|
LiquidNotFoundError,
|
|
14
14
|
TipPhysicallyAttachedError,
|
|
15
15
|
)
|
|
16
|
+
from .movement_common import StallOrCollisionError
|
|
16
17
|
|
|
17
18
|
from . import absorbance_reader
|
|
18
19
|
from . import heater_shaker
|
|
@@ -22,6 +23,7 @@ from . import thermocycler
|
|
|
22
23
|
|
|
23
24
|
from . import calibration
|
|
24
25
|
from . import unsafe
|
|
26
|
+
from . import robot
|
|
25
27
|
|
|
26
28
|
from .set_rail_lights import (
|
|
27
29
|
SetRailLights,
|
|
@@ -31,6 +33,14 @@ from .set_rail_lights import (
|
|
|
31
33
|
SetRailLightsResult,
|
|
32
34
|
)
|
|
33
35
|
|
|
36
|
+
from .air_gap_in_place import (
|
|
37
|
+
AirGapInPlace,
|
|
38
|
+
AirGapInPlaceParams,
|
|
39
|
+
AirGapInPlaceCreate,
|
|
40
|
+
AirGapInPlaceResult,
|
|
41
|
+
AirGapInPlaceCommandType,
|
|
42
|
+
)
|
|
43
|
+
|
|
34
44
|
from .aspirate import (
|
|
35
45
|
Aspirate,
|
|
36
46
|
AspirateParams,
|
|
@@ -127,6 +137,14 @@ from .load_liquid import (
|
|
|
127
137
|
LoadLiquidCommandType,
|
|
128
138
|
)
|
|
129
139
|
|
|
140
|
+
from .load_liquid_class import (
|
|
141
|
+
LoadLiquidClass,
|
|
142
|
+
LoadLiquidClassParams,
|
|
143
|
+
LoadLiquidClassCreate,
|
|
144
|
+
LoadLiquidClassResult,
|
|
145
|
+
LoadLiquidClassCommandType,
|
|
146
|
+
)
|
|
147
|
+
|
|
130
148
|
from .load_module import (
|
|
131
149
|
LoadModule,
|
|
132
150
|
LoadModuleParams,
|
|
@@ -143,6 +161,22 @@ from .load_pipette import (
|
|
|
143
161
|
LoadPipetteCommandType,
|
|
144
162
|
)
|
|
145
163
|
|
|
164
|
+
from .load_lid_stack import (
|
|
165
|
+
LoadLidStack,
|
|
166
|
+
LoadLidStackParams,
|
|
167
|
+
LoadLidStackCreate,
|
|
168
|
+
LoadLidStackResult,
|
|
169
|
+
LoadLidStackCommandType,
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
from .load_lid import (
|
|
173
|
+
LoadLid,
|
|
174
|
+
LoadLidParams,
|
|
175
|
+
LoadLidCreate,
|
|
176
|
+
LoadLidResult,
|
|
177
|
+
LoadLidCommandType,
|
|
178
|
+
)
|
|
179
|
+
|
|
146
180
|
from .move_labware import (
|
|
147
181
|
GripperMovementError,
|
|
148
182
|
MoveLabware,
|
|
@@ -305,6 +339,14 @@ from .get_tip_presence import (
|
|
|
305
339
|
GetTipPresenceCommandType,
|
|
306
340
|
)
|
|
307
341
|
|
|
342
|
+
from .get_next_tip import (
|
|
343
|
+
GetNextTip,
|
|
344
|
+
GetNextTipCreate,
|
|
345
|
+
GetNextTipParams,
|
|
346
|
+
GetNextTipResult,
|
|
347
|
+
GetNextTipCommandType,
|
|
348
|
+
)
|
|
349
|
+
|
|
308
350
|
from .liquid_probe import (
|
|
309
351
|
LiquidProbe,
|
|
310
352
|
LiquidProbeParams,
|
|
@@ -318,8 +360,33 @@ from .liquid_probe import (
|
|
|
318
360
|
TryLiquidProbeCommandType,
|
|
319
361
|
)
|
|
320
362
|
|
|
363
|
+
from .evotip_seal_pipette import (
|
|
364
|
+
EvotipSealPipette,
|
|
365
|
+
EvotipSealPipetteParams,
|
|
366
|
+
EvotipSealPipetteCreate,
|
|
367
|
+
EvotipSealPipetteResult,
|
|
368
|
+
EvotipSealPipetteCommandType,
|
|
369
|
+
)
|
|
370
|
+
|
|
371
|
+
from .evotip_dispense import (
|
|
372
|
+
EvotipDispense,
|
|
373
|
+
EvotipDispenseParams,
|
|
374
|
+
EvotipDispenseCreate,
|
|
375
|
+
EvotipDispenseResult,
|
|
376
|
+
EvotipDispenseCommandType,
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
from .evotip_unseal_pipette import (
|
|
380
|
+
EvotipUnsealPipette,
|
|
381
|
+
EvotipUnsealPipetteParams,
|
|
382
|
+
EvotipUnsealPipetteCreate,
|
|
383
|
+
EvotipUnsealPipetteResult,
|
|
384
|
+
EvotipUnsealPipetteCommandType,
|
|
385
|
+
)
|
|
386
|
+
|
|
321
387
|
Command = Annotated[
|
|
322
388
|
Union[
|
|
389
|
+
AirGapInPlace,
|
|
323
390
|
Aspirate,
|
|
324
391
|
AspirateInPlace,
|
|
325
392
|
Comment,
|
|
@@ -337,8 +404,11 @@ Command = Annotated[
|
|
|
337
404
|
LoadLabware,
|
|
338
405
|
ReloadLabware,
|
|
339
406
|
LoadLiquid,
|
|
407
|
+
LoadLiquidClass,
|
|
340
408
|
LoadModule,
|
|
341
409
|
LoadPipette,
|
|
410
|
+
LoadLidStack,
|
|
411
|
+
LoadLid,
|
|
342
412
|
MoveLabware,
|
|
343
413
|
MoveRelative,
|
|
344
414
|
MoveToCoordinates,
|
|
@@ -355,8 +425,12 @@ Command = Annotated[
|
|
|
355
425
|
SetStatusBar,
|
|
356
426
|
VerifyTipPresence,
|
|
357
427
|
GetTipPresence,
|
|
428
|
+
GetNextTip,
|
|
358
429
|
LiquidProbe,
|
|
359
430
|
TryLiquidProbe,
|
|
431
|
+
EvotipSealPipette,
|
|
432
|
+
EvotipDispense,
|
|
433
|
+
EvotipUnsealPipette,
|
|
360
434
|
heater_shaker.WaitForTemperature,
|
|
361
435
|
heater_shaker.SetTargetTemperature,
|
|
362
436
|
heater_shaker.DeactivateHeater,
|
|
@@ -393,11 +467,17 @@ Command = Annotated[
|
|
|
393
467
|
unsafe.UnsafeEngageAxes,
|
|
394
468
|
unsafe.UnsafeUngripLabware,
|
|
395
469
|
unsafe.UnsafePlaceLabware,
|
|
470
|
+
robot.MoveTo,
|
|
471
|
+
robot.MoveAxesRelative,
|
|
472
|
+
robot.MoveAxesTo,
|
|
473
|
+
robot.openGripperJaw,
|
|
474
|
+
robot.closeGripperJaw,
|
|
396
475
|
],
|
|
397
476
|
Field(discriminator="commandType"),
|
|
398
477
|
]
|
|
399
478
|
|
|
400
479
|
CommandParams = Union[
|
|
480
|
+
AirGapInPlaceParams,
|
|
401
481
|
AspirateParams,
|
|
402
482
|
AspirateInPlaceParams,
|
|
403
483
|
CommentParams,
|
|
@@ -413,8 +493,11 @@ CommandParams = Union[
|
|
|
413
493
|
HomeParams,
|
|
414
494
|
RetractAxisParams,
|
|
415
495
|
LoadLabwareParams,
|
|
496
|
+
LoadLidStackParams,
|
|
497
|
+
LoadLidParams,
|
|
416
498
|
ReloadLabwareParams,
|
|
417
499
|
LoadLiquidParams,
|
|
500
|
+
LoadLiquidClassParams,
|
|
418
501
|
LoadModuleParams,
|
|
419
502
|
LoadPipetteParams,
|
|
420
503
|
MoveLabwareParams,
|
|
@@ -433,8 +516,12 @@ CommandParams = Union[
|
|
|
433
516
|
SetStatusBarParams,
|
|
434
517
|
VerifyTipPresenceParams,
|
|
435
518
|
GetTipPresenceParams,
|
|
519
|
+
GetNextTipParams,
|
|
436
520
|
LiquidProbeParams,
|
|
437
521
|
TryLiquidProbeParams,
|
|
522
|
+
EvotipSealPipetteParams,
|
|
523
|
+
EvotipDispenseParams,
|
|
524
|
+
EvotipUnsealPipetteParams,
|
|
438
525
|
heater_shaker.WaitForTemperatureParams,
|
|
439
526
|
heater_shaker.SetTargetTemperatureParams,
|
|
440
527
|
heater_shaker.DeactivateHeaterParams,
|
|
@@ -471,9 +558,15 @@ CommandParams = Union[
|
|
|
471
558
|
unsafe.UnsafeEngageAxesParams,
|
|
472
559
|
unsafe.UnsafeUngripLabwareParams,
|
|
473
560
|
unsafe.UnsafePlaceLabwareParams,
|
|
561
|
+
robot.MoveAxesRelativeParams,
|
|
562
|
+
robot.MoveAxesToParams,
|
|
563
|
+
robot.MoveToParams,
|
|
564
|
+
robot.openGripperJawParams,
|
|
565
|
+
robot.closeGripperJawParams,
|
|
474
566
|
]
|
|
475
567
|
|
|
476
568
|
CommandType = Union[
|
|
569
|
+
AirGapInPlaceCommandType,
|
|
477
570
|
AspirateCommandType,
|
|
478
571
|
AspirateInPlaceCommandType,
|
|
479
572
|
CommentCommandType,
|
|
@@ -491,8 +584,11 @@ CommandType = Union[
|
|
|
491
584
|
LoadLabwareCommandType,
|
|
492
585
|
ReloadLabwareCommandType,
|
|
493
586
|
LoadLiquidCommandType,
|
|
587
|
+
LoadLiquidClassCommandType,
|
|
494
588
|
LoadModuleCommandType,
|
|
495
589
|
LoadPipetteCommandType,
|
|
590
|
+
LoadLidStackCommandType,
|
|
591
|
+
LoadLidCommandType,
|
|
496
592
|
MoveLabwareCommandType,
|
|
497
593
|
MoveRelativeCommandType,
|
|
498
594
|
MoveToCoordinatesCommandType,
|
|
@@ -509,8 +605,12 @@ CommandType = Union[
|
|
|
509
605
|
SetStatusBarCommandType,
|
|
510
606
|
VerifyTipPresenceCommandType,
|
|
511
607
|
GetTipPresenceCommandType,
|
|
608
|
+
GetNextTipCommandType,
|
|
512
609
|
LiquidProbeCommandType,
|
|
513
610
|
TryLiquidProbeCommandType,
|
|
611
|
+
EvotipSealPipetteCommandType,
|
|
612
|
+
EvotipDispenseCommandType,
|
|
613
|
+
EvotipUnsealPipetteCommandType,
|
|
514
614
|
heater_shaker.WaitForTemperatureCommandType,
|
|
515
615
|
heater_shaker.SetTargetTemperatureCommandType,
|
|
516
616
|
heater_shaker.DeactivateHeaterCommandType,
|
|
@@ -547,10 +647,16 @@ CommandType = Union[
|
|
|
547
647
|
unsafe.UnsafeEngageAxesCommandType,
|
|
548
648
|
unsafe.UnsafeUngripLabwareCommandType,
|
|
549
649
|
unsafe.UnsafePlaceLabwareCommandType,
|
|
650
|
+
robot.MoveAxesRelativeCommandType,
|
|
651
|
+
robot.MoveAxesToCommandType,
|
|
652
|
+
robot.MoveToCommandType,
|
|
653
|
+
robot.openGripperJawCommandType,
|
|
654
|
+
robot.closeGripperJawCommandType,
|
|
550
655
|
]
|
|
551
656
|
|
|
552
657
|
CommandCreate = Annotated[
|
|
553
658
|
Union[
|
|
659
|
+
AirGapInPlaceCreate,
|
|
554
660
|
AspirateCreate,
|
|
555
661
|
AspirateInPlaceCreate,
|
|
556
662
|
CommentCreate,
|
|
@@ -568,8 +674,11 @@ CommandCreate = Annotated[
|
|
|
568
674
|
LoadLabwareCreate,
|
|
569
675
|
ReloadLabwareCreate,
|
|
570
676
|
LoadLiquidCreate,
|
|
677
|
+
LoadLiquidClassCreate,
|
|
571
678
|
LoadModuleCreate,
|
|
572
679
|
LoadPipetteCreate,
|
|
680
|
+
LoadLidStackCreate,
|
|
681
|
+
LoadLidCreate,
|
|
573
682
|
MoveLabwareCreate,
|
|
574
683
|
MoveRelativeCreate,
|
|
575
684
|
MoveToCoordinatesCreate,
|
|
@@ -586,8 +695,12 @@ CommandCreate = Annotated[
|
|
|
586
695
|
SetStatusBarCreate,
|
|
587
696
|
VerifyTipPresenceCreate,
|
|
588
697
|
GetTipPresenceCreate,
|
|
698
|
+
GetNextTipCreate,
|
|
589
699
|
LiquidProbeCreate,
|
|
590
700
|
TryLiquidProbeCreate,
|
|
701
|
+
EvotipSealPipetteCreate,
|
|
702
|
+
EvotipDispenseCreate,
|
|
703
|
+
EvotipUnsealPipetteCreate,
|
|
591
704
|
heater_shaker.WaitForTemperatureCreate,
|
|
592
705
|
heater_shaker.SetTargetTemperatureCreate,
|
|
593
706
|
heater_shaker.DeactivateHeaterCreate,
|
|
@@ -624,11 +737,24 @@ CommandCreate = Annotated[
|
|
|
624
737
|
unsafe.UnsafeEngageAxesCreate,
|
|
625
738
|
unsafe.UnsafeUngripLabwareCreate,
|
|
626
739
|
unsafe.UnsafePlaceLabwareCreate,
|
|
740
|
+
robot.MoveAxesRelativeCreate,
|
|
741
|
+
robot.MoveAxesToCreate,
|
|
742
|
+
robot.MoveToCreate,
|
|
743
|
+
robot.openGripperJawCreate,
|
|
744
|
+
robot.closeGripperJawCreate,
|
|
627
745
|
],
|
|
628
746
|
Field(discriminator="commandType"),
|
|
629
747
|
]
|
|
630
748
|
|
|
749
|
+
# Each time a TypeAdapter is instantiated, it will construct a new validator and
|
|
750
|
+
# serializer. To improve performance, TypeAdapters are instantiated once.
|
|
751
|
+
# See https://docs.pydantic.dev/latest/concepts/performance/#typeadapter-instantiated-once
|
|
752
|
+
CommandCreateAdapter: TypeAdapter[CommandCreate] = TypeAdapter(CommandCreate)
|
|
753
|
+
|
|
754
|
+
CommandAdapter: TypeAdapter[Command] = TypeAdapter(Command)
|
|
755
|
+
|
|
631
756
|
CommandResult = Union[
|
|
757
|
+
AirGapInPlaceResult,
|
|
632
758
|
AspirateResult,
|
|
633
759
|
AspirateInPlaceResult,
|
|
634
760
|
CommentResult,
|
|
@@ -646,8 +772,11 @@ CommandResult = Union[
|
|
|
646
772
|
LoadLabwareResult,
|
|
647
773
|
ReloadLabwareResult,
|
|
648
774
|
LoadLiquidResult,
|
|
775
|
+
LoadLiquidClassResult,
|
|
649
776
|
LoadModuleResult,
|
|
650
777
|
LoadPipetteResult,
|
|
778
|
+
LoadLidStackResult,
|
|
779
|
+
LoadLidResult,
|
|
651
780
|
MoveLabwareResult,
|
|
652
781
|
MoveRelativeResult,
|
|
653
782
|
MoveToCoordinatesResult,
|
|
@@ -664,8 +793,12 @@ CommandResult = Union[
|
|
|
664
793
|
SetStatusBarResult,
|
|
665
794
|
VerifyTipPresenceResult,
|
|
666
795
|
GetTipPresenceResult,
|
|
796
|
+
GetNextTipResult,
|
|
667
797
|
LiquidProbeResult,
|
|
668
798
|
TryLiquidProbeResult,
|
|
799
|
+
EvotipSealPipetteResult,
|
|
800
|
+
EvotipDispenseResult,
|
|
801
|
+
EvotipUnsealPipetteResult,
|
|
669
802
|
heater_shaker.WaitForTemperatureResult,
|
|
670
803
|
heater_shaker.SetTargetTemperatureResult,
|
|
671
804
|
heater_shaker.DeactivateHeaterResult,
|
|
@@ -702,6 +835,11 @@ CommandResult = Union[
|
|
|
702
835
|
unsafe.UnsafeEngageAxesResult,
|
|
703
836
|
unsafe.UnsafeUngripLabwareResult,
|
|
704
837
|
unsafe.UnsafePlaceLabwareResult,
|
|
838
|
+
robot.MoveAxesRelativeResult,
|
|
839
|
+
robot.MoveAxesToResult,
|
|
840
|
+
robot.MoveToResult,
|
|
841
|
+
robot.openGripperJawResult,
|
|
842
|
+
robot.closeGripperJawResult,
|
|
705
843
|
]
|
|
706
844
|
|
|
707
845
|
|
|
@@ -712,6 +850,7 @@ CommandDefinedErrorData = Union[
|
|
|
712
850
|
DefinedErrorData[OverpressureError],
|
|
713
851
|
DefinedErrorData[LiquidNotFoundError],
|
|
714
852
|
DefinedErrorData[GripperMovementError],
|
|
853
|
+
DefinedErrorData[StallOrCollisionError],
|
|
715
854
|
]
|
|
716
855
|
|
|
717
856
|
|
|
@@ -43,7 +43,7 @@ class Comment(BaseCommand[CommentParams, CommentResult, ErrorOccurrence]):
|
|
|
43
43
|
|
|
44
44
|
commandType: CommentCommandType = "comment"
|
|
45
45
|
params: CommentParams
|
|
46
|
-
result: Optional[CommentResult]
|
|
46
|
+
result: Optional[CommentResult] = None
|
|
47
47
|
|
|
48
48
|
_ImplementationCls: Type[CommentImplementation] = CommentImplementation
|
|
49
49
|
|