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, pint is 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:

ValueWithUnits

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: _TCodeBase

  • id – 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:

ValidatorErrorValidatorErrorCode.ID_EXISTS if id is 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: _TCodeBase

  • id – 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:

ValidatorErrorValidatorErrorCode.ID_EXISTS if id is 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: _TCodeBase

  • id – 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:

ValidatorErrorValidatorErrorCode.ID_EXISTS if id is 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 _RobotSpecificTCodeBase because the robot_id parameter is used to resolve the tool, NOT to subsequently target the command.

Parameters:
  • type – see :class: _TCodeBase

  • id – 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:
  • ValidatorErrorValidatorErrorCode.ID_EXISTS if id is already registered to a tool.

  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • volume – Aspiration volume; expects volume units

  • speed – Aspiration speed; expects volume/time units

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is not registered to a robot, or if the targeted robot’s currently held tool id is not registered.

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held pipette does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.

  • ValidatorErrorValidatorErrorCode.UNITS_ERROR if volume is not in volume units, or if speed is not in volume/time units.

  • ValidatorErrorValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDED if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • location – 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_HEIGHT only 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:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered * The labware id referenced in location is not registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not compatible with probing.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held tool is a pipette that does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • location – 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_HEIGHT only 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:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered * The labware id referenced in location is not registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not compatible with probing.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held tool is a pipette that does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • z_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:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not compatible with probing.

  • ValidatorErrorValidatorErrorCode.NOT_IMPLEMENTED if any of the following are true: * z_only is False, and the targeted robot’s currently held tool is an eight-channel pipette * z_only is 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: _TCodeBase

  • text – 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • description – Full description of the labware to create. See also :class: LabwareDescription.

  • holder – The holder in which to place the new labware.

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is not registered to a robot.

  • ValidatorErrorValidatorErrorCode.UNITS_ERROR if description contains 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • labware_id – Identifier of the labware to remove, as previously assigned by ADD_LABWARE.

Raises:

ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is 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 registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held pipette does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • volume – Dispense volume; expects volume units

  • speed – Dispense speed; expects volume/time units

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is not registered to a robot, or if the targeted robot’s currently held tool id is not registered.

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held pipette does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if the targeted robot’s currently held pipette has a pipette tip group mounted with no pipette tips.

  • ValidatorErrorValidatorErrorCode.UNITS_ERROR if volume is not in volume units, or if speed is not in volume/time units.

  • ValidatorErrorValidatorErrorCode.PIPETTE_VOLUME_LIMIT_EXCEEDED if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • joint_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:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is not registered to a robot.

  • ValidatorErrorValidatorErrorCode.JOINT_COUNT_MISMATCH if the length of joint_positions is not four.

  • ValidatorErrorValidatorErrorCode.UNITS_ERROR if any of the values in joint_positions are 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 location as a LocationAsLabwareIndex is fully validated. Other location types are not yet validated before runtime, and may result in unexpected behavior.

Parameters:
  • type – see :class: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • location – 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 PathType enum for options. defaults to the PathType.SAFE if not given.

  • trajectory_type – Optional trajectory type to use during the move. See TrajectoryType enum for options. Defaults to the robot’s default trajectory type if not given.

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * location is a LocationAsLabwareIndex and the referenced labware id is not yet registered. * location is a LocationAsLabwareIndex and the location_index is out of bounds

  • ValidatorErrorValidatorErrorCode.TRANSFORM_SIZE_LIMIT_EXCEEDED if either location_offset or flange_offset contains a linear distance exceeding 100 mm.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_LABWARE_TYPE if location is a LocationAsLabwareIndex and 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 WAIT delays a target robot for a set duration, PAUSE halts 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • labware_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: GraspType enum for options. Defaults to GraspType.UNSPECIFIED.

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered * labware_id is not registered to a labware

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if 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_GROUP instead.

Parameters:
  • type – see :class: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • location – Location at which to pick up the pipette tip(s). :warning: The location is currently unverified!

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_PIPETTE_TIP if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • holder – Holder in which to put down the labware. :warning: The holder is currently unverified!

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a plate gripper.

  • ValidatorErrorValidatorErrorCode.UNNECESSARY it 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_GROUP or :class: DISCARD_PIPETTE_TIP_GROUP instead.

Parameters:
  • type – see :class: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • location – Location at which to put down the pipette tip(s). :warning: The location is currently unverified!

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is 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 registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held pipette does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if 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 ValidatorError with code ValidatorErrorCode.NOT_IMPLEMENTED.

Parameters:
  • type – see :class: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • labware_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_IMPLEMENTED all 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 ValidatorError with code ValidatorErrorCode.NOT_IMPLEMENTED.

Parameters:
  • type – see :class: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • labware_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_IMPLEMENTED all 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • id – Target pipette tip group identifier.

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered * id is not registered to a pipette tip group

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUP if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • id – Target tool identifier.

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * id is not registered to a tool

  • ValidatorErrorValidatorErrorCode.UNNECESSARY if the targeted robot is already holding the targeted tool.

  • ValidatorErrorValidatorErrorCode.WRONG_TOOL_MOUNTED if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is 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 registered

  • ValidatorErrorValidatorErrorCode.TOOL_NOT_MOUNTED if the targeted robot is not currently holding a tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_TOOL if the targeted robot has a tool mounted that is not a pipette.

  • ValidatorErrorValidatorErrorCode.PIPETTE_TIP_NOT_MOUNTED if the targeted robot’s currently held pipette does not have a pipette tip mounted.

  • ValidatorErrorValidatorErrorCode.EMPTY_PIPETTE_TIP_GROUP if 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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * The targeted robot’s currently held tool id is not registered

  • ValidatorErrorValidatorErrorCode.UNNECESSARY if the targeted robot is already holding the targeted tool.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_PIPETTE_TIP_GROUP if the targeted robot is currently holding a pipette with a pipette tip group.

  • ValidatorErrorValidatorErrorCode.UNEXPECTED_LABWARE if 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: _TCodeBase

  • pause_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.WebHookBody

Show 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_TOOL and RETURN_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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • id – Target tool identifier.

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if any of the following are true: * robot_id is not registered to a robot * id is not registered to a tool

  • ValidatorErrorValidatorErrorCode.UNNECESSARY if 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:

TCodeScript

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:

TCodeScript

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: _TCodeBase

  • robot_id – see :class: _RobotSpecificTCodeBase

  • duration – Duration to wait; expects time units

Raises:
  • ValidatorErrorValidatorErrorCode.ID_NOT_FOUND if robot_id is not registered to a robot.

  • ValidatorErrorValidatorErrorCode.UNITS_ERROR if duration is 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'