Commands¶
Commands are the data structures that you send to your fleet as instructions.
A TCode script is a list of commands, typically beginning with a chunk of ADD_*** commands to define the entities that will be used in the script, then followed by various action commands to manipulate those entities.
Tip
An important concept to understand before diving into TCode commands it the ValueWithUnits class, used in many of the following commands to represent physical quantities such as distances, speeds, and volumes.
- pydantic model tcode_api.api.core.ValueWithUnits¶
A numeric value with associated units.
- Note:
The following values are all equivalent:
ValueWithUnits(magnitude=0.005, units="L")ValueWithUnits(magnitude=5, units="mL")ValueWithUnits(magnitude=5000, units="uL")ValueWithUnits(magnitude=5000, units="mm³")- Note:
In the python implementation,
pintis used to resolve units. see tcode_api.units.
Show JSON schema
{ "title": "ValueWithUnits", "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "type": "object", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field magnitude: float [Required]¶
- field type: Literal['ValueWithUnits'] = 'ValueWithUnits'¶
- field units: str [Required]¶
- to(units)¶
Convert to the specified units.
- Note:
Units implementation in python uses pint under the hood.
- Parameters:
units (
str|Unit) – The units to convert to.- Return type:
TCode command model, implemented in pydantic.
- pydantic model tcode_api.api.commands.ADD_LABWARE¶
Find a matching labware on the fleet and assign it the given id.
- Parameters:
type – see :class:
_TCodeBaseid – Identifier to assign to the resolved labware. This id is used in subsequent commands to reference this labware.
descriptor – Minimal descriptor of the desired labware; resolved on the fleet.
lid_id – Optional identifier of a lid to associate with the labware. If provided, the labware descriptor must indicate that the labware has a lid.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_EXISTSifidis already registered to a labware.
Show JSON schema
{ "title": "ADD_LABWARE", "description": "Find a matching labware on the fleet and assign it the given id.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved labware. This id is used in subsequent commands\n to reference this labware.\n:param descriptor: Minimal descriptor of the desired labware; resolved on the fleet.\n:param lid_id: Optional identifier of a lid to associate with the labware. If provided,\n the labware descriptor must indicate that the labware has a lid.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a labware.", "type": "object", "properties": { "type": { "const": "ADD_LABWARE", "default": "ADD_LABWARE", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "discriminator": { "mapping": { "Lid": "#/$defs/LidDescriptor", "PipetteTipBox": "#/$defs/PipetteTipBoxDescriptor", "Trash": "#/$defs/TrashDescriptor", "TubeHolder": "#/$defs/TubeHolderDescriptor", "WellPlate": "#/$defs/WellPlateDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LidDescriptor" }, { "$ref": "#/$defs/PipetteTipBoxDescriptor" }, { "$ref": "#/$defs/TrashDescriptor" }, { "$ref": "#/$defs/TubeHolderDescriptor" }, { "$ref": "#/$defs/WellPlateDescriptor" } ], "title": "Descriptor" }, "lid_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Lid Id" } }, "$defs": { "AxisAlignedRectangleDescriptor": { "description": "AxisAlignedRectangleDescription with optional parameters.", "properties": { "type": { "const": "AxisAlignedRectangle", "default": "AxisAlignedRectangle", "title": "Type", "type": "string" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "AxisAlignedRectangleDescriptor", "type": "object" }, "CircleDescriptor": { "description": "CircleDescription with optional parameters.", "properties": { "type": { "const": "Circle", "default": "Circle", "title": "Type", "type": "string" }, "diameter": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "CircleDescriptor", "type": "object" }, "ConicalBottomDescriptor": { "description": "ConicalBottomDescription with optional parameters.", "properties": { "type": { "const": "Conical", "default": "Conical", "title": "Type", "type": "string" }, "offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "ConicalBottomDescriptor", "type": "object" }, "FlatBottomDescriptor": { "description": "Descriptor for a flat bottom well.", "properties": { "type": { "const": "Flat", "default": "Flat", "title": "Type", "type": "string" } }, "title": "FlatBottomDescriptor", "type": "object" }, "GridDescriptor": { "description": "GridDescription with optional parameters.", "properties": { "type": { "const": "Grid", "default": "Grid", "title": "Type", "type": "string" }, "row_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Row Count" }, "column_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Column Count" }, "row_pitch": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "column_pitch": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "row_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "column_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "GridDescriptor", "type": "object" }, "LidDescriptor": { "description": "LidDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "Lid", "default": "Lid", "title": "Type", "type": "string" }, "stackable": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Stackable" } }, "title": "LidDescriptor", "type": "object" }, "PipetteTipBoxDescriptor": { "description": "PipetteTipBoxDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "PipetteTipBox", "default": "PipetteTipBox", "title": "Type", "type": "string" }, "grid": { "anyOf": [ { "$ref": "#/$defs/GridDescriptor" }, { "type": "null" } ], "default": null }, "full": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Full" }, "pipette_tip": { "anyOf": [ { "$ref": "#/$defs/PipetteTipDescriptor" }, { "type": "null" } ], "default": null } }, "title": "PipetteTipBoxDescriptor", "type": "object" }, "PipetteTipDescriptor": { "description": "PipetteTipDescription with optional parameters.", "properties": { "type": { "const": "PipetteTip", "default": "PipetteTip", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "has_filter": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Has Filter" }, "height": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "flange_height": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "PipetteTipDescriptor", "type": "object" }, "RoundBottomDescriptor": { "description": "RoundBottomDescription with optional parameters.", "properties": { "type": { "const": "Round", "default": "Round", "title": "Type", "type": "string" } }, "title": "RoundBottomDescriptor", "type": "object" }, "TrashDescriptor": { "description": "TrashDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "Trash", "default": "Trash", "title": "Type", "type": "string" }, "well": { "anyOf": [ { "$ref": "#/$defs/WellDescriptor" }, { "type": "null" } ], "default": null } }, "title": "TrashDescriptor", "type": "object" }, "TubeDescriptor": { "description": "TubeDescription with optional parameters.", "properties": { "type": { "const": "Tube", "default": "Tube", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "depth": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "shape": { "anyOf": [ { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescriptor", "Circle": "#/$defs/CircleDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescriptor" }, { "$ref": "#/$defs/AxisAlignedRectangleDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Shape" }, "bottom_shape": { "anyOf": [ { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescriptor", "Flat": "#/$defs/FlatBottomDescriptor", "Round": "#/$defs/RoundBottomDescriptor", "V-Shape": "#/$defs/VBottomDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescriptor" }, { "$ref": "#/$defs/FlatBottomDescriptor" }, { "$ref": "#/$defs/RoundBottomDescriptor" }, { "$ref": "#/$defs/VBottomDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Bottom Shape" }, "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "top_height": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "TubeDescriptor", "type": "object" }, "TubeHolderDescriptor": { "description": "TubeHolderDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "TubeHolder", "default": "TubeHolder", "title": "Type", "type": "string" }, "grid": { "anyOf": [ { "$ref": "#/$defs/GridDescriptor" }, { "type": "null" } ], "default": null }, "tube": { "anyOf": [ { "$ref": "#/$defs/TubeDescriptor" }, { "type": "null" } ], "default": null } }, "title": "TubeHolderDescriptor", "type": "object" }, "VBottomDescriptor": { "description": "VBottomDescription with optional parameters.", "properties": { "type": { "const": "V-Shape", "default": "V-Shape", "title": "Type", "type": "string" }, "direction": { "anyOf": [ { "enum": [ "x-axis", "y-axis" ], "type": "string" }, { "type": "null" } ], "default": null, "title": "Direction" }, "offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "VBottomDescriptor", "type": "object" }, "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" }, "WellDescriptor": { "description": "WellDescription with optional parameters.", "properties": { "type": { "const": "Well", "default": "Well", "title": "Type", "type": "string" }, "depth": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "shape": { "anyOf": [ { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescriptor", "Circle": "#/$defs/CircleDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescriptor" }, { "$ref": "#/$defs/AxisAlignedRectangleDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Shape" }, "bottom_shape": { "anyOf": [ { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescriptor", "Flat": "#/$defs/FlatBottomDescriptor", "Round": "#/$defs/RoundBottomDescriptor", "V-Shape": "#/$defs/VBottomDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescriptor" }, { "$ref": "#/$defs/FlatBottomDescriptor" }, { "$ref": "#/$defs/RoundBottomDescriptor" }, { "$ref": "#/$defs/VBottomDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Bottom Shape" }, "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "WellDescriptor", "type": "object" }, "WellPlateDescriptor": { "description": "WellPlateDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "WellPlate", "default": "WellPlate", "title": "Type", "type": "string" }, "grid": { "anyOf": [ { "$ref": "#/$defs/GridDescriptor" }, { "type": "null" } ], "default": null }, "well": { "anyOf": [ { "$ref": "#/$defs/WellDescriptor" }, { "type": "null" } ], "default": null }, "lid_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "lid": { "anyOf": [ { "$ref": "#/$defs/LidDescriptor" }, { "type": "null" } ], "default": null } }, "title": "WellPlateDescriptor", "type": "object" } }, "required": [ "id", "descriptor" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field descriptor: LabwareDescriptor [Required]¶
- field id: str [Required]¶
- field lid_id: str | None = None¶
- field type: Literal['ADD_LABWARE'] = 'ADD_LABWARE'¶
- pydantic model tcode_api.api.commands.ADD_PIPETTE_TIP_GROUP¶
Find a matching group of pipette tips on the fleet and assign it the given id.
- Parameters:
type – see :class:
_TCodeBaseid – Identifier to assign to the resolved pipette tip group. This id is used in subsequent commands to reference this pipette tip group.
descriptor – Minimal descriptor of the desired pipette tip group; resolved on the fleet.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_EXISTSifidis already registered to a pipette tip group.
Show JSON schema
{ "title": "ADD_PIPETTE_TIP_GROUP", "description": "Find a matching group of pipette tips on the fleet and assign it the given id.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved pipette tip group. This id is used in subsequent\n commands to reference this pipette tip group.\n:param descriptor: Minimal descriptor of the desired pipette tip group; resolved on the fleet.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a pipette tip group.", "type": "object", "properties": { "type": { "const": "ADD_PIPETTE_TIP_GROUP", "default": "ADD_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "$ref": "#/$defs/PipetteTipGroupDescriptor" } }, "$defs": { "PipetteTipGroupDescriptor": { "description": "PipetteTipGroupDescription with optional parameters.", "properties": { "type": { "const": "PipetteTipGroup", "default": "PipetteTipGroup", "title": "Type", "type": "string" }, "row_count": { "title": "Row Count", "type": "integer" }, "column_count": { "title": "Column Count", "type": "integer" }, "pipette_tip_tags": { "items": { "type": "string" }, "title": "Pipette Tip Tags", "type": "array" }, "pipette_tip_named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Pipette Tip Named Tags", "type": "object" } }, "required": [ "row_count", "column_count" ], "title": "PipetteTipGroupDescriptor", "type": "object" } }, "required": [ "id", "descriptor" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field descriptor: PipetteTipGroupDescriptor [Required]¶
- field id: str [Required]¶
- field type: Literal['ADD_PIPETTE_TIP_GROUP'] = 'ADD_PIPETTE_TIP_GROUP'¶
- pydantic model tcode_api.api.commands.ADD_ROBOT¶
Find a matching robot on the fleet and assign it the given id.
- Parameters:
type – see :class:
_TCodeBaseid – Identifier to assign to the resolved robot. This id is used in subsequent commands to reference this robot.
descriptor – Minimal descriptor of the desired robot; resolved on the fleet.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_EXISTSifidis already registered to a robot.
Show JSON schema
{ "title": "ADD_ROBOT", "description": "Find a matching robot on the fleet and assign it the given id.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved robot. This id is used in subsequent commands\n to reference this robot.\n:param descriptor: Minimal descriptor of the desired robot; resolved on the fleet.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a robot.", "type": "object", "properties": { "type": { "const": "ADD_ROBOT", "default": "ADD_ROBOT", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "$ref": "#/$defs/RobotDescriptor" } }, "$defs": { "EightChannelPipetteDescriptor": { "properties": { "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_speed": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "EightChannelPipette", "default": "EightChannelPipette", "title": "Type", "type": "string" } }, "title": "EightChannelPipetteDescriptor", "type": "object" }, "GripperDescriptor": { "properties": { "type": { "const": "Gripper", "default": "Gripper", "title": "Type", "type": "string" } }, "title": "GripperDescriptor", "type": "object" }, "LabwareHolderDescriptor": { "description": "Descriptor for an entity that can hold labware.", "properties": { "type": { "const": "LabwareHolder", "default": "LabwareHolder", "title": "Type", "type": "string" } }, "title": "LabwareHolderDescriptor", "type": "object" }, "ProbeDescriptor": { "properties": { "type": { "const": "Probe", "default": "Probe", "title": "Type", "type": "string" } }, "title": "ProbeDescriptor", "type": "object" }, "RobotDescriptor": { "description": "Descriptor for a robot in the fleet.", "properties": { "type": { "const": "Robot", "default": "Robot", "title": "Type", "type": "string" }, "serial_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Serial Number" }, "tools": { "additionalProperties": { "discriminator": { "mapping": { "EightChannelPipette": "#/$defs/EightChannelPipetteDescriptor", "Gripper": "#/$defs/GripperDescriptor", "Probe": "#/$defs/ProbeDescriptor", "SingleChannelPipette": "#/$defs/SingleChannelPipetteDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/SingleChannelPipetteDescriptor" }, { "$ref": "#/$defs/EightChannelPipetteDescriptor" }, { "$ref": "#/$defs/ProbeDescriptor" }, { "$ref": "#/$defs/GripperDescriptor" } ] }, "title": "Tools", "type": "object" }, "tool_holders": { "additionalProperties": { "$ref": "#/$defs/ToolHolderDescriptor" }, "title": "Tool Holders", "type": "object" }, "labware_holders": { "additionalProperties": { "$ref": "#/$defs/LabwareHolderDescriptor" }, "title": "Labware Holders", "type": "object" } }, "title": "RobotDescriptor", "type": "object" }, "SingleChannelPipetteDescriptor": { "properties": { "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_speed": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "SingleChannelPipette", "default": "SingleChannelPipette", "title": "Type", "type": "string" } }, "title": "SingleChannelPipetteDescriptor", "type": "object" }, "ToolHolderDescriptor": { "description": "Descriptor for an entity that can hold tools.", "properties": { "type": { "const": "ToolHolder", "default": "ToolHolder", "title": "Type", "type": "string" } }, "title": "ToolHolderDescriptor", "type": "object" }, "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" } }, "required": [ "id", "descriptor" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field descriptor: RobotDescriptor [Required]¶
- field id: str [Required]¶
- field type: Literal['ADD_ROBOT'] = 'ADD_ROBOT'¶
- pydantic model tcode_api.api.commands.ADD_TOOL¶
Find a matching tool on the fleet and assign it the given id.
- Note:
Doesn’t subclass
_RobotSpecificTCodeBasebecause the robot_id parameter is used to resolve the tool, NOT to subsequently target the command.- Parameters:
type – see :class:
_TCodeBaseid – Identifier to assign to the resolved tool. This id is used in subsequent commands to reference this tool.
descriptor – Minimal descriptor of the desired tool; resolved on the fleet.
robot_id – Identifier of the robot on which to search for the tool.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_EXISTSifidis already registered to a tool.ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot.
Show JSON schema
{ "title": "ADD_TOOL", "description": "Find a matching tool on the fleet and assign it the given id.\n\n:note: Doesn't subclass ``_RobotSpecificTCodeBase`` because the robot_id parameter is used\n to resolve the tool, NOT to subsequently target the command.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved tool. This id is used in subsequent commands\n to reference this tool.\n:param descriptor: Minimal descriptor of the desired tool; resolved on the fleet.\n:param robot_id: Identifier of the robot on which to search for the tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a tool.\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.", "type": "object", "properties": { "type": { "const": "ADD_TOOL", "default": "ADD_TOOL", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "discriminator": { "mapping": { "EightChannelPipette": "#/$defs/EightChannelPipetteDescriptor", "Gripper": "#/$defs/GripperDescriptor", "Probe": "#/$defs/ProbeDescriptor", "SingleChannelPipette": "#/$defs/SingleChannelPipetteDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/SingleChannelPipetteDescriptor" }, { "$ref": "#/$defs/EightChannelPipetteDescriptor" }, { "$ref": "#/$defs/ProbeDescriptor" }, { "$ref": "#/$defs/GripperDescriptor" } ], "title": "Descriptor" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "$defs": { "EightChannelPipetteDescriptor": { "properties": { "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_speed": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "EightChannelPipette", "default": "EightChannelPipette", "title": "Type", "type": "string" } }, "title": "EightChannelPipetteDescriptor", "type": "object" }, "GripperDescriptor": { "properties": { "type": { "const": "Gripper", "default": "Gripper", "title": "Type", "type": "string" } }, "title": "GripperDescriptor", "type": "object" }, "ProbeDescriptor": { "properties": { "type": { "const": "Probe", "default": "Probe", "title": "Type", "type": "string" } }, "title": "ProbeDescriptor", "type": "object" }, "SingleChannelPipetteDescriptor": { "properties": { "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_speed": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "SingleChannelPipette", "default": "SingleChannelPipette", "title": "Type", "type": "string" } }, "title": "SingleChannelPipetteDescriptor", "type": "object" }, "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" } }, "required": [ "id", "descriptor", "robot_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field descriptor: ToolDescriptor [Required]¶
- field id: str [Required]¶
- field robot_id: str [Required]¶
- field type: Literal['ADD_TOOL'] = 'ADD_TOOL'¶
- pydantic model tcode_api.api.commands.ASPIRATE¶
Aspirate a given fluid volume at a given speed into the target robot’s pipette.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBasevolume – Aspiration volume; expects volume units
speed – Aspiration speed; expects volume/time units
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot, or if the targeted robot’s currently held tool id is not registered.ValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held pipette does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.ValidatorError –
ValidatorErrorCode.UNITS_ERRORifvolumeis not in volume units, or ifspeedis not in volume/time units.ValidatorError –
ValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDEDif the targeted robot’s currently held pipette’s maximum volume is exceeded by this aspiration.
Show JSON schema
{ "title": "ASPIRATE", "description": "Aspirate a given fluid volume at a given speed into the target robot's pipette.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param volume: Aspiration volume; expects volume units\n:param speed: Aspiration speed; expects volume/time units\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot, or if the targeted robot's currently held tool id is not registered.\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``volume`` is not in volume units,\n or if ``speed`` is not in volume/time units.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDED`` if the targeted\n robot's currently held pipette's maximum volume is exceeded by this aspiration.", "type": "object", "properties": { "type": { "const": "ASPIRATE", "default": "ASPIRATE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "volume": { "$ref": "#/$defs/ValueWithUnits" }, "speed": { "$ref": "#/$defs/ValueWithUnits" } }, "$defs": { "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" } }, "required": [ "robot_id", "volume", "speed" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field speed: ValueWithUnits [Required]¶
- field type: Literal['ASPIRATE'] = 'ASPIRATE'¶
- field volume: ValueWithUnits [Required]¶
- pydantic model tcode_api.api.commands.CALIBRATE_LABWARE_HEIGHT¶
Use the target robot’s currently held tool to tune the height of a target labware by probing.
- Warning:
This command is not robustly tested!
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselocation – The location attribute specifes which labware and where on the labware to probe. Unlike other location-based commands (ex. :class: MOVE_TO_LOCATION), :class:
CALIBRATE_LABWARE_HEIGHTonly supports locations that hold references to a labware.persistent – When raised, all labware of the same type and brand will be modified. If not raised, only the current in-place transform is applied. Restarting the tcode server will reset the calibration.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered * The labware id referenced inlocationis not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not compatible with probing.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held tool is a pipette that does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held tool is a pipette that has a pipette tip group mounted with no pipette tips.
Show JSON schema
{ "title": "CALIBRATE_LABWARE_HEIGHT", "description": "Use the target robot's currently held tool to tune the height of a target labware by probing.\n\n:warning: This command is not robustly tested!\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: The location attribute specifes which labware and where on the labware to probe.\n Unlike other location-based commands (ex. :class: MOVE_TO_LOCATION),\n :class: ``CALIBRATE_LABWARE_HEIGHT`` only supports locations that hold references to a labware.\n\n:param persistent: When raised, all labware of the same type and brand will be modified. If not\n raised, only the current in-place transform is applied. Restarting the tcode server will\n reset the calibration.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The labware id referenced in ``location`` is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not compatible with probing.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held tool is a pipette that does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held tool is a pipette that has a pipette tip group mounted with no pipette tips.", "type": "object", "properties": { "type": { "const": "CALIBRATE_LABWARE_HEIGHT", "default": "CALIBRATE_LABWARE_HEIGHT", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "anyOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationRelativeToLabware" } ], "title": "Location" }, "persistent": { "title": "Persistent", "type": "boolean" } }, "$defs": { "LocationAsLabwareIndex": { "description": "Location specified by a tuple of labware id and labware location index.", "properties": { "type": { "const": "LocationAsLabwareIndex", "default": "LocationAsLabwareIndex", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "location_index": { "title": "Location Index", "type": "integer" }, "well_part": { "title": "Well Part", "type": "string" } }, "required": [ "labware_id", "location_index", "well_part" ], "title": "LocationAsLabwareIndex", "type": "object" }, "LocationRelativeToLabware": { "description": "Location specified by a transformation matrix relative to a labware's base node.", "properties": { "type": { "const": "LocationRelativeToLabware", "default": "LocationRelativeToLabware", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "labware_id", "matrix" ], "title": "LocationRelativeToLabware", "type": "object" } }, "required": [ "robot_id", "location", "persistent" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field location: LocationAsLabwareIndex | LocationRelativeToLabware [Required]¶
- field persistent: bool [Required]¶
- field type: Literal['CALIBRATE_LABWARE_HEIGHT'] = 'CALIBRATE_LABWARE_HEIGHT'¶
- pydantic model tcode_api.api.commands.CALIBRATE_LABWARE_WELL_DEPTH¶
Use the target robot’s held tool to tune the depth of a target labware’s well by probing.
- Warning:
This command is not robustly tested!
An example TCode snippet to calibrate using a pipette tip is here:
` RETRIEVE_TOOL(id=...) RETRIEVE_PIPETTE_TIP_GROUP(id=...) CALIBRATE_PIPETTE_TIP_LENGTH() CALIBRATE_LABWARE_WELL_DEPTH(location=LocationAsLabwareIndex(labware_id=..., location_index=...)) `- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselocation – The location attribute specifes which labware and where on the labware to probe. Unlike other location-based commands (ex. :class: MOVE_TO_LOCATION), :class:
CALIBRATE_LABWARE_HEIGHTonly supports locations that hold references to a labware.persistent – When raised, all labware of the same type and brand will be modified. If not raised, only the current in-place transform is applied. Restarting the tcode server will reset the calibration.
modify_all_wells – This flag indicates whether only the probed well’s depth should be modified, or if the depths of all of the wells in the labware should be modified. Defaults to modifying all of the wells.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered * The labware id referenced inlocationis not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not compatible with probing.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held tool is a pipette that does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held tool is a pipette that has a pipette tip group mounted with no pipette tips.
Show JSON schema
{ "title": "CALIBRATE_LABWARE_WELL_DEPTH", "description": "Use the target robot's held tool to tune the depth of a target labware's well by probing.\n\n:warning: This command is not robustly tested!\n\nAn example TCode snippet to calibrate using a pipette tip is here:\n```\nRETRIEVE_TOOL(id=...)\nRETRIEVE_PIPETTE_TIP_GROUP(id=...)\nCALIBRATE_PIPETTE_TIP_LENGTH()\nCALIBRATE_LABWARE_WELL_DEPTH(location=LocationAsLabwareIndex(labware_id=..., location_index=...))\n```\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: The location attribute specifes which labware and where on the labware to\n probe. Unlike other location-based commands (ex. :class: MOVE_TO_LOCATION),\n :class: ``CALIBRATE_LABWARE_HEIGHT`` only supports locations that hold references to a\n labware.\n\n:param persistent: When raised, all labware of the same type and brand will be modified. If not\n raised, only the current in-place transform is applied. Restarting the tcode server will\n reset the calibration.\n\n:param modify_all_wells: This flag indicates whether only the probed well's depth should be\n modified, or if the depths of all of the wells in the labware should be modified. Defaults\n to modifying all of the wells.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The labware id referenced in ``location`` is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not compatible with probing.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held tool is a pipette that does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held tool is a pipette that has a pipette tip group mounted with no pipette tips.", "type": "object", "properties": { "type": { "const": "CALIBRATE_LABWARE_WELL_DEPTH", "default": "CALIBRATE_LABWARE_WELL_DEPTH", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "anyOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationRelativeToLabware" } ], "title": "Location" }, "persistent": { "title": "Persistent", "type": "boolean" }, "modify_all_wells": { "default": true, "title": "Modify All Wells", "type": "boolean" } }, "$defs": { "LocationAsLabwareIndex": { "description": "Location specified by a tuple of labware id and labware location index.", "properties": { "type": { "const": "LocationAsLabwareIndex", "default": "LocationAsLabwareIndex", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "location_index": { "title": "Location Index", "type": "integer" }, "well_part": { "title": "Well Part", "type": "string" } }, "required": [ "labware_id", "location_index", "well_part" ], "title": "LocationAsLabwareIndex", "type": "object" }, "LocationRelativeToLabware": { "description": "Location specified by a transformation matrix relative to a labware's base node.", "properties": { "type": { "const": "LocationRelativeToLabware", "default": "LocationRelativeToLabware", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "labware_id", "matrix" ], "title": "LocationRelativeToLabware", "type": "object" } }, "required": [ "robot_id", "location", "persistent" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field location: LocationAsLabwareIndex | LocationRelativeToLabware [Required]¶
- field modify_all_wells: bool = True¶
- field persistent: bool [Required]¶
- field type: Literal['CALIBRATE_LABWARE_WELL_DEPTH'] = 'CALIBRATE_LABWARE_WELL_DEPTH'¶
- pydantic model tcode_api.api.commands.CALIBRATE_TOOL_FOR_PROBING¶
Calibrate the target robot’s currently held tool for probing.
- Note:
If a bare tool is held, the tool’s transform will be calibrated.
- Note:
If a pipette tip is held, the pipette tip’s relationship to the tool will be calibrated.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBasez_only – When raised, tool is only calibrated for z-axis probing. If not raised, tool is calibrated for x, y, and z.
persistent – When raised, the behavior is dependent on the tool mounted. * If a bare tool is mounted, the transform is saved to the tool’s configuration. * If a pipette tip is mounted, the transform is applied to all pipette tips of that brand. * If not raised, only the currently in-place transform is applied. Restarting the tcode server will reset the calibration.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not compatible with probing.ValidatorError –
ValidatorErrorCode.NOT_IMPLEMENTEDif any of the following are true: *z_onlyis False, and the targeted robot’s currently held tool is an eight-channel pipette *z_onlyis False, and the targeted robot’s currently held tool is a pipette with a pipette tip group mounted
Show JSON schema
{ "title": "CALIBRATE_TOOL_FOR_PROBING", "description": "Calibrate the target robot's currently held tool for probing.\n\n:note: If a bare tool is held, the tool's transform will be calibrated.\n:note: If a pipette tip is held, the pipette tip's relationship to the tool will be calibrated.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param z_only: When raised, tool is only calibrated for z-axis probing. If not raised, tool is\n calibrated for x, y, and z.\n\n:param persistent: When raised, the behavior is dependent on the tool mounted.\n * If a bare tool is mounted, the transform is saved to the tool's configuration.\n * If a pipette tip is mounted, the transform is applied to all pipette tips of that brand.\n * If not raised, only the currently in-place transform is applied. Restarting the tcode\n server will reset the calibration.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not compatible with probing.\n\n:raises ValidatorError: ``ValidatorErrorCode.NOT_IMPLEMENTED`` if any of the following are true:\n * ``z_only`` is False, and the targeted robot's currently held tool is an eight-channel\n pipette\n * ``z_only`` is False, and the targeted robot's currently held tool is a pipette with a\n pipette tip group mounted", "type": "object", "properties": { "type": { "const": "CALIBRATE_TOOL_FOR_PROBING", "default": "CALIBRATE_TOOL_FOR_PROBING", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "z_only": { "title": "Z Only", "type": "boolean" }, "persistent": { "default": false, "title": "Persistent", "type": "boolean" } }, "required": [ "robot_id", "z_only" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field persistent: bool = False¶
- field type: Literal['CALIBRATE_TOOL_FOR_PROBING'] = 'CALIBRATE_TOOL_FOR_PROBING'¶
- field z_only: bool [Required]¶
- pydantic model tcode_api.api.commands.COMMENT¶
A comment, included for human readability and comprehension of the TCode script.
- Parameters:
type – see :class:
_TCodeBasetext – The comment text.
Show JSON schema
{ "title": "COMMENT", "description": "A comment, included for human readability and comprehension of the TCode script.\n\n:param type: see :class: ``_TCodeBase``\n:param text: The comment text.", "type": "object", "properties": { "type": { "const": "COMMENT", "default": "COMMENT", "title": "Type", "type": "string" }, "text": { "title": "Text", "type": "string" } }, "required": [ "text" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field text: str [Required]¶
- field type: Literal['COMMENT'] = 'COMMENT'¶
- pydantic model tcode_api.api.commands.CREATE_LABWARE¶
Create a new physical labware on the targeted robot’s deck.
- Note:
This command adds a labware to TCode’s internal state; the description provided is NOT a descriptor, and is NOT resolved.
- Note:
The labware will be created in the specified deck slot, and TCode will from here on assume that the slot is occupied by this labware.
- Warning:
This command does NOT raise a ValidatorError if the target deck slot doesn’t exist on the target robot, or if the target deck slot is already occupied. These features are coming in a future release.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBasedescription – Full description of the labware to create. See also :class:
LabwareDescription.holder – The holder in which to place the new labware.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot.ValidatorError –
ValidatorErrorCode.UNITS_ERRORifdescriptioncontains invalid units data.
Show JSON schema
{ "title": "CREATE_LABWARE", "description": "Create a new physical labware on the targeted robot's deck.\n\n:note: This command adds a labware to TCode's internal state; the description provided is NOT\n a descriptor, and is NOT resolved.\n\n:note: The labware will be created in the specified deck slot, and TCode will from here on\n assume that the slot is occupied by this labware.\n\n:warning: This command does NOT raise a ValidatorError if the target deck slot doesn't exist on\n the target robot, or if the target deck slot is already occupied. These features are coming\n in a future release.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param description: Full description of the labware to create.\n See also :class: ``LabwareDescription``.\n\n:param holder: The holder in which to place the new labware.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.\n\n:raise ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``description`` contains invalid\n units data.", "type": "object", "properties": { "type": { "const": "CREATE_LABWARE", "default": "CREATE_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "description": { "discriminator": { "mapping": { "Lid": "#/$defs/LidDescription", "PipetteTipBox": "#/$defs/PipetteTipBoxDescription", "Trash": "#/$defs/TrashDescription", "TubeHolder": "#/$defs/TubeHolderDescription", "WellPlate": "#/$defs/WellPlateDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LidDescription" }, { "$ref": "#/$defs/PipetteTipBoxDescription" }, { "$ref": "#/$defs/TrashDescription" }, { "$ref": "#/$defs/TubeHolderDescription" }, { "$ref": "#/$defs/WellPlateDescription" } ], "title": "Description" }, "holder": { "discriminator": { "mapping": { "LabwareHolderName": "#/$defs/LabwareHolderName", "LabwareId": "#/$defs/LabwareId" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LabwareHolderName" }, { "$ref": "#/$defs/LabwareId" } ], "title": "Holder" } }, "$defs": { "AxisAlignedRectangleDescription": { "description": "Description of an axis-aligned rectangle.\n\n:note: X and Y lengths are measured in the coordinate system of the parent labware,\n to avoid ambiguity when referring to the \"length\" or \"width\" of a rectangle.", "properties": { "type": { "const": "AxisAlignedRectangle", "default": "AxisAlignedRectangle", "title": "Type", "type": "string" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "x_length", "y_length" ], "title": "AxisAlignedRectangleDescription", "type": "object" }, "CircleDescription": { "description": "Description of a circle.", "properties": { "type": { "const": "Circle", "default": "Circle", "title": "Type", "type": "string" }, "diameter": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "diameter" ], "title": "CircleDescription", "type": "object" }, "ConicalBottomDescription": { "description": "Description of a conical bottom well.", "properties": { "type": { "const": "Conical", "default": "Conical", "title": "Type", "type": "string" }, "offset": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "offset" ], "title": "ConicalBottomDescription", "type": "object" }, "FlatBottomDescription": { "description": "FlatBottomDescription with optional paramters.", "properties": { "type": { "const": "Flat", "default": "Flat", "title": "Type", "type": "string" } }, "title": "FlatBottomDescription", "type": "object" }, "GridDescription": { "description": "Description of a grid layout.", "properties": { "type": { "const": "Grid", "default": "Grid", "title": "Type", "type": "string" }, "row_count": { "title": "Row Count", "type": "integer" }, "column_count": { "title": "Column Count", "type": "integer" }, "row_pitch": { "$ref": "#/$defs/ValueWithUnits" }, "column_pitch": { "$ref": "#/$defs/ValueWithUnits" }, "row_offset": { "$ref": "#/$defs/ValueWithUnits" }, "column_offset": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "row_count", "column_count", "row_pitch", "column_pitch", "row_offset", "column_offset" ], "title": "GridDescription", "type": "object" }, "LabwareHolderName": { "description": "Name of a labware holder on the deck of a targeted robot.", "properties": { "type": { "const": "LabwareHolderName", "default": "LabwareHolderName", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "name": { "title": "Name", "type": "string" } }, "required": [ "robot_id", "name" ], "title": "LabwareHolderName", "type": "object" }, "LabwareId": { "description": "Id of a labware that can hold another labware.", "properties": { "type": { "const": "LabwareId", "default": "LabwareId", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "LabwareId", "type": "object" }, "LidDescription": { "description": "Description of a plate lid.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "Lid", "default": "Lid", "title": "Type", "type": "string" }, "stackable": { "title": "Stackable", "type": "boolean" } }, "required": [ "x_length", "y_length", "z_length", "stackable" ], "title": "LidDescription", "type": "object" }, "PipetteTipBoxDescription": { "description": "Description of a pipette tip box.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "PipetteTipBox", "default": "PipetteTipBox", "title": "Type", "type": "string" }, "grid": { "$ref": "#/$defs/GridDescription" }, "full": { "title": "Full", "type": "boolean" }, "pipette_tip": { "$ref": "#/$defs/PipetteTipDescription" } }, "required": [ "x_length", "y_length", "z_length", "grid", "full", "pipette_tip" ], "title": "PipetteTipBoxDescription", "type": "object" }, "PipetteTipDescription": { "description": "Description of a pipette tip.", "properties": { "type": { "const": "PipetteTip", "default": "PipetteTip", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "has_filter": { "title": "Has Filter", "type": "boolean" }, "height": { "$ref": "#/$defs/ValueWithUnits" }, "flange_height": { "$ref": "#/$defs/ValueWithUnits" }, "max_volume": { "$ref": "#/$defs/ValueWithUnits" }, "min_volume": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "has_filter", "height", "flange_height", "max_volume", "min_volume" ], "title": "PipetteTipDescription", "type": "object" }, "RoundBottomDescription": { "description": "Descriptor for a round bottom well.", "properties": { "type": { "const": "Round", "default": "Round", "title": "Type", "type": "string" } }, "title": "RoundBottomDescription", "type": "object" }, "TrashDescription": { "description": "Description of a waste disposal container.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "Trash", "default": "Trash", "title": "Type", "type": "string" }, "well": { "$ref": "#/$defs/WellDescription" } }, "required": [ "x_length", "y_length", "z_length", "well" ], "title": "TrashDescription", "type": "object" }, "TubeDescription": { "description": "Description of a tube.", "properties": { "type": { "const": "Tube", "default": "Tube", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "depth": { "$ref": "#/$defs/ValueWithUnits" }, "shape": { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescription", "Circle": "#/$defs/CircleDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescription" }, { "$ref": "#/$defs/AxisAlignedRectangleDescription" } ], "title": "Shape" }, "bottom_shape": { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescription", "Flat": "#/$defs/FlatBottomDescription", "Round": "#/$defs/RoundBottomDescription", "V-Shape": "#/$defs/VBottomDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescription" }, { "$ref": "#/$defs/FlatBottomDescription" }, { "$ref": "#/$defs/RoundBottomDescription" }, { "$ref": "#/$defs/VBottomDescription" } ], "title": "Bottom Shape" }, "min_volume": { "$ref": "#/$defs/ValueWithUnits" }, "max_volume": { "$ref": "#/$defs/ValueWithUnits" }, "top_height": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "depth", "shape", "bottom_shape", "min_volume", "max_volume", "top_height" ], "title": "TubeDescription", "type": "object" }, "TubeHolderDescription": { "description": "Description of a tube holder.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "TubeHolder", "default": "TubeHolder", "title": "Type", "type": "string" }, "grid": { "$ref": "#/$defs/GridDescription" }, "tube": { "$ref": "#/$defs/TubeDescription" } }, "required": [ "x_length", "y_length", "z_length", "grid", "tube" ], "title": "TubeHolderDescription", "type": "object" }, "VBottomDescription": { "description": "Description of a V-bottom well (think trough).", "properties": { "type": { "const": "V-Shape", "default": "V-Shape", "title": "Type", "type": "string" }, "direction": { "enum": [ "x-axis", "y-axis" ], "title": "Direction", "type": "string" }, "offset": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "direction", "offset" ], "title": "VBottomDescription", "type": "object" }, "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" }, "WellDescription": { "description": "Description of a well in a labware.", "properties": { "type": { "const": "Well", "default": "Well", "title": "Type", "type": "string" }, "depth": { "$ref": "#/$defs/ValueWithUnits" }, "shape": { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescription", "Circle": "#/$defs/CircleDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescription" }, { "$ref": "#/$defs/AxisAlignedRectangleDescription" } ], "title": "Shape" }, "bottom_shape": { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescription", "Flat": "#/$defs/FlatBottomDescription", "Round": "#/$defs/RoundBottomDescription", "V-Shape": "#/$defs/VBottomDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescription" }, { "$ref": "#/$defs/FlatBottomDescription" }, { "$ref": "#/$defs/RoundBottomDescription" }, { "$ref": "#/$defs/VBottomDescription" } ], "title": "Bottom Shape" }, "min_volume": { "$ref": "#/$defs/ValueWithUnits" }, "max_volume": { "$ref": "#/$defs/ValueWithUnits" }, "well_tags": { "items": { "type": "string" }, "title": "Well Tags", "type": "array" }, "well_named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Well Named Tags", "type": "object" } }, "required": [ "depth", "shape", "bottom_shape", "min_volume", "max_volume" ], "title": "WellDescription", "type": "object" }, "WellPlateDescription": { "description": "Description of a well plate.\n\n:note: The exception to the 'no optional attributes' rule is `lid_offset` and `lid`.\n These attributes default to None, assuming that a described labware has no lid.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "WellPlate", "default": "WellPlate", "title": "Type", "type": "string" }, "grid": { "$ref": "#/$defs/GridDescription" }, "well": { "$ref": "#/$defs/WellDescription" }, "lid_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "lid": { "anyOf": [ { "$ref": "#/$defs/LidDescription" }, { "type": "null" } ], "default": null } }, "required": [ "x_length", "y_length", "z_length", "grid", "well" ], "title": "WellPlateDescription", "type": "object" } }, "required": [ "robot_id", "description", "holder" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field description: LabwareDescription [Required]¶
- field holder: LabwareHolder [Required]¶
- field type: Literal['CREATE_LABWARE'] = 'CREATE_LABWARE'¶
- pydantic model tcode_api.api.commands.DELETE_LABWARE¶
Physically remove the labware associated with the given id from the targeted robot’s deck.
- Note:
This labware will no longer be available to future ADD_LABWARE resolution
- Note:
TCode will assume that the holder previously occupied by this labware is now empty.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselabware_id – Identifier of the labware to remove, as previously assigned by
ADD_LABWARE.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot.
Show JSON schema
{ "title": "DELETE_LABWARE", "description": "Physically remove the labware associated with the given id from the targeted robot's deck.\n\n:note: This labware will no longer be available to future ADD_LABWARE resolution\n:note: TCode will assume that the holder previously occupied by this labware is now empty.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware to remove, as previously assigned by\n ``ADD_LABWARE``.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered to\n a robot.", "type": "object", "properties": { "type": { "const": "DELETE_LABWARE", "default": "DELETE_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" } }, "required": [ "robot_id", "labware_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field labware_id: str [Required]¶
- field type: Literal['DELETE_LABWARE'] = 'DELETE_LABWARE'¶
- pydantic model tcode_api.api.commands.DISCARD_PIPETTE_TIP_GROUP¶
- Dispose of the target robot’s currently held pipette tip(s) into any accessible dry waste
disposal location.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBase
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered * The targeted robot’s currently held pipette tip group id is not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held pipette does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.
Show JSON schema
{ "title": "DISCARD_PIPETTE_TIP_GROUP", "description": "Dispose of the target robot's currently held pipette tip(s) into any accessible dry waste\n disposal location.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The targeted robot's currently held pipette tip group id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.", "type": "object", "properties": { "type": { "const": "DISCARD_PIPETTE_TIP_GROUP", "default": "DISCARD_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "robot_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field type: Literal['DISCARD_PIPETTE_TIP_GROUP'] = 'DISCARD_PIPETTE_TIP_GROUP'¶
- pydantic model tcode_api.api.commands.DISPENSE¶
Dispense a given fluid volume at a given speed from the target robot’s pipette.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBasevolume – Dispense volume; expects volume units
speed – Dispense speed; expects volume/time units
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot, or if the targeted robot’s currently held tool id is not registered.ValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held pipette does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.ValidatorError –
ValidatorErrorCode.UNITS_ERRORifvolumeis not in volume units, or ifspeedis not in volume/time units.ValidatorError –
ValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDEDif the targeted robot’s currently held pipette’s minimum volume is exceeded by this dispense.
Show JSON schema
{ "title": "DISPENSE", "description": "Dispense a given fluid volume at a given speed from the target robot's pipette.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param volume: Dispense volume; expects volume units\n:param speed: Dispense speed; expects volume/time units\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot, or if the targeted robot's currently held tool id is not registered.\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``volume`` is not in volume units,\n or if ``speed`` is not in volume/time units.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDED`` if the targeted\n robot's currently held pipette's minimum volume is exceeded by this dispense.", "type": "object", "properties": { "type": { "const": "DISPENSE", "default": "DISPENSE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "volume": { "$ref": "#/$defs/ValueWithUnits" }, "speed": { "$ref": "#/$defs/ValueWithUnits" } }, "$defs": { "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" } }, "required": [ "robot_id", "volume", "speed" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field speed: ValueWithUnits [Required]¶
- field type: Literal['DISPENSE'] = 'DISPENSE'¶
- field volume: ValueWithUnits [Required]¶
- pydantic model tcode_api.api.commands.MOVE_TO_JOINT_POSE¶
Move the target robot to the specified joint positions.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBasejoint_positions – List of joint positions to move to; expects joint-specific position units for SCARA-type robots.
relative – When true, the joint positions are interpreted as relative offsets from the robot’s current joint positions. When false, the joint positions are interpreted as absolute positions.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot.ValidatorError –
ValidatorErrorCode.JOINT_COUNT_MISMATCHif the length ofjoint_positionsis not four.ValidatorError –
ValidatorErrorCode.UNITS_ERRORif any of the values injoint_positionsare not in joint-specific position units (length | angle).
Show JSON schema
{ "title": "MOVE_TO_JOINT_POSE", "description": "Move the target robot to the specified joint positions.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param joint_positions: List of joint positions to move to; expects joint-specific position\n units for SCARA-type robots.\n\n:param relative: When true, the joint positions are interpreted as relative offsets from the\n robot's current joint positions. When false, the joint positions are interpreted as absolute\n positions.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.\n\n:raises ValidatorError: ``ValidatorErrorCode.JOINT_COUNT_MISMATCH`` if the length of\n ``joint_positions`` is not four.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if any of the values in\n ``joint_positions`` are not in joint-specific position units (length | angle).", "type": "object", "properties": { "type": { "const": "MOVE_TO_JOINT_POSE", "default": "MOVE_TO_JOINT_POSE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "joint_positions": { "items": { "$ref": "#/$defs/ValueWithUnits" }, "title": "Joint Positions", "type": "array" }, "relative": { "title": "Relative", "type": "boolean" } }, "$defs": { "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" } }, "required": [ "robot_id", "joint_positions", "relative" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field joint_positions: list[ValueWithUnits] [Required]¶
- field relative: bool [Required]¶
- field type: Literal['MOVE_TO_JOINT_POSE'] = 'MOVE_TO_JOINT_POSE'¶
- pydantic model tcode_api.api.commands.MOVE_TO_LOCATION¶
Move the target robot’s control point to the specified location.
- Warning:
Currently, only
locationas aLocationAsLabwareIndexis fully validated. Other location types are not yet validated before runtime, and may result in unexpected behavior.- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselocation – Target location to move to.
location_offset – Optional offset transform to apply to the target location before moving. Defaults to the identity transform.
flange – Optional location describing a robot control point other than the default. If not specified, the robot’s default control point will be used.
flange_offset – Optional offset transform to apply to the flange location before moving. Defaults to the identity transform.
path_type – Optional path type to use during the move. See
PathTypeenum for options. defaults to thePathType.SAFEif not given.trajectory_type – Optional trajectory type to use during the move. See
TrajectoryTypeenum for options. Defaults to the robot’s default trajectory type if not given.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot *locationis aLocationAsLabwareIndexand the referenced labware id is not yet registered. *locationis aLocationAsLabwareIndexand thelocation_indexis out of boundsValidatorError –
ValidatorErrorCode.TRANSFORM_SIZE_LIMIT_EXCEEDEDif eitherlocation_offsetorflange_offsetcontains a linear distance exceeding 100 mm.ValidatorError –
ValidatorErrorCode.UNEXPECTED_LABWARE_TYPEiflocationis aLocationAsLabwareIndexand the referenced labware is not a type that supports indexing. (ex. AGAR_PLATE)
Show JSON schema
{ "title": "MOVE_TO_LOCATION", "description": "Move the target robot's control point to the specified location.\n\n:warning: Currently, only ``location`` as a ``LocationAsLabwareIndex`` is fully validated.\n Other location types are not yet validated before runtime, and may result in unexpected\n behavior.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: Target location to move to.\n:param location_offset: Optional offset transform to apply to the target location before\n moving. Defaults to the identity transform.\n\n:param flange: Optional location describing a robot control point other than the default. If\n not specified, the robot's default control point will be used.\n\n:param flange_offset: Optional offset transform to apply to the flange location before\n moving. Defaults to the identity transform.\n\n:param path_type: Optional path type to use during the move. See ``PathType`` enum for options.\n defaults to the ``PathType.SAFE`` if not given.\n\n:param trajectory_type: Optional trajectory type to use during the move. See ``TrajectoryType``\n enum for options. Defaults to the robot's default trajectory type if not given.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * ``location`` is a ``LocationAsLabwareIndex`` and the referenced labware id is not yet\n registered.\n * ``location`` is a ``LocationAsLabwareIndex`` and the ``location_index`` is out of bounds\n\n:raises ValidatorError: ``ValidatorErrorCode.TRANSFORM_SIZE_LIMIT_EXCEEDED`` if either\n ``location_offset`` or ``flange_offset`` contains a linear distance exceeding 100 mm.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_LABWARE_TYPE`` if ``location`` is a\n ``LocationAsLabwareIndex`` and the referenced labware is not a type that supports indexing.\n (ex. AGAR_PLATE)", "type": "object", "properties": { "type": { "const": "MOVE_TO_LOCATION", "default": "MOVE_TO_LOCATION", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ], "title": "Location" }, "location_offset": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Location Offset", "type": "array" }, "flange": { "anyOf": [ { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ] }, { "type": "null" } ], "default": null, "title": "Flange" }, "flange_offset": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Flange Offset", "type": "array" }, "path_type": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Path Type" }, "trajectory_type": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Trajectory Type" } }, "$defs": { "LocationAsLabwareIndex": { "description": "Location specified by a tuple of labware id and labware location index.", "properties": { "type": { "const": "LocationAsLabwareIndex", "default": "LocationAsLabwareIndex", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "location_index": { "title": "Location Index", "type": "integer" }, "well_part": { "title": "Well Part", "type": "string" } }, "required": [ "labware_id", "location_index", "well_part" ], "title": "LocationAsLabwareIndex", "type": "object" }, "LocationAsNodeId": { "description": "Location specified by a node ID in the fleet's transform tree.", "properties": { "type": { "const": "LocationAsNodeId", "default": "LocationAsNodeId", "title": "Type", "type": "string" }, "node_id": { "title": "Node Id", "type": "string" } }, "required": [ "node_id" ], "title": "LocationAsNodeId", "type": "object" }, "LocationRelativeToCurrentPosition": { "description": "Location specified by a transformation matrix relative to position of the robot's current control node.", "properties": { "type": { "const": "LocationRelativeToCurrentPosition", "default": "LocationRelativeToCurrentPosition", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToCurrentPosition", "type": "object" }, "LocationRelativeToLabware": { "description": "Location specified by a transformation matrix relative to a labware's base node.", "properties": { "type": { "const": "LocationRelativeToLabware", "default": "LocationRelativeToLabware", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "labware_id", "matrix" ], "title": "LocationRelativeToLabware", "type": "object" }, "LocationRelativeToWorld": { "description": "Location specified by a transformation matrix relative to the fleet's root node.", "properties": { "type": { "const": "LocationRelativeToWorld", "default": "LocationRelativeToWorld", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToWorld", "type": "object" } }, "required": [ "robot_id", "location" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field flange: Location | None = None¶
- field flange_offset: Matrix [Optional]¶
- field location: Location [Required]¶
- field location_offset: Matrix [Optional]¶
- field path_type: int | None = None¶
- field trajectory_type: int | None = None¶
- field type: Literal['MOVE_TO_LOCATION'] = 'MOVE_TO_LOCATION'¶
- pydantic model tcode_api.api.commands.Metadata¶
TCode script metadata.
Show JSON schema
{ "title": "Metadata", "description": "TCode script metadata.", "type": "object", "properties": { "name": { "title": "Name", "type": "string" }, "timestamp": { "title": "Timestamp", "type": "string" }, "tcode_api_version": { "title": "Tcode Api Version", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Description" } }, "required": [ "name", "timestamp", "tcode_api_version" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field description: str | None = None¶
- field name: str [Required]¶
- field tcode_api_version: str [Required]¶
- field timestamp: str [Required]¶
- pydantic model tcode_api.api.commands.PAUSE¶
Pause execution until resumed by the user.
While
WAITdelays a target robot for a set duration,PAUSEhalts the entire fleet until the user manually resumes execution.- Parameters:
type – see :class:
_TCodeBase
Show JSON schema
{ "title": "PAUSE", "description": "Pause execution until resumed by the user.\n\nWhile ``WAIT`` delays a target robot for a set duration, ``PAUSE`` halts the entire fleet\nuntil the user manually resumes execution.\n\n:param type: see :class: ``_TCodeBase``", "type": "object", "properties": { "type": { "const": "PAUSE", "default": "PAUSE", "title": "Type", "type": "string" } } }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field type: Literal['PAUSE'] = 'PAUSE'¶
- pydantic model tcode_api.api.commands.PICK_UP_LABWARE¶
Pick up the target labware with the target robot’s currently held plate gripper.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselabware_id – Identifier of the labware to pick up, as previously assigned by
ADD_LABWARE.grasp_type – Optional grasp type to use when picking up the labware. See :class:
GraspTypeenum for options. Defaults toGraspType.UNSPECIFIED.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered *labware_idis not registered to a labwareValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a plate gripper.
Show JSON schema
{ "title": "PICK_UP_LABWARE", "description": "Pick up the target labware with the target robot's currently held plate gripper.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware to pick up, as previously assigned by\n ``ADD_LABWARE``.\n:param grasp_type: Optional grasp type to use when picking up the labware. See\n :class: ``GraspType`` enum for options. Defaults to ``GraspType.UNSPECIFIED``.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * ``labware_id`` is not registered to a labware\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a plate gripper.", "type": "object", "properties": { "type": { "const": "PICK_UP_LABWARE", "default": "PICK_UP_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "grasp_type": { "default": "UNSPECIFIED", "title": "Grasp Type", "type": "string" } }, "required": [ "robot_id", "labware_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field grasp_type: str = 'UNSPECIFIED'¶
- field labware_id: str [Required]¶
- field type: Literal['PICK_UP_LABWARE'] = 'PICK_UP_LABWARE'¶
- pydantic model tcode_api.api.commands.PICK_UP_PIPETTE_TIP¶
- Pick up pipette tip(s) with the target robot’s currently held pipette at the specified
location.
- Note:
This is a lower-level TCode command - most users are suggested to use :class:
RETRIEVE_PIPETTE_TIP_GROUPinstead.- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselocation – Location at which to pick up the pipette tip(s). :warning: The location is currently unverified!
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.UNEXPECTED_PIPETTE_TIPif the targeted robot is currently holding a pipette tip group.
Show JSON schema
{ "title": "PICK_UP_PIPETTE_TIP", "description": "Pick up pipette tip(s) with the target robot's currently held pipette at the specified\n location.\n\n:note: This is a lower-level TCode command - most users are suggested to use\n :class: ``RETRIEVE_PIPETTE_TIP_GROUP`` instead.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: Location at which to pick up the pipette tip(s).\n :warning: The location is currently unverified!\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP`` if the targeted robot\n is currently holding a pipette tip group.", "type": "object", "properties": { "type": { "const": "PICK_UP_PIPETTE_TIP", "default": "PICK_UP_PIPETTE_TIP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ], "title": "Location" } }, "$defs": { "LocationAsLabwareIndex": { "description": "Location specified by a tuple of labware id and labware location index.", "properties": { "type": { "const": "LocationAsLabwareIndex", "default": "LocationAsLabwareIndex", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "location_index": { "title": "Location Index", "type": "integer" }, "well_part": { "title": "Well Part", "type": "string" } }, "required": [ "labware_id", "location_index", "well_part" ], "title": "LocationAsLabwareIndex", "type": "object" }, "LocationAsNodeId": { "description": "Location specified by a node ID in the fleet's transform tree.", "properties": { "type": { "const": "LocationAsNodeId", "default": "LocationAsNodeId", "title": "Type", "type": "string" }, "node_id": { "title": "Node Id", "type": "string" } }, "required": [ "node_id" ], "title": "LocationAsNodeId", "type": "object" }, "LocationRelativeToCurrentPosition": { "description": "Location specified by a transformation matrix relative to position of the robot's current control node.", "properties": { "type": { "const": "LocationRelativeToCurrentPosition", "default": "LocationRelativeToCurrentPosition", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToCurrentPosition", "type": "object" }, "LocationRelativeToLabware": { "description": "Location specified by a transformation matrix relative to a labware's base node.", "properties": { "type": { "const": "LocationRelativeToLabware", "default": "LocationRelativeToLabware", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "labware_id", "matrix" ], "title": "LocationRelativeToLabware", "type": "object" }, "LocationRelativeToWorld": { "description": "Location specified by a transformation matrix relative to the fleet's root node.", "properties": { "type": { "const": "LocationRelativeToWorld", "default": "LocationRelativeToWorld", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToWorld", "type": "object" } }, "required": [ "robot_id", "location" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field location: Location [Required]¶
- field type: Literal['PICK_UP_PIPETTE_TIP'] = 'PICK_UP_PIPETTE_TIP'¶
- pydantic model tcode_api.api.commands.PUT_DOWN_LABWARE¶
Put down the target robot’s currently held labware at the specified location.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaseholder – Holder in which to put down the labware. :warning: The holder is currently unverified!
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a plate gripper.ValidatorError –
ValidatorErrorCode.UNNECESSARYit the targeted robot is has a plate gripper that is not holding a labware.
Show JSON schema
{ "title": "PUT_DOWN_LABWARE", "description": "Put down the target robot's currently held labware at the specified location.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param holder: Holder in which to put down the labware.\n :warning: The holder is currently unverified!\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a plate gripper.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` it the targeted robot is has a\n plate gripper that is not holding a labware.", "type": "object", "properties": { "type": { "const": "PUT_DOWN_LABWARE", "default": "PUT_DOWN_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "holder": { "discriminator": { "mapping": { "LabwareHolderName": "#/$defs/LabwareHolderName", "LabwareId": "#/$defs/LabwareId" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LabwareHolderName" }, { "$ref": "#/$defs/LabwareId" } ], "title": "Holder" } }, "$defs": { "LabwareHolderName": { "description": "Name of a labware holder on the deck of a targeted robot.", "properties": { "type": { "const": "LabwareHolderName", "default": "LabwareHolderName", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "name": { "title": "Name", "type": "string" } }, "required": [ "robot_id", "name" ], "title": "LabwareHolderName", "type": "object" }, "LabwareId": { "description": "Id of a labware that can hold another labware.", "properties": { "type": { "const": "LabwareId", "default": "LabwareId", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "LabwareId", "type": "object" } }, "required": [ "robot_id", "holder" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field holder: LabwareHolder [Required]¶
- field type: Literal['PUT_DOWN_LABWARE'] = 'PUT_DOWN_LABWARE'¶
- pydantic model tcode_api.api.commands.PUT_DOWN_PIPETTE_TIP¶
Put down the target robot’s currently held pipette tip(s) at the specified location.
- Note:
This is a lower-level TCode command - most users are suggested to use :class:
RETURN_PIPETTE_TIP_GROUPor :class:DISCARD_PIPETTE_TIP_GROUPinstead.- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselocation – Location at which to put down the pipette tip(s). :warning: The location is currently unverified!
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered * The targeted robot’s currently held pipette tip group id is not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held pipette does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.
Show JSON schema
{ "title": "PUT_DOWN_PIPETTE_TIP", "description": "Put down the target robot's currently held pipette tip(s) at the specified location.\n\n:note: This is a lower-level TCode command - most users are suggested to use\n :class: ``RETURN_PIPETTE_TIP_GROUP`` or :class: ``DISCARD_PIPETTE_TIP_GROUP`` instead.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: Location at which to put down the pipette tip(s).\n :warning: The location is currently unverified!\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The targeted robot's currently held pipette tip group id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.", "type": "object", "properties": { "type": { "const": "PUT_DOWN_PIPETTE_TIP", "default": "PUT_DOWN_PIPETTE_TIP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ], "title": "Location" } }, "$defs": { "LocationAsLabwareIndex": { "description": "Location specified by a tuple of labware id and labware location index.", "properties": { "type": { "const": "LocationAsLabwareIndex", "default": "LocationAsLabwareIndex", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "location_index": { "title": "Location Index", "type": "integer" }, "well_part": { "title": "Well Part", "type": "string" } }, "required": [ "labware_id", "location_index", "well_part" ], "title": "LocationAsLabwareIndex", "type": "object" }, "LocationAsNodeId": { "description": "Location specified by a node ID in the fleet's transform tree.", "properties": { "type": { "const": "LocationAsNodeId", "default": "LocationAsNodeId", "title": "Type", "type": "string" }, "node_id": { "title": "Node Id", "type": "string" } }, "required": [ "node_id" ], "title": "LocationAsNodeId", "type": "object" }, "LocationRelativeToCurrentPosition": { "description": "Location specified by a transformation matrix relative to position of the robot's current control node.", "properties": { "type": { "const": "LocationRelativeToCurrentPosition", "default": "LocationRelativeToCurrentPosition", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToCurrentPosition", "type": "object" }, "LocationRelativeToLabware": { "description": "Location specified by a transformation matrix relative to a labware's base node.", "properties": { "type": { "const": "LocationRelativeToLabware", "default": "LocationRelativeToLabware", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "labware_id", "matrix" ], "title": "LocationRelativeToLabware", "type": "object" }, "LocationRelativeToWorld": { "description": "Location specified by a transformation matrix relative to the fleet's root node.", "properties": { "type": { "const": "LocationRelativeToWorld", "default": "LocationRelativeToWorld", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToWorld", "type": "object" } }, "required": [ "robot_id", "location" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field location: Location [Required]¶
- field type: Literal['PUT_DOWN_PIPETTE_TIP'] = 'PUT_DOWN_PIPETTE_TIP'¶
- pydantic model tcode_api.api.commands.REMOVE_LABWARE_LID¶
Remove the lid from the target labware.
- Error:
This command is not yet implemented, and will always raise a
ValidatorErrorwith codeValidatorErrorCode.NOT_IMPLEMENTED.- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselabware_id – Identifier of the labware from which to remove the lid, as previously assigned by
ADD_LABWARE.storage_holder – Optional holder at which to store the removed lid. If not specified, the lid will be stored in a default holder, if available.
raises ValidatorError:
ValidatorErrorCode.NOT_IMPLEMENTEDall the time.Show JSON schema
{ "title": "REMOVE_LABWARE_LID", "description": "Remove the lid from the target labware.\n\n:error: This command is not yet implemented, and will always raise a ``ValidatorError`` with\n code ``ValidatorErrorCode.NOT_IMPLEMENTED``.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware from which to remove the lid, as previously\n assigned by ``ADD_LABWARE``.\n:param storage_holder: Optional holder at which to store the removed lid. If not specified,\n the lid will be stored in a default holder, if available.\n\nraises ValidatorError: ``ValidatorErrorCode.NOT_IMPLEMENTED`` all the time.", "type": "object", "properties": { "type": { "const": "REMOVE_LABWARE_LID", "default": "REMOVE_LABWARE_LID", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "storage_holder": { "anyOf": [ { "discriminator": { "mapping": { "LabwareHolderName": "#/$defs/LabwareHolderName", "LabwareId": "#/$defs/LabwareId" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LabwareHolderName" }, { "$ref": "#/$defs/LabwareId" } ] }, { "type": "null" } ], "default": null, "title": "Storage Holder" } }, "$defs": { "LabwareHolderName": { "description": "Name of a labware holder on the deck of a targeted robot.", "properties": { "type": { "const": "LabwareHolderName", "default": "LabwareHolderName", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "name": { "title": "Name", "type": "string" } }, "required": [ "robot_id", "name" ], "title": "LabwareHolderName", "type": "object" }, "LabwareId": { "description": "Id of a labware that can hold another labware.", "properties": { "type": { "const": "LabwareId", "default": "LabwareId", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "LabwareId", "type": "object" } }, "required": [ "robot_id", "labware_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field labware_id: str [Required]¶
- field storage_holder: LabwareHolder | None = None¶
- field type: Literal['REMOVE_LABWARE_LID'] = 'REMOVE_LABWARE_LID'¶
- pydantic model tcode_api.api.commands.REPLACE_LABWARE_LID¶
Replace the lid on the target labware.
- Error:
This command is not yet implemented, and will always raise a
ValidatorErrorwith codeValidatorErrorCode.NOT_IMPLEMENTED.- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaselabware_id – Identifier of the labware on which to replace the lid, as previously assigned by
ADD_LABWARE.lid_id – Optional identifier of the lid to replace. If not specified, the most recently removed lid will be used, if available.`
raises ValidatorError:
ValidatorErrorCode.NOT_IMPLEMENTEDall the time.Show JSON schema
{ "title": "REPLACE_LABWARE_LID", "description": "Replace the lid on the target labware.\n\n:error: This command is not yet implemented, and will always raise a ``ValidatorError`` with\n code ``ValidatorErrorCode.NOT_IMPLEMENTED``.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware on which to replace the lid, as previously\n assigned by ``ADD_LABWARE``.\n:param lid_id: Optional identifier of the lid to replace. If not specified, the most recently\n removed lid will be used, if available.`\n\nraises ValidatorError: ``ValidatorErrorCode.NOT_IMPLEMENTED`` all the time.", "type": "object", "properties": { "type": { "const": "REPLACE_LABWARE_LID", "default": "REPLACE_LABWARE_LID", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "lid_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Lid Id" } }, "required": [ "robot_id", "labware_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field labware_id: str [Required]¶
- field lid_id: str | None = None¶
- field type: Literal['REPLACE_LABWARE_LID'] = 'REPLACE_LABWARE_LID'¶
- pydantic model tcode_api.api.commands.RETRIEVE_PIPETTE_TIP_GROUP¶
Pick up the target pipette tip group using the target robot’s currently held pipette.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaseid – Target pipette tip group identifier.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered *idis not registered to a pipette tip groupValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUPif the targeted robot is currently holding a pipette tip group.
Show JSON schema
{ "title": "RETRIEVE_PIPETTE_TIP_GROUP", "description": "Pick up the target pipette tip group using the target robot's currently held pipette.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param id: Target pipette tip group identifier.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * ``id`` is not registered to a pipette tip group\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUP`` if the targeted\n robot is currently holding a pipette tip group.", "type": "object", "properties": { "type": { "const": "RETRIEVE_PIPETTE_TIP_GROUP", "default": "RETRIEVE_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "robot_id", "id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field id: str [Required]¶
- field type: Literal['RETRIEVE_PIPETTE_TIP_GROUP'] = 'RETRIEVE_PIPETTE_TIP_GROUP'¶
- pydantic model tcode_api.api.commands.RETRIEVE_TOOL¶
Pick up the target tool using the target robot’s empty flange.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaseid – Target tool identifier.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot *idis not registered to a toolValidatorError –
ValidatorErrorCode.UNNECESSARYif the targeted robot is already holding the targeted tool.ValidatorError –
ValidatorErrorCode.WRONG_TOOL_MOUNTEDif the targeted robot is currently holding a tool that is not the targeted tool.
Show JSON schema
{ "title": "RETRIEVE_TOOL", "description": "Pick up the target tool using the target robot's empty flange.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param id: Target tool identifier.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * ``id`` is not registered to a tool\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` if the targeted robot is already\n holding the targeted tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.WRONG_TOOL_MOUNTED`` if the targeted robot is\n currently holding a tool that is not the targeted tool.", "type": "object", "properties": { "type": { "const": "RETRIEVE_TOOL", "default": "RETRIEVE_TOOL", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "robot_id", "id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field id: str [Required]¶
- field type: Literal['RETRIEVE_TOOL'] = 'RETRIEVE_TOOL'¶
- pydantic model tcode_api.api.commands.RETURN_PIPETTE_TIP_GROUP¶
- Return the pipette tip group currently held by the target robot to the location from which
it was picked up.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBase
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registered * The targeted robot’s currently held pipette tip group id is not registeredValidatorError –
ValidatorErrorCode.TOOL_NOT_MOUNTEDif the targeted robot is not currently holding a tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_TOOLif the targeted robot has a tool mounted that is not a pipette.ValidatorError –
ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTEDif the targeted robot’s currently held pipette does not have a pipette tip mounted.ValidatorError –
ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUPif the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.
Show JSON schema
{ "title": "RETURN_PIPETTE_TIP_GROUP", "description": "Return the pipette tip group currently held by the target robot to the location from which\n it was picked up.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The targeted robot's currently held pipette tip group id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.", "type": "object", "properties": { "type": { "const": "RETURN_PIPETTE_TIP_GROUP", "default": "RETURN_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "robot_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field type: Literal['RETURN_PIPETTE_TIP_GROUP'] = 'RETURN_PIPETTE_TIP_GROUP'¶
- pydantic model tcode_api.api.commands.RETURN_TOOL¶
Return the tool currently held by the target robot to the tool rack.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBase
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot * The targeted robot’s currently held tool id is not registeredValidatorError –
ValidatorErrorCode.UNNECESSARYif the targeted robot is already holding the targeted tool.ValidatorError –
ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUPif the targeted robot is currently holding a pipette with a pipette tip group.ValidatorError –
ValidatorErrorCode.UNEXPECTED_LABWAREif the targeted robot is currently holding a plate gripper which is in turn holding a labware.
Show JSON schema
{ "title": "RETURN_TOOL", "description": "Return the tool currently held by the target robot to the tool rack.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` if the targeted robot is already\n holding the targeted tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUP`` if the targeted\n robot is currently holding a pipette with a pipette tip group.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_LABWARE`` if the targeted robot is\n currently holding a plate gripper which is in turn holding a labware.", "type": "object", "properties": { "type": { "const": "RETURN_TOOL", "default": "RETURN_TOOL", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "robot_id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field type: Literal['RETURN_TOOL'] = 'RETURN_TOOL'¶
- pydantic model tcode_api.api.commands.SEND_WEBHOOK¶
Send a webhook call to the specified URL with the specified payload
- Parameters:
type – see :class:
_TCodeBasepause_execution – whether to pause execution of the script when this command is run
ignore_external_error – Optional. Whether to ignore any error generated by destination server. This is useful for, e.g., a notification-only integration where it is undesirable to stop the tcode script simply because the destination server is temporarily offline. Defaults to False.
url – The URL to send the request to. This URL should include the protocol prefix (e.g. https://)
payload – An optional payload to include in the request. The maximum payload size is 32KiB
On encountering command, the scheduler will send an HTTP POST request to the specified URL with a JSON body as specified in
servicer.integrator.WebHookBodyShow JSON schema
{ "title": "SEND_WEBHOOK", "description": "Send a webhook call to the specified URL with the specified payload\n\n:param type: see :class: ``_TCodeBase``\n:param pause_execution: whether to pause execution of the script when this command is run\n:param ignore_external_error: Optional. Whether to ignore any error generated by destination server. This is useful for, e.g., a notification-only integration where it is undesirable to stop the tcode script simply because the destination server is temporarily offline. Defaults to False.\n:param url: The URL to send the request to. This URL should include the protocol prefix (e.g. https://)\n:param payload: An optional payload to include in the request. The maximum payload size is 32KiB\n\nOn encountering command, the scheduler will send an HTTP POST request to\nthe specified URL with a JSON body as specified in :class:`servicer.integrator.WebHookBody`", "type": "object", "properties": { "type": { "const": "SEND_WEBHOOK", "default": "SEND_WEBHOOK", "title": "Type", "type": "string" }, "pause_execution": { "title": "Pause Execution", "type": "boolean" }, "ignore_external_error": { "default": false, "title": "Ignore External Error", "type": "boolean" }, "url": { "title": "Url", "type": "string" }, "payload": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Payload" } }, "required": [ "pause_execution", "url" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field ignore_external_error: bool = False¶
- field pause_execution: bool [Required]¶
- field payload: str | None = None¶
- field type: Literal['SEND_WEBHOOK'] = 'SEND_WEBHOOK'¶
- field url: str [Required]¶
- pydantic model tcode_api.api.commands.SWAP_TO_TOOL¶
- Return any tool currently held by the target robot to the tool rack, then pick up the target
tool using the target robot’s empty flange.
- Warning:
This command doesn’t yet have all of the validation functionality of
RETRIEVE_TOOLandRETURN_TOOL- for example, it doesn’t yet error if the robot is holding a pipette with a pipette tip group, or a plate gripper holding a labware.- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaseid – Target tool identifier.
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDif any of the following are true: *robot_idis not registered to a robot *idis not registered to a toolValidatorError –
ValidatorErrorCode.UNNECESSARYif the targeted robot is already holding the targeted tool.
Show JSON schema
{ "title": "SWAP_TO_TOOL", "description": "Return any tool currently held by the target robot to the tool rack, then pick up the target\n tool using the target robot's empty flange.\n\n:warning: This command doesn't yet have all of the validation functionality of ``RETRIEVE_TOOL``\n and ``RETURN_TOOL`` - for example, it doesn't yet error if the robot is holding a pipette\n with a pipette tip group, or a plate gripper holding a labware.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param id: Target tool identifier.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * ``id`` is not registered to a tool\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` if the targeted robot is already\n holding the targeted tool.", "type": "object", "properties": { "type": { "const": "SWAP_TO_TOOL", "default": "SWAP_TO_TOOL", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "robot_id", "id" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field id: str [Required]¶
- field type: Literal['SWAP_TO_TOOL'] = 'SWAP_TO_TOOL'¶
- pydantic model tcode_api.api.commands.TCodeScript¶
Structure of a TCode script.
Show JSON schema
{ "title": "TCodeScript", "description": "Structure of a TCode script.", "type": "object", "properties": { "metadata": { "$ref": "#/$defs/Metadata" }, "commands": { "items": { "discriminator": { "mapping": { "ADD_LABWARE": "#/$defs/ADD_LABWARE", "ADD_PIPETTE_TIP_GROUP": "#/$defs/ADD_PIPETTE_TIP_GROUP", "ADD_ROBOT": "#/$defs/ADD_ROBOT", "ADD_TOOL": "#/$defs/ADD_TOOL", "ASPIRATE": "#/$defs/ASPIRATE", "CALIBRATE_LABWARE_HEIGHT": "#/$defs/CALIBRATE_LABWARE_HEIGHT", "CALIBRATE_LABWARE_WELL_DEPTH": "#/$defs/CALIBRATE_LABWARE_WELL_DEPTH", "CALIBRATE_TOOL_FOR_PROBING": "#/$defs/CALIBRATE_TOOL_FOR_PROBING", "COMMENT": "#/$defs/COMMENT", "CREATE_LABWARE": "#/$defs/CREATE_LABWARE", "DELETE_LABWARE": "#/$defs/DELETE_LABWARE", "DISCARD_PIPETTE_TIP_GROUP": "#/$defs/DISCARD_PIPETTE_TIP_GROUP", "DISPENSE": "#/$defs/DISPENSE", "MOVE_TO_JOINT_POSE": "#/$defs/MOVE_TO_JOINT_POSE", "MOVE_TO_LOCATION": "#/$defs/MOVE_TO_LOCATION", "PAUSE": "#/$defs/PAUSE", "PICK_UP_LABWARE": "#/$defs/PICK_UP_LABWARE", "PICK_UP_PIPETTE_TIP": "#/$defs/PICK_UP_PIPETTE_TIP", "PUT_DOWN_LABWARE": "#/$defs/PUT_DOWN_LABWARE", "PUT_DOWN_PIPETTE_TIP": "#/$defs/PUT_DOWN_PIPETTE_TIP", "REMOVE_LABWARE_LID": "#/$defs/REMOVE_LABWARE_LID", "REPLACE_LABWARE_LID": "#/$defs/REPLACE_LABWARE_LID", "RETRIEVE_PIPETTE_TIP_GROUP": "#/$defs/RETRIEVE_PIPETTE_TIP_GROUP", "RETRIEVE_TOOL": "#/$defs/RETRIEVE_TOOL", "RETURN_PIPETTE_TIP_GROUP": "#/$defs/RETURN_PIPETTE_TIP_GROUP", "RETURN_TOOL": "#/$defs/RETURN_TOOL", "SEND_WEBHOOK": "#/$defs/SEND_WEBHOOK", "SWAP_TO_TOOL": "#/$defs/SWAP_TO_TOOL", "WAIT": "#/$defs/WAIT" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ASPIRATE" }, { "$ref": "#/$defs/ADD_LABWARE" }, { "$ref": "#/$defs/ADD_PIPETTE_TIP_GROUP" }, { "$ref": "#/$defs/ADD_ROBOT" }, { "$ref": "#/$defs/ADD_TOOL" }, { "$ref": "#/$defs/CALIBRATE_LABWARE_WELL_DEPTH" }, { "$ref": "#/$defs/CALIBRATE_LABWARE_HEIGHT" }, { "$ref": "#/$defs/CALIBRATE_TOOL_FOR_PROBING" }, { "$ref": "#/$defs/COMMENT" }, { "$ref": "#/$defs/CREATE_LABWARE" }, { "$ref": "#/$defs/DELETE_LABWARE" }, { "$ref": "#/$defs/DISCARD_PIPETTE_TIP_GROUP" }, { "$ref": "#/$defs/DISPENSE" }, { "$ref": "#/$defs/MOVE_TO_LOCATION" }, { "$ref": "#/$defs/MOVE_TO_JOINT_POSE" }, { "$ref": "#/$defs/PAUSE" }, { "$ref": "#/$defs/PICK_UP_LABWARE" }, { "$ref": "#/$defs/PICK_UP_PIPETTE_TIP" }, { "$ref": "#/$defs/PUT_DOWN_LABWARE" }, { "$ref": "#/$defs/PUT_DOWN_PIPETTE_TIP" }, { "$ref": "#/$defs/REMOVE_LABWARE_LID" }, { "$ref": "#/$defs/REPLACE_LABWARE_LID" }, { "$ref": "#/$defs/RETRIEVE_PIPETTE_TIP_GROUP" }, { "$ref": "#/$defs/RETRIEVE_TOOL" }, { "$ref": "#/$defs/RETURN_PIPETTE_TIP_GROUP" }, { "$ref": "#/$defs/RETURN_TOOL" }, { "$ref": "#/$defs/SWAP_TO_TOOL" }, { "$ref": "#/$defs/SEND_WEBHOOK" }, { "$ref": "#/$defs/WAIT" } ] }, "title": "Commands", "type": "array" } }, "$defs": { "ADD_LABWARE": { "description": "Find a matching labware on the fleet and assign it the given id.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved labware. This id is used in subsequent commands\n to reference this labware.\n:param descriptor: Minimal descriptor of the desired labware; resolved on the fleet.\n:param lid_id: Optional identifier of a lid to associate with the labware. If provided,\n the labware descriptor must indicate that the labware has a lid.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a labware.", "properties": { "type": { "const": "ADD_LABWARE", "default": "ADD_LABWARE", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "discriminator": { "mapping": { "Lid": "#/$defs/LidDescriptor", "PipetteTipBox": "#/$defs/PipetteTipBoxDescriptor", "Trash": "#/$defs/TrashDescriptor", "TubeHolder": "#/$defs/TubeHolderDescriptor", "WellPlate": "#/$defs/WellPlateDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LidDescriptor" }, { "$ref": "#/$defs/PipetteTipBoxDescriptor" }, { "$ref": "#/$defs/TrashDescriptor" }, { "$ref": "#/$defs/TubeHolderDescriptor" }, { "$ref": "#/$defs/WellPlateDescriptor" } ], "title": "Descriptor" }, "lid_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Lid Id" } }, "required": [ "id", "descriptor" ], "title": "ADD_LABWARE", "type": "object" }, "ADD_PIPETTE_TIP_GROUP": { "description": "Find a matching group of pipette tips on the fleet and assign it the given id.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved pipette tip group. This id is used in subsequent\n commands to reference this pipette tip group.\n:param descriptor: Minimal descriptor of the desired pipette tip group; resolved on the fleet.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a pipette tip group.", "properties": { "type": { "const": "ADD_PIPETTE_TIP_GROUP", "default": "ADD_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "$ref": "#/$defs/PipetteTipGroupDescriptor" } }, "required": [ "id", "descriptor" ], "title": "ADD_PIPETTE_TIP_GROUP", "type": "object" }, "ADD_ROBOT": { "description": "Find a matching robot on the fleet and assign it the given id.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved robot. This id is used in subsequent commands\n to reference this robot.\n:param descriptor: Minimal descriptor of the desired robot; resolved on the fleet.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a robot.", "properties": { "type": { "const": "ADD_ROBOT", "default": "ADD_ROBOT", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "$ref": "#/$defs/RobotDescriptor" } }, "required": [ "id", "descriptor" ], "title": "ADD_ROBOT", "type": "object" }, "ADD_TOOL": { "description": "Find a matching tool on the fleet and assign it the given id.\n\n:note: Doesn't subclass ``_RobotSpecificTCodeBase`` because the robot_id parameter is used\n to resolve the tool, NOT to subsequently target the command.\n\n:param type: see :class: ``_TCodeBase``\n:param id: Identifier to assign to the resolved tool. This id is used in subsequent commands\n to reference this tool.\n:param descriptor: Minimal descriptor of the desired tool; resolved on the fleet.\n:param robot_id: Identifier of the robot on which to search for the tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_EXISTS`` if ``id`` is already registered to\n a tool.\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.", "properties": { "type": { "const": "ADD_TOOL", "default": "ADD_TOOL", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "descriptor": { "discriminator": { "mapping": { "EightChannelPipette": "#/$defs/EightChannelPipetteDescriptor", "Gripper": "#/$defs/GripperDescriptor", "Probe": "#/$defs/ProbeDescriptor", "SingleChannelPipette": "#/$defs/SingleChannelPipetteDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/SingleChannelPipetteDescriptor" }, { "$ref": "#/$defs/EightChannelPipetteDescriptor" }, { "$ref": "#/$defs/ProbeDescriptor" }, { "$ref": "#/$defs/GripperDescriptor" } ], "title": "Descriptor" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "id", "descriptor", "robot_id" ], "title": "ADD_TOOL", "type": "object" }, "ASPIRATE": { "description": "Aspirate a given fluid volume at a given speed into the target robot's pipette.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param volume: Aspiration volume; expects volume units\n:param speed: Aspiration speed; expects volume/time units\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot, or if the targeted robot's currently held tool id is not registered.\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``volume`` is not in volume units,\n or if ``speed`` is not in volume/time units.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDED`` if the targeted\n robot's currently held pipette's maximum volume is exceeded by this aspiration.", "properties": { "type": { "const": "ASPIRATE", "default": "ASPIRATE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "volume": { "$ref": "#/$defs/ValueWithUnits" }, "speed": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "robot_id", "volume", "speed" ], "title": "ASPIRATE", "type": "object" }, "AxisAlignedRectangleDescription": { "description": "Description of an axis-aligned rectangle.\n\n:note: X and Y lengths are measured in the coordinate system of the parent labware,\n to avoid ambiguity when referring to the \"length\" or \"width\" of a rectangle.", "properties": { "type": { "const": "AxisAlignedRectangle", "default": "AxisAlignedRectangle", "title": "Type", "type": "string" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "x_length", "y_length" ], "title": "AxisAlignedRectangleDescription", "type": "object" }, "AxisAlignedRectangleDescriptor": { "description": "AxisAlignedRectangleDescription with optional parameters.", "properties": { "type": { "const": "AxisAlignedRectangle", "default": "AxisAlignedRectangle", "title": "Type", "type": "string" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "AxisAlignedRectangleDescriptor", "type": "object" }, "CALIBRATE_LABWARE_HEIGHT": { "description": "Use the target robot's currently held tool to tune the height of a target labware by probing.\n\n:warning: This command is not robustly tested!\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: The location attribute specifes which labware and where on the labware to probe.\n Unlike other location-based commands (ex. :class: MOVE_TO_LOCATION),\n :class: ``CALIBRATE_LABWARE_HEIGHT`` only supports locations that hold references to a labware.\n\n:param persistent: When raised, all labware of the same type and brand will be modified. If not\n raised, only the current in-place transform is applied. Restarting the tcode server will\n reset the calibration.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The labware id referenced in ``location`` is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not compatible with probing.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held tool is a pipette that does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held tool is a pipette that has a pipette tip group mounted with no pipette tips.", "properties": { "type": { "const": "CALIBRATE_LABWARE_HEIGHT", "default": "CALIBRATE_LABWARE_HEIGHT", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "anyOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationRelativeToLabware" } ], "title": "Location" }, "persistent": { "title": "Persistent", "type": "boolean" } }, "required": [ "robot_id", "location", "persistent" ], "title": "CALIBRATE_LABWARE_HEIGHT", "type": "object" }, "CALIBRATE_LABWARE_WELL_DEPTH": { "description": "Use the target robot's held tool to tune the depth of a target labware's well by probing.\n\n:warning: This command is not robustly tested!\n\nAn example TCode snippet to calibrate using a pipette tip is here:\n```\nRETRIEVE_TOOL(id=...)\nRETRIEVE_PIPETTE_TIP_GROUP(id=...)\nCALIBRATE_PIPETTE_TIP_LENGTH()\nCALIBRATE_LABWARE_WELL_DEPTH(location=LocationAsLabwareIndex(labware_id=..., location_index=...))\n```\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: The location attribute specifes which labware and where on the labware to\n probe. Unlike other location-based commands (ex. :class: MOVE_TO_LOCATION),\n :class: ``CALIBRATE_LABWARE_HEIGHT`` only supports locations that hold references to a\n labware.\n\n:param persistent: When raised, all labware of the same type and brand will be modified. If not\n raised, only the current in-place transform is applied. Restarting the tcode server will\n reset the calibration.\n\n:param modify_all_wells: This flag indicates whether only the probed well's depth should be\n modified, or if the depths of all of the wells in the labware should be modified. Defaults\n to modifying all of the wells.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The labware id referenced in ``location`` is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not compatible with probing.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held tool is a pipette that does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held tool is a pipette that has a pipette tip group mounted with no pipette tips.", "properties": { "type": { "const": "CALIBRATE_LABWARE_WELL_DEPTH", "default": "CALIBRATE_LABWARE_WELL_DEPTH", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "anyOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationRelativeToLabware" } ], "title": "Location" }, "persistent": { "title": "Persistent", "type": "boolean" }, "modify_all_wells": { "default": true, "title": "Modify All Wells", "type": "boolean" } }, "required": [ "robot_id", "location", "persistent" ], "title": "CALIBRATE_LABWARE_WELL_DEPTH", "type": "object" }, "CALIBRATE_TOOL_FOR_PROBING": { "description": "Calibrate the target robot's currently held tool for probing.\n\n:note: If a bare tool is held, the tool's transform will be calibrated.\n:note: If a pipette tip is held, the pipette tip's relationship to the tool will be calibrated.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param z_only: When raised, tool is only calibrated for z-axis probing. If not raised, tool is\n calibrated for x, y, and z.\n\n:param persistent: When raised, the behavior is dependent on the tool mounted.\n * If a bare tool is mounted, the transform is saved to the tool's configuration.\n * If a pipette tip is mounted, the transform is applied to all pipette tips of that brand.\n * If not raised, only the currently in-place transform is applied. Restarting the tcode\n server will reset the calibration.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not compatible with probing.\n\n:raises ValidatorError: ``ValidatorErrorCode.NOT_IMPLEMENTED`` if any of the following are true:\n * ``z_only`` is False, and the targeted robot's currently held tool is an eight-channel\n pipette\n * ``z_only`` is False, and the targeted robot's currently held tool is a pipette with a\n pipette tip group mounted", "properties": { "type": { "const": "CALIBRATE_TOOL_FOR_PROBING", "default": "CALIBRATE_TOOL_FOR_PROBING", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "z_only": { "title": "Z Only", "type": "boolean" }, "persistent": { "default": false, "title": "Persistent", "type": "boolean" } }, "required": [ "robot_id", "z_only" ], "title": "CALIBRATE_TOOL_FOR_PROBING", "type": "object" }, "COMMENT": { "description": "A comment, included for human readability and comprehension of the TCode script.\n\n:param type: see :class: ``_TCodeBase``\n:param text: The comment text.", "properties": { "type": { "const": "COMMENT", "default": "COMMENT", "title": "Type", "type": "string" }, "text": { "title": "Text", "type": "string" } }, "required": [ "text" ], "title": "COMMENT", "type": "object" }, "CREATE_LABWARE": { "description": "Create a new physical labware on the targeted robot's deck.\n\n:note: This command adds a labware to TCode's internal state; the description provided is NOT\n a descriptor, and is NOT resolved.\n\n:note: The labware will be created in the specified deck slot, and TCode will from here on\n assume that the slot is occupied by this labware.\n\n:warning: This command does NOT raise a ValidatorError if the target deck slot doesn't exist on\n the target robot, or if the target deck slot is already occupied. These features are coming\n in a future release.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param description: Full description of the labware to create.\n See also :class: ``LabwareDescription``.\n\n:param holder: The holder in which to place the new labware.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.\n\n:raise ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``description`` contains invalid\n units data.", "properties": { "type": { "const": "CREATE_LABWARE", "default": "CREATE_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "description": { "discriminator": { "mapping": { "Lid": "#/$defs/LidDescription", "PipetteTipBox": "#/$defs/PipetteTipBoxDescription", "Trash": "#/$defs/TrashDescription", "TubeHolder": "#/$defs/TubeHolderDescription", "WellPlate": "#/$defs/WellPlateDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LidDescription" }, { "$ref": "#/$defs/PipetteTipBoxDescription" }, { "$ref": "#/$defs/TrashDescription" }, { "$ref": "#/$defs/TubeHolderDescription" }, { "$ref": "#/$defs/WellPlateDescription" } ], "title": "Description" }, "holder": { "discriminator": { "mapping": { "LabwareHolderName": "#/$defs/LabwareHolderName", "LabwareId": "#/$defs/LabwareId" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LabwareHolderName" }, { "$ref": "#/$defs/LabwareId" } ], "title": "Holder" } }, "required": [ "robot_id", "description", "holder" ], "title": "CREATE_LABWARE", "type": "object" }, "CircleDescription": { "description": "Description of a circle.", "properties": { "type": { "const": "Circle", "default": "Circle", "title": "Type", "type": "string" }, "diameter": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "diameter" ], "title": "CircleDescription", "type": "object" }, "CircleDescriptor": { "description": "CircleDescription with optional parameters.", "properties": { "type": { "const": "Circle", "default": "Circle", "title": "Type", "type": "string" }, "diameter": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "CircleDescriptor", "type": "object" }, "ConicalBottomDescription": { "description": "Description of a conical bottom well.", "properties": { "type": { "const": "Conical", "default": "Conical", "title": "Type", "type": "string" }, "offset": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "offset" ], "title": "ConicalBottomDescription", "type": "object" }, "ConicalBottomDescriptor": { "description": "ConicalBottomDescription with optional parameters.", "properties": { "type": { "const": "Conical", "default": "Conical", "title": "Type", "type": "string" }, "offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "ConicalBottomDescriptor", "type": "object" }, "DELETE_LABWARE": { "description": "Physically remove the labware associated with the given id from the targeted robot's deck.\n\n:note: This labware will no longer be available to future ADD_LABWARE resolution\n:note: TCode will assume that the holder previously occupied by this labware is now empty.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware to remove, as previously assigned by\n ``ADD_LABWARE``.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered to\n a robot.", "properties": { "type": { "const": "DELETE_LABWARE", "default": "DELETE_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" } }, "required": [ "robot_id", "labware_id" ], "title": "DELETE_LABWARE", "type": "object" }, "DISCARD_PIPETTE_TIP_GROUP": { "description": "Dispose of the target robot's currently held pipette tip(s) into any accessible dry waste\n disposal location.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The targeted robot's currently held pipette tip group id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.", "properties": { "type": { "const": "DISCARD_PIPETTE_TIP_GROUP", "default": "DISCARD_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "robot_id" ], "title": "DISCARD_PIPETTE_TIP_GROUP", "type": "object" }, "DISPENSE": { "description": "Dispense a given fluid volume at a given speed from the target robot's pipette.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param volume: Dispense volume; expects volume units\n:param speed: Dispense speed; expects volume/time units\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot, or if the targeted robot's currently held tool id is not registered.\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``volume`` is not in volume units,\n or if ``speed`` is not in volume/time units.\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDED`` if the targeted\n robot's currently held pipette's minimum volume is exceeded by this dispense.", "properties": { "type": { "const": "DISPENSE", "default": "DISPENSE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "volume": { "$ref": "#/$defs/ValueWithUnits" }, "speed": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "robot_id", "volume", "speed" ], "title": "DISPENSE", "type": "object" }, "EightChannelPipetteDescriptor": { "properties": { "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_speed": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "EightChannelPipette", "default": "EightChannelPipette", "title": "Type", "type": "string" } }, "title": "EightChannelPipetteDescriptor", "type": "object" }, "FlatBottomDescription": { "description": "FlatBottomDescription with optional paramters.", "properties": { "type": { "const": "Flat", "default": "Flat", "title": "Type", "type": "string" } }, "title": "FlatBottomDescription", "type": "object" }, "FlatBottomDescriptor": { "description": "Descriptor for a flat bottom well.", "properties": { "type": { "const": "Flat", "default": "Flat", "title": "Type", "type": "string" } }, "title": "FlatBottomDescriptor", "type": "object" }, "GridDescription": { "description": "Description of a grid layout.", "properties": { "type": { "const": "Grid", "default": "Grid", "title": "Type", "type": "string" }, "row_count": { "title": "Row Count", "type": "integer" }, "column_count": { "title": "Column Count", "type": "integer" }, "row_pitch": { "$ref": "#/$defs/ValueWithUnits" }, "column_pitch": { "$ref": "#/$defs/ValueWithUnits" }, "row_offset": { "$ref": "#/$defs/ValueWithUnits" }, "column_offset": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "row_count", "column_count", "row_pitch", "column_pitch", "row_offset", "column_offset" ], "title": "GridDescription", "type": "object" }, "GridDescriptor": { "description": "GridDescription with optional parameters.", "properties": { "type": { "const": "Grid", "default": "Grid", "title": "Type", "type": "string" }, "row_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Row Count" }, "column_count": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Column Count" }, "row_pitch": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "column_pitch": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "row_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "column_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "GridDescriptor", "type": "object" }, "GripperDescriptor": { "properties": { "type": { "const": "Gripper", "default": "Gripper", "title": "Type", "type": "string" } }, "title": "GripperDescriptor", "type": "object" }, "LabwareHolderDescriptor": { "description": "Descriptor for an entity that can hold labware.", "properties": { "type": { "const": "LabwareHolder", "default": "LabwareHolder", "title": "Type", "type": "string" } }, "title": "LabwareHolderDescriptor", "type": "object" }, "LabwareHolderName": { "description": "Name of a labware holder on the deck of a targeted robot.", "properties": { "type": { "const": "LabwareHolderName", "default": "LabwareHolderName", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "name": { "title": "Name", "type": "string" } }, "required": [ "robot_id", "name" ], "title": "LabwareHolderName", "type": "object" }, "LabwareId": { "description": "Id of a labware that can hold another labware.", "properties": { "type": { "const": "LabwareId", "default": "LabwareId", "title": "Type", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "id" ], "title": "LabwareId", "type": "object" }, "LidDescription": { "description": "Description of a plate lid.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "Lid", "default": "Lid", "title": "Type", "type": "string" }, "stackable": { "title": "Stackable", "type": "boolean" } }, "required": [ "x_length", "y_length", "z_length", "stackable" ], "title": "LidDescription", "type": "object" }, "LidDescriptor": { "description": "LidDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "Lid", "default": "Lid", "title": "Type", "type": "string" }, "stackable": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Stackable" } }, "title": "LidDescriptor", "type": "object" }, "LocationAsLabwareIndex": { "description": "Location specified by a tuple of labware id and labware location index.", "properties": { "type": { "const": "LocationAsLabwareIndex", "default": "LocationAsLabwareIndex", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "location_index": { "title": "Location Index", "type": "integer" }, "well_part": { "title": "Well Part", "type": "string" } }, "required": [ "labware_id", "location_index", "well_part" ], "title": "LocationAsLabwareIndex", "type": "object" }, "LocationAsNodeId": { "description": "Location specified by a node ID in the fleet's transform tree.", "properties": { "type": { "const": "LocationAsNodeId", "default": "LocationAsNodeId", "title": "Type", "type": "string" }, "node_id": { "title": "Node Id", "type": "string" } }, "required": [ "node_id" ], "title": "LocationAsNodeId", "type": "object" }, "LocationRelativeToCurrentPosition": { "description": "Location specified by a transformation matrix relative to position of the robot's current control node.", "properties": { "type": { "const": "LocationRelativeToCurrentPosition", "default": "LocationRelativeToCurrentPosition", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToCurrentPosition", "type": "object" }, "LocationRelativeToLabware": { "description": "Location specified by a transformation matrix relative to a labware's base node.", "properties": { "type": { "const": "LocationRelativeToLabware", "default": "LocationRelativeToLabware", "title": "Type", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "labware_id", "matrix" ], "title": "LocationRelativeToLabware", "type": "object" }, "LocationRelativeToWorld": { "description": "Location specified by a transformation matrix relative to the fleet's root node.", "properties": { "type": { "const": "LocationRelativeToWorld", "default": "LocationRelativeToWorld", "title": "Type", "type": "string" }, "matrix": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Matrix", "type": "array" } }, "required": [ "matrix" ], "title": "LocationRelativeToWorld", "type": "object" }, "MOVE_TO_JOINT_POSE": { "description": "Move the target robot to the specified joint positions.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param joint_positions: List of joint positions to move to; expects joint-specific position\n units for SCARA-type robots.\n\n:param relative: When true, the joint positions are interpreted as relative offsets from the\n robot's current joint positions. When false, the joint positions are interpreted as absolute\n positions.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.\n\n:raises ValidatorError: ``ValidatorErrorCode.JOINT_COUNT_MISMATCH`` if the length of\n ``joint_positions`` is not four.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if any of the values in\n ``joint_positions`` are not in joint-specific position units (length | angle).", "properties": { "type": { "const": "MOVE_TO_JOINT_POSE", "default": "MOVE_TO_JOINT_POSE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "joint_positions": { "items": { "$ref": "#/$defs/ValueWithUnits" }, "title": "Joint Positions", "type": "array" }, "relative": { "title": "Relative", "type": "boolean" } }, "required": [ "robot_id", "joint_positions", "relative" ], "title": "MOVE_TO_JOINT_POSE", "type": "object" }, "MOVE_TO_LOCATION": { "description": "Move the target robot's control point to the specified location.\n\n:warning: Currently, only ``location`` as a ``LocationAsLabwareIndex`` is fully validated.\n Other location types are not yet validated before runtime, and may result in unexpected\n behavior.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: Target location to move to.\n:param location_offset: Optional offset transform to apply to the target location before\n moving. Defaults to the identity transform.\n\n:param flange: Optional location describing a robot control point other than the default. If\n not specified, the robot's default control point will be used.\n\n:param flange_offset: Optional offset transform to apply to the flange location before\n moving. Defaults to the identity transform.\n\n:param path_type: Optional path type to use during the move. See ``PathType`` enum for options.\n defaults to the ``PathType.SAFE`` if not given.\n\n:param trajectory_type: Optional trajectory type to use during the move. See ``TrajectoryType``\n enum for options. Defaults to the robot's default trajectory type if not given.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * ``location`` is a ``LocationAsLabwareIndex`` and the referenced labware id is not yet\n registered.\n * ``location`` is a ``LocationAsLabwareIndex`` and the ``location_index`` is out of bounds\n\n:raises ValidatorError: ``ValidatorErrorCode.TRANSFORM_SIZE_LIMIT_EXCEEDED`` if either\n ``location_offset`` or ``flange_offset`` contains a linear distance exceeding 100 mm.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_LABWARE_TYPE`` if ``location`` is a\n ``LocationAsLabwareIndex`` and the referenced labware is not a type that supports indexing.\n (ex. AGAR_PLATE)", "properties": { "type": { "const": "MOVE_TO_LOCATION", "default": "MOVE_TO_LOCATION", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ], "title": "Location" }, "location_offset": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Location Offset", "type": "array" }, "flange": { "anyOf": [ { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ] }, { "type": "null" } ], "default": null, "title": "Flange" }, "flange_offset": { "items": { "items": { "type": "number" }, "type": "array" }, "title": "Flange Offset", "type": "array" }, "path_type": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Path Type" }, "trajectory_type": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Trajectory Type" } }, "required": [ "robot_id", "location" ], "title": "MOVE_TO_LOCATION", "type": "object" }, "Metadata": { "description": "TCode script metadata.", "properties": { "name": { "title": "Name", "type": "string" }, "timestamp": { "title": "Timestamp", "type": "string" }, "tcode_api_version": { "title": "Tcode Api Version", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Description" } }, "required": [ "name", "timestamp", "tcode_api_version" ], "title": "Metadata", "type": "object" }, "PAUSE": { "description": "Pause execution until resumed by the user.\n\nWhile ``WAIT`` delays a target robot for a set duration, ``PAUSE`` halts the entire fleet\nuntil the user manually resumes execution.\n\n:param type: see :class: ``_TCodeBase``", "properties": { "type": { "const": "PAUSE", "default": "PAUSE", "title": "Type", "type": "string" } }, "title": "PAUSE", "type": "object" }, "PICK_UP_LABWARE": { "description": "Pick up the target labware with the target robot's currently held plate gripper.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware to pick up, as previously assigned by\n ``ADD_LABWARE``.\n:param grasp_type: Optional grasp type to use when picking up the labware. See\n :class: ``GraspType`` enum for options. Defaults to ``GraspType.UNSPECIFIED``.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * ``labware_id`` is not registered to a labware\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a plate gripper.", "properties": { "type": { "const": "PICK_UP_LABWARE", "default": "PICK_UP_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "grasp_type": { "default": "UNSPECIFIED", "title": "Grasp Type", "type": "string" } }, "required": [ "robot_id", "labware_id" ], "title": "PICK_UP_LABWARE", "type": "object" }, "PICK_UP_PIPETTE_TIP": { "description": "Pick up pipette tip(s) with the target robot's currently held pipette at the specified\n location.\n\n:note: This is a lower-level TCode command - most users are suggested to use\n :class: ``RETRIEVE_PIPETTE_TIP_GROUP`` instead.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: Location at which to pick up the pipette tip(s).\n :warning: The location is currently unverified!\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP`` if the targeted robot\n is currently holding a pipette tip group.", "properties": { "type": { "const": "PICK_UP_PIPETTE_TIP", "default": "PICK_UP_PIPETTE_TIP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ], "title": "Location" } }, "required": [ "robot_id", "location" ], "title": "PICK_UP_PIPETTE_TIP", "type": "object" }, "PUT_DOWN_LABWARE": { "description": "Put down the target robot's currently held labware at the specified location.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param holder: Holder in which to put down the labware.\n :warning: The holder is currently unverified!\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a plate gripper.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` it the targeted robot is has a\n plate gripper that is not holding a labware.", "properties": { "type": { "const": "PUT_DOWN_LABWARE", "default": "PUT_DOWN_LABWARE", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "holder": { "discriminator": { "mapping": { "LabwareHolderName": "#/$defs/LabwareHolderName", "LabwareId": "#/$defs/LabwareId" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LabwareHolderName" }, { "$ref": "#/$defs/LabwareId" } ], "title": "Holder" } }, "required": [ "robot_id", "holder" ], "title": "PUT_DOWN_LABWARE", "type": "object" }, "PUT_DOWN_PIPETTE_TIP": { "description": "Put down the target robot's currently held pipette tip(s) at the specified location.\n\n:note: This is a lower-level TCode command - most users are suggested to use\n :class: ``RETURN_PIPETTE_TIP_GROUP`` or :class: ``DISCARD_PIPETTE_TIP_GROUP`` instead.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param location: Location at which to put down the pipette tip(s).\n :warning: The location is currently unverified!\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The targeted robot's currently held pipette tip group id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.", "properties": { "type": { "const": "PUT_DOWN_PIPETTE_TIP", "default": "PUT_DOWN_PIPETTE_TIP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "location": { "discriminator": { "mapping": { "LocationAsLabwareIndex": "#/$defs/LocationAsLabwareIndex", "LocationAsNodeId": "#/$defs/LocationAsNodeId", "LocationRelativeToCurrentPosition": "#/$defs/LocationRelativeToCurrentPosition", "LocationRelativeToLabware": "#/$defs/LocationRelativeToLabware", "LocationRelativeToWorld": "#/$defs/LocationRelativeToWorld" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LocationAsLabwareIndex" }, { "$ref": "#/$defs/LocationAsNodeId" }, { "$ref": "#/$defs/LocationRelativeToCurrentPosition" }, { "$ref": "#/$defs/LocationRelativeToLabware" }, { "$ref": "#/$defs/LocationRelativeToWorld" } ], "title": "Location" } }, "required": [ "robot_id", "location" ], "title": "PUT_DOWN_PIPETTE_TIP", "type": "object" }, "PipetteTipBoxDescription": { "description": "Description of a pipette tip box.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "PipetteTipBox", "default": "PipetteTipBox", "title": "Type", "type": "string" }, "grid": { "$ref": "#/$defs/GridDescription" }, "full": { "title": "Full", "type": "boolean" }, "pipette_tip": { "$ref": "#/$defs/PipetteTipDescription" } }, "required": [ "x_length", "y_length", "z_length", "grid", "full", "pipette_tip" ], "title": "PipetteTipBoxDescription", "type": "object" }, "PipetteTipBoxDescriptor": { "description": "PipetteTipBoxDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "PipetteTipBox", "default": "PipetteTipBox", "title": "Type", "type": "string" }, "grid": { "anyOf": [ { "$ref": "#/$defs/GridDescriptor" }, { "type": "null" } ], "default": null }, "full": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Full" }, "pipette_tip": { "anyOf": [ { "$ref": "#/$defs/PipetteTipDescriptor" }, { "type": "null" } ], "default": null } }, "title": "PipetteTipBoxDescriptor", "type": "object" }, "PipetteTipDescription": { "description": "Description of a pipette tip.", "properties": { "type": { "const": "PipetteTip", "default": "PipetteTip", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "has_filter": { "title": "Has Filter", "type": "boolean" }, "height": { "$ref": "#/$defs/ValueWithUnits" }, "flange_height": { "$ref": "#/$defs/ValueWithUnits" }, "max_volume": { "$ref": "#/$defs/ValueWithUnits" }, "min_volume": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "has_filter", "height", "flange_height", "max_volume", "min_volume" ], "title": "PipetteTipDescription", "type": "object" }, "PipetteTipDescriptor": { "description": "PipetteTipDescription with optional parameters.", "properties": { "type": { "const": "PipetteTip", "default": "PipetteTip", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "has_filter": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "title": "Has Filter" }, "height": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "flange_height": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "PipetteTipDescriptor", "type": "object" }, "PipetteTipGroupDescriptor": { "description": "PipetteTipGroupDescription with optional parameters.", "properties": { "type": { "const": "PipetteTipGroup", "default": "PipetteTipGroup", "title": "Type", "type": "string" }, "row_count": { "title": "Row Count", "type": "integer" }, "column_count": { "title": "Column Count", "type": "integer" }, "pipette_tip_tags": { "items": { "type": "string" }, "title": "Pipette Tip Tags", "type": "array" }, "pipette_tip_named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Pipette Tip Named Tags", "type": "object" } }, "required": [ "row_count", "column_count" ], "title": "PipetteTipGroupDescriptor", "type": "object" }, "ProbeDescriptor": { "properties": { "type": { "const": "Probe", "default": "Probe", "title": "Type", "type": "string" } }, "title": "ProbeDescriptor", "type": "object" }, "REMOVE_LABWARE_LID": { "description": "Remove the lid from the target labware.\n\n:error: This command is not yet implemented, and will always raise a ``ValidatorError`` with\n code ``ValidatorErrorCode.NOT_IMPLEMENTED``.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware from which to remove the lid, as previously\n assigned by ``ADD_LABWARE``.\n:param storage_holder: Optional holder at which to store the removed lid. If not specified,\n the lid will be stored in a default holder, if available.\n\nraises ValidatorError: ``ValidatorErrorCode.NOT_IMPLEMENTED`` all the time.", "properties": { "type": { "const": "REMOVE_LABWARE_LID", "default": "REMOVE_LABWARE_LID", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "storage_holder": { "anyOf": [ { "discriminator": { "mapping": { "LabwareHolderName": "#/$defs/LabwareHolderName", "LabwareId": "#/$defs/LabwareId" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/LabwareHolderName" }, { "$ref": "#/$defs/LabwareId" } ] }, { "type": "null" } ], "default": null, "title": "Storage Holder" } }, "required": [ "robot_id", "labware_id" ], "title": "REMOVE_LABWARE_LID", "type": "object" }, "REPLACE_LABWARE_LID": { "description": "Replace the lid on the target labware.\n\n:error: This command is not yet implemented, and will always raise a ``ValidatorError`` with\n code ``ValidatorErrorCode.NOT_IMPLEMENTED``.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param labware_id: Identifier of the labware on which to replace the lid, as previously\n assigned by ``ADD_LABWARE``.\n:param lid_id: Optional identifier of the lid to replace. If not specified, the most recently\n removed lid will be used, if available.`\n\nraises ValidatorError: ``ValidatorErrorCode.NOT_IMPLEMENTED`` all the time.", "properties": { "type": { "const": "REPLACE_LABWARE_LID", "default": "REPLACE_LABWARE_LID", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "labware_id": { "title": "Labware Id", "type": "string" }, "lid_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Lid Id" } }, "required": [ "robot_id", "labware_id" ], "title": "REPLACE_LABWARE_LID", "type": "object" }, "RETRIEVE_PIPETTE_TIP_GROUP": { "description": "Pick up the target pipette tip group using the target robot's currently held pipette.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param id: Target pipette tip group identifier.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * ``id`` is not registered to a pipette tip group\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUP`` if the targeted\n robot is currently holding a pipette tip group.", "properties": { "type": { "const": "RETRIEVE_PIPETTE_TIP_GROUP", "default": "RETRIEVE_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "robot_id", "id" ], "title": "RETRIEVE_PIPETTE_TIP_GROUP", "type": "object" }, "RETRIEVE_TOOL": { "description": "Pick up the target tool using the target robot's empty flange.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param id: Target tool identifier.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * ``id`` is not registered to a tool\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` if the targeted robot is already\n holding the targeted tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.WRONG_TOOL_MOUNTED`` if the targeted robot is\n currently holding a tool that is not the targeted tool.", "properties": { "type": { "const": "RETRIEVE_TOOL", "default": "RETRIEVE_TOOL", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "robot_id", "id" ], "title": "RETRIEVE_TOOL", "type": "object" }, "RETURN_PIPETTE_TIP_GROUP": { "description": "Return the pipette tip group currently held by the target robot to the location from which\n it was picked up.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n * The targeted robot's currently held pipette tip group id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.TOOL_NOT_MOUNTED`` if the targeted robot is not\n currently holding a tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_TOOL`` if the targeted robot has a tool\n mounted that is not a pipette.\n\n:raises ValidatorError: ``ValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED`` if the targeted robot's\n currently held pipette does not have a pipette tip mounted.\n\n:raises ValidatorError: ``ValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP`` if the targeted robot's\n currently held pipette has a pipette tip group mounted with no pipette tips.", "properties": { "type": { "const": "RETURN_PIPETTE_TIP_GROUP", "default": "RETURN_PIPETTE_TIP_GROUP", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "robot_id" ], "title": "RETURN_PIPETTE_TIP_GROUP", "type": "object" }, "RETURN_TOOL": { "description": "Return the tool currently held by the target robot to the tool rack.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * The targeted robot's currently held tool id is not registered\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` if the targeted robot is already\n holding the targeted tool.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUP`` if the targeted\n robot is currently holding a pipette with a pipette tip group.\n\n:raises ValidatorError: ``ValidatorErrorCode.UNEXPECTED_LABWARE`` if the targeted robot is\n currently holding a plate gripper which is in turn holding a labware.", "properties": { "type": { "const": "RETURN_TOOL", "default": "RETURN_TOOL", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" } }, "required": [ "robot_id" ], "title": "RETURN_TOOL", "type": "object" }, "RobotDescriptor": { "description": "Descriptor for a robot in the fleet.", "properties": { "type": { "const": "Robot", "default": "Robot", "title": "Type", "type": "string" }, "serial_number": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Serial Number" }, "tools": { "additionalProperties": { "discriminator": { "mapping": { "EightChannelPipette": "#/$defs/EightChannelPipetteDescriptor", "Gripper": "#/$defs/GripperDescriptor", "Probe": "#/$defs/ProbeDescriptor", "SingleChannelPipette": "#/$defs/SingleChannelPipetteDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/SingleChannelPipetteDescriptor" }, { "$ref": "#/$defs/EightChannelPipetteDescriptor" }, { "$ref": "#/$defs/ProbeDescriptor" }, { "$ref": "#/$defs/GripperDescriptor" } ] }, "title": "Tools", "type": "object" }, "tool_holders": { "additionalProperties": { "$ref": "#/$defs/ToolHolderDescriptor" }, "title": "Tool Holders", "type": "object" }, "labware_holders": { "additionalProperties": { "$ref": "#/$defs/LabwareHolderDescriptor" }, "title": "Labware Holders", "type": "object" } }, "title": "RobotDescriptor", "type": "object" }, "RoundBottomDescription": { "description": "Descriptor for a round bottom well.", "properties": { "type": { "const": "Round", "default": "Round", "title": "Type", "type": "string" } }, "title": "RoundBottomDescription", "type": "object" }, "RoundBottomDescriptor": { "description": "RoundBottomDescription with optional parameters.", "properties": { "type": { "const": "Round", "default": "Round", "title": "Type", "type": "string" } }, "title": "RoundBottomDescriptor", "type": "object" }, "SEND_WEBHOOK": { "description": "Send a webhook call to the specified URL with the specified payload\n\n:param type: see :class: ``_TCodeBase``\n:param pause_execution: whether to pause execution of the script when this command is run\n:param ignore_external_error: Optional. Whether to ignore any error generated by destination server. This is useful for, e.g., a notification-only integration where it is undesirable to stop the tcode script simply because the destination server is temporarily offline. Defaults to False.\n:param url: The URL to send the request to. This URL should include the protocol prefix (e.g. https://)\n:param payload: An optional payload to include in the request. The maximum payload size is 32KiB\n\nOn encountering command, the scheduler will send an HTTP POST request to\nthe specified URL with a JSON body as specified in :class:`servicer.integrator.WebHookBody`", "properties": { "type": { "const": "SEND_WEBHOOK", "default": "SEND_WEBHOOK", "title": "Type", "type": "string" }, "pause_execution": { "title": "Pause Execution", "type": "boolean" }, "ignore_external_error": { "default": false, "title": "Ignore External Error", "type": "boolean" }, "url": { "title": "Url", "type": "string" }, "payload": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Payload" } }, "required": [ "pause_execution", "url" ], "title": "SEND_WEBHOOK", "type": "object" }, "SWAP_TO_TOOL": { "description": "Return any tool currently held by the target robot to the tool rack, then pick up the target\n tool using the target robot's empty flange.\n\n:warning: This command doesn't yet have all of the validation functionality of ``RETRIEVE_TOOL``\n and ``RETURN_TOOL`` - for example, it doesn't yet error if the robot is holding a pipette\n with a pipette tip group, or a plate gripper holding a labware.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param id: Target tool identifier.\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if any of the following are true:\n * ``robot_id`` is not registered to a robot\n * ``id`` is not registered to a tool\n\n:raises ValidatorError: ``ValidatorErrorCode.UNNECESSARY`` if the targeted robot is already\n holding the targeted tool.", "properties": { "type": { "const": "SWAP_TO_TOOL", "default": "SWAP_TO_TOOL", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "id": { "title": "Id", "type": "string" } }, "required": [ "robot_id", "id" ], "title": "SWAP_TO_TOOL", "type": "object" }, "SingleChannelPipetteDescriptor": { "properties": { "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_speed": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "SingleChannelPipette", "default": "SingleChannelPipette", "title": "Type", "type": "string" } }, "title": "SingleChannelPipetteDescriptor", "type": "object" }, "ToolHolderDescriptor": { "description": "Descriptor for an entity that can hold tools.", "properties": { "type": { "const": "ToolHolder", "default": "ToolHolder", "title": "Type", "type": "string" } }, "title": "ToolHolderDescriptor", "type": "object" }, "TrashDescription": { "description": "Description of a waste disposal container.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "Trash", "default": "Trash", "title": "Type", "type": "string" }, "well": { "$ref": "#/$defs/WellDescription" } }, "required": [ "x_length", "y_length", "z_length", "well" ], "title": "TrashDescription", "type": "object" }, "TrashDescriptor": { "description": "TrashDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "Trash", "default": "Trash", "title": "Type", "type": "string" }, "well": { "anyOf": [ { "$ref": "#/$defs/WellDescriptor" }, { "type": "null" } ], "default": null } }, "title": "TrashDescriptor", "type": "object" }, "TubeDescription": { "description": "Description of a tube.", "properties": { "type": { "const": "Tube", "default": "Tube", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "depth": { "$ref": "#/$defs/ValueWithUnits" }, "shape": { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescription", "Circle": "#/$defs/CircleDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescription" }, { "$ref": "#/$defs/AxisAlignedRectangleDescription" } ], "title": "Shape" }, "bottom_shape": { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescription", "Flat": "#/$defs/FlatBottomDescription", "Round": "#/$defs/RoundBottomDescription", "V-Shape": "#/$defs/VBottomDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescription" }, { "$ref": "#/$defs/FlatBottomDescription" }, { "$ref": "#/$defs/RoundBottomDescription" }, { "$ref": "#/$defs/VBottomDescription" } ], "title": "Bottom Shape" }, "min_volume": { "$ref": "#/$defs/ValueWithUnits" }, "max_volume": { "$ref": "#/$defs/ValueWithUnits" }, "top_height": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "depth", "shape", "bottom_shape", "min_volume", "max_volume", "top_height" ], "title": "TubeDescription", "type": "object" }, "TubeDescriptor": { "description": "TubeDescription with optional parameters.", "properties": { "type": { "const": "Tube", "default": "Tube", "title": "Type", "type": "string" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "depth": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "shape": { "anyOf": [ { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescriptor", "Circle": "#/$defs/CircleDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescriptor" }, { "$ref": "#/$defs/AxisAlignedRectangleDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Shape" }, "bottom_shape": { "anyOf": [ { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescriptor", "Flat": "#/$defs/FlatBottomDescriptor", "Round": "#/$defs/RoundBottomDescriptor", "V-Shape": "#/$defs/VBottomDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescriptor" }, { "$ref": "#/$defs/FlatBottomDescriptor" }, { "$ref": "#/$defs/RoundBottomDescriptor" }, { "$ref": "#/$defs/VBottomDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Bottom Shape" }, "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "top_height": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "TubeDescriptor", "type": "object" }, "TubeHolderDescription": { "description": "Description of a tube holder.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "TubeHolder", "default": "TubeHolder", "title": "Type", "type": "string" }, "grid": { "$ref": "#/$defs/GridDescription" }, "tube": { "$ref": "#/$defs/TubeDescription" } }, "required": [ "x_length", "y_length", "z_length", "grid", "tube" ], "title": "TubeHolderDescription", "type": "object" }, "TubeHolderDescriptor": { "description": "TubeHolderDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "TubeHolder", "default": "TubeHolder", "title": "Type", "type": "string" }, "grid": { "anyOf": [ { "$ref": "#/$defs/GridDescriptor" }, { "type": "null" } ], "default": null }, "tube": { "anyOf": [ { "$ref": "#/$defs/TubeDescriptor" }, { "type": "null" } ], "default": null } }, "title": "TubeHolderDescriptor", "type": "object" }, "VBottomDescription": { "description": "Description of a V-bottom well (think trough).", "properties": { "type": { "const": "V-Shape", "default": "V-Shape", "title": "Type", "type": "string" }, "direction": { "enum": [ "x-axis", "y-axis" ], "title": "Direction", "type": "string" }, "offset": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "direction", "offset" ], "title": "VBottomDescription", "type": "object" }, "VBottomDescriptor": { "description": "VBottomDescription with optional parameters.", "properties": { "type": { "const": "V-Shape", "default": "V-Shape", "title": "Type", "type": "string" }, "direction": { "anyOf": [ { "enum": [ "x-axis", "y-axis" ], "type": "string" }, { "type": "null" } ], "default": null, "title": "Direction" }, "offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "VBottomDescriptor", "type": "object" }, "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" }, "WAIT": { "description": "Delay the subsequent commands to the target robot for the specified duration.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param duration: Duration to wait; expects time units\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``duration`` is not in time units.", "properties": { "type": { "const": "WAIT", "default": "WAIT", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "duration": { "$ref": "#/$defs/ValueWithUnits" } }, "required": [ "robot_id", "duration" ], "title": "WAIT", "type": "object" }, "WellDescription": { "description": "Description of a well in a labware.", "properties": { "type": { "const": "Well", "default": "Well", "title": "Type", "type": "string" }, "depth": { "$ref": "#/$defs/ValueWithUnits" }, "shape": { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescription", "Circle": "#/$defs/CircleDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescription" }, { "$ref": "#/$defs/AxisAlignedRectangleDescription" } ], "title": "Shape" }, "bottom_shape": { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescription", "Flat": "#/$defs/FlatBottomDescription", "Round": "#/$defs/RoundBottomDescription", "V-Shape": "#/$defs/VBottomDescription" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescription" }, { "$ref": "#/$defs/FlatBottomDescription" }, { "$ref": "#/$defs/RoundBottomDescription" }, { "$ref": "#/$defs/VBottomDescription" } ], "title": "Bottom Shape" }, "min_volume": { "$ref": "#/$defs/ValueWithUnits" }, "max_volume": { "$ref": "#/$defs/ValueWithUnits" }, "well_tags": { "items": { "type": "string" }, "title": "Well Tags", "type": "array" }, "well_named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Well Named Tags", "type": "object" } }, "required": [ "depth", "shape", "bottom_shape", "min_volume", "max_volume" ], "title": "WellDescription", "type": "object" }, "WellDescriptor": { "description": "WellDescription with optional parameters.", "properties": { "type": { "const": "Well", "default": "Well", "title": "Type", "type": "string" }, "depth": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "shape": { "anyOf": [ { "discriminator": { "mapping": { "AxisAlignedRectangle": "#/$defs/AxisAlignedRectangleDescriptor", "Circle": "#/$defs/CircleDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CircleDescriptor" }, { "$ref": "#/$defs/AxisAlignedRectangleDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Shape" }, "bottom_shape": { "anyOf": [ { "discriminator": { "mapping": { "Conical": "#/$defs/ConicalBottomDescriptor", "Flat": "#/$defs/FlatBottomDescriptor", "Round": "#/$defs/RoundBottomDescriptor", "V-Shape": "#/$defs/VBottomDescriptor" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/ConicalBottomDescriptor" }, { "$ref": "#/$defs/FlatBottomDescriptor" }, { "$ref": "#/$defs/RoundBottomDescriptor" }, { "$ref": "#/$defs/VBottomDescriptor" } ] }, { "type": "null" } ], "default": null, "title": "Bottom Shape" }, "min_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "max_volume": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null } }, "title": "WellDescriptor", "type": "object" }, "WellPlateDescription": { "description": "Description of a well plate.\n\n:note: The exception to the 'no optional attributes' rule is `lid_offset` and `lid`.\n These attributes default to None, assuming that a described labware has no lid.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "$ref": "#/$defs/ValueWithUnits" }, "y_length": { "$ref": "#/$defs/ValueWithUnits" }, "z_length": { "$ref": "#/$defs/ValueWithUnits" }, "type": { "const": "WellPlate", "default": "WellPlate", "title": "Type", "type": "string" }, "grid": { "$ref": "#/$defs/GridDescription" }, "well": { "$ref": "#/$defs/WellDescription" }, "lid_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "lid": { "anyOf": [ { "$ref": "#/$defs/LidDescription" }, { "type": "null" } ], "default": null } }, "required": [ "x_length", "y_length", "z_length", "grid", "well" ], "title": "WellPlateDescription", "type": "object" }, "WellPlateDescriptor": { "description": "WellPlateDescription with optional parameters.", "properties": { "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "named_tags": { "additionalProperties": { "anyOf": [ { "type": "string" }, { "type": "integer" }, { "type": "number" }, { "type": "boolean" } ] }, "title": "Named Tags", "type": "object" }, "x_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "y_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "z_length": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "type": { "const": "WellPlate", "default": "WellPlate", "title": "Type", "type": "string" }, "grid": { "anyOf": [ { "$ref": "#/$defs/GridDescriptor" }, { "type": "null" } ], "default": null }, "well": { "anyOf": [ { "$ref": "#/$defs/WellDescriptor" }, { "type": "null" } ], "default": null }, "lid_offset": { "anyOf": [ { "$ref": "#/$defs/ValueWithUnits" }, { "type": "null" } ], "default": null }, "lid": { "anyOf": [ { "$ref": "#/$defs/LidDescriptor" }, { "type": "null" } ], "default": null } }, "title": "WellPlateDescriptor", "type": "object" } }, "required": [ "metadata" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field commands: list[TCode] [Optional]¶
- field metadata: Metadata [Required]¶
- classmethod new(name, description=None)¶
Create a new, empty TCode script with the given name and optional description.
- Parameters:
name (
str) – Name of the TCode script.description (
str|None) – Optional description of the TCode script.
- Return type:
- Returns:
A new, empty TCode script.
- classmethod read(file_object)¶
Load a TCode script from a file-like object.
- Parameters:
file_object (
TextIO) – A file-like object containing the TCode script.- Return type:
- Returns:
The loaded TCode script.
- pydantic model tcode_api.api.commands.WAIT¶
Delay the subsequent commands to the target robot for the specified duration.
- Parameters:
type – see :class:
_TCodeBaserobot_id – see :class:
_RobotSpecificTCodeBaseduration – Duration to wait; expects time units
- Raises:
ValidatorError –
ValidatorErrorCode.ID_NOT_FOUNDifrobot_idis not registered to a robot.ValidatorError –
ValidatorErrorCode.UNITS_ERRORifdurationis not in time units.
Show JSON schema
{ "title": "WAIT", "description": "Delay the subsequent commands to the target robot for the specified duration.\n\n:param type: see :class: ``_TCodeBase``\n:param robot_id: see :class: ``_RobotSpecificTCodeBase``\n:param duration: Duration to wait; expects time units\n\n:raises ValidatorError: ``ValidatorErrorCode.ID_NOT_FOUND`` if ``robot_id`` is not registered\n to a robot.\n:raises ValidatorError: ``ValidatorErrorCode.UNITS_ERROR`` if ``duration`` is not in time units.", "type": "object", "properties": { "type": { "const": "WAIT", "default": "WAIT", "title": "Type", "type": "string" }, "robot_id": { "title": "Robot Id", "type": "string" }, "duration": { "$ref": "#/$defs/ValueWithUnits" } }, "$defs": { "ValueWithUnits": { "description": "A numeric value with associated units.\n\n:note: The following values are all equivalent:\n\n ``ValueWithUnits(magnitude=0.005, units=\"L\")``\n\n ``ValueWithUnits(magnitude=5, units=\"mL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"uL\")``\n\n ``ValueWithUnits(magnitude=5000, units=\"mm\u00b3\")``\n\n:note: In the python implementation, ``pint`` is used to resolve units. see `tcode_api.units`.", "properties": { "type": { "const": "ValueWithUnits", "default": "ValueWithUnits", "title": "Type", "type": "string" }, "magnitude": { "title": "Magnitude", "type": "number" }, "units": { "title": "Units", "type": "string" } }, "required": [ "magnitude", "units" ], "title": "ValueWithUnits", "type": "object" } }, "required": [ "robot_id", "duration" ] }
- Config:
strict: bool = True
extra: str = ignore
- Fields:
- field duration: ValueWithUnits [Required]¶
- field type: Literal['WAIT'] = 'WAIT'¶